Not sharing same task view between shortcuts

SplitScreen task shortcut was written with an expectation that only one
instance would be created at a time.

No that it's used by Accessibility, SplitScreen may be asked to provide
multiple shortcuts at a time for multiple tasks, and they share same
mTaskView.

Fixing this.

Bug: 78094307
Test: Manual
Change-Id: Ib440ca862b0677ec4a012ec9f2a225183b2c91f4
This commit is contained in:
Vadim Tryshev
2018-04-20 11:50:27 -07:00
parent 69632a46ab
commit 4d577fc1c5

View File

@@ -101,13 +101,9 @@ public class TaskSystemShortcut<T extends SystemShortcut> extends SystemShortcut
}
}
public static class SplitScreen extends TaskSystemShortcut implements OnPreDrawListener,
DeviceProfile.OnDeviceProfileChangeListener, View.OnLayoutChangeListener {
public static class SplitScreen extends TaskSystemShortcut {
private Handler mHandler;
private RecentsView mRecentsView;
private TaskView mTaskView;
private BaseDraggingActivity mActivity;
public SplitScreen() {
super(R.drawable.ic_split_screen, R.string.recent_task_option_split_screen);
@@ -125,11 +121,44 @@ public class TaskSystemShortcut<T extends SystemShortcut> extends SystemShortcut
if (!task.isDockable) {
return null;
}
mActivity = activity;
mRecentsView = activity.getOverviewPanel();
mTaskView = taskView;
final RecentsView recentsView = activity.getOverviewPanel();
final TaskThumbnailView thumbnailView = taskView.getThumbnail();
return (v -> {
final View.OnLayoutChangeListener onLayoutChangeListener =
new View.OnLayoutChangeListener() {
@Override
public void onLayoutChange(View v, int l, int t, int r, int b,
int oldL, int oldT, int oldR, int oldB) {
taskView.getRootView().removeOnLayoutChangeListener(this);
recentsView.removeIgnoreResetTask(taskView);
// Start animating in the side pages once launcher has been resized
recentsView.dismissTask(taskView, false, false);
}
};
final DeviceProfile.OnDeviceProfileChangeListener onDeviceProfileChangeListener =
new DeviceProfile.OnDeviceProfileChangeListener() {
@Override
public void onDeviceProfileChanged(DeviceProfile dp) {
activity.removeOnDeviceProfileChangeListener(this);
if (dp.isMultiWindowMode) {
taskView.getRootView().addOnLayoutChangeListener(
onLayoutChangeListener);
}
}
};
final OnPreDrawListener preDrawListener = new OnPreDrawListener() {
@Override
public boolean onPreDraw() {
taskView.getViewTreeObserver().removeOnPreDrawListener(this);
WindowManagerWrapper.getInstance().endProlongedAnimations();
return true;
}
};
AbstractFloatingView.closeOpenViews(activity, true,
AbstractFloatingView.TYPE_ALL & ~AbstractFloatingView.TYPE_REBIND_SAFE);
@@ -145,15 +174,15 @@ public class TaskSystemShortcut<T extends SystemShortcut> extends SystemShortcut
// Add a device profile change listener to kick off animating the side tasks
// once we enter multiwindow mode and relayout
activity.addOnDeviceProfileChangeListener(this);
activity.addOnDeviceProfileChangeListener(onDeviceProfileChangeListener);
final Runnable animStartedListener = () -> {
// Hide the task view and wait for the window to be resized
// TODO: Consider animating in launcher and do an in-place start activity
// afterwards
mRecentsView.addIgnoreResetTask(mTaskView);
mTaskView.setAlpha(0f);
mTaskView.getViewTreeObserver().addOnPreDrawListener(SplitScreen.this);
recentsView.addIgnoreResetTask(taskView);
taskView.setAlpha(0f);
taskView.getViewTreeObserver().addOnPreDrawListener(preDrawListener);
};
final int[] position = new int[2];
@@ -179,31 +208,6 @@ public class TaskSystemShortcut<T extends SystemShortcut> extends SystemShortcut
}
});
}
@Override
public boolean onPreDraw() {
mTaskView.getViewTreeObserver().removeOnPreDrawListener(this);
WindowManagerWrapper.getInstance().endProlongedAnimations();
return true;
}
@Override
public void onDeviceProfileChanged(DeviceProfile dp) {
mActivity.removeOnDeviceProfileChangeListener(this);
if (dp.isMultiWindowMode) {
mTaskView.getRootView().addOnLayoutChangeListener(this);
}
}
@Override
public void onLayoutChange(View v, int l, int t, int r, int b,
int oldL, int oldT, int oldR, int oldB) {
mTaskView.getRootView().removeOnLayoutChangeListener(this);
mRecentsView.removeIgnoreResetTask(mTaskView);
// Start animating in the side pages once launcher has been resized
mRecentsView.dismissTask(mTaskView, false, false);
}
}
public static class Pin extends TaskSystemShortcut {