• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2015 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.accessories;
18 
19 import android.bluetooth.BluetoothDevice;
20 import android.content.Context;
21 import android.graphics.Bitmap;
22 import android.graphics.Canvas;
23 import android.graphics.drawable.BitmapDrawable;
24 import android.graphics.drawable.Drawable;
25 import android.os.Bundle;
26 import android.support.v17.leanback.widget.VerticalGridView;
27 import android.support.v17.preference.BaseLeanbackPreferenceFragment;
28 import android.support.v7.preference.Preference;
29 import android.support.v7.preference.PreferenceScreen;
30 import android.util.SparseArray;
31 
32 import com.android.tv.settings.R;
33 
34 import java.util.List;
35 
36 public class AddAccessoryPreferenceFragment extends BaseLeanbackPreferenceFragment {
37 
38     private SparseArray<Drawable> mResizedDrawables = new SparseArray<>();
39 
newInstance()40     public static AddAccessoryPreferenceFragment newInstance() {
41         return new AddAccessoryPreferenceFragment();
42     }
43 
44     @Override
onCreatePreferences(Bundle savedInstanceState, String rootKey)45     public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
46         final AddAccessoryActivity activity = (AddAccessoryActivity) getActivity();
47         updateList(activity.getBluetoothDevices(), activity.getCurrentTargetAddress(),
48                 activity.getCurrentTargetStatus(), activity.getCancelledAddress());
49     }
50 
updateList(List<BluetoothDevice> devices, String currentTargetAddress, String currentTargetStatus, String cancelledAddress)51     public void updateList(List<BluetoothDevice> devices, String currentTargetAddress,
52             String currentTargetStatus, String cancelledAddress) {
53         final Context themedContext = getPreferenceManager().getContext();
54 
55         PreferenceScreen screen = getPreferenceScreen();
56         if (screen == null) {
57             screen = getPreferenceManager().createPreferenceScreen(themedContext);
58             setPreferenceScreen(screen);
59         } else {
60             screen.removeAll();
61         }
62 
63         // Add entries for the discovered Bluetooth devices
64         for (BluetoothDevice bt : devices) {
65             final Preference preference = new Preference(themedContext);
66             if (currentTargetAddress.equalsIgnoreCase(bt.getAddress()) &&
67                     !currentTargetStatus.isEmpty()) {
68                 preference.setSummary(currentTargetStatus);
69             } else if (cancelledAddress.equalsIgnoreCase(bt.getAddress())) {
70                 preference.setSummary(R.string.accessory_state_canceled);
71             } else {
72                 preference.setSummary(bt.getAddress());
73             }
74             preference.setKey(bt.getAddress());
75             preference.setTitle(bt.getName());
76             preference.setIcon(getDeviceDrawable(bt));
77             screen.addPreference(preference);
78         }
79     }
80 
getDeviceDrawable(BluetoothDevice device)81     private Drawable getDeviceDrawable(BluetoothDevice device) {
82         final int resId = AccessoryUtils.getImageIdForDevice(device);
83         Drawable drawable = mResizedDrawables.get(resId);
84         if (drawable == null) {
85             final Drawable tempDrawable = getActivity().getDrawable(resId);
86             final int iconWidth =
87                     getResources().getDimensionPixelSize(R.dimen.lb_dialog_list_item_icon_width);
88             final int iconHeight =
89                     getResources().getDimensionPixelSize(R.dimen.lb_dialog_list_item_icon_height);
90             tempDrawable.setBounds(0, 0, iconWidth, iconHeight);
91             final Bitmap bitmap =
92                     Bitmap.createBitmap(iconWidth, iconHeight, Bitmap.Config.ARGB_8888);
93             final Canvas canvas = new Canvas(bitmap);
94             tempDrawable.draw(canvas);
95             drawable = new BitmapDrawable(getResources(), bitmap);
96             mResizedDrawables.put(resId, drawable);
97         }
98         return drawable;
99     }
100 
101     @Override
onPreferenceTreeClick(Preference preference)102     public boolean onPreferenceTreeClick(Preference preference) {
103         final AddAccessoryActivity activity = (AddAccessoryActivity) getActivity();
104         activity.onActionClicked(preference.getKey());
105         return super.onPreferenceTreeClick(preference);
106     }
107 
advanceSelection()108     public void advanceSelection() {
109         final int preferenceCount = getPreferenceScreen().getPreferenceCount();
110         if (preferenceCount > 0) {
111             final VerticalGridView vgv = (VerticalGridView) getListView();
112             final int position = (vgv.getSelectedPosition() + 1) % preferenceCount;
113             vgv.setSelectedPositionSmooth(position);
114         }
115     }
116 }
117