diff options
author | TreeHugger Robot <treehugger-gerrit@google.com> | 2017-12-16 00:13:27 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2017-12-16 00:13:27 +0000 |
commit | bdf43521feaf1d2a6ce579e48cd2d7efeb00bbd6 (patch) | |
tree | a6411d97708d27cbbdb6be08ca6ffc12113b545a /wearable | |
parent | cba890b6251f0339c6e15b6eff64fe7df3c848a2 (diff) | |
parent | 0f0212e13e8dc55f1c824abb14901c31d94ee5b4 (diff) | |
download | android-bdf43521feaf1d2a6ce579e48cd2d7efeb00bbd6.tar.gz |
Merge "Updates deprecated components, adds README (via template file), and updates notifications for O channels." into oc-mr1-dev
Diffstat (limited to 'wearable')
30 files changed, 405 insertions, 105 deletions
diff --git a/wearable/wear/WearAccessibilityApp/Wearable/build.gradle b/wearable/wear/WearAccessibilityApp/Wearable/build.gradle index c1f3a89c..d99e59da 100644 --- a/wearable/wear/WearAccessibilityApp/Wearable/build.gradle +++ b/wearable/wear/WearAccessibilityApp/Wearable/build.gradle @@ -8,7 +8,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:3.0.0' + classpath 'com.android.tools.build:gradle:3.0.1' } } @@ -57,7 +57,7 @@ android { versionCode 1 versionName "1.0" - minSdkVersion 23 + minSdkVersion 24 targetSdkVersion 26 diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/AccessibilityActivity.java b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/AccessibilityActivity.java index a7e1fb62..d982d123 100644 --- a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/AccessibilityActivity.java +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/AccessibilityActivity.java @@ -15,21 +15,24 @@ */ package com.example.android.wearable.wear.wearaccessibilityapp; +import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.provider.Settings; -import android.support.wearable.activity.WearableActivity; +import android.support.wear.ambient.AmbientMode; import android.view.View; import android.view.View.OnClickListener; import android.widget.ImageView; import android.widget.TextView; -public class AccessibilityActivity extends WearableActivity { +public class AccessibilityActivity extends Activity implements AmbientMode.AmbientCallbackProvider { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_accessibility); + AmbientMode.attachAmbientSupport(this); + ImageView accessibilityImage = findViewById(R.id.icon_image_view); accessibilityImage.setImageDrawable(getDrawable(R.drawable.settings_circle)); @@ -46,4 +49,11 @@ public class AccessibilityActivity extends WearableActivity { } }); } + + @Override + public AmbientMode.AmbientCallback getAmbientCallback() { + return new MyAmbientCallback(); + } + + private class MyAmbientCallback extends AmbientMode.AmbientCallback {} } diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/AppItem.java b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/AppItem.java index 9ec2ac49..ee1002bf 100644 --- a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/AppItem.java +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/AppItem.java @@ -15,9 +15,9 @@ */ package com.example.android.wearable.wear.wearaccessibilityapp; +import android.app.Activity; import android.content.Context; import android.content.Intent; -import android.support.wearable.activity.WearableActivity; public class AppItem { private final String mItemName; @@ -25,15 +25,14 @@ public class AppItem { private final int mViewType; private final Class mClass; - public AppItem( - String itemName, int imageId, int viewType, Class<? extends WearableActivity> clazz) { + public AppItem(String itemName, int imageId, int viewType, Class<? extends Activity> clazz) { mItemName = itemName; mImageId = imageId; mViewType = viewType; mClass = clazz; } - public AppItem(String itemName, int imageId, Class<? extends WearableActivity> clazz) { + public AppItem(String itemName, int imageId, Class<? extends Activity> clazz) { mItemName = itemName; mImageId = imageId; mViewType = SampleAppConstants.NORMAL; diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/CircledImageViewPreference.java b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/CircledImageViewPreference.java index d78b7037..f06ddb8c 100644 --- a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/CircledImageViewPreference.java +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/CircledImageViewPreference.java @@ -73,9 +73,11 @@ public class CircledImageViewPreference extends Preference { public void setStartCircledImageView() { mCircledImageText.setText(R.string.start); + mCircledImage.setImageResource(R.drawable.start); mCircledImage.setCircleBorderColor(mColorPrimaryDark); mCircledImage.setProgress(1); + mIsLoading = false; } diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/ControlsActivity.java b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/ControlsActivity.java index c056f16e..40c7a3ad 100644 --- a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/ControlsActivity.java +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/ControlsActivity.java @@ -15,15 +15,19 @@ */ package com.example.android.wearable.wear.wearaccessibilityapp; +import android.app.Activity; import android.os.Bundle; import android.preference.PreferenceFragment; -import android.support.wearable.activity.WearableActivity; +import android.support.wear.ambient.AmbientMode; -public class ControlsActivity extends WearableActivity { +public class ControlsActivity extends Activity implements AmbientMode.AmbientCallbackProvider { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + + AmbientMode.attachAmbientSupport(this); + // Display the fragment as the main content. getFragmentManager() .beginTransaction() @@ -40,4 +44,11 @@ public class ControlsActivity extends WearableActivity { addPreferencesFromResource(R.xml.prefs_controls); } } + + @Override + public AmbientMode.AmbientCallback getAmbientCallback() { + return new MyAmbientCallback(); + } + + private class MyAmbientCallback extends AmbientMode.AmbientCallback {} } diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/DialogsActivity.java b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/DialogsActivity.java index 0c394008..cc0d0fba 100644 --- a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/DialogsActivity.java +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/DialogsActivity.java @@ -15,12 +15,13 @@ */ package com.example.android.wearable.wear.wearaccessibilityapp; +import android.app.Activity; import android.app.Dialog; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.content.Intent; import android.os.Bundle; -import android.support.wearable.activity.WearableActivity; +import android.support.wear.ambient.AmbientMode; import android.support.wearable.view.AcceptDenyDialog; import android.support.wearable.view.WearableDialogHelper.DialogBuilder; import android.view.LayoutInflater; @@ -33,7 +34,7 @@ import java.util.ArrayList; import java.util.List; import java.util.function.Supplier; -public class DialogsActivity extends WearableActivity { +public class DialogsActivity extends Activity implements AmbientMode.AmbientCallbackProvider { private List<DialogsItem> mItems; public View mView; @@ -43,6 +44,8 @@ public class DialogsActivity extends WearableActivity { super.onCreate(savedInstanceState); setContentView(R.layout.activity_dialogs); + AmbientMode.attachAmbientSupport(this); + // Supplier objects Supplier<Dialog> twoActionDialog = new Supplier<Dialog>() { @@ -178,4 +181,11 @@ public class DialogsActivity extends WearableActivity { } }); } + + @Override + public AmbientMode.AmbientCallback getAmbientCallback() { + return new MyAmbientCallback(); + } + + private class MyAmbientCallback extends AmbientMode.AmbientCallback {} } diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/FullScreenActivity.java b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/FullScreenActivity.java index 1ef6ed1e..0145288e 100644 --- a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/FullScreenActivity.java +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/FullScreenActivity.java @@ -15,14 +15,25 @@ */ package com.example.android.wearable.wear.wearaccessibilityapp; +import android.app.Activity; import android.os.Bundle; -import android.support.wearable.activity.WearableActivity; +import android.support.wear.ambient.AmbientMode; -public class FullScreenActivity extends WearableActivity { +public class FullScreenActivity extends Activity implements AmbientMode.AmbientCallbackProvider { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + + AmbientMode.attachAmbientSupport(this); + setContentView(R.layout.activity_fullscreen_progress); } + + @Override + public AmbientMode.AmbientCallback getAmbientCallback() { + return new MyAmbientCallback(); + } + + private class MyAmbientCallback extends AmbientMode.AmbientCallback {} } diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/ImagesActivity.java b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/ImagesActivity.java index 5f1e8770..2291fbc4 100644 --- a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/ImagesActivity.java +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/ImagesActivity.java @@ -15,14 +15,15 @@ */ package com.example.android.wearable.wear.wearaccessibilityapp; +import android.app.Activity; import android.graphics.drawable.Animatable2.AnimationCallback; import android.graphics.drawable.AnimatedVectorDrawable; import android.graphics.drawable.Drawable; import android.os.Bundle; -import android.support.wearable.activity.WearableActivity; +import android.support.wear.ambient.AmbientMode; import android.widget.ImageView; -public class ImagesActivity extends WearableActivity { +public class ImagesActivity extends Activity implements AmbientMode.AmbientCallbackProvider { private AnimatedVectorDrawable mAnimatedVectorDrawableSwipe; private AnimatedVectorDrawable mAnimatedVectorDrawableTap; private AnimationCallback mAnimationCallback; @@ -32,6 +33,8 @@ public class ImagesActivity extends WearableActivity { super.onCreate(savedInstanceState); setContentView(R.layout.activity_images); + AmbientMode.attachAmbientSupport(this); + // Used to repeat animation from the beginning. mAnimationCallback = new AnimationCallback() { @@ -61,4 +64,11 @@ public class ImagesActivity extends WearableActivity { mAnimatedVectorDrawableSwipe.unregisterAnimationCallback(mAnimationCallback); mAnimatedVectorDrawableTap.unregisterAnimationCallback(mAnimationCallback); } + + @Override + public AmbientMode.AmbientCallback getAmbientCallback() { + return new MyAmbientCallback(); + } + + private class MyAmbientCallback extends AmbientMode.AmbientCallback {} } diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/InLineActivity.java b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/InLineActivity.java index f5652f36..723d57cb 100644 --- a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/InLineActivity.java +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/InLineActivity.java @@ -15,19 +15,23 @@ */ package com.example.android.wearable.wear.wearaccessibilityapp; +import android.app.Activity; import android.os.Bundle; import android.preference.Preference; import android.preference.Preference.OnPreferenceChangeListener; import android.preference.PreferenceFragment; import android.preference.PreferenceScreen; import android.preference.SwitchPreference; -import android.support.wearable.activity.WearableActivity; +import android.support.wear.ambient.AmbientMode; -public class InLineActivity extends WearableActivity { +public class InLineActivity extends Activity implements AmbientMode.AmbientCallbackProvider { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + + AmbientMode.attachAmbientSupport(this); + getFragmentManager() .beginTransaction() .replace(android.R.id.content, new InLinePrefFragment()) @@ -81,4 +85,11 @@ public class InLineActivity extends WearableActivity { }); } } + + @Override + public AmbientMode.AmbientCallback getAmbientCallback() { + return new MyAmbientCallback(); + } + + private class MyAmbientCallback extends AmbientMode.AmbientCallback {} } diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/ListOfGraphicsActivity.java b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/ListOfGraphicsActivity.java index 30ba972e..1159ebc5 100644 --- a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/ListOfGraphicsActivity.java +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/ListOfGraphicsActivity.java @@ -15,8 +15,9 @@ */ package com.example.android.wearable.wear.wearaccessibilityapp; +import android.app.Activity; import android.os.Bundle; -import android.support.wearable.activity.WearableActivity; +import android.support.wear.ambient.AmbientMode; import android.view.LayoutInflater; import android.view.View; import android.widget.AdapterView; @@ -26,7 +27,8 @@ import android.widget.TextView; import java.util.ArrayList; import java.util.List; -public class ListOfGraphicsActivity extends WearableActivity { +public class ListOfGraphicsActivity extends Activity + implements AmbientMode.AmbientCallbackProvider { private List<AppItem> mItems; @Override @@ -34,6 +36,8 @@ public class ListOfGraphicsActivity extends WearableActivity { super.onCreate(savedInstanceState); setContentView(R.layout.activity_list_of_graphics); + AmbientMode.attachAmbientSupport(this); + // Store all data in a list for adapter to use. mItems = new ArrayList<AppItem>(); mItems.add( @@ -73,4 +77,11 @@ public class ListOfGraphicsActivity extends WearableActivity { } }); } + + @Override + public AmbientMode.AmbientCallback getAmbientCallback() { + return new MyAmbientCallback(); + } + + private class MyAmbientCallback extends AmbientMode.AmbientCallback {} } diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/ListsActivity.java b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/ListsActivity.java index bc545db7..0ef82dc1 100644 --- a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/ListsActivity.java +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/ListsActivity.java @@ -15,8 +15,9 @@ */ package com.example.android.wearable.wear.wearaccessibilityapp; +import android.app.Activity; import android.os.Bundle; -import android.support.wearable.activity.WearableActivity; +import android.support.wear.ambient.AmbientMode; import android.view.LayoutInflater; import android.view.View; import android.widget.AdapterView; @@ -26,7 +27,7 @@ import android.widget.TextView; import java.util.ArrayList; import java.util.List; -public class ListsActivity extends WearableActivity { +public class ListsActivity extends Activity implements AmbientMode.AmbientCallbackProvider { private List<ListsItem> mItems; @Override @@ -34,6 +35,8 @@ public class ListsActivity extends WearableActivity { super.onCreate(savedInstanceState); setContentView(R.layout.activity_lists); + AmbientMode.attachAmbientSupport(this); + // Create a list of items for adapter to display. mItems = new ArrayList<>(); mItems.add(new ListsItem(R.string.a_long_list, LongListActivity.class)); @@ -65,4 +68,11 @@ public class ListsActivity extends WearableActivity { } }); } + + @Override + public AmbientMode.AmbientCallback getAmbientCallback() { + return new MyAmbientCallback(); + } + + private class MyAmbientCallback extends AmbientMode.AmbientCallback {} } diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/ListsItem.java b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/ListsItem.java index 6c2cece0..42e84642 100644 --- a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/ListsItem.java +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/ListsItem.java @@ -15,15 +15,15 @@ */ package com.example.android.wearable.wear.wearaccessibilityapp; +import android.app.Activity; import android.content.Context; import android.content.Intent; -import android.support.wearable.activity.WearableActivity; public class ListsItem implements Item { private final int mItemId; private final Class mClass; - public ListsItem(int itemId, Class<? extends WearableActivity> clazz) { + public ListsItem(int itemId, Class<? extends Activity> clazz) { mItemId = itemId; mClass = clazz; } diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/LongListActivity.java b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/LongListActivity.java index 14ad7641..2d107af4 100644 --- a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/LongListActivity.java +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/LongListActivity.java @@ -15,13 +15,14 @@ */ package com.example.android.wearable.wear.wearaccessibilityapp; +import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; -import android.support.wearable.activity.WearableActivity; -import android.support.wearable.view.WearableRecyclerView; -import android.support.wearable.view.drawer.WearableActionDrawer; +import android.support.wear.ambient.AmbientMode; +import android.support.wear.widget.WearableRecyclerView; +import android.support.wear.widget.drawer.WearableActionDrawerView; import android.view.View; import com.example.android.wearable.wear.wearaccessibilityapp.LongListRecyclerViewAdapter.SwitchChangeListener; @@ -29,7 +30,8 @@ import com.example.android.wearable.wear.wearaccessibilityapp.LongListRecyclerVi import java.util.ArrayList; import java.util.List; -public class LongListActivity extends WearableActivity { +public class LongListActivity extends Activity implements AmbientMode.AmbientCallbackProvider { + private List<AppItem> mItems; private LongListRecyclerViewAdapter mAdapter; private Handler mHandler; @@ -42,6 +44,8 @@ public class LongListActivity extends WearableActivity { super.onCreate(savedInstanceState); setContentView(R.layout.activity_long_list); + AmbientMode.attachAmbientSupport(this); + mHandler = new Handler(); // List of items to display within recyclerView (used by adapter). @@ -65,7 +69,7 @@ public class LongListActivity extends WearableActivity { new SwitchChangeListener() { @Override public void onChange(boolean switchOn) { - WearableActionDrawer wearableActionDrawer = + WearableActionDrawerView wearableActionDrawer = findViewById(R.id.action_drawer_long_list); if (switchOn) { @@ -79,6 +83,12 @@ public class LongListActivity extends WearableActivity { }); WearableRecyclerView recyclerView = findViewById(R.id.recycler_view_long_list); + // Aligns the first and last items on the list vertically centered on the screen. + recyclerView.setEdgeItemsCenteringEnabled(true); + recyclerView.setLayoutManager(new LinearLayoutManager(this)); + recyclerView.setHasFixedSize(false); + + recyclerView.setAdapter(mAdapter); // Set adapter to the recyclerView. // Uncomment if you want the action drawer to show while scrolling down. @@ -177,4 +187,11 @@ public class LongListActivity extends WearableActivity { mItems.add(new AppItem(null, 0, SampleAppConstants.HEADER_FOOTER, null)); // add footer mAdapter.notifyItemInserted(mItems.size() - 1); } + + @Override + public AmbientMode.AmbientCallback getAmbientCallback() { + return new MyAmbientCallback(); + } + + private class MyAmbientCallback extends AmbientMode.AmbientCallback {} } diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/MainActivity.java b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/MainActivity.java index d5fc7eff..a1f1d371 100644 --- a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/MainActivity.java +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/MainActivity.java @@ -15,20 +15,24 @@ */ package com.example.android.wearable.wear.wearaccessibilityapp; +import android.app.Activity; import android.os.Bundle; -import android.support.wearable.activity.WearableActivity; -import android.support.wearable.view.WearableRecyclerView; +import android.support.wear.ambient.AmbientMode; +import android.support.wear.widget.WearableLinearLayoutManager; +import android.support.wear.widget.WearableRecyclerView; import java.util.ArrayList; import java.util.List; -public class MainActivity extends WearableActivity { +public class MainActivity extends Activity implements AmbientMode.AmbientCallbackProvider { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); + AmbientMode.attachAmbientSupport(this); + // Menu items List<AppItem> items = new ArrayList<AppItem>(); items.add( @@ -63,8 +67,20 @@ public class MainActivity extends WearableActivity { MenuRecyclerViewAdapter appListAdapter = new MenuRecyclerViewAdapter(this, items); WearableRecyclerView recyclerView = findViewById(R.id.main_recycler_view); + + // Customizes scrolling so items farther away form center are smaller. + ScalingScrollLayoutCallback scalingScrollLayoutCallback = new ScalingScrollLayoutCallback(); + recyclerView.setLayoutManager( + new WearableLinearLayoutManager(this, scalingScrollLayoutCallback)); + + recyclerView.setEdgeItemsCenteringEnabled(true); recyclerView.setAdapter(appListAdapter); - recyclerView.setLayoutManager(new MyLauncherChildLayoutManager(this)); // For curved layout. - recyclerView.setCenterEdgeItems(true); } + + @Override + public AmbientMode.AmbientCallback getAmbientCallback() { + return new MyAmbientCallback(); + } + + private class MyAmbientCallback extends AmbientMode.AmbientCallback {} } diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/MessagingMainActivity.java b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/MessagingMainActivity.java index a33cad99..b3d64644 100644 --- a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/MessagingMainActivity.java +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/MessagingMainActivity.java @@ -19,22 +19,32 @@ import android.app.Activity; import android.app.NotificationManager; import android.content.Context; import android.os.Bundle; +import android.support.wear.ambient.AmbientMode; /** * Template class meant to include functionality for your Messaging App. (This project's main focus * is on Notification Styles.) */ -public class MessagingMainActivity extends Activity { +public class MessagingMainActivity extends Activity implements AmbientMode.AmbientCallbackProvider { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_messaging_main); + AmbientMode.attachAmbientSupport(this); + // Cancel Notification NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.cancel(NotificationsActivity.NOTIFICATION_ID); } + + @Override + public AmbientMode.AmbientCallback getAmbientCallback() { + return new MyAmbientCallback(); + } + + private class MyAmbientCallback extends AmbientMode.AmbientCallback {} } diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/MockDatabase.java b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/MockDatabase.java index f5b8f0db..421a7195 100644 --- a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/MockDatabase.java +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/MockDatabase.java @@ -15,6 +15,8 @@ */ package com.example.android.wearable.wear.wearaccessibilityapp; +import android.app.NotificationManager; +import android.support.v4.app.NotificationCompat; import android.support.v4.app.NotificationCompat.MessagingStyle; import java.util.ArrayList; @@ -32,17 +34,26 @@ public final class MockDatabase { private static MessagingStyleCommsAppData sInstance = null; // Standard notification values - private String mContentTitle; - private String mContentText; + protected String mContentTitle; + protected String mContentText; + protected int mPriority; // Style notification values - private ArrayList<MessagingStyle.Message> mMessages; + protected ArrayList<MessagingStyle.Message> mMessages; // Basically, String of all mMessages - private String mFullConversation; + protected String mFullConversation; // Name preferred when replying to chat - private String mReplayName; - private int mNumberOfNewMessages; - private ArrayList<String> mParticipants; + protected String mReplayName; + protected int mNumberOfNewMessages; + protected ArrayList<String> mParticipants; + + // Notification channel values (O and above): + protected String mChannelId; + protected CharSequence mChannelName; + protected String mChannelDescription; + protected int mChannelImportance; + protected boolean mChannelEnableVibrate; + protected int mChannelLockscreenVisibility; public static MessagingStyleCommsAppData getInstance() { if (sInstance == null) { @@ -64,6 +75,7 @@ public final class MockDatabase { // Content for API <24 (M and below) devices mContentTitle = "2 Messages w/ Famous McFamously"; mContentText = "Dude! ... You know I am a Pesce-pescetarian. :P"; + mPriority = NotificationCompat.PRIORITY_HIGH; // Style notification values @@ -80,7 +92,7 @@ public final class MockDatabase { mMessages.add(new MessagingStyle.Message("Sounds good.", currentTime - 2000, "Famous")); mMessages.add(new MessagingStyle.Message("How about BBQ?", currentTime - 1000, null)); // Last two are the newest message (2) from friend - mMessages.add(new MessagingStyle.Message("Dude!", currentTime, "Famous")); + mMessages.add(new MessagingStyle.Message("Hey!", currentTime, "Famous")); mMessages.add( new MessagingStyle.Message( "You know I am a Pesce-pescetarian. :P", currentTime, "Famous")); @@ -91,7 +103,7 @@ public final class MockDatabase { + "Me: I don't know, dinner maybe?\n\n" + "Famous: Sounds good.\n\n" + "Me: How about BBQ?\n\n" - + "Famous: Dude!\n\n" + + "Famous: Hey!\n\n" + "Famous: You know I am a Pesce-pescetarian. :P\n\n"; mNumberOfNewMessages = 2; @@ -103,6 +115,16 @@ public final class MockDatabase { // the user(s) is starred as a favorite. mParticipants = new ArrayList<>(); mParticipants.add("Famous McFamously"); + + // Notification channel values (for devices targeting 26 and above): + mChannelId = "channel_messaging_1"; + // The user-visible name of the channel. + mChannelName = "Sample Messaging"; + // The user-visible description of the channel. + mChannelDescription = "Sample Messaging Notifications"; + mChannelImportance = NotificationManager.IMPORTANCE_MAX; + mChannelEnableVibrate = true; + mChannelLockscreenVisibility = NotificationCompat.VISIBILITY_PRIVATE; } public String getContentTitle() { @@ -133,6 +155,35 @@ public final class MockDatabase { return mParticipants; } + public int getPriority() { + return mPriority; + } + + // Channel values (O and above) get methods: + public String getChannelId() { + return mChannelId; + } + + public CharSequence getChannelName() { + return mChannelName; + } + + public String getChannelDescription() { + return mChannelDescription; + } + + public int getChannelImportance() { + return mChannelImportance; + } + + public boolean isChannelEnableVibrate() { + return mChannelEnableVibrate; + } + + public int getChannelLockscreenVisibility() { + return mChannelLockscreenVisibility; + } + @Override public String toString() { return getFullConversation(); diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/NotificationsActivity.java b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/NotificationsActivity.java index 2cf8bd75..accd1314 100644 --- a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/NotificationsActivity.java +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/NotificationsActivity.java @@ -15,10 +15,15 @@ */ package com.example.android.wearable.wear.wearaccessibilityapp; +import android.app.Activity; import android.app.Notification; +import android.app.NotificationChannel; +import android.app.NotificationManager; import android.app.PendingIntent; +import android.content.Context; import android.content.Intent; import android.graphics.BitmapFactory; +import android.os.Build; import android.os.Bundle; import android.preference.Preference; import android.preference.Preference.OnPreferenceChangeListener; @@ -29,16 +34,20 @@ import android.support.v4.app.NotificationCompat; import android.support.v4.app.NotificationCompat.MessagingStyle; import android.support.v4.app.NotificationManagerCompat; import android.support.v4.app.RemoteInput; -import android.support.wearable.activity.WearableActivity; +import android.support.v4.content.ContextCompat; +import android.support.wear.ambient.AmbientMode; import android.util.Log; -public class NotificationsActivity extends WearableActivity { +public class NotificationsActivity extends Activity implements AmbientMode.AmbientCallbackProvider { public static final int NOTIFICATION_ID = 888; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + + AmbientMode.attachAmbientSupport(this); + // Display the fragment as the main content. getFragmentManager() .beginTransaction() @@ -105,7 +114,7 @@ public class NotificationsActivity extends WearableActivity { new OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { - generateMessagingStyleNotification(); + generateMessagingStyleNotification(getContext()); return true; } }); @@ -130,21 +139,26 @@ public class NotificationsActivity extends WearableActivity { * If you wish to replicate the original experience of a bridged notification, please * review the generateBigTextStyleNotification() method above to see how. */ - private void generateMessagingStyleNotification() { + private void generateMessagingStyleNotification(Context context) { Log.d(TAG, "generateMessagingStyleNotification()"); // Main steps for building a MESSAGING_STYLE notification: // 0. Get your data - // 1. Build the MESSAGING_STYLE - // 2. Set up main Intent for notification - // 3. Set up RemoteInput (users can input directly from notification) - // 4. Build and issue the notification + // 1. Retrieve Notification Channel for O and beyond devices (26+) + // 2. Build the MESSAGING_STYLE + // 3. Set up main Intent for notification + // 4. Set up RemoteInput (users can input directly from notification) + // 5. Build and issue the notification - // 0. Get your data (everything unique per Notification) + // 0. Get your data (everything unique per Notification). MockDatabase.MessagingStyleCommsAppData messagingStyleCommsAppData = MockDatabase.getMessagingStyleData(); - // 1. Build the Notification.Style (MESSAGING_STYLE) + // 1. Create/Retrieve Notification Channel for O and beyond devices (26+). + String notificationChannelId = + createNotificationChannel(context, messagingStyleCommsAppData); + + // 2. Build the Notification.Style (MESSAGING_STYLE) String contentTitle = messagingStyleCommsAppData.getContentTitle(); MessagingStyle messagingStyle = @@ -162,14 +176,14 @@ public class NotificationsActivity extends WearableActivity { messagingStyle.addMessage(message); } - // 2. Set up main Intent for notification + // 3. Set up main Intent for notification Intent notifyIntent = new Intent(getActivity(), MessagingMainActivity.class); PendingIntent mainPendingIntent = PendingIntent.getActivity( getActivity(), 0, notifyIntent, PendingIntent.FLAG_UPDATE_CURRENT); - // 3. Set up a RemoteInput Action, so users can input (keyboard, drawing, voice) + // 4. Set up a RemoteInput Action, so users can input (keyboard, drawing, voice) // directly from the notification without entering the app. // Create the RemoteInput specifying this key. @@ -202,14 +216,16 @@ public class NotificationsActivity extends WearableActivity { .extend(inlineActionForWear2) .build(); - // 4. Build and issue the notification + // 5. Build and issue the notification // Because we want this to be a new notification (not updating current notification), // we create a new Builder. Later, we update this same notification, so we need to save // this Builder globally (as outlined earlier). + // Notification Channel Id is ignored for Android pre O (26). NotificationCompat.Builder notificationCompatBuilder = - new NotificationCompat.Builder(getActivity()); + new NotificationCompat.Builder( + context, notificationChannelId); GlobalNotificationBuilder.setNotificationCompatBuilderInstance( notificationCompatBuilder); @@ -222,16 +238,24 @@ public class NotificationsActivity extends WearableActivity { .setContentText(messagingStyleCommsAppData.getContentText()) .setSmallIcon(R.drawable.watch) .setContentIntent(mainPendingIntent) + .setColor(ContextCompat.getColor(context, R.color.background)) + .setDefaults(NotificationCompat.DEFAULT_ALL) // Number of new notifications for API <24 (Wear 1.+) devices .setSubText( Integer.toString(messagingStyleCommsAppData.getNumberOfNewMessages())) .addAction(replyAction) .setCategory(Notification.CATEGORY_MESSAGE) - .setPriority(Notification.PRIORITY_HIGH) + .setPriority(messagingStyleCommsAppData.getPriority()) - // Hides content on the lock-screen - .setVisibility(Notification.VISIBILITY_PRIVATE); + // Sets priority for 25 and below. For 26 and above, 'priority' is deprecated for + // 'importance' which is set in the NotificationChannel. The integers representing + // 'priority' are different from 'importance', so make sure you don't mix them. + .setPriority(messagingStyleCommsAppData.getPriority()) + + // Sets lock-screen visibility for 25 and below. For 26 and above, lock screen + // visibility is set in the NotificationChannel. + .setVisibility(messagingStyleCommsAppData.getChannelLockscreenVisibility()); notificationCompatBuilder.setLargeIcon( BitmapFactory.decodeResource( @@ -249,5 +273,52 @@ public class NotificationsActivity extends WearableActivity { // Close app to demonstrate notification in steam. getActivity().finish(); } + + private String createNotificationChannel( + Context context, + MockDatabase.MessagingStyleCommsAppData mockNotificationData) { + + // NotificationChannels are required for Notifications on O (API 26) and above. + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + + // The id of the channel. + String channelId = mockNotificationData.getChannelId(); + + // The user-visible name of the channel. + CharSequence channelName = mockNotificationData.getChannelName(); + // The user-visible description of the channel. + String channelDescription = mockNotificationData.getChannelDescription(); + int channelImportance = mockNotificationData.getChannelImportance(); + boolean channelEnableVibrate = mockNotificationData.isChannelEnableVibrate(); + int channelLockscreenVisibility = + mockNotificationData.getChannelLockscreenVisibility(); + + // Initializes NotificationChannel. + NotificationChannel notificationChannel = + new NotificationChannel(channelId, channelName, channelImportance); + notificationChannel.setDescription(channelDescription); + notificationChannel.enableVibration(channelEnableVibrate); + notificationChannel.setLockscreenVisibility(channelLockscreenVisibility); + + // Adds NotificationChannel to system. Attempting to create an existing notification + // channel with its original values performs no operation, so it's safe to perform the + // below sequence. + NotificationManager notificationManager = + (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); + notificationManager.createNotificationChannel(notificationChannel); + + return channelId; + } else { + // Returns null for pre-O (26) devices. + return null; + } + } } + + @Override + public AmbientMode.AmbientCallback getAmbientCallback() { + return new MyAmbientCallback(); + } + + private class MyAmbientCallback extends AmbientMode.AmbientCallback {} } diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/OpenOnPhoneAnimationActivity.java b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/OpenOnPhoneAnimationActivity.java index 51d9bdff..db1ae6e1 100644 --- a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/OpenOnPhoneAnimationActivity.java +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/OpenOnPhoneAnimationActivity.java @@ -15,14 +15,16 @@ */ package com.example.android.wearable.wear.wearaccessibilityapp; +import android.app.Activity; import android.graphics.drawable.Animatable2.AnimationCallback; import android.graphics.drawable.AnimatedVectorDrawable; import android.graphics.drawable.Drawable; import android.os.Bundle; -import android.support.wearable.activity.WearableActivity; +import android.support.wear.ambient.AmbientMode; import android.widget.ImageView; -public class OpenOnPhoneAnimationActivity extends WearableActivity { +public class OpenOnPhoneAnimationActivity extends Activity + implements AmbientMode.AmbientCallbackProvider { private AnimationCallback mAnimationCallback; private AnimatedVectorDrawable mAnimatedVectorDrawablePhone; @@ -31,6 +33,8 @@ public class OpenOnPhoneAnimationActivity extends WearableActivity { super.onCreate(savedInstanceState); setContentView(R.layout.activity_open_on_phone_animation); + AmbientMode.attachAmbientSupport(this); + mAnimationCallback = new AnimationCallback() { @Override @@ -53,4 +57,11 @@ public class OpenOnPhoneAnimationActivity extends WearableActivity { super.onDestroy(); mAnimatedVectorDrawablePhone.unregisterAnimationCallback(mAnimationCallback); } + + @Override + public AmbientMode.AmbientCallback getAmbientCallback() { + return new MyAmbientCallback(); + } + + private class MyAmbientCallback extends AmbientMode.AmbientCallback {} } diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/PhotoCarouselActivity.java b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/PhotoCarouselActivity.java index 6c07384f..3c53b03f 100644 --- a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/PhotoCarouselActivity.java +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/PhotoCarouselActivity.java @@ -15,20 +15,24 @@ */ package com.example.android.wearable.wear.wearaccessibilityapp; +import android.app.Activity; import android.content.Intent; import android.os.Bundle; -import android.support.wearable.activity.WearableActivity; +import android.support.wear.ambient.AmbientMode; import android.view.View; import android.view.View.OnClickListener; import android.widget.ImageView; -public class PhotoCarouselActivity extends WearableActivity implements OnClickListener { +public class PhotoCarouselActivity extends Activity + implements AmbientMode.AmbientCallbackProvider, OnClickListener { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_photo_carousel); + AmbientMode.attachAmbientSupport(this); + // Grab reference to each image in activity_photo_carousel. ImageView catImage = findViewById(R.id.cat_image); catImage.setTag(R.drawable.cats); @@ -53,4 +57,11 @@ public class PhotoCarouselActivity extends WearableActivity implements OnClickLi intent.putExtra(getString(R.string.intent_extra_image), (int) v.getTag()); startActivity(intent); } + + @Override + public AmbientMode.AmbientCallback getAmbientCallback() { + return new MyAmbientCallback(); + } + + private class MyAmbientCallback extends AmbientMode.AmbientCallback {} } diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/ProgressActivity.java b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/ProgressActivity.java index e385f6b2..07ed344a 100644 --- a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/ProgressActivity.java +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/ProgressActivity.java @@ -15,8 +15,9 @@ */ package com.example.android.wearable.wear.wearaccessibilityapp; +import android.app.Activity; import android.os.Bundle; -import android.support.wearable.activity.WearableActivity; +import android.support.wear.ambient.AmbientMode; import android.view.LayoutInflater; import android.view.View; import android.widget.AdapterView; @@ -26,7 +27,7 @@ import android.widget.TextView; import java.util.ArrayList; import java.util.List; -public class ProgressActivity extends WearableActivity { +public class ProgressActivity extends Activity implements AmbientMode.AmbientCallbackProvider { private List<ListsItem> mItems; @Override @@ -34,6 +35,8 @@ public class ProgressActivity extends WearableActivity { super.onCreate(savedInstanceState); setContentView(R.layout.activity_lists); + AmbientMode.attachAmbientSupport(this); + // Create a list of items for adapter to display. mItems = new ArrayList<>(); mItems.add(new ListsItem(R.string.full_screen, FullScreenActivity.class)); @@ -65,4 +68,11 @@ public class ProgressActivity extends WearableActivity { } }); } + + @Override + public AmbientMode.AmbientCallback getAmbientCallback() { + return new MyAmbientCallback(); + } + + private class MyAmbientCallback extends AmbientMode.AmbientCallback {} } diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/RadioListActivity.java b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/RadioListActivity.java index 978d49db..e8d26b2f 100644 --- a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/RadioListActivity.java +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/RadioListActivity.java @@ -15,18 +15,28 @@ */ package com.example.android.wearable.wear.wearaccessibilityapp; +import android.app.Activity; import android.os.Bundle; -import android.support.wearable.activity.WearableActivity; +import android.support.wear.ambient.AmbientMode; import android.widget.TextView; -public class RadioListActivity extends WearableActivity { +public class RadioListActivity extends Activity implements AmbientMode.AmbientCallbackProvider { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_radio_list); + AmbientMode.attachAmbientSupport(this); + TextView titleView = findViewById(R.id.radio_list_title); titleView.setText(R.string.radio_list); } + + @Override + public AmbientMode.AmbientCallback getAmbientCallback() { + return new MyAmbientCallback(); + } + + private class MyAmbientCallback extends AmbientMode.AmbientCallback {} } diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/MyLauncherChildLayoutManager.java b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/ScalingScrollLayoutCallback.java index 44b3c75c..00b42268 100644 --- a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/MyLauncherChildLayoutManager.java +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/ScalingScrollLayoutCallback.java @@ -15,31 +15,25 @@ */ package com.example.android.wearable.wear.wearaccessibilityapp; -import android.content.Context; -import android.support.wearable.view.CurvedChildLayoutManager; -import android.support.wearable.view.WearableRecyclerView; +import android.support.v7.widget.RecyclerView; +import android.support.wear.widget.WearableLinearLayoutManager; import android.view.View; -public class MyLauncherChildLayoutManager extends CurvedChildLayoutManager { +public class ScalingScrollLayoutCallback extends WearableLinearLayoutManager.LayoutCallback { /** How much should we scale the icon at most. */ private static final float MAX_ICON_PROGRESS = 0.65f; - public MyLauncherChildLayoutManager(Context context) { - super(context); - } - @Override - public void updateChild(View child, WearableRecyclerView parent) { - super.updateChild(child, parent); + public void onLayoutFinished(View child, RecyclerView parent) { // Figure out % progress from top to bottom. float centerOffset = (child.getHeight() / 2.0f) / parent.getHeight(); - float yRelativeToCenterOffset = (child.getY() / parent.getHeight()) + centerOffset; // Normalize for center. float progressToCenter = Math.abs(0.5f - yRelativeToCenterOffset); + // Adjust to the maximum scale. progressToCenter = Math.min(progressToCenter, MAX_ICON_PROGRESS); diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/ZoomImageActivity.java b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/ZoomImageActivity.java index efd16427..27a24d10 100644 --- a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/ZoomImageActivity.java +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/ZoomImageActivity.java @@ -15,18 +15,21 @@ */ package com.example.android.wearable.wear.wearaccessibilityapp; +import android.app.Activity; import android.content.res.Resources.NotFoundException; import android.os.Bundle; -import android.support.wearable.activity.WearableActivity; +import android.support.wear.ambient.AmbientMode; import android.widget.ImageView; -public class ZoomImageActivity extends WearableActivity { +public class ZoomImageActivity extends Activity implements AmbientMode.AmbientCallbackProvider { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_zoom_image); + AmbientMode.attachAmbientSupport(this); + // Check if integer was actually given. if (!(getIntent().hasExtra(getString(R.string.intent_extra_image)))) { throw new NotFoundException("Expecting extras"); @@ -37,4 +40,11 @@ public class ZoomImageActivity extends WearableActivity { ImageView expandedImage = findViewById(R.id.expanded_image); expandedImage.setImageResource(value); } + + @Override + public AmbientMode.AmbientCallback getAmbientCallback() { + return new MyAmbientCallback(); + } + + private class MyAmbientCallback extends AmbientMode.AmbientCallback {} } diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/activity_long_list.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/activity_long_list.xml index 525d8b38..e133f15f 100644 --- a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/activity_long_list.xml +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/activity_long_list.xml @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. --> -<android.support.wearable.view.drawer.WearableDrawerLayout +<android.support.wear.widget.drawer.WearableDrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" @@ -22,7 +22,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" tools:deviceIds="wear"> - <android.support.wearable.view.WearableRecyclerView + <android.support.wear.widget.WearableRecyclerView android:id="@+id/recycler_view_long_list" android:layout_width="match_parent" android:layout_height="match_parent" @@ -30,12 +30,12 @@ android:paddingBottom="?android:dialogPreferredPadding" android:clipToPadding="false" android:scrollbars="vertical"/> - <android.support.wearable.view.drawer.WearableActionDrawer + <android.support.wear.widget.drawer.WearableActionDrawerView android:id="@+id/action_drawer_long_list" android:layout_width="match_parent" android:layout_height="match_parent" android:visibility="invisible" - app:action_menu="@menu/action_drawer_menu" + app:actionMenu="@menu/action_drawer_menu" app:show_overflow_in_peek="true"> - </android.support.wearable.view.drawer.WearableActionDrawer> -</android.support.wearable.view.drawer.WearableDrawerLayout> + </android.support.wear.widget.drawer.WearableActionDrawerView> +</android.support.wear.widget.drawer.WearableDrawerLayout> diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/activity_main.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/activity_main.xml index 8c35593c..21446473 100644 --- a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/activity_main.xml +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/activity_main.xml @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. --> -<android.support.wearable.view.WearableRecyclerView +<android.support.wear.widget.WearableRecyclerView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/main_recycler_view" android:layout_width="match_parent" diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/circled_image_layout.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/circled_image_layout.xml index bd3b9da7..d28ac0d4 100644 --- a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/circled_image_layout.xml +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/circled_image_layout.xml @@ -17,7 +17,7 @@ <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" - android:id="@+id/circled_image_layout" + android:id="@+id/rounded_drawable_layout" android:layout_width="match_parent" android:layout_height="wrap_content"> <android.support.wearable.view.CircledImageView diff --git a/wearable/wear/WearAccessibilityApp/screenshots/controls_screen.png b/wearable/wear/WearAccessibilityApp/screenshots/controls_screen.png Binary files differnew file mode 100644 index 00000000..2363dc53 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/screenshots/controls_screen.png diff --git a/wearable/wear/WearAccessibilityApp/screenshots/main_screen.png b/wearable/wear/WearAccessibilityApp/screenshots/main_screen.png Binary files differnew file mode 100644 index 00000000..ecd58bcc --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/screenshots/main_screen.png diff --git a/wearable/wear/WearAccessibilityApp/screenshots/progress_screen.png b/wearable/wear/WearAccessibilityApp/screenshots/progress_screen.png Binary files differnew file mode 100644 index 00000000..70674897 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/screenshots/progress_screen.png diff --git a/wearable/wear/WearAccessibilityApp/template-params.xml b/wearable/wear/WearAccessibilityApp/template-params.xml index dc9f5d52..60c79ad3 100644 --- a/wearable/wear/WearAccessibilityApp/template-params.xml +++ b/wearable/wear/WearAccessibilityApp/template-params.xml @@ -20,7 +20,7 @@ <group>Wearable</group> <package>com.example.android.wearable.wear.wearaccessibilityapp</package> - <minSdkVersionWear>23</minSdkVersionWear> + <minSdkVersionWear>24</minSdkVersionWear> <compileSdkVersionWear>26</compileSdkVersionWear> <targetSdkVersionWear>26</targetSdkVersionWear> @@ -34,8 +34,7 @@ <strings> <intro> <![CDATA[ - Introductory text that explains what the sample is intended to demonstrate. Edit - in template-params.xml. + Sample demostrates best practices for accessibility (a11y support). ]]> </intro> </strings> @@ -45,7 +44,7 @@ <metadata> <!-- Values: {DRAFT | PUBLISHED | INTERNAL | DEPRECATED | SUPERCEDED} --> - <status>DRAFT</status> + <status>PUBLISHED</status> <!-- See http://go/sample-categories for details on the next 4 fields. --> <!-- Most samples just need to udpate the Categories field. This is a comma- seperated list of topic tags. Unlike the old category system, samples @@ -73,8 +72,9 @@ <icon>screenshots/icon-web.png</icon> <!-- Path to screenshots. Use <img> tags for each. --> <screenshots> - <img>screenshots/1-main.png</img> - <img>screenshots/2-settings.png</img> + <img>screenshots/main_screen.png</img> + <img>screenshots/progress_screen.png</img> + <img>screenshots/controls_screen.png</img> </screenshots> <!-- List of APIs that this sample should be cross-referenced under. Use <android> for fully-qualified Framework class names ("android:" namespace). @@ -82,7 +82,9 @@ Use <ext> for custom namespaces, if needed. See "Samples Index API" documentation for more details. --> <api_refs> - <android>android.app.ActionBar</android> + <android>android.support.wear.widget.WearableRecyclerView</android> + <android>android.preference.Preference</android> + <android>android.support.v4.app.NotificationCompat</android> </api_refs> <!-- 1-3 line description of the sample here. @@ -90,22 +92,24 @@ Avoid simply rearranging the sample's title. What does this sample actually accomplish, and how does it do it? --> <description> - Sample demonstrating how to instantiate an ActionBar on Android, define - action items, and set an "up" navigation link. Uses the Support Library - for compatibility with pre-3.0 devices. + Sample demonstrates how to include accessibility support for your wearable app. </description> <!-- Multi-paragraph introduction to sample, from an educational point-of-view. Makrdown formatting allowed. This will be used to generate a mini-article for the sample on DAC. --> <intro> - Long intro here. + Accessibility is an important part of any app (especially wearable apps). By + integrating accessible components and services, you can improve your app's usability, + particularly for users with disabilities. - Multi-paragraph introduction to sample, from an educational point-of-view. - *Makrdown* formatting allowed. See [Markdown Documentation][1] - for details. + This sample demonstrates common UX patterns in wearable apps along with accessibility + support of those patterns. Be sure to review the [Accessibility Developer Checklist][1] + for your own app. For additional information please see our + [Best Practices for User Interface][2] page. - [1]: http://daringfireball.net/projects/markdown/syntax + [1]: https://developer.android.com/guide/topics/ui/accessibility/checklist.html + [2]: https://developer.android.com/training/accessibility/index.html </intro> </metadata> </sample> |