Merge "Notify on task display change." into qt-r1-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
d2310e6ce3
@@ -177,4 +177,12 @@ oneway interface ITaskStackListener {
|
||||
* @param displayId the id of the display on which contents are drawn.
|
||||
*/
|
||||
void onSingleTaskDisplayDrawn(int displayId);
|
||||
|
||||
/**
|
||||
* Called when a task is reparented to a stack on a different display.
|
||||
*
|
||||
* @param taskId id of the task which was moved to a different display.
|
||||
* @param newDisplayId id of the new display.
|
||||
*/
|
||||
void onTaskDisplayChanged(int taskId, int newDisplayId);
|
||||
}
|
||||
|
||||
@@ -26,6 +26,7 @@ import android.os.RemoteException;
|
||||
/**
|
||||
* Classes interested in observing only a subset of changes using ITaskStackListener can extend
|
||||
* this class to avoid having to implement all the methods.
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
public abstract class TaskStackListener extends ITaskStackListener.Stub {
|
||||
@@ -177,4 +178,8 @@ public abstract class TaskStackListener extends ITaskStackListener.Stub {
|
||||
@Override
|
||||
public void onSingleTaskDisplayDrawn(int displayId) throws RemoteException {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTaskDisplayChanged(int taskId, int newDisplayId) throws RemoteException {
|
||||
}
|
||||
}
|
||||
|
||||
@@ -346,7 +346,7 @@ public class CarStatusBar extends StatusBar implements
|
||||
|
||||
CarSystemUIFactory factory = SystemUIFactory.getInstance();
|
||||
mCarFacetButtonController = factory.getCarDependencyComponent()
|
||||
.getCarFacetButtonController();
|
||||
.getCarFacetButtonController();
|
||||
mNotificationPanelBackground = getDefaultWallpaper();
|
||||
mScrimController.setScrimBehindDrawable(mNotificationPanelBackground);
|
||||
|
||||
@@ -925,6 +925,16 @@ public class CarStatusBar extends StatusBar implements
|
||||
Log.e(TAG, "Getting StackInfo from activity manager failed", e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTaskDisplayChanged(int taskId, int newDisplayId) {
|
||||
try {
|
||||
mCarFacetButtonController.taskChanged(
|
||||
ActivityTaskManager.getService().getAllStackInfos());
|
||||
} catch (Exception e) {
|
||||
Log.e(TAG, "Getting StackInfo from activity manager failed", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void onDrivingStateChanged(CarDrivingStateEvent notUsed) {
|
||||
|
||||
@@ -86,6 +86,14 @@ public abstract class TaskStackChangeListener {
|
||||
|
||||
public void onBackPressedOnTaskRoot(RunningTaskInfo taskInfo) { }
|
||||
|
||||
/**
|
||||
* Called when a task is reparented to a stack on a different display.
|
||||
*
|
||||
* @param taskId id of the task which was moved to a different display.
|
||||
* @param newDisplayId id of the new display.
|
||||
*/
|
||||
public void onTaskDisplayChanged(int taskId, int newDisplayId) { }
|
||||
|
||||
/**
|
||||
* Checks that the current user matches the process. Since
|
||||
* {@link android.app.ITaskStackListener} is not multi-user aware, handlers of
|
||||
|
||||
@@ -112,7 +112,7 @@ public class TaskStackChangeListeners extends TaskStackListener {
|
||||
|
||||
@Override
|
||||
public void onPinnedActivityRestartAttempt(boolean clearedTask)
|
||||
throws RemoteException{
|
||||
throws RemoteException {
|
||||
mHandler.removeMessages(H.ON_PINNED_ACTIVITY_RESTART_ATTEMPT);
|
||||
mHandler.obtainMessage(H.ON_PINNED_ACTIVITY_RESTART_ATTEMPT, clearedTask ? 1 : 0, 0)
|
||||
.sendToTarget();
|
||||
@@ -154,7 +154,7 @@ public class TaskStackChangeListeners extends TaskStackListener {
|
||||
public void onActivityLaunchOnSecondaryDisplayRerouted(RunningTaskInfo taskInfo,
|
||||
int requestedDisplayId) throws RemoteException {
|
||||
mHandler.obtainMessage(H.ON_ACTIVITY_LAUNCH_ON_SECONDARY_DISPLAY_REROUTED,
|
||||
requestedDisplayId, 0 /* unused */, taskInfo).sendToTarget();
|
||||
requestedDisplayId, 0 /* unused */, taskInfo).sendToTarget();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -208,6 +208,11 @@ public class TaskStackChangeListeners extends TaskStackListener {
|
||||
0 /* unused */).sendToTarget();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTaskDisplayChanged(int taskId, int newDisplayId) throws RemoteException {
|
||||
mHandler.obtainMessage(H.ON_TASK_DISPLAY_CHANGED, taskId, newDisplayId).sendToTarget();
|
||||
}
|
||||
|
||||
private final class H extends Handler {
|
||||
private static final int ON_TASK_STACK_CHANGED = 1;
|
||||
private static final int ON_TASK_SNAPSHOT_CHANGED = 2;
|
||||
@@ -228,6 +233,7 @@ public class TaskStackChangeListeners extends TaskStackListener {
|
||||
private static final int ON_SIZE_COMPAT_MODE_ACTIVITY_CHANGED = 17;
|
||||
private static final int ON_BACK_PRESSED_ON_TASK_ROOT = 18;
|
||||
private static final int ON_SINGLE_TASK_DISPLAY_DRAWN = 19;
|
||||
private static final int ON_TASK_DISPLAY_CHANGED = 20;
|
||||
|
||||
|
||||
public H(Looper looper) {
|
||||
@@ -313,7 +319,7 @@ public class TaskStackChangeListeners extends TaskStackListener {
|
||||
final RunningTaskInfo info = (RunningTaskInfo) msg.obj;
|
||||
for (int i = mTaskStackListeners.size() - 1; i >= 0; i--) {
|
||||
mTaskStackListeners.get(i)
|
||||
.onActivityLaunchOnSecondaryDisplayRerouted(info);
|
||||
.onActivityLaunchOnSecondaryDisplayRerouted(info);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -370,6 +376,12 @@ public class TaskStackChangeListeners extends TaskStackListener {
|
||||
}
|
||||
break;
|
||||
}
|
||||
case ON_TASK_DISPLAY_CHANGED: {
|
||||
for (int i = mTaskStackListeners.size() - 1; i >= 0; i--) {
|
||||
mTaskStackListeners.get(i).onTaskDisplayChanged(msg.arg1, msg.arg2);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -348,6 +348,9 @@ class Task extends WindowContainer<AppWindowToken> implements ConfigurationConta
|
||||
void onDisplayChanged(DisplayContent dc) {
|
||||
adjustBoundsForDisplayChangeIfNeeded(dc);
|
||||
super.onDisplayChanged(dc);
|
||||
final int displayId = (dc != null) ? dc.getDisplayId() : Display.INVALID_DISPLAY;
|
||||
mWmService.mAtmService.getTaskChangeNotificationController().notifyTaskDisplayChanged(
|
||||
mTaskId, displayId);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -55,6 +55,7 @@ class TaskChangeNotificationController {
|
||||
private static final int NOTIFY_SIZE_COMPAT_MODE_ACTIVITY_CHANGED_MSG = 20;
|
||||
private static final int NOTIFY_BACK_PRESSED_ON_TASK_ROOT = 21;
|
||||
private static final int NOTIFY_SINGLE_TASK_DISPLAY_DRAWN = 22;
|
||||
private static final int NOTIFY_TASK_DISPLAY_CHANGED_LISTENERS_MSG = 23;
|
||||
|
||||
// Delay in notifying task stack change listeners (in millis)
|
||||
private static final int NOTIFY_TASK_STACK_CHANGE_LISTENERS_DELAY = 100;
|
||||
@@ -159,6 +160,10 @@ class TaskChangeNotificationController {
|
||||
l.onSingleTaskDisplayDrawn(m.arg1);
|
||||
};
|
||||
|
||||
private final TaskStackConsumer mNotifyTaskDisplayChanged = (l, m) -> {
|
||||
l.onTaskDisplayChanged(m.arg1, m.arg2);
|
||||
};
|
||||
|
||||
@FunctionalInterface
|
||||
public interface TaskStackConsumer {
|
||||
void accept(ITaskStackListener t, Message m) throws RemoteException;
|
||||
@@ -241,6 +246,9 @@ class TaskChangeNotificationController {
|
||||
case NOTIFY_SINGLE_TASK_DISPLAY_DRAWN:
|
||||
forAllRemoteListeners(mNotifySingleTaskDisplayDrawn, msg);
|
||||
break;
|
||||
case NOTIFY_TASK_DISPLAY_CHANGED_LISTENERS_MSG:
|
||||
forAllRemoteListeners(mNotifyTaskDisplayChanged, msg);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -495,4 +503,14 @@ class TaskChangeNotificationController {
|
||||
forAllLocalListeners(mNotifySingleTaskDisplayDrawn, msg);
|
||||
msg.sendToTarget();
|
||||
}
|
||||
|
||||
/**
|
||||
* Notify listeners that a task is reparented to another display.
|
||||
*/
|
||||
void notifyTaskDisplayChanged(int taskId, int newDisplayId) {
|
||||
final Message msg = mHandler.obtainMessage(NOTIFY_TASK_DISPLAY_CHANGED_LISTENERS_MSG,
|
||||
taskId, newDisplayId);
|
||||
forAllLocalListeners(mNotifyTaskStackChanged, msg);
|
||||
msg.sendToTarget();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -162,6 +162,9 @@ public class SystemServicesTestRule implements TestRule {
|
||||
}
|
||||
|
||||
final ActivityTaskManagerService atms = mock(ActivityTaskManagerService.class);
|
||||
final TaskChangeNotificationController taskChangeNotificationController = mock(
|
||||
TaskChangeNotificationController.class);
|
||||
doReturn(taskChangeNotificationController).when(atms).getTaskChangeNotificationController();
|
||||
final WindowManagerGlobalLock wmLock = new WindowManagerGlobalLock();
|
||||
doReturn(wmLock).when(atms).getGlobalLock();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user