Loading services/core/java/com/android/server/display/BrightnessTracker.java +22 −3 Original line number Original line Diff line number Diff line Loading @@ -70,6 +70,8 @@ import java.util.ArrayDeque; import java.util.ArrayList; import java.util.ArrayList; import java.util.Deque; import java.util.Deque; import java.util.HashMap; import java.util.Map; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit; /** /** Loading Loading @@ -225,15 +227,24 @@ public class BrightnessTracker { * @return List of recent {@link BrightnessChangeEvent}s * @return List of recent {@link BrightnessChangeEvent}s */ */ public ParceledListSlice<BrightnessChangeEvent> getEvents(int userId, boolean includePackage) { public ParceledListSlice<BrightnessChangeEvent> getEvents(int userId, boolean includePackage) { // TODO include apps from any managed profiles in the brightness information. BrightnessChangeEvent[] events; BrightnessChangeEvent[] events; synchronized (mEventsLock) { synchronized (mEventsLock) { events = mEvents.toArray(); events = mEvents.toArray(); } } int[] profiles = mInjector.getProfileIds(mUserManager, userId); Map<Integer, Boolean> 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<BrightnessChangeEvent> out = new ArrayList<>(events.length); ArrayList<BrightnessChangeEvent> out = new ArrayList<>(events.length); for (int i = 0; i < events.length; ++i) { for (int i = 0; i < events.length; ++i) { if (events[i].userId == userId) { Boolean redact = toRedact.get(events[i].userId); if (includePackage) { if (redact != null) { if (!redact) { out.add(events[i]); out.add(events[i]); } else { } else { BrightnessChangeEvent event = new BrightnessChangeEvent((events[i]), BrightnessChangeEvent event = new BrightnessChangeEvent((events[i]), Loading Loading @@ -817,6 +828,14 @@ public class BrightnessTracker { return userManager.getUserHandle(userSerialNumber); 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 { public ActivityManager.StackInfo getFocusedStack() throws RemoteException { return ActivityManager.getService().getFocusedStackInfo(); return ActivityManager.getService().getFocusedStackInfo(); } } Loading services/tests/servicestests/src/com/android/server/display/BrightnessTrackerTest.java +33 −0 Original line number Original line Diff line number Diff line Loading @@ -338,6 +338,26 @@ public class BrightnessTrackerTest { assertFalse(event.isDefaultBrightnessConfig); assertFalse(event.isDefaultBrightnessConfig); assertEquals(1.0, event.powerBrightnessFactor, FLOAT_DELTA); assertEquals(1.0, event.powerBrightnessFactor, FLOAT_DELTA); assertFalse(event.isUserSetBrightness); 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 @Test Loading Loading @@ -597,6 +617,7 @@ public class BrightnessTrackerTest { Handler mHandler; Handler mHandler; boolean mIdleScheduled; boolean mIdleScheduled; boolean mInteractive = true; boolean mInteractive = true; int[] mProfiles; public TestInjector(Handler handler) { public TestInjector(Handler handler) { mHandler = handler; mHandler = handler; Loading Loading @@ -681,6 +702,15 @@ public class BrightnessTrackerTest { return userSerialNumber - 10; return userSerialNumber - 10; } } @Override public int[] getProfileIds(UserManager userManager, int userId) { if (mProfiles != null) { return mProfiles; } else { return new int[]{userId}; } } @Override @Override public ActivityManager.StackInfo getFocusedStack() throws RemoteException { public ActivityManager.StackInfo getFocusedStack() throws RemoteException { ActivityManager.StackInfo focusedStack = new ActivityManager.StackInfo(); ActivityManager.StackInfo focusedStack = new ActivityManager.StackInfo(); Loading @@ -689,15 +719,18 @@ public class BrightnessTrackerTest { return focusedStack; return focusedStack; } } @Override public void scheduleIdleJob(Context context) { public void scheduleIdleJob(Context context) { // Don't actually schedule jobs during unit tests. // Don't actually schedule jobs during unit tests. mIdleScheduled = true; mIdleScheduled = true; } } @Override public void cancelIdleJob(Context context) { public void cancelIdleJob(Context context) { mIdleScheduled = false; mIdleScheduled = false; } } @Override public boolean isInteractive(Context context) { public boolean isInteractive(Context context) { return mInteractive; return mInteractive; } } Loading Loading
services/core/java/com/android/server/display/BrightnessTracker.java +22 −3 Original line number Original line Diff line number Diff line Loading @@ -70,6 +70,8 @@ import java.util.ArrayDeque; import java.util.ArrayList; import java.util.ArrayList; import java.util.Deque; import java.util.Deque; import java.util.HashMap; import java.util.Map; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit; /** /** Loading Loading @@ -225,15 +227,24 @@ public class BrightnessTracker { * @return List of recent {@link BrightnessChangeEvent}s * @return List of recent {@link BrightnessChangeEvent}s */ */ public ParceledListSlice<BrightnessChangeEvent> getEvents(int userId, boolean includePackage) { public ParceledListSlice<BrightnessChangeEvent> getEvents(int userId, boolean includePackage) { // TODO include apps from any managed profiles in the brightness information. BrightnessChangeEvent[] events; BrightnessChangeEvent[] events; synchronized (mEventsLock) { synchronized (mEventsLock) { events = mEvents.toArray(); events = mEvents.toArray(); } } int[] profiles = mInjector.getProfileIds(mUserManager, userId); Map<Integer, Boolean> 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<BrightnessChangeEvent> out = new ArrayList<>(events.length); ArrayList<BrightnessChangeEvent> out = new ArrayList<>(events.length); for (int i = 0; i < events.length; ++i) { for (int i = 0; i < events.length; ++i) { if (events[i].userId == userId) { Boolean redact = toRedact.get(events[i].userId); if (includePackage) { if (redact != null) { if (!redact) { out.add(events[i]); out.add(events[i]); } else { } else { BrightnessChangeEvent event = new BrightnessChangeEvent((events[i]), BrightnessChangeEvent event = new BrightnessChangeEvent((events[i]), Loading Loading @@ -817,6 +828,14 @@ public class BrightnessTracker { return userManager.getUserHandle(userSerialNumber); 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 { public ActivityManager.StackInfo getFocusedStack() throws RemoteException { return ActivityManager.getService().getFocusedStackInfo(); return ActivityManager.getService().getFocusedStackInfo(); } } Loading
services/tests/servicestests/src/com/android/server/display/BrightnessTrackerTest.java +33 −0 Original line number Original line Diff line number Diff line Loading @@ -338,6 +338,26 @@ public class BrightnessTrackerTest { assertFalse(event.isDefaultBrightnessConfig); assertFalse(event.isDefaultBrightnessConfig); assertEquals(1.0, event.powerBrightnessFactor, FLOAT_DELTA); assertEquals(1.0, event.powerBrightnessFactor, FLOAT_DELTA); assertFalse(event.isUserSetBrightness); 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 @Test Loading Loading @@ -597,6 +617,7 @@ public class BrightnessTrackerTest { Handler mHandler; Handler mHandler; boolean mIdleScheduled; boolean mIdleScheduled; boolean mInteractive = true; boolean mInteractive = true; int[] mProfiles; public TestInjector(Handler handler) { public TestInjector(Handler handler) { mHandler = handler; mHandler = handler; Loading Loading @@ -681,6 +702,15 @@ public class BrightnessTrackerTest { return userSerialNumber - 10; return userSerialNumber - 10; } } @Override public int[] getProfileIds(UserManager userManager, int userId) { if (mProfiles != null) { return mProfiles; } else { return new int[]{userId}; } } @Override @Override public ActivityManager.StackInfo getFocusedStack() throws RemoteException { public ActivityManager.StackInfo getFocusedStack() throws RemoteException { ActivityManager.StackInfo focusedStack = new ActivityManager.StackInfo(); ActivityManager.StackInfo focusedStack = new ActivityManager.StackInfo(); Loading @@ -689,15 +719,18 @@ public class BrightnessTrackerTest { return focusedStack; return focusedStack; } } @Override public void scheduleIdleJob(Context context) { public void scheduleIdleJob(Context context) { // Don't actually schedule jobs during unit tests. // Don't actually schedule jobs during unit tests. mIdleScheduled = true; mIdleScheduled = true; } } @Override public void cancelIdleJob(Context context) { public void cancelIdleJob(Context context) { mIdleScheduled = false; mIdleScheduled = false; } } @Override public boolean isInteractive(Context context) { public boolean isInteractive(Context context) { return mInteractive; return mInteractive; } } Loading