admin管理员组

文章数量:1585029

这两种图标的添加都会走AddWorkspaceItemsTask.java,打断点就可以跟踪流程的发起和图标更新。

联系人中点击菜单可以添加快捷方式到桌面
Google play下载应用桌面显示下载进度图标

0、注册监听
LauncherAppState.java

InstallSessionTracker installSessionTracker =
                InstallSessionHelper.INSTANCE.get(context).registerInstallTracker(mModel);

InstallSessionHelper.java

    public InstallSessionTracker registerInstallTracker(InstallSessionTracker.Callback callback) {
    	//创建跟踪器
        InstallSessionTracker tracker = new InstallSessionTracker(this, callback);

        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) {
            mInstaller.registerSessionCallback(tracker, MODEL_EXECUTOR.getHandler());
        } else {
        	//注册应用安装回调,当系统安装应用时会回调注册的tracker
            mLauncherApps.registerPackageInstallerSessionCallback(MODEL_EXECUTOR, tracker);
        }
        return tracker;
    }

1、创建图标
InstallSessionTracker.java

	@Override
    public void onCreated(int sessionId) {
    	//根据系统回调的sessionId获取sessionInfo 
        SessionInfo sessionInfo = pushSessionDisplayToLauncher(sessionId);
        if (sessionInfo != null) {
            mCallback.onInstallSessionCreated(PackageInstallInfo.fromInstallingState(sessionInfo));
        }
        //创建图标
        mInstallerCompat.tryQueuePromiseAppIcon(sessionInfo);
    }

2、更新进度
InstallSessionTracker.java

//系统回调更新图标进度
public void onProgressChanged(int sessionId, float progress) {
        SessionInfo session = mInstallerCompat.getVerifiedSessionInfo(sessionId);
        if (session != null && session.getAppPackageName() != null) {
            mCallback.onPackageStateChanged(PackageInstallInfo.fromInstallingState(session));
        }
    }

PackageInstallStateChangedTask.java

...
//更新下载进度的数据
List<AppInfo> updatedAppInfos = apps.updatePromiseInstallInfo(mInstallInfo);
...
//更新界面
if (!updates.isEmpty()) {
                scheduleCallbackTask(callbacks -> callbacks.bindRestoreItemsChange(updates));
            }

BubbleTextView.java

//更新进度绘制图标
public PreloadIconDrawable applyProgressLevel() {
	...
	preloadIconDrawable.setLevel(progressLevel);
	...
}

3、下载完成
InstallSessionTracker.java

public void onFinished(int sessionId, boolean success) {
...
            mCallback.onPackageStateChanged(info);

            if (!success && mInstallerCompat.promiseIconAddedForId(sessionId)) {
                mCallback.onSessionFailure(packageName, key.mUser);
                // If it is successful, the id is removed in the the package added flow.
                mInstallerCompat.removePromiseIconId(sessionId);
            }
...
}

下载进度简单记录到这。后续遇到问题再详细跟进~

本文标签: 图标进度ScreenHomeAdd