Home | History | Annotate | Download | only in com.example.android.wearable.watchface
      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.ComplicationHelperActivity;
     26 import android.support.wearable.complications.ComplicationProviderInfo;
     27 import android.support.wearable.complications.ProviderChooserIntent;
     28 import android.support.wearable.view.WearableListView;
     29 import android.util.Log;
     30 import android.view.LayoutInflater;
     31 import android.view.View;
     32 import android.view.ViewGroup;
     33 import android.widget.ImageView;
     34 import android.widget.TextView;
     35 
     36 import java.util.ArrayList;
     37 import java.util.List;
     38 
     39 /**
     40  * The watch-side config activity for {@link ComplicationSimpleWatchFaceService}, which
     41  * allows for setting complications on the left and right of watch face.
     42  */
     43 public class ComplicationSimpleConfigActivity extends Activity implements
     44         WearableListView.ClickListener {
     45 
     46     private static final String TAG = "CompSimpleConfig";
     47 
     48     private static final int PROVIDER_CHOOSER_REQUEST_CODE = 1;
     49 
     50     private WearableListView mWearableConfigListView;
     51     private ConfigurationAdapter mAdapter;
     52 
     53     @Override
     54     protected void onCreate(Bundle savedInstanceState) {
     55         super.onCreate(savedInstanceState);
     56         setContentView(R.layout.activity_complication_simple_config);
     57 
     58         mAdapter = new ConfigurationAdapter(getApplicationContext(), getComplicationItems());
     59 
     60         mWearableConfigListView = (WearableListView) findViewById(R.id.wearable_list);
     61         mWearableConfigListView.setAdapter(mAdapter);
     62         mWearableConfigListView.setClickListener(this);
     63     }
     64 
     65     @Override
     66     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
     67         if (requestCode == PROVIDER_CHOOSER_REQUEST_CODE
     68                 && resultCode == RESULT_OK) {
     69 
     70             // Retrieves information for selected Complication provider.
     71             ComplicationProviderInfo complicationProviderInfo =
     72                     data.getParcelableExtra(ProviderChooserIntent.EXTRA_PROVIDER_INFO);
     73 
     74             Log.d(TAG, "Selected Provider: " + complicationProviderInfo);
     75 
     76             finish();
     77         }
     78     }
     79 
     80     @Override
     81     public void onClick(WearableListView.ViewHolder viewHolder) {
     82         if (Log.isLoggable(TAG, Log.DEBUG)) {
     83             Log.d(TAG, "onClick()");
     84         }
     85 
     86         Integer tag = (Integer) viewHolder.itemView.getTag();
     87         ComplicationItem complicationItem = mAdapter.getItem(tag);
     88 
     89         // Note: If you were previously using ProviderChooserIntent.createProviderChooserIntent()
     90         // (now deprecated), you will want to switch to
     91         // ComplicationHelperActivity.createProviderChooserHelperIntent()
     92         startActivityForResult(
     93                 ComplicationHelperActivity.createProviderChooserHelperIntent(
     94                         getApplicationContext(),
     95                         complicationItem.watchFace,
     96                         complicationItem.complicationId,
     97                         complicationItem.supportedTypes),
     98                 PROVIDER_CHOOSER_REQUEST_CODE);
     99     }
    100 
    101     private List<ComplicationItem> getComplicationItems() {
    102         ComponentName watchFace = new ComponentName(
    103                 getApplicationContext(), ComplicationSimpleWatchFaceService.class);
    104 
    105         String[] complicationNames =
    106                 getResources().getStringArray(R.array.complication_simple_names);
    107 
    108         int[] complicationIds = ComplicationSimpleWatchFaceService.COMPLICATION_IDS;
    109 
    110         TypedArray icons = getResources().obtainTypedArray(R.array.complication_simple_icons);
    111 
    112         List<ComplicationItem> items = new ArrayList<>();
    113         for (int i = 0; i < complicationIds.length; i++) {
    114             items.add(new ComplicationItem(watchFace,
    115                     complicationIds[i],
    116                     ComplicationSimpleWatchFaceService.COMPLICATION_SUPPORTED_TYPES[i],
    117                     icons.getDrawable(i),
    118                     complicationNames[i]));
    119         }
    120         return items;
    121     }
    122 
    123     @Override
    124     public void onTopEmptyRegionClick() {
    125         if (Log.isLoggable(TAG, Log.DEBUG)) {
    126             Log.d(TAG, "onTopEmptyRegionClick()");
    127         }
    128     }
    129 
    130     /*
    131      * Inner class representing items of the ConfigurationAdapter (WearableListView.Adapter) class.
    132      */
    133     private final class ComplicationItem {
    134         ComponentName watchFace;
    135         int complicationId;
    136         int[] supportedTypes;
    137         Drawable icon;
    138         String title;
    139 
    140         public ComplicationItem(ComponentName watchFace, int complicationId, int[] supportedTypes,
    141                                 Drawable icon, String title) {
    142             this.watchFace = watchFace;
    143             this.complicationId = complicationId;
    144             this.supportedTypes = supportedTypes;
    145             this.icon = icon;
    146             this.title = title;
    147         }
    148     }
    149 
    150     private static class ConfigurationAdapter extends WearableListView.Adapter {
    151 
    152         private Context mContext;
    153         private final LayoutInflater mInflater;
    154         private List<ComplicationItem> mItems;
    155 
    156 
    157         public ConfigurationAdapter (Context context, List<ComplicationItem> items) {
    158             mContext = context;
    159             mInflater = LayoutInflater.from(mContext);
    160             mItems = items;
    161         }
    162 
    163         // Provides a reference to the type of views you're using
    164         public static class ItemViewHolder extends WearableListView.ViewHolder {
    165             private ImageView iconImageView;
    166             private TextView textView;
    167             public ItemViewHolder(View itemView) {
    168                 super(itemView);
    169                 iconImageView = (ImageView) itemView.findViewById(R.id.icon);
    170                 textView = (TextView) itemView.findViewById(R.id.name);
    171             }
    172         }
    173 
    174         @Override
    175         public WearableListView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    176 
    177             // Inflate custom layout for list items.
    178             return new ItemViewHolder(
    179                     mInflater.inflate(R.layout.activity_complication_simple_list_item, null));
    180         }
    181 
    182         @Override
    183         public void onBindViewHolder(WearableListView.ViewHolder holder, int position) {
    184 
    185             ItemViewHolder itemHolder = (ItemViewHolder) holder;
    186 
    187             ImageView imageView = itemHolder.iconImageView;
    188             imageView.setImageDrawable(mItems.get(position).icon);
    189 
    190             TextView textView = itemHolder.textView;
    191             textView.setText(mItems.get(position).title);
    192 
    193             holder.itemView.setTag(position);
    194         }
    195 
    196         @Override
    197         public int getItemCount() {
    198             return mItems.size();
    199         }
    200 
    201         public ComplicationItem getItem(int position) {
    202             return mItems.get(position);
    203         }
    204     }
    205 }