Initial bits for Insight Pump
This commit is contained in:
parent
f5a2c5bcd2
commit
7a4bc3b694
|
@ -192,6 +192,8 @@ dependencies {
|
||||||
compile "com.joanzapata.iconify:android-iconify-fontawesome:2.1.1"
|
compile "com.joanzapata.iconify:android-iconify-fontawesome:2.1.1"
|
||||||
compile "com.google.android.gms:play-services-wearable:7.5.0"
|
compile "com.google.android.gms:play-services-wearable:7.5.0"
|
||||||
compile(name: "android-edittext-validator-v1.3.4-mod", ext: "aar")
|
compile(name: "android-edittext-validator-v1.3.4-mod", ext: "aar")
|
||||||
|
compile(name: "sightparser-release", ext: "aar")
|
||||||
|
|
||||||
compile("com.google.android:flexbox:0.3.0") {
|
compile("com.google.android:flexbox:0.3.0") {
|
||||||
exclude group: "com.android.support"
|
exclude group: "com.android.support"
|
||||||
}
|
}
|
||||||
|
|
|
@ -54,6 +54,7 @@ import info.nightscout.androidaps.plugins.PumpDanaR.DanaRPlugin;
|
||||||
import info.nightscout.androidaps.plugins.PumpDanaRKorean.DanaRKoreanPlugin;
|
import info.nightscout.androidaps.plugins.PumpDanaRKorean.DanaRKoreanPlugin;
|
||||||
import info.nightscout.androidaps.plugins.PumpDanaRS.DanaRSPlugin;
|
import info.nightscout.androidaps.plugins.PumpDanaRS.DanaRSPlugin;
|
||||||
import info.nightscout.androidaps.plugins.PumpDanaRv2.DanaRv2Plugin;
|
import info.nightscout.androidaps.plugins.PumpDanaRv2.DanaRv2Plugin;
|
||||||
|
import info.nightscout.androidaps.plugins.PumpInsight.InsightPumpPlugin;
|
||||||
import info.nightscout.androidaps.plugins.PumpMDI.MDIPlugin;
|
import info.nightscout.androidaps.plugins.PumpMDI.MDIPlugin;
|
||||||
import info.nightscout.androidaps.plugins.PumpVirtual.VirtualPumpPlugin;
|
import info.nightscout.androidaps.plugins.PumpVirtual.VirtualPumpPlugin;
|
||||||
import info.nightscout.androidaps.plugins.SensitivityAAPS.SensitivityAAPSPlugin;
|
import info.nightscout.androidaps.plugins.SensitivityAAPS.SensitivityAAPSPlugin;
|
||||||
|
@ -129,6 +130,7 @@ public class MainApp extends Application {
|
||||||
if (Config.DANAR) pluginsList.add(DanaRv2Plugin.getPlugin());
|
if (Config.DANAR) pluginsList.add(DanaRv2Plugin.getPlugin());
|
||||||
if (Config.DANAR) pluginsList.add(DanaRSPlugin.getPlugin());
|
if (Config.DANAR) pluginsList.add(DanaRSPlugin.getPlugin());
|
||||||
pluginsList.add(CareportalPlugin.getPlugin());
|
pluginsList.add(CareportalPlugin.getPlugin());
|
||||||
|
if (Config.APS) pluginsList.add(InsightPumpPlugin.getPlugin());
|
||||||
if (Config.MDI) pluginsList.add(MDIPlugin.getPlugin());
|
if (Config.MDI) pluginsList.add(MDIPlugin.getPlugin());
|
||||||
if (Config.VIRTUALPUMP) pluginsList.add(VirtualPumpPlugin.getPlugin());
|
if (Config.VIRTUALPUMP) pluginsList.add(VirtualPumpPlugin.getPlugin());
|
||||||
if (Config.APS) pluginsList.add(LoopPlugin.getPlugin());
|
if (Config.APS) pluginsList.add(LoopPlugin.getPlugin());
|
||||||
|
|
|
@ -0,0 +1,106 @@
|
||||||
|
package info.nightscout.androidaps.plugins.PumpInsight;
|
||||||
|
|
||||||
|
|
||||||
|
import android.app.Activity;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.os.Handler;
|
||||||
|
import android.support.annotation.Nullable;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import com.squareup.otto.Subscribe;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import info.nightscout.androidaps.MainApp;
|
||||||
|
import info.nightscout.androidaps.R;
|
||||||
|
import info.nightscout.androidaps.plugins.Common.SubscriberFragment;
|
||||||
|
import info.nightscout.androidaps.plugins.PumpInsight.connector.Connector;
|
||||||
|
import info.nightscout.androidaps.plugins.PumpInsight.events.EventInsightPumpUpdateGui;
|
||||||
|
|
||||||
|
import com.crashlytics.android.Crashlytics;
|
||||||
|
|
||||||
|
public class InsightPumpFragment extends SubscriberFragment {
|
||||||
|
private static Logger log = LoggerFactory.getLogger(InsightPumpFragment.class);
|
||||||
|
|
||||||
|
TextView basaBasalRateView;
|
||||||
|
TextView tempBasalView;
|
||||||
|
TextView extendedBolusView;
|
||||||
|
TextView batteryView;
|
||||||
|
TextView reservoirView;
|
||||||
|
TextView statusView;
|
||||||
|
Connector connector = Connector.get();
|
||||||
|
|
||||||
|
private static Handler sLoopHandler = new Handler();
|
||||||
|
private static Runnable sRefreshLoop = null;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCreate(@Nullable Bundle savedInstanceState) {
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
if (sRefreshLoop == null) {
|
||||||
|
sRefreshLoop = new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
updateGUI();
|
||||||
|
sLoopHandler.postDelayed(sRefreshLoop, 60 * 1000L);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
sLoopHandler.postDelayed(sRefreshLoop, 60 * 1000L);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||||
|
Bundle savedInstanceState) {
|
||||||
|
try {
|
||||||
|
View view = inflater.inflate(R.layout.insightpump_fragment, container, false);
|
||||||
|
basaBasalRateView = (TextView) view.findViewById(R.id.insightpump_basabasalrate);
|
||||||
|
tempBasalView = (TextView) view.findViewById(R.id.insightpump_tempbasal);
|
||||||
|
extendedBolusView = (TextView) view.findViewById(R.id.insightpump_extendedbolus);
|
||||||
|
batteryView = (TextView) view.findViewById(R.id.insightpump_battery);
|
||||||
|
reservoirView = (TextView) view.findViewById(R.id.insightpump_reservoir);
|
||||||
|
statusView = (TextView) view.findViewById(R.id.insightpump_status);
|
||||||
|
|
||||||
|
return view;
|
||||||
|
} catch (Exception e) {
|
||||||
|
Crashlytics.logException(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Subscribe
|
||||||
|
public void onStatusEvent(final EventInsightPumpUpdateGui ev) {
|
||||||
|
updateGUI();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void updateGUI() {
|
||||||
|
Activity activity = getActivity();
|
||||||
|
if (activity != null && basaBasalRateView != null)
|
||||||
|
activity.runOnUiThread(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
InsightPumpPlugin insightPumpPlugin = InsightPumpPlugin.getPlugin();
|
||||||
|
basaBasalRateView.setText(insightPumpPlugin.getBaseBasalRate() + "U");
|
||||||
|
if (MainApp.getConfigBuilder().isTempBasalInProgress()) {
|
||||||
|
tempBasalView.setText(MainApp.getConfigBuilder().getTempBasalFromHistory(System.currentTimeMillis()).toStringFull());
|
||||||
|
} else {
|
||||||
|
tempBasalView.setText("");
|
||||||
|
}
|
||||||
|
if (MainApp.getConfigBuilder().isInHistoryExtendedBoluslInProgress()) {
|
||||||
|
extendedBolusView.setText(MainApp.getConfigBuilder().getExtendedBolusFromHistory(System.currentTimeMillis()).toString());
|
||||||
|
} else {
|
||||||
|
extendedBolusView.setText("");
|
||||||
|
}
|
||||||
|
batteryView.setText(insightPumpPlugin.batteryPercent + "%");
|
||||||
|
reservoirView.setText(insightPumpPlugin.reservoirInUnits + "U");
|
||||||
|
|
||||||
|
statusView.setText(connector.getLastStatusMessage());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,207 @@
|
||||||
|
package info.nightscout.androidaps.plugins.PumpInsight.connector;
|
||||||
|
|
||||||
|
import android.content.BroadcastReceiver;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.content.IntentFilter;
|
||||||
|
import android.content.pm.PackageInfo;
|
||||||
|
import android.content.pm.PackageManager;
|
||||||
|
import android.os.RemoteException;
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
|
import info.nightscout.androidaps.MainApp;
|
||||||
|
import info.nightscout.androidaps.plugins.PumpInsight.events.EventInsightPumpUpdateGui;
|
||||||
|
import sugar.free.sightparser.handling.ServiceConnectionCallback;
|
||||||
|
import sugar.free.sightparser.handling.SightServiceConnector;
|
||||||
|
import sugar.free.sightparser.handling.StatusCallback;
|
||||||
|
import sugar.free.sightparser.pipeline.Status;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by jamorham on 23/01/2018.
|
||||||
|
*
|
||||||
|
* Connects to SightRemote app service using SightParser library
|
||||||
|
*
|
||||||
|
* SightRemote and SightParser created by Tebbe Ubben
|
||||||
|
*
|
||||||
|
* Original proof of concept SightProxy by jamorham
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class Connector {
|
||||||
|
|
||||||
|
private static final String TAG = "InsightConnector";
|
||||||
|
private static final String COMPANION_APP_PACKAGE = "sugar.free.sightremote";
|
||||||
|
private static final String STATUS_RECEIVER = "sugar.free.sightparser.handling.StatusCallback";
|
||||||
|
private static volatile Connector instance;
|
||||||
|
private volatile SightServiceConnector serviceConnector;
|
||||||
|
private volatile Status lastStatus = null;
|
||||||
|
private volatile long lastStatusTime = -1;
|
||||||
|
private boolean companionAppInstalled = false;
|
||||||
|
private StatusCallback statusCallback = new StatusCallback() {
|
||||||
|
@Override
|
||||||
|
public void onStatusChange(Status status) {
|
||||||
|
|
||||||
|
synchronized (this) {
|
||||||
|
log("Status change: " + status);
|
||||||
|
lastStatus = status;
|
||||||
|
lastStatusTime = tsl();
|
||||||
|
switch (status) {
|
||||||
|
// TODO automated reactions to change in status
|
||||||
|
}
|
||||||
|
MainApp.bus().post(new EventInsightPumpUpdateGui());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
private BroadcastReceiver statusReceiver = new BroadcastReceiver() {
|
||||||
|
@Override
|
||||||
|
public void onReceive(Context ctx, Intent intent) {
|
||||||
|
log("Receiving broadcast!");
|
||||||
|
final String str = intent.getStringExtra("STATUS_MESSAGE");
|
||||||
|
try {
|
||||||
|
statusCallback.onStatusChange(str);
|
||||||
|
} catch (RemoteException e) {
|
||||||
|
log("Remote exception: " + e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
private ServiceConnectionCallback connectionCallback = new ServiceConnectionCallback() {
|
||||||
|
@Override
|
||||||
|
public void onServiceConnected() {
|
||||||
|
log("On service connected");
|
||||||
|
serviceConnector.connect();
|
||||||
|
statusCallback.onStatusChange(safeGetStatus());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onServiceDisconnected() {
|
||||||
|
log("Disconnected from service");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
private Connector() {
|
||||||
|
registerReceiver();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Connector get() {
|
||||||
|
if (instance == null) {
|
||||||
|
init_instance();
|
||||||
|
}
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
private synchronized static void init_instance() {
|
||||||
|
if (instance == null) {
|
||||||
|
instance = new Connector();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static long tsl() {
|
||||||
|
return System.currentTimeMillis();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean isCompanionAppInstalled() {
|
||||||
|
return checkPackageExists(MainApp.instance(), COMPANION_APP_PACKAGE);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean checkPackageExists(Context context, String packageName) {
|
||||||
|
try {
|
||||||
|
final PackageManager pm = context.getPackageManager();
|
||||||
|
final PackageInfo pi = pm.getPackageInfo(packageName, 0);
|
||||||
|
return pi.packageName.equals(packageName);
|
||||||
|
} catch (PackageManager.NameNotFoundException e) {
|
||||||
|
return false;
|
||||||
|
} catch (Exception e) {
|
||||||
|
Log.wtf(TAG, "Exception trying to determine packages! " + e);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void connectToPump() {
|
||||||
|
log("Attempting to connect to pump");
|
||||||
|
get().getServiceConnector().connect();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void log(String msg) {
|
||||||
|
android.util.Log.e("PUMPPUMP", msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void registerReceiver() {
|
||||||
|
try {
|
||||||
|
MainApp.instance().unregisterReceiver(statusReceiver);
|
||||||
|
} catch (Exception e) {
|
||||||
|
//
|
||||||
|
}
|
||||||
|
MainApp.instance().registerReceiver(statusReceiver, new IntentFilter(STATUS_RECEIVER));
|
||||||
|
}
|
||||||
|
|
||||||
|
public synchronized void init() {
|
||||||
|
log("init");
|
||||||
|
if (serviceConnector == null) {
|
||||||
|
companionAppInstalled = isCompanionAppInstalled();
|
||||||
|
if (companionAppInstalled) {
|
||||||
|
serviceConnector = new SightServiceConnector(MainApp.instance());
|
||||||
|
serviceConnector.addStatusCallback(statusCallback);
|
||||||
|
serviceConnector.setConnectionCallback(connectionCallback);
|
||||||
|
serviceConnector.connectToService();
|
||||||
|
log("Trying to connect");
|
||||||
|
} else {
|
||||||
|
log("Not trying init due to missing companion app");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public SightServiceConnector getServiceConnector() {
|
||||||
|
init();
|
||||||
|
return serviceConnector;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCurrent() {
|
||||||
|
init();
|
||||||
|
return safeGetStatus().toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Status safeGetStatus() {
|
||||||
|
if (isConnected()) return serviceConnector.getStatus();
|
||||||
|
return Status.DISCONNECTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Status getLastStatus() {
|
||||||
|
return lastStatus;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isConnected() {
|
||||||
|
return serviceConnector != null && serviceConnector.isConnectedToService();
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isPumpConnected() {
|
||||||
|
//return isConnected() && serviceConnector.isUseable();
|
||||||
|
return isConnected() && getLastStatus() == Status.CONNECTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getLastStatusMessage() {
|
||||||
|
|
||||||
|
if (!companionAppInstalled) {
|
||||||
|
return "Companion app does not appear to be installed!";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isConnected()) {
|
||||||
|
return "Not connected to companion app!";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (lastStatus == null) {
|
||||||
|
return "Unknown";
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (lastStatus) {
|
||||||
|
default:
|
||||||
|
return lastStatus.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean lastStatusRecent() {
|
||||||
|
return true; // TODO evaluate whether current
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
276
app/src/main/res/layout/insightpump_fragment.xml
Normal file
276
app/src/main/res/layout/insightpump_fragment.xml
Normal file
|
@ -0,0 +1,276 @@
|
||||||
|
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
tools:context=".plugins.PumpInsight.InsightPumpFragment">
|
||||||
|
|
||||||
|
<ScrollView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center"
|
||||||
|
android:layout_marginTop="20dp"
|
||||||
|
android:text="@string/insightpump"
|
||||||
|
android:textAppearance="?android:attr/textAppearanceLarge" />
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="20dp"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:gravity="end"
|
||||||
|
android:paddingRight="5dp"
|
||||||
|
android:text="Status"
|
||||||
|
android:textSize="14sp" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="5dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="0"
|
||||||
|
android:gravity="center_horizontal"
|
||||||
|
android:paddingEnd="2dp"
|
||||||
|
android:paddingStart="2dp"
|
||||||
|
android:text=":"
|
||||||
|
android:textSize="14sp" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/insightpump_status"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:gravity="start"
|
||||||
|
android:paddingLeft="5dp"
|
||||||
|
android:textSize="14sp" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="20dp"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:gravity="end"
|
||||||
|
android:paddingRight="5dp"
|
||||||
|
android:text="@string/pump_basebasalrate_label"
|
||||||
|
android:textSize="14sp" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="5dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="0"
|
||||||
|
android:gravity="center_horizontal"
|
||||||
|
android:paddingEnd="2dp"
|
||||||
|
android:paddingStart="2dp"
|
||||||
|
android:text=":"
|
||||||
|
android:textSize="14sp" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/insightpump_basabasalrate"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:gravity="start"
|
||||||
|
android:paddingLeft="5dp"
|
||||||
|
android:textSize="14sp" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="2dip"
|
||||||
|
android:layout_marginBottom="5dp"
|
||||||
|
android:layout_marginLeft="20dp"
|
||||||
|
android:layout_marginRight="20dp"
|
||||||
|
android:layout_marginTop="5dp"
|
||||||
|
android:background="@color/listdelimiter" />
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:gravity="end"
|
||||||
|
android:paddingRight="5dp"
|
||||||
|
android:text="@string/pump_tempbasal_label"
|
||||||
|
android:textSize="14sp" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="5dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="0"
|
||||||
|
android:gravity="center_horizontal"
|
||||||
|
android:paddingEnd="2dp"
|
||||||
|
android:paddingStart="2dp"
|
||||||
|
android:text=":"
|
||||||
|
android:textSize="14sp" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/insightpump_tempbasal"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:gravity="start"
|
||||||
|
android:paddingLeft="5dp"
|
||||||
|
android:textSize="14sp" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="2dip"
|
||||||
|
android:layout_marginBottom="5dp"
|
||||||
|
android:layout_marginLeft="20dp"
|
||||||
|
android:layout_marginRight="20dp"
|
||||||
|
android:layout_marginTop="5dp"
|
||||||
|
android:background="@color/listdelimiter" />
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:gravity="end"
|
||||||
|
android:paddingRight="5dp"
|
||||||
|
android:text="@string/virtualpump_extendedbolus_label"
|
||||||
|
android:textSize="14sp" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="5dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="0"
|
||||||
|
android:gravity="center_horizontal"
|
||||||
|
android:paddingEnd="2dp"
|
||||||
|
android:paddingStart="2dp"
|
||||||
|
android:text=":"
|
||||||
|
android:textSize="14sp" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/insightpump_extendedbolus"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:gravity="start"
|
||||||
|
android:paddingLeft="5dp"
|
||||||
|
android:textSize="14sp" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="2dip"
|
||||||
|
android:layout_marginBottom="5dp"
|
||||||
|
android:layout_marginLeft="20dp"
|
||||||
|
android:layout_marginRight="20dp"
|
||||||
|
android:layout_marginTop="5dp"
|
||||||
|
android:background="@color/listdelimiter" />
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:gravity="end"
|
||||||
|
android:paddingRight="5dp"
|
||||||
|
android:text="@string/pump_battery_label"
|
||||||
|
android:textSize="14sp" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="5dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="0"
|
||||||
|
android:gravity="center_horizontal"
|
||||||
|
android:paddingEnd="2dp"
|
||||||
|
android:paddingStart="2dp"
|
||||||
|
android:text=":"
|
||||||
|
android:textSize="14sp" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/insightpump_battery"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:gravity="start"
|
||||||
|
android:paddingLeft="5dp"
|
||||||
|
android:textSize="14sp" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="2dip"
|
||||||
|
android:layout_marginBottom="5dp"
|
||||||
|
android:layout_marginLeft="20dp"
|
||||||
|
android:layout_marginRight="20dp"
|
||||||
|
android:layout_marginTop="5dp"
|
||||||
|
android:background="@color/listdelimiter" />
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:gravity="end"
|
||||||
|
android:paddingRight="5dp"
|
||||||
|
android:text="@string/pump_reservoir_label"
|
||||||
|
android:textSize="14sp" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="5dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="0"
|
||||||
|
android:gravity="center_horizontal"
|
||||||
|
android:paddingEnd="2dp"
|
||||||
|
android:paddingStart="2dp"
|
||||||
|
android:text=":"
|
||||||
|
android:textSize="14sp" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/insightpump_reservoir"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:gravity="start"
|
||||||
|
android:paddingLeft="5dp"
|
||||||
|
android:textSize="14sp" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
</LinearLayout>
|
||||||
|
</ScrollView>
|
||||||
|
|
||||||
|
</FrameLayout>
|
|
@ -861,5 +861,7 @@
|
||||||
<string name="combo_error_bolus_recovery_progress">Recovering from connection loss</string>
|
<string name="combo_error_bolus_recovery_progress">Recovering from connection loss</string>
|
||||||
<string name="combo_reservoir_level_insufficient_for_bolus">Not enough insulin for bolus left in reservoir</string>
|
<string name="combo_reservoir_level_insufficient_for_bolus">Not enough insulin for bolus left in reservoir</string>
|
||||||
<string name="extendedbolusdeliveryerror">Extended bolus delivery error</string>
|
<string name="extendedbolusdeliveryerror">Extended bolus delivery error</string>
|
||||||
|
<string name="insightpump_shortname">Insight</string>
|
||||||
|
<string name="insightpump">Insight</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
||||||
|
|
8
app/src/main/res/xml/pref_insightpump.xml
Normal file
8
app/src/main/res/xml/pref_insightpump.xml
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<PreferenceCategory
|
||||||
|
android:key="insightpump"
|
||||||
|
android:title="@string/insightpump">
|
||||||
|
</PreferenceCategory>
|
||||||
|
|
||||||
|
</PreferenceScreen>
|
Loading…
Reference in a new issue