From 6c90d8a7ecbd8ebb3ce87e59f5930a8c09ec157f Mon Sep 17 00:00:00 2001 From: Kenny Guy Date: Tue, 20 Feb 2018 16:53:27 +0000 Subject: [PATCH] Include slider events from managed profile. Include the slider events from profiles of the requested user however redact the package name from the event. Bug: 72484845 Test: atest BrightnessTrackerTest Test: atest BrightnessTest Change-Id: I4a7d02c93646581982102f01bd9f237d849b87d9 --- .../server/display/BrightnessTracker.java | 25 ++++++++++++-- .../server/display/BrightnessTrackerTest.java | 33 +++++++++++++++++++ 2 files changed, 55 insertions(+), 3 deletions(-) diff --git a/services/core/java/com/android/server/display/BrightnessTracker.java b/services/core/java/com/android/server/display/BrightnessTracker.java index 524de91b694ea..df60c6654c4ba 100644 --- a/services/core/java/com/android/server/display/BrightnessTracker.java +++ b/services/core/java/com/android/server/display/BrightnessTracker.java @@ -70,6 +70,8 @@ import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Deque; +import java.util.HashMap; +import java.util.Map; import java.util.concurrent.TimeUnit; /** @@ -225,15 +227,24 @@ public class BrightnessTracker { * @return List of recent {@link BrightnessChangeEvent}s */ public ParceledListSlice getEvents(int userId, boolean includePackage) { - // TODO include apps from any managed profiles in the brightness information. BrightnessChangeEvent[] events; synchronized (mEventsLock) { events = mEvents.toArray(); } + int[] profiles = mInjector.getProfileIds(mUserManager, userId); + Map toRedact = new HashMap<>(); + for (int i = 0; i < profiles.length; ++i) { + int profileId = profiles[i]; + // Include slider interactions when a managed profile app is in the + // foreground but always redact the package name. + boolean redact = (!includePackage) || profileId != userId; + toRedact.put(profiles[i], redact); + } ArrayList out = new ArrayList<>(events.length); for (int i = 0; i < events.length; ++i) { - if (events[i].userId == userId) { - if (includePackage) { + Boolean redact = toRedact.get(events[i].userId); + if (redact != null) { + if (!redact) { out.add(events[i]); } else { BrightnessChangeEvent event = new BrightnessChangeEvent((events[i]), @@ -817,6 +828,14 @@ public class BrightnessTracker { return userManager.getUserHandle(userSerialNumber); } + public int[] getProfileIds(UserManager userManager, int userId) { + if (userManager != null) { + return userManager.getProfileIds(userId, false); + } else { + return new int[]{userId}; + } + } + public ActivityManager.StackInfo getFocusedStack() throws RemoteException { return ActivityManager.getService().getFocusedStackInfo(); } diff --git a/services/tests/servicestests/src/com/android/server/display/BrightnessTrackerTest.java b/services/tests/servicestests/src/com/android/server/display/BrightnessTrackerTest.java index 501f9666f5c48..b4f84742301d7 100644 --- a/services/tests/servicestests/src/com/android/server/display/BrightnessTrackerTest.java +++ b/services/tests/servicestests/src/com/android/server/display/BrightnessTrackerTest.java @@ -338,6 +338,26 @@ public class BrightnessTrackerTest { assertFalse(event.isDefaultBrightnessConfig); assertEquals(1.0, event.powerBrightnessFactor, FLOAT_DELTA); assertFalse(event.isUserSetBrightness); + + // Pretend user 1 is a profile of user 0. + mInjector.mProfiles = new int[]{0, 1}; + events = tracker.getEvents(0, true).getList(); + // Both events should now be returned. + assertEquals(2, events.size()); + BrightnessChangeEvent userZeroEvent; + BrightnessChangeEvent userOneEvent; + if (events.get(0).userId == 0) { + userZeroEvent = events.get(0); + userOneEvent = events.get(1); + } else { + userZeroEvent = events.get(1); + userOneEvent = events.get(0); + } + assertEquals(0, userZeroEvent.userId); + assertEquals("com.example.app", userZeroEvent.packageName); + assertEquals(1, userOneEvent.userId); + // Events from user 1 should have the package name redacted + assertNull(userOneEvent.packageName); } @Test @@ -597,6 +617,7 @@ public class BrightnessTrackerTest { Handler mHandler; boolean mIdleScheduled; boolean mInteractive = true; + int[] mProfiles; public TestInjector(Handler handler) { mHandler = handler; @@ -681,6 +702,15 @@ public class BrightnessTrackerTest { return userSerialNumber - 10; } + @Override + public int[] getProfileIds(UserManager userManager, int userId) { + if (mProfiles != null) { + return mProfiles; + } else { + return new int[]{userId}; + } + } + @Override public ActivityManager.StackInfo getFocusedStack() throws RemoteException { ActivityManager.StackInfo focusedStack = new ActivityManager.StackInfo(); @@ -689,15 +719,18 @@ public class BrightnessTrackerTest { return focusedStack; } + @Override public void scheduleIdleJob(Context context) { // Don't actually schedule jobs during unit tests. mIdleScheduled = true; } + @Override public void cancelIdleJob(Context context) { mIdleScheduled = false; } + @Override public boolean isInteractive(Context context) { return mInteractive; }