Merge "Make onTaskDisplayChanged/onTaskRemoved work." into rvc-dev
This commit is contained in:
@@ -644,7 +644,7 @@ class Task extends WindowContainer<WindowContainer> {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
removeImmediately();
|
removeImmediately();
|
||||||
if (!isRootTask) {
|
if (isLeafTask()) {
|
||||||
mAtmService.getTaskChangeNotificationController().notifyTaskRemoved(mTaskId);
|
mAtmService.getTaskChangeNotificationController().notifyTaskRemoved(mTaskId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2904,7 +2904,7 @@ class Task extends WindowContainer<WindowContainer> {
|
|||||||
adjustBoundsForDisplayChangeIfNeeded(dc);
|
adjustBoundsForDisplayChangeIfNeeded(dc);
|
||||||
}
|
}
|
||||||
super.onDisplayChanged(dc);
|
super.onDisplayChanged(dc);
|
||||||
if (!isRootTask) {
|
if (isLeafTask()) {
|
||||||
final int displayId = (dc != null) ? dc.getDisplayId() : INVALID_DISPLAY;
|
final int displayId = (dc != null) ? dc.getDisplayId() : INVALID_DISPLAY;
|
||||||
mWmService.mAtmService.getTaskChangeNotificationController().notifyTaskDisplayChanged(
|
mWmService.mAtmService.getTaskChangeNotificationController().notifyTaskDisplayChanged(
|
||||||
mTaskId, displayId);
|
mTaskId, displayId);
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ import static org.junit.Assert.assertTrue;
|
|||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.app.ActivityManager;
|
import android.app.ActivityManager;
|
||||||
import android.app.ActivityManager.TaskDescription;
|
import android.app.ActivityManager.TaskDescription;
|
||||||
|
import android.app.ActivityOptions;
|
||||||
import android.app.ActivityTaskManager;
|
import android.app.ActivityTaskManager;
|
||||||
import android.app.ActivityView;
|
import android.app.ActivityView;
|
||||||
import android.app.IActivityManager;
|
import android.app.IActivityManager;
|
||||||
@@ -43,6 +44,7 @@ import android.os.RemoteException;
|
|||||||
import android.platform.test.annotations.Presubmit;
|
import android.platform.test.annotations.Presubmit;
|
||||||
import android.support.test.uiautomator.UiDevice;
|
import android.support.test.uiautomator.UiDevice;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
|
import android.view.Display;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
|
||||||
import androidx.test.filters.FlakyTest;
|
import androidx.test.filters.FlakyTest;
|
||||||
@@ -319,15 +321,91 @@ public class TaskStackChangedListenerTest {
|
|||||||
waitForCallback(singleTaskDisplayEmptyLatch);
|
waitForCallback(singleTaskDisplayEmptyLatch);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testTaskDisplayChanged() throws Exception {
|
||||||
|
final CountDownLatch activityViewReadyLatch = new CountDownLatch(1);
|
||||||
|
final ActivityViewTestActivity activity =
|
||||||
|
(ActivityViewTestActivity) startTestActivity(ActivityViewTestActivity.class);
|
||||||
|
final ActivityView activityView = activity.getActivityView();
|
||||||
|
activityView.setCallback(new ActivityView.StateCallback() {
|
||||||
|
@Override
|
||||||
|
public void onActivityViewReady(ActivityView view) {
|
||||||
|
activityViewReadyLatch.countDown();
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void onActivityViewDestroyed(ActivityView view) {}
|
||||||
|
});
|
||||||
|
waitForCallback(activityViewReadyLatch);
|
||||||
|
|
||||||
|
// Launch a Activity inside ActivityView.
|
||||||
|
final Object[] params1 = new Object[1];
|
||||||
|
final CountDownLatch displayChangedLatch1 = new CountDownLatch(1);
|
||||||
|
final int activityViewDisplayId = activityView.getVirtualDisplayId();
|
||||||
|
registerTaskStackChangedListener(
|
||||||
|
new TaskDisplayChangedListener(
|
||||||
|
activityViewDisplayId, params1, displayChangedLatch1));
|
||||||
|
int taskId1;
|
||||||
|
ActivityOptions options1 = ActivityOptions.makeBasic()
|
||||||
|
.setLaunchDisplayId(activityView.getVirtualDisplayId());
|
||||||
|
synchronized (sLock) {
|
||||||
|
taskId1 = startTestActivity(ActivityInActivityView.class, options1).getTaskId();
|
||||||
|
}
|
||||||
|
waitForCallback(displayChangedLatch1);
|
||||||
|
|
||||||
|
assertEquals(taskId1, params1[0]);
|
||||||
|
|
||||||
|
// Launch the Activity in the default display, expects that reparenting happens.
|
||||||
|
final Object[] params2 = new Object[1];
|
||||||
|
final CountDownLatch displayChangedLatch2 = new CountDownLatch(1);
|
||||||
|
registerTaskStackChangedListener(
|
||||||
|
new TaskDisplayChangedListener(
|
||||||
|
Display.DEFAULT_DISPLAY, params2, displayChangedLatch2));
|
||||||
|
int taskId2;
|
||||||
|
ActivityOptions options2 = ActivityOptions.makeBasic()
|
||||||
|
.setLaunchDisplayId(Display.DEFAULT_DISPLAY);
|
||||||
|
synchronized (sLock) {
|
||||||
|
taskId2 = startTestActivity(ActivityInActivityView.class, options2).getTaskId();
|
||||||
|
}
|
||||||
|
waitForCallback(displayChangedLatch2);
|
||||||
|
|
||||||
|
assertEquals(taskId2, params2[0]);
|
||||||
|
assertEquals(taskId1, taskId2); // TaskId should be same since reparenting happens.
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class TaskDisplayChangedListener extends TaskStackListener {
|
||||||
|
private int mDisplayId;
|
||||||
|
private final Object[] mParams;
|
||||||
|
private final CountDownLatch mDisplayChangedLatch;
|
||||||
|
TaskDisplayChangedListener(
|
||||||
|
int displayId, Object[] params, CountDownLatch displayChangedLatch) {
|
||||||
|
mDisplayId = displayId;
|
||||||
|
mParams = params;
|
||||||
|
mDisplayChangedLatch = displayChangedLatch;
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void onTaskDisplayChanged(int taskId, int displayId) throws RemoteException {
|
||||||
|
// Filter out the events for the uninterested displays.
|
||||||
|
// if (displayId != mDisplayId) return;
|
||||||
|
mParams[0] = taskId;
|
||||||
|
mDisplayChangedLatch.countDown();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Starts the provided activity and returns the started instance.
|
* Starts the provided activity and returns the started instance.
|
||||||
*/
|
*/
|
||||||
private TestActivity startTestActivity(Class<?> activityClass) throws InterruptedException {
|
private TestActivity startTestActivity(Class<?> activityClass) throws InterruptedException {
|
||||||
|
return startTestActivity(activityClass, ActivityOptions.makeBasic());
|
||||||
|
}
|
||||||
|
|
||||||
|
private TestActivity startTestActivity(Class<?> activityClass, ActivityOptions options)
|
||||||
|
throws InterruptedException {
|
||||||
final ActivityMonitor monitor = new ActivityMonitor(activityClass.getName(), null, false);
|
final ActivityMonitor monitor = new ActivityMonitor(activityClass.getName(), null, false);
|
||||||
getInstrumentation().addMonitor(monitor);
|
getInstrumentation().addMonitor(monitor);
|
||||||
final Context context = getInstrumentation().getContext();
|
final Context context = getInstrumentation().getContext();
|
||||||
context.startActivity(
|
context.startActivity(
|
||||||
new Intent(context, activityClass).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
|
new Intent(context, activityClass).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK),
|
||||||
|
options.toBundle());
|
||||||
final TestActivity activity = (TestActivity) monitor.waitForActivityWithTimeout(1000);
|
final TestActivity activity = (TestActivity) monitor.waitForActivityWithTimeout(1000);
|
||||||
if (activity == null) {
|
if (activity == null) {
|
||||||
throw new RuntimeException("Timed out waiting for Activity");
|
throw new RuntimeException("Timed out waiting for Activity");
|
||||||
@@ -337,6 +415,9 @@ public class TaskStackChangedListenerTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void registerTaskStackChangedListener(ITaskStackListener listener) throws Exception {
|
private void registerTaskStackChangedListener(ITaskStackListener listener) throws Exception {
|
||||||
|
if (mTaskStackListener != null) {
|
||||||
|
ActivityTaskManager.getService().unregisterTaskStackListener(mTaskStackListener);
|
||||||
|
}
|
||||||
mTaskStackListener = listener;
|
mTaskStackListener = listener;
|
||||||
ActivityTaskManager.getService().registerTaskStackListener(listener);
|
ActivityTaskManager.getService().registerTaskStackListener(listener);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user