summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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);