diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/ControlCenter.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/ControlCenter.java index 51cacc20..efd3445a 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/ControlCenter.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/ControlCenter.java @@ -13,6 +13,7 @@ import android.content.SharedPreferences; import android.os.Bundle; import android.preference.PreferenceManager; import android.support.v4.content.LocalBroadcastManager; +import android.support.v4.widget.SwipeRefreshLayout; import android.view.ContextMenu; import android.view.Menu; import android.view.MenuItem; @@ -53,6 +54,7 @@ public class ControlCenter extends Activity { private TextView hintTextView; private ListView deviceListView; + private SwipeRefreshLayout swipeLayout; private GBDeviceAdapter mGBDeviceAdapter; private GBDevice selectedDevice = null; @@ -80,15 +82,41 @@ public class ControlCenter extends Activity { deviceList.add(dev); } } + updateSelectedDevice(dev); refreshPairedDevices(); refreshBusyState(dev); + enableSwipeRefresh(selectedDevice); break; } } }; + private void updateSelectedDevice(GBDevice dev) { + if (selectedDevice == null) { + selectedDevice = dev; + } else { + if (!selectedDevice.equals(dev)) { + if (selectedDevice.isConnected() && dev.isConnected()) { + LOG.warn("multiple connected devices -- this is currently not really supported"); + selectedDevice = dev; // use the last one that changed + } + if (!selectedDevice.isConnected()) { + selectedDevice = dev; // use the last one that changed + } + } + } + } + private void refreshBusyState(GBDevice dev) { + if (dev.isBusy()) { + swipeLayout.setRefreshing(true); + } else { + boolean wasBusy = swipeLayout.isRefreshing(); + if (wasBusy) { + swipeLayout.setRefreshing(false); + } + } mGBDeviceAdapter.notifyDataSetChanged(); } @@ -118,6 +146,14 @@ public class ControlCenter extends Activity { } }); + swipeLayout = (SwipeRefreshLayout) findViewById(R.id.controlcenter_swipe_layout); + swipeLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { + @Override + public void onRefresh() { + fetchActivityData(); + } + }); + registerForContextMenu(deviceListView); IntentFilter filterLocal = new IntentFilter(); @@ -141,7 +177,7 @@ public class ControlCenter extends Activity { } GBApplication.deviceService().start(); - + enableSwipeRefresh(selectedDevice); if (GB.isBluetoothEnabled() && deviceList.isEmpty()) { // start discovery when no devices are present startActivity(new Intent(this, DiscoveryActivity.class)); @@ -180,6 +216,23 @@ public class ControlCenter extends Activity { menu.setHeaderTitle(selectedDevice.getName()); } + private void enableSwipeRefresh(GBDevice device) { + boolean enable = device != null && device.isInitialized() && !device.isBusy(); + swipeLayout.setEnabled(enable); + } + + private void fetchActivityData() { + if (selectedDevice == null) { + return; + } + if (selectedDevice.isInitialized()) { + GBApplication.deviceService().onFetchActivityData(); + } else { + swipeLayout.setRefreshing(false); + GB.toast(this, getString(R.string.device_not_connected), Toast.LENGTH_SHORT, GB.ERROR); + } + } + @Override public boolean onContextItemSelected(MenuItem item) { switch (item.getItemId()) { @@ -192,9 +245,7 @@ public class ControlCenter extends Activity { } return true; case R.id.controlcenter_fetch_activity_data: - if (selectedDevice != null) { - GBApplication.deviceService().onFetchActivityData(); - } + fetchActivityData(); return true; case R.id.controlcenter_disconnect: if (selectedDevice != null) { diff --git a/app/src/main/res/layout/activity_controlcenter.xml b/app/src/main/res/layout/activity_controlcenter.xml index 9a65a468..39a5d2c8 100644 --- a/app/src/main/res/layout/activity_controlcenter.xml +++ b/app/src/main/res/layout/activity_controlcenter.xml @@ -6,6 +6,15 @@ android:paddingBottom="@dimen/activity_vertical_margin" tools:context="nodomain.freeyourgadget.gadgetbridge.activities.ControlCenter"> + + +