【源码剖析】Launcher 8.0 源码 (10) --- Launcher 启动流程 第四步之第3小步桌面UI模块创建

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,创建分模块。到此为止,桌面的各个模块的布局已经清晰,有些什么,按照什么参数已经定型。还剩下的就是每个模块的具体参数到底是多少,以及哪个图标放到对应位置。

猜你喜欢

转载自blog.csdn.net/dax120/article/details/81190723