From bb90b742d6bf1cf1da363bc59291e60d831ee60f Mon Sep 17 00:00:00 2001 From: TongTongStudio Date: Thu, 11 Jun 2026 17:06:03 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E9=A6=96=E6=AC=A1?= =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96=E6=95=B0=E6=8D=AE=E5=BA=93Hotseat?= =?UTF-8?q?=E4=BD=8D=E7=BD=AE=E6=B7=B7=E4=B9=B1=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ttstd/dialer/manager/AppManager.java | 88 +++++++++---------- 1 file changed, 42 insertions(+), 46 deletions(-) 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 -> {