安卓10.0 分屏
packages/apps/Launcher3/quickstep/recents_ui_overrides/src/com/android/quickstep/views/TaskMenuView.java
208 private void addMenuOption(TaskSystemShortcut menuOption, OnClickListener onClickListener) {
209 ViewGroup menuOptionView = (ViewGroup) mActivity.getLayoutInflater().inflate(
210 R.layout.task_view_menu_option, this, false);
211 menuOption.setIconAndLabelFor(
212 menuOptionView.findViewById(R.id.icon), menuOptionView.findViewById(R.id.text));
213 menuOptionView.setOnClickListener(onClickListener);
214 mOptionLayout.addView(menuOptionView);
215 }
packages/apps/Launcher3/quickstep/recents_ui_overrides/src/com/android/quickstep/TaskSystemShortcut.java
public static class SplitScreen extends MultiWindow
sysUiProxy.onSplitScreenInvoked()
frameworks/base/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java
frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java
private boolean onLongPressNavigationButtons(View v, @IdRes int btnId1, @IdRes int btnId2)
onLongPressRecents()
frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
public void toggleSplitScreen()
protected boolean toggleSplitScreenMode(int metricsDockAction, int metricsUndockAction)
分屏流程:
frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java
//长按任务栏进行分屏
onLongPressRecents()
mStatusBarLazy.get().toggleSplitScreenMode(MetricsEvent.ACTION_WINDOW_DOCK_LONGPRESS,MetricsEvent.ACTION_WINDOW_UNDOCK_LONGPRESS);
frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
toggleSplitScreenMode(int metricsDockAction, int metricsUndockAction)
mRecentsOptional.get().splitPrimaryTask(createMode, null, metricsDockAction);
frameworks/base/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyRecentsImpl.java
public boolean splitPrimaryTask(int stackCreateMode, Rect initialBounds, int metricsDockAction)
//支持分屏多窗口
if (runningTask.supportsSplitScreenMultiWindow) {
if (ActivityManagerWrapper.getInstance().setTaskWindowingModeSplitScreenPrimary(
runningTask.id, stackCreateMode, initialBounds)) {
mDividerOptional.ifPresent(Divider::onDockedTopTask);
// 全景服务正在处理拆分屏幕,因此只需跳过等待第一个绘制的通知,并通知分屏器立即开始制作动画。
mDividerOptional.ifPresent(Divider::onRecentsDrawn); return true; } } else { //不支持分屏多窗口 Toast.makeText(mContext, R.string.dock_non_resizeble_failed_to_dock_text,Toast.LENGTH_SHORT).show(); }新增setTaskWindowingModeSplitScreenPrimary函数,该函数可将任务移动至WindowingMode与ActivityType匹配SPLIT属性栈的Stack运行;