diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index c34fc3e65..b57670201 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -129,6 +129,15 @@
+
+
+
+
+
+
diff --git a/app/src/main/java/com/aurora/store/Constants.java b/app/src/main/java/com/aurora/store/Constants.java
index cb24e8941..74826e85a 100644
--- a/app/src/main/java/com/aurora/store/Constants.java
+++ b/app/src/main/java/com/aurora/store/Constants.java
@@ -84,4 +84,5 @@ public class Constants {
public static final String PREFERENCE_LOCALE_LANG = "PREFERENCE_LOCALE_LANG";
public static final String PREFERENCE_LOCALE_LIST = "PREFERENCE_LOCALE_LIST";
public static final String PREFERENCE_LOCALE_COUNTRY = "PREFERENCE_LOCALE_COUNTRY";
+ public static final String PREFERENCE_UPDATES_INTERVAL = "PREFERENCE_UPDATES_INTERVAL";
}
diff --git a/app/src/main/java/com/aurora/store/activity/AuroraActivity.java b/app/src/main/java/com/aurora/store/activity/AuroraActivity.java
index eebf98482..a65cf7476 100644
--- a/app/src/main/java/com/aurora/store/activity/AuroraActivity.java
+++ b/app/src/main/java/com/aurora/store/activity/AuroraActivity.java
@@ -112,7 +112,7 @@ public class AuroraActivity extends AppCompatActivity {
super.onNewIntent(intent);
Bundle mBundle = intent.getExtras();
if (mBundle != null)
- fragmentPos = mBundle.getInt(Constants.INTENT_FRAGMENT_POSITION);
+ fragmentCur = mBundle.getInt(Constants.INTENT_FRAGMENT_POSITION);
if (intent.getScheme() != null && intent.getScheme().equals("market")) {
fragmentCur = 3;
isSearchIntent = true;
diff --git a/app/src/main/java/com/aurora/store/fragment/preference/UpdatesPrefFragment.java b/app/src/main/java/com/aurora/store/fragment/preference/UpdatesPrefFragment.java
new file mode 100644
index 000000000..42f7f4541
--- /dev/null
+++ b/app/src/main/java/com/aurora/store/fragment/preference/UpdatesPrefFragment.java
@@ -0,0 +1,48 @@
+package com.aurora.store.fragment.preference;
+
+import android.content.Context;
+import android.os.Bundle;
+import android.view.View;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.preference.ListPreference;
+import androidx.preference.PreferenceFragmentCompat;
+
+import com.aurora.store.Constants;
+import com.aurora.store.R;
+import com.aurora.store.receiver.UpdatesReceiver;
+import com.aurora.store.utility.PrefUtil;
+import com.aurora.store.utility.Util;
+
+public class UpdatesPrefFragment extends PreferenceFragmentCompat {
+
+ private Context context;
+
+ @Override
+ public void onAttach(@NonNull Context context) {
+ super.onAttach(context);
+ this.context = context;
+ }
+
+ @Override
+ public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
+ getPreferenceManager().setSharedPreferencesName(Constants.SHARED_PREFERENCES_KEY);
+ setPreferencesFromResource(R.xml.preferences_updates, rootKey);
+ }
+
+ @Override
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+
+ ListPreference updatesIntervalList = findPreference(Constants.PREFERENCE_UPDATES_INTERVAL);
+ assert updatesIntervalList != null;
+ updatesIntervalList.setOnPreferenceChangeListener((preference, newValue) -> {
+ String value = newValue.toString();
+ PrefUtil.putString(context, Constants.PREFERENCE_UPDATES_INTERVAL, value);
+ UpdatesReceiver.enable(context, Util.parseInt(value, 0));
+ return true;
+ });
+ }
+
+}
diff --git a/app/src/main/java/com/aurora/store/receiver/BootReceiver.java b/app/src/main/java/com/aurora/store/receiver/BootReceiver.java
new file mode 100644
index 000000000..445af06c2
--- /dev/null
+++ b/app/src/main/java/com/aurora/store/receiver/BootReceiver.java
@@ -0,0 +1,47 @@
+/*
+ * Aurora Store
+ * Copyright (C) 2019, Rahul Kumar Patel
+ *
+ * Yalp Store
+ * Copyright (C) 2018 Sergey Yeriomin
+ *
+ * Aurora Store is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Aurora Store is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Aurora Store. If not, see .
+ *
+ *
+ */
+
+package com.aurora.store.receiver;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+
+import com.aurora.store.Constants;
+import com.aurora.store.utility.Util;
+
+public class BootReceiver extends BroadcastReceiver {
+
+ static private int getUpdateInterval(Context context) {
+ return Util.parseInt(Util.getPrefs(context)
+ .getString(Constants.PREFERENCE_UPDATES_INTERVAL, "-1"), -1);
+ }
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ if (!Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
+ return;
+ }
+ UpdatesReceiver.enable(context.getApplicationContext(), getUpdateInterval(context));
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/aurora/store/receiver/UpdatesReceiver.java b/app/src/main/java/com/aurora/store/receiver/UpdatesReceiver.java
new file mode 100644
index 000000000..c094c4ce1
--- /dev/null
+++ b/app/src/main/java/com/aurora/store/receiver/UpdatesReceiver.java
@@ -0,0 +1,68 @@
+package com.aurora.store.receiver;
+
+import android.app.AlarmManager;
+import android.app.PendingIntent;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+
+import com.aurora.store.Constants;
+import com.aurora.store.R;
+import com.aurora.store.activity.AuroraActivity;
+import com.aurora.store.notification.QuickNotification;
+import com.aurora.store.task.UpdatableApps;
+import com.aurora.store.utility.Log;
+
+import org.apache.commons.lang3.StringUtils;
+
+import io.reactivex.Observable;
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.disposables.CompositeDisposable;
+import io.reactivex.schedulers.Schedulers;
+
+public class UpdatesReceiver extends BroadcastReceiver {
+ static public void enable(Context context, int interval) {
+ Intent intent = new Intent(context, UpdatesReceiver.class);
+ PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
+ AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
+ alarmManager.cancel(pendingIntent);
+ if (interval > 0) {
+ Log.e("Enabling periodic update checks");
+ alarmManager.setRepeating(
+ AlarmManager.RTC_WAKEUP,
+ System.currentTimeMillis(),
+ interval,
+ pendingIntent
+ );
+ }
+ }
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ Log.e("Update check Started");
+ CompositeDisposable disposable = new CompositeDisposable();
+ UpdatableApps updatableAppTask = new UpdatableApps(context);
+ disposable.add(Observable.fromCallable(updatableAppTask::getUpdatableApps)
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe((appList) -> {
+ if (!appList.isEmpty()) {
+ QuickNotification.show(context,
+ context.getString(R.string.action_updates),
+ new StringBuilder()
+ .append(appList.size())
+ .append(StringUtils.SPACE)
+ .append(context.getString(R.string.list_update_all_txt))
+ .toString(),
+ getContentIntent(context));
+ }
+ }, err -> Log.e("Update check failed")));
+ }
+
+ private PendingIntent getContentIntent(Context context) {
+ Intent intent = new Intent(context, AuroraActivity.class);
+ intent.putExtra(Constants.INTENT_FRAGMENT_POSITION, 2);
+ return PendingIntent.getActivity(context, 0, intent,
+ PendingIntent.FLAG_UPDATE_CURRENT);
+ }
+}
diff --git a/app/src/main/res/drawable/ic_update.xml b/app/src/main/res/drawable/ic_update.xml
index a80402788..0dcc21cd6 100644
--- a/app/src/main/res/drawable/ic_update.xml
+++ b/app/src/main/res/drawable/ic_update.xml
@@ -21,9 +21,14 @@
+ android:viewportWidth="24"
+ android:viewportHeight="24">
+ android:fillAlpha="0.3"
+ android:fillColor="?android:attr/colorControlNormal"
+ android:pathData="M7,19h10L17,5L7,5v14zM11,13L11,8h2v5h3l-4,4 -4,-4h3z"
+ android:strokeAlpha="0.3" />
+
diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml
index d1413c821..30a542423 100644
--- a/app/src/main/res/values/arrays.xml
+++ b/app/src/main/res/values/arrays.xml
@@ -262,4 +262,18 @@
- @string/about_telegram_summary
- @string/about_fdroid_summary
+
+
+ - -1
+ - 3600000
+ - 86400000
+ - 604800000
+
+
+
+ - @string/pref_update_interval_manually
+ - @string/pref_update_interval_hourly
+ - @string/pref_update_interval_daily
+ - @string/pref_update_interval_weekly
+
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 9e51e377b..279d53039 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -288,6 +288,11 @@
Scrollable tabs
Enable to make tabs scrollable, recommended for low-dpi devices
Select default tab
+ Updates interval
+ Manually
+ Hourly
+ Weekly
+ Daily
Join
Leave
diff --git a/app/src/main/res/xml/preferences_main.xml b/app/src/main/res/xml/preferences_main.xml
index 34c95b5d1..c9b3a367a 100644
--- a/app/src/main/res/xml/preferences_main.xml
+++ b/app/src/main/res/xml/preferences_main.xml
@@ -74,4 +74,9 @@
app:fragment="com.aurora.store.fragment.preference.UIFragment"
app:icon="@drawable/ic_ui"
app:title="@string/pref_app_ui" />
+
+
diff --git a/app/src/main/res/xml/preferences_updates.xml b/app/src/main/res/xml/preferences_updates.xml
new file mode 100644
index 000000000..f5d4db04c
--- /dev/null
+++ b/app/src/main/res/xml/preferences_updates.xml
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+