From 7b651aaaadab36107afbde8baaceb59452b7f337 Mon Sep 17 00:00:00 2001 From: voidstarstar Date: Wed, 3 Apr 2019 15:41:22 -0400 Subject: [PATCH] Unregister app if fully removed or data is cleared This fixes a bug where apps were not properly unregistered on Android 8.0+ systems. Also update the log message. --- play-services-core/src/main/AndroidManifest.xml | 3 ++- .../java/org/microg/gms/gcm/UnregisterReceiver.java | 10 ++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/play-services-core/src/main/AndroidManifest.xml b/play-services-core/src/main/AndroidManifest.xml index de35ffd4..02e8be20 100644 --- a/play-services-core/src/main/AndroidManifest.xml +++ b/play-services-core/src/main/AndroidManifest.xml @@ -250,7 +250,8 @@ - + + diff --git a/play-services-core/src/main/java/org/microg/gms/gcm/UnregisterReceiver.java b/play-services-core/src/main/java/org/microg/gms/gcm/UnregisterReceiver.java index 239c55c9..bba2e414 100644 --- a/play-services-core/src/main/java/org/microg/gms/gcm/UnregisterReceiver.java +++ b/play-services-core/src/main/java/org/microg/gms/gcm/UnregisterReceiver.java @@ -8,7 +8,10 @@ import android.util.Log; import java.util.List; import static android.content.Intent.ACTION_PACKAGE_REMOVED; +import static android.content.Intent.ACTION_PACKAGE_DATA_CLEARED; +import static android.content.Intent.ACTION_PACKAGE_FULLY_REMOVED; import static android.content.Intent.EXTRA_DATA_REMOVED; +import static android.content.Intent.EXTRA_REPLACING; public class UnregisterReceiver extends BroadcastReceiver { private static final String TAG = "GmsGcmUnregisterRcvr"; @@ -16,10 +19,13 @@ public class UnregisterReceiver extends BroadcastReceiver { @Override public void onReceive(final Context context, Intent intent) { Log.d(TAG, "Package changed: " + intent); - if (ACTION_PACKAGE_REMOVED.contains(intent.getAction()) && intent.getBooleanExtra(EXTRA_DATA_REMOVED, false)) { + if ((ACTION_PACKAGE_REMOVED.contains(intent.getAction()) && intent.getBooleanExtra(EXTRA_DATA_REMOVED, false) && + !intent.getBooleanExtra(EXTRA_REPLACING, false)) || + ACTION_PACKAGE_FULLY_REMOVED.contains(intent.getAction()) || + ACTION_PACKAGE_DATA_CLEARED.contains(intent.getAction())) { final GcmDatabase database = new GcmDatabase(context); final String packageName = intent.getData().getSchemeSpecificPart(); - Log.d(TAG, "Package removed: " + packageName); + Log.d(TAG, "Package removed or data cleared: " + packageName); final GcmDatabase.App app = database.getApp(packageName); if (app != null) { new Thread(new Runnable() {