Merge "Include slider events from managed profile."

This commit is contained in:
TreeHugger Robot
2018-02-28 19:33:25 +00:00
committed by Android (Google) Code Review
2 changed files with 55 additions and 3 deletions

View File

@@ -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<BrightnessChangeEvent> 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<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);
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();
}

View File

@@ -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;
}