Merge pull request #1055 from Andries-Smit/wear-title

Wear curved titles
This commit is contained in:
Milos Kozak 2021-12-10 15:26:15 +01:00 committed by GitHub
commit 466cd97ad7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
21 changed files with 200 additions and 296 deletions

View file

@ -49,7 +49,7 @@ def generateGitBuild = { ->
}
android {
compileSdkVersion 30
compileSdkVersion 31
defaultConfig {
applicationId "info.nightscout.androidaps"
@ -117,8 +117,6 @@ dependencies {
implementation project(':shared')
implementation fileTree(include: ['*.jar'], dir: 'libs')
//implementation files("libs/hellocharts-library-1.5.5.jar")
//compile "com.ustwo.android:clockwise-wearable:1.0.2"
implementation "androidx.appcompat:appcompat:$appcompat_version"
implementation 'androidx.legacy:legacy-support-v13:1.0.0'
@ -131,10 +129,12 @@ dependencies {
implementation(name: 'ustwo-clockwise-debug', ext: 'aar')
implementation(name: 'wearpreferenceactivity-0.5.0', ext: 'aar')
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'androidx.percentlayout:percentlayout:1.0.0'
implementation 'androidx.wear:wear:1.1.0'
implementation 'androidx.wear:wear:1.2.0'
implementation('com.github.lecho:hellocharts-library:1.5.8@aar')
implementation "androidx.core:core-ktx:$coreVersion"
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
testImplementation "junit:junit:$junit_version"
testImplementation 'org.json:json:20211205'
testImplementation("org.mockito:mockito-core:${mockitoVersion}") {
@ -157,9 +157,6 @@ dependencies {
}
testImplementation "org.skyscreamer:jsonassert:1.5.0"
testImplementation "org.hamcrest:hamcrest-all:1.3"
implementation "androidx.core:core-ktx:$coreVersion"
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
// for old fashioned support-app version
implementation "com.google.dagger:dagger:$dagger_version"

View file

@ -1,16 +1,11 @@
package info.nightscout.androidaps.interaction.actions;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.os.Bundle;
import android.os.SystemClock;
import android.os.Vibrator;
import androidx.core.app.NotificationManagerCompat;
import android.support.wearable.view.DotsPageIndicator;
import android.support.wearable.view.GridPagerAdapter;
import android.support.wearable.view.GridViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@ -24,10 +19,8 @@ import info.nightscout.androidaps.data.ListenerService;
* Created by adrian on 09/02/17.
*/
public class AcceptActivity extends ViewSelectorActivity {
String title = "";
String message = "";
String actionstring = "";
@ -45,30 +38,25 @@ public class AcceptActivity extends ViewSelectorActivity {
message = extras.getString("message", "");
actionstring = extras.getString("actionstring", "");
if ("".equals(message) || "".equals(actionstring) ){
finish(); return;
if ("".equals(message) || "".equals(actionstring)) {
finish();
return;
}
setContentView(R.layout.grid_layout);
final GridViewPager pager = findViewById(R.id.pager);
pager.setAdapter(new MyGridViewPagerAdapter());
DotsPageIndicator dotsPageIndicator = findViewById(R.id.page_indicator);
dotsPageIndicator.setPager(pager);
setAdapter(new MyGridViewPagerAdapter());
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
long[] vibratePattern = new long[]{0, 100, 50, 100, 50};
v.vibrate(vibratePattern, -1);
}
@Override
protected void onPause() {
super.onPause();
finish();
}
private class MyGridViewPagerAdapter extends GridPagerAdapter {
@Override
public int getColumnCount(int arg0) {
@ -83,7 +71,7 @@ public class AcceptActivity extends ViewSelectorActivity {
@Override
public Object instantiateItem(ViewGroup container, int row, int col) {
if(col == 0){
if (col == 0) {
final View view = LayoutInflater.from(getApplicationContext()).inflate(R.layout.action_confirm_text, container, false);
final TextView headingView = view.findViewById(R.id.title);
headingView.setText(title);
@ -110,29 +98,29 @@ public class AcceptActivity extends ViewSelectorActivity {
public void destroyItem(ViewGroup container, int row, int col, Object view) {
// Handle this to get the data before the view is destroyed?
// Object should still be kept by this, just setup for reinit?
container.removeView((View)view);
container.removeView((View) view);
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view==object;
return view == object;
}
}
@Override
public synchronized void onDestroy(){
public synchronized void onDestroy() {
super.onDestroy();
if(dismissThread != null){
if (dismissThread != null) {
dismissThread.invalidate();
}
}
private class DismissThread extends Thread{
private class DismissThread extends Thread {
private boolean valid = true;
public synchronized void invalidate(){
public synchronized void invalidate() {
valid = false;
}
@ -140,7 +128,7 @@ public class AcceptActivity extends ViewSelectorActivity {
public void run() {
SystemClock.sleep(60 * 1000);
synchronized (this) {
if(valid) {
if (valid) {
AcceptActivity.this.finish();
}
}
@ -150,11 +138,11 @@ public class AcceptActivity extends ViewSelectorActivity {
@Override
protected synchronized void onNewIntent(Intent intent) {
super.onNewIntent(intent);
if(dismissThread != null) dismissThread.invalidate();
if (dismissThread != null) dismissThread.invalidate();
Bundle extras = intent.getExtras();
Intent msgIntent = new Intent(this, AcceptActivity.class);
msgIntent.putExtras(extras);
startActivity(msgIntent);
finish();
}
}
}

View file

@ -1,15 +1,11 @@
package info.nightscout.androidaps.interaction.actions;
import android.os.Bundle;
import android.support.wearable.view.DotsPageIndicator;
import android.support.wearable.view.GridPagerAdapter;
import android.support.wearable.view.GridViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import java.text.DecimalFormat;
@ -22,7 +18,6 @@ import info.nightscout.shared.SafeParse;
* Created by adrian on 09/02/17.
*/
public class BolusActivity extends ViewSelectorActivity {
PlusMinusEditText editCarbs;
@ -31,32 +26,7 @@ public class BolusActivity extends ViewSelectorActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.grid_layout);
final TextView title = findViewById(R.id.title);
title.setText(getString(R.string.menu_bolus));
final GridViewPager pager = findViewById(R.id.pager);
pager.setAdapter(new MyGridViewPagerAdapter());
DotsPageIndicator dotsPageIndicator = findViewById(R.id.page_indicator);
dotsPageIndicator.setPager(pager);
pager.setOnPageChangeListener(new GridViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int row, int column, float rowOffset, float columnOffset, int rowOffsetPixels, int columnOffsetPixels) {
dotsPageIndicator.onPageScrolled(row, column, rowOffset, columnOffset, rowOffsetPixels,
columnOffsetPixels);
}
@Override
public void onPageSelected(int row, int column) {
dotsPageIndicator.onPageSelected(row, column);
View view = pager.getChildAt(column);
view.requestFocus();
}
@Override
public void onPageScrollStateChanged(int state) {
dotsPageIndicator.onPageScrollStateChanged(state);
}
});
setAdapter(new MyGridViewPagerAdapter());
}
@Override
@ -108,10 +78,8 @@ public class BolusActivity extends ViewSelectorActivity {
confirmbutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//check if it can happen that the fagment is never created that hold data?
// (you have to swipe past them anyways - but still)
String actionstring = "bolus " + SafeParse.stringToDouble(editInsulin.editText.getText().toString())
+ " " + SafeParse.stringToInt(editCarbs.editText.getText().toString());
ListenerService.initiateAction(BolusActivity.this, actionstring);
@ -135,6 +103,5 @@ public class BolusActivity extends ViewSelectorActivity {
return view == object;
}
}
}
}

View file

@ -1,15 +1,11 @@
package info.nightscout.androidaps.interaction.actions;
import android.os.Bundle;
import android.support.wearable.view.DotsPageIndicator;
import android.support.wearable.view.GridPagerAdapter;
import android.support.wearable.view.GridViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import java.text.DecimalFormat;
@ -22,7 +18,6 @@ import info.nightscout.shared.SafeParse;
* Created by adrian on 09/02/17.
*/
public class CPPActivity extends ViewSelectorActivity {
PlusMinusEditText editPercentage;
@ -46,42 +41,15 @@ public class CPPActivity extends ViewSelectorActivity {
if (timeshift < 0) timeshift += 24;
setContentView(R.layout.grid_layout);
final TextView title = findViewById(R.id.title);
title.setText(getString(R.string.status_cpp));
final GridViewPager pager = findViewById(R.id.pager);
pager.setAdapter(new MyGridViewPagerAdapter());
DotsPageIndicator dotsPageIndicator = findViewById(R.id.page_indicator);
dotsPageIndicator.setPager(pager);
pager.setOnPageChangeListener(new GridViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int row, int column, float rowOffset, float columnOffset, int rowOffsetPixels, int columnOffsetPixels) {
dotsPageIndicator.onPageScrolled(row, column, rowOffset, columnOffset, rowOffsetPixels,
columnOffsetPixels);
}
@Override
public void onPageSelected(int row, int column) {
dotsPageIndicator.onPageSelected(row, column);
View view = pager.getChildAt(column);
view.requestFocus();
}
@Override
public void onPageScrollStateChanged(int state) {
dotsPageIndicator.onPageScrollStateChanged(state);
}
});
setAdapter(new MyGridViewPagerAdapter());
}
@Override
protected void onPause() {
super.onPause();
finish();
}
private class MyGridViewPagerAdapter extends GridPagerAdapter {
@Override
public int getColumnCount(int arg0) {
@ -151,6 +119,5 @@ public class CPPActivity extends ViewSelectorActivity {
return view == object;
}
}
}

View file

@ -1,15 +1,11 @@
package info.nightscout.androidaps.interaction.actions;
import android.os.Bundle;
import android.support.wearable.view.DotsPageIndicator;
import android.support.wearable.view.GridPagerAdapter;
import android.support.wearable.view.GridViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import java.text.DecimalFormat;
@ -22,53 +18,24 @@ import info.nightscout.shared.SafeParse;
* Created by adrian on 04/08/18.
*/
public class ECarbActivity extends ViewSelectorActivity {
PlusMinusEditText editCarbs;
PlusMinusEditText editStartTime;
PlusMinusEditText editDuration;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.grid_layout);
final TextView title = findViewById(R.id.title);
title.setText(getString(R.string.menu_ecarb));
final GridViewPager pager = findViewById(R.id.pager);
pager.setAdapter(new MyGridViewPagerAdapter());
DotsPageIndicator dotsPageIndicator = findViewById(R.id.page_indicator);
dotsPageIndicator.setPager(pager);
pager.setOnPageChangeListener(new GridViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int row, int column, float rowOffset, float columnOffset, int rowOffsetPixels, int columnOffsetPixels) {
dotsPageIndicator.onPageScrolled(row, column, rowOffset, columnOffset, rowOffsetPixels,
columnOffsetPixels);
}
@Override
public void onPageSelected(int row, int column) {
dotsPageIndicator.onPageSelected(row, column);
View view = pager.getChildAt(column);
view.requestFocus();
}
@Override
public void onPageScrollStateChanged(int state) {
dotsPageIndicator.onPageScrollStateChanged(state);
}
});
setAdapter(new MyGridViewPagerAdapter());
}
@Override
protected void onPause() {
super.onPause();
finish();
}
private class MyGridViewPagerAdapter extends GridPagerAdapter {
@Override
public int getColumnCount(int arg0) {
@ -83,10 +50,10 @@ public class ECarbActivity extends ViewSelectorActivity {
@Override
public Object instantiateItem(ViewGroup container, int row, int col) {
if(col == 0){
if (col == 0) {
final View view = getInflatedPlusMinusView(container);
double def = 0;
if (editCarbs != null){
if (editCarbs != null) {
def = SafeParse.stringToDouble(editCarbs.editText.getText().toString());
}
editCarbs = new PlusMinusEditText(view, R.id.amountfield, R.id.plusbutton, R.id.minusbutton, def, 0d, 150d, 1d, new DecimalFormat("0"), true);
@ -94,20 +61,20 @@ public class ECarbActivity extends ViewSelectorActivity {
container.addView(view);
view.requestFocus();
return view;
} else if(col == 1){
} else if (col == 1) {
final View view = getInflatedPlusMinusView(container);
double def = 0;
if (editStartTime != null){
if (editStartTime != null) {
def = SafeParse.stringToDouble(editStartTime.editText.getText().toString());
}
editStartTime = new PlusMinusEditText(view, R.id.amountfield, R.id.plusbutton, R.id.minusbutton, def, 0d, 300d, 15d, new DecimalFormat("0"), false);
setLabelToPlusMinusView(view, getString(R.string.action_start_min));
container.addView(view);
return view;
} else if(col == 2){
} else if (col == 2) {
final View view = getInflatedPlusMinusView(container);
double def = 0;
if (editDuration != null){
if (editDuration != null) {
def = SafeParse.stringToDouble(editDuration.editText.getText().toString());
}
editDuration = new PlusMinusEditText(view, R.id.amountfield, R.id.plusbutton, R.id.minusbutton, def, 0d, 8d, 1d, new DecimalFormat("0"), false);
@ -125,7 +92,7 @@ public class ECarbActivity extends ViewSelectorActivity {
//check if it can happen that the fagment is never created that hold data?
// (you have to swipe past them anyways - but still)
String actionstring = "ecarbs " +SafeParse.stringToInt(editCarbs.editText.getText().toString())
String actionstring = "ecarbs " + SafeParse.stringToInt(editCarbs.editText.getText().toString())
+ " " + SafeParse.stringToInt(editStartTime.editText.getText().toString())
+ " " + SafeParse.stringToInt(editDuration.editText.getText().toString());
ListenerService.initiateAction(ECarbActivity.this, actionstring);
@ -141,14 +108,13 @@ public class ECarbActivity extends ViewSelectorActivity {
public void destroyItem(ViewGroup container, int row, int col, Object view) {
// Handle this to get the data before the view is destroyed?
// Object should still be kept by this, just setup for reinit?
container.removeView((View)view);
container.removeView((View) view);
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view==object;
return view == object;
}
}
}
}

View file

@ -1,15 +1,11 @@
package info.nightscout.androidaps.interaction.actions;
import android.os.Bundle;
import android.support.wearable.view.DotsPageIndicator;
import android.support.wearable.view.GridPagerAdapter;
import android.support.wearable.view.GridViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import java.text.DecimalFormat;
@ -22,7 +18,6 @@ import info.nightscout.shared.SafeParse;
* Created by adrian on 09/02/17.
*/
public class FillActivity extends ViewSelectorActivity {
PlusMinusEditText editInsulin;
@ -30,25 +25,15 @@ public class FillActivity extends ViewSelectorActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.grid_layout);
final TextView title = findViewById(R.id.title);
title.setText(getString(R.string.menu_prime_fill));
final GridViewPager pager = findViewById(R.id.pager);
pager.setAdapter(new MyGridViewPagerAdapter());
DotsPageIndicator dotsPageIndicator = findViewById(R.id.page_indicator);
dotsPageIndicator.setPager(pager);
setAdapter(new MyGridViewPagerAdapter());
}
@Override
protected void onPause() {
super.onPause();
finish();
}
private class MyGridViewPagerAdapter extends GridPagerAdapter {
@Override
public int getColumnCount(int arg0) {
@ -107,6 +92,5 @@ public class FillActivity extends ViewSelectorActivity {
return view == object;
}
}
}
}

View file

@ -1,12 +1,9 @@
package info.nightscout.androidaps.interaction.actions;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.wearable.view.DotsPageIndicator;
import android.support.wearable.view.GridPagerAdapter;
import android.support.wearable.view.GridViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@ -24,7 +21,6 @@ import info.nightscout.shared.SafeParse;
* Created by adrian on 09/02/17.
*/
public class TempTargetActivity extends ViewSelectorActivity {
PlusMinusEditText lowRange;
@ -36,46 +32,19 @@ public class TempTargetActivity extends ViewSelectorActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.grid_layout);
final TextView title = findViewById(R.id.title);
title.setText(getString(R.string.menu_tempt));
final GridViewPager pager = findViewById(R.id.pager);
pager.setAdapter(new MyGridViewPagerAdapter());
DotsPageIndicator dotsPageIndicator = findViewById(R.id.page_indicator);
dotsPageIndicator.setPager(pager);
setAdapter(new MyGridViewPagerAdapter());
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
isMGDL = sp.getBoolean("units_mgdl", true);
isSingleTarget = sp.getBoolean("singletarget", true);
pager.setOnPageChangeListener(new GridViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int row, int column, float rowOffset, float columnOffset, int rowOffsetPixels, int columnOffsetPixels) {
dotsPageIndicator.onPageScrolled(row, column, rowOffset, columnOffset, rowOffsetPixels,
columnOffsetPixels);
}
@Override
public void onPageSelected(int row, int column) {
dotsPageIndicator.onPageSelected(row, column);
View view = pager.getChildAt(column);
view.requestFocus();
}
@Override
public void onPageScrollStateChanged(int state) {
dotsPageIndicator.onPageScrollStateChanged(state);
}
});
}
@Override
protected void onPause() {
super.onPause();
finish();
}
private class MyGridViewPagerAdapter extends GridPagerAdapter {
@Override
public int getColumnCount(int arg0) {
@ -183,6 +152,5 @@ public class TempTargetActivity extends ViewSelectorActivity {
return view == object;
}
}
}
}

View file

@ -2,26 +2,83 @@ package info.nightscout.androidaps.interaction.actions;
import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.wearable.view.DotsPageIndicator;
import android.support.wearable.view.GridPagerAdapter;
import android.support.wearable.view.GridViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.wear.widget.CurvedTextView;
import info.nightscout.androidaps.R;
/**
* Created by adrian on 13/02/17.
*/
public class ViewSelectorActivity extends Activity {
private GridViewPager pager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.grid_layout);
setTitleBasedOnScreenShape(String.valueOf(getTitle()));
pager = findViewById(R.id.pager);
DotsPageIndicator dotsPageIndicator = findViewById(R.id.page_indicator);
dotsPageIndicator.setPager(pager);
pager.setOnPageChangeListener(new GridViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int row, int column, float rowOffset, float columnOffset, int rowOffsetPixels, int columnOffsetPixels) {
dotsPageIndicator.onPageScrolled(row, column, rowOffset, columnOffset, rowOffsetPixels,
columnOffsetPixels);
}
@Override
public void onPageSelected(int row, int column) {
dotsPageIndicator.onPageSelected(row, column);
View view = pager.getChildAt(column);
view.requestFocus();
}
@Override
public void onPageScrollStateChanged(int state) {
dotsPageIndicator.onPageScrollStateChanged(state);
}
});
}
public void setAdapter(GridPagerAdapter adapter) {
pager.setAdapter(adapter);
}
private void setTitleBasedOnScreenShape(String title) {
CurvedTextView titleViewCurved = findViewById(R.id.title_curved);
TextView titleView = findViewById(R.id.title);
if (this.getResources().getConfiguration().isScreenRound()) {
titleViewCurved.setText(title);
titleViewCurved.setVisibility(View.VISIBLE);
titleView.setVisibility((View.GONE));
} else {
titleView.setText(title);
titleView.setVisibility(View.VISIBLE);
titleViewCurved.setVisibility((View.GONE));
}
}
View getInflatedPlusMinusView(ViewGroup container) {
SharedPreferences sharedPrefs = PreferenceManager
.getDefaultSharedPreferences(this);
int design = Integer.parseInt(sharedPrefs.getString("input_design", "1"));
if (design == 2){
if (design == 2) {
return LayoutInflater.from(getApplicationContext()).inflate(R.layout.action_editplusminus_item_quickrighty, container, false);
} else if (design == 3) {
return LayoutInflater.from(getApplicationContext()).inflate(R.layout.action_editplusminus_item_quicklefty, container, false);
@ -33,12 +90,12 @@ public class ViewSelectorActivity extends Activity {
return LayoutInflater.from(getApplicationContext()).inflate(R.layout.action_editplusminus_item, container, false);
}
void setLabelToPlusMinusView(View view, String labelText){
void setLabelToPlusMinusView(View view, String labelText) {
SharedPreferences sharedPrefs = PreferenceManager
.getDefaultSharedPreferences(this);
int design = Integer.parseInt(sharedPrefs.getString("input_design", "1"));
if (design == 4){
if (design == 4) {
//@LadyViktoria: Here the label can be set differently, if you like.
final TextView textView = view.findViewById(R.id.label);
textView.setText(labelText);

View file

@ -1,17 +1,13 @@
package info.nightscout.androidaps.interaction.actions;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.wearable.view.DotsPageIndicator;
import android.support.wearable.view.GridPagerAdapter;
import android.support.wearable.view.GridViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import java.text.DecimalFormat;
@ -24,7 +20,6 @@ import info.nightscout.shared.SafeParse;
* Created by adrian on 09/02/17.
*/
public class WizardActivity extends ViewSelectorActivity {
PlusMinusEditText editCarbs;
@ -32,48 +27,20 @@ public class WizardActivity extends ViewSelectorActivity {
boolean hasPercentage;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.grid_layout);
final TextView title = findViewById(R.id.title);
title.setText(getString(R.string.menu_wizard));
final GridViewPager pager = findViewById(R.id.pager);
pager.setAdapter(new MyGridViewPagerAdapter());
DotsPageIndicator dotsPageIndicator = findViewById(R.id.page_indicator);
dotsPageIndicator.setPager(pager);
setAdapter(new MyGridViewPagerAdapter());
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
hasPercentage = sp.getBoolean("wizardpercentage", false);
pager.setOnPageChangeListener(new GridViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int row, int column, float rowOffset, float columnOffset, int rowOffsetPixels, int columnOffsetPixels) {
dotsPageIndicator.onPageScrolled(row, column, rowOffset, columnOffset, rowOffsetPixels,
columnOffsetPixels);
}
@Override
public void onPageSelected(int row, int column) {
dotsPageIndicator.onPageSelected(row, column);
View view = pager.getChildAt(column);
view.requestFocus();
}
@Override
public void onPageScrollStateChanged(int state) {
dotsPageIndicator.onPageScrollStateChanged(state);
}
});
}
@Override
protected void onPause() {
super.onPause();
finish();
}
private class MyGridViewPagerAdapter extends GridPagerAdapter {
@Override
public int getColumnCount(int arg0) {
@ -95,7 +62,6 @@ public class WizardActivity extends ViewSelectorActivity {
} else {
double def = SafeParse.stringToDouble(editCarbs.editText.getText().toString());
editCarbs = new PlusMinusEditText(view, R.id.amountfield, R.id.plusbutton, R.id.minusbutton, def, 0d, 150d, 1d, new DecimalFormat("0"), false);
}
setLabelToPlusMinusView(view, getString(R.string.action_carbs));
container.addView(view);
@ -151,6 +117,5 @@ public class WizardActivity extends ViewSelectorActivity {
return view == object;
}
}
}
}

View file

@ -44,7 +44,6 @@ public class MainMenuActivity extends MenuListActivity {
return menuItems;
}
boolean showPrimeFill = sp.getBoolean("primefill", false);
boolean showWizard = sp.getBoolean("showWizard", true);

View file

@ -10,6 +10,7 @@ import android.widget.RelativeLayout;
import android.widget.TextView;
import androidx.recyclerview.widget.RecyclerView;
import androidx.wear.widget.CurvedTextView;
import androidx.wear.widget.WearableLinearLayoutManager;
import androidx.wear.widget.WearableRecyclerView;
@ -23,10 +24,12 @@ import info.nightscout.androidaps.R;
public abstract class MenuListActivity extends Activity {
List<MenuItem> elements;
protected abstract List<MenuItem> getElements();
protected abstract void doAction(String position);
public interface AdapterCallback{
public interface AdapterCallback {
void onItemClicked(MenuAdapter.ItemViewHolder v);
}
@ -34,18 +37,22 @@ public abstract class MenuListActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.actions_list_activity);
TextView titleView = findViewById(R.id.title);
titleView.setText(getTitle());
setTitleBasedOnScreenShape(String.valueOf(getTitle()));
elements = getElements();
CustomScrollingLayoutCallback customScrollingLayoutCallback = new CustomScrollingLayoutCallback();
WearableLinearLayoutManager layoutManager = new WearableLinearLayoutManager(this);
if (this.getResources().getConfiguration().isScreenRound()) {
layoutManager.setLayoutCallback(customScrollingLayoutCallback);
}
WearableRecyclerView listView = findViewById(R.id.action_list);
boolean isScreenRound = this.getResources().getConfiguration().isScreenRound();
if (isScreenRound) {
layoutManager.setLayoutCallback(customScrollingLayoutCallback);
listView.setEdgeItemsCenteringEnabled(true);
} else {
// Bug in androidx.wear:wear:1.2.0
// WearableRecyclerView setEdgeItemsCenteringEnabled requires fix for square screen
listView.setPadding(0, 50, 0, 0);
}
listView.setHasFixedSize(true);
listView.setEdgeItemsCenteringEnabled(true);
listView.setLayoutManager(layoutManager);
listView.setAdapter(new MenuAdapter(elements, v -> {
String tag = (String) v.itemView.getTag();
@ -53,16 +60,30 @@ public abstract class MenuListActivity extends Activity {
}));
}
private class MenuAdapter extends RecyclerView.Adapter<MenuAdapter.ItemViewHolder> {
private void setTitleBasedOnScreenShape(String title) {
CurvedTextView titleViewCurved = findViewById(R.id.title_curved);
TextView titleView = findViewById(R.id.title);
if (this.getResources().getConfiguration().isScreenRound()) {
titleViewCurved.setText(title);
titleViewCurved.setVisibility(View.VISIBLE);
titleView.setVisibility((View.GONE));
} else {
titleView.setText(title);
titleView.setVisibility(View.VISIBLE);
titleViewCurved.setVisibility((View.GONE));
}
}
private static class MenuAdapter extends RecyclerView.Adapter<MenuAdapter.ItemViewHolder> {
private final List<MenuItem> mDataset;
private AdapterCallback callback;
private final AdapterCallback callback;
public MenuAdapter(List<MenuItem> dataset, AdapterCallback callback) {
mDataset = dataset;
this.callback = callback;
}
public class ItemViewHolder extends RecyclerView.ViewHolder {
public static class ItemViewHolder extends RecyclerView.ViewHolder {
protected final RelativeLayout menuContainer;
protected final TextView actionItem;
protected final ImageView actionIcon;
@ -78,9 +99,8 @@ public abstract class MenuListActivity extends Activity {
@Override
public ItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item, parent, false);
ItemViewHolder recyclerViewHolder = new ItemViewHolder(view);
return recyclerViewHolder;
return new ItemViewHolder(view);
}
@Override
@ -89,9 +109,7 @@ public abstract class MenuListActivity extends Activity {
holder.actionItem.setText(item.actionItem);
holder.actionIcon.setImageResource(item.actionIcon);
holder.itemView.setTag(item.actionItem);
holder.menuContainer.setOnClickListener(v -> {
callback.onItemClicked(holder);
});
holder.menuContainer.setOnClickListener(v -> callback.onItemClicked(holder));
}
@Override
@ -100,19 +118,19 @@ public abstract class MenuListActivity extends Activity {
}
}
protected class MenuItem {
protected static class MenuItem {
public MenuItem(int actionIcon, String actionItem) {
this.actionIcon = actionIcon;
this.actionItem = actionItem;
}
public int actionIcon;
public String actionItem;
}
public class CustomScrollingLayoutCallback extends WearableLinearLayoutManager.LayoutCallback {
public static class CustomScrollingLayoutCallback extends WearableLinearLayoutManager.LayoutCallback {
// How much should we scale the icon at most.
private static final float MAX_ICON_PROGRESS = 0.65f;
private float progressToCenter;
@Override
public void onLayoutFinished(View child, RecyclerView parent) {
@ -121,7 +139,7 @@ public abstract class MenuListActivity extends Activity {
float yRelativeToCenterOffset = (child.getY() / parent.getHeight()) + centerOffset;
// Normalize for center
progressToCenter = Math.abs(0.5f - yRelativeToCenterOffset);
float progressToCenter = Math.abs(0.5f - yRelativeToCenterOffset);
// Adjust to the maximum scale
progressToCenter = Math.min(progressToCenter, MAX_ICON_PROGRESS);

File diff suppressed because one or more lines are too long

View file

@ -5,7 +5,7 @@
android:viewportWidth="30">
<path
android:pathData="M 15 0 c -8 0 -15 7 -15 15 c 0 8 7 15 15 15 s 15 -7 15 -15 C 30 7 23 0 15 0"
android:fillColor="@color/green"/>
android:fillColor="@color/colorCalculatorButton"/>
<path android:fillColor="@android:color/white" android:pathData="M 20.625 18.345 h -4.083 c -0.063 0 -0.113 0.051 -0.113 0.113 v 1.292 c 0 0.063 0.051 0.113 0.113 0.113 h 4.083 c 0.063 0 0.113 -0.051 0.113 -0.113 v -1.292 C 20.738 18.396 20.688 18.345 20.625 18.345 z"/>
<path android:fillColor="@android:color/white" android:pathData="M 19.343 17.036 c 0 -0.063 -0.051 -0.113 -0.113 -0.113 h -1.292 c -0.063 0 -0.113 0.051 -0.113 0.113 v 1.016 h 1.519 V 17.036 z"/>
<path android:fillColor="@android:color/white" android:pathData="M 17.824 21.119 c 0 0.063 0.051 0.113 0.113 0.113 h 1.292 c 0.063 0 0.113 -0.051 0.113 -0.113 v -1.017 h -1.519 V 21.119 z"/>

View file

@ -5,7 +5,7 @@
android:viewportWidth="30">
<path
android:pathData="M 15 0 c -8 0 -15 7 -15 15 c 0 8 7 15 15 15 s 15 -7 15 -15 C 30 7 23 0 15 0"
android:fillColor="@color/yellow_700"/>
android:fillColor="@color/colorPrimeButton"/>
<path
android:pathData="M 25.3461 13.8038 h -2.189 c -0.0594 -0.8063 -0.7249 -1.4443 -1.5466 -1.4443 h -2.5894 c -0.8217 0 -1.4872 0.638 -1.5466 1.4443 h -2.189 c -0.4268 0 -0.7656 0.297 -0.8481 0.6842 c -1.452 -0.0231 -2.4486 -0.6105 -3.2296 -1.0989 c -0.77 -0.4807 -1.4344 -0.8954 -2.2055 -0.4774 c -1.3222 0.7194 -0.9273 2.2264 -0.6094 3.4386 c 0.2112 0.8041 0.429 1.6379 0.1078 2.0196 c -0.6633 0.7898 -2.4332 0.3036 -3.0591 0.0495 c -0.1573 -0.0627 -0.341 0.0121 -0.4059 0.1716 c -0.0649 0.1606 0.0121 0.3421 0.1716 0.4059 c 0.0671 0.0264 1.0681 0.4268 2.0823 0.4268 c 0.6314 0 1.2683 -0.1562 1.6874 -0.6523 c 0.5302 -0.6281 0.2816 -1.5763 0.0187 -2.5795 c -0.3553 -1.3574 -0.5269 -2.2814 0.3036 -2.7335 c 0.4312 -0.2343 0.8382 -0.0033 1.5774 0.4587 c 0.8305 0.5181 1.9426 1.2353 3.6949 1.2056 C 14.7311 15.3449 14.9841 15.5 15.2866 15.5 h 4.8466 v 6.3481 l 0.3663 -0.9394 V 15.5 h 4.8466 c 0.4873 0 0.8822 -0.3795 0.8822 -0.8481 S 25.8334 13.8038 25.3461 13.8038 z"
android:fillColor="@android:color/white"/>

View file

@ -5,7 +5,7 @@
android:viewportWidth="30">
<path
android:pathData="M 15 0 c -8 0 -15 7 -15 15 c 0 8 7 15 15 15 s 15 -7 15 -15 C 30 7 23 0 15 0"
android:fillColor="@color/yellow_700"/>
android:fillColor="@color/colorCarbsButton"/>
<path
android:pathData="m 7.5141 22.7634 c -0.2986 -0.3299 -0.2903 -0.3554 0.2922 -0.8979 c 0.3297 -0.3071 0.6383 -0.6738 0.6858 -0.8149 c 0.0475 -0.141 -0.1921 -0.7568 -0.5325 -1.3682 c -0.5896 -1.0592 -0.6188 -1.1883 -0.6188 -2.7364 c 0 -1.4789 0.0452 -1.7064 0.5039 -2.5344 c 0.6105 -1.1021 1.5893 -2.0253 1.8601 -1.7544 c 0.3483 0.3483 0.5587 0.1819 1.0118 -0.7992 c 0.7093 -1.5363 1.3211 -2.1695 2.1021 -2.1755 c 0.6115 -0.0053 0.664 -0.0481 0.8942 -0.7375 c 0.1359 -0.407 0.6179 -1.129 1.0849 -1.6248 l 0.8403 -0.8923 l 0.6745 0.7614 c 0.371 0.4188 0.8112 1.0152 0.9782 1.3255 c 0.167 0.3102 0.4016 0.564 0.5211 0.564 c 0.1196 0 0.6601 -0.3433 1.201 -0.7628 c 1.3668 -1.06 2.5215 -1.4125 4.2988 -1.3124 c 0.396 0.0213 0.4054 0.0564 0.325 1.1801 c -0.1013 1.4152 -0.5647 2.5089 -1.4872 3.5097 c -0.3846 0.4173 -0.6993 0.8439 -0.6993 0.9481 c 0 0.1043 0.4041 0.4545 0.8979 0.7784 c 0.4938 0.324 1.115 0.7698 1.3803 0.9908 l 0.4824 0.4017 l -0.6535 0.6627 c -0.3594 0.3645 -1.0768 0.8572 -1.5941 1.095 c -1.067 0.4903 -1.2364 0.6671 -1.0225 1.0669 c 0.1947 0.3638 -0.7979 1.3504 -1.885 1.8734 c -1.2965 0.6237 -1.2856 0.6136 -1.2323 1.1529 c 0.0403 0.4072 -0.0783 0.6225 -0.5908 1.0725 c -0.3527 0.3097 -1.0566 0.7532 -1.5643 0.9856 c -0.8099 0.3708 -1.0994 0.4134 -2.3604 0.3472 c -1.2415 -0.0652 -1.6009 -0.1609 -2.6389 -0.7031 l -1.2016 -0.6277 l -0.7405 0.6826 c -0.4073 0.3754 -0.7777 0.6826 -0.8232 0.6826 c -0.0455 0 -0.2209 -0.1527 -0.3899 -0.3395 z M 15.4237 21.7239 c 0.4009 -0.1726 0.7794 -0.4454 0.8412 -0.6064 c 0.2746 -0.7156 -2.055 -1.7385 -3.5062 -1.5396 c -0.9984 0.137 -2.254 0.864 -2.254 1.3054 c 0 0.6595 2.2346 1.4303 3.5915 1.2388 c 0.3292 -0.0466 0.9266 -0.2256 1.3275 -0.3982 z M 10.2885 19.1385 c 0.4061 -0.6143 0.472 -0.8854 0.4678 -1.924 c -0.0063 -1.5335 -0.6186 -2.9192 -1.29 -2.9192 c -0.9294 0 -1.5377 2.5971 -0.9856 4.2073 c 0.5253 1.5321 1.0851 1.729 1.8078 0.6359 z M 17.6886 18.9823 c 0.9945 -0.2133 1.8196 -0.8183 1.6651 -1.2209 c -0.1975 -0.5147 -1.9131 -1.1915 -3.0203 -1.1915 c -1.0977 0 -2.2833 0.5008 -2.6492 1.119 c -0.2247 0.3797 0.184 0.7184 1.4172 1.1741 c 0.9392 0.3471 1.421 0.3693 2.5871 0.1192 z M 13.0604 16.5752 c 0.9308 -0.999 1.1002 -2.9508 0.3789 -4.3646 c -0.6882 -1.3489 -1.1359 -1.381 -1.7439 -0.125 c -0.6476 1.3377 -0.4749 3.0666 0.4469 4.4758 c 0.314 0.48 0.4815 0.4826 0.9182 0.0133 z M 21.5786 15.6696 c 0.9454 -0.4402 1.0921 -0.7235 0.5986 -1.1562 c -1.3166 -1.1544 -3.6084 -1.2763 -5.0452 -0.2683 c -0.7385 0.5181 -0.6049 0.8802 0.5131 1.3905 c 1.3181 0.6016 2.689 0.6135 3.9336 0.034 z M 16.5457 12.8415 c 0.3972 -0.774 0.4714 -1.1072 0.419 -1.8813 c -0.0691 -1.022 -0.7038 -2.4932 -1.1873 -2.752 c -0.4231 -0.2264 -0.9486 0.3947 -1.2703 1.5014 c -0.3046 1.0479 -0.1404 2.3277 0.4461 3.4774 c 0.5043 0.9885 0.9586 0.8898 1.5925 -0.3456 z M 19.9966 11.9951 c 1.0135 -0.4396 1.7154 -1.1061 2.21 -2.0986 c 0.8101 -1.6257 0.5226 -2.1729 -0.9168 -1.7455 c -1.5157 0.4501 -3.1317 2.3134 -3.1317 3.6109 c 0 0.7925 0.4247 0.8464 1.8385 0.2333 z"
android:strokeWidth="1"

View file

@ -5,7 +5,7 @@
android:viewportWidth="30">
<path
android:pathData="M 15 0 c -8 0 -15 7 -15 15 c 0 8 7 15 15 15 s 15 -7 15 -15 C 30 7 23 0 15 0"
android:fillColor="@color/purple_500"/>
android:fillColor="@color/colorTemptButton"/>
<path
android:pathData="M 24.569 15.709 h -4.772 c -0.392 0 -0.709 -0.317 -0.709 -0.709 V 12.177 H 10.927 l 0 2.823 c 0 0.392 -0.317 0.709 -0.708 0.709 H 5.431 c -0.392 0 -0.708 -0.317 -0.708 -0.709 s 0.317 -0.708 0.708 -0.708 H 9.51 l 0 -2.823 c 0 -0.392 0.317 -0.708 0.708 -0.708 h 9.578 c 0.392 0 0.709 0.317 0.709 0.708 v 2.823 h 4.063 c 0.392 0 0.709 0.317 0.709 0.708 S 24.961 15.709 24.569 15.709 z"
android:fillColor="@android:color/white"/>

View file

@ -1,11 +1,11 @@
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/menu_container"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/menu_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="8dp"
android:background="@drawable/menu_item_layout_bg"
android:paddingTop="8dp"
android:background="@drawable/menu_item_layout_bg">
android:paddingBottom="8dp">
<ImageView
android:id="@+id/menuItemIcon"
@ -25,13 +25,13 @@
android:layout_marginStart="10dp"
android:layout_toEndOf="@+id/menuItemIcon"
android:layout_toRightOf="@+id/menuItemIcon"
android:autoSizeMaxTextSize="32sp"
android:autoSizeMinTextSize="12sp"
android:autoSizeStepGranularity="2sp"
android:autoSizeTextType="uniform"
android:text="action item"
android:textColor="@color/dark_statusView"
android:textSize="20sp"
android:autoSizeTextType="uniform"
android:autoSizeMinTextSize="12sp"
android:autoSizeMaxTextSize="32sp"
android:autoSizeStepGranularity="2sp"
android:textStyle="bold" />
</RelativeLayout>

View file

@ -1,27 +1,41 @@
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
android:layout_height="match_parent">
<androidx.wear.widget.WearableRecyclerView
xmlns:android="http://schemas.android.com/apk/res/android"
<androidx.wear.widget.WearableRecyclerView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/action_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="vertical" >
android:scrollbars="vertical">
<requestFocus />
</androidx.wear.widget.WearableRecyclerView>
<TextView
android:id="@+id/title"
<LinearLayout
android:layout_width="match_parent"
android:layout_height="26dp"
android:gravity="center"
android:layout_height="28dp"
android:background="@color/titleHeader">
<TextView
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="26dp"
android:autoSizeMaxTextSize="18sp"
android:autoSizeMinTextSize="12sp"
android:autoSizeTextType="uniform"
android:gravity="center"
android:text="Title"
android:textSize="18sp" />
</LinearLayout>
<androidx.wear.widget.CurvedTextView
android:id="@+id/title_curved"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Title"
android:textSize="18sp"
android:autoSizeTextType="uniform"
android:autoSizeMinTextSize="12sp"
android:autoSizeMaxTextSize="18sp"
android:background="#D9000000"/>
android:visibility="gone" />
</FrameLayout>

View file

@ -1,14 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
android:layout_height="match_parent">
<androidx.wear.widget.CurvedTextView
android:id="@+id/title_curved"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Title"
android:textSize="18sp"
android:visibility="gone" />
<TextView
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="26dp"
android:autoSizeMaxTextSize="18sp"
android:autoSizeMinTextSize="12sp"
android:autoSizeTextType="uniform"
android:gravity="center"
android:textSize="18sp"/>
android:text="Title"
android:textSize="18sp" />
<android.support.wearable.view.GridViewPager
android:id="@+id/pager"
@ -20,7 +32,6 @@
android:id="@+id/page_indicator"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal|bottom">
</android.support.wearable.view.DotsPageIndicator>
android:layout_gravity="center_horizontal|bottom" />
</FrameLayout>
</FrameLayout>

View file

@ -1,11 +1,11 @@
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/menu_container"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/menu_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="8dp"
android:background="@drawable/menu_item_layout_bg"
android:paddingTop="8dp"
android:background="@drawable/menu_item_layout_bg">
android:paddingBottom="8dp">
<ImageView
android:id="@+id/menuItemIcon"

View file

@ -2,6 +2,7 @@
<resources>
<color name="cardObjectiveText">#779ECB</color>
<color name="titleHeader">#D9000000</color>
<!-- light colors -->
@ -38,10 +39,12 @@
<color name="basal_light_lowres">@color/grey_300</color>
<color name="basal_dark_lowres">@color/grey_500</color>
<!-- menu colors -->
<color name="colorCalculatorButton">#67e86a</color>
<color name="colorCarbsButton">#ffae01</color>
<color name="colorInsulinButton">#67dfe8</color>
<color name="colorTemptButton">#CF8BFE</color>
<color name="colorPrimeButton">#FBC02D</color>
<!-- Material Design - Color Palette -->
<!-- https://designguidelines.withgoogle.com/wearos/style/color.html#color-dark-color-palette-for-wear-os -->