diff --git a/core/api/system-current.txt b/core/api/system-current.txt
index f96e9bc158468..0abab96f1381d 100644
--- a/core/api/system-current.txt
+++ b/core/api/system-current.txt
@@ -366,6 +366,7 @@ package android {
}
public static final class R.bool {
+ field public static final int config_enableQrCodeScannerOnLockScreen;
field public static final int config_sendPackageName = 17891328; // 0x1110000
field public static final int config_showDefaultAssistant = 17891329; // 0x1110001
field public static final int config_showDefaultEmergency = 17891330; // 0x1110002
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index e9ba92fe95892..d8b3785d7f4e7 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -5612,4 +5612,7 @@
false
+
+
+ false
diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml
index d2ac8a3c5fbc5..cfe65eb00cea8 100644
--- a/core/res/res/values/public.xml
+++ b/core/res/res/values/public.xml
@@ -3324,6 +3324,8 @@
+
+
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 c8e2ca7e7ea84..1da94aa234aac 100644
--- a/packages/SystemUI/src/com/android/systemui/qrcodescanner/controller/QRCodeScannerController.java
+++ b/packages/SystemUI/src/com/android/systemui/qrcodescanner/controller/QRCodeScannerController.java
@@ -93,6 +93,7 @@ public class QRCodeScannerController implements
private final DeviceConfigProxy mDeviceConfigProxy;
private final ArrayList mCallbacks = new ArrayList<>();
private final UserTracker mUserTracker;
+ private final boolean mConfigEnableLockScreenButton;
private HashMap mQRCodeScannerPreferenceObserver = new HashMap<>();
private DeviceConfig.OnPropertiesChangedListener mOnDefaultQRCodeScannerChangedListener = null;
@@ -118,6 +119,9 @@ public class QRCodeScannerController implements
mSecureSettings = secureSettings;
mDeviceConfigProxy = proxy;
mUserTracker = userTracker;
+
+ mConfigEnableLockScreenButton = mContext.getResources().getBoolean(
+ android.R.bool.config_enableQrCodeScannerOnLockScreen);
}
/**
@@ -156,7 +160,7 @@ 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;
+ return mQRCodeScannerEnabled && mIntent != null && mConfigEnableLockScreenButton;
}
/**
@@ -235,6 +239,11 @@ public class QRCodeScannerController implements
}
private void updateQRCodeScannerPreferenceDetails(boolean updateSettings) {
+ if (!mConfigEnableLockScreenButton) {
+ // Settings only apply to lock screen entry point.
+ return;
+ }
+
boolean prevQRCodeScannerEnabled = mQRCodeScannerEnabled;
mQRCodeScannerEnabled = mSecureSettings.getIntForUser(LOCK_SCREEN_SHOW_QR_CODE_SCANNER, 0,
mUserTracker.getUserId()) != 0;
@@ -251,8 +260,15 @@ public class QRCodeScannerController implements
private void updateQRCodeScannerActivityDetails() {
String qrCodeScannerActivity = mDeviceConfigProxy.getString(
DeviceConfig.NAMESPACE_SYSTEMUI,
- SystemUiDeviceConfigFlags.DEFAULT_QR_CODE_SCANNER,
- mContext.getResources().getString(R.string.def_qr_code_component));
+ SystemUiDeviceConfigFlags.DEFAULT_QR_CODE_SCANNER, "");
+
+ // "" means either the flags is not available or is set to "", and in both the cases we
+ // want to use R.string.def_qr_code_component
+ if (Objects.equals(qrCodeScannerActivity, "")) {
+ qrCodeScannerActivity =
+ mContext.getResources().getString(R.string.def_qr_code_component);
+ }
+
String prevQrCodeScannerActivity = mQRCodeScannerActivity;
ComponentName componentName = null;
Intent intent = new Intent();
@@ -296,6 +312,11 @@ public class QRCodeScannerController implements
}
private void unregisterQRCodePreferenceObserver() {
+ if (!mConfigEnableLockScreenButton) {
+ // Settings only apply to lock screen entry point.
+ return;
+ }
+
mQRCodeScannerPreferenceObserver.forEach((key, value) -> {
mSecureSettings.unregisterContentObserver(value);
});
@@ -357,6 +378,11 @@ public class QRCodeScannerController implements
}
private void registerQRCodePreferenceObserver() {
+ if (!mConfigEnableLockScreenButton) {
+ // Settings only apply to lock screen entry point.
+ return;
+ }
+
int userId = mUserTracker.getUserId();
if (mQRCodeScannerPreferenceObserver.getOrDefault(userId, null) != null) return;