launcher 中功能表默认排序是按照应用名字来排的。
既然可以按照名字排序当然也可以按照包名来排序。
找到排序的地方,然后重写一下排序的方法,这个问题就解决了。
应用列表对应launcher 中的AppsCustomizePagedView.java ,
文件中中有一个public void setApps(ArrayList<ApplicationInfo> list);的方法就是来设置应用列表的。
其中方法中Collections.sort(mApps, LauncherModel.APP_NAME_COMPARATOR); 就是排序了。
找到LauncherModel.APP_NAME_COMPARATOR 这个Comparator。
增加红色的部分的代码,就能实现在功能表中优先排指定字符串开头包名的应用了。
public static final Comparator<ApplicationInfo> APP_NAME_COMPARATOR
= new Comparator<ApplicationInfo>() {
public final int compare(ApplicationInfo a, ApplicationInfo b) {
String privatePackage = "com.test";
if(a.getPackageName().startsWith(privatePackage)&& b.getPackageName().startsWith(privatePackage)){
}else if(a.getPackageName().startsWith(privatePackage)&& !b.getPackageName().startsWith(privatePackage)){
return -1;
}else if(!a.getPackageName().startsWith(privatePackage)&& b.getPackageName().startsWith(privatePackage)){
return 1;
}
int result = sCollator.compare(a.title.toString(), b.title.toString());
if (result == 0) {
result = a.componentName.compareTo(b.componentName);
}
return result;
}
};