diff --git a/app/src/main/java/org/lineageos/updater/UpdateImporter.java b/app/src/main/java/org/lineageos/updater/UpdateImporter.java index f79964fd5206aec0611dede5b5563a55b6ec748d..5104925ba111d53d8845ab71d53bd0a1006d7be9 100644 --- a/app/src/main/java/org/lineageos/updater/UpdateImporter.java +++ b/app/src/main/java/org/lineageos/updater/UpdateImporter.java @@ -52,7 +52,7 @@ public class UpdateImporter { private static final int REQUEST_PICK = 9061; private static final String TAG = "UpdateImporter"; private static final String MIME_ZIP = "application/zip"; - private static final String FILE_NAME = "localUpdate.zip"; + public static final String FILE_NAME = "localUpdate.zip"; private static final String METADATA_PATH = "META-INF/com/android/metadata"; private static final String METADATA_TIMESTAMP_KEY = "post-timestamp="; private static final String METADATA_ANDROID_SDK_KEY = "post-sdk-level="; diff --git a/app/src/main/java/org/lineageos/updater/UpdatesActivity.java b/app/src/main/java/org/lineageos/updater/UpdatesActivity.java index 561b63d54dd74c7ee3c4559a4c36b00d44326575..d9d4aea2c6a02c5a96da2caae4280f9801eb4829 100644 --- a/app/src/main/java/org/lineageos/updater/UpdatesActivity.java +++ b/app/src/main/java/org/lineageos/updater/UpdatesActivity.java @@ -121,6 +121,10 @@ public class UpdatesActivity extends UpdatesListActivity implements UpdateImport super.onCreate(savedInstanceState); setContentView(R.layout.activity_updates); + if (UpdaterService.isDeviceRebooted()) { + Utils.removeInstalledUpdate(this); + } + mUpdateImporter = new UpdateImporter(this, this); UiModeManager uiModeManager = getSystemService(UiModeManager.class); @@ -395,9 +399,11 @@ public class UpdatesActivity extends UpdatesListActivity implements UpdateImport if (sortedUpdates.isEmpty()) { findViewById(R.id.no_new_updates_view).setVisibility(View.VISIBLE); findViewById(R.id.content).setVisibility(View.GONE); + findViewById(R.id.available_update_header).setVisibility(View.GONE); } else { findViewById(R.id.no_new_updates_view).setVisibility(View.GONE); findViewById(R.id.content).setVisibility(View.VISIBLE); + findViewById(R.id.available_update_header).setVisibility(View.VISIBLE); sortedUpdates.sort((u1, u2) -> Long.compare(u2.getTimestamp(), u1.getTimestamp())); for (UpdateInfo update : sortedUpdates) { updateIds.add(update.getDownloadId()); @@ -558,6 +564,7 @@ public class UpdatesActivity extends UpdatesListActivity implements UpdateImport } } else { findViewById(R.id.content).setVisibility(View.GONE); + findViewById(R.id.available_update_header).setVisibility(View.GONE); findViewById(R.id.no_new_updates_view).setVisibility(View.GONE); findViewById(R.id.refresh_progress).setVisibility(View.VISIBLE); } @@ -572,9 +579,10 @@ public class UpdatesActivity extends UpdatesListActivity implements UpdateImport } else { findViewById(R.id.refresh_progress).setVisibility(View.GONE); } - + if (mAdapter.getItemCount() > 0) { findViewById(R.id.content).setVisibility(View.VISIBLE); + findViewById(R.id.available_update_header).setVisibility(View.VISIBLE); } else { findViewById(R.id.no_new_updates_view).setVisibility(View.VISIBLE); } diff --git a/app/src/main/java/org/lineageos/updater/UpdatesCheckReceiver.java b/app/src/main/java/org/lineageos/updater/UpdatesCheckReceiver.java index 8ad0f4de669f8e5d4618494bae21bf7445fb002d..e7a390aec8f38229ebcb9051dd2bcd669890774c 100644 --- a/app/src/main/java/org/lineageos/updater/UpdatesCheckReceiver.java +++ b/app/src/main/java/org/lineageos/updater/UpdatesCheckReceiver.java @@ -71,6 +71,7 @@ public class UpdatesCheckReceiver extends BroadcastReceiver { } Utils.cleanupDownloadsDir(context); + Utils.removeLocalUpdate(context); // Reset resume or update check failed on reboot editor.putBoolean(Constants.AUTO_UPDATE_CHECK_FAILED, false).apply(); diff --git a/app/src/main/java/org/lineageos/updater/controller/UpdaterService.java b/app/src/main/java/org/lineageos/updater/controller/UpdaterService.java index 4ea56e4b82fbbb20f32bff9a3438c15916bfbb4c..2443ad4676963e7b8de4ce51d8215ff839287d00 100644 --- a/app/src/main/java/org/lineageos/updater/controller/UpdaterService.java +++ b/app/src/main/java/org/lineageos/updater/controller/UpdaterService.java @@ -99,6 +99,8 @@ public class UpdaterService extends Service { private static ConnectivityManager.NetworkCallback mConnectionStateMonitor; private static ConnectivityManager mConnectivityManager; + private static boolean mDeviceRebooted = true; + @Override public void onCreate() { super.onCreate(); @@ -267,6 +269,10 @@ public class UpdaterService extends Service { return mUpdaterController; } + public static boolean isDeviceRebooted() { + return mDeviceRebooted; + } + private void tryStopSelf() { if (isNetworkCallBackActive || areNotificationsActive()) return; if (!mHasClients && !mUpdaterController.hasActiveDownloads() && @@ -286,6 +292,8 @@ public class UpdaterService extends Service { private void handleUpdateStatusChange(UpdateInfo update) { SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this); SharedPreferences.Editor editor = pref.edit(); + mNotificationBuilder.setPriority(NotificationCompat.PRIORITY_DEFAULT); + mDeviceRebooted = false; switch (update.getStatus()) { case DELETED: { notifySystemUpdaterService(STATUS_WAITING_DOWNLOAD, update); @@ -495,6 +503,7 @@ public class UpdaterService extends Service { mNotificationBuilder.setTicker(text); mNotificationBuilder.setOngoing(true); mNotificationBuilder.setAutoCancel(false); + mNotificationBuilder.setPriority(NotificationCompat.PRIORITY_MAX); mNotificationManager.notify(NOTIFICATION_ID, mNotificationBuilder.build()); boolean deleteUpdate = pref.getBoolean(Constants.PREF_AUTO_DELETE_UPDATES, true); diff --git a/app/src/main/java/org/lineageos/updater/misc/Utils.java b/app/src/main/java/org/lineageos/updater/misc/Utils.java index f1c9dac43ea5ee3827b443b3d0c0f51717045d6e..8be602824a8b6ff1357cfe52d31d42fd8f15404c 100644 --- a/app/src/main/java/org/lineageos/updater/misc/Utils.java +++ b/app/src/main/java/org/lineageos/updater/misc/Utils.java @@ -53,6 +53,7 @@ import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import org.lineageos.updater.R; +import org.lineageos.updater.UpdateImporter; import org.lineageos.updater.UpdatesDbHelper; import org.lineageos.updater.controller.UpdaterController; import org.lineageos.updater.controller.UpdaterService; @@ -426,6 +427,14 @@ public class Utils { } } + public static void removeLocalUpdate(Context context) { + File downloadPath = getDownloadPath(context); + File localUpdate = new File(downloadPath, UpdateImporter.FILE_NAME); + if (localUpdate.exists()) { + Log.d(TAG, "Deleting local update: " + localUpdate.delete()); + } + } + /** * Cleanup the download directory, which is assumed to be a privileged location * the user can't access and that might have stale files. This can happen if @@ -488,9 +497,11 @@ public class Utils { public static void removeInstalledUpdate(Context context) { SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(context); String downloadId = pref.getString(Constants.PREF_NEEDS_DELETE_ID, null); - UpdaterController controller = UpdaterController.getInstance(context); - if (controller != null && downloadId != null) { - controller.deleteUpdate(downloadId); + if (downloadId != null) { + UpdaterController controller = UpdaterController.getInstance(context); + if (controller != null) { + controller.deleteUpdate(downloadId); + } pref.edit().remove(Constants.PREF_NEEDS_DELETE_ID).apply(); } } diff --git a/app/src/main/res/layout/activity_updates.xml b/app/src/main/res/layout/activity_updates.xml index a7fac51f3396f7788f7e381ec1804d693ab858ab..1dc5d5e8b8ab94d563baa58a29097e8cd3d047c9 100644 --- a/app/src/main/res/layout/activity_updates.xml +++ b/app/src/main/res/layout/activity_updates.xml @@ -138,6 +138,7 @@ android:paddingStart="16dp" android:textSize="16sp" android:background="@color/toolbar_collapsed" + android:visibility="gone" android:text="@string/e_available_updates" android:textColor="?android:textColorPrimary" />