From 5487dfd348c6c73d3c94d35bb664c4a1c7f39095 Mon Sep 17 00:00:00 2001 From: Andreas Shimokawa Date: Mon, 20 Apr 2015 20:49:14 +0200 Subject: [PATCH] Pebble app installation: Only enable install button when device is connected, for firmware also check hardware revision --- .../gadgetbridge/pebble/PBWReader.java | 8 +- .../pebble/PebbleAppInstallerActivity.java | 73 ++++++++++++++----- 2 files changed, 61 insertions(+), 20 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/pebble/PBWReader.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/pebble/PBWReader.java index 2fabdded..b3e281c0 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/pebble/PBWReader.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/pebble/PBWReader.java @@ -45,6 +45,7 @@ public class PBWReader { private GBDeviceApp app; private ArrayList pebbleInstallables; private boolean isFirmware = false; + private String hwRevision = null; public PBWReader(Uri uri, Context context) { this.uri = uri; @@ -79,13 +80,13 @@ public class PBWReader { String jsonString = baos.toString(); try { JSONObject json = new JSONObject(jsonString); - String[] searchJSON; HashMap fileTypeMap; try { - json.getJSONObject("firmware"); + JSONObject firmware = json.getJSONObject("firmware"); fileTypeMap = fwFileTypesMap; isFirmware = true; + hwRevision = firmware.getString("hwrev"); } catch (JSONException e) { fileTypeMap = appFileTypesMap; isFirmware = false; @@ -179,4 +180,7 @@ public class PBWReader { return pebbleInstallables.toArray(new PebbleInstallable[pebbleInstallables.size()]); } + public String getHWRevision() { + return hwRevision; + } } \ No newline at end of file diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/pebble/PebbleAppInstallerActivity.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/pebble/PebbleAppInstallerActivity.java index f6d8aa18..385780f8 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/pebble/PebbleAppInstallerActivity.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/pebble/PebbleAppInstallerActivity.java @@ -1,16 +1,22 @@ package nodomain.freeyourgadget.gadgetbridge.pebble; import android.app.Activity; +import android.content.BroadcastReceiver; +import android.content.Context; import android.content.Intent; +import android.content.IntentFilter; import android.net.Uri; import android.os.Bundle; import android.support.v4.app.NavUtils; +import android.support.v4.content.LocalBroadcastManager; import android.view.MenuItem; import android.view.View; import android.widget.Button; import android.widget.TextView; import nodomain.freeyourgadget.gadgetbridge.BluetoothCommunicationService; +import nodomain.freeyourgadget.gadgetbridge.ControlCenter; +import nodomain.freeyourgadget.gadgetbridge.GBDevice; import nodomain.freeyourgadget.gadgetbridge.GBDeviceApp; import nodomain.freeyourgadget.gadgetbridge.R; @@ -22,6 +28,31 @@ public class PebbleAppInstallerActivity extends Activity { TextView debugTextView; Button installButton; + private PBWReader mPBWReader = null; + private BroadcastReceiver mReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + String action = intent.getAction(); + if (action.equals(ControlCenter.ACTION_QUIT)) { + finish(); + } else if (action.equals(GBDevice.ACTION_DEVICE_CHANGED)) { + GBDevice dev = intent.getParcelableExtra("device"); + if (mPBWReader != null) { + if (mPBWReader.isFirmware()) { + String hwRevision = mPBWReader.getHWRevision(); + if (hwRevision != null && hwRevision.equals(dev.getHardwareVersion()) && dev.isConnected()) { + installButton.setEnabled(true); + } else { + installButton.setEnabled(false); + } + } else { + installButton.setEnabled(dev.isConnected()); + } + } + } + } + }; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -30,29 +61,34 @@ public class PebbleAppInstallerActivity extends Activity { debugTextView = (TextView) findViewById(R.id.debugTextView); installButton = (Button) findViewById(R.id.installButton); + IntentFilter filter = new IntentFilter(); + filter.addAction(ControlCenter.ACTION_QUIT); + filter.addAction(GBDevice.ACTION_DEVICE_CHANGED); + LocalBroadcastManager.getInstance(this).registerReceiver(mReceiver, filter); final Uri uri = getIntent().getData(); - PBWReader pbwReader = new PBWReader(uri, getApplicationContext()); - GBDeviceApp app = pbwReader.getGBDeviceApp(); + mPBWReader = new PBWReader(uri, getApplicationContext()); + GBDeviceApp app = mPBWReader.getGBDeviceApp(); - if (pbwReader != null) { - if (pbwReader.isFirmware()) { - debugTextView.setText("YOUR ARE TRYING TO INSTALL A FIRMWARE, PROCEED AT YOUR OWN RISK, MAKE SURE THIS FIRMWARE IS FOR YOUR PEBBLE REVISION, THERE ARE NO CHECKS.\n\n\n"); + if (mPBWReader.isFirmware()) { + debugTextView.setText("YOUR ARE TRYING TO INSTALL A FIRMWARE, PROCEED AT YOUR OWN RISK, MAKE SURE THIS FIRMWARE IS FOR YOUR PEBBLE REVISION, THERE ARE NO CHECKS.\n\n\n"); - } else if (app != null) { - debugTextView.setText("You are about to install the following app:\n\n\n" + app.getName() + " Version " + app.getVersion() + " by " + app.getCreator() + "\n"); - } - installButton.setEnabled(true); - installButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - Intent startIntent = new Intent(PebbleAppInstallerActivity.this, BluetoothCommunicationService.class); - startIntent.setAction(BluetoothCommunicationService.ACTION_INSTALL_PEBBLEAPP); - startIntent.putExtra("app_uri", uri.toString()); - startService(startIntent); - } - }); + } else if (app != null) { + debugTextView.setText("You are about to install the following app:\n\n\n" + app.getName() + " Version " + app.getVersion() + " by " + app.getCreator() + "\n"); } + + installButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent startIntent = new Intent(PebbleAppInstallerActivity.this, BluetoothCommunicationService.class); + startIntent.setAction(BluetoothCommunicationService.ACTION_INSTALL_PEBBLEAPP); + startIntent.putExtra("app_uri", uri.toString()); + startService(startIntent); + } + }); + Intent versionInfoIntent = new Intent(this, BluetoothCommunicationService.class); + versionInfoIntent.setAction(BluetoothCommunicationService.ACTION_REQUEST_VERSIONINFO); + startService(versionInfoIntent); } @Override @@ -67,6 +103,7 @@ public class PebbleAppInstallerActivity extends Activity { @Override protected void onDestroy() { + LocalBroadcastManager.getInstance(this).unregisterReceiver(mReceiver); super.onDestroy(); } }