• 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 
17 package com.android.tv.settings.name;
18 
19 import android.app.Fragment;
20 import android.content.Context;
21 import android.os.Build;
22 import android.os.Bundle;
23 import android.text.TextUtils;
24 import android.view.LayoutInflater;
25 import android.view.View;
26 import android.view.ViewGroup;
27 import android.widget.AdapterView;
28 import android.widget.FrameLayout;
29 import android.widget.ImageView;
30 import android.widget.TextView;
31 
32 import java.util.ArrayList;
33 
34 import com.android.tv.settings.R;
35 import com.android.tv.settings.widget.ScrollAdapterView;
36 import com.android.tv.settings.widget.ScrollArrayAdapter;
37 
38 public class SetDeviceNameFragment extends Fragment implements AdapterView.OnItemClickListener {
39 
40     private static final String ARG_NAME_LIST = "suggested_names";
41     private static final String ARG_SHOW_CUSTOM_OPTION = "allow_custom";
42     private static final int LAYOUT_MAIN = R.layout.setup_content_area;
43     private static final int LAYOUT_DESCRIPTION = R.layout.setup_text_and_description;
44     private static final int LAYOUT_ACTION = R.layout.setup_scroll_adapter_view;
45     private static final int LAYOUT_LIST_ITEM = R.layout.setup_list_item_text_only;
46     private static final int LAYOUT_ITEM_TEXT = R.id.list_item_text;
47 
createInstance(ArrayList<String> names, boolean allowCustom)48     public static SetDeviceNameFragment createInstance(ArrayList<String> names,
49                                                     boolean allowCustom) {
50         SetDeviceNameFragment frag = new SetDeviceNameFragment();
51         Bundle args = new Bundle();
52         args.putStringArrayList(SetDeviceNameFragment.ARG_NAME_LIST, names);
53         args.putBoolean(SetDeviceNameFragment.ARG_SHOW_CUSTOM_OPTION, allowCustom);
54         frag.setArguments(args);
55         return frag;
56     }
57 
58     private SetDeviceNameListener mEventListener;
59     private ArrayList<String> mOptions;
60     private boolean mShowCustom;
61     private View mContent;
62     private FrameLayout mDescription;
63     private FrameLayout mAction;
64     private ScrollAdapterView mList;
65     private ScrollArrayAdapter<String> mListAdapter;
66     private String mCustomRoomString = "";
67 
68     @Override
onCreate(Bundle savedInstanceState)69     public void onCreate(Bundle savedInstanceState) {
70         super.onCreate(savedInstanceState);
71         Bundle args = getArguments();
72         if (args.containsKey(ARG_NAME_LIST)) {
73             mOptions = args.getStringArrayList(ARG_NAME_LIST);
74         } else {
75             mOptions = new ArrayList<String>();
76         }
77 
78         mShowCustom = args.getBoolean(ARG_SHOW_CUSTOM_OPTION, false);
79 
80         if (mShowCustom) {
81             mCustomRoomString = getResources().getString(R.string.custom_room);
82             mOptions.add(mCustomRoomString);
83         }
84     }
85 
86     @Override
onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)87     public View onCreateView(LayoutInflater inflater, ViewGroup container,
88                              Bundle savedInstanceState) {
89         mContent = inflater.inflate(LAYOUT_MAIN, null);
90         mAction = (FrameLayout) mContent.findViewById(R.id.action);
91         mDescription = (FrameLayout) mContent.findViewById(R.id.description);
92         mDescription.addView(inflater.inflate(LAYOUT_DESCRIPTION, null));
93         String title = getResources().getString(R.string.select_title);
94         ((TextView) mDescription.findViewById(R.id.title_text))
95                 .setText(TextUtils.expandTemplate(title, Build.MODEL));
96         String description = getResources().getString(R.string.select_description);
97         ((TextView) mDescription.findViewById(R.id.description_text))
98                 .setText(TextUtils.expandTemplate(description, Build.MODEL));
99         mList = (ScrollAdapterView) inflater.inflate(LAYOUT_ACTION, null);
100         mAction.addView(mList);
101         setupList();
102         return mContent;
103     }
104 
setListener(SetDeviceNameListener listener)105     public void setListener(SetDeviceNameListener listener) {
106         mEventListener = listener;
107     }
108 
109     @Override
onItemClick(AdapterView<?> parent, View view, int position, long id)110     public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
111         if (isCustomListItem(position)) {
112             mEventListener.onCustomNameRequested();
113         } else {
114             mEventListener.onDeviceNameSelected(mOptions.get(position));
115         }
116     }
117 
setupList()118     private void setupList() {
119         mListAdapter = new ScrollArrayAdapter<String>(getActivity(), LAYOUT_LIST_ITEM,
120                 LAYOUT_ITEM_TEXT, mOptions) {
121             private static final int VIEW_TYPE_TEXT = 0;
122             private static final int VIEW_TYPE_TEXT_AND_ICON = 1;
123             @Override
124             public View getView(int position, View convertView, ViewGroup parent) {
125                 // for a "standard" item, return standard view
126                 if (!isCustomListItem(position)) {
127                     return super.getView(position, convertView, parent);
128                 }
129 
130                 // for the "other option" draw a custom view that includes an icon
131                 if (convertView == null) {
132                     LayoutInflater helium = (LayoutInflater) getActivity().getSystemService(
133                             Context.LAYOUT_INFLATER_SERVICE);
134                     convertView = helium.inflate(R.layout.setup_list_item, null);
135 
136                     // our image view is always going to be the same, so set that here
137                     ImageView plusIcon = new ImageView(getActivity());
138                     plusIcon.setImageResource(R.drawable.ic_menu_add);
139 
140                     ((FrameLayout) convertView.findViewById(R.id.list_item_icon)).addView(plusIcon);
141                 }
142 
143                 TextView itemLabel = (TextView) convertView.findViewById(R.id.list_item_text);
144                 itemLabel.setText(mOptions.get(position));
145                 return convertView;
146             }
147 
148             @Override
149             public int getViewTypeCount() {
150                 return 2;
151             }
152 
153             @Override
154             public int getItemViewType(int position) {
155                 return mOptions.get(position).equals(mCustomRoomString) ?
156                         VIEW_TYPE_TEXT_AND_ICON : VIEW_TYPE_TEXT;
157             }
158         };
159         mList.setAdapter(mListAdapter);
160         mList.setOnItemClickListener(this);
161     }
162 
isCustomListItem(int position)163     private boolean isCustomListItem(int position) {
164         return mOptions.get(position).equals(mCustomRoomString);
165     }
166 }
167