diff options
author | Jeremy Walker <jewalker@google.com> | 2017-11-08 16:21:38 -0800 |
---|---|---|
committer | Jeremy Walker <jewalker@google.com> | 2017-11-08 16:26:11 -0800 |
commit | c1d620737e1f807e119e82734e89de8dc4f435e2 (patch) | |
tree | adedcbc6bfb59292e28e6a5ca80e813b49ea2a9a /wearable | |
parent | ed0f1ed2a42cd5f86e3d8cf199b0aa47dc7fc17b (diff) | |
download | android-c1d620737e1f807e119e82734e89de8dc4f435e2.tar.gz |
Initial commit of a11y sample from interns.
Bug: 65458565
Test: Manually tested with Wear device.
Change-Id: I1418b0544a22158005ba1ad79601d8b17305aa95
Diffstat (limited to 'wearable')
138 files changed, 4736 insertions, 0 deletions
diff --git a/wearable/wear/WearAccessibilityApp/.gitignore b/wearable/wear/WearAccessibilityApp/.gitignore new file mode 100644 index 00000000..b90e7562 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/.gitignore @@ -0,0 +1,33 @@ +# built application files +*.apk +*.ap_ + +# files for the dex VM +*.dex + +# Java class files +*.class + +# generated files +bin/ +gen/ + +# Ignore gradle files +.gradle/ +build/ + +# Local configuration file (sdk path, etc) +local.properties + +# Proguard folder generated by Eclipse +proguard/ +proguard-project.txt + +# Eclipse files +.project +.classpath +.settings/ + +# Android Studio/IDEA +*.iml +.idea diff --git a/wearable/wear/WearAccessibilityApp/Wearable/build.gradle b/wearable/wear/WearAccessibilityApp/Wearable/build.gradle new file mode 100644 index 00000000..c1f3a89c --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/build.gradle @@ -0,0 +1,84 @@ + +buildscript { + repositories { + maven { + url 'https://maven.google.com' + } + jcenter() + } + + dependencies { + classpath 'com.android.tools.build:gradle:3.0.0' + } +} + +apply plugin: 'com.android.application' + +repositories { + jcenter() + maven { + url 'https://maven.google.com' + } +} + + + +dependencies { + + compile 'com.android.support:wear:27.0.0' + compile 'com.android.support.constraint:constraint-layout:1.0.2' + compile 'com.android.support:appcompat-v7:27.0.0' + + + compile 'com.google.android.gms:play-services-wearable:11.6.0' + compile 'com.android.support:support-v13:27.0.0' + + provided 'com.google.android.wearable:wearable:2.1.0' + + compile 'com.google.android.support:wearable:2.1.0' + +} + +// The sample build uses multiple directories to +// keep boilerplate and common code separate from +// the main sample code. +List<String> dirs = [ + 'main', // main sample code; look here for the interesting stuff. + 'common', // components that are reused by multiple samples + 'template'] // boilerplate code that is generated by the sample template process + +android { + + compileSdkVersion 26 + + buildToolsVersion "26.0.2" + + defaultConfig { + versionCode 1 + versionName "1.0" + + minSdkVersion 23 + + targetSdkVersion 26 + + multiDexEnabled true + + } + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_7 + targetCompatibility JavaVersion.VERSION_1_7 + } + + sourceSets { + main { + dirs.each { dir -> + java.srcDirs "src/${dir}/java" + res.srcDirs "src/${dir}/res" + } + } + androidTest.setRoot('tests') + androidTest.java.srcDirs = ['tests/src'] + + } +} diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/AndroidManifest.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/AndroidManifest.xml new file mode 100644 index 00000000..7c335947 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/AndroidManifest.xml @@ -0,0 +1,93 @@ +<?xml version="1.0" encoding="utf-8"?> +<manifest package="com.example.android.wearable.wear.wearaccessibilityapp" + xmlns:android="http://schemas.android.com/apk/res/android"> + + <uses-sdk android:minSdkVersion="14"/> + + <uses-feature android:name="android.hardware.type.watch"/> + + <!-- Required for Always-on. --> + <uses-permission android:name="android.permission.WAKE_LOCK" /> + + <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> + <uses-permission android:name="android.permission.READ_PHONE_STATE"/> + <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> + + <application + android:allowBackup="true" + android:icon="@drawable/launcher_image" + android:label="@string/app_name" + android:supportsRtl="true" + android:theme="@style/SampleAppTheme"> + + <activity + android:label="@string/app_name" + android:name=".MainActivity"> + <intent-filter> + <action android:name="android.intent.action.MAIN"/> + <category android:name="android.intent.category.LAUNCHER"/> + </intent-filter> + </activity> + <activity + android:label="@string/lists" + android:name=".ListsActivity"> + </activity> + <activity + android:label="@string/dialogs" + android:name=".DialogsActivity"> + </activity> + <activity + android:label="@string/progress" + android:name=".ProgressActivity"> + </activity> + <activity + android:label="@string/controls" + android:name=".ControlsActivity"> + </activity> + <activity + android:label="@string/notifications" + android:name=".NotificationsActivity"> + </activity> + <activity + android:label="@string/accessibility" + android:name=".AccessibilityActivity"> + </activity> + <activity + android:label="@string/a_long_list" + android:name=".LongListActivity"> + </activity> + <activity + android:label="@string/list_of_graphics" + android:name=".ListOfGraphicsActivity"> + </activity> + <activity + android:label="@string/photo_carousel" + android:name=".PhotoCarouselActivity"> + </activity> + <activity + android:label="@string/images" + android:name=".ImagesActivity"> + </activity> + <activity + android:label="@string/zoom_image" + android:name=".ZoomImageActivity"> + </activity> + <activity + android:label="@string/open_on_phone_animation" + android:name=".OpenOnPhoneAnimationActivity" + android:theme="@style/OpenOnPhoneAnimationTheme"> + </activity> + <activity + android:label="@string/radio_list" + android:name=".RadioListActivity"> + </activity> + <activity + android:label="@string/full_screen" + android:name=".FullScreenActivity"> + </activity> + <activity + android:label="@string/in_line" + android:name=".InLineActivity"> + </activity> + </application> +</manifest> 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 new file mode 100644 index 00000000..8bc8c950 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/AccessibilityActivity.java @@ -0,0 +1,31 @@ +package com.example.android.wearable.wear.wearaccessibilityapp; + +import android.content.Intent; +import android.os.Bundle; +import android.provider.Settings; +import android.support.wearable.activity.WearableActivity; +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.ImageView; +import android.widget.TextView; + +public class AccessibilityActivity extends WearableActivity { + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_accessibility); + + ImageView accessibilityImage = findViewById(R.id.icon_image_view); + accessibilityImage.setImageDrawable(getDrawable(R.drawable.settings_circle)); + + TextView accessibilityText = findViewById(R.id.icon_text_view); + accessibilityText.setText(R.string.accessibility_settings); + + findViewById(R.id.accessibility_button_include).setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + startActivityForResult(new Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS), 0); + } + }); + } +}
\ No newline at end of file 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 new file mode 100644 index 00000000..d398819e --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/AppItem.java @@ -0,0 +1,43 @@ +package com.example.android.wearable.wear.wearaccessibilityapp; + +import android.content.Context; +import android.content.Intent; +import android.support.wearable.activity.WearableActivity; + +public class AppItem { + private final String mItemName; + private final int mImageId; + private final int mViewType; + private final Class mClass; + + public AppItem(String itemName, int imageId, int viewType, Class<? + extends WearableActivity> clazz) { + mItemName = itemName; + mImageId = imageId; + mViewType = viewType; + mClass = clazz; + } + + public AppItem(String itemName, int imageId, Class<? extends WearableActivity> clazz) { + mItemName = itemName; + mImageId = imageId; + mViewType = SampleAppConstants.NORMAL; + mClass = clazz; + } + + public String getItemName() { + return mItemName; + } + + public int getImageId() { + return mImageId; + } + + public int getViewType() { + return mViewType; + } + + public void launchActivity(Context context) { + context.startActivity(new Intent(context, mClass)); + } +}
\ No newline at end of file diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/AppItemListViewAdapter.java b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/AppItemListViewAdapter.java new file mode 100644 index 00000000..eae4d7a3 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/AppItemListViewAdapter.java @@ -0,0 +1,49 @@ +package com.example.android.wearable.wear.wearaccessibilityapp; + +import android.content.Context; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.ImageView; +import android.widget.TextView; + +import java.util.List; + +public class AppItemListViewAdapter extends ArrayAdapter<AppItem> { + private final LayoutInflater mInflater; + private List<AppItem> mItems; + + public AppItemListViewAdapter(@NonNull Context context, @NonNull List<AppItem> items) { + super(context, R.layout.app_item_layout, items); + mInflater = LayoutInflater.from(context); + mItems = items; + } + + @NonNull + @Override + public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) { + Holder holder; + if (convertView == null) { + convertView = mInflater.inflate(R.layout.shifted_app_item_layout, parent, false); + holder = new Holder(); + holder.mTextView = convertView.findViewById(R.id.shifted_icon_text_view); + holder.mImageView = convertView.findViewById(R.id.shifted_icon_image_view); + convertView.setTag(holder); // Cache holder for future use. + } else { + holder = (Holder) convertView.getTag(); + } + + holder.mTextView.setText(mItems.get(position).getItemName()); + holder.mImageView.setImageResource(mItems.get(position).getImageId()); + + return convertView; + } + + private static class Holder { + TextView mTextView; + ImageView mImageView; + } +}
\ No newline at end of file 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 new file mode 100644 index 00000000..c8a1a92e --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/CircledImageViewPreference.java @@ -0,0 +1,90 @@ +package com.example.android.wearable.wear.wearaccessibilityapp; + +import android.content.Context; +import android.os.CountDownTimer; +import android.preference.Preference; +import android.support.wearable.view.CircledImageView; +import android.util.AttributeSet; +import android.util.TypedValue; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +public class CircledImageViewPreference extends Preference { + + private CircledImageView mCircledImage; + private TextView mCircledImageText; + private CountDownTimer mCountDownTimer; + private int mColorPrimaryDark; + private int mColorAccent; + private boolean mIsLoading; + private Context mContext; + + public CircledImageViewPreference(Context context, AttributeSet attrs) { + super(context, attrs); + mContext = context; + + TypedValue typedValue = new TypedValue(); + mContext.getTheme().resolveAttribute(android.R.attr.colorPrimaryDark, typedValue, true); + mColorPrimaryDark = typedValue.data; + mContext.getTheme().resolveAttribute(android.R.attr.colorAccent, typedValue, true); + mColorAccent = typedValue.data; + } + + @Override + protected View onCreateView(ViewGroup parent) { + super.onCreateView(parent); + LayoutInflater inflater = LayoutInflater.from(getContext()); + View circledImageViewLayout = inflater.inflate(R.layout.circled_image_layout, null); + + mCircledImage = circledImageViewLayout.findViewById(R.id.circled_image_view); + mCircledImageText = circledImageViewLayout.findViewById(R.id.circled_image_text); + + setStartCircledImageView(); + return circledImageViewLayout; + } + + @Override + protected void onClick() { + mIsLoading = !mIsLoading; + if (mIsLoading) { + setLoadingCircledImageView(); + } else { + setStartCircledImageView(); + cancelCountDownTimer(); + } + } + + public void setStartCircledImageView() { + mCircledImageText.setText(R.string.start); + mCircledImage.setImageResource(R.drawable.start); + mCircledImage.setCircleBorderColor(mColorPrimaryDark); + mCircledImage.setProgress(1); + mIsLoading = false; + } + + public void setLoadingCircledImageView() { + mCircledImageText.setText(R.string.loading); + mCircledImage.setImageResource(R.drawable.stop); + mCircledImage.setCircleBorderColor(mColorAccent); + mCountDownTimer = new CountDownTimer(10000, 10) { + @Override + public void onTick(long millisUntilFinished) { + float timeElapsed = (10000.0f - millisUntilFinished) / 10000.0f; + mCircledImage.setProgress(timeElapsed); + } + + @Override + public void onFinish() { + setStartCircledImageView(); + } + }.start(); + } + + public void cancelCountDownTimer() { + if (mCountDownTimer != null) { + mCountDownTimer.cancel(); + } + } +}
\ No newline at end of file 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 new file mode 100644 index 00000000..0b6bddae --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/ControlsActivity.java @@ -0,0 +1,27 @@ +package com.example.android.wearable.wear.wearaccessibilityapp; + +import android.os.Bundle; +import android.preference.PreferenceFragment; +import android.support.wearable.activity.WearableActivity; + +public class ControlsActivity extends WearableActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + // Display the fragment as the main content. + getFragmentManager().beginTransaction() + .replace(android.R.id.content, new ControlsPrefFragment()) + .commit(); + } + + public static class ControlsPrefFragment extends PreferenceFragment { + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + // Load the preferences from an XML resource + addPreferencesFromResource(R.xml.prefs_controls); + } + } +}
\ No newline at end of file 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 new file mode 100644 index 00000000..2d2100b7 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/DialogsActivity.java @@ -0,0 +1,144 @@ +package com.example.android.wearable.wear.wearaccessibilityapp; + +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.wearable.view.AcceptDenyDialog; +import android.support.wearable.view.WearableDialogHelper.DialogBuilder; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.AdapterView; +import android.widget.ListView; +import android.widget.TextView; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.Supplier; + +public class DialogsActivity extends WearableActivity { + + private List<DialogsItem> mItems; + public View mView; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_dialogs); + + // Supplier objects + Supplier<Dialog> twoActionDialog = new Supplier<Dialog>() { + @Override + public Dialog get() { + AcceptDenyDialog twoActionDialog = new AcceptDenyDialog(DialogsActivity.this); + twoActionDialog.setTitle(R.string.yes_no_dialog); + twoActionDialog.setMessage(getString(R.string.yes_no_dialog_description)); + twoActionDialog.setPositiveButton(new OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // Add code here for onClick functionality. + } + }); + twoActionDialog.setNegativeButton(new OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // Add code here for onClick functionality. + } + }); + return twoActionDialog; + } + }; + + Supplier<Dialog> oneActionDialog = new Supplier<Dialog>() { + @Override + public Dialog get() { + AcceptDenyDialog oneActionDialog = new AcceptDenyDialog(DialogsActivity.this); + oneActionDialog.setTitle(R.string.one_action_dialog); + oneActionDialog.setMessage(getString(R.string.one_action_dialog_description)); + oneActionDialog.setPositiveButton(new OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // Add code here for onClick functionality. + } + }); + return oneActionDialog; + } + }; + + Supplier<Dialog> multipleActionDialog = new Supplier<Dialog>() { + @Override + public Dialog get() { + DialogBuilder multipleActionBuilder = new DialogBuilder(DialogsActivity.this); + multipleActionBuilder.setTitle(R.string.multiple_action_dialog); + multipleActionBuilder.setMessage(R.string.multiple_action_dialog_description); + + // OK option. + multipleActionBuilder.setPositiveIcon(R.drawable.accept_circle); + multipleActionBuilder.setPositiveButton(R.string.ok, new OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // Add code here for onClick functionality. + } + }); + + // Close option. + multipleActionBuilder.setNeutralIcon(R.drawable.deny_circle); + multipleActionBuilder.setNeutralButton(R.string.close, new OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // Add code here for onClick functionality. + } + }); + + // Open in phone option. + multipleActionBuilder.setNegativeIcon(R.drawable.open_in_phone_circle); + multipleActionBuilder + .setNegativeButton(R.string.open_on_phone, new OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + Intent intent = new Intent(DialogsActivity.this, + OpenOnPhoneAnimationActivity.class); + startActivity(intent); + } + }); + return multipleActionBuilder.create(); + } + }; + + // Create a list of items for adapter to display. + mItems = new ArrayList<>(); + mItems.add(new DialogsItem(R.string.yes_no_action, twoActionDialog)); + mItems.add(new DialogsItem(R.string.one_action, oneActionDialog)); + mItems.add(new DialogsItem(R.string.multiple_actions, multipleActionDialog)); + + // Initialize an adapter and set it to ListView mListView. + ListViewAdapter adapter = new ListViewAdapter(this, mItems); + final ListView listView = findViewById(R.id.list_view_dialogs); + listView.setAdapter(adapter); + + // Set header of mListView to be the title from title_layout. + LayoutInflater inflater = LayoutInflater.from(this); + View titleLayout = inflater.inflate(R.layout.title_layout, null); + TextView titleView = titleLayout.findViewById(R.id.title_text); + titleView.setText(R.string.dialogs); + titleView.setOnClickListener(null); // make title non-clickable (will not turn grey) + + listView.addHeaderView(titleView); + + // Goes to a dialog when you click on one of the list items. + // Dependent upon position of click. + // Note: Keep in mind that icons will not appear on dialog unless you + // set an onClickListener. + listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView<?> parent, View view, int position, long id) { + mView = view; + Dialog dialog = mItems.get(position - listView.getHeaderViewsCount()) + .getSupplier().get(); + dialog.show(); + } + }); + } +}
\ No newline at end of file diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/DialogsItem.java b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/DialogsItem.java new file mode 100644 index 00000000..d5567091 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/DialogsItem.java @@ -0,0 +1,23 @@ +package com.example.android.wearable.wear.wearaccessibilityapp; + +import android.app.Dialog; + +import java.util.function.Supplier; + +public class DialogsItem implements Item { + private final int mItemId; + private final Supplier<Dialog> mSupplier; + + public DialogsItem(int itemId, Supplier<Dialog> supplier) { + mItemId = itemId; + mSupplier = supplier; + } + + public int getItemId() { + return mItemId; + } + + public Supplier<Dialog> getSupplier() { + return mSupplier; + } +}
\ No newline at end of file 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 new file mode 100644 index 00000000..48ed0a0c --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/FullScreenActivity.java @@ -0,0 +1,14 @@ +package com.example.android.wearable.wear.wearaccessibilityapp; + +import android.os.Bundle; +import android.support.wearable.activity.WearableActivity; + +public class FullScreenActivity extends WearableActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_fullscreen_progress); + } + +}
\ No newline at end of file diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/GlobalNotificationBuilder.java b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/GlobalNotificationBuilder.java new file mode 100644 index 00000000..ea7f7968 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/GlobalNotificationBuilder.java @@ -0,0 +1,45 @@ +package com.example.android.wearable.wear.wearaccessibilityapp; + +import android.support.v4.app.NotificationCompat; + +/** + * We use a Singleton for a global copy of the NotificationCompat.Builder to update active + * Notifications from other Services/Activities. + * + * You have two options for updating your notifications: + * + * 1. Use a new NotificationCompatBuilder to create the Notification. This approach requires you + * to get *ALL* the information and pass it to the builder. We get all the information from a Mock + * Database and this is the approach used in the MainActivity. + * + * 2. Use an existing NotificationCompatBuilder to create a Notification. This approach requires + * you to store a reference to the original builder. The benefit is you only need the new/updated + * information for an existing notification. We use this approach in the IntentService handlers to + * update existing notifications. + * + * IMPORTANT NOTE 1: You shouldn't save/modify the resulting Notification object using + * its member variables and/or legacy APIs. If you want to retain anything from update + * to update, retain the Builder as option 2 outlines. + * + * IMPORTANT NOTE 2: If the global Notification Builder is lost because the process is killed, you + * should have a way to recreate the Notification Builder from a persistent state. (We do this as + * well in the sample, check the IntentServices.) + */ +public final class GlobalNotificationBuilder { + + private static NotificationCompat.Builder sGlobalNotificationCompatBuilder = null; + + /* + * Empty constructor - We don't initialize builder because we rely on a null state to let us + * know the Application's process was killed. + */ + private GlobalNotificationBuilder() { } + + public static void setNotificationCompatBuilderInstance (NotificationCompat.Builder builder) { + sGlobalNotificationCompatBuilder = builder; + } + + public static NotificationCompat.Builder getNotificationCompatBuilderInstance(){ + return sGlobalNotificationCompatBuilder; + } +}
\ No newline at end of file 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 new file mode 100644 index 00000000..b91bec1c --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/ImagesActivity.java @@ -0,0 +1,48 @@ +package com.example.android.wearable.wear.wearaccessibilityapp; + +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.widget.ImageView; + +public class ImagesActivity extends WearableActivity { + private AnimatedVectorDrawable mAnimatedVectorDrawableSwipe; + private AnimatedVectorDrawable mAnimatedVectorDrawableTap; + private AnimationCallback mAnimationCallback; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_images); + + // Used to repeat animation from the beginning. + mAnimationCallback = new AnimationCallback() { + @Override + public void onAnimationEnd(Drawable drawable) { + super.onAnimationEnd(drawable); + ((AnimatedVectorDrawable) drawable).start(); + } + }; + + // Play 'swipe left' animation on loop. + ImageView mSwipeLeftImage = findViewById(R.id.swipe_left_image); + mAnimatedVectorDrawableSwipe = (AnimatedVectorDrawable) mSwipeLeftImage.getDrawable(); + mAnimatedVectorDrawableSwipe.start(); + mAnimatedVectorDrawableSwipe.registerAnimationCallback(mAnimationCallback); + + // Play 'tap' animation on loop. + ImageView mTapImage = findViewById(R.id.tap_image); + mAnimatedVectorDrawableTap = (AnimatedVectorDrawable) mTapImage.getDrawable(); + mAnimatedVectorDrawableTap.start(); + mAnimatedVectorDrawableTap.registerAnimationCallback(mAnimationCallback); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mAnimatedVectorDrawableSwipe.unregisterAnimationCallback(mAnimationCallback); + mAnimatedVectorDrawableTap.unregisterAnimationCallback(mAnimationCallback); + } +}
\ No newline at end of file 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 new file mode 100644 index 00000000..5d82957d --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/InLineActivity.java @@ -0,0 +1,65 @@ +package com.example.android.wearable.wear.wearaccessibilityapp; + +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; + +public class InLineActivity extends WearableActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + getFragmentManager().beginTransaction() + .replace(android.R.id.content, new InLinePrefFragment()) + .commit(); + } + + public static class InLinePrefFragment extends PreferenceFragment { + + private SwitchPreference mDeterminantSwitchPref; + private CircledImageViewPreference mCircledImageViewPref; + private ProgressBarPreference mProgressBarPreference; + private PreferenceScreen mPreferenceScreen; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + // Load the preferences from an XML resource + addPreferencesFromResource(R.xml.prefs_in_line_progress); + + mDeterminantSwitchPref = (SwitchPreference) findPreference( + getString(R.string.key_pref_determinant_switch)); + mDeterminantSwitchPref.setChecked(true); + + mCircledImageViewPref = (CircledImageViewPreference) + findPreference(getString(R.string.key_pref_circled_image_view)); + + mPreferenceScreen = (PreferenceScreen) findPreference( + getString(R.string.key_pref_progress_screen)); + + mProgressBarPreference = new ProgressBarPreference(getContext()); + mProgressBarPreference.setTitle("@string/indeterminant_progress"); + + mDeterminantSwitchPref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { + @Override + public boolean onPreferenceChange(Preference preference, Object newValue) { + mDeterminantSwitchPref.setChecked(!mDeterminantSwitchPref.isChecked()); + if (mDeterminantSwitchPref.isChecked()) { + mCircledImageViewPref.cancelCountDownTimer(); + mCircledImageViewPref.setStartCircledImageView(); + mPreferenceScreen.removePreference(mProgressBarPreference); + mPreferenceScreen.addPreference(mCircledImageViewPref); + } else { + mPreferenceScreen.removePreference(mCircledImageViewPref); + mPreferenceScreen.addPreference(mProgressBarPreference); + } + return true; + } + }); + } + } +}
\ No newline at end of file diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/Item.java b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/Item.java new file mode 100644 index 00000000..50e48c03 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/Item.java @@ -0,0 +1,5 @@ +package com.example.android.wearable.wear.wearaccessibilityapp; + +public interface Item { + int getItemId(); +}
\ No newline at end of file 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 new file mode 100644 index 00000000..f41b7c1d --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/ListOfGraphicsActivity.java @@ -0,0 +1,51 @@ +package com.example.android.wearable.wear.wearaccessibilityapp; + +import android.os.Bundle; +import android.support.wearable.activity.WearableActivity; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.AdapterView; +import android.widget.ListView; +import android.widget.TextView; + +import java.util.ArrayList; +import java.util.List; + +public class ListOfGraphicsActivity extends WearableActivity { + private List<AppItem> mItems; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_list_of_graphics); + + // Store all data in a list for adapter to use. + mItems = new ArrayList<AppItem>(); + mItems.add(new AppItem(getString(R.string.photo_carousel), R.drawable.heart_circle, + SampleAppConstants.NORMAL, PhotoCarouselActivity.class)); + mItems.add(new AppItem(getString(R.string.images), R.drawable.heart_circle, + SampleAppConstants.NORMAL, ImagesActivity.class)); + + // Set up an adapter and pass in all the items you initialized above. + AppItemListViewAdapter adapter = new AppItemListViewAdapter(this, mItems); + final ListView listView = findViewById(R.id.list_view_graphics); + listView.setAdapter(adapter); + + // Set header of list view to be a title. + LayoutInflater inflater = LayoutInflater.from(this); + View titleLayout = inflater.inflate(R.layout.title_layout, null); + TextView titleView = titleLayout.findViewById(R.id.title_text); + titleView.setText(R.string.list_of_graphics); // Set the text of the title. + listView.addHeaderView(titleView, getString(R.string.title), false); // Set header. + + // Goes to a new screen when you click on one of the list items. + // Dependent upon position of click. + listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView<?> parent, View view, int position, long id) { + mItems.get(position - listView.getHeaderViewsCount()) + .launchActivity(getApplicationContext()); + } + }); + } +}
\ No newline at end of file diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/ListViewAdapter.java b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/ListViewAdapter.java new file mode 100644 index 00000000..4fbadf2e --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/ListViewAdapter.java @@ -0,0 +1,46 @@ +package com.example.android.wearable.wear.wearaccessibilityapp; + +import android.content.Context; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.ImageView; +import android.widget.TextView; + +import java.util.List; + +public class ListViewAdapter<T extends Item> extends ArrayAdapter<T> { + private final LayoutInflater mInflater; + private List<T> mItems; + + public ListViewAdapter(@NonNull Context context, @NonNull List<T> items) { + super(context, R.layout.list_item_layout, items); + mInflater = LayoutInflater.from(context); + mItems = items; + } + + @NonNull + @Override + public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) { + Holder holder; + if (convertView == null) { + convertView = mInflater.inflate(R.layout.list_item_layout, parent, false); + holder = new Holder(); + holder.mTextView = convertView.findViewById(R.id.item_text); + holder.mImageView = convertView.findViewById(R.id.item_image); + convertView.setTag(holder); // Cache the holder for future use. + } else { + holder = (Holder) convertView.getTag(); + } + holder.mTextView.setText(mItems.get(position).getItemId()); + return convertView; + } + + private static class Holder { + TextView mTextView; + ImageView mImageView; + } +}
\ No newline at end of file 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 new file mode 100644 index 00000000..59b270c6 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/ListsActivity.java @@ -0,0 +1,51 @@ +package com.example.android.wearable.wear.wearaccessibilityapp; + +import android.os.Bundle; +import android.support.wearable.activity.WearableActivity; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.AdapterView; +import android.widget.ListView; +import android.widget.TextView; + +import java.util.ArrayList; +import java.util.List; + +public class ListsActivity extends WearableActivity { + private List<ListsItem> mItems; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_lists); + + // Create a list of items for adapter to display. + mItems = new ArrayList<>(); + mItems.add(new ListsItem(R.string.a_long_list, LongListActivity.class)); + mItems.add(new ListsItem(R.string.list_of_graphics, ListOfGraphicsActivity.class)); + + // Initialize an adapter and set it to ListView listView. + ListViewAdapter adapter = new ListViewAdapter(this, mItems); + final ListView listView = findViewById(R.id.list_view_lists); + listView.setAdapter(adapter); + + // Set header of listView to be the title from title_layout. + LayoutInflater inflater = LayoutInflater.from(this); + View titleLayout = inflater.inflate(R.layout.title_layout, null); + TextView titleView = titleLayout.findViewById(R.id.title_text); + titleView.setText(R.string.lists); + titleView.setOnClickListener(null); // make title non-clickable. + + listView.addHeaderView(titleView); + + // Goes to a new screen when you click on one of the list items. + // Dependent upon position of click. + listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView<?> parent, View view, int position, long id) { + mItems.get(position - listView.getHeaderViewsCount()) + .launchActivity(getApplicationContext()); + } + }); + } +}
\ No newline at end of file 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 new file mode 100644 index 00000000..0f00720b --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/ListsItem.java @@ -0,0 +1,23 @@ +package com.example.android.wearable.wear.wearaccessibilityapp; + +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) { + mItemId = itemId; + mClass = clazz; + } + + public int getItemId() { + return mItemId; + } + + public void launchActivity(Context context) { + context.startActivity(new Intent(context, mClass)); + } +}
\ No newline at end of file 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 new file mode 100644 index 00000000..6a0fa212 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/LongListActivity.java @@ -0,0 +1,149 @@ +package com.example.android.wearable.wear.wearaccessibilityapp; + +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.view.View; + +import com.example.android.wearable.wear.wearaccessibilityapp.LongListRecyclerViewAdapter.SwitchChangeListener; + +import java.util.ArrayList; +import java.util.List; + +public class LongListActivity extends WearableActivity { + private List<AppItem> mItems; + private LongListRecyclerViewAdapter mAdapter; + private Handler mHandler; + private int mPreviousLastVisibleItem; + private int mLastVisibleItem; + private boolean mFinishLoad; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_long_list); + + mHandler = new Handler(); + + // List of items to display within recyclerView (used by adapter). + mItems = new ArrayList<AppItem>(); + mItems.add(new AppItem(null, 0, SampleAppConstants.TITLE, null)); // for title + mItems.add(new AppItem(null, 0, SampleAppConstants.SWITCH, null)); // for switch widget + for (int i = 1; i <= 10; i++) { + mItems.add(new AppItem(getResources().getString(R.string.item_text, i), + R.drawable.heart_circle, SampleAppConstants.NORMAL, null)); + } + + // Custom adapter used so we can use custom layout for the rows within the list. + mAdapter = new LongListRecyclerViewAdapter(this, mItems, new SwitchChangeListener() { + @Override + public void onChange(boolean switchOn) { + WearableActionDrawer wearableActionDrawer = + findViewById(R.id.action_drawer_long_list); + + if(switchOn) { + wearableActionDrawer.setVisibility(View.VISIBLE); // Hide drawer. + } else { + wearableActionDrawer.setVisibility(View.INVISIBLE); // Hide drawer. + } + } + }); + WearableRecyclerView recyclerView = findViewById(R.id.recycler_view_long_list); + + recyclerView.setAdapter(mAdapter); // Set adapter to the recyclerView. + + // Uncomment if you want the action drawer to show while scrolling down. + // WearableActionDrawer mWearableActionDrawer= + // (WearableActionDrawer) findViewById(R.id.action_drawer_long_list); + // mWearableActionDrawer.setShouldPeekOnScrollDown(true); + + mPreviousLastVisibleItem = 0; // default + mLastVisibleItem = 0; + mFinishLoad = false; + + if (!(recyclerView.getLayoutManager() instanceof LinearLayoutManager)) { + return; // invalid layout manager + } + + final LinearLayoutManager layoutManager = (LinearLayoutManager) recyclerView + .getLayoutManager(); + + recyclerView.addOnScrollListener(new WearableRecyclerView.OnScrollListener() { + @Override + public void onScrolled(RecyclerView recyclerView, int dx, int dy) { + super.onScrolled(recyclerView, dx, dy); + mLastVisibleItem = layoutManager.findLastVisibleItemPosition(); + if (!mFinishLoad) { + int count = layoutManager.getItemCount(); // total items in the recycler view + + // Do not notify LongListActivity if no NEW items have been displayed. + if (mLastVisibleItem <= mPreviousLastVisibleItem) { + return; + } + + // Do not notify LongListActivity if not yet scrolled to threshold. + if (mLastVisibleItem < count - 1) { + return; + } + + if (mLastVisibleItem % 10 == 2 && mLastVisibleItem != 2) { + return; + } + + // End of list, no more loading. + if (mLastVisibleItem >= SampleAppConstants.END_OF_LONG_LIST) { + mFinishLoad = true; // we are done loading more items. + addFooter(); + return; + } + + // Load more items + addData(); + + // To check if new items should be displayed or not. + mPreviousLastVisibleItem = mLastVisibleItem; + } + } + }); + } + + /** + * Add items to List<AppItem> items. + * More items requested by adapter (used to load list in batches of 10). + */ + public void addData() { + // Add progress bar to list. + mItems.add(new AppItem(null, 0, SampleAppConstants.PROGRESS_BAR, null)); + mAdapter.notifyItemInserted(mItems.size() - 1); + + // Delay for 1000 milliseconds and then execute below code. + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + // Remove progress after the delay. + mItems.remove(mItems.size() - 1); + + // Add ten items to List<AppItem> items. + int listSize = mItems.size(); + for (int i = listSize - 1; i <= listSize + 8; i++) { + mItems.add(new AppItem(getResources().getString(R.string.item_text, i), + R.drawable.heart_circle, SampleAppConstants.NORMAL, null)); + } + mAdapter.notifyDataSetChanged(); + } + }, 1000); + } + + /** + * Add footer to List<AppItem> items. + * Requested by adapter (called at the end of the list). + */ + public void addFooter() { + mItems.add(new AppItem(null, 0, SampleAppConstants.HEADER_FOOTER, null)); // add footer + mAdapter.notifyItemInserted(mItems.size() - 1); + } +}
\ No newline at end of file diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/LongListRecyclerViewAdapter.java b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/LongListRecyclerViewAdapter.java new file mode 100644 index 00000000..8eea8490 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/LongListRecyclerViewAdapter.java @@ -0,0 +1,149 @@ +package com.example.android.wearable.wear.wearaccessibilityapp; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.support.v7.widget.RecyclerView.ViewHolder; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.Switch; +import android.widget.TextView; + +import java.util.List; + +public class LongListRecyclerViewAdapter extends + RecyclerView.Adapter<LongListRecyclerViewAdapter.Holder> { + + // For custom listener. + public interface SwitchChangeListener { + + void onChange(boolean switchOn); + } + + private final LayoutInflater mInflater; + private List<AppItem> mItems; + private SwitchChangeListener mSwitchChangeListener; + private Switch mSwitchWidget; + private Context mContext; + + public LongListRecyclerViewAdapter(Context context, List<AppItem> items, + SwitchChangeListener switchChangeListener) { + mContext = context; + mItems = items; + mInflater = LayoutInflater.from(context); + + // Forces activity to implement a SwitchChangeListener + mSwitchChangeListener = switchChangeListener; + } + + @Override + public Holder onCreateViewHolder(ViewGroup parent, int viewType) { + final View view; + switch (viewType) { + case SampleAppConstants.TITLE: + // Programmatically set the text of the title here. + view = mInflater.inflate(R.layout.title_layout, parent, false); + TextView titleView = view.findViewById(R.id.title_text); + titleView.setText(R.string.a_long_list); + break; + case SampleAppConstants.SWITCH: + // Reference the switch widget's text and view. + view = mInflater.inflate(R.layout.long_list_switch_widget_layout, parent, false); + TextView switchText = view.findViewById(R.id.switch_text); + switchText.setText(R.string.bottom_action_drawer); + + mSwitchWidget = view.findViewById(R.id.switch_widget); + + view.setContentDescription(mContext.getResources(). + getString(R.string.switch_bottom_action_drawer, + getSwitchToggleString(mSwitchWidget.isChecked()))); + + // Set the OnClickListener (Observer pattern used here). + view.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + mSwitchWidget.setChecked(!(mSwitchWidget.isChecked())); + if (mSwitchChangeListener != null) { + mSwitchChangeListener.onChange(mSwitchWidget.isChecked()); + } + view.setContentDescription(mContext.getResources(). + getString(R.string.switch_bottom_action_drawer, + getSwitchToggleString(mSwitchWidget.isChecked()))); + } + }); + break; + case SampleAppConstants.HEADER_FOOTER: + view = mInflater.inflate(R.layout.header_footer_layout, parent, false); + break; + case SampleAppConstants.PROGRESS_BAR: + view = mInflater.inflate(R.layout.progress_bar_layout, parent, false); + break; + case SampleAppConstants.NORMAL: + view = mInflater.inflate(R.layout.shifted_app_item_layout, parent, false); + break; + default: + view = mInflater.inflate(R.layout.shifted_app_item_layout, parent, false); + break; + } + return new Holder(view); + } + + @Override + public void onBindViewHolder(Holder holder, int position) { + if (mItems.isEmpty()) { + return; + } + + AppItem item = mItems.get(position); + int itemViewType = item.getViewType(); + + // Return - Don't want to bind AppItem item info because item is null. + if (itemViewType != SampleAppConstants.NORMAL) { + return; + } + + holder.bind(item); + } + + @Override + public int getItemCount() { + return mItems.size(); + } + + @Override + public int getItemViewType(int position) { + return mItems.get(position).getViewType(); + } + + /** + * Used to set Switch widget's content description dynamically. + * + * @param isChecked + * @return "on" if true, "off" otherwise + */ + public String getSwitchToggleString(boolean isChecked) { + return isChecked ? mContext.getString(R.string.on) : mContext.getString(R.string.off); + } + + // class-specific ViewHolder + static class Holder extends ViewHolder { + TextView mTextView; + ImageView mImageView; + + public Holder(final View itemView) { + super(itemView); + mTextView = itemView.findViewById(R.id.shifted_icon_text_view); + mImageView = itemView.findViewById(R.id.shifted_icon_image_view); + } + + /** + * Bind appItem info to main screen (displays the item). + */ + public void bind(AppItem item) { + mTextView.setText(item.getItemName()); + mImageView.setImageResource(item.getImageId()); + } + } +}
\ No newline at end of file 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 new file mode 100644 index 00000000..b8b7d023 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/MainActivity.java @@ -0,0 +1,40 @@ +package com.example.android.wearable.wear.wearaccessibilityapp; + +import android.os.Bundle; +import android.support.wearable.activity.WearableActivity; +import android.support.wearable.view.WearableRecyclerView; + +import java.util.ArrayList; +import java.util.List; + +public class MainActivity extends WearableActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + + //Menu items + List<AppItem> items = new ArrayList<AppItem>(); + items.add(new AppItem(getString(R.string.lists), + R.drawable.lists_circle, ListsActivity.class)); + items.add(new AppItem(getString(R.string.dialogs), + R.drawable.dialogs_circle, DialogsActivity.class)); + items.add(new AppItem(getString(R.string.progress), + R.drawable.progress_circle, ProgressActivity.class)); + items.add(new AppItem(getString(R.string.controls), + R.drawable.controls_circle, ControlsActivity.class)); + items.add(new AppItem(getString(R.string.notifications), + R.drawable.notifications_circle, NotificationsActivity.class)); + items.add(new AppItem(getString(R.string.accessibility), + R.drawable.accessibility_circle, AccessibilityActivity.class)); + + MenuRecyclerViewAdapter appListAdapter = new MenuRecyclerViewAdapter(this, items); + + WearableRecyclerView recyclerView = findViewById(R.id.main_recycler_view); + recyclerView.setAdapter(appListAdapter); + recyclerView + .setLayoutManager(new MyLauncherChildLayoutManager(this)); // For curved layout. + recyclerView.setCenterEdgeItems(true); + } +}
\ No newline at end of file diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/MenuRecyclerViewAdapter.java b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/MenuRecyclerViewAdapter.java new file mode 100644 index 00000000..68df9f68 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/MenuRecyclerViewAdapter.java @@ -0,0 +1,87 @@ +package com.example.android.wearable.wear.wearaccessibilityapp; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.support.v7.widget.RecyclerView.ViewHolder; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import java.util.List; + +public class MenuRecyclerViewAdapter extends + RecyclerView.Adapter<MenuRecyclerViewAdapter.Holder> { + + private final Context mContext; + private final LayoutInflater mInflater; + private List<AppItem> mItems; + + public MenuRecyclerViewAdapter(Context context, List<AppItem> items) { + this.mContext = context; + this.mItems = items; + mInflater = LayoutInflater.from(context); + } + + @Override + public Holder onCreateViewHolder(ViewGroup parent, int viewType) { + /* Add check for viewType here if used. + See LongListRecyclerViewAdapter for an example. */ + + return new Holder(mInflater.inflate(R.layout.app_item_layout, parent, false)); + } + + @Override + public void onBindViewHolder(Holder holder, int position) { + if (mItems.isEmpty()) { + return; + } + final AppItem item = mItems.get(position); + + if (item.getViewType() == SampleAppConstants.HEADER_FOOTER) { + return; + } + + holder.bind(item); + + // Start new activity on click of specific item. + final int pos = position; + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + mItems.get(pos).launchActivity(mContext); + } + }); + } + + @Override + public int getItemCount() { + return mItems.size(); + } + + @Override + public int getItemViewType(int position) { + return mItems.get(position).getViewType(); + } + + + static class Holder extends ViewHolder { + TextView mTextView; + ImageView mImageView; + + public Holder(final View itemView) { + super(itemView); + mTextView = itemView.findViewById(R.id.icon_text_view); + mImageView = itemView.findViewById(R.id.icon_image_view); + } + + /** + * Bind appItem info to main screen (displays the item). + */ + public void bind(AppItem item) { + mTextView.setText(item.getItemName()); + mImageView.setImageResource(item.getImageId()); + } + } +}
\ No newline at end of file diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/MessagingIntentService.java b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/MessagingIntentService.java new file mode 100644 index 00000000..394c5d1b --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/MessagingIntentService.java @@ -0,0 +1,238 @@ +package com.example.android.wearable.wear.wearaccessibilityapp; + +import android.app.IntentService; +import android.app.Notification; +import android.app.PendingIntent; +import android.content.Intent; +import android.graphics.BitmapFactory; +import android.os.Bundle; +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.util.Log; + +/** + * Asynchronously handles updating messaging app posts (and active Notification) with replies from + * user in a conversation. Notification for social app use MessagingStyle. + */ +public class MessagingIntentService extends IntentService { + + private static final String TAG = "MessagingIntentService"; + + public static final String ACTION_REPLY = + "com.example.android.wearable.wear.wearnotifications.handlers.action.REPLY"; + + public static final String EXTRA_REPLY = + "com.example.android.wearable.wear.wearnotifications.handlers.extra.REPLY"; + + + public MessagingIntentService() { + super("MessagingIntentService"); + } + + @Override + protected void onHandleIntent(Intent intent) { + Log.d(TAG, "onHandleIntent(): " + intent); + + if (intent != null) { + final String action = intent.getAction(); + if (ACTION_REPLY.equals(action)) { + handleActionReply(getMessage(intent)); + } + } + } + + /** + * Handles action for replying to messages from the notification. + */ + private void handleActionReply(CharSequence replyCharSequence) { + Log.d(TAG, "handleActionReply(): " + replyCharSequence); + + if (replyCharSequence != null) { + + // TODO: Asynchronously save your message to Database and servers. + + /* + * You have two options for updating your notification (this class uses approach #2): + * + * 1. Use a new NotificationCompatBuilder to create the Notification. This approach + * requires you to get *ALL* the information that existed in the previous + * Notification (and updates) and pass it to the builder. This is the approach used in + * the MainActivity. + * + * 2. Use the original NotificationCompatBuilder to create the Notification. This + * approach requires you to store a reference to the original builder. The benefit is + * you only need the new/updated information. In our case, the reply from the user + * which we already have here. + * + * IMPORTANT NOTE: You shouldn't save/modify the resulting Notification object using + * its member variables and/or legacy APIs. If you want to retain anything from update + * to update, retain the Builder as option 2 outlines. + */ + + // Retrieves NotificationCompat.Builder used to create initial Notification + NotificationCompat.Builder notificationCompatBuilder = + GlobalNotificationBuilder.getNotificationCompatBuilderInstance(); + + // Recreate builder from persistent state if app process is killed + if (notificationCompatBuilder == null) { + // Note: New builder set globally in the method + notificationCompatBuilder = recreateBuilderWithMessagingStyle(); + } + + + // Since we are adding to the MessagingStyle, we need to first retrieve the + // current MessagingStyle from the Notification itself. + Notification notification = notificationCompatBuilder.build(); + MessagingStyle messagingStyle = + NotificationCompat.MessagingStyle + .extractMessagingStyleFromNotification(notification); + + // Add new message to the MessagingStyle + messagingStyle.addMessage(replyCharSequence, System.currentTimeMillis(), null); + + // Updates the Notification + notification = notificationCompatBuilder + .setStyle(messagingStyle) + .build(); + + // Pushes out the updated Notification + NotificationManagerCompat notificationManagerCompat = + NotificationManagerCompat.from(getApplicationContext()); + notificationManagerCompat.notify(NotificationsActivity.NOTIFICATION_ID, notification); + } + } + + /* + * Extracts CharSequence created from the RemoteInput associated with the Notification. + */ + private CharSequence getMessage(Intent intent) { + Bundle remoteInput = RemoteInput.getResultsFromIntent(intent); + if (remoteInput != null) { + return remoteInput.getCharSequence(EXTRA_REPLY); + } + return null; + } + + /* + * This recreates the notification from the persistent state in case the app process was killed. + * It is basically the same code for creating the Notification from MainActivity. + */ + private NotificationCompat.Builder recreateBuilderWithMessagingStyle() { + + // Main steps for building a MESSAGING_STYLE notification (for more detailed comments on + // building this notification, check StandaloneMainActivity.java):: + // 0. Get your data + // 1. Build the MESSAGING_STYLE + // 2. Add support for Wear 1.+ + // 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) + MockDatabase.MessagingStyleCommsAppData messagingStyleCommsAppData = + MockDatabase.getMessagingStyleData(); + + // 1. Build the Notification.Style (MESSAGING_STYLE) + String contentTitle = messagingStyleCommsAppData.getContentTitle(); + + MessagingStyle messagingStyle = + new NotificationCompat.MessagingStyle(messagingStyleCommsAppData.getReplayName()) + .setConversationTitle(contentTitle); + + // Adds all Messages + for (MessagingStyle.Message message : messagingStyleCommsAppData.getMessages()) { + messagingStyle.addMessage(message); + } + + + // 2. Add support for Wear 1.+. + String fullMessageForWearVersion1 = messagingStyleCommsAppData.getFullConversation(); + + Notification chatHistoryForWearV1 = new NotificationCompat.Builder(getApplicationContext()) + .setStyle(new NotificationCompat.BigTextStyle().bigText(fullMessageForWearVersion1)) + .setContentTitle(contentTitle) + .setSmallIcon(R.drawable.watch) + .setContentText(fullMessageForWearVersion1) + .build(); + + // Adds page with all text to support Wear 1.+. + NotificationCompat.WearableExtender wearableExtenderForWearVersion1 = + new NotificationCompat.WearableExtender() + .setHintContentIntentLaunchesActivity(true) + .addPage(chatHistoryForWearV1); + + // 3. Set up main Intent for notification + Intent notifyIntent = new Intent(this, MessagingMainActivity.class); + + PendingIntent mainPendingIntent = + PendingIntent.getActivity( + this, + 0, + notifyIntent, + PendingIntent.FLAG_UPDATE_CURRENT + ); + + + // 4. Set up a RemoteInput Action, so users can input (keyboard, drawing, voice) directly + // from the notification without entering the app. + String replyLabel = getString(R.string.reply_label); + RemoteInput remoteInput = new RemoteInput.Builder(MessagingIntentService.EXTRA_REPLY) + .setLabel(replyLabel) + .build(); + + Intent replyIntent = new Intent(this, MessagingIntentService.class); + replyIntent.setAction(MessagingIntentService.ACTION_REPLY); + PendingIntent replyActionPendingIntent = PendingIntent.getService(this, 0, replyIntent, 0); + + // Enable action to appear inline on Wear 2.0 (24+). This means it will appear over the + // lower portion of the Notification for easy action (only possible for one action). + final NotificationCompat.Action.WearableExtender inlineActionForWear2_0 = + new NotificationCompat.Action.WearableExtender() + .setHintDisplayActionInline(true) + .setHintLaunchesActivity(false); + + NotificationCompat.Action replyAction = + new NotificationCompat.Action.Builder( + R.drawable.reply, + replyLabel, + replyActionPendingIntent) + .addRemoteInput(remoteInput) + // Allows system to generate replies by context of conversation + .setAllowGeneratedReplies(true) + // Add WearableExtender to enable inline actions + .extend(inlineActionForWear2_0) + .build(); + + + // 5. Build and issue the notification + NotificationCompat.Builder notificationCompatBuilder = + new NotificationCompat.Builder(getApplicationContext()); + + GlobalNotificationBuilder.setNotificationCompatBuilderInstance(notificationCompatBuilder); + + // Builds and issues notification + notificationCompatBuilder + .setStyle(messagingStyle) + .setContentTitle(contentTitle) + .setContentText(messagingStyleCommsAppData.getContentText()) + .setSmallIcon(R.drawable.watch) + .setLargeIcon(BitmapFactory.decodeResource( + getResources(), + R.drawable.avatar)) + .setContentIntent(mainPendingIntent) + .setSubText(Integer.toString(messagingStyleCommsAppData.getNumberOfNewMessages())) + .addAction(replyAction) + .setCategory(Notification.CATEGORY_MESSAGE) + .setPriority(Notification.PRIORITY_HIGH) + .setVisibility(Notification.VISIBILITY_PRIVATE) + .extend(wearableExtenderForWearVersion1); + + for (String name : messagingStyleCommsAppData.getParticipants()) { + notificationCompatBuilder.addPerson(name); + } + + return notificationCompatBuilder; + } +}
\ No newline at end of file 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 new file mode 100644 index 00000000..6f8b9672 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/MessagingMainActivity.java @@ -0,0 +1,25 @@ +package com.example.android.wearable.wear.wearaccessibilityapp; + +import android.app.Activity; +import android.app.NotificationManager; +import android.content.Context; +import android.os.Bundle; + +/** + * Template class meant to include functionality for your Messaging App. (This project's main focus + * is on Notification Styles.) + */ +public class MessagingMainActivity extends Activity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_messaging_main); + + // Cancel Notification + NotificationManager notificationManager = + (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); + + notificationManager.cancel(NotificationsActivity.NOTIFICATION_ID); + } +}
\ No newline at end of file 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 new file mode 100644 index 00000000..1b43c345 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/MockDatabase.java @@ -0,0 +1,131 @@ +package com.example.android.wearable.wear.wearaccessibilityapp; + +import android.support.v4.app.NotificationCompat.MessagingStyle; + +import java.util.ArrayList; + +/** + * Mock data for each of the Notification Style Demos. + */ +public final class MockDatabase { + + public static MessagingStyleCommsAppData getMessagingStyleData() { + return MessagingStyleCommsAppData.getInstance(); + } + + /** + * Represents data needed for MessagingStyle Notification. + */ + public static class MessagingStyleCommsAppData { + + private static MessagingStyleCommsAppData sInstance = null; + + // Standard notification values + private String mContentTitle; + private String mContentText; + + // Style notification values + private ArrayList<MessagingStyle.Message> mMessages; + // Basically, String of all mMessages + private String mFullConversation; + // Name preferred when replying to chat + private String mReplayName; + private int mNumberOfNewMessages; + private ArrayList<String> mParticipants; + + public static MessagingStyleCommsAppData getInstance() { + if (sInstance == null) { + sInstance = getSync(); + } + return sInstance; + } + + private static synchronized MessagingStyleCommsAppData getSync() { + if (sInstance == null) { + sInstance = new MessagingStyleCommsAppData(); + } + + return sInstance; + } + + private MessagingStyleCommsAppData() { + // Standard notification values + // Content for API <24 (M and below) devices + mContentTitle = "2 Messages w/ Famous McFamously"; + mContentText = "Dude! ... You know I am a Pesce-pescetarian. :P"; + + // Style notification values + + // For each message, you need the timestamp, in this case, we are using arbitrary ones. + long currentTime = System.currentTimeMillis(); + + mMessages = new ArrayList<>(); + mMessages.add(new MessagingStyle.Message( + "What are you doing tonight?", currentTime - 4000, "Famous")); + mMessages.add(new MessagingStyle.Message( + "I don't know, dinner maybe?", currentTime - 3000, null)); + 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( + "You know I am a Pesce-pescetarian. :P", currentTime, "Famous")); + + + // String version of the mMessages above + mFullConversation = "Famous: What are you doing tonight?\n\n" + + "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: You know I am a Pesce-pescetarian. :P\n\n"; + + mNumberOfNewMessages = 2; + + // Name preferred when replying to chat + mReplayName = "Me"; + + // If the phone is in "Do not disturb mode, the user will still be notified if + // the user(s) is starred as a favorite. + mParticipants = new ArrayList<>(); + mParticipants.add("Famous McFamously"); + + } + + public String getContentTitle() { + return mContentTitle; + } + + public String getContentText() { + return mContentText; + } + + public ArrayList<MessagingStyle.Message> getMessages() { + return mMessages; + } + + public String getFullConversation() { + return mFullConversation; + } + + public String getReplayName() { + return mReplayName; + } + + public int getNumberOfNewMessages() { + return mNumberOfNewMessages; + } + + public ArrayList<String> getParticipants() { + return mParticipants; + } + + @Override + public String toString() { + return getFullConversation(); + } + } +}
\ No newline at end of file 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/MyLauncherChildLayoutManager.java new file mode 100644 index 00000000..5c45af2b --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/MyLauncherChildLayoutManager.java @@ -0,0 +1,36 @@ +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.view.View; + +public class MyLauncherChildLayoutManager extends CurvedChildLayoutManager { + + /** + * 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); + + // 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); + + child.setScaleX(1 - progressToCenter); + child.setScaleY(1 - progressToCenter); + } +}
\ No newline at end of file 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 new file mode 100644 index 00000000..7b857475 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/NotificationsActivity.java @@ -0,0 +1,239 @@ +package com.example.android.wearable.wear.wearaccessibilityapp; + +import android.app.Notification; +import android.app.PendingIntent; +import android.content.Intent; +import android.graphics.BitmapFactory; +import android.os.Bundle; +import android.preference.Preference; +import android.preference.Preference.OnPreferenceChangeListener; +import android.preference.Preference.OnPreferenceClickListener; +import android.preference.PreferenceFragment; +import android.preference.SwitchPreference; +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.util.Log; + +public class NotificationsActivity extends WearableActivity { + + public static final int NOTIFICATION_ID = 888; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + // Display the fragment as the main content. + getFragmentManager().beginTransaction() + .replace(android.R.id.content, new NotificationsPrefsFragment()) + .commit(); + } + + public static class NotificationsPrefsFragment extends PreferenceFragment { + + private static final String TAG = "NotificationsActivity"; + private NotificationManagerCompat mNotificationManagerCompat; + private boolean mActionOn; //if true, displays in-line action + private boolean mAvatarOn; //if true, displays avatar of messenger + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + // Load the preferences from an XML resource + addPreferencesFromResource(R.xml.prefs_notifications); + + mNotificationManagerCompat = NotificationManagerCompat.from(getActivity()); + + final SwitchPreference mActionSwitchPref = (SwitchPreference) findPreference( + getString(R.string.key_pref_action)); + final SwitchPreference mAvatarSwitchPref = (SwitchPreference) findPreference( + getString(R.string.key_pref_avatar)); + Preference mPushNotificationPref = findPreference( + getString(R.string.key_pref_push_notification)); + + initInLineAction(mActionSwitchPref); + initAvatar(mAvatarSwitchPref); + initPushNotification(mPushNotificationPref); + } + + public void initInLineAction(SwitchPreference switchPref) { + switchPref.setChecked(true); + mActionOn = switchPref.isChecked(); + switchPref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { + @Override + public boolean onPreferenceChange(Preference preference, Object newValue) { + mActionOn = (Boolean) newValue; + return true; + } + }); + } + + public void initAvatar(SwitchPreference switchPref) { + switchPref.setChecked(true); + mAvatarOn = switchPref.isChecked(); + switchPref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { + @Override + public boolean onPreferenceChange(Preference preference, Object newValue) { + mAvatarOn = (Boolean) newValue; + return true; + } + }); + } + + public void initPushNotification(Preference pref) { + pref.setOnPreferenceClickListener(new OnPreferenceClickListener() { + @Override + public boolean onPreferenceClick(Preference preference) { + generateMessagingStyleNotification(); + return true; + } + }); + } + + /* + * Generates a MESSAGING_STYLE Notification that supports both Wear 1.+ and Wear 2.0. For + * devices on API level 24 (Wear 2.0) and after, displays MESSAGING_STYLE. Otherwise, + * displays a basic BIG_TEXT_STYLE. + * + * IMPORTANT NOTE: + * Notification Styles behave slightly different on Wear 2.0 when they are launched by a + * native/local Wear app, i.e., they will NOT expand when the user taps them but will + * instead take the user directly into the local app for the richest experience. In + * contrast, a bridged Notification launched from the phone will expand with the style + * details (whether there is a local app or not). + * + * If you want to enable an action on your Notification without launching the app, you can + * do so with the setHintDisplayActionInline() feature (shown below), but this only allows + * one action. + * + * If you wish to replicate the original experience of a bridged notification, please + * review the generateBigTextStyleNotification() method above to see how. + */ + private void generateMessagingStyleNotification() { + 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 + + // 0. Get your data (everything unique per Notification) + MockDatabase.MessagingStyleCommsAppData messagingStyleCommsAppData = + MockDatabase.getMessagingStyleData(); + + // 1. Build the Notification.Style (MESSAGING_STYLE) + String contentTitle = messagingStyleCommsAppData.getContentTitle(); + + MessagingStyle messagingStyle = new NotificationCompat + .MessagingStyle(messagingStyleCommsAppData.getReplayName()) + // You could set a different title to appear when the messaging style + // is supported on device (24+) if you wish. In our case, we use the same + // title. + .setConversationTitle(contentTitle); + + // Adds all Messages + // Note: Messages include the text, timestamp, and sender + for (MessagingStyle.Message message : messagingStyleCommsAppData.getMessages()) { + messagingStyle.addMessage(message); + } + + // 2. 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) + // directly from the notification without entering the app. + + // Create the RemoteInput specifying this key. + String replyLabel = getString(R.string.reply_label); + RemoteInput remoteInput = new RemoteInput.Builder(MessagingIntentService.EXTRA_REPLY) + .setLabel(replyLabel) + .build(); + + // Create PendingIntent for service that handles input. + Intent replyIntent = new Intent(getActivity(), MessagingIntentService.class); + replyIntent.setAction(MessagingIntentService.ACTION_REPLY); + PendingIntent replyActionPendingIntent = + PendingIntent.getService(getActivity(), 0, replyIntent, 0); + + // Enable action to appear inline on Wear 2.0 (24+). This means it will appear over the + // lower portion of the Notification for easy action (only possible for one action). + final NotificationCompat.Action.WearableExtender inlineActionForWear2 = + new NotificationCompat.Action.WearableExtender() + .setHintDisplayActionInline(mActionOn) + .setHintLaunchesActivity(false); + + NotificationCompat.Action replyAction = new NotificationCompat.Action.Builder( + R.drawable.reply, + replyLabel, + replyActionPendingIntent) + .addRemoteInput(remoteInput) + // Allows system to generate replies by context of conversation + .setAllowGeneratedReplies(true) + // Add WearableExtender to enable inline actions + .extend(inlineActionForWear2) + .build(); + + + // 4. 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). + + NotificationCompat.Builder notificationCompatBuilder = + new NotificationCompat.Builder(getActivity()); + + GlobalNotificationBuilder + .setNotificationCompatBuilderInstance(notificationCompatBuilder); + + // Builds and issues notification + notificationCompatBuilder + // MESSAGING_STYLE sets title and content for Wear 1.+ and Wear 2.0 devices. + .setStyle(messagingStyle) + .setContentTitle(contentTitle) + .setContentText(messagingStyleCommsAppData.getContentText()) + .setSmallIcon(R.drawable.watch) + .setContentIntent(mainPendingIntent) + + // 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) + + // Hides content on the lock-screen + .setVisibility(Notification.VISIBILITY_PRIVATE); + + notificationCompatBuilder.setLargeIcon(BitmapFactory.decodeResource(getResources(), + mAvatarOn ? R.drawable.avatar : R.drawable.watch)); + + + // If the phone is in "Do not disturb mode, the user will still be notified if + // the sender(s) is starred as a favorite. + for (String name : messagingStyleCommsAppData.getParticipants()) { + notificationCompatBuilder.addPerson(name); + } + + Notification notification = notificationCompatBuilder.build(); + mNotificationManagerCompat.notify(NOTIFICATION_ID, notification); + + // Close app to demonstrate notification in steam. + getActivity().finish(); + } + } +}
\ No newline at end of file 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 new file mode 100644 index 00000000..152735a4 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/OpenOnPhoneAnimationActivity.java @@ -0,0 +1,41 @@ +package com.example.android.wearable.wear.wearaccessibilityapp; + +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.widget.ImageView; + +public class OpenOnPhoneAnimationActivity extends WearableActivity { + private AnimationCallback mAnimationCallback; + private AnimatedVectorDrawable mAnimatedVectorDrawablePhone; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_open_on_phone_animation); + + mAnimationCallback = new AnimationCallback() { + @Override + public void onAnimationEnd(Drawable drawable) { + super.onAnimationEnd(drawable); + // Go back to main Dialogs screen after animation. + finish(); + } + }; + + // Play 'swipe left' animation only once. + ImageView phoneImage = findViewById(R.id.open_on_phone_animation_image); + mAnimatedVectorDrawablePhone = + (AnimatedVectorDrawable) phoneImage.getDrawable(); + mAnimatedVectorDrawablePhone.registerAnimationCallback(mAnimationCallback); + mAnimatedVectorDrawablePhone.start(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mAnimatedVectorDrawablePhone.unregisterAnimationCallback(mAnimationCallback); + } +}
\ No newline at end of file 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 new file mode 100644 index 00000000..538a039b --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/PhotoCarouselActivity.java @@ -0,0 +1,42 @@ +package com.example.android.wearable.wear.wearaccessibilityapp; + +import android.content.Intent; +import android.os.Bundle; +import android.support.wearable.activity.WearableActivity; +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.ImageView; + +public class PhotoCarouselActivity extends WearableActivity implements OnClickListener { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_photo_carousel); + + // Grab reference to each image in activity_photo_carousel. + ImageView catImage = findViewById(R.id.cat_image); + catImage.setTag(R.drawable.cats); + catImage.setOnClickListener(this); + + ImageView dogImage = findViewById(R.id.dog_image); + dogImage.setTag(R.drawable.dog); + dogImage.setOnClickListener(this); + + ImageView hamsterImage = findViewById(R.id.hamster_image); + hamsterImage.setTag(R.drawable.hamster); + hamsterImage.setOnClickListener(this); + + ImageView birdImage = findViewById(R.id.bird_image); + birdImage.setTag(R.drawable.birds); + birdImage.setOnClickListener(this); + } + + @Override + public void onClick(View v) { + Intent intent = new Intent(getApplicationContext(), ZoomImageActivity.class); + intent.putExtra(getString(R.string.intent_extra_image), + (int) v.getTag()); + startActivity(intent); + } +}
\ No newline at end of file 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 new file mode 100644 index 00000000..03e4c024 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/ProgressActivity.java @@ -0,0 +1,51 @@ +package com.example.android.wearable.wear.wearaccessibilityapp; + +import android.os.Bundle; +import android.support.wearable.activity.WearableActivity; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.AdapterView; +import android.widget.ListView; +import android.widget.TextView; + +import java.util.ArrayList; +import java.util.List; + +public class ProgressActivity extends WearableActivity { + private List<ListsItem> mItems; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_lists); + + // Create a list of items for adapter to display. + mItems = new ArrayList<>(); + mItems.add(new ListsItem(R.string.full_screen, FullScreenActivity.class)); + mItems.add(new ListsItem(R.string.in_line, InLineActivity.class)); + + // Initialize an adapter and set it to ListView listView. + ListViewAdapter adapter = new ListViewAdapter(this, mItems); + final ListView listView = findViewById(R.id.list_view_lists); + listView.setAdapter(adapter); + + // Set header of listView to be the title from title_layout. + LayoutInflater inflater = LayoutInflater.from(this); + View titleLayout = inflater.inflate(R.layout.title_layout, null); + TextView titleView = titleLayout.findViewById(R.id.title_text); + titleView.setText(R.string.progress); + titleView.setOnClickListener(null); // make title non-clickable. + + listView.addHeaderView(titleView); + + // Goes to a new screen when you click on one of the list items. + // Dependent upon position of click. + listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView<?> parent, View view, int position, long id) { + mItems.get(position - listView.getHeaderViewsCount()) + .launchActivity(getApplicationContext()); + } + }); + } +} diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/ProgressBarPreference.java b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/ProgressBarPreference.java new file mode 100644 index 00000000..4c14fd3d --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/ProgressBarPreference.java @@ -0,0 +1,28 @@ +package com.example.android.wearable.wear.wearaccessibilityapp; + +import android.content.Context; +import android.preference.Preference; +import android.util.AttributeSet; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +public class ProgressBarPreference extends Preference { + + public ProgressBarPreference(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public ProgressBarPreference(Context context) { + super(context); + } + + + @Override + protected View onCreateView(ViewGroup parent) { + super.onCreateView(parent); + LayoutInflater inflater = (LayoutInflater) getContext() + .getSystemService(Context.LAYOUT_INFLATER_SERVICE); + return inflater.inflate(R.layout.progress_bar_with_text_layout, parent, false); + } +} 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 new file mode 100644 index 00000000..88db7d69 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/RadioListActivity.java @@ -0,0 +1,17 @@ +package com.example.android.wearable.wear.wearaccessibilityapp; + +import android.os.Bundle; +import android.support.wearable.activity.WearableActivity; +import android.widget.TextView; + +public class RadioListActivity extends WearableActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_radio_list); + + TextView titleView = findViewById(R.id.radio_list_title); + titleView.setText(R.string.radio_list); + } +}
\ No newline at end of file diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/SampleAppConstants.java b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/SampleAppConstants.java new file mode 100644 index 00000000..0b86bb25 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/SampleAppConstants.java @@ -0,0 +1,35 @@ +package com.example.android.wearable.wear.wearaccessibilityapp; + +public class SampleAppConstants { + /** + * {@value #NORMAL} Used when sending information to an Adapter class + */ + public static final int NORMAL = 1; + + /** + * {@value #HEADER_FOOTER} Used when sending information to an Adapter class + */ + public static final int HEADER_FOOTER = 2; + + /** + * {@value #PROGRESS_BAR} Used when sending information to an Adapter class + */ + public static final int PROGRESS_BAR = 3; + + /** + * {@value #SWITCH} Used when sending information to an Adapter class + */ + public static final int SWITCH = 4; + + /** + * {@value #TITLE} Used when sending information to an Adapter class + */ + public static final int TITLE = 5; + + /** + * {@value #END_OF_LONG_LIST} + * Used to check if at the end of long list + * Used in LongListRecyclerviewAdapter + */ + public static final int END_OF_LONG_LIST = 45; +}
\ No newline at end of file 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 new file mode 100644 index 00000000..2e586cdf --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/ZoomImageActivity.java @@ -0,0 +1,25 @@ +package com.example.android.wearable.wear.wearaccessibilityapp; + +import android.content.res.Resources.NotFoundException; +import android.os.Bundle; +import android.support.wearable.activity.WearableActivity; +import android.widget.ImageView; + +public class ZoomImageActivity extends WearableActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_zoom_image); + + // Check if integer was actually given. + if(!(getIntent().hasExtra(getString(R.string.intent_extra_image)))) { + throw new NotFoundException("Expecting extras"); + } + + // Grab the resource id from extras and set the image resource. + int value = getIntent().getIntExtra(getString(R.string.intent_extra_image), 0); + ImageView expandedImage = findViewById(R.id.expanded_image); + expandedImage.setImageResource(value); + } +}
\ No newline at end of file diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_swipe_left_long_g_animation_interpolator_0.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_swipe_left_long_g_animation_interpolator_0.xml new file mode 100644 index 00000000..4a5fde9f --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_swipe_left_long_g_animation_interpolator_0.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8"?> +<pathInterpolator + xmlns:android="http://schemas.android.com/apk/res/android" + android:pathData="M 0.0,0.0 c 0.33333333,0.0 0.83333333333,1.0 1.0,1.0" /> diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_swipe_left_long_g_animation_interpolator_1.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_swipe_left_long_g_animation_interpolator_1.xml new file mode 100644 index 00000000..c421f9e9 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_swipe_left_long_g_animation_interpolator_1.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8"?> +<pathInterpolator + xmlns:android="http://schemas.android.com/apk/res/android" + android:pathData="M 0.0,0.0 c 0.16666666667,0.0 0.83333333333,1.0 1.0,1.0" /> diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_swipe_left_long_g_animation_interpolator_10.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_swipe_left_long_g_animation_interpolator_10.xml new file mode 100644 index 00000000..dc7ff8c4 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_swipe_left_long_g_animation_interpolator_10.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8"?> +<pathInterpolator + xmlns:android="http://schemas.android.com/apk/res/android" + android:pathData="M 0.0,0.0 c 0.16666666667,0.16666666667 0.2,1.0 1.0,1.0" /> diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_swipe_left_long_g_animation_interpolator_11.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_swipe_left_long_g_animation_interpolator_11.xml new file mode 100644 index 00000000..21527c53 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_swipe_left_long_g_animation_interpolator_11.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8"?> +<pathInterpolator + xmlns:android="http://schemas.android.com/apk/res/android" + android:pathData="M 0.0,0.0 c 0.00099999999999,0.0 0.66666667,1.0 1.0,1.0" /> diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_swipe_left_long_g_animation_interpolator_12.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_swipe_left_long_g_animation_interpolator_12.xml new file mode 100644 index 00000000..70897c8c --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_swipe_left_long_g_animation_interpolator_12.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8"?> +<pathInterpolator + xmlns:android="http://schemas.android.com/apk/res/android" + android:pathData="M 0.0,0.0 c 0.000999999999998,0.0 0.83333333333,1.0 1.0,1.0" /> diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_swipe_left_long_g_animation_interpolator_2.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_swipe_left_long_g_animation_interpolator_2.xml new file mode 100644 index 00000000..d2a75703 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_swipe_left_long_g_animation_interpolator_2.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8"?> +<pathInterpolator + xmlns:android="http://schemas.android.com/apk/res/android" + android:pathData="M 0.0,0.0 c 0.001,0.0 0.9999,1.0 1.0,1.0" /> diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_swipe_left_long_g_animation_interpolator_3.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_swipe_left_long_g_animation_interpolator_3.xml new file mode 100644 index 00000000..8885a60d --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_swipe_left_long_g_animation_interpolator_3.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8"?> +<pathInterpolator + xmlns:android="http://schemas.android.com/apk/res/android" + android:pathData="M 0.0,0.0 c 0.0001,0.0 0.9999,1.0 1.0,1.0" /> diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_swipe_left_long_g_animation_interpolator_4.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_swipe_left_long_g_animation_interpolator_4.xml new file mode 100644 index 00000000..aae2dd06 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_swipe_left_long_g_animation_interpolator_4.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8"?> +<pathInterpolator + xmlns:android="http://schemas.android.com/apk/res/android" + android:pathData="M 0.0,0.0 c 0.16666666667,0.16666666667 0.83333333333,0.83333333333 1.0,1.0" /> diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_swipe_left_long_g_animation_interpolator_5.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_swipe_left_long_g_animation_interpolator_5.xml new file mode 100644 index 00000000..21f31ee6 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_swipe_left_long_g_animation_interpolator_5.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8"?> +<pathInterpolator + xmlns:android="http://schemas.android.com/apk/res/android" + android:pathData="M 0.0,0.0 c 0.4,0.0 0.83333333333,0.83333333333 1.0,1.0" /> diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_swipe_left_long_g_animation_interpolator_6.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_swipe_left_long_g_animation_interpolator_6.xml new file mode 100644 index 00000000..83735dbd --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_swipe_left_long_g_animation_interpolator_6.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8"?> +<pathInterpolator + xmlns:android="http://schemas.android.com/apk/res/android" + android:pathData="M 0.0,0.0 c 0.16666666667,0.16666666667 0.66666667,1.0 1.0,1.0" /> diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_swipe_left_long_g_animation_interpolator_7.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_swipe_left_long_g_animation_interpolator_7.xml new file mode 100644 index 00000000..3210d4a1 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_swipe_left_long_g_animation_interpolator_7.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8"?> +<pathInterpolator + xmlns:android="http://schemas.android.com/apk/res/android" + android:pathData="M 0.0,0.0 c 0.2,0.1 0.2,1.0 1.0,1.0" /> diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_swipe_left_long_g_animation_interpolator_8.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_swipe_left_long_g_animation_interpolator_8.xml new file mode 100644 index 00000000..3b3d5307 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_swipe_left_long_g_animation_interpolator_8.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8"?> +<pathInterpolator + xmlns:android="http://schemas.android.com/apk/res/android" + android:pathData="M 0.0,0.0 c 0.4,0.4 0.2,1.0 1.0,1.0" /> diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_swipe_left_long_g_animation_interpolator_9.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_swipe_left_long_g_animation_interpolator_9.xml new file mode 100644 index 00000000..71b3644b --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_swipe_left_long_g_animation_interpolator_9.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8"?> +<pathInterpolator + xmlns:android="http://schemas.android.com/apk/res/android" + android:pathData="M 0.0,0.0 c 0.8,0.0 0.83333333333,0.955555555555 1.0,1.0" /> diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_swipe_left_long_g_ellipse_7_animation.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_swipe_left_long_g_ellipse_7_animation.xml new file mode 100644 index 00000000..2b320323 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_swipe_left_long_g_ellipse_7_animation.xml @@ -0,0 +1,52 @@ +<?xml version="1.0" encoding="utf-8"?> +<set + xmlns:android="http://schemas.android.com/apk/res/android" > + <set + android:ordering="sequentially" > + <objectAnimator + android:duration="166" + android:propertyName="scaleX" + android:valueFrom="0.75" + android:valueTo="1.0" + android:valueType="floatType" + android:interpolator="@android:interpolator/fast_out_slow_in" /> + <objectAnimator + android:duration="500" + android:propertyName="scaleX" + android:valueFrom="1.0" + android:valueTo="1.0" + android:valueType="floatType" + android:interpolator="@anim/oobe_swipe_left_long_g_animation_interpolator_2" /> + <objectAnimator + android:duration="1833" + android:propertyName="scaleX" + android:valueFrom="1.0" + android:valueTo="1.0" + android:valueType="floatType" + android:interpolator="@anim/oobe_swipe_left_long_g_animation_interpolator_1" /> + </set> + <set + android:ordering="sequentially" > + <objectAnimator + android:duration="166" + android:propertyName="scaleY" + android:valueFrom="0.75" + android:valueTo="1.0" + android:valueType="floatType" + android:interpolator="@android:interpolator/fast_out_slow_in" /> + <objectAnimator + android:duration="500" + android:propertyName="scaleY" + android:valueFrom="1.0" + android:valueTo="1.0" + android:valueType="floatType" + android:interpolator="@anim/oobe_swipe_left_long_g_animation_interpolator_2" /> + <objectAnimator + android:duration="1833" + android:propertyName="scaleY" + android:valueFrom="1.0" + android:valueTo="1.0" + android:valueType="floatType" + android:interpolator="@anim/oobe_swipe_left_long_g_animation_interpolator_1" /> + </set> +</set> diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_swipe_left_long_g_ellipse_8_animation.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_swipe_left_long_g_ellipse_8_animation.xml new file mode 100644 index 00000000..dde7cf35 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_swipe_left_long_g_ellipse_8_animation.xml @@ -0,0 +1,52 @@ +<?xml version="1.0" encoding="utf-8"?> +<set + xmlns:android="http://schemas.android.com/apk/res/android" > + <set + android:ordering="sequentially" > + <objectAnimator + android:duration="166" + android:propertyName="scaleX" + android:valueFrom="0.2" + android:valueTo="1.0" + android:valueType="floatType" + android:interpolator="@anim/oobe_swipe_left_long_g_animation_interpolator_8" /> + <objectAnimator + android:duration="500" + android:propertyName="scaleX" + android:valueFrom="1.0" + android:valueTo="1.0" + android:valueType="floatType" + android:interpolator="@anim/oobe_swipe_left_long_g_animation_interpolator_3" /> + <objectAnimator + android:duration="1833" + android:propertyName="scaleX" + android:valueFrom="1.0" + android:valueTo="1.0" + android:valueType="floatType" + android:interpolator="@anim/oobe_swipe_left_long_g_animation_interpolator_12" /> + </set> + <set + android:ordering="sequentially" > + <objectAnimator + android:duration="166" + android:propertyName="scaleY" + android:valueFrom="0.2" + android:valueTo="1.0" + android:valueType="floatType" + android:interpolator="@anim/oobe_swipe_left_long_g_animation_interpolator_8" /> + <objectAnimator + android:duration="500" + android:propertyName="scaleY" + android:valueFrom="1.0" + android:valueTo="1.0" + android:valueType="floatType" + android:interpolator="@anim/oobe_swipe_left_long_g_animation_interpolator_3" /> + <objectAnimator + android:duration="1833" + android:propertyName="scaleY" + android:valueFrom="1.0" + android:valueTo="1.0" + android:valueType="floatType" + android:interpolator="@anim/oobe_swipe_left_long_g_animation_interpolator_12" /> + </set> +</set> diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_swipe_left_long_g_path_7_animation.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_swipe_left_long_g_path_7_animation.xml new file mode 100644 index 00000000..632d1efe --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_swipe_left_long_g_path_7_animation.xml @@ -0,0 +1,66 @@ +<?xml version="1.0" encoding="utf-8"?> +<set + xmlns:android="http://schemas.android.com/apk/res/android" > + <set + android:ordering="sequentially" > + <objectAnimator + android:duration="166" + android:propertyName="pathData" + android:valueFrom="M 0.0,-20.5 c 11.3218383789,0.0 20.5,9.17816162109 20.5,20.5 c 0.0,11.3218383789 -9.17816162109,20.5 -20.5,20.5 c -11.3218383789,0.0 -20.5,-9.17816162109 -20.5,-20.5 c 0.0,-11.3218383789 9.17816162109,-20.5 20.5,-20.5 Z" + android:valueTo="M 0.0,-20.5 c 11.3218383789,0.0 20.5,9.17816162109 20.5,20.5 c 0.0,11.3218383789 -9.17816162109,20.5 -20.5,20.5 c -11.3218383789,0.0 -20.5,-9.17816162109 -20.5,-20.5 c 0.0,-11.3218383789 9.17816162109,-20.5 20.5,-20.5 Z" + android:valueType="pathType" + android:interpolator="@android:interpolator/linear" /> + <objectAnimator + android:duration="500" + android:propertyName="pathData" + android:valueFrom="M 0.0,-20.5 c 11.3218383789,0.0 20.5,9.17816162109 20.5,20.5 c 0.0,11.3218383789 -9.17816162109,20.5 -20.5,20.5 c -11.3218383789,0.0 -20.5,-9.17816162109 -20.5,-20.5 c 0.0,-11.3218383789 9.17816162109,-20.5 20.5,-20.5 Z" + android:valueTo="M 0.0,-54.5659637451 c 11.3218383789,0.0 20.5,9.17816162109 20.5,20.5 c 0.0,11.3218536377 -4.5699005127,76.4127655029 -20.6393432617,76.4451141357 c -16.069442749,0.0323486328125 -20.3606567383,-65.123260498 -20.3606567383,-76.4451141357 c 0.0,-11.3218383789 9.17816162109,-20.5 20.5,-20.5 Z" + android:valueType="pathType" + android:interpolator="@anim/oobe_swipe_left_long_g_animation_interpolator_5" /> + <objectAnimator + android:duration="333" + android:propertyName="pathData" + android:valueFrom="M 0.0,-54.5659637451 c 11.3218383789,0.0 20.5,9.17816162109 20.5,20.5 c 0.0,11.3218536377 -4.5699005127,76.4127655029 -20.6393432617,76.4451141357 c -16.069442749,0.0323486328125 -20.3606567383,-65.123260498 -20.3606567383,-76.4451141357 c 0.0,-11.3218383789 9.17816162109,-20.5 20.5,-20.5 Z" + android:valueTo="M 0.0,-54.5659179688 c 11.3218383789,0.0 20.5,9.17816162109 20.5,20.5 c 0.0,11.3218383789 -9.17816162109,20.5 -20.5,20.5 c -11.3218383789,0.0 -20.5,-9.17816162109 -20.5,-20.5 c 0.0,-11.3218383789 9.17816162109,-20.5 20.5,-20.5 Z" + android:valueType="pathType" + android:interpolator="@anim/oobe_swipe_left_long_g_animation_interpolator_10" /> + <objectAnimator + android:duration="1500" + android:propertyName="pathData" + android:valueFrom="M 0.0,-54.5659179688 c 11.3218383789,0.0 20.5,9.17816162109 20.5,20.5 c 0.0,11.3218383789 -9.17816162109,20.5 -20.5,20.5 c -11.3218383789,0.0 -20.5,-9.17816162109 -20.5,-20.5 c 0.0,-11.3218383789 9.17816162109,-20.5 20.5,-20.5 Z" + android:valueTo="M 0.0,-54.5659179688 c 11.3218383789,0.0 20.5,9.17816162109 20.5,20.5 c 0.0,11.3218383789 -9.17816162109,20.5 -20.5,20.5 c -11.3218383789,0.0 -20.5,-9.17816162109 -20.5,-20.5 c 0.0,-11.3218383789 9.17816162109,-20.5 20.5,-20.5 Z" + android:valueType="pathType" + android:interpolator="@anim/oobe_swipe_left_long_g_animation_interpolator_1" /> + </set> + <set + android:ordering="sequentially" > + <objectAnimator + android:duration="166" + android:propertyName="fillAlpha" + android:valueFrom="0.0" + android:valueTo="0.7" + android:valueType="floatType" + android:interpolator="@android:interpolator/fast_out_slow_in" /> + <objectAnimator + android:duration="500" + android:propertyName="fillAlpha" + android:valueFrom="0.7" + android:valueTo="0.7" + android:valueType="floatType" + android:interpolator="@anim/oobe_swipe_left_long_g_animation_interpolator_2" /> + <objectAnimator + android:duration="333" + android:propertyName="fillAlpha" + android:valueFrom="0.7" + android:valueTo="0.0" + android:valueType="floatType" + android:interpolator="@anim/oobe_swipe_left_long_g_animation_interpolator_11" /> + <objectAnimator + android:duration="1500" + android:propertyName="fillAlpha" + android:valueFrom="0.0" + android:valueTo="0.0" + android:valueType="floatType" + android:interpolator="@anim/oobe_swipe_left_long_g_animation_interpolator_0" /> + </set> +</set> diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_swipe_left_long_g_path_8_animation.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_swipe_left_long_g_path_8_animation.xml new file mode 100644 index 00000000..ec482a0c --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_swipe_left_long_g_path_8_animation.xml @@ -0,0 +1,73 @@ +<?xml version="1.0" encoding="utf-8"?> +<set + xmlns:android="http://schemas.android.com/apk/res/android" > + <set + android:ordering="sequentially" > + <objectAnimator + android:duration="166" + android:propertyName="pathData" + android:valueFrom="M 0.0,-20.5 c 11.3218383789,0.0 20.5,9.17816162109 20.5,20.5 c 0.0,11.3218383789 -9.17816162109,20.5 -20.5,20.5 c -11.3218383789,0.0 -20.5,-9.17816162109 -20.5,-20.5 c 0.0,-11.3218383789 9.17816162109,-20.5 20.5,-20.5 Z" + android:valueTo="M 0.0,-20.5 c 11.3218383789,0.0 20.5,9.17816162109 20.5,20.5 c 0.0,11.3218383789 -9.17816162109,20.5 -20.5,20.5 c -11.3218383789,0.0 -20.5,-9.17816162109 -20.5,-20.5 c 0.0,-11.3218383789 9.17816162109,-20.5 20.5,-20.5 Z" + android:valueType="pathType" + android:interpolator="@anim/oobe_swipe_left_long_g_animation_interpolator_8" /> + <objectAnimator + android:duration="500" + android:propertyName="pathData" + android:valueFrom="M 0.0,-20.5 c 11.3218383789,0.0 20.5,9.17816162109 20.5,20.5 c 0.0,11.3218383789 -9.17816162109,20.5 -20.5,20.5 c -11.3218383789,0.0 -20.5,-9.17816162109 -20.5,-20.5 c 0.0,-11.3218383789 9.17816162109,-20.5 20.5,-20.5 Z" + android:valueTo="M 0.0,-83.0 c 11.3218383789,0.0 20.5,9.17816162109 20.5,20.5 c 0.0,11.3218383789 -20.365234375,98.5 -20.365234375,98.5 c 0.0,0.0 -20.634765625,-87.1781616211 -20.634765625,-98.5 c 0.0,-11.3218383789 9.17816162109,-20.5 20.5,-20.5 Z" + android:valueType="pathType" + android:interpolator="@anim/oobe_swipe_left_long_g_animation_interpolator_5" /> + <objectAnimator + android:duration="166" + android:propertyName="pathData" + android:valueFrom="M 0.0,-83.0 c 11.3218383789,0.0 20.5,9.17816162109 20.5,20.5 c 0.0,11.3218383789 -20.365234375,98.5 -20.365234375,98.5 c 0.0,0.0 -20.634765625,-87.1781616211 -20.634765625,-98.5 c 0.0,-11.3218383789 9.17816162109,-20.5 20.5,-20.5 Z" + android:valueTo="M 0.0,-80.4920959473 c 11.3218383789,0.0 20.5,9.17816162109 20.5,20.5 c 0.0,11.3218383789 -9.17816162109,20.5 -20.5,20.5 c -11.3218383789,0.0 -20.5,-9.17816162109 -20.5,-20.5 c 0.0,-11.3218383789 9.17816162109,-20.5 20.5,-20.5 Z" + android:valueType="pathType" + android:interpolator="@anim/oobe_swipe_left_long_g_animation_interpolator_4" /> + <objectAnimator + android:duration="166" + android:propertyName="pathData" + android:valueFrom="M 0.0,-80.4920959473 c 11.3218383789,0.0 20.5,9.17816162109 20.5,20.5 c 0.0,11.3218383789 -9.17816162109,20.5 -20.5,20.5 c -11.3218383789,0.0 -20.5,-9.17816162109 -20.5,-20.5 c 0.0,-11.3218383789 9.17816162109,-20.5 20.5,-20.5 Z" + android:valueTo="M 0.0,-63.2420959473 c 1.10456848145,0.0 2.0,0.895431518555 2.0,2.0 c 0.0,1.10456848145 -0.895431518555,2.0 -2.0,2.0 c -1.10456848145,0.0 -2.0,-0.895431518555 -2.0,-2.0 c 0.0,-1.10456848145 0.895431518555,-2.0 2.0,-2.0 Z" + android:valueType="pathType" + android:interpolator="@anim/oobe_swipe_left_long_g_animation_interpolator_6" /> + <objectAnimator + android:duration="1500" + android:propertyName="pathData" + android:valueFrom="M 0.0,-63.2420959473 c 1.10456848145,0.0 2.0,0.895431518555 2.0,2.0 c 0.0,1.10456848145 -0.895431518555,2.0 -2.0,2.0 c -1.10456848145,0.0 -2.0,-0.895431518555 -2.0,-2.0 c 0.0,-1.10456848145 0.895431518555,-2.0 2.0,-2.0 Z" + android:valueTo="M 0.0,-63.2420959473 c 1.10456848145,0.0 2.0,0.895431518555 2.0,2.0 c 0.0,1.10456848145 -0.895431518555,2.0 -2.0,2.0 c -1.10456848145,0.0 -2.0,-0.895431518555 -2.0,-2.0 c 0.0,-1.10456848145 0.895431518555,-2.0 2.0,-2.0 Z" + android:valueType="pathType" + android:interpolator="@anim/oobe_swipe_left_long_g_animation_interpolator_0" /> + </set> + <set + android:ordering="sequentially" > + <objectAnimator + android:duration="166" + android:propertyName="fillAlpha" + android:valueFrom="0.0" + android:valueTo="1.0" + android:valueType="floatType" + android:interpolator="@anim/oobe_swipe_left_long_g_animation_interpolator_7" /> + <objectAnimator + android:duration="500" + android:propertyName="fillAlpha" + android:valueFrom="1.0" + android:valueTo="1.0" + android:valueType="floatType" + android:interpolator="@anim/oobe_swipe_left_long_g_animation_interpolator_3" /> + <objectAnimator + android:duration="333" + android:propertyName="fillAlpha" + android:valueFrom="1.0" + android:valueTo="0.0" + android:valueType="floatType" + android:interpolator="@anim/oobe_swipe_left_long_g_animation_interpolator_11" /> + <objectAnimator + android:duration="1500" + android:propertyName="fillAlpha" + android:valueFrom="0.0" + android:valueTo="0.0" + android:valueType="floatType" + android:interpolator="@anim/oobe_swipe_left_long_g_animation_interpolator_0" /> + </set> +</set> diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_swipe_left_long_g_swipeupbluecircle_2_animation.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_swipe_left_long_g_swipeupbluecircle_2_animation.xml new file mode 100644 index 00000000..d2986cda --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_swipe_left_long_g_swipeupbluecircle_2_animation.xml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="utf-8"?> +<set + xmlns:android="http://schemas.android.com/apk/res/android" > + <set + android:ordering="sequentially" > + <objectAnimator + android:duration="666" + android:propertyName="translateX" + android:valueFrom="153.575" + android:valueTo="100.65667" + android:valueType="floatType" + android:interpolator="@anim/oobe_swipe_left_long_g_animation_interpolator_9" /> + <objectAnimator + android:duration="1833" + android:propertyName="translateX" + android:valueFrom="100.65667" + android:valueTo="100.65667" + android:valueType="floatType" + android:interpolator="@anim/oobe_swipe_left_long_g_animation_interpolator_1" /> + </set> +</set> diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_swipe_left_long_g_swipeuptrace_2_animation.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_swipe_left_long_g_swipeuptrace_2_animation.xml new file mode 100644 index 00000000..d2986cda --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_swipe_left_long_g_swipeuptrace_2_animation.xml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="utf-8"?> +<set + xmlns:android="http://schemas.android.com/apk/res/android" > + <set + android:ordering="sequentially" > + <objectAnimator + android:duration="666" + android:propertyName="translateX" + android:valueFrom="153.575" + android:valueTo="100.65667" + android:valueType="floatType" + android:interpolator="@anim/oobe_swipe_left_long_g_animation_interpolator_9" /> + <objectAnimator + android:duration="1833" + android:propertyName="translateX" + android:valueFrom="100.65667" + android:valueTo="100.65667" + android:valueType="floatType" + android:interpolator="@anim/oobe_swipe_left_long_g_animation_interpolator_1" /> + </set> +</set> diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_tap_animation_interpolator_0.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_tap_animation_interpolator_0.xml new file mode 100644 index 00000000..71f0d54d --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_tap_animation_interpolator_0.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8"?> +<pathInterpolator + xmlns:android="http://schemas.android.com/apk/res/android" + android:pathData="M 0.0,0.0 c 0.4,0.4 0.509350957076,1.0 1.0,1.0" /> diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_tap_animation_interpolator_1.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_tap_animation_interpolator_1.xml new file mode 100644 index 00000000..c421f9e9 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_tap_animation_interpolator_1.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8"?> +<pathInterpolator + xmlns:android="http://schemas.android.com/apk/res/android" + android:pathData="M 0.0,0.0 c 0.16666666667,0.0 0.83333333333,1.0 1.0,1.0" /> diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_tap_animation_interpolator_2.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_tap_animation_interpolator_2.xml new file mode 100644 index 00000000..543371da --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_tap_animation_interpolator_2.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8"?> +<pathInterpolator + xmlns:android="http://schemas.android.com/apk/res/android" + android:pathData="M 0.0,0.0 c 0.0001,0.0 1.0,1.0 1.0,1.0" /> diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_tap_animation_interpolator_3.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_tap_animation_interpolator_3.xml new file mode 100644 index 00000000..5bb175cb --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_tap_animation_interpolator_3.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8"?> +<pathInterpolator + xmlns:android="http://schemas.android.com/apk/res/android" + android:pathData="M 0.0,0.0 c 0.001,0.0 1.0,1.0 1.0,1.0" /> diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_tap_animation_interpolator_4.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_tap_animation_interpolator_4.xml new file mode 100644 index 00000000..b93f4367 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_tap_animation_interpolator_4.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8"?> +<pathInterpolator + xmlns:android="http://schemas.android.com/apk/res/android" + android:pathData="M 0.0,0.0 c 0.2,0.3 0.2,1.0 1.0,1.0" /> diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_tap_animation_interpolator_5.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_tap_animation_interpolator_5.xml new file mode 100644 index 00000000..4f8fb2bb --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_tap_animation_interpolator_5.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8"?> +<pathInterpolator + xmlns:android="http://schemas.android.com/apk/res/android" + android:pathData="M 0.0,0.0 c 0.001,0.0 0.83333333333,1.0 1.0,1.0" /> diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_tap_animation_interpolator_6.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_tap_animation_interpolator_6.xml new file mode 100644 index 00000000..e118b802 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_tap_animation_interpolator_6.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8"?> +<pathInterpolator + xmlns:android="http://schemas.android.com/apk/res/android" + android:pathData="M 0.0,0.0 c 0.001,0.0 0.66666667,1.0 1.0,1.0" /> diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_tap_ellipse_21_animation.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_tap_ellipse_21_animation.xml new file mode 100644 index 00000000..e0e0a24c --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_tap_ellipse_21_animation.xml @@ -0,0 +1,52 @@ +<?xml version="1.0" encoding="utf-8"?> +<set + xmlns:android="http://schemas.android.com/apk/res/android" > + <set + android:ordering="sequentially" > + <objectAnimator + android:duration="500" + android:propertyName="scaleX" + android:valueFrom="0.5" + android:valueTo="1.0" + android:valueType="floatType" + android:interpolator="@android:interpolator/fast_out_slow_in" /> + <objectAnimator + android:duration="500" + android:propertyName="scaleX" + android:valueFrom="1.0" + android:valueTo="0.5" + android:valueType="floatType" + android:interpolator="@anim/oobe_tap_animation_interpolator_5" /> + <objectAnimator + android:duration="1500" + android:propertyName="scaleX" + android:valueFrom="0.5" + android:valueTo="0.5" + android:valueType="floatType" + android:interpolator="@anim/oobe_tap_animation_interpolator_1" /> + </set> + <set + android:ordering="sequentially" > + <objectAnimator + android:duration="500" + android:propertyName="scaleY" + android:valueFrom="0.5" + android:valueTo="1.0" + android:valueType="floatType" + android:interpolator="@android:interpolator/fast_out_slow_in" /> + <objectAnimator + android:duration="500" + android:propertyName="scaleY" + android:valueFrom="1.0" + android:valueTo="0.5" + android:valueType="floatType" + android:interpolator="@anim/oobe_tap_animation_interpolator_5" /> + <objectAnimator + android:duration="1500" + android:propertyName="scaleY" + android:valueFrom="0.5" + android:valueTo="0.5" + android:valueType="floatType" + android:interpolator="@anim/oobe_tap_animation_interpolator_1" /> + </set> +</set> diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_tap_ellipse_22_animation.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_tap_ellipse_22_animation.xml new file mode 100644 index 00000000..fa6c5e12 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_tap_ellipse_22_animation.xml @@ -0,0 +1,52 @@ +<?xml version="1.0" encoding="utf-8"?> +<set + xmlns:android="http://schemas.android.com/apk/res/android" > + <set + android:ordering="sequentially" > + <objectAnimator + android:duration="500" + android:propertyName="scaleX" + android:valueFrom="0.5" + android:valueTo="1.0" + android:valueType="floatType" + android:interpolator="@anim/oobe_tap_animation_interpolator_4" /> + <objectAnimator + android:duration="500" + android:propertyName="scaleX" + android:valueFrom="1.0" + android:valueTo="0.5" + android:valueType="floatType" + android:interpolator="@anim/oobe_tap_animation_interpolator_2" /> + <objectAnimator + android:duration="1500" + android:propertyName="scaleX" + android:valueFrom="0.5" + android:valueTo="0.5" + android:valueType="floatType" + android:interpolator="@android:interpolator/linear" /> + </set> + <set + android:ordering="sequentially" > + <objectAnimator + android:duration="500" + android:propertyName="scaleY" + android:valueFrom="0.5" + android:valueTo="1.0" + android:valueType="floatType" + android:interpolator="@anim/oobe_tap_animation_interpolator_4" /> + <objectAnimator + android:duration="500" + android:propertyName="scaleY" + android:valueFrom="1.0" + android:valueTo="0.5" + android:valueType="floatType" + android:interpolator="@anim/oobe_tap_animation_interpolator_2" /> + <objectAnimator + android:duration="1500" + android:propertyName="scaleY" + android:valueFrom="0.5" + android:valueTo="0.5" + android:valueType="floatType" + android:interpolator="@android:interpolator/linear" /> + </set> +</set> diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_tap_path_23_animation.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_tap_path_23_animation.xml new file mode 100644 index 00000000..9f3b584c --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_tap_path_23_animation.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="utf-8"?> +<set + xmlns:android="http://schemas.android.com/apk/res/android" > + <set + android:ordering="sequentially" > + <objectAnimator + android:duration="500" + android:propertyName="fillAlpha" + android:valueFrom="0.0" + android:valueTo="0.7" + android:valueType="floatType" + android:interpolator="@android:interpolator/fast_out_slow_in" /> + <objectAnimator + android:duration="500" + android:propertyName="fillAlpha" + android:valueFrom="0.7" + android:valueTo="0.0" + android:valueType="floatType" + android:interpolator="@anim/oobe_tap_animation_interpolator_3" /> + <objectAnimator + android:duration="1500" + android:propertyName="fillAlpha" + android:valueFrom="0.0" + android:valueTo="0.0" + android:valueType="floatType" + android:interpolator="@android:interpolator/linear" /> + </set> +</set> diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_tap_path_24_animation.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_tap_path_24_animation.xml new file mode 100644 index 00000000..c2b370ad --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_tap_path_24_animation.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="utf-8"?> +<set + xmlns:android="http://schemas.android.com/apk/res/android" > + <set + android:ordering="sequentially" > + <objectAnimator + android:duration="500" + android:propertyName="fillAlpha" + android:valueFrom="0.0" + android:valueTo="1.0" + android:valueType="floatType" + android:interpolator="@anim/oobe_tap_animation_interpolator_4" /> + <objectAnimator + android:duration="500" + android:propertyName="fillAlpha" + android:valueFrom="1.0" + android:valueTo="0.0" + android:valueType="floatType" + android:interpolator="@anim/oobe_tap_animation_interpolator_2" /> + <objectAnimator + android:duration="1500" + android:propertyName="fillAlpha" + android:valueFrom="0.0" + android:valueTo="0.0" + android:valueType="floatType" + android:interpolator="@android:interpolator/linear" /> + </set> +</set> diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_tap_rectangle_path_3_animation.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_tap_rectangle_path_3_animation.xml new file mode 100644 index 00000000..735ccd63 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/anim/oobe_tap_rectangle_path_3_animation.xml @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<set + xmlns:android="http://schemas.android.com/apk/res/android" > + <set + android:ordering="sequentially" > + <objectAnimator + android:duration="1000" + android:propertyName="pathData" + android:valueFrom="M 0.0,-25.0 l 0.0,0.0 c 13.807118745,0.0 25.0,11.192881255 25.0,25.0 l 0.0,0.0 c 0.0,13.807118745 -11.192881255,25.0 -25.0,25.0 l 0.0,0.0 c -13.807118745,0.0 -25.0,-11.192881255 -25.0,-25.0 l 0.0,0.0 c 0.0,-13.807118745 11.192881255,-25.0 25.0,-25.0 Z" + android:valueTo="M 0.0,-75.0 l 0.0,0.0 c 41.421356235,0.0 75.0,33.578643765 75.0,75.0 l 0.0,0.0 c 0.0,41.421356235 -33.578643765,75.0 -75.0,75.0 l 0.0,0.0 c -41.421356235,0.0 -75.0,-33.578643765 -75.0,-75.0 l 0.0,0.0 c 0.0,-41.421356235 33.578643765,-75.0 75.0,-75.0 Z" + android:valueType="pathType" + android:interpolator="@anim/oobe_tap_animation_interpolator_0" /> + <objectAnimator + android:duration="1500" + android:propertyName="pathData" + android:valueFrom="M 0.0,-75.0 l 0.0,0.0 c 41.421356235,0.0 75.0,33.578643765 75.0,75.0 l 0.0,0.0 c 0.0,41.421356235 -33.578643765,75.0 -75.0,75.0 l 0.0,0.0 c -41.421356235,0.0 -75.0,-33.578643765 -75.0,-75.0 l 0.0,0.0 c 0.0,-41.421356235 33.578643765,-75.0 75.0,-75.0 Z" + android:valueTo="M 0.0,-75.0 l 0.0,0.0 c 41.421356235,0.0 75.0,33.578643765 75.0,75.0 l 0.0,0.0 c 0.0,41.421356235 -33.578643765,75.0 -75.0,75.0 l 0.0,0.0 c -41.421356235,0.0 -75.0,-33.578643765 -75.0,-75.0 l 0.0,0.0 c 0.0,-41.421356235 33.578643765,-75.0 75.0,-75.0 Z" + android:valueType="pathType" + android:interpolator="@anim/oobe_tap_animation_interpolator_1" /> + </set> + <set + android:ordering="sequentially" > + <objectAnimator + android:duration="500" + android:propertyName="fillAlpha" + android:valueFrom="0.0" + android:valueTo="0.2" + android:valueType="floatType" + android:interpolator="@android:interpolator/fast_out_slow_in" /> + <objectAnimator + android:duration="500" + android:propertyName="fillAlpha" + android:valueFrom="0.2" + android:valueTo="0.0" + android:valueType="floatType" + android:interpolator="@anim/oobe_tap_animation_interpolator_6" /> + <objectAnimator + android:duration="1500" + android:propertyName="fillAlpha" + android:valueFrom="0.0" + android:valueTo="0.0" + android:valueType="floatType" + android:interpolator="@anim/oobe_tap_animation_interpolator_1" /> + </set> +</set> diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/accept_circle.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/accept_circle.xml new file mode 100644 index 00000000..17e818b1 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/accept_circle.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="utf-8"?> +<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> + <item> + <shape android:shape="oval"> + <solid android:color="?android:colorAccent"/> + <size + android:height="40dp" + android:width="40dp"/> + </shape> + </item> + <item + android:gravity="center"> + <vector + android:height="24dp" + android:viewportHeight="24.0" + android:viewportWidth="24.0" + android:width="24dp"> + <path + android:fillColor="#FFFFFF" + android:pathData="M9,16.17L4.83,12l-1.42,1.41L9,19 21,7l-1.41,-1.41z"/> + </vector> + </item> +</layer-list>
\ No newline at end of file diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/accessibility_circle.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/accessibility_circle.xml new file mode 100644 index 00000000..fc68c5c1 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/accessibility_circle.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="utf-8"?> +<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> + <item> + <shape android:shape="oval"> + <solid android:color="?android:colorPrimaryDark"/> + <size + android:height="40dp" + android:width="40dp"/> + </shape> + </item> + <item + android:gravity="center"> + <vector + android:height="24dp" + android:viewportHeight="24.0" + android:viewportWidth="24.0" + android:width="24dp"> + <path + android:fillColor="#FFFFFF" + android:pathData="M20.5,6c-2.61,0.7 -5.67,1 -8.5,1s-5.89,-0.3 -8.5,-1L3,8c1.86, + 0.5 4,0.83 6,1v13h2v-6h2v6h2V9c2,-0.17 4.14,-0.5 6,-1l-0.5,-2zM12,6c1.1, + 0 2,-0.9 2,-2s-0.9,-2 -2,-2 -2,0.9 -2,2 0.9,2 2,2z"/> + </vector> + </item> +</layer-list>
\ No newline at end of file diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/arrow.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/arrow.xml new file mode 100644 index 00000000..9263cc17 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/arrow.xml @@ -0,0 +1,9 @@ +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:height="24dp" + android:viewportHeight="24.0" + android:viewportWidth="24.0" + android:width="24dp"> + <path + android:fillColor="#FFFFFF" + android:pathData="M8.59,16.34l4.58,-4.59 -4.58,-4.59L10,5.75l6,6 -6,6z"/> +</vector> diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/arrow_circle.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/arrow_circle.xml new file mode 100644 index 00000000..bb71babb --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/arrow_circle.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="utf-8"?> +<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> + <item> + <shape android:shape="oval"> + <solid android:color="?android:colorPrimaryDark"/> + <size + android:height="40dp" + android:width="40dp"/> + </shape> + </item> + <item + android:gravity="center"> + <vector + android:height="24dp" + android:viewportHeight="48.0" + android:viewportWidth="48.0" + android:width="24dp"> + <path + android:fillColor="#FFFFFF" + android:pathData="M24,8l-2.83,2.83L32.34,22H8v4h24.34L21.17,37.17 24,40l16,-16z"/> + </vector> + </item> +</layer-list>
\ No newline at end of file diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/avatar.png b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/avatar.png Binary files differnew file mode 100644 index 00000000..79534872 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/avatar.png diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/birds.png b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/birds.png Binary files differnew file mode 100644 index 00000000..724f4e6f --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/birds.png diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/bow.png b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/bow.png Binary files differnew file mode 100644 index 00000000..6c6b3367 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/bow.png diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/cats.png b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/cats.png Binary files differnew file mode 100644 index 00000000..ebd2eac9 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/cats.png diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/circle.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/circle.xml new file mode 100644 index 00000000..44e80634 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/circle.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="utf-8"?> +<shape xmlns:android="http//schemas.android.com/apk/res/android" + android:shape="oval"> + <solid + android:color="#ffffffff"/> + <size + android:height="40dp" + android:width="40dp"/> +</shape>
\ No newline at end of file diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/controls_circle.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/controls_circle.xml new file mode 100644 index 00000000..77d66e62 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/controls_circle.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="utf-8"?> +<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> + <item> + <shape android:shape="oval"> + <solid android:color="?android:colorPrimaryDark"/> + <size + android:height="40dp" + android:width="40dp"/> + </shape> + </item> + <item + android:gravity="center"> + <vector + android:height="24dp" + android:viewportHeight="24.0" + android:viewportWidth="24.0" + android:width="24dp"> + <path + android:fillColor="#FFFFFF" + android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10, + -10S17.52,2 12,2zM10,17l-5,-5 1.41,-1.41L10,14.17l7.59,-7.59L19,8l-9,9z"/> + </vector> + </item> +</layer-list>
\ No newline at end of file diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/deny_circle.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/deny_circle.xml new file mode 100644 index 00000000..9f9bb149 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/deny_circle.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="utf-8"?> +<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> + <item> + <shape android:shape="oval"> + <solid android:color="?android:colorButtonNormal"/> + <size + android:height="40dp" + android:width="40dp"/> + </shape> + </item> + <item + android:gravity="center"> + <vector + android:height="24dp" + android:viewportHeight="24.0" + android:viewportWidth="24.0" + android:width="24dp"> + <path + android:fillColor="#FFFFFF" + android:pathData="M19,6.41L17.59,5 12,10.59 6.41,5 5,6.41 10.59,12 5, + 17.59 6.41,19 12,13.41 17.59,19 19,17.59 13.41,12z"/> + </vector> + </item> +</layer-list>
\ No newline at end of file diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/dialogs_circle.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/dialogs_circle.xml new file mode 100644 index 00000000..aae342f3 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/dialogs_circle.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="utf-8"?> +<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> + <item> + <shape android:shape="oval"> + <solid android:color="?android:colorPrimaryDark"/> + <size + android:height="40dp" + android:width="40dp"/> + </shape> + </item> + <item + android:gravity="center"> + <vector + android:height="24dp" + android:viewportHeight="24.0" + android:viewportWidth="24.0" + android:width="24dp"> + <path + android:fillColor="#FFFFFF" + android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10, + -10S17.52,2 12,2zM13,17h-2v-2h2v2zM13,13h-2L11,7h2v6z"/> + </vector> + </item> +</layer-list>
\ No newline at end of file diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/dog.png b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/dog.png Binary files differnew file mode 100644 index 00000000..30ff7f79 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/dog.png diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/hamster.png b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/hamster.png Binary files differnew file mode 100644 index 00000000..c6f67dfd --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/hamster.png diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/heart.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/heart.xml new file mode 100644 index 00000000..0a026b6c --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/heart.xml @@ -0,0 +1,11 @@ +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:height="24dp" + android:viewportHeight="24.0" + android:viewportWidth="24.0" + android:width="24dp"> + <path + android:fillColor="#FFFFFF" + android:pathData="M12,21.35l-1.45,-1.32C5.4,15.36 2,12.28 2,8.5 2,5.42 4.42, + 3 7.5,3c1.74,0 3.41,0.81 4.5,2.09C13.09,3.81 14.76,3 16.5,3 19.58,3 22, + 5.42 22,8.5c0,3.78 -3.4,6.86 -8.55,11.54L12,21.35z"/> +</vector> diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/heart_circle.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/heart_circle.xml new file mode 100644 index 00000000..4dfddcec --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/heart_circle.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="utf-8"?> +<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> + <item> + <shape android:shape="oval"> + <solid android:color="?android:colorPrimaryDark"/> + <size + android:height="40dp" + android:width="40dp"/> + </shape> + </item> + <item + android:drawable="@drawable/heart" + android:gravity="center"> + </item> +</layer-list>
\ No newline at end of file diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/ic_view_list_white_1x_web_48dp.png b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/ic_view_list_white_1x_web_48dp.png Binary files differnew file mode 100644 index 00000000..b81d9102 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/ic_view_list_white_1x_web_48dp.png diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/launcher_image.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/launcher_image.xml new file mode 100644 index 00000000..2bedfd56 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/launcher_image.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="utf-8"?> +<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> + <item> + <shape android:shape="oval"> + <solid android:color="@color/icon_color"/> + <size + android:height="40dp" + android:width="40dp"/> + </shape> + </item> + <item + android:gravity="center"> + <vector + android:height="24dp" + android:viewportHeight="24.0" + android:viewportWidth="24.0" + android:width="24dp"> + <path + android:fillColor="#FFFFFF" + android:pathData="M20,12c0,-2.54 -1.19,-4.81 -3.04,-6.27L16,0H8l-0.95,5.73C5.19, + 7.19 4,9.45 4,12s1.19,4.81 3.05,6.27L8,24h8l0.96,-5.73C18.81,16.81 20, + 14.54 20,12zM6,12c0,-3.31 2.69,-6 6,-6s6,2.69 6,6 -2.69,6 -6,6 -6, + -2.69 -6,-6z"/> + </vector> + </item> +</layer-list>
\ No newline at end of file diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/list_arrow.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/list_arrow.xml new file mode 100644 index 00000000..9263cc17 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/list_arrow.xml @@ -0,0 +1,9 @@ +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:height="24dp" + android:viewportHeight="24.0" + android:viewportWidth="24.0" + android:width="24dp"> + <path + android:fillColor="#FFFFFF" + android:pathData="M8.59,16.34l4.58,-4.59 -4.58,-4.59L10,5.75l6,6 -6,6z"/> +</vector> diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/lists_circle.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/lists_circle.xml new file mode 100644 index 00000000..400eec7a --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/lists_circle.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8"?> +<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> + <item> + <shape android:shape="oval"> + <solid android:color="?android:colorPrimaryDark"/> + <size + android:height="40dp" + android:width="40dp"/> + </shape> + </item> + <item + android:gravity="center"> + <vector + android:height="24dp" + android:viewportHeight="24.0" + android:viewportWidth="24.0" + android:width="24dp"> + <path + android:fillColor="#FFFFFF" + android:pathData="M-278.33,-374.17h76v76h-76z"/> + <path + android:fillColor="#FFFFFF" + android:pathData="M2,4h4v4h-4z"/> + <path + android:fillColor="#FFFFFF" + android:pathData="M8,4h14v4h-14z"/> + <path + android:fillColor="#FFFFFF" + android:pathData="M2,10h4v4h-4z"/> + <path + android:fillColor="#FFFFFF" + android:pathData="M8,10h14v4h-14z"/> + <path + android:fillColor="#FFFFFF" + android:pathData="M2,16h4v4h-4z"/> + <path + android:fillColor="#FFFFFF" + android:pathData="M8,16h14v4h-14z"/> + </vector> + </item> +</layer-list>
\ No newline at end of file diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/notifications_circle.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/notifications_circle.xml new file mode 100644 index 00000000..aeda58a1 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/notifications_circle.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="utf-8"?> +<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> + <item> + <shape android:shape="oval"> + <solid android:color="?android:colorPrimaryDark"/> + <size + android:height="40dp" + android:width="40dp"/> + </shape> + </item> + <item + android:gravity="center"> + <vector + android:height="24dp" + android:viewportHeight="24.0" + android:viewportWidth="24.0" + android:width="24dp"> + <path + android:fillColor="#FFFFFF" + android:pathData="M18,16v-5c0,-3.07 -1.64,-5.64 -4.5,-6.32L13.5,4c0,-0.83 -0.67, + -1.5 -1.5,-1.5s-1.5,0.67 -1.5,1.5v0.68C7.63,5.36 6,7.92 6,11v5l-2, + 2v1h16v-1l-2,-2zM13,16h-2v-2h2v2zM13,12h-2L11,8h2v4zM12,22c1.1,0 2, + -0.9 2,-2h-4c0,1.1 0.89,2 2,2z"/> + </vector> + </item> +</layer-list>
\ No newline at end of file diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/oobe_swipe_left_long.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/oobe_swipe_left_long.xml new file mode 100644 index 00000000..b4f99c8b --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/oobe_swipe_left_long.xml @@ -0,0 +1,57 @@ +<?xml version="1.0" encoding="utf-8"?> +<vector + xmlns:android="http://schemas.android.com/apk/res/android" + android:name="oobe_swipe_left_long_g" + android:width="190dp" + android:viewportWidth="190" + android:height="78dp" + android:viewportHeight="78" > + <group + android:name="swipeuptrace_2" + android:translateX="153.575" + android:translateY="39" + android:scaleX="1.82" + android:scaleY="1.82" + android:rotation="270" > + <group + android:name="swipeuptrace_pivot_2" + android:translateX="-1.95508" + android:translateY="111.925" > + <group + android:name="ellipse_7" + android:translateX="1.95508" + android:translateY="-111.77148" + android:scaleX="0.75" + android:scaleY="0.75" > + <path + android:name="path_7" + android:pathData="M 0.0,-20.5 c 11.3218383789,0.0 20.5,9.17816162109 20.5,20.5 c 0.0,11.3218383789 -9.17816162109,20.5 -20.5,20.5 c -11.3218383789,0.0 -20.5,-9.17816162109 -20.5,-20.5 c 0.0,-11.3218383789 9.17816162109,-20.5 20.5,-20.5 Z" + android:fillColor="#FF000000" + android:fillAlpha="0" /> + </group> + </group> + </group> + <group + android:name="swipeupbluecircle_2" + android:translateX="153.575" + android:translateY="39" + android:rotation="270" > + <group + android:name="swipeupbluecircle_pivot_2" + android:translateX="-1.95508" + android:translateY="111.925" > + <group + android:name="ellipse_8" + android:translateX="1.95508" + android:translateY="-111.77148" + android:scaleX="0.2" + android:scaleY="0.2" > + <path + android:name="path_8" + android:pathData="M 0.0,-20.5 c 11.3218383789,0.0 20.5,9.17816162109 20.5,20.5 c 0.0,11.3218383789 -9.17816162109,20.5 -20.5,20.5 c -11.3218383789,0.0 -20.5,-9.17816162109 -20.5,-20.5 c 0.0,-11.3218383789 9.17816162109,-20.5 20.5,-20.5 Z" + android:fillColor="#FF5E97F6" + android:fillAlpha="0" /> + </group> + </group> + </group> +</vector> diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/oobe_swipe_left_long_animation.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/oobe_swipe_left_long_animation.xml new file mode 100644 index 00000000..51413f74 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/oobe_swipe_left_long_animation.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="utf-8"?> +<animated-vector + xmlns:android="http://schemas.android.com/apk/res/android" + android:drawable="@drawable/oobe_swipe_left_long" > + <target + android:name="swipeuptrace_2" + android:animation="@anim/oobe_swipe_left_long_g_swipeuptrace_2_animation" /> + <target + android:name="ellipse_7" + android:animation="@anim/oobe_swipe_left_long_g_ellipse_7_animation" /> + <target + android:name="path_7" + android:animation="@anim/oobe_swipe_left_long_g_path_7_animation" /> + <target + android:name="swipeupbluecircle_2" + android:animation="@anim/oobe_swipe_left_long_g_swipeupbluecircle_2_animation" /> + <target + android:name="ellipse_8" + android:animation="@anim/oobe_swipe_left_long_g_ellipse_8_animation" /> + <target + android:name="path_8" + android:animation="@anim/oobe_swipe_left_long_g_path_8_animation" /> +</animated-vector> diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/oobe_tap.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/oobe_tap.xml new file mode 100644 index 00000000..4091b36f --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/oobe_tap.xml @@ -0,0 +1,90 @@ +<?xml version="1.0" encoding="utf-8"?> +<vector + xmlns:android="http://schemas.android.com/apk/res/android" + android:height="160dp" + android:name="oobe_tap" + android:viewportHeight="160" + android:viewportWidth="160" + android:width="160dp"> + <group + android:name="tapripple" + android:translateX="80.25" + android:translateY="79.48125"> + <group + android:name="tapripple_pivot" + android:translateX="-1.78031" + android:translateY="55.82941"> + <group + android:name="rectangle_5" + android:scaleY="1.03255" + android:translateX="1.8623" + android:translateY="-49.13672"> + <group + android:name="rectangle_path_3_position" + android:translateY="-6"> + <path + android:fillAlpha="0" + android:fillColor="#FF000000" + android:name="rectangle_path_3" + android:pathData="M 0.0,-25.0 l 0.0,0.0 c 13.807118745,0.0 25.0, + 11.192881255 25.0,25.0 l 0.0,0.0 c 0.0,13.807118745 -11.192881255, + 25.0 -25.0,25.0 l 0.0,0.0 c -13.807118745,0.0 -25.0, + -11.192881255 -25.0,-25.0 l 0.0,0.0 c 0.0, + -13.807118745 11.192881255,-25.0 25.0,-25.0 Z"/> + </group> + </group> + </group> + </group> + <group + android:name="taptrace" + android:scaleX="1.82" + android:scaleY="1.82" + android:translateX="80.25" + android:translateY="79.48125"> + <group + android:name="taptrace_pivot" + android:translateX="-1.95508" + android:translateY="111.925"> + <group + android:name="ellipse_21" + android:scaleX="0.5" + android:scaleY="0.5" + android:translateX="1.95508" + android:translateY="-111.77148"> + <path + android:fillAlpha="0" + android:fillColor="#FF000000" + android:name="path_23" + android:pathData="M 0.0,-20.5 c 11.3218383789,0.0 20.5, + 9.17816162109 20.5,20.5 c 0.0,11.3218383789 -9.17816162109, + 20.5 -20.5,20.5 c -11.3218383789,0.0 -20.5,-9.17816162109 -20.5, + -20.5 c 0.0,-11.3218383789 9.17816162109,-20.5 20.5,-20.5 Z"/> + </group> + </group> + </group> + <group + android:name="tapblue" + android:translateX="80.25" + android:translateY="79.48125"> + <group + android:name="tapblue_pivot" + android:translateX="-1.95508" + android:translateY="111.925"> + <group + android:name="ellipse_22" + android:scaleX="0.5" + android:scaleY="0.5" + android:translateX="1.95508" + android:translateY="-111.77148"> + <path + android:fillAlpha="0" + android:fillColor="#FF5E97F6" + android:name="path_24" + android:pathData="M 0.0,-20.5 c 11.3218383789,0.0 20.5,9.17816162109 20.5, + 20.5 c 0.0,11.3218383789 -9.17816162109,20.5 -20.5, + 20.5 c -11.3218383789,0.0 -20.5,-9.17816162109 -20.5, + -20.5 c 0.0,-11.3218383789 9.17816162109,-20.5 20.5,-20.5 Z"/> + </group> + </group> + </group> +</vector>
\ No newline at end of file diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/oobe_tap_animation.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/oobe_tap_animation.xml new file mode 100644 index 00000000..7e09a9d6 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/oobe_tap_animation.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="utf-8"?> +<animated-vector + xmlns:android="http://schemas.android.com/apk/res/android" + android:drawable="@drawable/oobe_tap"> + <target + android:animation="@anim/oobe_tap_rectangle_path_3_animation" + android:name="rectangle_path_3"/> + <target + android:animation="@anim/oobe_tap_ellipse_21_animation" + android:name="ellipse_21"/> + <target + android:animation="@anim/oobe_tap_path_23_animation" + android:name="path_23"/> + <target + android:animation="@anim/oobe_tap_ellipse_22_animation" + android:name="ellipse_22"/> + <target + android:animation="@anim/oobe_tap_path_24_animation" + android:name="path_24"/> +</animated-vector> diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/open_in_phone_circle.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/open_in_phone_circle.xml new file mode 100644 index 00000000..1a6d02c1 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/open_in_phone_circle.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="utf-8"?> +<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> + <item> + <shape android:shape="oval"> + <solid android:color="?android:colorButtonNormal"/> + <size + android:height="40dp" + android:width="40dp"/> + </shape> + </item> + <item + android:gravity="center"> + <vector android:width="24dp" + android:height="24dp" + android:viewportWidth="24.0" + android:viewportHeight="24.0"> + <path + android:pathData="M16.5,2.7H7.4c-0.3,0 -0.5,0.2 -0.5,0.5v7.4h0.8V5.1C7.7,5 7.8, + 5 7.8,5h8.2c0.1,0 0.1,0.1 0.1,0.1v13.5c0,0.1 -0.1,0.1 -0.1,0.1H7.8c-0.1, + 0 -0.1,-0.1 -0.1,-0.1v-5.2H6.9v7.4c0,0.3 0.2,0.5 0.5,0.5h9.1c0.3,0 0.5, + -0.2 0.5,-0.5V3.2C17,2.9 16.8,2.7 16.5,2.7z" + android:fillColor="#FFFFFF"/> + <path android:pathData="M9.5,13.9l0.8,0.8l2.7,-2.7l-2.7,-2.7l-0.8,0.8l1.4, + 1.4H5.3v1.1h5.6L9.5,13.9z" + android:fillColor="#FFFFFF"/> + </vector> + </item> +</layer-list>
\ No newline at end of file diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/open_on_phone.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/open_on_phone.xml new file mode 100644 index 00000000..bab4d617 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/open_on_phone.xml @@ -0,0 +1,62 @@ +<?xml version="1.0" encoding="utf-8"?> +<vector + xmlns:android="http://schemas.android.com/apk/res/android" + android:height="24dp" + android:name="open_on_phone" + android:viewportHeight="24.0" + android:viewportWidth="24.0" + android:width="24dp"> + <group + android:name="phone" + android:scaleX="0.1507" + android:scaleY="0.1507" + android:translateX="32" + android:translateY="32"> + <group + android:name="shape_1"> + <path + android:fillColor="#FFFFFFFF" + android:name="path_1" + android:pathData="M 99.625,-194.5 c 0.0,0.0 -182.125,0.0 -194.25,0.0 c -12.125, + 0.0 -11.875,11.0 -11.875,11.0 c 0.0,0.0 0.00002,151.259307861 0.00002, + 151.259307861 c 0.0,0.0 17.625,-0.207061767578 17.625,-0.207061767578 c 0.0, + 0.0 -0.00002,-108.614746094 -0.00002,-111.239746094 c 0.0,-2.625 1.9375, + -2.375 1.9375,-2.375 c 0.0,0.0 175.4375,0.0 177.8125,0.0 c 2.375,0.0 2.125, + 2.9375 2.125,2.9375 c 0.0,0.0 0.0,285.8125 0.0,288.125 c 0.0,2.3125 -2.0, + 2.0 -2.0,2.0 c 0.0,0.0 -174.875,0.0 -177.6875,0.0 c -2.8125,0.0 -2.3125, + -1.875 -2.3125,-1.875 c 0.0,0.0 0.00005,-86.4319152832 0.00005, + -86.4319152832 c 0.0,0.0 -17.25,0.0 -17.25,0.0 c 0.0,0.0 -0.00005, + 121.306915283 -0.00005,132.306915283 c 0.0,11.0 9.25,10.75 9.25, + 10.75 c 0.0,0.0 184.25,0.0 195.5,0.0 c 11.25,0.0 10.5,-12.25 10.5, + -12.25 c 0.0,0.0 0.125,-364.75 0.125,-374.5 c 0.0,-9.75 -9.5,-9.5 -9.5, + -9.5 Z"/> + </group> + </group> + <group + android:name="arrow" + android:scaleX="0.1507" + android:scaleY="0.1507" + android:translateX="20.86372" + android:translateY="33.39034"> + <group + android:name="arrow_pivot" + android:translateX="56" + android:translateY="-2"> + <group + android:name="shape_2"> + <path + android:fillColor="#FFFFFFFF" + android:name="path_2" + android:pathData="M -32.2857208252,-52.9642944336 c 0.0,0.0 -15.75, + 16.25 -15.75,16.25 c 0.0,0.0 30.3749847412,29.0 30.3749847412, + 29.0 c 0.0,0.0 -111.124969482,0.0 -111.124969482,0.0 c 0.0,0.0 0.0, + 23.0000152588 0.0,23.0000152588 c 0.0,0.0 110.874938965, + 0.0 110.874938965,0.0 c 0.0,0.0 -30.1249542236,29.25 -30.1249542236, + 29.25 c 0.0,0.0 16.0,16.0 16.0,16.0 c 0.0,0.0 56.7500152588, + -57.25 56.7500152588,-57.25 c 0.0,0.0 -0.257537841797, + -0.254150390625 -0.257537841797,-0.254150390625 c 0.0, + 0.0 -56.742477417,-55.9958648682 -56.742477417,-55.9958648682 Z"/> + </group> + </group> + </group> +</vector> diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/progress_circle.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/progress_circle.xml new file mode 100644 index 00000000..56f3d3f6 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/progress_circle.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="utf-8"?> +<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> + <item> + <shape android:shape="oval"> + <solid android:color="?android:colorPrimaryDark"/> + <size + android:height="40dp" + android:width="40dp"/> + </shape> + </item> + <item + android:gravity="center"> + <vector + android:height="24dp" + android:viewportHeight="24.0" + android:viewportWidth="24.0" + android:width="24dp"> + <path + android:fillColor="#FFFFFF" + android:pathData="M6,2v6h0.01L6,8.01 10,12l-4,4 0.01,0.01H6V22h12v-5.99h-0.01L18, + 16l-4,-4 4,-3.99 -0.01,-0.01H18V2H6z"/> + </vector> + </item> +</layer-list>
\ No newline at end of file diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/reply.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/reply.xml new file mode 100644 index 00000000..524416f8 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/reply.xml @@ -0,0 +1,10 @@ +<vector + xmlns:android="http://schemas.android.com/apk/res/android" + android:height="24dp" + android:viewportHeight="48.0" + android:viewportWidth="48.0" + android:width="24dp"> + <path + android:fillColor="#FFFFFF" + android:pathData="M20,18v-8L6,24l14,14v-8.2c10,0 17,3.2 22,10.2 -2,-10 -8,-20 -22,-22z"/> +</vector> diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/settings_circle.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/settings_circle.xml new file mode 100644 index 00000000..d07819dc --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/settings_circle.xml @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> + <item> + <shape android:shape="oval"> + <solid android:color="?android:colorButtonNormal"/> + <size + android:height="40dp" + android:width="40dp"/> + </shape> + </item> + <item + android:gravity="center"> + <vector + android:height="24dp" + android:viewportHeight="48.0" + android:viewportWidth="48.0" + android:width="24dp"> + <path + android:fillColor="#FFFFFF" + android:pathData="M38.86,25.95c0.08,-0.64 0.14,-1.29 0.14,-1.95s-0.06,-1.31 -0.14, + -1.95l4.23,-3.31c0.38,-0.3 0.49,-0.84 0.24,-1.28l-4,-6.93c-0.25, + -0.43 -0.77,-0.61 -1.22,-0.43l-4.98,2.01c-1.03,-0.79 -2.16,-1.46 -3.38, + -1.97L29,4.84c-0.09,-0.47 -0.5,-0.84 -1,-0.84h-8c-0.5,0 -0.91,0.37 -0.99, + 0.84l-0.75,5.3c-1.22,0.51 -2.35,1.17 -3.38,1.97L9.9,10.1c-0.45,-0.17 -0.97, + 0 -1.22,0.43l-4,6.93c-0.25,0.43 -0.14,0.97 0.24,1.28l4.22,3.31C9.06, + 22.69 9,23.34 9,24s0.06,1.31 0.14,1.95l-4.22,3.31c-0.38,0.3 -0.49, + 0.84 -0.24,1.28l4,6.93c0.25,0.43 0.77,0.61 1.22,0.43l4.98,-2.01c1.03, + 0.79 2.16,1.46 3.38,1.97l0.75,5.3c0.08,0.47 0.49,0.84 0.99,0.84h8c0.5, + 0 0.91,-0.37 0.99,-0.84l0.75,-5.3c1.22,-0.51 2.35,-1.17 3.38,-1.97l4.98, + 2.01c0.45,0.17 0.97,0 1.22,-0.43l4,-6.93c0.25,-0.43 0.14,-0.97 -0.24, + -1.28l-4.22,-3.31zM24,31c-3.87,0 -7,-3.13 -7,-7s3.13,-7 7,-7 7,3.13 7, + 7 -3.13,7 -7,7z"/> + </vector> + </item> +</layer-list>
\ No newline at end of file diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/start.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/start.xml new file mode 100644 index 00000000..40d1c9f8 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/start.xml @@ -0,0 +1,9 @@ +<vector + xmlns:android="http://schemas.android.com/apk/res/android" + android:height="24dp" + android:viewportHeight="48.0" + android:viewportWidth="48.0" + android:width="24dp"> + <path android:fillColor="#FFFFFF" + android:pathData="M16,10v28l22,-14z"/> +</vector> diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/stop.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/stop.xml new file mode 100644 index 00000000..d15bb1b1 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/stop.xml @@ -0,0 +1,10 @@ +<vector + xmlns:android="http://schemas.android.com/apk/res/android" + android:height="24dp" + android:viewportHeight="48.0" + android:viewportWidth="48.0" + android:width="24dp"> + <path android:fillColor="#FFFFFF" + android:pathData="M38,12.83L35.17,10 24,21.17 12.83,10 10,12.83 21.17,24 10, + 35.17 12.83,38 24,26.83 35.17,38 38,35.17 26.83,24z"/> +</vector> diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/watch.png b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/watch.png Binary files differnew file mode 100644 index 00000000..0ed1b5fb --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/drawable/watch.png diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/activity_accessibility.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/activity_accessibility.xml new file mode 100644 index 00000000..6fa66dc6 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/activity_accessibility.xml @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<ScrollView + xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/scroll_view_accessibility" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_centerHorizontal="true" + android:layout_centerVertical="true"> + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:paddingTop="?android:dialogPreferredPadding" + android:paddingBottom="?android:dialogPreferredPadding" + android:paddingStart="?android:listPreferredItemPaddingStart" + android:paddingEnd="?android:listPreferredItemPaddingEnd" + android:orientation="vertical"> + <TextView + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:gravity="center_horizontal" + android:paddingTop="4dp" + android:paddingBottom="4dp" + android:text="@string/description_1_accessibility" + android:textAppearance="@style/android:TextAppearance.Material.Title"/> + <TextView + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:paddingTop="4dp" + android:paddingBottom="4dp" + android:text="@string/description_2_accessibility" + android:textAppearance="@style/android:TextAppearance.Material.Body1"/> + <TextView + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:paddingTop="4dp" + android:paddingBottom="4dp" + android:text="@string/description_3_accessibility" + android:textAppearance="@style/android:TextAppearance.Material.Body1"/> + <include + android:id="@+id/accessibility_button_include" + layout="@layout/app_item_layout" + android:layout_width="match_parent" + android:layout_height="wrap_content"/> + </LinearLayout> +</ScrollView>
\ No newline at end of file diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/activity_dialogs.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/activity_dialogs.xml new file mode 100644 index 00000000..6c5a83ed --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/activity_dialogs.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="utf-8"?> +<ListView + xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/list_view_dialogs" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:paddingTop="?android:dialogPreferredPadding" + android:paddingBottom="?android:dialogPreferredPadding" + android:clipToPadding="false"/>
\ No newline at end of file diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/activity_fullscreen_progress.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/activity_fullscreen_progress.xml new file mode 100644 index 00000000..11674ee5 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/activity_fullscreen_progress.xml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="utf-8"?> +<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:orientation="vertical" + android:layout_width="match_parent" + android:layout_height="match_parent"> + <ProgressBar + android:id="@+id/progressBar" + style="?android:attr/progressBarStyleLarge" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_centerInParent="true"/> + <TextView + android:id="@+id/loadingTextView" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_below="@+id/progressBar" + android:layout_centerHorizontal="true" + android:paddingTop="8dp" + android:text="@string/loading" + android:textAppearance="@style/android:TextAppearance.Material.Body1"/> +</RelativeLayout>
\ No newline at end of file diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/activity_images.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/activity_images.xml new file mode 100644 index 00000000..c1ea76d1 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/activity_images.xml @@ -0,0 +1,93 @@ +<?xml version="1.0" encoding="utf-8"?> +<ScrollView + xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/scroll_view_tutorial_images" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout_centerHorizontal="true" + android:layout_centerVertical="true"> + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:paddingTop="?android:dialogPreferredPadding" + android:paddingBottom="?android:dialogPreferredPadding" + android:paddingStart="?android:listPreferredItemPaddingStart" + android:paddingEnd="?android:listPreferredItemPaddingEnd" + android:orientation="vertical"> + <TextView + android:id="@+id/title_images" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:paddingTop="4dp" + android:paddingBottom="4dp" + android:gravity="center_horizontal" + android:text="@string/images" + android:textAppearance="@style/android:TextAppearance.Material.Title"/> + <TextView + android:id="@+id/description_1_tutorial_image" + android:layout_width="wrap_content" + android:layout_height="match_parent" + android:paddingTop="4dp" + android:paddingBottom="4dp" + android:text="@string/description_1_tutorial_image" + android:textAppearance="@style/android:TextAppearance.Material.Body1"/> + <ImageView + android:id="@+id/swipe_left_image" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center" + android:paddingTop="4dp" + android:paddingBottom="4dp" + android:contentDescription="@string/swipe_left" + android:foregroundTint="@color/dark_blue" + android:src="@drawable/oobe_swipe_left_long_animation" + android:tint="@color/dark_blue"/> + <TextView + android:id="@+id/description_2_tutorial_image" + android:layout_width="wrap_content" + android:layout_height="match_parent" + android:paddingTop="4dp" + android:text="@string/description_2_tutorial_image" + android:textAppearance="@style/android:TextAppearance.Material.Body1"/> + <ImageView + android:id="@+id/tap_image" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center" + android:contentDescription="@string/tap" + android:foregroundTint="@color/dark_blue" + android:src="@drawable/oobe_tap_animation" + android:tint="@color/dark_blue"/> + <TextView + android:id="@+id/description_3_tutorial_image" + android:layout_width="wrap_content" + android:layout_height="match_parent" + android:paddingBottom="8dp" + android:text="@string/description_3_tutorial_image" + android:textAppearance="@style/android:TextAppearance.Material.Body1"/> + <TextView + android:id="@+id/description_1_decorative_image" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:paddingTop="8dp" + android:paddingBottom="4dp" + android:text="@string/description_1_decorative_image" + android:textAppearance="@style/android:TextAppearance.Material.Body1"/> + <ImageView + android:id="@+id/bow_image" + android:layout_width="match_parent" + android:layout_height="75dp" + android:paddingTop="4dp" + android:paddingBottom="4dp" + android:scaleType="centerInside" + android:src="@drawable/bow"/> + <TextView + android:id="@+id/description_2_decorative_image" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:paddingTop="4dp" + android:paddingBottom="4dp" + android:text="@string/description_2_decorative_image" + android:textAppearance="@style/android:TextAppearance.Material.Body1"/> + </LinearLayout> +</ScrollView>
\ No newline at end of file diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/activity_list_of_graphics.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/activity_list_of_graphics.xml new file mode 100644 index 00000000..33347a1c --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/activity_list_of_graphics.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8"?> +<ListView + xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/list_view_graphics" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:paddingTop="?android:dialogPreferredPadding" + android:paddingBottom="?android:dialogPreferredPadding" + android:clickable="true" + android:clipToPadding="false" + android:divider="@null" + android:dividerHeight="0dp"/>
\ No newline at end of file diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/activity_lists.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/activity_lists.xml new file mode 100644 index 00000000..b3c1915e --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/activity_lists.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="utf-8"?> +<ListView + xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/list_view_lists" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:paddingTop="?android:dialogPreferredPadding" + android:paddingBottom="?android:dialogPreferredPadding" + android:clipToPadding="false"/>
\ No newline at end of file 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 new file mode 100644 index 00000000..3e7e27d6 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/activity_long_list.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="utf-8"?> +<android.support.wearable.view.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" + android:id="@+id/drawer_layout_long_list" + android:layout_width="match_parent" + android:layout_height="match_parent" + tools:deviceIds="wear"> + <android.support.wearable.view.WearableRecyclerView + android:id="@+id/recycler_view_long_list" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:paddingTop="?android:dialogPreferredPadding" + android:paddingBottom="?android:dialogPreferredPadding" + android:clipToPadding="false" + android:scrollbars="vertical"/> + <android.support.wearable.view.drawer.WearableActionDrawer + 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:show_overflow_in_peek="true"> + </android.support.wearable.view.drawer.WearableActionDrawer> +</android.support.wearable.view.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 new file mode 100644 index 00000000..19a5606c --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/activity_main.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="utf-8"?> +<android.support.wearable.view.WearableRecyclerView + xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/main_recycler_view" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout_centerHorizontal="true" + android:layout_centerVertical="true" + android:scrollbars="vertical"/>
\ No newline at end of file diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/activity_messaging_main.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/activity_messaging_main.xml new file mode 100644 index 00000000..f49d8101 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/activity_messaging_main.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="utf-8"?> +<TextView + xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/messaging_text_view" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:paddingTop="?android:dialogPreferredPadding" + android:paddingBottom="?android:dialogPreferredPadding" + android:paddingStart="?android:listPreferredItemPaddingStart" + android:paddingEnd="?android:listPreferredItemPaddingEnd" + android:text="@string/main_text_activity_messaging_main"/>
\ No newline at end of file diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/activity_notifications.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/activity_notifications.xml new file mode 100644 index 00000000..35cb36ca --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/activity_notifications.xml @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="utf-8"?> +<ScrollView + xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/scroll_view_notifications" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_centerHorizontal="true" + android:layout_centerVertical="true"> + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:paddingTop="?android:dialogPreferredPadding" + android:paddingBottom="?android:dialogPreferredPadding" + android:paddingStart="?android:listPreferredItemPaddingStart" + android:paddingEnd="?android:listPreferredItemPaddingEnd" + android:orientation="vertical"> + <include + android:id="@+id/notifications_title_include" + layout="@layout/title_layout" + android:layout_width="match_parent" + android:layout_height="wrap_content"/> + <include + android:id="@+id/inline_action_switch_include" + layout="@layout/switch_layout" + android:layout_width="match_parent" + android:layout_height="wrap_content"/> + <include + android:id="@+id/avatar_switch_include" + layout="@layout/switch_layout" + android:layout_width="match_parent" + android:layout_height="wrap_content"/> + <include + android:id="@+id/push_notification_app_item_include" + layout="@layout/app_item_layout" + android:layout_width="match_parent" + android:layout_height="wrap_content"/> + </LinearLayout> +</ScrollView>
\ No newline at end of file diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/activity_open_on_phone_animation.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/activity_open_on_phone_animation.xml new file mode 100644 index 00000000..2fef6eb9 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/activity_open_on_phone_animation.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="utf-8"?> +<RelativeLayout + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:paddingTop="?android:dialogPreferredPadding" + android:paddingBottom="?android:dialogPreferredPadding" + tools:context="com.example.android.wearable.wear.wearaccessibilityapp.OpenOnPhoneAnimationActivity"> + <ImageView + android:id="@+id/open_on_phone_animation_image" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_gravity="center_horizontal" + android:contentDescription="tap" + android:foregroundTint="@color/white" + android:src="@drawable/open_on_phone_animation" + android:tint="@color/white"/> + <TextView + android:id="@+id/description_dialogs_phone_animation" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_below="@id/open_on_phone_animation_image" + android:paddingTop="?android:dialogPreferredPadding" + android:gravity="center" + android:text="@string/continue_on_phone" + android:textAppearance="@style/android:TextAppearance.Material.Caption"/> +</RelativeLayout>
\ No newline at end of file diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/activity_photo_carousel.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/activity_photo_carousel.xml new file mode 100644 index 00000000..575680c5 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/activity_photo_carousel.xml @@ -0,0 +1,60 @@ +<?xml version="1.0" encoding="utf-8"?> +<ScrollView + xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/scroll_view_carousel" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout_centerHorizontal="true" + android:layout_centerVertical="true"> + <LinearLayout + android:id="@+id/layout_photo_carousel" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:paddingTop="?android:dialogPreferredPadding" + android:paddingBottom="?android:dialogPreferredPadding" + android:orientation="vertical"> + <TextView + android:id="@+id/title_photo_carousel" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:gravity="center_horizontal" + android:text="@string/photo_carousel" + android:textAppearance="@style/android:TextAppearance.Material.Title"/> + <ImageView + android:id="@+id/cat_image" + android:layout_width="100dp" + android:layout_height="100dp" + android:layout_gravity="center" + android:contentDescription="@string/description_of_cat_image" + android:src="@drawable/cats"/> + <ImageView + android:id="@+id/dog_image" + android:layout_width="100dp" + android:layout_height="100dp" + android:layout_gravity="center" + android:contentDescription="@string/description_of_dog_image" + android:src="@drawable/dog"/> + <ImageView + android:id="@+id/hamster_image" + android:layout_width="100dp" + android:layout_height="100dp" + android:layout_gravity="center" + android:contentDescription="@string/description_of_hamster_image" + android:src="@drawable/hamster"/> + <ImageView + android:id="@+id/bird_image" + android:layout_width="100dp" + android:layout_height="100dp" + android:layout_gravity="center" + android:contentDescription="@string/description_of_bird_image" + android:src="@drawable/birds"/> + <TextView + android:id="@+id/description_photo_carousel" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:paddingStart="?android:listPreferredItemPaddingStart" + android:paddingEnd="?android:listPreferredItemPaddingEnd" + android:text="@string/graphics_description" + android:textAppearance="@style/android:TextAppearance.Material.Body1"/> + </LinearLayout> +</ScrollView>
\ No newline at end of file diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/activity_radio_list.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/activity_radio_list.xml new file mode 100644 index 00000000..dced28ba --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/activity_radio_list.xml @@ -0,0 +1,47 @@ +<?xml version="1.0" encoding="utf-8"?> +<ScrollView + xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout_centerHorizontal="true" + android:layout_centerVertical="true" + android:paddingTop="?android:dialogPreferredPadding"> + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="vertical"> + <include + android:id="@+id/radio_list_title" + layout="@layout/title_layout" + android:layout_width="match_parent" + android:layout_height="wrap_content"/> + <RadioGroup + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_gravity="center" + android:paddingStart="?android:listPreferredItemPaddingStart" + android:paddingEnd="?android:listPreferredItemPaddingEnd"> + <RadioButton + android:id="@+id/radio_button_1" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:textAppearance="@style/android:TextAppearance.Material.Body1" + android:padding="4dp" + android:text="@string/hello"/> + <RadioButton + android:id="@+id/radio_button_2" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:textAppearance="@style/android:TextAppearance.Material.Body1" + android:padding="4dp" + android:text="@string/hi"/> + <RadioButton + android:id="@+id/radio_button_3" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:textAppearance="@style/android:TextAppearance.Material.Body1" + android:padding="4dp" + android:text="@string/howdy"/> + </RadioGroup> + </LinearLayout> +</ScrollView>
\ No newline at end of file diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/activity_zoom_image.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/activity_zoom_image.xml new file mode 100644 index 00000000..43d2223a --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/activity_zoom_image.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="utf-8"?> +<ImageView + xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/expanded_image" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:contentDescription="@string/description_of_cat_image" + android:scaleType="centerInside" + android:src="@drawable/cats"/>
\ No newline at end of file diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/app_item_layout.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/app_item_layout.xml new file mode 100644 index 00000000..5e71559d --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/app_item_layout.xml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout + xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:padding="4dp" + android:paddingEnd="?android:listPreferredItemPaddingEnd"> + <ImageView + android:id="@+id/icon_image_view" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:src="@drawable/ic_view_list_white_1x_web_48dp"/> + <TextView + android:id="@+id/icon_text_view" + android:layout_width="wrap_content" + android:layout_height="match_parent" + android:layout_marginStart="8dp" + android:gravity="center_vertical" + android:text="@string/default_text" + android:textAppearance="@style/android:TextAppearance.Material.Body1"/> +</LinearLayout>
\ No newline at end of file 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 new file mode 100644 index 00000000..27db3aff --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/circled_image_layout.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="utf-8"?> +<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:layout_width="match_parent" + android:layout_height="wrap_content"> + <android.support.wearable.view.CircledImageView + android:id="@+id/circled_image_view" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginStart="?android:listPreferredItemPaddingStart" + app:circle_border_color="?android:colorAccent" + app:circle_border_width="4dp" + app:circle_color="@color/icon_color" + app:circle_radius="18dp"/> + <TextView + android:id="@+id/circled_image_text" + android:layout_width="wrap_content" + android:layout_height="match_parent" + android:gravity="center_vertical" + android:layout_marginStart="8dp" + android:textAppearance="@style/android:TextAppearance.Material.Body1"/> +</LinearLayout>
\ No newline at end of file diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/header_footer_layout.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/header_footer_layout.xml new file mode 100644 index 00000000..3acd282b --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/header_footer_layout.xml @@ -0,0 +1,4 @@ +<?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="?android:dialogPreferredPadding"/>
\ No newline at end of file diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/list_item_layout.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/list_item_layout.xml new file mode 100644 index 00000000..d6527ac0 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/list_item_layout.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<RelativeLayout + xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:padding="4dp" + android:paddingStart="?android:listPreferredItemPaddingStart" + android:paddingEnd="?android:listPreferredItemPaddingEnd"> + <TextView + android:id="@+id/item_text" + android:layout_width="wrap_content" + android:layout_height="match_parent" + android:text="@string/default_text" + android:textAppearance="@style/android:TextAppearance.Material.Title"/> + <ImageView + android:id="@+id/item_image" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_alignParentEnd="true" + android:layout_centerVertical="true" + android:src="@drawable/arrow"/> +</RelativeLayout>
\ No newline at end of file diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/long_list_switch_widget_layout.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/long_list_switch_widget_layout.xml new file mode 100644 index 00000000..740ab5f7 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/long_list_switch_widget_layout.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="utf-8"?> +<RelativeLayout + xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:padding="4dp" + android:paddingStart="?android:listPreferredItemPaddingStart" + android:paddingEnd="?android:listPreferredItemPaddingEnd"> + <Switch + android:id="@+id/switch_widget" + style="@style/Widget.Wear.RoundSwitch" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_alignParentStart="true" + android:layout_alignParentTop="true" + android:checked="false"> + </Switch> + <TextView + android:id="@+id/switch_text" + android:layout_width="wrap_content" + android:layout_height="match_parent" + android:layout_marginLeft="10dp" + android:layout_centerVertical="true" + android:layout_toRightOf="@id/switch_widget" + android:gravity="center_vertical" + android:text="@string/default_text" + android:textAppearance="@style/android:TextAppearance.Material.Body1"/> +</RelativeLayout>
\ No newline at end of file diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/progress_bar_layout.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/progress_bar_layout.xml new file mode 100644 index 00000000..896e915b --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/progress_bar_layout.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="utf-8"?> +<ProgressBar + xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/progress_bar_long_list" + style="?android:attr/progressBarStyle" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_gravity="center_horizontal"/>
\ No newline at end of file diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/progress_bar_with_text_layout.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/progress_bar_with_text_layout.xml new file mode 100644 index 00000000..f1dd6909 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/progress_bar_with_text_layout.xml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout + xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/progress_bar_layout" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:padding="4dp"> + <ProgressBar + android:id="@+id/progress_bar" + style="?android:attr/progressBarStyle" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginStart="?android:listPreferredItemPaddingStart"/> + <TextView + android:id="@+id/progress_bar_text" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="@string/indeterminant_progress" + android:layout_marginStart="8dp" + android:textAppearance="@style/android:TextAppearance.Material.Body1"/> +</LinearLayout>
\ No newline at end of file diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/shifted_app_item_layout.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/shifted_app_item_layout.xml new file mode 100644 index 00000000..cb18a7ad --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/shifted_app_item_layout.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout + xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:padding="4dp" + android:paddingStart="?android:listPreferredItemPaddingStart" + android:paddingEnd="?android:listPreferredItemPaddingEnd"> + <ImageView + android:id="@+id/shifted_icon_image_view" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:src="@drawable/ic_view_list_white_1x_web_48dp"/> + <TextView + android:id="@+id/shifted_icon_text_view" + android:layout_width="wrap_content" + android:layout_height="match_parent" + android:layout_marginStart="8dp" + android:gravity="center_vertical" + android:text="@string/default_text" + android:textAppearance="@style/android:TextAppearance.Material.Body1"/> +</LinearLayout>
\ No newline at end of file diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/switch_layout.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/switch_layout.xml new file mode 100644 index 00000000..b3704381 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/switch_layout.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout + xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/switch_widget_layout" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:padding="4dp"> + <Switch + android:id="@+id/switch_widget" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:checked="true" + android:layout_marginStart="?android:listPreferredItemPaddingStart" + android:clickable="false"> + </Switch> + <TextView + android:id="@+id/switch_text" + android:text="@string/switch_name" + android:textAppearance="@style/android:TextAppearance.Material.Body1" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginStart="8dp" + android:paddingTop="4dp" + android:paddingBottom="4dp"/> +</LinearLayout>
\ No newline at end of file diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/title_layout.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/title_layout.xml new file mode 100644 index 00000000..b1dc97f2 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/layout/title_layout.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8"?> +<TextView + xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/title_text" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:padding="4dp" + android:text="@string/default_text" + android:gravity="center_horizontal" + android:textAppearance="@style/android:TextAppearance.Material.Title"/>
\ No newline at end of file diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/menu/action_drawer_menu.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/menu/action_drawer_menu.xml new file mode 100644 index 00000000..8f74867c --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/menu/action_drawer_menu.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="utf-8"?> +<menu xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="wrap_content" + android:layout_height="match_parent"> + <item + android:id="@+id/menu_click_hold" + android:icon="@drawable/heart" + android:title="@string/action_1"/> + <item + android:id="@+id/menu_right_click" + android:icon="@drawable/heart" + android:title="@string/action_2"/> + <item + android:id="@+id/menu_exit" + android:icon="@drawable/heart" + android:title="@string/action_3"/> +</menu>
\ No newline at end of file diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/values/colors.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/values/colors.xml new file mode 100644 index 00000000..128bb9c6 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/values/colors.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources> + <color name="background">#44104d</color> + <color name="accent">#ec80ff</color> + <color name="icon_color">#9c27b0</color> + <color name="dialog_icon">#7f7f7f</color> +</resources>
\ No newline at end of file diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/values/strings.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/values/strings.xml new file mode 100644 index 00000000..0c9a7dd9 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/values/strings.xml @@ -0,0 +1,117 @@ +<!-- + Copyright 2016 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<resources> + <string name="app_name">Wear Accessibility App</string> + + <!-- Strings for Lists --> + <string name="lists">Lists</string> + <string name="description_2_tutorial_image">Swipe hint is labeled \"swipe left\"</string> + <string name="description_3_tutorial_image">Tap hint labeled \"tap\"</string> + <string name="description_1_decorative_image">Graphics that are used decoratively that do + not add additional meaning do not need a text label.</string> + <string name="description_2_decorative_image">Bow graphic is unlabeled and would be passed + over by a screen reader.</string> + <string name="a_long_list">A long list</string> + <string name="list_of_graphics">List of graphics</string> + <string name="bottom_action_drawer">Bottom action \ndrawer</string> + <string name="photo_carousel">Photo carousel</string> + <string name="images">Images</string> + <string name="graphics_description"> + Each image has a descriptive label for a screenreader.</string> + <string name="description_of_cat_image">Two cats forming a heart.</string> + <string name="description_of_dog_image">Dog holding a bone.</string> + <string name="description_of_hamster_image">Hamster hugging a baby carrot.</string> + <string name="description_of_bird_image">Two love birds on a branch.</string> + <string name="zoom_image">Zoomed Image</string> + <string name="intent_extra_image">image</string> + <string name="description_1_tutorial_image">Graphics that add additional information should + be properly labeled.</string> + <string name="swipe_left">swipe left</string> + <string name="action_1">Action 1</string> + <string name="action_2">Action 2</string> + <string name="action_3">Action 3</string> + <string name="item_text">Item %1$d</string> + <string name="switch_bottom_action_drawer">%1$s Switch Bottom Action Drawer</string> + <string name="on">On</string> + <string name="off">Off</string> + + <!-- Strings for Dialogs --> + <string name="dialogs">Dialogs</string> + <string name="open_on_phone_animation">Open On Phone Animation</string> + <string name="yes_no_dialog">Yes/no dialog</string> + <string name="yes_no_dialog_description">This dialog only has two actions available.</string> + <string name="one_action_dialog">One action dialog</string> + <string name="one_action_dialog_description">There is only one action on this dialog.</string> + <string name="multiple_action_dialog">Multiple action dialog</string> + <string name="multiple_action_dialog_description">This dialog has multiple actions.</string> + <string name="ok">OK</string> + <string name="close">Close</string> + <string name="open_on_phone">Open on phone</string> + <string name="yes_no_action">Yes/No action</string> + <string name="one_action">One action</string> + <string name="multiple_actions">Multiple actions</string> + <string name="continue_on_phone">Continue on phone</string> + <string name="tap">tap</string> + + <!-- Strings for Progress --> + <string name="progress">Progress</string> + <string name="in_line">In-line</string> + <string name="full_screen">Full screen</string> + <string name="loading">Loading…</string> + <string name="start">Start</string> + <string name="determinant">Determinant</string> + <string name="in_line_progress">In-line Progress</string> + <string name="indeterminant_progress">Indeterminant\nProgress</string> + <string name="key_pref_determinant_switch">pref_determinant_switch</string> + <string name="key_pref_circled_image_view">pref_circled_image_view</string> + <string name="key_pref_progress_screen">pref_progress_screen</string> + + <!-- Strings for Controls --> + <string name="controls">Controls</string> + <string name="checkbox">Checkbox</string> + <string name="radio_list">Radio List</string> + <string name="switch_name">Switch</string> + <string name="hello">Hello</string> + <string name="hi">Hi</string> + <string name="howdy">Howdy</string> + <string name="radio_button_list">Radio Button List</string> + + <!-- Strings for Notifications --> + <string name="notifications">Notifications</string> + <string name="main_text_activity_messaging_main"> + This Activity would handle the messaging app\'s functionality for a chat(s). + \n\nThe notification type for this example was the Messaging Style! + </string> + <string name="reply_label">Reply</string> + <string name="inline_action">In-line action</string> + <string name="avatar">Avatar</string> + <string name="push_notification">Push notification now</string> + <string name="key_pref_avatar">pref_avatar</string> + <string name="key_pref_action">pref_action</string> + <string name="key_pref_push_notification">pref_push_notification</string> + + <!-- Strings for Accessibility --> + <string name="description_1_accessibility"> + Make sure your watch is accessible for all users</string> + <string name="description_2_accessibility"> + What does your app look like in the largest text size?</string> + <string name="description_3_accessibility">Does your app work with a screen reader?</string> + <string name="accessibility">Accessibility</string> + <string name="accessibility_settings">Accessibility settings</string> + + <string name="default_text">TextView</string> + <string name="title">title</string> +</resources>
\ No newline at end of file diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/values/styles.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/values/styles.xml new file mode 100644 index 00000000..1c0375ca --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/values/styles.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources> + <style name="SampleAppTheme" parent="android:Theme.Material.NoActionBar"> + <item name="android:colorBackground">@color/background</item> + <item name="android:colorAccent">@color/accent</item> + <!-- Used for border of radio buttons and checkboxes --> + <item name="android:textColorSecondary">@color/icon_color</item> + <!-- Used for icon's background color --> + <item name="android:colorPrimaryDark">@color/icon_color</item> + <!-- Used for action drawer's background color --> + <item name="android:colorBackgroundFloating">@color/icon_color</item> + <!-- Used for dialog's deny buttons --> + <item name="android:colorButtonNormal">@color/dialog_icon</item> + <!-- Used for switch widget's background color --> + <item name="android:colorPrimary">@color/semitransparent_grey</item> + </style> + <style name="OpenOnPhoneAnimationTheme" parent="android:Theme.Material.NoActionBar"> + <item name="android:colorBackground">@color/black</item> + </style> +</resources>
\ No newline at end of file diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/xml/prefs_controls.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/xml/prefs_controls.xml new file mode 100644 index 00000000..dd2909ca --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/xml/prefs_controls.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="utf-8"?> +<PreferenceScreen + xmlns:android="http://schemas.android.com/apk/res/android" + android:title="@string/controls"> + <SwitchPreference + android:key="pref_switch" + android:title="@string/switch_name"/> + <CheckBoxPreference + android:key="pref_checkbox" + android:title="@string/checkbox"/> + <Preference + android:key="pref_radio_button_list" + android:title="@string/radio_button_list" + android:icon="@drawable/arrow_circle"> + <intent + android:targetPackage="com.example.android.wearable.wear.wearaccessibilityapp" + android:targetClass="com.example.android.wearable.wear.wearaccessibilityapp.RadioListActivity"/> + </Preference> +</PreferenceScreen>
\ No newline at end of file diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/xml/prefs_in_line_progress.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/xml/prefs_in_line_progress.xml new file mode 100644 index 00000000..bcf22802 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/xml/prefs_in_line_progress.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8"?> +<PreferenceScreen + xmlns:android="http://schemas.android.com/apk/res/android" + android:key="pref_progress_screen" + android:title="@string/in_line_progress"> + <SwitchPreference + android:key="pref_determinant_switch" + android:title="@string/determinant"/> + <com.example.android.wearable.wear.wearaccessibilityapp.CircledImageViewPreference + android:key="pref_circled_image_view" + android:title="@string/start"/> +</PreferenceScreen>
\ No newline at end of file diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/xml/prefs_notifications.xml b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/xml/prefs_notifications.xml new file mode 100644 index 00000000..dfe76272 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/res/xml/prefs_notifications.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="utf-8"?> +<PreferenceScreen + xmlns:android="http://schemas.android.com/apk/res/android" + android:title="@string/notifications"> + <SwitchPreference + android:key="pref_action" + android:title="@string/inline_action"/> + <SwitchPreference + android:key="pref_avatar" + android:title="@string/avatar"/> + <Preference + android:key="pref_push_notification" + android:title="@string/push_notification" + android:icon="@drawable/arrow_circle"/> +</PreferenceScreen>
\ No newline at end of file diff --git a/wearable/wear/WearAccessibilityApp/build.gradle b/wearable/wear/WearAccessibilityApp/build.gradle new file mode 100644 index 00000000..b95a8604 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/build.gradle @@ -0,0 +1,12 @@ + + +// BEGIN_EXCLUDE +import com.example.android.samples.build.SampleGenPlugin +apply plugin: SampleGenPlugin + +samplegen { + pathToBuild "../../../../../build" + pathToSamplesCommon "../../../common" +} +apply from: "../../../../../build/build.gradle" +// END_EXCLUDE diff --git a/wearable/wear/WearAccessibilityApp/buildSrc/build.gradle b/wearable/wear/WearAccessibilityApp/buildSrc/build.gradle new file mode 100644 index 00000000..7c150e4b --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/buildSrc/build.gradle @@ -0,0 +1,16 @@ + +repositories { + jcenter() +} +dependencies { + compile 'org.freemarker:freemarker:2.3.20' +} + +sourceSets { + main { + groovy { + srcDir new File(rootDir, "../../../../../../build/buildSrc/src/main/groovy") + } + } +} + diff --git a/wearable/wear/WearAccessibilityApp/gradle/wrapper/gradle-wrapper.jar b/wearable/wear/WearAccessibilityApp/gradle/wrapper/gradle-wrapper.jar Binary files differnew file mode 100644 index 00000000..8c0fb64a --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/gradle/wrapper/gradle-wrapper.jar diff --git a/wearable/wear/WearAccessibilityApp/gradle/wrapper/gradle-wrapper.properties b/wearable/wear/WearAccessibilityApp/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 00000000..0a4f2274 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,7 @@ +#Wed Apr 10 15:27:10 PDT 2013 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip + diff --git a/wearable/wear/WearAccessibilityApp/gradlew b/wearable/wear/WearAccessibilityApp/gradlew new file mode 100755 index 00000000..91a7e269 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/gradlew @@ -0,0 +1,164 @@ +#!/usr/bin/env bash + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn ( ) { + echo "$*" +} + +die ( ) { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; +esac + +# For Cygwin, ensure paths are in UNIX format before anything is touched. +if $cygwin ; then + [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` +fi + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >&- +APP_HOME="`pwd -P`" +cd "$SAVED" >&- + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules +function splitJvmOpts() { + JVM_OPTS=("$@") +} +eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS +JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" + +exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/wearable/wear/WearAccessibilityApp/gradlew.bat b/wearable/wear/WearAccessibilityApp/gradlew.bat new file mode 100644 index 00000000..aec99730 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/gradlew.bat @@ -0,0 +1,90 @@ +@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS=
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto init
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto init
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:init
+@rem Get command-line arguments, handling Windowz variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+if "%@eval[2+2]" == "4" goto 4NT_args
+
+:win9xME_args
+@rem Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+goto execute
+
+:4NT_args
+@rem Get arguments from the 4NT Shell from JP Software
+set CMD_LINE_ARGS=%$
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/wearable/wear/WearAccessibilityApp/settings.gradle b/wearable/wear/WearAccessibilityApp/settings.gradle new file mode 100644 index 00000000..9c2651c7 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/settings.gradle @@ -0,0 +1,2 @@ + +include ':Wearable' diff --git a/wearable/wear/WearAccessibilityApp/template-params.xml b/wearable/wear/WearAccessibilityApp/template-params.xml new file mode 100644 index 00000000..dc9f5d52 --- /dev/null +++ b/wearable/wear/WearAccessibilityApp/template-params.xml @@ -0,0 +1,111 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2013 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<sample> + <name>WearAccessibilityApp</name> + <group>Wearable</group> + <package>com.example.android.wearable.wear.wearaccessibilityapp</package> + + <minSdkVersionWear>23</minSdkVersionWear> + <compileSdkVersionWear>26</compileSdkVersionWear> + <targetSdkVersionWear>26</targetSdkVersionWear> + + <multiDexEnabled>true</multiDexEnabled> + + <dependency_wearable>com.android.support:wear:27.0.0</dependency_wearable> + <dependency_wearable>com.android.support.constraint:constraint-layout:1.0.2</dependency_wearable> + <dependency_wearable>com.android.support:appcompat-v7:27.0.0</dependency_wearable> + + + <strings> + <intro> + <![CDATA[ + Introductory text that explains what the sample is intended to demonstrate. Edit + in template-params.xml. + ]]> + </intro> + </strings> + + <template src="base-build" /> + <template src="Wear" /> + + <metadata> + <!-- Values: {DRAFT | PUBLISHED | INTERNAL | DEPRECATED | SUPERCEDED} --> + <status>DRAFT</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 + may have multiple categories, so feel free to add extras. Try to avoid + simply tagging everything with "UI". :)--> + <categories>Wearable</categories> + <technologies>Android</technologies> + <languages>Java</languages> + <solutions>Mobile</solutions> + <!-- Values: {BEGINNER | INTERMEDIATE | ADVANCED | EXPERT} --> + <!-- Beginner is for "getting started" type content, or essential content. + (e.g. "Hello World", activities, intents) + + Intermediate is for content that covers material a beginner doesn't need + to know, but that a skilled developer is expected to know. + (e.g. services, basic styles and theming, sync adapters) + + Advanced is for highly technical content geared towards experienced developers. + (e.g. performance optimizations, custom views, bluetooth) + + Expert is reserved for highly technical or specialized content, and should + be used sparingly. (e.g. VPN clients, SELinux, custom instrumentation runners) --> + <level>INTERMEDIATE</level> + <!-- Dimensions: 512x512, PNG fomrat --> + <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> + </screenshots> + <!-- List of APIs that this sample should be cross-referenced under. Use <android> + for fully-qualified Framework class names ("android:" namespace). + + Use <ext> for custom namespaces, if needed. See "Samples Index API" documentation + for more details. --> + <api_refs> + <android>android.app.ActionBar</android> + </api_refs> + + <!-- 1-3 line description of the sample here. + + 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. + </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. + + Multi-paragraph introduction to sample, from an educational point-of-view. + *Makrdown* formatting allowed. See [Markdown Documentation][1] + for details. + + [1]: http://daringfireball.net/projects/markdown/syntax + </intro> + </metadata> +</sample> |