summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author ronish <ronish@google.com> 2022-03-10 01:36:14 +0000
committer ronish <ronish@google.com> 2022-03-10 01:51:47 +0000
commit7186d0bbfd35f89fbe4fa3bde5dc07463ddf4cc9 (patch)
tree108d998df037b57518906dfe8ce8c00dbddffd76
parent62ca047aadf0eb9a4d4eac6de65beb5f3545c783 (diff)
Only enable scanner entry points if the scanner activity is callable
The first time scanner is enabled via an OTA, it might be available but due to GMSCore version mismatch might not be callable. Hence only enable the entry points once the scanner activity is callable. Test: Manually Bug: 223608369 Change-Id: I755df37738aca9c8aa65d4779b3e341968d1f48d
-rw-r--r--packages/SystemUI/src/com/android/systemui/qrcodescanner/controller/QRCodeScannerController.java20
1 files changed, 16 insertions, 4 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/qrcodescanner/controller/QRCodeScannerController.java b/packages/SystemUI/src/com/android/systemui/qrcodescanner/controller/QRCodeScannerController.java
index e26c768a5e80..8000bdccfa68 100644
--- a/packages/SystemUI/src/com/android/systemui/qrcodescanner/controller/QRCodeScannerController.java
+++ b/packages/SystemUI/src/com/android/systemui/qrcodescanner/controller/QRCodeScannerController.java
@@ -160,14 +160,15 @@ public class QRCodeScannerController implements
* Returns true if lock screen entry point for QR Code Scanner is to be enabled.
*/
public boolean isEnabledForLockScreenButton() {
- return mQRCodeScannerEnabled && mIntent != null && mConfigEnableLockScreenButton;
+ return mQRCodeScannerEnabled && mIntent != null && mConfigEnableLockScreenButton
+ && isActivityCallable(mIntent);
}
/**
* Returns true if quick settings entry point for QR Code Scanner is to be enabled.
*/
public boolean isEnabledForQuickSettings() {
- return mIntent != null;
+ return mIntent != null && isActivityCallable(mIntent);
}
/**
@@ -278,7 +279,7 @@ public class QRCodeScannerController implements
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
}
- if (isActivityCallable(intent)) {
+ if (isActivityAvailable(intent)) {
mQRCodeScannerActivity = qrCodeScannerActivity;
mComponentName = componentName;
mIntent = intent;
@@ -293,7 +294,7 @@ public class QRCodeScannerController implements
}
}
- private boolean isActivityCallable(Intent intent) {
+ private boolean isActivityAvailable(Intent intent) {
// Our intent should always be explicit and should have a component set
if (intent.getComponent() == null) return false;
@@ -307,6 +308,17 @@ public class QRCodeScannerController implements
flags).isEmpty();
}
+ private boolean isActivityCallable(Intent intent) {
+ // Our intent should always be explicit and should have a component set
+ if (intent.getComponent() == null) return false;
+
+ int flags = PackageManager.MATCH_DIRECT_BOOT_AWARE
+ | PackageManager.MATCH_DIRECT_BOOT_UNAWARE
+ | PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS;
+ return !mContext.getPackageManager().queryIntentActivities(intent,
+ flags).isEmpty();
+ }
+
private void unregisterUserChangeObservers() {
mUserTracker.removeCallback(mUserChangedListener);