summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/res/res/values/strings.xml2
-rw-r--r--core/res/res/values/symbols.xml1
-rw-r--r--services/core/java/com/android/server/am/LockTaskController.java15
-rw-r--r--services/core/java/com/android/server/am/LockTaskNotify.java49
-rw-r--r--services/tests/servicestests/src/com/android/server/am/LockTaskControllerTest.java6
5 files changed, 36 insertions, 37 deletions
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index 93c02b0e05f6..78a8e2a3c748 100644
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -4346,8 +4346,6 @@
<string name="lock_to_app_toast">To unpin this screen, touch &amp; hold Back and Overview
buttons</string>
- <!-- Notify user that they are locked in lock-to-app mode -->
- <string name="lock_to_app_toast_locked">This app can\'t be unpinned</string>
<!-- Starting lock-to-app indication. -->
<string name="lock_to_app_start">Screen pinned</string>
<!-- Exting lock-to-app indication. -->
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index a42cf42cb905..7bbd17e62c48 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -754,7 +754,6 @@
<java-symbol type="string" name="last_month" />
<java-symbol type="string" name="launchBrowserDefault" />
<java-symbol type="string" name="lock_to_app_toast" />
- <java-symbol type="string" name="lock_to_app_toast_locked" />
<java-symbol type="string" name="lock_to_app_start" />
<java-symbol type="string" name="lock_to_app_exit" />
<java-symbol type="string" name="lock_to_app_unlock_pin" />
diff --git a/services/core/java/com/android/server/am/LockTaskController.java b/services/core/java/com/android/server/am/LockTaskController.java
index 940f9051ec1e..1c094c174e6a 100644
--- a/services/core/java/com/android/server/am/LockTaskController.java
+++ b/services/core/java/com/android/server/am/LockTaskController.java
@@ -327,7 +327,9 @@ public class LockTaskController {
if (getDevicePolicyManager() != null) {
getDevicePolicyManager().notifyLockTaskModeChanged(false, null, userId);
}
- getLockTaskNotify().show(false);
+ if (mLockTaskModeState == LOCK_TASK_MODE_PINNED) {
+ getLockTaskNotify().showPinningExitToast();
+ }
try {
boolean shouldLockKeyguard = Settings.Secure.getIntForUser(
mContext.getContentResolver(),
@@ -349,10 +351,13 @@ public class LockTaskController {
}
/**
- * Show the lock task violation toast.
+ * Show the lock task violation toast. Currently we only show toast for screen pinning mode, and
+ * no-op if the device is in locked mode.
*/
void showLockTaskToast() {
- mHandler.post(() -> getLockTaskNotify().showToast(mLockTaskModeState));
+ if (mLockTaskModeState == LOCK_TASK_MODE_PINNED) {
+ mHandler.post(() -> getLockTaskNotify().showEscapeToast());
+ }
}
// Starting lock task
@@ -439,7 +444,9 @@ public class LockTaskController {
private void performStartLockTask(String packageName, int userId, int lockTaskModeState) {
// When lock task starts, we disable the status bars.
try {
- getLockTaskNotify().show(true);
+ if (lockTaskModeState == LOCK_TASK_MODE_PINNED) {
+ getLockTaskNotify().showPinningStartToast();
+ }
mLockTaskModeState = lockTaskModeState;
if (getStatusBarService() != null) {
int flags = 0;
diff --git a/services/core/java/com/android/server/am/LockTaskNotify.java b/services/core/java/com/android/server/am/LockTaskNotify.java
index 0412db5e49c9..5d6e9b58881f 100644
--- a/services/core/java/com/android/server/am/LockTaskNotify.java
+++ b/services/core/java/com/android/server/am/LockTaskNotify.java
@@ -16,7 +16,6 @@
package com.android.server.am;
-import android.app.ActivityManager;
import android.content.Context;
import android.os.Handler;
import android.os.Message;
@@ -29,7 +28,7 @@ import com.android.internal.R;
/**
* Helper to manage showing/hiding a image to notify them that they are entering
- * or exiting lock-to-app mode.
+ * or exiting screen pinning mode.
*/
public class LockTaskNotify {
private static final String TAG = "LockTaskNotify";
@@ -45,20 +44,22 @@ public class LockTaskNotify {
mHandler = new H();
}
- public void showToast(int lockTaskModeState) {
- mHandler.obtainMessage(H.SHOW_TOAST, lockTaskModeState, 0 /* Not used */).sendToTarget();
+ /** Show "Screen pinned" toast. */
+ void showPinningStartToast() {
+ makeAllUserToastAndShow(R.string.lock_to_app_start);
}
- public void handleShowToast(int lockTaskModeState) {
- String text = null;
- if (lockTaskModeState == ActivityManager.LOCK_TASK_MODE_LOCKED) {
- text = mContext.getString(R.string.lock_to_app_toast_locked);
- } else if (lockTaskModeState == ActivityManager.LOCK_TASK_MODE_PINNED) {
- text = mContext.getString(R.string.lock_to_app_toast);
- }
- if (text == null) {
- return;
- }
+ /** Show "Screen unpinned" toast. */
+ void showPinningExitToast() {
+ makeAllUserToastAndShow(R.string.lock_to_app_exit);
+ }
+
+ /** Show a toast that describes the gesture the user should use to escape pinned mode. */
+ void showEscapeToast() {
+ mHandler.obtainMessage(H.SHOW_ESCAPE_TOAST).sendToTarget();
+ }
+
+ private void handleShowEscapeToast() {
long showToastTime = SystemClock.elapsedRealtime();
if ((showToastTime - mLastShowToastTime) < SHOW_TOAST_MINIMUM_INTERVAL) {
Slog.i(TAG, "Ignore toast since it is requested in very short interval.");
@@ -67,20 +68,12 @@ public class LockTaskNotify {
if (mLastToast != null) {
mLastToast.cancel();
}
- mLastToast = makeAllUserToastAndShow(text);
+ mLastToast = makeAllUserToastAndShow(R.string.lock_to_app_toast);
mLastShowToastTime = showToastTime;
}
- public void show(boolean starting) {
- int showString = R.string.lock_to_app_exit;
- if (starting) {
- showString = R.string.lock_to_app_start;
- }
- makeAllUserToastAndShow(mContext.getString(showString));
- }
-
- private Toast makeAllUserToastAndShow(String text) {
- Toast toast = Toast.makeText(mContext, text, Toast.LENGTH_LONG);
+ private Toast makeAllUserToastAndShow(int resId) {
+ Toast toast = Toast.makeText(mContext, resId, Toast.LENGTH_LONG);
toast.getWindowParams().privateFlags |=
WindowManager.LayoutParams.PRIVATE_FLAG_SHOW_FOR_ALL_USERS;
toast.show();
@@ -88,13 +81,13 @@ public class LockTaskNotify {
}
private final class H extends Handler {
- private static final int SHOW_TOAST = 3;
+ private static final int SHOW_ESCAPE_TOAST = 3;
@Override
public void handleMessage(Message msg) {
switch(msg.what) {
- case SHOW_TOAST:
- handleShowToast(msg.arg1);
+ case SHOW_ESCAPE_TOAST:
+ handleShowEscapeToast();
break;
}
}
diff --git a/services/tests/servicestests/src/com/android/server/am/LockTaskControllerTest.java b/services/tests/servicestests/src/com/android/server/am/LockTaskControllerTest.java
index f9d7f9d4904a..4c1d3e9f0003 100644
--- a/services/tests/servicestests/src/com/android/server/am/LockTaskControllerTest.java
+++ b/services/tests/servicestests/src/com/android/server/am/LockTaskControllerTest.java
@@ -189,6 +189,8 @@ public class LockTaskControllerTest {
// THEN lock task mode should be started
verifyLockTaskStarted(STATUS_BAR_MASK_PINNED);
+ // THEN screen pinning toast should be shown
+ verify(mLockTaskNotify).showPinningStartToast();
}
@Test
@@ -255,8 +257,6 @@ public class LockTaskControllerTest {
// WHEN system calls stopLockTaskMode
mLockTaskController.stopLockTaskMode(true, SYSTEM_UID);
- // THEN a lock tash toast should be shown
- verify(mLockTaskNotify).showToast(LOCK_TASK_MODE_LOCKED);
// THEN lock task mode should still be active
assertEquals(LOCK_TASK_MODE_LOCKED, mLockTaskController.getLockTaskModeState());
}
@@ -302,6 +302,8 @@ public class LockTaskControllerTest {
verifyLockTaskStopped(times(1));
// THEN the keyguard should be shown
verify(mLockPatternUtils).requireCredentialEntry(UserHandle.USER_ALL);
+ // THEN screen pinning toast should be shown
+ verify(mLockTaskNotify).showPinningExitToast();
}
@Test