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" /> +