From 14ed4a0efdffb080bc34d4372f651127a77bfb3b Mon Sep 17 00:00:00 2001 From: Mill Chen Date: Fri, 6 Sep 2019 20:48:40 +0800 Subject: [PATCH] Prevent accounts page directly opening in screen pinning mode In Settings there is no auth mechanism to prevent accounts page being opened in screen pinning mode. This CL makes it so that when users are trying to navigate to any pages in Settings from other apps in screen pinning mode, Settings app will directly close its page. Bug: 137015265 Test: manual Change-Id: Ice2250eb00be9d2181901cef6d1f04b4a8233bfc --- .../settings/core/SettingsBaseActivity.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/com/android/settings/core/SettingsBaseActivity.java b/src/com/android/settings/core/SettingsBaseActivity.java index 5ff81d54aa6..4ab1117d578 100644 --- a/src/com/android/settings/core/SettingsBaseActivity.java +++ b/src/com/android/settings/core/SettingsBaseActivity.java @@ -17,6 +17,7 @@ package com.android.settings.core; import android.annotation.LayoutRes; import android.annotation.Nullable; +import android.app.ActivityManager; import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.Context; @@ -26,6 +27,7 @@ import android.content.pm.PackageManager; import android.content.res.TypedArray; import android.os.AsyncTask; import android.os.Bundle; +import android.text.TextUtils; import android.util.ArraySet; import android.util.Log; import android.view.LayoutInflater; @@ -61,6 +63,10 @@ public class SettingsBaseActivity extends FragmentActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); + if (isLockTaskModePinned() && !isSettingsRunOnTop()) { + Log.w(TAG, "Devices lock task mode pinned."); + finish(); + } final long startTime = System.currentTimeMillis(); getLifecycle().addObserver(new HideNonSystemOverlayMixin(this)); @@ -148,6 +154,21 @@ public class SettingsBaseActivity extends FragmentActivity { } } + + private boolean isLockTaskModePinned() { + final ActivityManager activityManager = + getApplicationContext().getSystemService(ActivityManager.class); + return activityManager.getLockTaskModeState() == ActivityManager.LOCK_TASK_MODE_PINNED; + } + + private boolean isSettingsRunOnTop() { + final ActivityManager activityManager = + getApplicationContext().getSystemService(ActivityManager.class); + final String taskPkgName = activityManager.getRunningTasks(1 /* maxNum */) + .get(0 /* index */).baseActivity.getPackageName(); + return TextUtils.equals(getPackageName(), taskPkgName); + } + /** * @return whether or not the enabled state actually changed. */