Launcher8.0启动流程的第四步,第3小步同样服务于第四步setupView,创建UI的各个模块,各个模块在Launcher.xml作为一个整体存在。所以将各模块创建好,整体也自然而然的创建好了。
第三小步源码如下:
mWorkspace.setHapticFeedbackEnabled(false);
mWorkspace.setOnLongClickListener(this);
mWorkspace.setup(mDragController);
mWorkspace.lockWallpaperToDefaultPage();
mWorkspace.bindAndInitFirstWorkspaceScreen(null /* recycled qsb */);
mDragController.addDragListener(mWorkspace);
mDropTargetBar = (DropTargetBar) mDragLayer.findViewById(R.id.drop_target_bar);
mAppsView = (AllAppsContainerView) findViewById(R.id.apps_view);
mWidgetsView = (WidgetsContainerView) findViewById(R.id.widgets_view);
if (mLauncherCallbacks != null && mLauncherCallbacks.getAllAppsSearchBarController() != null) {
AppsView.setSearchBarController(mLauncherCallbacks.getAllAppsSearchBarController());
} else {
mAppsView.setSearchBarController(new DefaultAppSearchController());
}
mDragController.setMoveTarget(mWorkspace);
mDragController.addDropTarget(mWorkspace);
mDropTargetBar.setup(mDragController);
if (FeatureFlags.LAUNCHER3_ALL_APPS_PULL_UP) {
mAllAppsController.setupViews(mAppsView, mHotseat, mWorkspace);
}
}
首先在workspace上绑定onlongclick方法。里面绑定的是Launcher里面的onlongclick。于是当长按workspace的时候,就会启用Launcher的onlongclick方法。
下面是Launcher中onlongclick关于workspace部分。
@Override
public boolean onLongClick(View v) {
if (v instanceof Workspace) {
if (!mWorkspace.isInOverviewMode()) {
getUserEventDispatcher().logActionOnContainer(Action.Touch.LONGPRESS,
Action.Direction.NONE, ContainerType.WORKSPACE,
mWorkspace.getCurrentPage());
showOverviewMode(true);
}
}
}
Launcher的onlongclick不仅仅绑定在workspace。还有其他模块也绑定。所以触发时需要进行判断。这里在workspace长按,如果长按的时候,不少overview这个模式,则进入overview这个模式。
mWorkspace.setup(mDragController); 在workspace中传入dragcontroller。 Dragcontroller的用途广泛,和拖拽有关的,比如,拖拽时顶部出现的选项栏等等都由Dragcontroller控制。
mWorkspace.lockWallpaperToDefaultPage(); 是设workspace时背景壁纸的偏移量的,Launcher有个壁纸随页面滑动的功能,也就是长壁纸功能。在此功能下,开机时的那一张被设为默认的壁纸起始页面。
mWorkspace.bindAndInitFirstWorkspaceScreen(null ); 绑定起始桌面的默认google search的。正如之前提到,google在开发Launcher的时候特地留了一个google search widget的入口。
mDragController.addDragListener(mWorkspace); 给workspace监听drag的权限
mDropTargetBar = (DropTargetBar) mDragLayer.findViewById(R.id.drop_target_bar);
mAppsView = (AllAppsContainerView) findViewById(R.id.apps_view);
if (mLauncherCallbacks != null && mLauncherCallbacks.getAllAppsSearchBarController() != null) {
mAppsView.setSearchBarController(mLauncherCallbacks.getAllAppsSearchBarController());
} else {
mAppsView.setSearchBarController(new DefaultAppSearchController());
}
mDragController.setMoveTarget(mWorkspace);
mDragController.addDropTarget(mWorkspace);
mDropTargetBar.setup(mDragController);
设置allapp的搜索栏以及提供在workspace顶部能够显示选项按钮。
mDropTargetBar顶部选项按钮,是Launcher.xml的组件之一。
当拖动应用的时候,顶部会给出该应用能够供给的一些选项。
通常有info、remove、disable、uninstall
info:从allapp拖动应用到桌面会出现,将应用拖到info并松开会显示应用的参数
Remove:删掉桌面的快捷方式,allapp中仍然保留
Disable:禁用应用,针对系统应用,这些应用不能被删除,如有需要,可以选择禁用该应用的功能。比如平板的通话和短信功能。
Uninstall:对于用户安装的应用,在拖拽时顶部会有uninstall选项。这是用户在桌面删除手机中应用的唯一方法。 删除应用可以在设置或者其他应用管理软件里面进行。
以上就是第3小步。而123三个小步合起来就是完整的启动流程第四步setupView,创建分模块。到此为止,桌面的各个模块的布局已经清晰,有些什么,按照什么参数已经定型。还剩下的就是每个模块的具体参数到底是多少,以及哪个图标放到对应位置。