diff options
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 & 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 |