From 1b645f44d7d86026dae868d45df7cd205d82b124 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Rebelo?= Date: Sun, 22 Oct 2023 11:06:27 +0100 Subject: [PATCH] Xiaomi: Keep only watchface tab in app management --- .../appmanager/AppManagerActivity.java | 36 +++++++++++++------ .../devices/AbstractDeviceCoordinator.java | 21 +++++++++++ .../devices/DeviceCoordinator.java | 4 +++ .../devices/xiaomi/XiaomiCoordinator.java | 15 ++++++++ 4 files changed, 66 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/appmanager/AppManagerActivity.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/appmanager/AppManagerActivity.java index c1c553f8e..166155d99 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/appmanager/AppManagerActivity.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/appmanager/AppManagerActivity.java @@ -45,6 +45,7 @@ import nodomain.freeyourgadget.gadgetbridge.R; import nodomain.freeyourgadget.gadgetbridge.activities.AbstractFragmentPagerAdapter; import nodomain.freeyourgadget.gadgetbridge.activities.AbstractGBFragmentActivity; import nodomain.freeyourgadget.gadgetbridge.activities.FwAppInstallerActivity; +import nodomain.freeyourgadget.gadgetbridge.devices.DeviceCoordinator; import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; import nodomain.freeyourgadget.gadgetbridge.util.FileUtils; @@ -56,6 +57,8 @@ public class AppManagerActivity extends AbstractGBFragmentActivity { private GBDevice mGBDevice = null; + private List enabledTabsList; + public GBDevice getGBDevice() { return mGBDevice; } @@ -75,6 +78,20 @@ public class AppManagerActivity extends AbstractGBFragmentActivity { throw new IllegalArgumentException("Must provide a device when invoking this activity"); } + final DeviceCoordinator coordinator = mGBDevice.getDeviceCoordinator(); + + enabledTabsList = new ArrayList<>(); + + if (coordinator.supportsCachedAppManagement(mGBDevice)) { + enabledTabsList.add("cache"); + } + if (coordinator.supportsInstalledAppManagement(mGBDevice)) { + enabledTabsList.add("apps"); + } + if (coordinator.supportsWatchfaceManagement(mGBDevice)) { + enabledTabsList.add("watchfaces"); + } + FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); assert fab != null; fab.setOnClickListener(new View.OnClickListener() { @@ -114,12 +131,12 @@ public class AppManagerActivity extends AbstractGBFragmentActivity { @Override public Fragment getItem(int position) { // getItem is called to instantiate the fragment for the given page. - switch (position) { - case 0: + switch (enabledTabsList.get(position)) { + case "cache": return new AppManagerFragmentCache(); - case 1: + case "apps": return new AppManagerFragmentInstalledApps(); - case 2: + case "watchfaces": return new AppManagerFragmentInstalledWatchfaces(); } return null; @@ -127,19 +144,18 @@ public class AppManagerActivity extends AbstractGBFragmentActivity { @Override public int getCount() { - return 3; + return enabledTabsList.toArray().length; } @Override public CharSequence getPageTitle(int position) { - switch (position) { - case 0: + switch (enabledTabsList.get(position)) { + case "cache": return getString(R.string.appmanager_cached_watchapps_watchfaces); - case 1: + case "apps": return getString(R.string.appmanager_installed_watchapps); - case 2: + case "watchfaces": return getString(R.string.appmanager_installed_watchfaces); - case 3: } return super.getPageTitle(position); } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/AbstractDeviceCoordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/AbstractDeviceCoordinator.java index 2a686ae67..934eb6780 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/AbstractDeviceCoordinator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/AbstractDeviceCoordinator.java @@ -314,6 +314,27 @@ public abstract class AbstractDeviceCoordinator implements DeviceCoordinator { return false; } + @Override + public boolean supportsCachedAppManagement(final GBDevice device) { + try { + return supportsAppsManagement(device) && getAppCacheDir() != null; + } catch (final Exception e) { + // we failed, but still tried, so it's supported.. + LOG.error("Failed to get app cache dir", e); + return true; + } + } + + @Override + public boolean supportsInstalledAppManagement(final GBDevice device) { + return supportsAppsManagement(device); + } + + @Override + public boolean supportsWatchfaceManagement(final GBDevice device) { + return supportsAppsManagement(device); + } + @Nullable @Override public Class getAppsManagementActivity() { diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/DeviceCoordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/DeviceCoordinator.java index 5f2267a37..8ce2641c6 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/DeviceCoordinator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/DeviceCoordinator.java @@ -353,6 +353,10 @@ public interface DeviceCoordinator { */ boolean supportsAppsManagement(GBDevice device); + boolean supportsCachedAppManagement(GBDevice device); + boolean supportsInstalledAppManagement(GBDevice device); + boolean supportsWatchfaceManagement(GBDevice device); + /** * Returns the Activity class that will be used to manage device apps. * diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/xiaomi/XiaomiCoordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/xiaomi/XiaomiCoordinator.java index ccb5b1aa9..308c26b13 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/xiaomi/XiaomiCoordinator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/xiaomi/XiaomiCoordinator.java @@ -134,6 +134,21 @@ public abstract class XiaomiCoordinator extends AbstractBLEDeviceCoordinator { return true; } + @Override + public boolean supportsCachedAppManagement(GBDevice device) { + return false; + } + + @Override + public boolean supportsInstalledAppManagement(GBDevice device) { + return false; + } + + @Override + public boolean supportsWatchfaceManagement(GBDevice device) { + return supportsAppsManagement(device); + } + @Override public Class getAppsManagementActivity() { return AppManagerActivity.class;