小部件推荐算法:
只能从一个应用中挑选一个小部件。
已经添加到桌面上的小部件不在推荐范围内。
路径:
packages/apps/Launcher3/quickstep/src/com/android/launcher3/model/WidgetsPredictionUpdateTask.java
2、4图标客制化
2、4、1双行显示
本功能通过prop属性控制:ro.launcher.iconlabelline
功能默认状态是关闭的,在Launcher3\res_unisoc\values\config_ext.xml中可以进行配置
<!-- add for app icon label display double lines --> <bool name="enable_icon_label_show_double_lines">false</bool>
2、4、2Hotseat应用图标名称显示
goole设计为通过图标来辨识应用,一般不显示title因为显示Hotseat title会导致待机区域变小,甚至导致某些widget无法显示
应用图标名称默认隐藏,若要显示,按照如下步骤修改:
-
步骤一:显示Hotseat应用图标名称:
Launcher3\src\com\android\launcher3\CellLayout.java
// Hotseat icons - remove text
if (child instanceof BubbleTextView) {
BubbleTextView bubbleChild = (BubbleTextView) child;
- bubbleChild.setTextVisibility(mContainerType != HOTSEAT);
+ bubbleChild.setTextVisibility(true);
}
-
步骤2 显示Hotseat区域文件夹图标名称
Launcher3\src\com\android\launcher3\WorkspaceLayoutManager.java
// Hide folder title in the hotseat
if (child instanceof FolderIcon) {
- ((FolderIcon) child).setTextVisible(false);
+ ((FolderIcon) child).setTextVisible(true);
}
-
步骤3:当拖拽动画结束后,显示Hotseat区域应用名称:
Launcher3\src\com\android\lancher3\BubbleTextView.java
public boolean shouldTextBeVisible() {
- // Text should be visible everywhere but the hotseat.
- Object tag = getParent() instanceof FolderIcon ? ((View) getParent()).getTag() : getTag();
- ItemInfo info = tag instanceof ItemInfo ? (ItemInfo) tag : null;
- return info == null || info.container != LauncherSettings.Favorites.CONTAINER_HOTSEAT;
+ return true;
}
-
步骤4:调整Hotseat图标大小
当修改完成后,若发现Hotseat图标名称显示不全,则需要调整Hotseat的大小
Launcher3\res\vaules\dimens.xml
- <dimen name="dynamic_grid_hotseat_extra_vertical_size">34dp</dimen>
+ <dimen name=" dynamic_grid_hotseat_extra_vertical_size">48dp</dimen>
2、4、3隐藏图标
在Launcher中隐藏某个应用图标及其widget
Launcher3\src\com\android\launcher3\AppFilter.java
- 步骤一:
-
新增一个类继承接口类:
Launcher3\src\com\android\launcher3\CustomAppFilter.java
package com.android.launcher3;
import android.content.ComponentName;
import android.content.Context;
public class CustomAppFilter extends AppFilter {
public CustomAppFilter(Context context) {
}
@Override
public boolean shouldShowApp(ComponentName app) {
// 实现此方法即可过滤相应的应用图标
if (app.getPackageName().equals("com.android.calendar")) {
return false; }
return true; } }
-
步骤二:在配置文件中配置该类:
Launcher3\res\vaules\config.xml
<!-- Various classes overriden by projects/build flavors. --> - <string name="app_filter_class" translatable="false"></string>
+ <string name="app_filter_class" translatable="false">com.android.launcher3.CustomAppFilter</string>
-
步骤3:混淆:该子类是隐式启动,其他地方没有调用,在编译过程中会被忽略。所以要避免忽略:
Launcher3\proguard.flags
+ -keep class com.android.launcher3.CustomAppFilter {
+ *;
+ }
2、5搜索框客制化
搜索框有两种显示方式:
SearchLauncherQuickStep的搜索框默认是在待机界面底部显示
除SearchLauncherQuickStep外,其他Launcher形态的搜索框均显示在底部
2、5、1移除Smartspace小部件
SearchLauncherQuickStep上方有一个固定的Smartspace部件,替换了Launcher3中的搜索框是无法拖动无法删除的
-
步骤一:移除此小部件
Launcher\src\com\android\launcher3\config\FeatureFlags.java
private FeatureFlags() {}
- public static final boolean QSB_ON_FIRST_SCREEN = true;
+ public static final boolean QSB_ON_FIRST_SCREEN = false;
步骤2:移除主屏幕设置中的At a glance:
launcher_preferences.xml
- <androidx.preference.PreferenceScreen
- android:key="pref_smartspace"
- android:persistent="false"
- android:summary="@string/smartspace_preferences_in_settings_desc"
- android:title="@string/smartspace_preferences_in_settings"/>
2、5、2搜索框可拖拽
步骤一:移除固定的搜索框小部件
步骤二:添加可以拖动的搜索小部件。
<appwidget
launcher:screen="0"
launcher:x="0"
launcher:y="0"
launcher:spanX="4"
launcher:spanY="1"
launcher:packageName="com.google.android.googlequicksearchbox"
launcher:className="com.google.android.googlequicksearchbox.SearchWidgetProvider" />
2、5、3替换搜索框
修改Launcher3\res\values\config.xml文件:
+ <!--add for use custom search widget--> + <string name="custom_search_component" translatable="false">
com.android.chrome/org.chromium.chrome.browser.searchwidget.SearchWidgetProvider</string>
2、6待机界面客制化
待机界面是开机解锁后或者按Home键后进入的界面
2、6、1待机箭头
在Launcher待机界面workspace下面中间区域有一个小箭头,该箭头提示用户可以通过向上滑动进入应用抽屉界面,在android12版本中,该箭头默认只在横屏模式下或者设置–>无障碍—>无障碍功能菜单开启的情况下才会显示,且在单层桌面下不允许显示:
-
当需要默认显示时:
Launcher3\src\com\android\launcher3\views\ScrimView.java
+ private static final boolean ALLWAYS_SHOW_DRAGHANDLE = true;
+
private void updateDragHandleVisibility(Drawable recycle) {
boolean visible = mLauncher.getDeviceProfile().isVerticalBarLayout() || mAM.isEnabled();
+ visible |= ALLWAYS_SHOW_DRAGHANDLE;
visible &= !MultiModeController.isSingleLayerMode();
boolean wasVisible = mDragHandle != null;
if (visible != wasVisible) {
2、6、2待机引导动画
首次开机后HotSeat区域会连续向上跳动6次,提示用户可以通过向上活动进入应用抽屉界面,这是一个进入应用抽屉引导动画,一旦用户进入抽屉后,该动画就不会再播放
该动画定义文件如下
Launcher3\res\animator-v23\discovery_bounce.xml
若要关闭此动画,定位如下:
+ private static final boolean HIDE_DISCOVERY_BOUNCE = true;
+
public static void showForHomeIfNeeded(Launcher launcher) {
+ if (HIDE_DISCOVERY_BOUNCE) return;
showForHomeIfNeeded(launcher, true);
}
public static void showForOverviewIfNeeded(Launcher launcher,
PagedOrientationHandler orientationHandler) {
+ if (HIDE_DISCOVERY_BOUNCE) return;
showForOverviewIfNeeded(launcher, true, orientationHandler);
}
public static void showForHomeIfNeeded(Launcher launcher) {
// if (HIDE_DISCOVERY_BOUNCE) return;
showForHomeIfNeeded(launcher, true);
}
private static void showForHomeIfNeeded(Launcher launcher, boolean withDelay) {
OnboardingPrefs onboardingPrefs = launcher.getOnboardingPrefs();
//if (HIDE_DISCOVERY_BOUNCE) return;
}
2、6、3待机界面上下阴影
待机界面从状态栏向下有一个渐变的阴影小伙。若需去除此效果,请如下修改:
Launcher3\res\vaules\styles.xml
- <item name="workspaceStatusBarScrim">@drawable/workspace_bg</item>
+ <item name="workspaceStatusBarScrim">@null</item>
2、7应用抽屉客制化
2、7、1背景透明
调整应用抽屉背景可以使其显示壁纸
-
功能开关:
通过prop属性进行控制
prop属性:ro.launcher.allapp.bgtransp - 功能默认状态:此功能默认关闭
-
功能配置:
调整透明度在Launcher3\es\values\config.xml下
<!--All apps background transparent alpha value should 0 ~ 200-->
<integer name="allapps_bg_alpha">64</integer>
2、7、2定制app在应用抽屉位置
可以指定某些app在应用抽屉中的位置
-
功能开关:
本功能通过 prop属性控制,可以使用该开关开启或者关闭本功能
prop属性:ro.launcher.allapp.customize - 默认状态:默认关闭
-
功能配置项:
item项格式:包名/类名#位置
修改配置文件:Launcher3\ext\res\xml\arrays.xml
<string-array name="customize_app_position" translatable="false">
<item> com.android.contacts#0</item>
<item> com.android.settings#1</item>
</string-array>
类名属于可选配置,包名和位置属于必选,位置是从0开始,当位置大于all app的数量是,则排列在最后,位置小于0则图标隐藏不显示
2、7、3模糊查找:
可以根据应用名称中的任意字符,在应用抽屉界面上的搜索框查找此应用
功能开关:通过prop属性控制:ro.launcher.allappp.fzzysearch
默认状态:只在android12非go版本开启,此算法会导致搜索时间变长,android12版本默认关闭
2、8资源overlay客制化
Launcher存在多种形态,子编译时会引用不同目录下的res文件(android.mk)使用SRO时,需要考虑SRO文件是否被引用,否则会导致SRO不生效
- 步骤一:strings.xml中包含需要替换的字符串资源,布局文件不能被替换
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Launcher3Overlay</string>
</resources>
- 步骤2:Android.mk实现RRO命令行编译成apk应用
# Various Dynamic Icon targets
LOCAL_PATH:= $(my-dir)
# NativeDynamicIconOverlay
include $(CLEAR_VARS)
LOCAL_PACKAGE_NAME := NativeDynamicIconOverlay
LOCAL_MODULE_OWNER := unisoc
LOCAL_MODULE_TAGS := optional
LOCAL_SYSTEM_EXT_MODULE := true
LOCAL_CERTIFICATE := platform
LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
LOCAL_SDK_VERSION := current
include $(BUILD_RRO_PACKAGE)
- 步骤3 AndroidManifest.xml定义了本应用包名,替换目标包名,优先级、版本、是否是Static类型
<manifest xmlns:android=http://schemas.android.com/apk/res/android
package="com.android.overlay.dynamiciconconfig"
android:versionCode="1"
android:versionName="1.0">
<overlay android:targetPackage="com.android.launcher3"
android:priority="0"
android:isStatic="true" />
</manifest>
- 步骤4 NativeDynamicIconOverlay在对应项目中参与编译
PRODUCT_PACKAGES+=NativeDynamicIconOverlay
功能客制化
PROP属性:ro.launcher.XXX
PROP属性的默认配置及修改方法路径如下:/device/sprd/mpool/module/app/launcher/
3、1桌面样式配置:
功能自定义调整定位到values/config.xml
配置在主屏幕设置中是否显示桌面样式选项:
<bool name="show_home_screen_style_settings">true</bool>
配置默认样式,默认值请使用home_screen_style_values定义的vuale值
<string name="default_home_screen_style" translatable="false">dual</string>
3、2图标角标
图标角标显示在桌面图标上,主要实现方式有两种:
通知标记增强
未读标记
3、2、1通知标记增强:
读取通知栏中应用通知个数并且在应用图标右上角的通知远点中显示
功能开关:通过prop属性控制:ro.launcher.notifbadge.count
默认状态:Android12非go版本功能默认开启,显示数目功能默认关闭,需要在“主屏幕设置”选项中开启“通知圆点中显示数目”
功能配置:
Launcher3\src\com\android\launcher3\notification
Launcher3\src\com\android\launcher3\dot
Launcher3\src\com\sprd\ext\notificationdots
可以通过修改以下配置项,默认打开通知标记增强开关:
values\config.xml
false
3、2、2设置角标位置
Android12角标位置只有左上角、右上角两种位置,默认右上角,可以通过配置位置模式来进行调整
Launher3\src\com\android\launcher3\BulleTextView.java
Launcher3\src\com\android\launcher3\folder\FolderIcon.java
mDotParams = new DotRenderer.DrawParams();
+ mDotParams.leftAlign = true;
3、3动态图标:
本功能开启后UNISOC平台和Google平台的时钟,日历应用图标可分别实现显示当前时间和日期。
功能开关:ro.launcher,dynamic
默认状态:Android12非go版本中默认支持该功能,该功能默认被打开
开启开发者选项,进入主屏幕设置中,进入开发者选项,点击菜单SPRD_DYNAMIC_ICON_SHUUPPORT点击apply用户可开启该功能
功能配置:ro.launcher.dynamic为true时,开关功能开启
ro.launcher.dynamic为false时,该功能关闭
3、4循环滑动
功能开关:ro.launcher.cyclescroll
默认状态:本功能所有版本中默认开启,Goole Feed 开启时本功能默认关闭
功能配置:
主要代码在如下目录:
Launcher\src\com\sprd\ext\cyclescrool
循环滑动功能在主屏幕设置菜单中的开关:Home screen loop
可以通过修改配置项,默认贷款循环滑动开关:
<bool name="default_circle_slide">true</bool>
3、5下拉手势
可以选择如下几项操作:
①无操作②打开通知栏③打开搜索界面
功能开关:ro.launcher.gesture
默认状态:本功能所有版本中默认开启
3、6文件夹图标样式:
文件夹图标样式有环形样式和网格样式两种,当打开开发者默认后,可以动态调整文件夹图标的显示风格。
- 功能开关:ro.launcher.foldericonmode
-
默认状态:单层桌面使用网格样式,双层桌面使用环形样式
九宫格文件夹属性介绍: