OSDN Git Service

Fix "You're using your work profile" toast is shown when launcher is
authorTony Mak <tonymak@google.com>
Wed, 27 Dec 2017 14:18:49 +0000 (14:18 +0000)
committerTony Mak <tonymak@google.com>
Wed, 27 Dec 2017 14:20:23 +0000 (14:20 +0000)
...in foreground

What's the problem:
getRecentTasks no longer returns home task. Check
RecentTasks.isVisibleRecentTask

Solution:
Instead of "fixing" getRecentTasks, use getLastResumedActivityUserId,
which is already used for the work profile icon in status bar.
Note that Keyguard is not an activity, so it won't change the value of
"last resumed activity user id". It should be more lightweight than
getRecentTasks anyway.

Test: Open any personal app -> screen off and on -> no toast
Test: Open any work app -> screen off and on -> observe toast
Test: Open any work app -> tap home -> scren off and on -> no toast

Change-Id: I1cc880bfa23017c9d2c5ad99d57e67b430aa4ac8
Fix: 70377375

packages/SystemUI/src/com/android/systemui/statusbar/NotificationLockscreenUserManager.java

index 644d834..205c255 100644 (file)
@@ -108,29 +108,15 @@ public class NotificationLockscreenUserManager implements Dumpable {
                 // Start the overview connection to the launcher service
                 Dependency.get(OverviewProxyService.class).startConnectionToCurrentUser();
             } else if (Intent.ACTION_USER_PRESENT.equals(action)) {
-                List<ActivityManager.RecentTaskInfo> recentTask = null;
                 try {
-                    recentTask = ActivityManager.getService().getRecentTasks(1,
-                            ActivityManager.RECENT_WITH_EXCLUDED,
-                            mCurrentUserId).getList();
+                    final int lastResumedActivityUserId =
+                            ActivityManager.getService().getLastResumedActivityUserId();
+                    if (mUserManager.isManagedProfile(lastResumedActivityUserId)) {
+                        showForegroundManagedProfileActivityToast();
+                    }
                 } catch (RemoteException e) {
                     // Abandon hope activity manager not running.
                 }
-                if (recentTask != null && recentTask.size() > 0) {
-                    UserInfo user = mUserManager.getUserInfo(recentTask.get(0).userId);
-                    if (user != null && user.isManagedProfile()) {
-                        Toast toast = Toast.makeText(mContext,
-                                R.string.managed_profile_foreground_toast,
-                                Toast.LENGTH_SHORT);
-                        TextView text = toast.getView().findViewById(android.R.id.message);
-                        text.setCompoundDrawablesRelativeWithIntrinsicBounds(
-                                R.drawable.stat_sys_managed_profile_status, 0, 0, 0);
-                        int paddingPx = mContext.getResources().getDimensionPixelSize(
-                                R.dimen.managed_profile_toast_padding);
-                        text.setCompoundDrawablePadding(paddingPx);
-                        toast.show();
-                    }
-                }
             } else if (NOTIFICATION_UNLOCKED_BY_WORK_CHALLENGE_ACTION.equals(action)) {
                 final IntentSender intentSender = intent.getParcelableExtra(Intent.EXTRA_INTENT);
                 final String notificationKey = intent.getStringExtra(Intent.EXTRA_INDEX);
@@ -242,6 +228,19 @@ public class NotificationLockscreenUserManager implements Dumpable {
         mSettingsObserver.onChange(false);  // set up
     }
 
+    private void showForegroundManagedProfileActivityToast() {
+        Toast toast = Toast.makeText(mContext,
+                R.string.managed_profile_foreground_toast,
+                Toast.LENGTH_SHORT);
+        TextView text = toast.getView().findViewById(android.R.id.message);
+        text.setCompoundDrawablesRelativeWithIntrinsicBounds(
+                R.drawable.stat_sys_managed_profile_status, 0, 0, 0);
+        int paddingPx = mContext.getResources().getDimensionPixelSize(
+                R.dimen.managed_profile_toast_padding);
+        text.setCompoundDrawablePadding(paddingPx);
+        toast.show();
+    }
+
     public boolean shouldShowLockscreenNotifications() {
         return mShowLockscreenNotifications;
     }