diff --git a/app/src/main/java/de/markusfisch/android/pielauncher/content/Apps.java b/app/src/main/java/de/markusfisch/android/pielauncher/content/Apps.java index 609b299..9d99309 100644 --- a/app/src/main/java/de/markusfisch/android/pielauncher/content/Apps.java +++ b/app/src/main/java/de/markusfisch/android/pielauncher/content/Apps.java @@ -77,8 +77,8 @@ public class Apps { public static final boolean HAS_LAUNCHER_APP = Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP; - public final CanvasPieMenu piePrimary = new CanvasPieMenu<>(); - public final CanvasPieMenu pieSecondary = new CanvasPieMenu<>(); + public final ArrayList menuPrimary = new ArrayList<>(); + public final ArrayList menuSecondary = new ArrayList<>(); public final HiddenAppsStorage hiddenAppsStorage = new HiddenAppsStorage(); private final Handler handler = new Handler(Looper.getMainLooper()); @@ -174,8 +174,8 @@ public class Apps { } public void store(Context context) { - MenuStorage.store(context, MENU_PRIMARY, piePrimary.icons); - MenuStorage.store(context, MENU_SECONDARY, pieSecondary.icons); + MenuStorage.store(context, MENU_PRIMARY, menuPrimary); + MenuStorage.store(context, MENU_SECONDARY, menuSecondary); hiddenAppsStorage.store(context); } @@ -214,7 +214,7 @@ public class Apps { } } if (prefs.excludePie()) { - list.removeAll(new HashSet<>(piePrimary.icons)); + list.removeAll(new HashSet<>(menuPrimary)); } } else { int item = prefs.getSearchParameter(); @@ -270,9 +270,9 @@ public class Apps { hiddenAppsStorage.removeAndStore(appContext, packageName); handler.post(() -> { removePackageFromApps(apps, packageName, userHandle); - removePackageFromPieMenu(piePrimary.icons, packageName, + removePackageFromPieMenu(menuPrimary, packageName, userHandle); - removePackageFromPieMenu(pieSecondary.icons, packageName, + removePackageFromPieMenu(menuSecondary, packageName, userHandle); propagateUpdate(); }); @@ -329,10 +329,10 @@ public class Apps { handler.post(() -> { apps.clear(); apps.putAll(newApps); - piePrimary.icons.clear(); - piePrimary.icons.addAll(newIcons); - pieSecondary.icons.clear(); - pieSecondary.icons.addAll(newIconsAlt); + menuPrimary.clear(); + menuPrimary.addAll(newIcons); + menuSecondary.clear(); + menuSecondary.addAll(newIconsAlt); indexing = false; propagateUpdate(); }); diff --git a/app/src/main/java/de/markusfisch/android/pielauncher/graphics/PieMenu.java b/app/src/main/java/de/markusfisch/android/pielauncher/graphics/PieMenu.java index 095edce..3b096b2 100644 --- a/app/src/main/java/de/markusfisch/android/pielauncher/graphics/PieMenu.java +++ b/app/src/main/java/de/markusfisch/android/pielauncher/graphics/PieMenu.java @@ -14,7 +14,7 @@ public class PieMenu { public int y; } - public final ArrayList icons = new ArrayList<>(); + public ArrayList icons = new ArrayList<>(); private int selectedIcon = -1; private int centerX = -1; diff --git a/app/src/main/java/de/markusfisch/android/pielauncher/widget/AppPieView.java b/app/src/main/java/de/markusfisch/android/pielauncher/widget/AppPieView.java index 8c67e4f..3084ee6 100644 --- a/app/src/main/java/de/markusfisch/android/pielauncher/widget/AppPieView.java +++ b/app/src/main/java/de/markusfisch/android/pielauncher/widget/AppPieView.java @@ -72,10 +72,11 @@ public class AppPieView extends View { private static final int MODE_LIST = 1; private static final int MODE_EDIT = 2; - private final CanvasPieMenu menuPrimary = - PieLauncherApp.apps.piePrimary; - private final CanvasPieMenu menuSecondary = - PieLauncherApp.apps.pieSecondary; + private final CanvasPieMenu pieMenu = new CanvasPieMenu<>(); + private final ArrayList menuPrimary = + PieLauncherApp.apps.menuPrimary; + private final ArrayList menuSecondary = + PieLauncherApp.apps.menuSecondary; private final Fade fadePie = new Fade(); private final Fade fadeList = new Fade(); private final Fade fadeEdit = new Fade(); @@ -129,7 +130,6 @@ public class AppPieView extends View { private final float textOffset; private final float touchSlopSq; - private CanvasPieMenu pieMenu = menuPrimary; private Window window; private RenderNode pieRenderNode; private RenderNode listRenderNode; @@ -189,6 +189,7 @@ public class AppPieView extends View { dp = dm.density; float sp = dm.scaledDensity; + pieMenu.icons = menuPrimary; controlsPadding = Math.round(80f * dp); listPadding = Math.round(16f * dp); searchInputHeight = Math.round(112f * dp); @@ -1216,10 +1217,9 @@ public class AppPieView extends View { } else if (contains(iconCenterRect, touch)) { if (grabbedIcon == null) { if (prefs.splitPieEnabled()) { - pieMenu = pieMenu == menuPrimary - ? menuSecondary - : menuPrimary; - centerIcons(pieMenu.icons); + swapMenus(pieMenu.icons == menuPrimary); + centerSmoothCoordinatesAt(pieMenu.icons, + viewWidth >> 1, viewHeight >> 1); updateSplitPieIcon(); invalidate(); } else { @@ -1266,14 +1266,6 @@ public class AppPieView extends View { return false; } - private void centerIcons(ArrayList icons) { - int centerX = viewWidth >> 1; - int centerY = viewHeight >> 1; - for (Apps.AppIcon ic : icons) { - ic.setStartPosition(centerX, centerY); - } - } - private void launchApp(Context context, Apps.AppIcon appIcon) { launchingIcon = appIcon; PieLauncherApp.apps.launchApp(context, appIcon); @@ -1295,6 +1287,13 @@ public class AppPieView extends View { pieMenu.icons.addAll(backup); } + private static void centerSmoothCoordinatesAt( + ArrayList icons, int centerX, int centerY) { + for (Apps.AppIcon ic : icons) { + ic.setStartPosition(centerX, centerY); + } + } + private static boolean sameOrder( List a, List b) { @@ -1409,7 +1408,7 @@ public class AppPieView extends View { } private int getDrawableForSplitPie() { - return pieMenu == menuSecondary + return pieMenu.icons == menuSecondary ? R.drawable.ic_screen_upper : R.drawable.ic_screen_lower; } @@ -1426,11 +1425,17 @@ public class AppPieView extends View { } private void selectMenu(int x, int y) { - pieMenu = (viewWidth > viewHeight + swapMenus(viewWidth > viewHeight ? x < viewWidth >> 1 - : y < viewHeight >> 1) - ? menuSecondary - : menuPrimary; + : y < viewHeight >> 1); + } + + private void swapMenus() { + swapMenus(pieMenu.icons == menuPrimary); + } + + private void swapMenus(boolean isPrimary) { + pieMenu.icons = isPrimary ? menuSecondary : menuPrimary; } private void setCenter(int x, int y) {