From ea56da707374f616d66e1a51979399f2240b15d8 Mon Sep 17 00:00:00 2001 From: Andy Wickham Date: Tue, 1 Jul 2014 11:28:10 -0700 Subject: [PATCH] Use WearableListView in Timer sample app. Bug: 15864517 Change-Id: Ia56111457c2d74571e69a5a554d5755bb1c1b220 --- samples/wearable/Timer/Wearable/build.gradle | 6 +- .../wearable/timer/SetTimerActivity.java | 56 +++++++++--- .../timer/WearableListItemLayout.java | 90 +++++++++++++++++++ .../src/main/res/drawable/wl_circle.xml | 6 ++ .../src/main/res/layout/timer_list_item.xml | 23 +++++ .../src/main/res/layout/timer_set_timer.xml | 9 +- .../Wearable/src/main/res/values/colors.xml | 6 ++ .../Wearable/src/main/res/values/integers.xml | 4 + 8 files changed, 180 insertions(+), 20 deletions(-) create mode 100644 samples/wearable/Timer/Wearable/src/main/java/com/example/android/wearable/timer/WearableListItemLayout.java create mode 100644 samples/wearable/Timer/Wearable/src/main/res/drawable/wl_circle.xml create mode 100644 samples/wearable/Timer/Wearable/src/main/res/layout/timer_list_item.xml create mode 100644 samples/wearable/Timer/Wearable/src/main/res/values/colors.xml create mode 100644 samples/wearable/Timer/Wearable/src/main/res/values/integers.xml diff --git a/samples/wearable/Timer/Wearable/build.gradle b/samples/wearable/Timer/Wearable/build.gradle index b9450ca9a..9c8901452 100644 --- a/samples/wearable/Timer/Wearable/build.gradle +++ b/samples/wearable/Timer/Wearable/build.gradle @@ -3,14 +3,12 @@ apply plugin: 'android' android { compileSdkVersion 20 buildToolsVersion '20' - defaultConfig { minSdkVersion 20 targetSdkVersion 20 versionCode 1 - versionName "1.0" + versionName '1.0' } - buildTypes { release { runProguard false @@ -20,5 +18,5 @@ android { } dependencies { - compile "com.google.android.support:wearable:1.0.+" + compile 'com.google.android.support:wearable:+' } diff --git a/samples/wearable/Timer/Wearable/src/main/java/com/example/android/wearable/timer/SetTimerActivity.java b/samples/wearable/Timer/Wearable/src/main/java/com/example/android/wearable/timer/SetTimerActivity.java index b5e19baf0..f660f9ff1 100644 --- a/samples/wearable/Timer/Wearable/src/main/java/com/example/android/wearable/timer/SetTimerActivity.java +++ b/samples/wearable/Timer/Wearable/src/main/java/com/example/android/wearable/timer/SetTimerActivity.java @@ -26,23 +26,23 @@ import android.content.Intent; import android.content.res.Resources; import android.os.Bundle; import android.provider.AlarmClock; +import android.support.wearable.view.WearableListView; import android.util.Log; -import android.view.View; -import android.widget.AdapterView; -import android.widget.ArrayAdapter; -import android.widget.ListView; +import android.view.LayoutInflater; +import android.view.ViewGroup; +import android.widget.TextView; import com.example.android.wearable.timer.util.Constants; import com.example.android.wearable.timer.util.TimerFormat; /** This class sets a timer. */ -public class SetTimerActivity extends Activity implements AdapterView.OnItemClickListener { +public class SetTimerActivity extends Activity implements WearableListView.ClickListener { public static final int NUMBER_OF_TIMES = 10; public static final String TAG = "SetTimerActivity"; private ListViewItem[] mTimeOptions = new ListViewItem[NUMBER_OF_TIMES]; - private ListView mListView; + private WearableListView mWearableListView; @Override @@ -70,11 +70,9 @@ public class SetTimerActivity extends Activity implements AdapterView.OnItemClic setContentView(R.layout.timer_set_timer); // Initialize a simple list of countdown time options. - mListView = (ListView) findViewById(R.id.times_list_view); - ArrayAdapter arrayAdapter = new ArrayAdapter(this, - android.R.layout.simple_list_item_1, mTimeOptions); - mListView.setAdapter(arrayAdapter); - mListView.setOnItemClickListener(this); + mWearableListView = (WearableListView) findViewById(R.id.times_list_view); + mWearableListView.setAdapter(new TimerWearableListViewAdapter(this)); + mWearableListView.setClickListener(this); } /** @@ -98,11 +96,15 @@ public class SetTimerActivity extends Activity implements AdapterView.OnItemClic } @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - long duration = mTimeOptions[position].duration; + public void onClick(WearableListView.ViewHolder holder) { + long duration = mTimeOptions[holder.getPosition()].duration; setupTimer(duration); } + @Override + public void onTopEmptyRegionClick() { + } + private void registerWithAlarmManager(long duration) { // Get the alarm manager. AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE); @@ -184,4 +186,32 @@ public class SetTimerActivity extends Activity implements AdapterView.OnItemClic } } + private final class TimerWearableListViewAdapter extends WearableListView.Adapter { + private final Context mContext; + private final LayoutInflater mInflater; + + private TimerWearableListViewAdapter(Context context) { + mContext = context; + mInflater = LayoutInflater.from(context); + } + + @Override + public WearableListView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + return new WearableListView.ViewHolder( + mInflater.inflate(R.layout.timer_list_item, null)); + } + + @Override + public void onBindViewHolder(WearableListView.ViewHolder holder, int position) { + TextView view = (TextView) holder.itemView.findViewById(R.id.time_text); + view.setText(mTimeOptions[position].label); + holder.itemView.setTag(position); + } + + @Override + public int getItemCount() { + return NUMBER_OF_TIMES; + } + } + } diff --git a/samples/wearable/Timer/Wearable/src/main/java/com/example/android/wearable/timer/WearableListItemLayout.java b/samples/wearable/Timer/Wearable/src/main/java/com/example/android/wearable/timer/WearableListItemLayout.java new file mode 100644 index 000000000..0bbc58720 --- /dev/null +++ b/samples/wearable/Timer/Wearable/src/main/java/com/example/android/wearable/timer/WearableListItemLayout.java @@ -0,0 +1,90 @@ +/* + * Copyright (C) 2014 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. + */ + +package com.example.android.wearable.timer; + +import android.content.Context; +import android.graphics.drawable.GradientDrawable; +import android.support.wearable.view.WearableListView; +import android.util.AttributeSet; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +public class WearableListItemLayout extends LinearLayout implements WearableListView.Item { + private final float mFadedTextAlpha; + private final int mFadedCircleColor; + private final int mChosenCircleColor; + private ImageView mCircle; + private float mScale; + private TextView mName; + + public WearableListItemLayout(Context context) { + this(context, null); + } + + public WearableListItemLayout(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public WearableListItemLayout(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + mFadedTextAlpha = getResources().getInteger(R.integer.action_text_faded_alpha) / 100f; + mFadedCircleColor = getResources().getColor(R.color.wl_gray); + mChosenCircleColor = getResources().getColor(R.color.wl_blue); + } + + @Override + protected void onFinishInflate() { + super.onFinishInflate(); + mCircle = (ImageView) findViewById(R.id.circle); + mName = (TextView) findViewById(R.id.time_text); + } + + @Override + public float getProximityMinValue() { + return 1f; + } + + @Override + public float getProximityMaxValue() { + return 1.6f; + } + + @Override + public float getCurrentProximityValue() { + return mScale; + } + + @Override + public void setScalingAnimatorValue(float scale) { + mScale = scale; + mCircle.setScaleX(scale); + mCircle.setScaleY(scale); + } + + @Override + public void onScaleUpStart() { + mName.setAlpha(1f); + ((GradientDrawable) mCircle.getDrawable()).setColor(mChosenCircleColor); + } + + @Override + public void onScaleDownStart() { + ((GradientDrawable) mCircle.getDrawable()).setColor(mFadedCircleColor); + mName.setAlpha(mFadedTextAlpha); + } +} diff --git a/samples/wearable/Timer/Wearable/src/main/res/drawable/wl_circle.xml b/samples/wearable/Timer/Wearable/src/main/res/drawable/wl_circle.xml new file mode 100644 index 000000000..a06c53a8d --- /dev/null +++ b/samples/wearable/Timer/Wearable/src/main/res/drawable/wl_circle.xml @@ -0,0 +1,6 @@ + + + + diff --git a/samples/wearable/Timer/Wearable/src/main/res/layout/timer_list_item.xml b/samples/wearable/Timer/Wearable/src/main/res/layout/timer_list_item.xml new file mode 100644 index 000000000..6cef07a2b --- /dev/null +++ b/samples/wearable/Timer/Wearable/src/main/res/layout/timer_list_item.xml @@ -0,0 +1,23 @@ + + + + + \ No newline at end of file diff --git a/samples/wearable/Timer/Wearable/src/main/res/layout/timer_set_timer.xml b/samples/wearable/Timer/Wearable/src/main/res/layout/timer_set_timer.xml index e605bb8e3..cdf9e77e2 100644 --- a/samples/wearable/Timer/Wearable/src/main/res/layout/timer_set_timer.xml +++ b/samples/wearable/Timer/Wearable/src/main/res/layout/timer_set_timer.xml @@ -14,7 +14,10 @@ limitations under the License. --> - + android:scrollbars="none" + android:dividerHeight="0dp" /> \ No newline at end of file diff --git a/samples/wearable/Timer/Wearable/src/main/res/values/colors.xml b/samples/wearable/Timer/Wearable/src/main/res/values/colors.xml new file mode 100644 index 000000000..a8bb87b7e --- /dev/null +++ b/samples/wearable/Timer/Wearable/src/main/res/values/colors.xml @@ -0,0 +1,6 @@ + + + #2878ff + #c1c1c1 + #434343 + diff --git a/samples/wearable/Timer/Wearable/src/main/res/values/integers.xml b/samples/wearable/Timer/Wearable/src/main/res/values/integers.xml new file mode 100644 index 000000000..c3bc25215 --- /dev/null +++ b/samples/wearable/Timer/Wearable/src/main/res/values/integers.xml @@ -0,0 +1,4 @@ + + + 40 +