From 26e93a13eebf1bd49df8208b2206d682e98f3e7b Mon Sep 17 00:00:00 2001 From: ronish Date: Mon, 20 Dec 2021 12:42:34 +0000 Subject: [PATCH] Add support for only enabling QR scanner in QS tile This CL adds a config to control enabling/disabling of just the lockscreen button for QR code scanner Bug: 200536509 Test: Manually Change-Id: I9850994d9c53446d82506369e5069eea6eceb6da --- core/api/system-current.txt | 1 + core/res/res/values/config.xml | 3 ++ core/res/res/values/public.xml | 2 ++ .../controller/QRCodeScannerController.java | 32 +++++++++++++++++-- 4 files changed, 35 insertions(+), 3 deletions(-) diff --git a/core/api/system-current.txt b/core/api/system-current.txt index 4b815e316a50a..61ddc57e05c23 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 f4b7b73f4a6e1..fe85f8a41e027 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -5607,4 +5607,7 @@ false + + + false diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml index e83f4a66883c3..dcbf6644a5614 100644 --- a/core/res/res/values/public.xml +++ b/core/res/res/values/public.xml @@ -3322,6 +3322,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;