Android13 Launcher3 定制
去掉Google搜索栏
aosp/packages/apps/Launcher3/src_build_config/com/android/launcher3/BuildConfig.java
修改QSB_ON_FIRST_SCREEN为false
public static final boolean QSB_ON_FIRST_SCREEN = false;
去掉抽屉菜单,所有应用都放到桌面
增加控制变量
aosp/packages/apps/Launcher3/src_build_config/com/android/launcher3/BuildConfig.java
增加
public static final boolean REMOVE_DRAWER = true;
aosp/packages/apps/Launcher3/src/com/android/launcher3/config/FeatureFlags.java
增加
public static final boolean REMOVE_DRAWER = BuildConfig.REMOVE_DRAWER;
禁用上滑打开抽屉应用菜单
aosp/packages/apps/Launcher3/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/PortraitStatesTouchController.java
@Overrideprotected boolean canInterceptTouch(MotionEvent ev) {if(FeatureFlags.REMOVE_DRAWER){return false;}....}
加载所有应用
aosp/packages/apps/Launcher3/src/com/android/launcher3/model/LoaderTask.java
public void run() {...Trace.beginSection("LoadAllApps");List<LauncherActivityInfo> allActivityList;try {allActivityList = loadAllApps();} finally {Trace.endSection();}logASplit(logger, "loadAllApps");// 增加if (FeatureFlags.REMOVE_DRAWER){getAllApplications();}verifyNotStopped();mResults.bindAllApps();logASplit(logger, "bindAllApps");...}private void getAllApplications() {Log.d(TAG,"getAllApplications");final Context context =mApp.getContext();ArrayList<Pair<ItemInfo,Object>> installQueue = new ArrayList<>();final List<UserHandle> profiles =mUserManager.getUserProfiles();for (UserHandle user : profiles) {final List<LauncherActivityInfo> apps = mLauncherApps.getActivityList(null,user);ArrayList<ItemInstallQueue.PendingInstallShortcutInfo>added = new ArrayList<ItemInstallQueue.PendingInstallShortcutInfo>();synchronized (this) {for (LauncherActivityInfo app :apps) {
// if(app.getComponentName().getPackageName().equals("com.android.stk")||app.getComponentName().getPackageName().equals("com.android.fmradio")){
// continue;
// }Log.d(TAG,"getAllApplications packageName: " + app.getComponentName().getPackageName());ItemInstallQueue.PendingInstallShortcutInfo pendingInstallShortcutInfo= new ItemInstallQueue.PendingInstallShortcutInfo(app.getActivityInfo().packageName, user);added.add(pendingInstallShortcutInfo);installQueue.add(pendingInstallShortcutInfo.getItemInfo(context));}}if (!added.isEmpty()) {mApp.getModel().addAndBindAddedWorkspaceItems(installQueue);}}}
aosp/packages/apps/Launcher3/src/com/android/launcher3/model/ItemInstallQueue.java
// 修改private为publicpublic static class PendingInstallShortcutInfo extends ItemInfo {}
安装的app添加到workspace工作区
aosp/packages/apps/Launcher3/src/com/android/launcher3/model/PackageUpdatedTask.java
@Overridepublic void execute(@NonNull final LauncherAppState app, @NonNull final BgDataModel dataModel,@NonNull final AllAppsList appsList) {...bindApplicationsIfNeeded();// 增加if(FeatureFlags.REMOVE_DRAWER){updateToWorkSpace(context, app,appsList);}final IntSet removedShortcuts = new IntSet();// Shortcuts to keep even if the corresponding app was removedfinal IntSet forceKeepShortcuts = new IntSet();...}//安装的app添加到workspace工作区public void updateToWorkSpace(Context context, LauncherAppState app, AllAppsList appsList){Log.d(TAG,"updateToWorkSpace");ArrayList<Pair<ItemInfo,Object>> installQueue = new ArrayList<>();UserManager mUserManager = app.getContext().getSystemService(UserManager.class);final List<UserHandle> profiles = mUserManager.getUserProfiles();ArrayList<ItemInstallQueue.PendingInstallShortcutInfo> added = new ArrayList<>();LauncherApps mLauncherApps = app.getContext().getSystemService(LauncherApps.class);for(UserHandle user : profiles){final List<LauncherActivityInfo> apps = mLauncherApps.getActivityList(null,user);synchronized (this){for(LauncherActivityInfo info :apps){for(AppInfo appInfo : appsList.data){String packageName = info.getComponentName().getPackageName();if(info.getComponentName().equals(appInfo.componentName)){if(DEBUG){Log.d(TAG,"updateToWorkSpace packageName: " + packageName);}ItemInstallQueue.PendingInstallShortcutInfo mPendingInstallShortcutInfo= new ItemInstallQueue.PendingInstallShortcutInfo(packageName,user);added.add(mPendingInstallShortcutInfo);installQueue.add(mPendingInstallShortcutInfo.getItemInfo(context));}}}}}if(!added.isEmpty()){app.getModel().addAndBindAddedWorkspaceItems(installQueue);}}
打开限制
清除数据重新加载还能加载图标
aosp/packages/apps/Launcher3/src/com/android/launcher3/model/AddWorkspaceItemsTask.java
public void execute(@NonNull final LauncherAppState app, @NonNull final BgDataModel dataModel,@NonNull final AllAppsList apps) {
...// b/139663018 Short-circuit this logic if the icon is a system appif (PackageManagerHelper.isSystemApp(app.getContext(),Objects.requireNonNull(item.getIntent()))) {if (TestProtocol.sDebugTracing) {Log.d(TestProtocol.MISSING_PROMISE_ICON,LOG + " Item is a system app.");}if(!FeatureFlags.REMOVE_DRAWER){continue;}}
...
}
这里不做修改的话如果清除所有数据,那么图标就不会加载
aosp/packages/apps/Launcher3/src/com/android/launcher3/model/BaseModelUpdateTask.java
@Overridepublic final void run() {if (!Objects.requireNonNull(mModel).isModelLoaded()) {if (DEBUG_TASKS) {Log.d(TAG, "Ignoring model task since loader is pending=" + this);}// Loader has not yet run.if(!FeatureFlags.REMOVE_DRAWER) {return;}}execute(mApp, mDataModel, mAllAppsList);}
顶部菜单移除remove换成取消cancel,无法移除
remove变成cancel
aosp/packages/apps/Launcher3/src/com/android/launcher3/DeleteDropTarget.java
private boolean canRemove(ItemInfo item) {// 增加if(FeatureFlags.REMOVE_DRAWER) {return false ;}return item.id != ItemInfo.NO_ID;}
无法删除图标
aosp/packages/apps/Launcher3/src/com/android/launcher3/dragndrop/DragController.java
protected void drop(DropTarget dropTarget, Runnable flingAnimation) {
...// Drop onto the target.boolean accepted = false;if (dropTarget != null) {dropTarget.onDragExit(mDragObject);if (dropTarget.acceptDrop(mDragObject)) {if (flingAnimation != null) {flingAnimation.run();} else {dropTarget.onDrop(mDragObject, mOptions);}accepted = true; // 增加if (FeatureFlags.REMOVE_DRAWER && dropTarget instanceof DeleteDropTarget&& isNeedCancelDrag(mDragObject.dragInfo)) {cancelDrag();}}}final View dropTargetAsView = dropTarget instanceof View ? (View) dropTarget : null;dispatchDropComplete(dropTargetAsView, accepted);
}private boolean isNeedCancelDrag(ItemInfo item){return (item.itemType == LauncherSettings.Favorites.ITEM_TYPE_APPLICATION ||item.itemType == LauncherSettings.Favorites.ITEM_TYPE_FOLDER);
}
Android 13.0 桌面改成单层桌面的代码记录
launcher3去掉抽屉菜单,所有用都放到桌面,无法拖拽删除图标,去除hotseat
Android11去除抽屉模式
相关文章:
Android13 Launcher3 定制
去掉Google搜索栏 aosp/packages/apps/Launcher3/src_build_config/com/android/launcher3/BuildConfig.java 修改QSB_ON_FIRST_SCREEN为false public static final boolean QSB_ON_FIRST_SCREEN false;去掉抽屉菜单,所有应用都放到桌面 增加控制变量 aosp/pac…...
其他word转化为PDF的方式
将 Word 文档转换为 PDF 格式,除了使用 COM 自动化外,还有其他一些方法可以在 Java 中实现。这些方法通常更加可靠和跨平台。以下是一些常用的方法: 1. 使用 Apache POI 和 Apache PDFBox 这种方法涉及使用 Apache POI 库读取 Word 文档&am…...
【Axure】axure rp 导入元件库和使用,主流元件库下载使用
vant 元件库下载:Vant4 设计资源 element UI 元件库下载:element ui 设计资源 Andt Design Vue 下载设计资源:Andt Design Vue Andt Design Pro下载设计资源:Andt Design Pro Arco Design 设计资源:Arco Design …...
ISP 处理流程
#灵感# 摆烂时间太长了,感觉知识忘光光了。重新学习,常学常新。 因为公司文档都不让摘抄、截取,所以内容是工作的一些自己记录和网络内容,不对的欢迎批评指正。 1、ISP概述 ISP是Image Signal Processor 的简称,也就…...
【计算思维】少儿编程蓝桥杯青少组计算思维题考试真题及解析C
【科技素养】少儿编程蓝桥杯青少组计算思维题考试真题及解析 1.天平的左右两端分别放有一些砝码,如下图所示,右边的砝码不变,从左边最多拿走几个砝码,可以使天平左右两边平衡: A、1 B、2 C、3 D、4 2.把下面的图形…...
百望云斩获“新华信用金兰杯”ESG优秀案例 全面赋能企业绿色数字化
近年来,中国ESG蓬勃发展,在政策体系构建、ESG信披ESG投资和国际合作等方面都取得了阶段性成效,ESG生态不断完善。全社会对ESG的认识及实践也在不断深化,ESG实践者的队伍在不断发展壮大。 ESG作为识别企业高质量发展的重要指标&…...
bclinux aarch64 ceph 14.2.10 对象存储 http网关 CEPH OBJECT GATEWAY Civetweb
相关内容 bclinux aarch64 ceph 14.2.10 文件存储 Ceph File System, 需要部署mds: ceph-deploy mds-CSDN博客 ceph-deploy bclinux aarch64 ceph 14.2.10【3】vdbench fsd 文件系统测试-CSDN博客 ceph-deploy bclinux aarch64 ceph 14.2.10【2】vdbench rbd 块设…...
2023年亚太杯数学建模思路 - 复盘:人力资源安排的最优化模型
文章目录 0 赛题思路1 描述2 问题概括3 建模过程3.1 边界说明3.2 符号约定3.3 分析3.4 模型建立3.5 模型求解 4 模型评价与推广5 实现代码 建模资料 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 描述 …...
【广州华锐互动】VR居家防火逃生模拟演练增强训练的真实性
VR软件开发公司广州华锐互动在消防培训领域已开发了多款VR产品,今天为大家介绍VR居家防火逃生模拟演练系统,这是一种基于虚拟现实技术的消防教育训练设备,通过模拟真实的火灾场景,让使用者身临其境地体验火灾逃生过程,…...
PaddleClas学习1——使用PPLCNet模型对车辆属性进行识别(python)
使用PPLCNet模型对车辆属性进行识别 1. 配置PaddlePaddle,PaddleClas环境1.1 安装PaddlePaddle(1)创建 docker 容器(2)退出/进入 docker 容器(3) 安装验证1.2 安装python3.8(可选)1.3 安装 PaddleClas2. 模型推理2.1 下载官方提供的车辆属性模型2.2 基于 Python 预测引…...
CSS 实现新拟态(Neumorphism) UI 风格
什么是新拟态(Neumorphism) UI 风格?网上似乎还没有一个准确统一的定义。按照我个人的通俗理解,就是将界面的一部分凸起来,另一部分凹下去,形成的一种错落有致的拟物风格。代表作是乌克兰设计师 Alexander Plyuto 在各平台发布的新…...
js 深度学习(六)
立即执行函数 immediate invoked function expression 自动执行 执行完成后立即释放 (function(){var a 1,b2;console.log(ab) }()) // w3c建议 (function(a,b){return ab; })(a,b); // 可以加参数 可以有返回值表达式才能被执行符号执行,被小括号包裹的是表达式…...
【机器学习基础】机器学习的模型评估(评估方法及性能度量原理及主要公式)
🚀个人主页:为梦而生~ 关注我一起学习吧! 💡专栏:机器学习 欢迎订阅!后面的内容会越来越有意思~ 💡往期推荐: 【机器学习基础】机器学习入门(1) 【机器学习基…...
React hooks(一):useState
1.React hooks React hooks是React16.8的新特性,可以让React函数组件具有状态,并提供类似componentDidMount和componentDidUpdate等生命周期方法。 React 早期版本,类组件可以在shouldComponentUpdate中,通过判断props和state是…...
springboot集成swagger3+解决页面无法访问问题
引入依赖 pom文件引入swagger3依赖 <dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId><version>3.0.0</version></dependency>配置启动文件 swagger使用ant_pattern_parser解析…...
mapreduce-maven--30.串联所有单词的字串
项目对象模型(Project Object Model,POM):Maven使用POM文件来描述项目的结构、依赖和构建设置。POM是一个XML文件,位于项目根目录下,并包含项目的基本信息、构建设置、依赖管理等。 依赖管理:M…...
Hive使用max case when over partition by 实现单个窗口取两个窗口的值(单个开窗函数,实际取两个窗口)
一、Hive开窗函数根据特定条件取上一条最接近时间的数据(单个开窗函数,实际取两个窗口) 针对于就诊业务,一次就诊,多个处方,处方结算时间可能不一致,然后会有多个AI助手推荐用药,会…...
2023年【北京市安全员-B证】试题及解析及北京市安全员-B证证考试
题库来源:安全生产模拟考试一点通公众号小程序 北京市安全员-B证试题及解析根据新北京市安全员-B证考试大纲要求,安全生产模拟考试一点通将北京市安全员-B证模拟考试试题进行汇编,组成一套北京市安全员-B证全真模拟考试试题,学员…...
二维码智慧门牌管理系统升级解决方案:流量监控引领服务卓越
文章目录 前言一、流量监控功能概述二、流量监控的益处三、应用案例和成功故事四、实施和支持 前言 随着科技的不断发展,二维码智慧门牌管理系统在其便捷高效的管理方式下,深受广大用户喜爱。为了更好地满足用户需求,提升服务质量࿰…...
Linux内核面试题(1)
整理了一些网上的linux驱动岗位相关面试题,如果错误,欢迎指正。 1硬件中断号和Linux内核的IRQ号它们是如何映射的? irq驱动会从dts获取硬件中断号,dts里的interrupts字段,使用gic_irq_domain_translate函数。 然后使…...
C++ 智能指针的生命周期陷阱
C智能指针的生命周期陷阱:隐藏的坑与破解之道 在现代C开发中,智能指针作为资源管理的利器,极大减轻了开发者手动管理内存的负担。看似简单的shared_ptr、unique_ptr和weak_ptr背后,却隐藏着微妙的生命周期陷阱。这些陷阱可能导致…...
5分钟精通B站音频提取:从新手到高手的开源工具实战指南
5分钟精通B站音频提取:从新手到高手的开源工具实战指南 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirrors/…...
暗黑破坏神2存档修改实用教程:从入门到精通的d2s编辑器全攻略
暗黑破坏神2存档修改实用教程:从入门到精通的d2s编辑器全攻略 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor d2s-editor是一款专为《暗黑破坏神2》玩家打造的开源存档编辑工具,支持角色属性调整、物品管…...
嵌入式开发者的效率利器:在VS Code里实时看到MISRA-C违规提示(含头文件路径配置避坑)
嵌入式开发实战:用VS Code打造MISRA-C实时检查工作流 每次保存代码后才发现MISRA-C违规有多痛苦?想象一下这样的场景:你正在编写一段关键的车载控制逻辑,反复调试后终于通过了编译,却在提交前的静态检查中被揪出二十多…...
深度学习优化算法详解:从 SGD 到 AdamW
深度学习优化算法详解:从 SGD 到 AdamW 1. 背景与动机 优化算法是深度学习训练的核心,选择合适的优化器直接影响模型的收敛速度和最终性能。本文深入分析主流优化算法的原理和适用场景。 2. 梯度下降家族 2.1 SGD import torch import torch.nn as nnopt…...
cool-admin(midway版)数据权限缓存:基于用户角色的权限数据预加载
cool-admin(midway版)数据权限缓存:基于用户角色的权限数据预加载 【免费下载链接】cool-admin-midway 🔥 cool-admin(midway版)一个很酷的后台权限管理框架,模块化、插件化、CRUD极速开发,永久开源免费,基于midway.js…...
C++ 网络服务端主线:从线程池到 Reactor 的完整路线图
一、为什么要写这个系列? 前面我已经把 C 并发基础和线程池完整走了一遍: std::threadstd::mutexstd::condition_variablestd::atomic手写线程池future / 拒绝策略 / 优雅关闭 但到这里,其实还只停留在: 并发组件层 也就是说&a…...
Hackintool:面向黑苹果爱好者的硬件配置诊断与优化工具
Hackintool:面向黑苹果爱好者的硬件配置诊断与优化工具 【免费下载链接】Hackintool The Swiss army knife of vanilla Hackintoshing 项目地址: https://gitcode.com/gh_mirrors/ha/Hackintool 黑苹果配置过程中,硬件兼容性问题常常成为用户最头…...
WarcraftHelper:魔兽争霸III性能优化终极指南 - 10分钟打造完美游戏体验
WarcraftHelper:魔兽争霸III性能优化终极指南 - 10分钟打造完美游戏体验 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 魔兽争霸III作为经…...
HCPL-0700-000E,低输入电流、高增益且与高安全隔离性能的光耦
型号介绍今天我要向大家介绍的是 Broadcom 的光耦——HCPL-0700-000E。它的内部结构就像一个高效的“信号转换站”,结合了一个发光二极管和一个集成的高增益光子探测器。光电二极管和输出级采用独立引脚设计,当输入端接收到电流时,LED 会发出…...
