Skip to content

Most visited

Recently visited

navigation
WatchFace / Wearable / src / com.example.android.wearable.watchface /

ComplicationSimpleConfigActivity.java

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
}
This site uses cookies to store your preferences for site-specific language and display options.

Hooray!