From b74319fee92a272035626de284c1af13e2631cf3 Mon Sep 17 00:00:00 2001 From: Andreas Shimokawa Date: Sun, 19 Apr 2015 12:35:23 +0200 Subject: [PATCH] Make list refresh automatically when Miband MAC was entered or removed. Update README.md --- README.md | 4 +-- .../gadgetbridge/ControlCenter.java | 34 +++++++++++++------ .../gadgetbridge/SettingsActivity.java | 18 +++++++++- 3 files changed, 42 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 450ed5f2..bc07700b 100644 --- a/README.md +++ b/README.md @@ -29,8 +29,8 @@ How to use (Miband): 1. Add your Mibands MAC address manually for now (Settings -> Debug) 2. Configure other notifications as desired -3. Restart Gadgetbridge, after that, the device should be visible -4. Tap it to connect +3. Go back to the "Gadgetbridge" Activity +4. Tap the "MI" device to connect 5. To test, chose "Debug" from the menu and play around Known Issues: diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/ControlCenter.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/ControlCenter.java index 26db979a..5929ef8a 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/ControlCenter.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/ControlCenter.java @@ -49,10 +49,8 @@ public class ControlCenter extends Activity { String deviceAddress = intent.getStringExtra("device_address"); GBDevice.State state = GBDevice.State.values()[intent.getIntExtra("device_state", 0)]; String firmwareVersion = intent.getStringExtra("firmware_version"); - if (deviceList.isEmpty()) { - refreshPairedDevices(); - mGBDeviceAdapter.notifyDataSetChanged(); - } + refreshPairedDevices(); + mGBDeviceAdapter.notifyDataSetChanged(); if (deviceAddress != null) { for (GBDevice device : deviceList) { if (device.getAddress().equals(deviceAddress)) { @@ -118,6 +116,7 @@ public class ControlCenter extends Activity { Intent versionInfoIntent = new Intent(this, BluetoothCommunicationService.class); versionInfoIntent.setAction(BluetoothCommunicationService.ACTION_REQUEST_VERSIONINFO); startService(versionInfoIntent); + } @Override @@ -147,10 +146,8 @@ public class ControlCenter extends Activity { LocalBroadcastManager.getInstance(this).sendBroadcast(quitIntent); return true; case R.id.action_refresh: - if (deviceList.isEmpty()) { - refreshPairedDevices(); - mGBDeviceAdapter.notifyDataSetChanged(); - } + refreshPairedDevices(); + mGBDeviceAdapter.notifyDataSetChanged(); } return super.onOptionsItemSelected(item); @@ -163,7 +160,16 @@ public class ControlCenter extends Activity { } private void refreshPairedDevices() { + GBDevice connectedDevice = null; + for (GBDevice device : deviceList) { + if (device.getState() == GBDevice.State.CONNECTED) { + connectedDevice = device; + } + } + deviceList.clear(); + BluetoothAdapter btAdapter = BluetoothAdapter.getDefaultAdapter(); + if (btAdapter == null) { Toast.makeText(this, "Bluetooth is not supported.", Toast.LENGTH_SHORT).show(); } else if (!btAdapter.isEnabled()) { @@ -171,7 +177,7 @@ public class ControlCenter extends Activity { } else { Set pairedDevices = btAdapter.getBondedDevices(); for (BluetoothDevice device : pairedDevices) { - GBDevice.Type deviceType = GBDevice.Type.UNKNOWN; + GBDevice.Type deviceType; if (device.getName().indexOf("Pebble") == 0) { deviceType = GBDevice.Type.PEBBLE; } else if (device.getName().equals("MI")) { @@ -179,7 +185,11 @@ public class ControlCenter extends Activity { } else { continue; } - deviceList.add(new GBDevice(device.getAddress(), device.getName(), deviceType)); + if (connectedDevice != null && (device.getAddress().equals(connectedDevice.getAddress()))) { + deviceList.add(connectedDevice); + } else { + deviceList.add(new GBDevice(device.getAddress(), device.getName(), deviceType)); + } } SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this); @@ -188,7 +198,9 @@ public class ControlCenter extends Activity { deviceList.add(new GBDevice(miAddr, "MI", GBDevice.Type.MIBAND)); } - if (!deviceList.isEmpty()) { + if (connectedDevice != null) { + hintTextView.setText("tap connected device for App Mananger"); + } else if (!deviceList.isEmpty()) { hintTextView.setText("tap a device to connect"); } } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/SettingsActivity.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/SettingsActivity.java index c68edd36..69b4c7ce 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/SettingsActivity.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/SettingsActivity.java @@ -8,6 +8,7 @@ import android.preference.PreferenceActivity; import android.preference.PreferenceCategory; import android.preference.PreferenceManager; import android.support.v4.app.NavUtils; +import android.support.v4.content.LocalBroadcastManager; import android.view.MenuItem; public class SettingsActivity extends PreferenceActivity { @@ -49,10 +50,25 @@ public class SettingsActivity extends PreferenceActivity { getPreferenceScreen().addPreference(fakeHeaderDev); addPreferencesFromResource(R.xml.pref_development); + + final Preference developmentMiaddr = findPreference("development_miaddr"); + bindPreferenceSummaryToValue(developmentMiaddr); + + developmentMiaddr.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { + @Override + public boolean onPreferenceChange(Preference preference, Object newVal) { + Intent refreshIntent = new Intent(ControlCenter.ACTION_REFRESH_DEVICELIST); + LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(refreshIntent); + preference.setSummary(newVal.toString()); + return true; + } + + }); + // Bind the summaries of EditText/List/Dialog/Ringtone preferences to // their values. When their values change, their summaries are updated // to reflect the new value, per the Android Design guidelines. - bindPreferenceSummaryToValue(findPreference("development_miaddr")); + //bindPreferenceSummaryToValue(findPreference("notifications_sms_whenscreenon")); }