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 
17 package com.example.android.support.wearable.notifications;
18 
19 import android.content.Context;
20 import android.content.res.Resources;
21 import android.view.LayoutInflater;
22 import android.view.View;
23 import android.view.ViewGroup;
24 import android.widget.ImageView;
25 import android.widget.TextView;
26 
27 import java.util.ArrayList;
28 import java.util.List;
29 
30 /**
31  * Manages the background image pickers.
32  */
33 public class BackgroundPickers {
34 
35     public interface OnBackgroundPickersChangedListener {
onBackgroundPickersChanged(BackgroundPickers pickers)36         public void onBackgroundPickersChanged(BackgroundPickers pickers);
37     }
38 
39     private final ViewGroup mContainer;
40     private final OnPickedListener mOnPickedListener;
41     private final List<ViewGroup> mPickers;
42     private final OnBackgroundPickersChangedListener listener;
43 
BackgroundPickers(ViewGroup container, OnBackgroundPickersChangedListener listener)44     public BackgroundPickers(ViewGroup container, OnBackgroundPickersChangedListener listener) {
45         this.mContainer = container;
46         this.mOnPickedListener = new OnPickedListener();
47         this.mPickers = new ArrayList<ViewGroup>();
48         this.listener = listener;
49     }
50 
51     /**
52      * Generates the pickers as necessary.
53      */
generatePickers(int count)54     public void generatePickers(int count) {
55         // Clear existing containers.
56         clear();
57 
58         // Fill in new pickers.
59         LayoutInflater inflater = LayoutInflater.from(mContainer.getContext());
60         Resources res = mContainer.getResources();
61         for (int i = 0; i < count; i++) {
62             View picker = inflater.inflate(R.layout.background_picker, mContainer, false);
63             TextView label = (TextView) picker.findViewById(R.id.bg_picker_label);
64             label.setText(String.format(res.getString(R.string.bg_picker_label), i+1));
65             ViewGroup pickerBox = (ViewGroup) picker.findViewById(R.id.bg_picker_container);
66             mPickers.add(pickerBox);
67             for (int j = 0; j < pickerBox.getChildCount(); j++) {
68                 ImageView img = (ImageView) pickerBox.getChildAt(j);
69                 img.setOnClickListener(mOnPickedListener);
70             }
71             mContainer.addView(picker);
72         }
73     }
74 
75     /**
76      * Returns the background resource for the picker at the given index.
77      * @param position Index of the background picker.
78      * @return Id of the background image resource. null if no image is picked.
79      */
getRes(int position)80     public Integer getRes(int position) {
81         String tag = (String) mPickers.get(position).getTag();
82         if (tag == null) {
83             return null;
84         }
85 
86         Context context = mContainer.getContext();
87         return context.getResources().getIdentifier(tag, "drawable", context.getPackageName());
88     }
89 
90     /**
91      * Returns the all the background resources for the pickers managed by this object. Returns null
92      * if no pickers exist.
93      */
getRes()94     public Integer[] getRes() {
95         if (mPickers.size() == 0) {
96             return null;
97         }
98 
99         Integer[] res = new Integer[mPickers.size()];
100         for (int i = 0; i < mPickers.size(); i++) {
101             res[i] = getRes(i);
102         }
103         return res;
104     }
105 
106     /**
107      * Clears the pickers.
108      */
clear()109     public void clear() {
110         mContainer.removeAllViews();
111         mPickers.clear();
112     }
113 
getCount()114     public int getCount() {
115         return mPickers.size();
116     }
117 
118     private class OnPickedListener implements View.OnClickListener {
119 
120         @Override
onClick(View view)121         public void onClick(View view) {
122             ImageView pickedView = (ImageView) view;
123             ViewGroup pickerBox = (ViewGroup) view.getParent();
124 
125             // Clear old selection.
126             for (int i = 0; i < pickerBox.getChildCount(); i++) {
127                 ImageView childView = (ImageView) pickerBox.getChildAt(i);
128                 childView.setBackgroundResource(R.drawable.unselected_background);
129             }
130 
131             // Set new selection.
132             pickedView.setBackgroundResource(R.drawable.selected_background);
133             pickerBox.setTag(pickedView.getTag());
134 
135             if (listener != null) {
136                 listener.onBackgroundPickersChanged(BackgroundPickers.this);
137             }
138         }
139     }
140 }
141