Rework RileyLink scan and add option to remove RileyLink

This commit is contained in:
Bart Sopers 2020-12-25 18:43:51 +01:00
parent 302622bf69
commit fcd3276e47
18 changed files with 227 additions and 248 deletions

View file

@ -10,7 +10,7 @@ import info.nightscout.androidaps.plugins.general.maintenance.activities.PrefImp
import info.nightscout.androidaps.plugins.general.openhumans.OpenHumansLoginActivity
import info.nightscout.androidaps.plugins.general.overview.activities.QuickWizardListActivity
import info.nightscout.androidaps.plugins.general.smsCommunicator.activities.SmsCommunicatorOtpActivity
import info.nightscout.androidaps.plugins.pump.common.dialog.RileyLinkBLEScanActivity
import info.nightscout.androidaps.plugins.pump.common.dialog.RileyLinkBLEConfigActivity
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.dialog.RileyLinkStatusActivity
import info.nightscout.androidaps.plugins.pump.insight.activities.InsightAlertActivity
import info.nightscout.androidaps.plugins.pump.insight.activities.InsightPairingActivity
@ -33,7 +33,7 @@ abstract class ActivitiesModule {
@ContributesAndroidInjector abstract fun contributesQuickWizardListActivity(): QuickWizardListActivity
@ContributesAndroidInjector abstract fun contributesRequestDexcomPermissionActivity(): RequestDexcomPermissionActivity
@ContributesAndroidInjector abstract fun contributesRileyLinkStatusActivity(): RileyLinkStatusActivity
@ContributesAndroidInjector abstract fun contributesRileyLinkBLEScanActivity(): RileyLinkBLEScanActivity
@ContributesAndroidInjector abstract fun contributesRileyLinkBLEConfigActivity(): RileyLinkBLEConfigActivity
@ContributesAndroidInjector abstract fun contributesSetupWizardActivity(): SetupWizardActivity
@ContributesAndroidInjector abstract fun contributesSingleFragmentActivity(): SingleFragmentActivity
@ContributesAndroidInjector abstract fun contributesSmsCommunicatorOtpActivity(): SmsCommunicatorOtpActivity

View file

@ -95,7 +95,7 @@
android:key="@string/key_rileylink_mac_address"
android:summary=""
android:title="RileyLink Configuration">
<intent android:action="info.nightscout.androidaps.plugins.PumpCommon.dialog.RileyLinkBLEScanActivity" />
<intent android:action="info.nightscout.androidaps.plugins.PumpCommon.dialog.RileyLinkBLEConfigActivity" />
</Preference>
<SwitchPreference

View file

@ -37,6 +37,7 @@
<string name="omnipod_overview_last_bolus_value" translatable="false">%1$.2f %2$s (%3$s)</string>
<!-- Omnipod - Preferences -->
<string name="omnipod_config_riley_link_configuration">RileyLink Configuration</string>
<string name="omnipod_config_bolus_beeps_enabled">Bolus beeps enabled</string>
<string name="omnipod_config_basal_beeps_enabled">Basal beeps enabled</string>
<string name="omnipod_config_smb_beeps_enabled">SMB beeps enabled</string>

View file

@ -7,9 +7,8 @@
<Preference
android:enabled="true"
android:key="@string/key_rileylink_mac_address"
android:summary=""
android:title="RileyLink Configuration">
<intent android:action="info.nightscout.androidaps.plugins.PumpCommon.dialog.RileyLinkBLEScanActivity" />
android:title="@string/omnipod_config_riley_link_configuration">
<intent android:action="info.nightscout.androidaps.plugins.PumpCommon.dialog.RileyLinkBLEConfigActivity" />
</Preference>
</PreferenceCategory>

View file

@ -1,5 +1,5 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="info.nightscout.androidaps.plugins.pump.common" >
package="info.nightscout.androidaps.plugins.pump.common">
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
@ -8,12 +8,13 @@
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<application>
<activity android:name=".dialog.RileyLinkBLEScanActivity">
<activity android:name=".dialog.RileyLinkBLEConfigActivity">
<intent-filter>
<action android:name="info.nightscout.androidaps.plugins.PumpCommon.dialog.RileyLinkBLEScanActivity" />
<action android:name="info.nightscout.androidaps.plugins.PumpCommon.dialog.RileyLinkBLEConfigActivity" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity
android:name=".hw.rileylink.dialog.RileyLinkStatusActivity"
android:label="@string/title_activity_rileylink_settings"

View file

@ -1,5 +1,6 @@
package info.nightscout.androidaps.plugins.pump.common.dialog;
import android.app.AlertDialog;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.le.BluetoothLeScanner;
@ -7,23 +8,19 @@ import android.bluetooth.le.ScanCallback;
import android.bluetooth.le.ScanFilter;
import android.bluetooth.le.ScanResult;
import android.bluetooth.le.ScanSettings;
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.os.ParcelUuid;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import androidx.appcompat.widget.Toolbar;
import org.apache.commons.lang3.StringUtils;
import java.util.ArrayList;
@ -37,7 +34,7 @@ import javax.inject.Inject;
import info.nightscout.androidaps.activities.NoSplashAppCompatActivity;
import info.nightscout.androidaps.interfaces.ActivePluginProvider;
import info.nightscout.androidaps.logging.AAPSLogger;
import info.nightscout.androidaps.plugins.bus.RxBusWrapper;
import info.nightscout.androidaps.logging.LTag;
import info.nightscout.androidaps.plugins.pump.common.R;
import info.nightscout.androidaps.plugins.pump.common.ble.BlePreCheck;
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkConst;
@ -48,62 +45,55 @@ import info.nightscout.androidaps.utils.resources.ResourceHelper;
import info.nightscout.androidaps.utils.sharedPreferences.SP;
// IMPORTANT: This activity needs to be called from RileyLinkSelectPreference (see pref_medtronic.xml as example)
public class RileyLinkBLEScanActivity extends NoSplashAppCompatActivity {
public class RileyLinkBLEConfigActivity extends NoSplashAppCompatActivity {
@Inject AAPSLogger aapsLogger;
@Inject SP sp;
@Inject RxBusWrapper rxBus;
@Inject ResourceHelper resourceHelper;
@Inject BlePreCheck blePrecheck;
@Inject RileyLinkUtil rileyLinkUtil;
@Inject ActivePluginProvider activePlugin;
private static final int PERMISSION_REQUEST_COARSE_LOCATION = 30241; // arbitrary.
private static final int REQUEST_ENABLE_BT = 30242; // arbitrary
private static final String TAG = "RileyLinkBLEConfigActivity";
private static final long SCAN_PERIOD_MILLIS = 15_000;
private static final String TAG = "RileyLinkBLEScanActivity";
// Stops scanning after 30 seconds.
private static final long SCAN_PERIOD = 30000;
public boolean mScanning;
public ScanSettings settings;
public List<ScanFilter> filters;
public ListView listBTScan;
public Toolbar toolbarBTScan;
public Context mContext = this;
private BluetoothAdapter mBluetoothAdapter;
private BluetoothLeScanner mLEScanner;
private LeDeviceListAdapter mLeDeviceListAdapter;
private Handler mHandler;
private String actionTitleStart, actionTitleStop;
private MenuItem menuItem;
private ScanSettings settings;
private List<ScanFilter> filters;
private ListView deviceList;
private TextView currentlySelectedRileyLink;
private Button buttonRemoveRileyLink;
private Button buttonStartScan;
private Button buttonStopScan;
private BluetoothAdapter bluetoothAdapter;
private BluetoothLeScanner bleScanner;
private LeDeviceListAdapter deviceListAdapter;
private Handler handler;
public boolean scanning;
private boolean rlDisconnected;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.rileylink_scan_activity);
setContentView(R.layout.riley_link_ble_config_activity);
// Initializes Bluetooth adapter.
mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
mHandler = new Handler();
mLeDeviceListAdapter = new LeDeviceListAdapter();
listBTScan = findViewById(R.id.rileylink_listBTScan);
listBTScan.setAdapter(mLeDeviceListAdapter);
listBTScan.setOnItemClickListener((parent, view, position, id) -> {
bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
deviceListAdapter = new LeDeviceListAdapter();
handler = new Handler();
currentlySelectedRileyLink = findViewById(R.id.riley_link_ble_config_currently_selected_riley_link);
buttonRemoveRileyLink = findViewById(R.id.riley_link_ble_config_button_remove_riley_link);
buttonStartScan = findViewById(R.id.riley_link_ble_config_scan_start);
buttonStopScan = findViewById(R.id.riley_link_ble_config_button_scan_stop);
deviceList = findViewById(R.id.riley_link_ble_config_scan_device_list);
deviceList.setAdapter(deviceListAdapter);
deviceList.setOnItemClickListener((parent, view, position, id) -> {
// stop scanning if still active
if (mScanning) {
mScanning = false;
mLEScanner.stopScan(mScanCallback2);
if (scanning) {
stopLeDeviceScan();
}
TextView textview = view.findViewById(R.id.rileylink_device_address);
String bleAddress = textview.getText().toString();
String bleAddress = ((TextView) view.findViewById(R.id.riley_link_ble_config_scan_item_device_address)).getText().toString();
sp.putString(RileyLinkConst.Prefs.RileyLinkAddress, bleAddress);
@ -114,46 +104,45 @@ public class RileyLinkBLEScanActivity extends NoSplashAppCompatActivity {
finish();
});
toolbarBTScan = findViewById(R.id.rileylink_toolbarBTScan);
toolbarBTScan.setTitle(R.string.rileylink_scanner_title);
setSupportActionBar(toolbarBTScan);
buttonStartScan.setOnClickListener(view -> {
// disable currently selected RL, so that we can discover it
rileyLinkUtil.sendBroadcastMessage(RileyLinkConst.Intents.RileyLinkDisconnect, this);
rlDisconnected = true;
startLeDeviceScan();
});
buttonStopScan.setOnClickListener(view -> stopLeDeviceScan());
buttonRemoveRileyLink.setOnClickListener(view -> new AlertDialog.Builder(this)
.setIcon(android.R.drawable.ic_dialog_alert)
.setTitle(getString(R.string.riley_link_ble_config_remove_riley_link_confirmation_title))
.setMessage(getString(R.string.riley_link_ble_config_remove_riley_link_confirmation))
.setPositiveButton(getString(R.string.riley_link_common_yes), (dialog, which) -> {
rileyLinkUtil.sendBroadcastMessage(RileyLinkConst.Intents.RileyLinkDisconnect, RileyLinkBLEConfigActivity.this);
sp.remove(RileyLinkConst.Prefs.RileyLinkAddress);
updateCurrentlySelectedRileyLink();
})
.setNegativeButton(getString(R.string.riley_link_common_no), null)
.show());
}
private void updateCurrentlySelectedRileyLink() {
String address = sp.getString(RileyLinkConst.Prefs.RileyLinkAddress, "");
if (StringUtils.isEmpty(address)) {
currentlySelectedRileyLink.setText(R.string.riley_link_ble_config_no_riley_link_selected);
buttonRemoveRileyLink.setVisibility(View.GONE);
} else {
currentlySelectedRileyLink.setText(address);
buttonRemoveRileyLink.setVisibility(View.VISIBLE);
}
}
@Override protected void onResume() {
super.onResume();
prepareForScanning();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_rileylink_ble_scan, menu);
actionTitleStart = resourceHelper.gs(R.string.rileylink_scanner_scan_scan);
actionTitleStop = resourceHelper.gs(R.string.rileylink_scanner_scan_stop);
menuItem = menu.getItem(0);
menuItem.setTitle(actionTitleStart);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getTitle().equals(actionTitleStart)) {
// disable currently selected RL, so that we can discover it
rileyLinkUtil.sendBroadcastMessage(RileyLinkConst.Intents.RileyLinkDisconnect, this);
rlDisconnected = true;
scanLeDevice(true);
return true;
} else if (item.getTitle().equals(actionTitleStop)) {
scanLeDevice(false);
return true;
} else {
return super.onOptionsItemSelected(item);
}
updateCurrentlySelectedRileyLink();
}
@Override public void onBackPressed() {
@ -166,41 +155,34 @@ public class RileyLinkBLEScanActivity extends NoSplashAppCompatActivity {
@Override protected void onDestroy() {
super.onDestroy();
mScanning = false;
mLEScanner.stopScan(mScanCallback2);
stopLeDeviceScan();
}
private void prepareForScanning() {
boolean checkOK = blePrecheck.prerequisitesCheck(this);
if (checkOK) {
mLEScanner = mBluetoothAdapter.getBluetoothLeScanner();
bleScanner = bluetoothAdapter.getBluetoothLeScanner();
settings = new ScanSettings.Builder().setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY).build();
filters = Collections.singletonList(new ScanFilter.Builder().setServiceUuid(
ParcelUuid.fromString(GattAttributes.SERVICE_RADIO)).build());
}
}
private final ScanCallback mScanCallback2 = new ScanCallback() {
private final ScanCallback bleScanCallback = new ScanCallback() {
@Override
public void onScanResult(int callbackType, final ScanResult scanRecord) {
Log.d(TAG, scanRecord.toString());
runOnUiThread(() -> {
if (addDevice(scanRecord))
mLeDeviceListAdapter.notifyDataSetChanged();
deviceListAdapter.notifyDataSetChanged();
});
}
@Override
public void onBatchScanResults(final List<ScanResult> results) {
runOnUiThread(() -> {
boolean added = false;
for (ScanResult result : results) {
@ -209,13 +191,11 @@ public class RileyLinkBLEScanActivity extends NoSplashAppCompatActivity {
}
if (added)
mLeDeviceListAdapter.notifyDataSetChanged();
deviceListAdapter.notifyDataSetChanged();
});
}
private boolean addDevice(ScanResult result) {
BluetoothDevice device = result.getDevice();
List<ParcelUuid> serviceUuids = result.getScanRecord().getServiceUuids();
@ -225,12 +205,11 @@ public class RileyLinkBLEScanActivity extends NoSplashAppCompatActivity {
} else if (serviceUuids.size() > 1) {
Log.v(TAG, "Device " + device.getAddress() + " has too many serviceUuids (Not RileyLink).");
} else {
String uuid = serviceUuids.get(0).getUuid().toString().toLowerCase();
if (uuid.equals(GattAttributes.SERVICE_RADIO)) {
Log.i(TAG, "Found RileyLink with address: " + device.getAddress());
mLeDeviceListAdapter.addDevice(result);
deviceListAdapter.addDevice(result);
return true;
} else {
Log.v(TAG, "Device " + device.getAddress() + " has incorrect uuid (Not RileyLink).");
@ -240,84 +219,62 @@ public class RileyLinkBLEScanActivity extends NoSplashAppCompatActivity {
return false;
}
private String getDeviceDebug(BluetoothDevice device) {
return "BluetoothDevice [name=" + device.getName() + ", address=" + device.getAddress() + //
", type=" + device.getType(); // + ", alias=" + device.getAlias();
}
@Override
public void onScanFailed(int errorCode) {
Log.e("Scan Failed", "Error Code: " + errorCode);
Toast.makeText(mContext, resourceHelper.gs(R.string.rileylink_scanner_scanning_error, errorCode),
Toast.makeText(RileyLinkBLEConfigActivity.this, resourceHelper.gs(R.string.riley_link_ble_config_scan_error, errorCode),
Toast.LENGTH_LONG).show();
}
};
private void scanLeDevice(final boolean enable) {
if (mLEScanner == null)
private void startLeDeviceScan() {
if (bleScanner == null) {
aapsLogger.error(LTag.PUMPBTCOMM, "startLeDeviceScan failed: bleScanner is null");
return;
if (enable) {
mLeDeviceListAdapter.clear();
mLeDeviceListAdapter.notifyDataSetChanged();
// Stops scanning after a pre-defined scan period.
mHandler.postDelayed(() -> {
if (mScanning) {
mScanning = false;
mLEScanner.stopScan(mScanCallback2);
aapsLogger.debug("scanLeDevice: Scanning Stop");
Toast.makeText(mContext, R.string.rileylink_scanner_scanning_finished, Toast.LENGTH_SHORT).show();
menuItem.setTitle(actionTitleStart);
}
}, SCAN_PERIOD);
mScanning = true;
mLEScanner.startScan(filters, settings, mScanCallback2);
aapsLogger.debug("scanLeDevice: Scanning Start");
Toast.makeText(this, R.string.rileylink_scanner_scanning, Toast.LENGTH_SHORT).show();
menuItem.setTitle(actionTitleStop);
} else {
if (mScanning) {
mScanning = false;
mLEScanner.stopScan(mScanCallback2);
aapsLogger.debug("scanLeDevice: Scanning Stop");
Toast.makeText(this, R.string.rileylink_scanner_scanning_finished, Toast.LENGTH_SHORT).show();
menuItem.setTitle(actionTitleStart);
}
}
deviceListAdapter.clear();
deviceListAdapter.notifyDataSetChanged();
// Stops scanning after a pre-defined scan period.
handler.postDelayed(this::stopLeDeviceScan, SCAN_PERIOD_MILLIS);
buttonStartScan.setEnabled(false);
buttonStopScan.setVisibility(View.VISIBLE);
scanning = true;
bleScanner.startScan(filters, settings, bleScanCallback);
aapsLogger.debug(LTag.PUMPBTCOMM, "startLeDeviceScan: Scanning Start");
Toast.makeText(RileyLinkBLEConfigActivity.this, R.string.riley_link_ble_config_scan_scanning, Toast.LENGTH_SHORT).show();
}
private void stopLeDeviceScan() {
if (scanning) {
scanning = false;
bleScanner.stopScan(bleScanCallback);
aapsLogger.debug(LTag.PUMPBTCOMM, "stopLeDeviceScan: Scanning Stop");
Toast.makeText(this, R.string.riley_link_ble_config_scan_finished, Toast.LENGTH_SHORT).show();
}
buttonStartScan.setEnabled(true);
buttonStopScan.setVisibility(View.GONE);
}
private class LeDeviceListAdapter extends BaseAdapter {
private final ArrayList<BluetoothDevice> mLeDevices;
private final Map<BluetoothDevice, Integer> rileyLinkDevices;
private final LayoutInflater mInflator;
String currentlySelectedAddress;
public LeDeviceListAdapter() {
super();
mLeDevices = new ArrayList<>();
rileyLinkDevices = new HashMap<>();
mInflator = RileyLinkBLEScanActivity.this.getLayoutInflater();
currentlySelectedAddress = sp.getString(RileyLinkConst.Prefs.RileyLinkAddress, "");
mInflator = RileyLinkBLEConfigActivity.this.getLayoutInflater();
}
public void addDevice(ScanResult result) {
if (!mLeDevices.contains(result.getDevice())) {
mLeDevices.add(result.getDevice());
}
@ -325,42 +282,36 @@ public class RileyLinkBLEScanActivity extends NoSplashAppCompatActivity {
notifyDataSetChanged();
}
public void clear() {
mLeDevices.clear();
rileyLinkDevices.clear();
notifyDataSetChanged();
}
@Override
public int getCount() {
return mLeDevices.size();
}
@Override
public Object getItem(int i) {
return mLeDevices.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
ViewHolder viewHolder;
// General ListView optimization code.
if (view == null) {
view = mInflator.inflate(R.layout.rileylink_scan_item, null);
viewHolder = new ViewHolder();
viewHolder.deviceAddress = view.findViewById(R.id.rileylink_device_address);
viewHolder.deviceName = view.findViewById(R.id.rileylink_device_name);
viewHolder.deviceAddress = view.findViewById(R.id.riley_link_ble_config_scan_item_device_address);
viewHolder.deviceName = view.findViewById(R.id.riley_link_ble_config_scan_item_device_name);
view.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) view.getTag();
@ -370,15 +321,15 @@ public class RileyLinkBLEScanActivity extends NoSplashAppCompatActivity {
String deviceName = device.getName();
if (StringUtils.isBlank(deviceName)) {
deviceName = "RileyLink";
deviceName = "RileyLink (?)";
}
deviceName += " [" + rileyLinkDevices.get(device).intValue() + "]";
deviceName += " [" + rileyLinkDevices.get(device) + "]";
String currentlySelectedAddress = sp.getString(RileyLinkConst.Prefs.RileyLinkAddress, "");
if (currentlySelectedAddress.equals(device.getAddress())) {
// viewHolder.deviceName.setTextColor(getColor(R.color.secondary_text_light));
// viewHolder.deviceAddress.setTextColor(getColor(R.color.secondary_text_light));
deviceName += " (" + getResources().getString(R.string.rileylink_scanner_selected_device) + ")";
deviceName += " (" + getResources().getString(R.string.riley_link_ble_config_scan_selected) + ")";
}
viewHolder.deviceName.setText(deviceName);
@ -386,11 +337,9 @@ public class RileyLinkBLEScanActivity extends NoSplashAppCompatActivity {
return view;
}
}
static class ViewHolder {
TextView deviceName;
TextView deviceAddress;
}

View file

@ -23,10 +23,10 @@ public abstract class Encoding4b6bAbstract implements Encoding4b6b {
// 21, 49, 50, 35, 52, 37, 38, 22, 26, 25, 42, 11, 44, 13, 14, 28
public abstract byte[] encode4b6b(byte[] data);
@Override public abstract byte[] encode4b6b(byte[] data);
public abstract byte[] decode4b6b(byte[] data) throws RileyLinkCommunicationException;
@Override public abstract byte[] decode4b6b(byte[] data) throws RileyLinkCommunicationException;
protected short convertUnsigned(byte x) {

View file

@ -19,7 +19,7 @@ public class Encoding4b6bGeoff extends Encoding4b6bAbstract {
public static final Logger LOG = StacktraceLoggerWrapper.getLogger(Encoding4b6bGeoff.class);
public byte[] encode4b6b(byte[] data) {
@Override public byte[] encode4b6b(byte[] data) {
// if ((data.length % 2) != 0) {
// LOG.error("Warning: data is odd number of bytes");
// }
@ -77,7 +77,7 @@ public class Encoding4b6bGeoff extends Encoding4b6bAbstract {
* @return
* @throws NumberFormatException
*/
public byte[] decode4b6b(byte[] raw) throws RileyLinkCommunicationException {
@Override public byte[] decode4b6b(byte[] raw) throws RileyLinkCommunicationException {
StringBuilder errorMessageBuilder = new StringBuilder();

View file

@ -20,7 +20,7 @@ public class Encoding4b6bGo extends Encoding4b6bAbstract {
private static Map<Short, Short> decodeGoMap;
public byte[] encode4b6b(byte[] src) {
@Override public byte[] encode4b6b(byte[] src) {
// 2 input bytes produce 3 output bytes.
// Odd final input byte, if any, produces 2 output bytes.
int n = src.length;
@ -54,7 +54,7 @@ public class Encoding4b6bGo extends Encoding4b6bAbstract {
* @param src
* @return
*/
public byte[] decode4b6b(byte[] src) throws RileyLinkCommunicationException {
@Override public byte[] decode4b6b(byte[] src) throws RileyLinkCommunicationException {
int n = src.length;
if (decodeGoMap == null)

View file

@ -33,7 +33,7 @@ public class Encoding4b6bLoop extends Encoding4b6bAbstract {
* @param data
* @return
*/
public byte[] encode4b6b(byte[] data) {
@Override public byte[] encode4b6b(byte[] data) {
List<Byte> buffer = new ArrayList<Byte>();
int bitAccumulator = 0x0;
@ -78,7 +78,7 @@ public class Encoding4b6bLoop extends Encoding4b6bAbstract {
* @return
* @throws RileyLinkCommunicationException
*/
public byte[] decode4b6b(byte[] data) throws RileyLinkCommunicationException {
@Override public byte[] decode4b6b(byte[] data) throws RileyLinkCommunicationException {
List<Byte> buffer = new ArrayList<Byte>();
int availBits = 0;
int bitAccumulator = 0;

View file

@ -78,7 +78,7 @@ public class RileyLinkStatusGeneralFragment extends DaggerFragment implements Re
refreshData();
}
public void refreshData() {
@Override public void refreshData() {
RileyLinkTargetDevice targetDevice = rileyLinkServiceData.targetDevice;
this.connectionStatus.setText(resourceHelper.gs(rileyLinkServiceData.rileyLinkServiceState.getResourceId()));
@ -114,7 +114,7 @@ public class RileyLinkStatusGeneralFragment extends DaggerFragment implements Re
long lastConnectionTimeMillis = pumpPlugin.getLastConnectionTimeMillis();
if (lastConnectionTimeMillis == 0) {
this.lastDeviceContact.setText(resourceHelper.gs(R.string.common_never));
this.lastDeviceContact.setText(resourceHelper.gs(R.string.riley_link_ble_config_connected_never));
} else {
this.lastDeviceContact.setText(StringUtil.toDateTimeString(dateUtil, new LocalDateTime(lastConnectionTimeMillis)));
}

View file

@ -135,7 +135,7 @@ public class ServiceTransport extends ServiceMessage {
}
public ServiceTransport clone() {
@Override public ServiceTransport clone() {
Parcel p = Parcel.obtain();
Parcel p2 = Parcel.obtain();
getMap().writeToParcel(p, 0);

View file

@ -33,7 +33,7 @@ public class ServiceTaskExecutor extends ThreadPoolExecutor {
}
// FIXME
protected void beforeExecute(Thread t, Runnable r) {
@Override protected void beforeExecute(Thread t, Runnable r) {
// This is run on either caller UI thread or Service UI thread.
ServiceTask task = (ServiceTask) r;
aapsLogger.debug(LTag.PUMPBTCOMM, "About to run task " + task.getClass().getSimpleName());
@ -43,7 +43,7 @@ public class ServiceTaskExecutor extends ThreadPoolExecutor {
// FIXME
protected void afterExecute(Runnable r, Throwable t) {
@Override protected void afterExecute(Runnable r, Throwable t) {
// This is run on either caller UI thread or Service UI thread.
ServiceTask task = (ServiceTask) r;
task.postOp();

View file

@ -0,0 +1,69 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="5dp">
<!-- Currently selected RileyLink -->
<TextView
style="@style/TextAppearance.AppCompat.Title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/riley_link_ble_config_scan_currently_selected_riley_link" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/riley_link_ble_config_currently_selected_riley_link"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:paddingStart="10dp"
android:textSize="16sp" />
<Button
android:id="@+id/riley_link_ble_config_button_remove_riley_link"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/riley_link_ble_config_remove_riley_link"
android:visibility="gone" />
</LinearLayout>
<!-- RileyLink scan -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
style="@style/TextAppearance.AppCompat.Title"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/riley_link_ble_config_scan_title" />
<Button
android:id="@+id/riley_link_ble_config_scan_start"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/riley_link_ble_config_button_scan_start" />
<Button
android:id="@+id/riley_link_ble_config_button_scan_stop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/riley_link_ble_config_scan_stop"
android:visibility="gone" />
</LinearLayout>
<!-- RileyLink scan results -->
<ListView
android:id="@+id/riley_link_ble_config_scan_device_list"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>

View file

@ -1,43 +0,0 @@
<androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.gxwtech.roundtrip2.RileyLinkScan">
<com.google.android.material.appbar.AppBarLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:elevation="0dp">
<androidx.appcompat.widget.Toolbar
android:id="@+id/rileylink_toolbarBTScan"
android:minHeight="?attr/actionBarSize"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"></androidx.appcompat.widget.Toolbar>
</com.google.android.material.appbar.AppBarLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingTop="?attr/actionBarSize">
<ListView
android:layout_width="match_parent"
android:layout_height="0dp"
android:id="@+id/rileylink_listBTScan"
android:layout_weight="1" />
</LinearLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
</androidx.drawerlayout.widget.DrawerLayout>

View file

@ -1,22 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="32dp">
android:orientation="vertical"
android:paddingStart="10dp"
android:paddingTop="5dp"
android:paddingBottom="5dp">
<TextView
android:id="@+id/rileylink_device_name"
android:id="@+id/riley_link_ble_config_scan_item_device_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="24dp"
android:text="name" />
android:textSize="16sp" />
<TextView
android:id="@+id/rileylink_device_address"
android:id="@+id/riley_link_ble_config_scan_item_device_address"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="12dp" />
android:textSize="12sp" />
</LinearLayout>

View file

@ -6,5 +6,5 @@
<item
android:id="@+id/rileylink_miScan"
app:showAsAction="ifRoom"
android:title="@string/rileylink_scanner_scan_scan"></item>
android:title="@string/riley_link_ble_config_button_scan_start"></item>
</menu>

View file

@ -1,17 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- RL BLE Scanning -->
<string name="rileylink_scanner_scan_scan">SCAN</string>
<string name="rileylink_scanner_scan_stop">STOP</string>
<string name="rileylink_scanner_selected_device">Selected</string>
<string name="rileylink_scanner_title">RileyLink Scan</string>
<string name="location_yes">Enable</string>
<string name="location_no">No</string>
<string name="rileylink_scanner_scanning">Scanning</string>
<string name="rileylink_scanner_scanning_finished">Scanning finished</string>
<string name="rileylink_scanner_scanning_error">Scanning error: %1$d</string>
<string name="common_never">Never</string>
<!-- RL BLE Config -->
<string name="riley_link_ble_config_button_scan_start">Scan</string>
<string name="riley_link_ble_config_scan_stop">Stop</string>
<string name="riley_link_ble_config_scan_selected">Selected</string>
<string name="riley_link_ble_config_scan_title">RileyLink Scan</string>
<string name="riley_link_ble_config_scan_scanning">Scanning</string>
<string name="riley_link_ble_config_scan_finished">Scanning finished</string>
<string name="riley_link_ble_config_scan_error">Scanning error: %1$d</string>
<string name="riley_link_ble_config_connected_never">Never</string>
<string name="riley_link_ble_config_scan_currently_selected_riley_link">Currently Selected RileyLink</string>
<string name="riley_link_ble_config_remove_riley_link">Remove</string>
<string name="riley_link_ble_config_remove_riley_link_confirmation">Are you sure that you want to remove your RileyLink?</string>
<!-- RL Status Page -->
<string name="rileylink_settings_tab1">Settings</string>
@ -34,7 +35,6 @@
<string name="rileylink_pump_serial_number">Pump Serial Number:</string>
<string name="rileylink_pump_frequency">Pump Frequency:</string>
<!-- RL State -->
<string name="rileylink_state_bt_init">Bluetooth Initializing…</string>
<string name="rileylink_state_bt_error">Bluetooth Error</string>
@ -67,6 +67,10 @@
<string name="key_medtronic_encoding" translatable="false">pref_medtronic_encoding</string>
<string name="mdt_last_bolus" translatable="false">%1$.1f %2$s (%3$s)</string>
<string name="riley_link_common_yes">Yes</string>
<string name="riley_link_common_no">No</string>
<string name="riley_link_ble_config_remove_riley_link_confirmation_title">Remove RileyLink</string>
<string name="riley_link_ble_config_no_riley_link_selected">No RileyLink selected</string>
<plurals name="duration_days">
<item quantity="one">%1$d day</item>
@ -77,5 +81,4 @@
<item quantity="other">%1$d hours</item>
</plurals>
</resources>