将原生的Launcher修改成类似MiUI的Launcher

将原生的Launcher修改成类似MiUi样式的Launcher

这里写图片描述
上面这个是原生的

这里写图片描述
上面这个是我们要修改的成果

原生的Launcher已4.2.2版本为base,需要更改一下的几点:
1. Workspace
原生:workspace是存放的App的快捷方式(shortcut)
新生:workspace显示了已经安装的App
2. App的删除方式
原生:在workspace中按住App的快捷方式后,出现Remove的标识,将快捷方式移动到Remove是删除App的快捷方式,并不会卸载此App
新生:在workspace按住App的快捷方式后,出现删除的提示,将App移动到删除提示后,是将此App卸载。
3. 在worksapce中默认是加载的快捷方式,但是原生的App并不一定都是快捷方式,所以需要在Launcher第一次运行的时候,将AllApps加载为Shortcut

那么开始改吧:
1.首先在LauncherModel.java文件中添加一个新类AlreadyInDesktopApps,记录哪些App已经在Desktop上,以及哪个screen已经存在Shortcut

   public class AlreadyInDesktopApps {
   
        List<Integer> screenList = null;
        List<ShortcutFlag> shortcutFlagList = null;

        AlreadyInDesktopApp() {
            screenList = new ArrayList<Integer>();
            shortcutFlagList = new ArrayList<ShortcutFlag>();
        }

        public void addScreen(int screen) {
            if (!isExistedScreen(screen)) {
                screenList.add(screen);
            }
        }

        public List<Integer> getScreens() {
            return screenList;
        }

        public void addShortcutFlag(String packegName, String componentName) {
            ShortcutFlag shortcutFlag = new ShortcutFlag(packegName,
                    componentName);
            if (!isExistedShortcutFlag(shortcutFlag)) {
                shortcutFlagList.add(shortcutFlag);
            }
        }

        public boolean isExistedScreen(int screen) {
            return screenList.contains(screen);
        }

        public boolean isExistedShortcutFlag(ShortcutFlag shortcutFlag) {
            return shortcutFlagList.contains(shortcutFlag);
        }

        public boolean isExistedShortcutFlag(String packegName,
                String componentName) {
            ShortcutFlag shortcutFlag = new ShortcutFlag(packegName,
                    componentName);
            return shortcutFlagList.contains(shortcutFlag);
        }

        private class ShortcutFlag {
   
            String packegName;
            String componentName;

            public ShortcutFlag(String packegName, String componentName) {
                this.packegName = packegName;
                this.componentName = componentName;
            }

            @Override
            public boolean equals(Object o) {
                if (o instanceof ShortcutFlag) {
                    ShortcutFlag appFlag = (ShortcutFlag) o;
                    if (appFlag.packegName.equals(packegName)
                            && appFlag.componentName.equals(componentName)) {
                        return true;
                    }
                }
                return false;
            }
        }
    }

在LauncherModel.java中添加函数loadNotInDesktopAllAppsByBatch

        private void loadNotInDesktopAllAppsByBatch() {
            final Callbacks oldCallbacks = mCallbacks.get();
            if (oldCallbacks == null) {
                return;
            }

            final Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
            mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);

            final PackageManager packageManager = mContext.getPackageManager();
            List<ResolveInfo> apps = null;

            int N = Integer.MAX_VALUE;

            int cellCountX = LauncherModel.getCellCountX();
            int cellCountY = LauncherModel.getCellCountY();
            int maxItemNumOnePage = cellCount
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值