diff --git a/app/src/main/java/com/github/yeriomin/yalpstore/PreferenceActivity.java b/app/src/main/java/com/github/yeriomin/yalpstore/PreferenceActivity.java
index 0e65ede4a..93b3c3db1 100644
--- a/app/src/main/java/com/github/yeriomin/yalpstore/PreferenceActivity.java
+++ b/app/src/main/java/com/github/yeriomin/yalpstore/PreferenceActivity.java
@@ -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();
}
diff --git a/app/src/main/java/com/github/yeriomin/yalpstore/PreferenceCheckUpdatesFragment.java b/app/src/main/java/com/github/yeriomin/yalpstore/PreferenceCheckUpdatesFragment.java
index 4bfcbd4ac..b3355c95d 100644
--- a/app/src/main/java/com/github/yeriomin/yalpstore/PreferenceCheckUpdatesFragment.java
+++ b/app/src/main/java/com/github/yeriomin/yalpstore/PreferenceCheckUpdatesFragment.java
@@ -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
+ ;
+ }
+ }
}
diff --git a/app/src/main/java/com/github/yeriomin/yalpstore/PrivilegeChecker.java b/app/src/main/java/com/github/yeriomin/yalpstore/PrivilegeChecker.java
new file mode 100644
index 000000000..e01e6bc5a
--- /dev/null
+++ b/app/src/main/java/com/github/yeriomin/yalpstore/PrivilegeChecker.java
@@ -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;
+ }
+}
diff --git a/app/src/main/java/com/github/yeriomin/yalpstore/UpdateChecker.java b/app/src/main/java/com/github/yeriomin/yalpstore/UpdateChecker.java
index 00606907a..af03cade9 100644
--- a/app/src/main/java/com/github/yeriomin/yalpstore/UpdateChecker.java
+++ b/app/src/main/java/com/github/yeriomin/yalpstore/UpdateChecker.java
@@ -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);
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index 8ea311708..2a05cbeae 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -147,6 +147,9 @@
Только уведомление
Обновления устанавливаются (root)
Установить найденные обновления (root)
+ Только уведомление
+ Обновления будут скачаны
+ Скачать найденные обновления
Это возможно только на рутованных устройствах
Язык запросов к Play Store
По-умолчанию
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 7e2ccfa9b..f87bac64f 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -146,6 +146,9 @@
You only get a notification
Updates are installed if found (root)
Also install the updates (root)
+ You only get a notification
+ Updates are downloaded if found
+ Also download the updates
This option is only available on rooted devices
Play Store requests language
Your default language
diff --git a/app/src/main/res/xml/settings.xml b/app/src/main/res/xml/settings.xml
index 6b2812c40..bfc474ae5 100644
--- a/app/src/main/res/xml/settings.xml
+++ b/app/src/main/res/xml/settings.xml
@@ -8,6 +8,13 @@
android:entries="@array/updateIntervalLabels"
android:entryValues="@array/updateIntervalValues" />
+