summaryrefslogtreecommitdiffstats
path: root/packages/SystemUI
diff options
context:
space:
mode:
authorTony Mak <tonymak@google.com>2017-07-28 11:53:56 +0100
committerIvan Kutepov <its.kutepov@gmail.com>2017-10-05 00:26:41 +0300
commit83e34b2cab502fb230c2bbafbe42339a70392486 (patch)
tree0d1eed71373cbb916a462c9b557f159570bc8864 /packages/SystemUI
parentf8b2e063a2c64cd90d02109ce1b79819030699b7 (diff)
downloadframeworks_base-83e34b2cab502fb230c2bbafbe42339a70392486.tar.gz
frameworks_base-83e34b2cab502fb230c2bbafbe42339a70392486.tar.bz2
frameworks_base-83e34b2cab502fb230c2bbafbe42339a70392486.zip
Enforce policy for camera gesture in keyguard
Test: 1. Set lock screen, set keyguard policy. Lock the device. Observe that double tap is not showing camera 2. Set lock screen, unset the keyguard policy. Lock the device. Observe that double tap is showing camera 3. Unset lock screen (swipe), set the keyguard policy. Lock the device. Observe that double tap is showing camera. 4. Unset lock screen (swipe), unset the keyguard policy. Lock the device. Observe that double tap is showing camera. Bug: 63787722 Merged-In: I104688eaad719528376e2851f837d5956a6a1169 Change-Id: I104688eaad719528376e2851f837d5956a6a1169 (cherry picked from commit 65f02e8ba7a9f013d6971b3d6d1bd95f1785cb3d) CVE-2017-0822
Diffstat (limited to 'packages/SystemUI')
-rwxr-xr-xpackages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java19
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java23
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java5
3 files changed, 28 insertions, 19 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
index e958ee180b1..4c88a6d977d 100755
--- a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
@@ -2362,4 +2362,23 @@ public abstract class BaseStatusBar extends SystemUI implements
}
return themedContext;
}
+
+ public boolean isCameraAllowedByAdmin() {
+ if (mDevicePolicyManager.getCameraDisabled(null, mCurrentUserId)) {
+ return false;
+ } else if (isKeyguardShowing() && isKeyguardSecure()) {
+ // Check if the admin has disabled the camera specifically for the keyguard
+ return (mDevicePolicyManager.getKeyguardDisabledFeatures(null, mCurrentUserId)
+ & DevicePolicyManager.KEYGUARD_DISABLE_SECURE_CAMERA) == 0;
+ }
+ return true;
+ }
+
+ public boolean isKeyguardShowing() {
+ if (mStatusBarKeyguardViewManager == null) {
+ Slog.i(TAG, "isKeyguardShowing() called before startKeyguard(), returning true");
+ return true;
+ }
+ return mStatusBarKeyguardViewManager.isShowing();
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java
index b244e26cb66..23b01296004 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java
@@ -419,7 +419,10 @@ public class KeyguardBottomAreaView extends FrameLayout implements View.OnClickL
visible = !mShortcutHelper.isTargetEmpty(Shortcuts.RIGHT_SHORTCUT);
} else {
ResolveInfo resolved = resolveCameraIntent();
- visible = !isCameraDisabledByDpm() && resolved != null
+ boolean isCameraDisabled =
+ (mPhoneStatusBar != null) && !mPhoneStatusBar.isCameraAllowedByAdmin();
+ visible = !isCameraDisabled
+ && resolved != null
&& getResources().getBoolean(R.bool.config_keyguardShowCameraAffordance);
}
}
@@ -461,24 +464,6 @@ public class KeyguardBottomAreaView extends FrameLayout implements View.OnClickL
&& pm.resolveActivity(PHONE_INTENT, 0) != null;
}
- private boolean isCameraDisabledByDpm() {
- final DevicePolicyManager dpm =
- (DevicePolicyManager) getContext().getSystemService(Context.DEVICE_POLICY_SERVICE);
- if (dpm != null && mPhoneStatusBar != null) {
- try {
- final int userId = ActivityManagerNative.getDefault().getCurrentUser().id;
- final int disabledFlags = dpm.getKeyguardDisabledFeatures(null, userId);
- final boolean disabledBecauseKeyguardSecure =
- (disabledFlags & DevicePolicyManager.KEYGUARD_DISABLE_SECURE_CAMERA) != 0
- && mPhoneStatusBar.isKeyguardSecure();
- return dpm.getCameraDisabled(null) || disabledBecauseKeyguardSecure;
- } catch (RemoteException e) {
- Log.e(TAG, "Can't get userId", e);
- }
- }
- return false;
- }
-
private void watchForCameraPolicyChanges() {
final IntentFilter filter = new IntentFilter();
filter.addAction(DevicePolicyManager.ACTION_DEVICE_POLICY_MANAGER_STATE_CHANGED);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java
index e4e02a74184..67a298ab851 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java
@@ -42,6 +42,7 @@ import android.os.PowerManager;
import android.os.RemoteException;
import android.preference.PreferenceManager;
import android.util.AttributeSet;
+import android.util.EventLog;
import android.util.MathUtils;
import android.view.Display;
import android.view.GestureDetector;
@@ -2902,6 +2903,10 @@ public class NotificationPanelView extends PanelView implements
* @param keyguardIsShowing whether keyguard is being shown
*/
public boolean canCameraGestureBeLaunched(boolean keyguardIsShowing) {
+ if (!mStatusBar.isCameraAllowedByAdmin()) {
+ EventLog.writeEvent(0x534e4554, "63787722", -1, "");
+ return false;
+ }
ResolveInfo resolveInfo = mKeyguardBottomArea.resolveCameraIntent();
String packageToLaunch = (resolveInfo == null || resolveInfo.activityInfo == null)
? null : resolveInfo.activityInfo.packageName;