问题描述:桌面有一些特定的应用图标,要求无法被用户移除。本案例场景具体指的是快捷图标——应用列表图标
需求:实现应用图标不能被删除。
实际操作中应用图标应该不能被拖入桌面文件夹,不能被直接移除,否则将会给系统带来严重的致命bug——删除应用列表图标后无法进入应用池。
修改代码路径:/packages/apps/Launcher3/src/com/android/launcher3/ButtonDropTarget.java
在onDragStart方法内部进行判断,如果拖拽的图标包名是不允许删除的,将mActive置为false即可。
public void onDragStart(DropTarget.DragObject dragObject, DragOptions options) {
if (options.isKeyboardDrag) {
mActive = false;
} else {
setupItemInfo(dragObject.dragInfo);
mActive = supportsDrop(dragObject.dragInfo);
}
//start add by xu -24 : It is forbidden to hide the list of apps
if (dragObject.dragInfo instanceof LauncherAppWidgetInfo) {
LauncherAppWidgetInfo appWidgetInfo = (LauncherAppWidgetInfo)dragObject.dragInfo;
ComponentName cn = appWidgetInfo.getTargetComponent();
if(cn != null) {
if(cn.getPackageName().equals("com.android.launcher3")){
mActive = false;
}
}
}
//end by xu -24
setVisibility(mActive ? View.VISIBLE : View.GONE);
mAccessibleDrag = options.isAccessibleDrag;
setOnClickListener(mAccessibleDrag ? this : null);
}