package nodomain.freeyourgadget.gadgetbridge.service.devices.huawei; import org.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.UUID; import nodomain.freeyourgadget.gadgetbridge.devices.huawei.packets.App; import nodomain.freeyourgadget.gadgetbridge.impl.GBDeviceApp; import nodomain.freeyourgadget.gadgetbridge.service.devices.huawei.requests.GetAppNames; import nodomain.freeyourgadget.gadgetbridge.service.devices.huawei.requests.SendAppDelete; public class HuaweiAppManager { static Logger LOG = LoggerFactory.getLogger(HuaweiAppManager.class); public static class AppConfig { public String bundleName; public String vendor; public String version; public AppConfig(String jsonStr) { try { JSONObject config = new JSONObject(jsonStr); this.bundleName = config.getJSONObject("app").getString("bundleName"); this.vendor = config.getJSONObject("app").getString("vendor"); this.version = config.getJSONObject("app").getJSONObject("version").getString("name"); } catch (Exception e) { LOG.error("Error decode app config", e); } } } private final HuaweiSupportProvider support; private List installedAppList = null; public HuaweiAppManager(HuaweiSupportProvider support) { this.support = support; } public void setInstalledAppList(List installedAppList) { this.installedAppList = installedAppList; handleAppList(); } public void handleAppList() { if (this.installedAppList == null) { return; } final List gbDeviceApps = new ArrayList<>(); for (final App.InstalledAppInfo appInfo : installedAppList) { final UUID uuid = UUID.nameUUIDFromBytes(appInfo.packageName.getBytes()); GBDeviceApp gbDeviceApp = new GBDeviceApp( uuid, appInfo.appName, "", appInfo.version, GBDeviceApp.Type.APP_GENERIC ); gbDeviceApps.add(gbDeviceApp); } support.setGbWatchApps(gbDeviceApps); } public void requestAppList() { if (!this.support.getHuaweiCoordinator().supportsAppParams()) return; try { GetAppNames getAppNames = new GetAppNames(support); getAppNames.doPerform(); } catch (IOException e) { LOG.error("Error request applications list", e); } } public boolean startApp(UUID uuid) { if (this.installedAppList == null) return false; for (final App.InstalledAppInfo appInfo : installedAppList) { final UUID appUuid = UUID.nameUUIDFromBytes(appInfo.packageName.getBytes()); if (appUuid.equals(uuid)) return true; } return false; } public boolean deleteApp(UUID uuid) { if (this.installedAppList == null) return false; for (final App.InstalledAppInfo appInfo : installedAppList) { final UUID appUuid = UUID.nameUUIDFromBytes(appInfo.packageName.getBytes()); if (appUuid.equals(uuid)) { try { SendAppDelete sendAppDelete = new SendAppDelete(support, appInfo.packageName); sendAppDelete.doPerform(); } catch (IOException e) { LOG.error("Could not delete app: " + appInfo.packageName, e); } return true; } } return false; } }