diff --git a/app/src/main/java/com/ttstd/dialer/manager/AppManager.java b/app/src/main/java/com/ttstd/dialer/manager/AppManager.java index aaf7577..960aac1 100644 --- a/app/src/main/java/com/ttstd/dialer/manager/AppManager.java +++ b/app/src/main/java/com/ttstd/dialer/manager/AppManager.java @@ -223,32 +223,30 @@ public class AppManager { } }); - int hotseatCounter = 0; for (int i = 0; i < allFirstApps.size(); i++) { AppInfo appInfo = allFirstApps.get(i); - if (DEFAULT_APP_PACKAGES.contains(appInfo.getPackageName())) { - appInfo.setOutside(1); - } else { - appInfo.setOutside(0); - } - - if (DEFAULT_DIALER_PACKAGE.contains(appInfo.getPackageName())) { - appInfo.setHotseat(1); - appInfo.setHotseatPosition(hotseatCounter++); - } else if (DEFAULT_CONTACT_PACKAGE.contains(appInfo.getPackageName())) { - appInfo.setHotseat(1); - appInfo.setHotseatPosition(hotseatCounter++); - } else if (DEFAULT_MESSAGE_PACKAGE.contains(appInfo.getPackageName())) { - appInfo.setHotseat(1); - appInfo.setHotseatPosition(hotseatCounter++); - } else if (DEFAULT_SETTINGS_PACKAGE.contains(appInfo.getPackageName())) { - appInfo.setHotseat(1); - appInfo.setHotseatPosition(hotseatCounter++); - } else { - appInfo.setHotseat(0); - appInfo.setHotseatPosition(0); - } appInfo.setPosition(i); + appInfo.setOutside(DEFAULT_APP_PACKAGES.contains(appInfo.getPackageName()) ? 1 : 0); + appInfo.setHotseat(0); + appInfo.setHotseatPosition(0); + } + + // 按照严格优先级顺序分配 Hotseat 位置,解决应用缺失导致的空位问题 + int hotseatCounter = 1; + List> priorityOrder = new ArrayList<>(); + priorityOrder.add(DEFAULT_DIALER_PACKAGE); + priorityOrder.add(DEFAULT_CONTACT_PACKAGE); + priorityOrder.add(DEFAULT_MESSAGE_PACKAGE); + priorityOrder.add(DEFAULT_SETTINGS_PACKAGE); + + for (Set prioritySet : priorityOrder) { + for (AppInfo app : allFirstApps) { + if (prioritySet.contains(app.getPackageName())) { + app.setHotseat(1); + app.setHotseatPosition(hotseatCounter++); + break; // 每个优先级分类只取一个匹配的应用 + } + } } for (AppInfo app : allFirstApps) { @@ -651,32 +649,30 @@ public class AppManager { .sorted(manager.getAppComparator()) .collect(Collectors.toList()); - final int[] hotseatCounter = {0}; IntStream.range(0, allFirstApps.size()).forEach(index -> { AppInfo appInfo = allFirstApps.get(index); - if (DEFAULT_APP_PACKAGES.contains(appInfo.getPackageName())) { - appInfo.setOutside(1); - } else { - appInfo.setOutside(0); - } - - if (DEFAULT_DIALER_PACKAGE.contains(appInfo.getPackageName())) { - appInfo.setHotseat(1); - appInfo.setHotseatPosition(hotseatCounter[0]++); - } else if (DEFAULT_CONTACT_PACKAGE.contains(appInfo.getPackageName())) { - appInfo.setHotseat(1); - appInfo.setHotseatPosition(hotseatCounter[0]++); - } else if (DEFAULT_MESSAGE_PACKAGE.contains(appInfo.getPackageName())) { - appInfo.setHotseat(1); - appInfo.setHotseatPosition(hotseatCounter[0]++); - } else if (DEFAULT_SETTINGS_PACKAGE.contains(appInfo.getPackageName())) { - appInfo.setHotseat(1); - appInfo.setHotseatPosition(hotseatCounter[0]++); - } else { - appInfo.setHotseat(0); - appInfo.setHotseatPosition(0); - } appInfo.setPosition(index); + appInfo.setOutside(DEFAULT_APP_PACKAGES.contains(appInfo.getPackageName()) ? 1 : 0); + appInfo.setHotseat(0); + appInfo.setHotseatPosition(0); + }); + + // 按照严格优先级顺序分配 Hotseat 位置 + final int[] hotseatCounter = {1}; + List> priorityOrder = new ArrayList<>(); + priorityOrder.add(DEFAULT_DIALER_PACKAGE); + priorityOrder.add(DEFAULT_CONTACT_PACKAGE); + priorityOrder.add(DEFAULT_MESSAGE_PACKAGE); + priorityOrder.add(DEFAULT_SETTINGS_PACKAGE); + + priorityOrder.forEach(prioritySet -> { + allFirstApps.stream() + .filter(app -> prioritySet.contains(app.getPackageName())) + .findFirst() + .ifPresent(app -> { + app.setHotseat(1); + app.setHotseatPosition(hotseatCounter[0]++); + }); }); allFirstApps.forEach(app -> {