Issue #130 background download of updates

This commit is contained in:
Sergey Eremin
2017-04-11 18:58:02 +03:00
parent 72d8280a3f
commit ccade47946
7 changed files with 67 additions and 14 deletions

View File

@@ -19,6 +19,7 @@ public class PreferenceActivity extends android.preference.PreferenceActivity {
public static final String PREFERENCE_UI_THEME = "PREFERENCE_UI_THEME";
public static final String PREFERENCE_BACKGROUND_UPDATE_INTERVAL = "PREFERENCE_BACKGROUND_UPDATE_INTERVAL";
public static final String PREFERENCE_DELETE_APK_AFTER_INSTALL = "PREFERENCE_DELETE_APK_AFTER_INSTALL";
public static final String PREFERENCE_BACKGROUND_UPDATE_DOWNLOAD = "PREFERENCE_BACKGROUND_UPDATE_DOWNLOAD";
public static final String PREFERENCE_BACKGROUND_UPDATE_INSTALL = "PREFERENCE_BACKGROUND_UPDATE_INSTALL";
public static final String PREFERENCE_REQUESTED_LANGUAGE = "PREFERENCE_REQUESTED_LANGUAGE";
public static final String PREFERENCE_DEVICE_TO_PRETEND_TO_BE = "PREFERENCE_DEVICE_TO_PRETEND_TO_BE";
@@ -74,6 +75,7 @@ public class PreferenceActivity extends android.preference.PreferenceActivity {
PreferenceCheckUpdatesFragment checkUpdatesFragment = new PreferenceCheckUpdatesFragment(this);
checkUpdatesFragment.setCheckForUpdates((ListPreference) findPreference(PREFERENCE_BACKGROUND_UPDATE_INTERVAL));
checkUpdatesFragment.setAlsoInstall((CheckBoxPreference) findPreference(PREFERENCE_BACKGROUND_UPDATE_INSTALL));
checkUpdatesFragment.setAlsoDownload((CheckBoxPreference) findPreference(PREFERENCE_BACKGROUND_UPDATE_DOWNLOAD));
checkUpdatesFragment.draw();
}

View File

@@ -1,5 +1,7 @@
package com.github.yeriomin.yalpstore;
import android.Manifest;
import android.content.pm.PackageManager;
import android.preference.CheckBoxPreference;
import android.preference.ListPreference;
import android.preference.Preference;
@@ -8,6 +10,7 @@ public class PreferenceCheckUpdatesFragment extends PreferenceFragment {
private ListPreference checkForUpdates;
private CheckBoxPreference alsoInstall;
private CheckBoxPreference alsoDownload;
public PreferenceCheckUpdatesFragment(PreferenceActivity activity) {
super(activity);
@@ -21,6 +24,10 @@ public class PreferenceCheckUpdatesFragment extends PreferenceFragment {
this.alsoInstall = alsoInstall;
}
public void setAlsoDownload(CheckBoxPreference alsoDownload) {
this.alsoDownload = alsoDownload;
}
@Override
public void draw() {
checkForUpdates.setSummary(activity.getString(getUpdateSummaryStringId(checkForUpdates.getValue())));
@@ -30,20 +37,13 @@ public class PreferenceCheckUpdatesFragment extends PreferenceFragment {
int interval = parseInt((String) newValue);
UpdateChecker.enable(activity, interval);
preference.setSummary(activity.getString(getUpdateSummaryStringId((String) newValue)));
alsoDownload.setEnabled(interval != 0);
alsoInstall.setEnabled(interval != 0);
return true;
}
});
checkForUpdates.getOnPreferenceChangeListener().onPreferenceChange(checkForUpdates, checkForUpdates.getValue());
alsoInstall.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
if ((Boolean) newValue) {
new CheckSuTask(activity).execute();
}
return true;
}
});
alsoInstall.setOnPreferenceChangeListener(new AlsoInstallOnPreferenceChangeListener());
}
private int getUpdateSummaryStringId(String intervalString) {
@@ -77,4 +77,26 @@ public class PreferenceCheckUpdatesFragment extends PreferenceFragment {
return 0;
}
}
private class AlsoInstallOnPreferenceChangeListener implements Preference.OnPreferenceChangeListener {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
if ((Boolean) newValue) {
if (isPrivileged()) {
return true;
} else {
new CheckSuTask(activity).execute();
}
}
return true;
}
private boolean isPrivileged() {
PackageManager pm = activity.getPackageManager();
return pm.checkPermission(Manifest.permission.INSTALL_PACKAGES, BuildConfig.APPLICATION_ID) == PackageManager.PERMISSION_GRANTED
&& pm.checkPermission(Manifest.permission.DELETE_PACKAGES, BuildConfig.APPLICATION_ID) == PackageManager.PERMISSION_GRANTED
;
}
}
}

