Launcher AllApps app prediction

15、launcher应用列表界面最上面一行应用推荐

现象:
Android S上,更新同年四月份gms包后,launcher应用列表上方多出一行图标。
{相册、时钟、比机、Gmail、YouTube、设置}
通过studio自带的Layout Inspector查看,这一部分界面属于all_apps_header。也就是应用列表的头信息布局中。
相关代码:
launcher view层:
多出的一行应用:Launcher\quickstep\src\com\android\launcher3\appprediction\PredictionRowView.java这里面初始化最上面一行图标,可以设置图标文字颜色。
分割线:Launcher\quickstep\src\com\android\launcher3\appprediction\AppsDividerView.java这里面设置分割线的颜色
多嘴一句,应用列表图标适配器:Launcher\src\com\android\launcher3\allapps\AllAppsGridAdapter.java 这里面标准的adapter,包含多类
型,根据不同类型显示不同的内容。onCreateViewHolder、onBindViewHolder初始化图标view、设置应用列表图标文字颜色等等。
launcher model层:
Launcher\quickstep\src\com\android\launcher3\model\QuickstepModelDelegate.java注册registerPredictor监听,有更新回调时调用

private void registerPredictor(PredictorState state, AppPredictor predictor) {
        state.predictor = predictor;
        state.predictor.registerPredictionUpdates(
                MODEL_EXECUTOR, t -> handleUpdate(state, t));
        state.predictor.requestPredictionUpdate();
    }

PredictionUpdateTask更新数据
Launcher\quickstep\src\com\android\launcher3\model\PredictionUpdateTask.java更新数据、更新界面信息。

framework层:—没用太深入的研究,简单看看
//framework边的注册
frameworks\base\core\java\android\app\prediction\AppPredictor.java
registerPredictionUpdates
//
frameworks\base\services\appprediction\java\com\android\server\appprediction\AppPredictionManagerService.java #
registerPredictionUpdates、registerPredictionUpdatesLocked、resolveService
//
frameworks\base\core\java\android\service\appprediction\AppPredictionService.java
registerPredictionUpdates

manager和service2部分,通过aidl通讯。service负责数据更新和回调。
AppPredictionPerUserService.java

resolveService里执行service内容,获取应用列表

SystemServer.java中判断是否配置相关config,来启动对应的service。
config相关:

<!-- The package name for the system's app prediction service.
         This service must be trusted, as it can be activated without explicit consent of the user.
         Example: "com.android.intelligence/.AppPredictionService"
-->
<string name="config_defaultAppPredictionService" translatable="false"></string>

源码里默认的PredictionService
packages\apps\OnDeviceAppPrediction\src\com\android\apppredictionservice\PredictionService.java

service需要继承framework里的extends AppPredictionService,实现数据、调用更新方法

public class PredictionService extends AppPredictionService {
    @Override
    public void onCreate() {
        super.onCreate();
    	...
    	postPredictionUpdateToAllClients();
    }
    private void postPredictionUpdateToAllClients() {
        for (AppPredictionSessionId session : activeLauncherSessions) {
            postPredictionUpdate(session);
        }
    }
    private void postPredictionUpdate(AppPredictionSessionId sessionId) {
    	//调用更新,参数传入更新列表
    	//一堆回调,最终调用launcher里更新,也就是launcher注册监听时传入的回调方法handleUpdate
        updatePredictions(sessionId, mAppSuggestionsEnabled ? predictionList : emptyList());
    }
}

gms包:
新增应用:AndroidSystemIntelligence_Features.apk 包名:com.google.android.as
新增覆盖:GmsConfigOverlayASI,包名:com.google.android.overlay.gmsconfig.asi,rro技术覆盖framework下面的config文件配置。

反编译google apk 发现AiAiPredictionService也是extends AppPredictionService的

string name="config_defaultAppPredictionService" translatable="false">com.google.android.as/com.google.android.apps.miphone.aiai.app.AiAiPredictionService</string>

========================================================================================================================================
接上篇15,重新写了一篇
https://blog.csdn.net/a396604593/article/details/123487805
本文主要补充说明一下prediction。
prediction的类型:
目前有主菜单应用、hotseat应用、widget三种
Launcher端相关的类:

Launcher\quickstep\src\com\android\launcher3\uioverrides\PredictedAppIcon.java
Launcher\quickstep\src\com\android\launcher3\uioverrides\PredictedAppIconInflater.java
Launcher\quickstep\src\com\android\launcher3\appprediction\PredictionRowView.java
Launcher\quickstep\src\com\android\launcher3\model\PredictionUpdateTask.java
Launcher\quickstep\src\com\android\launcher3\hybridhotseat\HotseatPredictionController.java
Launcher\quickstep\src\com\android\launcher3\hybridhotseat\HotseatPredictionModel.java
Launcher\quickstep\src\com\android\launcher3\model\WidgetsPredictionUpdateTask.java

未完待续

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值