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