From 008d37c738f4eda68dd2c4de0726a10038d96787 Mon Sep 17 00:00:00 2001 From: AdrianLxM Date: Wed, 27 Dec 2017 01:42:39 +0100 Subject: [PATCH 1/4] studio 3 --- NightWatch.iml | 2 +- build.gradle | 2 +- gradle/wrapper/gradle-wrapper.properties | 4 +- mobile/build.gradle | 2 +- mobile/mobile.iml | 171 +++++++++++------------ wear/build.gradle | 5 +- wear/wear.iml | 91 +++++++----- 7 files changed, 148 insertions(+), 129 deletions(-) diff --git a/NightWatch.iml b/NightWatch.iml index 697b3ea..dc1f76d 100644 --- a/NightWatch.iml +++ b/NightWatch.iml @@ -8,7 +8,7 @@ - + diff --git a/build.gradle b/build.gradle index 1b7886d..2540ef4 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:1.3.0' + classpath 'com.android.tools.build:gradle:3.0.1' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 0c71e76..bf32d5a 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Wed Apr 10 15:27:10 PDT 2013 +#Wed Dec 27 01:32:14 CET 2017 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.2.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip diff --git a/mobile/build.gradle b/mobile/build.gradle index 3fa0ac1..dd0a068 100644 --- a/mobile/build.gradle +++ b/mobile/build.gradle @@ -20,7 +20,7 @@ repositories { android { compileSdkVersion 23 - buildToolsVersion "22.0.1" + buildToolsVersion '26.0.2' defaultConfig { applicationId "com.dexdrip.stephenblack.nightwatch" diff --git a/mobile/mobile.iml b/mobile/mobile.iml index 2a28dc3..8665ad5 100644 --- a/mobile/mobile.iml +++ b/mobile/mobile.iml @@ -9,13 +9,11 @@ - + - + + + + + - + + + + + + + + + + + + + + + - + + + + + + + + - + - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/wear/build.gradle b/wear/build.gradle index 6676f24..73943f4 100644 --- a/wear/build.gradle +++ b/wear/build.gradle @@ -3,7 +3,7 @@ apply plugin: 'com.android.application' android { compileSdkVersion 23 - buildToolsVersion "22.0.1" + buildToolsVersion '26.0.2' defaultConfig { applicationId "com.dexdrip.stephenblack.nightwatch" @@ -23,6 +23,7 @@ android { dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.ustwo.android:clockwise-wearable:1.0.2' - compile 'com.google.android.support:wearable:1.1.0' + provided 'com.google.android.wearable:wearable:2.0.1' + compile 'com.google.android.support:wearable:2.0.1' compile 'com.google.android.gms:play-services-wearable:7.3.0' } diff --git a/wear/wear.iml b/wear/wear.iml index ee9718d..0cf6d63 100644 --- a/wear/wear.iml +++ b/wear/wear.iml @@ -9,13 +9,11 @@ - + - + + + + - + + + + + + + + + + + + + + + - + + + + + + + + - + - + + - - - - - - - - - - - - - + + + - - + + + + + - - - - - - - - + + + + + + + + + + + + + + + \ No newline at end of file From ae3f8c10a2af38f011e37b3ca66f387c0d4bd29e Mon Sep 17 00:00:00 2001 From: Janne Seittenranta Date: Fri, 16 Feb 2018 13:33:28 +0200 Subject: [PATCH 2/4] fix for crashes #101 & #78 Fix added based on #78. Same reason seems to be reason also for crashes in #101. --- mobile/src/main/java/com/dexdrip/stephenblack/nightwatch/Bg.java | 1 + 1 file changed, 1 insertion(+) diff --git a/mobile/src/main/java/com/dexdrip/stephenblack/nightwatch/Bg.java b/mobile/src/main/java/com/dexdrip/stephenblack/nightwatch/Bg.java index 8863711..dae09f6 100644 --- a/mobile/src/main/java/com/dexdrip/stephenblack/nightwatch/Bg.java +++ b/mobile/src/main/java/com/dexdrip/stephenblack/nightwatch/Bg.java @@ -154,6 +154,7 @@ public int battery_int() { public String slopeArrow() { String arrow = "--"; + if(direction == null) return arrow; if (direction.compareTo("DoubleDown") == 0) { arrow = "\u21ca"; } else if (direction.compareTo("SingleDown") == 0) { From 354b156b2233102949b9b6d59c089bb39e42112b Mon Sep 17 00:00:00 2001 From: Janne Seittenranta Date: Sat, 17 Feb 2018 22:49:18 +0200 Subject: [PATCH 3/4] Fix for delta values in widget/watchfaces Delta value was fixed for widgets and watch faces. In my setup I'm using 640G with 600 SeriesAndroidUploader v0.6.1. The problem was, that both delta values were 18 times smaller than expected (when selecting mg/dl as unit, delta value was correct for mmol units). I changed the way how delta is calculated. Since delta value is gathered from pebble API, I was thinking that maybe API is not always giving same data (depending on setup, pumop, uploader version etc.). --- .../java/com/dexdrip/stephenblack/nightwatch/Bg.java | 10 ++++++---- .../stephenblack/nightwatch/BgGraphBuilder.java | 11 +++++++---- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/mobile/src/main/java/com/dexdrip/stephenblack/nightwatch/Bg.java b/mobile/src/main/java/com/dexdrip/stephenblack/nightwatch/Bg.java index dae09f6..0088fa3 100644 --- a/mobile/src/main/java/com/dexdrip/stephenblack/nightwatch/Bg.java +++ b/mobile/src/main/java/com/dexdrip/stephenblack/nightwatch/Bg.java @@ -92,15 +92,15 @@ public String unitized_string(SharedPreferences aPrefs) { return unitized_string(); } - public String unitizedDeltaString() { + public String unitizedDeltaString() { // fixing delta values for nightwidget and watchface while 640G & mmol in use. DecimalFormat df = new DecimalFormat("#"); df.setMaximumFractionDigits(1); String delta_sign = ""; if (bgdelta > 0.1) { delta_sign = "+"; } - if(doMgdl()) { - return delta_sign + df.format(unitized(bgdelta)) + " mg/dl"; + if(!doMgdl()) { + return delta_sign + df.format(bgdelta) + " mmol"; } else { - return delta_sign + df.format(unitized(bgdelta)) + " mmol"; + return delta_sign + df.format(mgdlConvert(bgdelta)) + " mg/dl"; } } public String unitizedDeltaStringNoUnit() { @@ -138,6 +138,8 @@ public double mmolConvert(double mgdl) { return mgdl * Constants.MGDL_TO_MMOLL; } + public double mgdlConvert (double mmol) { return mmol * Constants.MMOLL_TO_MGDL; } + public boolean doMgdl() { String unit = prefs.getString("units", "mgdl"); diff --git a/mobile/src/main/java/com/dexdrip/stephenblack/nightwatch/BgGraphBuilder.java b/mobile/src/main/java/com/dexdrip/stephenblack/nightwatch/BgGraphBuilder.java index d9dcf60..776ce64 100644 --- a/mobile/src/main/java/com/dexdrip/stephenblack/nightwatch/BgGraphBuilder.java +++ b/mobile/src/main/java/com/dexdrip/stephenblack/nightwatch/BgGraphBuilder.java @@ -313,15 +313,16 @@ public String unitized_string(double value) { } } + public String unitizedDeltaString(double value) { DecimalFormat df = new DecimalFormat("#"); df.setMaximumFractionDigits(1); String delta_sign = ""; if (value > 0.1) { delta_sign = "+"; } - if(doMgdl) { - return delta_sign + df.format(unitized(value)) + " mg/dl"; + if(!doMgdl) { + return delta_sign + df.format(value) + " mmol"; } else { - return delta_sign + df.format(unitized(value)) + " mmol"; + return delta_sign + df.format(mgdlConvert(value)) + " mg/dl"; } } @@ -329,6 +330,8 @@ public double mmolConvert(double mgdl) { return mgdl * Constants.MGDL_TO_MMOLL; } + public double mgdlConvert (double mmol) { return mmol * Constants.MMOLL_TO_MGDL; } + static public boolean isXLargeTablet(Context context) { return (context.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_XLARGE; } @@ -364,7 +367,7 @@ public String unitizedDeltaString(boolean showUnit, boolean highGranularity) { } else { if(highGranularity){ - df.setMaximumFractionDigits(2); + df.setMaximumFractionDigits(1); // 1 set as max fraction digits when mmol in use } else { df.setMaximumFractionDigits(1); } From a6de8eca07ee8da21528dfb9c6ed2fe3aa1643ad Mon Sep 17 00:00:00 2001 From: Janne Seittenranta Date: Sun, 18 Feb 2018 22:40:15 +0200 Subject: [PATCH 4/4] new watchface added with IOB One new watchface created which shows also IOB values. Watchface itself is pretty similar to nightwatch large. There is also some other minor changes. Watchface was tested with Polar M600, which is using 240*240 resolution. --- .../dexdrip/stephenblack/nightwatch/Bg.java | 8 +- .../nightwatch/BgGraphBuilder.java | 1 - wear/src/main/AndroidManifest.xml | 22 ++- .../stephenblack/nightwatch/BIGChart.java | 2 +- .../nightwatch/BaseWatchFace.java | 15 +- .../stephenblack/nightwatch/HomeSpecial.java | 125 +++++++++++++ .../nightwatch/ListenerService.java | 2 + wear/src/main/res/drawable/watchface_iob.png | Bin 0 -> 9311 bytes .../main/res/layout/activity_home_special.xml | 12 ++ .../res/layout/rect_activity_home_special.xml | 171 ++++++++++++++++++ .../res/layout/round_activity_bigchart.xml | 2 +- .../layout/round_activity_home_special.xml | 158 ++++++++++++++++ 12 files changed, 507 insertions(+), 11 deletions(-) create mode 100644 wear/src/main/java/com/dexdrip/stephenblack/nightwatch/HomeSpecial.java create mode 100644 wear/src/main/res/drawable/watchface_iob.png create mode 100644 wear/src/main/res/layout/activity_home_special.xml create mode 100644 wear/src/main/res/layout/rect_activity_home_special.xml create mode 100644 wear/src/main/res/layout/round_activity_home_special.xml diff --git a/mobile/src/main/java/com/dexdrip/stephenblack/nightwatch/Bg.java b/mobile/src/main/java/com/dexdrip/stephenblack/nightwatch/Bg.java index 0088fa3..33c6b1c 100644 --- a/mobile/src/main/java/com/dexdrip/stephenblack/nightwatch/Bg.java +++ b/mobile/src/main/java/com/dexdrip/stephenblack/nightwatch/Bg.java @@ -67,6 +67,11 @@ public class Bg extends Model { @Column(name = "raw") public double raw; //Calibrated raw value + @Expose + @Column(name = "iob") + public String iob; + + public String unitized_string() { double value = sgv_double(); DecimalFormat df = new DecimalFormat("#"); @@ -177,7 +182,7 @@ public String slopeArrow() { public String readingAge() { int minutesAgo = (int) Math.floor(timeSince()/(1000*60)); - if (minutesAgo == 1) { + if (minutesAgo <= 1) { return minutesAgo + " Minute ago"; } return minutesAgo + " Minutes ago"; @@ -203,6 +208,7 @@ public DataMap dataMap(SharedPreferences sPrefs) { dataMap.putDouble("sgvDouble", sgv_double()); dataMap.putDouble("high", inMgdl(highMark)); dataMap.putDouble("low", inMgdl(lowMark)); + dataMap.putString("iob",iob); dataMap.putString("rawString", threeRaw((prefs.getString("units", "mgdl").equals("mgdl")))); return dataMap; } diff --git a/mobile/src/main/java/com/dexdrip/stephenblack/nightwatch/BgGraphBuilder.java b/mobile/src/main/java/com/dexdrip/stephenblack/nightwatch/BgGraphBuilder.java index 776ce64..8e1b66c 100644 --- a/mobile/src/main/java/com/dexdrip/stephenblack/nightwatch/BgGraphBuilder.java +++ b/mobile/src/main/java/com/dexdrip/stephenblack/nightwatch/BgGraphBuilder.java @@ -313,7 +313,6 @@ public String unitized_string(double value) { } } - public String unitizedDeltaString(double value) { DecimalFormat df = new DecimalFormat("#"); df.setMaximumFractionDigits(1); diff --git a/wear/src/main/AndroidManifest.xml b/wear/src/main/AndroidManifest.xml index 38130c3..3bee08d 100644 --- a/wear/src/main/AndroidManifest.xml +++ b/wear/src/main/AndroidManifest.xml @@ -28,13 +28,27 @@ + + + + + + + + + - + android:resource="@xml/watch_face"/> + diff --git a/wear/src/main/java/com/dexdrip/stephenblack/nightwatch/BIGChart.java b/wear/src/main/java/com/dexdrip/stephenblack/nightwatch/BIGChart.java index 64527dc..dec9bf6 100644 --- a/wear/src/main/java/com/dexdrip/stephenblack/nightwatch/BIGChart.java +++ b/wear/src/main/java/com/dexdrip/stephenblack/nightwatch/BIGChart.java @@ -150,7 +150,7 @@ public double timeSince() { public String readingAge(boolean shortString) { if (datetime == 0) { return shortString?"--'":"-- Minute ago"; } int minutesAgo = (int) Math.floor(timeSince()/(1000*60)); - if (minutesAgo == 1) { + if (minutesAgo <= 1) { return minutesAgo + (shortString?"'":" Minute ago"); } return minutesAgo + (shortString?"'":" Minutes ago"); diff --git a/wear/src/main/java/com/dexdrip/stephenblack/nightwatch/BaseWatchFace.java b/wear/src/main/java/com/dexdrip/stephenblack/nightwatch/BaseWatchFace.java index 8d697d1..6ded6b4 100644 --- a/wear/src/main/java/com/dexdrip/stephenblack/nightwatch/BaseWatchFace.java +++ b/wear/src/main/java/com/dexdrip/stephenblack/nightwatch/BaseWatchFace.java @@ -42,7 +42,7 @@ public abstract class BaseWatchFace extends WatchFace implements SharedPreferences.OnSharedPreferenceChangeListener { public final static IntentFilter INTENT_FILTER; public static final long[] vibratePattern = {0,400,300,400,300,400}; - public TextView mTime, mSgv, mDirection, mTimestamp, mUploaderBattery, mDelta, mRaw; + public TextView mTime, mSgv, mDirection, mTimestamp, mUploaderBattery, mDelta, mRaw, miob; public RelativeLayout mRelativeLayout; public LinearLayout mLinearLayout; public long sgvLevel = 0; @@ -72,6 +72,7 @@ public abstract class BaseWatchFace extends WatchFace implements SharedPreferen private String rawString = "000 | 000 | 000"; private String batteryString = "--"; private String sgvString = "--"; + private String iobString = "--"; @Override public void onCreate() { @@ -114,6 +115,7 @@ public void onLayoutInflated(WatchViewStub stub) { mRaw = (TextView) stub.findViewById(R.id.raw); mUploaderBattery = (TextView) stub.findViewById(R.id.uploader_battery); mDelta = (TextView) stub.findViewById(R.id.delta); + miob = (TextView) stub.findViewById(R.id.iob); mRelativeLayout = (RelativeLayout) stub.findViewById(R.id.main_layout); mLinearLayout = (LinearLayout) stub.findViewById(R.id.secondary_layout); chart = (LineChartView) stub.findViewById(R.id.chart); @@ -143,7 +145,7 @@ public double timeSince() { public String readingAge(boolean shortString) { if (datetime == 0) { return shortString?"--'":"-- Minute ago"; } int minutesAgo = (int) Math.floor(timeSince()/(1000*60)); - if (minutesAgo == 1) { + if (minutesAgo <= 1) { return minutesAgo + (shortString?"'":" Minute ago"); } return minutesAgo + (shortString?"'":" Minutes ago"); @@ -207,6 +209,7 @@ public void onReceive(Context context, Intent intent) { rawString = dataMap.getString("rawString"); sgvString = dataMap.getString("sgvString"); batteryString = dataMap.getString("battery"); + iobString = dataMap.getString("iob"); mSgv.setText(dataMap.getString("sgvString")); if(ageLevel()<=0) { @@ -222,6 +225,9 @@ public void onReceive(Context context, Intent intent) { mDirection.setText(dataMap.getString("slopeArrow")); mDelta.setText(dataMap.getString("delta")); + if (miob != null) { + miob.setText("IOB: " + iobString + "u"); + } if (chart != null) { addToWatchSet(dataMap); @@ -231,6 +237,8 @@ public void onReceive(Context context, Intent intent) { mRelativeLayout.layout(0, 0, mRelativeLayout.getMeasuredWidth(), mRelativeLayout.getMeasuredHeight()); invalidate(); + + } else { Log.d("ERROR: ", "DATA IS NOT YET SET"); } @@ -240,7 +248,7 @@ public void onReceive(Context context, Intent intent) { private void showAgoRawBatt() { - if(mRaw == null || mTimestamp == null || mUploaderBattery == null){ + if(mRaw == null || mTimestamp == null || mUploaderBattery == null ){ return; } @@ -251,6 +259,7 @@ private void showAgoRawBatt() { mRaw.setText("R: " + rawString); mTimestamp.setText(readingAge(true)); mUploaderBattery.setText("U: " + batteryString + "%"); + } else { mRaw.setVisibility(View.GONE); mTimestamp.setText(readingAge(false)); diff --git a/wear/src/main/java/com/dexdrip/stephenblack/nightwatch/HomeSpecial.java b/wear/src/main/java/com/dexdrip/stephenblack/nightwatch/HomeSpecial.java new file mode 100644 index 0000000..ee217c8 --- /dev/null +++ b/wear/src/main/java/com/dexdrip/stephenblack/nightwatch/HomeSpecial.java @@ -0,0 +1,125 @@ +package com.dexdrip.stephenblack.nightwatch; + +/** + * Created by Janne on 18.2.2018. + */ + +import android.content.Context; +import android.graphics.Color; +import android.view.LayoutInflater; + +import com.ustwo.clockwise.WatchMode; + +public class HomeSpecial extends BaseWatchFace { + + @Override + public void onCreate() { + super.onCreate(); + LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); + layoutView = inflater.inflate(R.layout.activity_home_special, null); + performViewSetup(); + } + + + @Override + protected void setColorDark(){ + mTime.setTextColor(Color.WHITE); + mRelativeLayout.setBackgroundColor(Color.BLACK); + mLinearLayout.setBackgroundColor(Color.WHITE); + if (sgvLevel == 1) { + mSgv.setTextColor(Color.YELLOW); + mDirection.setTextColor(Color.YELLOW); + mDelta.setTextColor(Color.YELLOW); + miob.setTextColor(Color.YELLOW); + } else if (sgvLevel == 0) { + mSgv.setTextColor(Color.WHITE); + mDirection.setTextColor(Color.WHITE); + mDelta.setTextColor(Color.WHITE); + miob.setTextColor(Color.WHITE); + } else if (sgvLevel == -1) { + mSgv.setTextColor(Color.RED); + mDirection.setTextColor(Color.RED); + mDelta.setTextColor(Color.RED); + miob.setTextColor(Color.RED); + } + if (ageLevel == 1) { + mTimestamp.setTextColor(Color.BLACK); + } else { + mTimestamp.setTextColor(Color.RED); + } + + if (batteryLevel == 1) { + mUploaderBattery.setTextColor(Color.BLACK); + } else { + mUploaderBattery.setTextColor(Color.RED); + } + + mRaw.setTextColor(Color.WHITE); + } + + + + @Override + protected void setColorBright() { + if (getCurrentWatchMode() == WatchMode.INTERACTIVE) { + mRelativeLayout.setBackgroundColor(Color.WHITE); + mLinearLayout.setBackgroundColor(Color.BLACK); + if (sgvLevel == 1) { + mSgv.setTextColor(Color.YELLOW); + mDirection.setTextColor(Color.YELLOW); + mDelta.setTextColor(Color.YELLOW); + miob.setTextColor(Color.YELLOW); + } else if (sgvLevel == 0) { + mSgv.setTextColor(Color.BLACK); + mDirection.setTextColor(Color.BLACK); + mDelta.setTextColor(Color.BLACK); + miob.setTextColor(Color.BLACK); + } else if (sgvLevel == -1) { + mSgv.setTextColor(Color.RED); + mDirection.setTextColor(Color.RED); + mDelta.setTextColor(Color.RED); + miob.setTextColor(Color.RED); + } + + if (ageLevel == 1) { + mTimestamp.setTextColor(Color.WHITE); + } else { + mTimestamp.setTextColor(Color.RED); + } + + if (batteryLevel == 1) { + mUploaderBattery.setTextColor(Color.WHITE); + } else { + mUploaderBattery.setTextColor(Color.RED); + } + mRaw.setTextColor(Color.BLACK); + mTime.setTextColor(Color.BLACK); + } else { + mRelativeLayout.setBackgroundColor(Color.BLACK); + mLinearLayout.setBackgroundColor(Color.LTGRAY); + if (sgvLevel == 1) { + mSgv.setTextColor(Color.YELLOW); + mDirection.setTextColor(Color.YELLOW); + mDelta.setTextColor(Color.YELLOW); + miob.setTextColor(Color.YELLOW); + } else if (sgvLevel == 0) { + mSgv.setTextColor(Color.WHITE); + mDirection.setTextColor(Color.WHITE); + mDelta.setTextColor(Color.WHITE); + miob.setTextColor(Color.BLACK); + } else if (sgvLevel == -1) { + mSgv.setTextColor(Color.RED); + mDirection.setTextColor(Color.RED); + mDelta.setTextColor(Color.RED); + miob.setTextColor(Color.RED); + } + + mUploaderBattery.setTextColor(Color.BLACK); + mTimestamp.setTextColor(Color.BLACK); + mRaw.setTextColor(Color.BLACK); + mTime.setTextColor(Color.WHITE); + miob.setTextColor(Color.BLACK); + } + } +} + diff --git a/wear/src/main/java/com/dexdrip/stephenblack/nightwatch/ListenerService.java b/wear/src/main/java/com/dexdrip/stephenblack/nightwatch/ListenerService.java index 25e440e..3ed18f2 100644 --- a/wear/src/main/java/com/dexdrip/stephenblack/nightwatch/ListenerService.java +++ b/wear/src/main/java/com/dexdrip/stephenblack/nightwatch/ListenerService.java @@ -72,10 +72,12 @@ public void googleApiConnect() { @Override public int onStartCommand(Intent intent, int flags, int startId) { + if (intent!=null) { if (intent.getAction().equals(ACTION_RESEND)) { googleApiConnect(); requestData(); } + } return START_STICKY; } diff --git a/wear/src/main/res/drawable/watchface_iob.png b/wear/src/main/res/drawable/watchface_iob.png new file mode 100644 index 0000000000000000000000000000000000000000..926d34428348a4790f22e1cee4136e01e6967f5f GIT binary patch literal 9311 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 + \ No newline at end of file diff --git a/wear/src/main/res/layout/rect_activity_home_special.xml b/wear/src/main/res/layout/rect_activity_home_special.xml new file mode 100644 index 0000000..c5cae66 --- /dev/null +++ b/wear/src/main/res/layout/rect_activity_home_special.xml @@ -0,0 +1,171 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wear/src/main/res/layout/round_activity_bigchart.xml b/wear/src/main/res/layout/round_activity_bigchart.xml index c2d7646..754df80 100644 --- a/wear/src/main/res/layout/round_activity_bigchart.xml +++ b/wear/src/main/res/layout/round_activity_bigchart.xml @@ -1,7 +1,7 @@ diff --git a/wear/src/main/res/layout/round_activity_home_special.xml b/wear/src/main/res/layout/round_activity_home_special.xml new file mode 100644 index 0000000..c1b9551 --- /dev/null +++ b/wear/src/main/res/layout/round_activity_home_special.xml @@ -0,0 +1,158 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +