Launcher3小部件Widget添加流程分析
首先,看看Launcher3原生的Widget是如何获取到并显示的。原生的Widget是在AllApps界面显示的,也就是抽屉界面。
在Launcher.java 的onCreate()函数中先获取AppWidgetProviderInfo信息:
protected void onCreate(Bundle savedInstanceState) {
// Update customization drawer _after_ restoring the states
if (mAppsCustomizeContent != null) {
mAppsCustomizeContent.onPackagesUpdated(
LauncherModel.getSortedWidgetsAndShortcuts(this));
}
}
mAppsCustomizeContent 即显示AllApps和Widget的界面AppsCustomizePagedView,
LauncherModel.getSortedWidgetsAndShortcuts(this)从数据库中获取到经过排序的Widgets信息并传入AppsCustomizePagedView显示,具体实现就参考LauncherModel相关代码。
这里跳转到AppsCustomizePagedView的onPackagesUpdated函数中,在onPackagesUpdated中,会将前面获取到的信息赋值给一个全局的ArrayList<object> mWidgets,后续的所有操作都是从这个mWidgets中获取相关信息的。
在获取到mWidgets之后,就要将之添加显示到AppsCustomizePagedView中,Launcher3是在AppsCustomizePagedView的
@Override
public void syncPageItems(int page, boolean immediate) {
if (mContentType == ContentType.Widgets) {
syncWidgetPageItems(page, immediate);
} else {
syncAppsPageItems(page, immediate);
}
}
调用syncWidgetPageItems(pa