• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2014 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.example.android.wearable.watchface;
17 
18 import android.app.Activity;
19 import android.content.ComponentName;
20 import android.content.Context;
21 import android.content.Intent;
22 import android.content.res.TypedArray;
23 import android.graphics.drawable.Drawable;
24 import android.os.Bundle;
25 import android.support.wearable.complications.ProviderChooserIntent;
26 import android.support.wearable.view.WearableListView;
27 import android.util.Log;
28 import android.view.LayoutInflater;
29 import android.view.View;
30 import android.view.ViewGroup;
31 import android.widget.ImageView;
32 import android.widget.TextView;
33 
34 import java.util.ArrayList;
35 import java.util.List;
36 
37 /**
38  * The watch-side config activity for {@link ComplicationSimpleWatchFaceService}, which
39  * allows for setting complications on the left and right of watch face.
40  */
41 public class ComplicationSimpleConfigActivity extends Activity implements
42         WearableListView.ClickListener {
43 
44     private static final String TAG = "CompSimpleConfig";
45 
46     private static final int PROVIDER_CHOOSER_REQUEST_CODE = 1;
47 
48     private WearableListView mWearableConfigListView;
49     private ConfigurationAdapter mAdapter;
50 
51     @Override
onCreate(Bundle savedInstanceState)52     protected void onCreate(Bundle savedInstanceState) {
53         super.onCreate(savedInstanceState);
54         setContentView(R.layout.activity_complication_simple_config);
55 
56         mAdapter = new ConfigurationAdapter(getApplicationContext(), getComplicationItems());
57 
58         mWearableConfigListView = (WearableListView) findViewById(R.id.wearable_list);
59         mWearableConfigListView.setAdapter(mAdapter);
60         mWearableConfigListView.setClickListener(this);
61     }
62 
63     @Override
onActivityResult(int requestCode, int resultCode, Intent data)64     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
65         if (requestCode == PROVIDER_CHOOSER_REQUEST_CODE
66                 && resultCode == RESULT_OK) {
67             finish();
68         }
69     }
70 
71     @Override
onClick(WearableListView.ViewHolder viewHolder)72     public void onClick(WearableListView.ViewHolder viewHolder) {
73         if (Log.isLoggable(TAG, Log.DEBUG)) {
74             Log.d(TAG, "onClick()");
75         }
76 
77         Integer tag = (Integer) viewHolder.itemView.getTag();
78         ComplicationItem complicationItem = mAdapter.getItem(tag);
79 
80         startActivityForResult(ProviderChooserIntent.createProviderChooserIntent(
81                 complicationItem.watchFace,
82                 complicationItem.complicationId,
83                 complicationItem.supportedTypes), PROVIDER_CHOOSER_REQUEST_CODE);
84     }
85 
getComplicationItems()86     private List<ComplicationItem> getComplicationItems() {
87         ComponentName watchFace = new ComponentName(
88                 getApplicationContext(), ComplicationSimpleWatchFaceService.class);
89 
90         String[] complicationNames =
91                 getResources().getStringArray(R.array.complication_simple_names);
92 
93         int[] complicationIds = ComplicationSimpleWatchFaceService.COMPLICATION_IDS;
94 
95         TypedArray icons = getResources().obtainTypedArray(R.array.complication_simple_icons);
96 
97         List<ComplicationItem> items = new ArrayList<>();
98         for (int i = 0; i < complicationIds.length; i++) {
99             items.add(new ComplicationItem(watchFace,
100                     complicationIds[i],
101                     ComplicationSimpleWatchFaceService.COMPLICATION_SUPPORTED_TYPES[i],
102                     icons.getDrawable(i),
103                     complicationNames[i]));
104         }
105         return items;
106     }
107 
108     @Override
onTopEmptyRegionClick()109     public void onTopEmptyRegionClick() {
110         if (Log.isLoggable(TAG, Log.DEBUG)) {
111             Log.d(TAG, "onTopEmptyRegionClick()");
112         }
113     }
114 
115     /*
116      * Inner class representing items of the ConfigurationAdapter (WearableListView.Adapter) class.
117      */
118     private final class ComplicationItem {
119         ComponentName watchFace;
120         int complicationId;
121         int[] supportedTypes;
122         Drawable icon;
123         String title;
124 
ComplicationItem(ComponentName watchFace, int complicationId, int[] supportedTypes, Drawable icon, String title)125         public ComplicationItem(ComponentName watchFace, int complicationId, int[] supportedTypes,
126                                 Drawable icon, String title) {
127             this.watchFace = watchFace;
128             this.complicationId = complicationId;
129             this.supportedTypes = supportedTypes;
130             this.icon = icon;
131             this.title = title;
132         }
133     }
134 
135     private static class ConfigurationAdapter extends WearableListView.Adapter {
136 
137         private Context mContext;
138         private final LayoutInflater mInflater;
139         private List<ComplicationItem> mItems;
140 
141 
ConfigurationAdapter(Context context, List<ComplicationItem> items)142         public ConfigurationAdapter (Context context, List<ComplicationItem> items) {
143             mContext = context;
144             mInflater = LayoutInflater.from(mContext);
145             mItems = items;
146         }
147 
148         // Provides a reference to the type of views you're using
149         public static class ItemViewHolder extends WearableListView.ViewHolder {
150             private ImageView iconImageView;
151             private TextView textView;
ItemViewHolder(View itemView)152             public ItemViewHolder(View itemView) {
153                 super(itemView);
154                 iconImageView = (ImageView) itemView.findViewById(R.id.icon);
155                 textView = (TextView) itemView.findViewById(R.id.name);
156             }
157         }
158 
159         @Override
onCreateViewHolder(ViewGroup parent, int viewType)160         public WearableListView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
161 
162             // Inflate custom layout for list items.
163             return new ItemViewHolder(
164                     mInflater.inflate(R.layout.activity_complication_simple_list_item, null));
165         }
166 
167         @Override
onBindViewHolder(WearableListView.ViewHolder holder, int position)168         public void onBindViewHolder(WearableListView.ViewHolder holder, int position) {
169 
170             ItemViewHolder itemHolder = (ItemViewHolder) holder;
171 
172             ImageView imageView = itemHolder.iconImageView;
173             imageView.setImageDrawable(mItems.get(position).icon);
174 
175             TextView textView = itemHolder.textView;
176             textView.setText(mItems.get(position).title);
177 
178             holder.itemView.setTag(position);
179         }
180 
181         @Override
getItemCount()182         public int getItemCount() {
183             return mItems.size();
184         }
185 
getItem(int position)186         public ComplicationItem getItem(int position) {
187             return mItems.get(position);
188         }
189     }
190 
191 }