View File

@@ -0,0 +1,20 @@
package com.github.yeriomin.yalpstore;
import android.Manifest;
import android.app.Activity;
import android.content.pm.PackageManager;
import android.widget.Toast;
public class PrivilegeChecker {
static public boolean check(Activity activity) {
PackageManager pm = activity.getPackageManager();
boolean privileged = pm.checkPermission(Manifest.permission.INSTALL_PACKAGES, BuildConfig.APPLICATION_ID) == PackageManager.PERMISSION_GRANTED
&& pm.checkPermission(Manifest.permission.DELETE_PACKAGES, BuildConfig.APPLICATION_ID) == PackageManager.PERMISSION_GRANTED
;
if (!privileged) {
Toast.makeText(activity, R.string.pref_not_privileged, Toast.LENGTH_LONG).show();
}
return privileged;
}
}

View File

@@ -48,7 +48,7 @@ public class UpdateChecker extends BroadcastReceiver {
if (updatesCount == 0) {
return;
}
if (needToInstallUpdates(context)) {
if (PreferenceActivity.getBoolean(context, PreferenceActivity.PREFERENCE_BACKGROUND_UPDATE_DOWNLOAD)) {
download(context, updatableApps);
} else {
createNotification(context, updatesCount);
@@ -75,10 +75,6 @@ public class UpdateChecker extends BroadcastReceiver {
return task;
}
private boolean needToInstallUpdates(Context context) {
return PreferenceActivity.getBoolean(context, PreferenceActivity.PREFERENCE_BACKGROUND_UPDATE_INSTALL);
}
private void createNotification(Context context, int updatesCount) {
Intent i = new Intent(context, UpdatableAppsActivity.class);
i.setAction(Intent.ACTION_VIEW);

View File

@@ -147,6 +147,9 @@
<string name="pref_background_update_install_summary_off">Только уведомление</string>
<string name="pref_background_update_install_summary_on">Обновления устанавливаются (root)</string>
<string name="pref_background_update_install">Установить найденные обновления (root)</string>
<string name="pref_background_update_download_summary_off">Только уведомление</string>
<string name="pref_background_update_download_summary_on">Обновления будут скачаны</string>
<string name="pref_background_update_download">Скачать найденные обновления</string>
<string name="pref_no_root">Это возможно только на рутованных устройствах</string>
<string name="pref_requested_language">Язык запросов к Play Store</string>
<string name="pref_requested_language_default">По-умолчанию</string>

View File

@@ -146,6 +146,9 @@
<string name="pref_background_update_install_summary_off">You only get a notification</string>
<string name="pref_background_update_install_summary_on">Updates are installed if found (root)</string>
<string name="pref_background_update_install">Also install the updates (root)</string>
<string name="pref_background_update_download_summary_off">You only get a notification</string>
<string name="pref_background_update_download_summary_on">Updates are downloaded if found</string>
<string name="pref_background_update_download">Also download the updates</string>
<string name="pref_no_root">This option is only available on rooted devices</string>
<string name="pref_requested_language">Play Store requests language</string>
<string name="pref_requested_language_default">Your default language</string>

View File

@@ -8,6 +8,13 @@
android:entries="@array/updateIntervalLabels"
android:entryValues="@array/updateIntervalValues" />
<CheckBoxPreference
android:defaultValue="false"
android:key="PREFERENCE_BACKGROUND_UPDATE_DOWNLOAD"
android:summaryOff="@string/pref_background_update_download_summary_off"
android:summaryOn="@string/pref_background_update_download_summary_on"
android:title="@string/pref_background_update_download" />
<CheckBoxPreference
android:dependency="PREFERENCE_BACKGROUND_UPDATE_DOWNLOAD"
android:defaultValue="false"
android:key="PREFERENCE_BACKGROUND_UPDATE_INSTALL"
android:summaryOff="@string/pref_background_update_install_summary_off"