diff options
Diffstat (limited to 'quickstep/src/com/android/quickstep/TaskSystemShortcut.java')
-rw-r--r-- | quickstep/src/com/android/quickstep/TaskSystemShortcut.java | 80 |
1 files changed, 41 insertions, 39 deletions
diff --git a/quickstep/src/com/android/quickstep/TaskSystemShortcut.java b/quickstep/src/com/android/quickstep/TaskSystemShortcut.java index 2ebf2525f..228af8e90 100644 --- a/quickstep/src/com/android/quickstep/TaskSystemShortcut.java +++ b/quickstep/src/com/android/quickstep/TaskSystemShortcut.java @@ -27,7 +27,6 @@ import android.os.RemoteException; import android.os.UserHandle; import android.util.Log; import android.view.View; -import android.view.ViewTreeObserver.OnPreDrawListener; import com.android.launcher3.AbstractFloatingView; import com.android.launcher3.BaseDraggingActivity; @@ -101,13 +100,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,16 +120,45 @@ 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); + } + } + }; + AbstractFloatingView.closeOpenViews(activity, true, AbstractFloatingView.TYPE_ALL & ~AbstractFloatingView.TYPE_REBIND_SAFE); + final int navBarPosition = WindowManagerWrapper.getInstance().getNavBarPosition(); + if (navBarPosition == WindowManagerWrapper.NAV_BAR_POS_INVALID) { + return; + } + boolean dockTopOrLeft = navBarPosition != WindowManagerWrapper.NAV_BAR_POS_LEFT; if (ActivityManagerWrapper.getInstance().startActivityFromRecents(taskId, - ActivityOptionsCompat.makeSplitScreenOptions(true))) { + ActivityOptionsCompat.makeSplitScreenOptions(dockTopOrLeft))) { ISystemUiProxy sysUiProxy = RecentsModel.getInstance(activity).getSystemUiProxy(); try { sysUiProxy.onSplitScreenInvoked(); @@ -145,15 +169,14 @@ 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); }; final int[] position = new int[2]; @@ -179,35 +202,12 @@ 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 { + private static final String TAG = Pin.class.getSimpleName(); + private Handler mHandler; public Pin() { @@ -237,6 +237,8 @@ public class TaskSystemShortcut<T extends SystemShortcut> extends SystemShortcut } catch (RemoteException e) { Log.w(TAG, "Failed to start screen pinning: ", e); } + } else { + taskView.notifyTaskLaunchFailed(TAG); } }; taskView.launchTask(true, resultCallback, mHandler); |