1b2c8c9cc9cfe77934e98bfdf8a5c797f08a6ce3fDoris Ling/* 2b2c8c9cc9cfe77934e98bfdf8a5c797f08a6ce3fDoris Ling * Copyright (C) 2016 The Android Open Source Project 3b2c8c9cc9cfe77934e98bfdf8a5c797f08a6ce3fDoris Ling * 4b2c8c9cc9cfe77934e98bfdf8a5c797f08a6ce3fDoris Ling * Licensed under the Apache License, Version 2.0 (the "License"); 5b2c8c9cc9cfe77934e98bfdf8a5c797f08a6ce3fDoris Ling * you may not use this file except in compliance with the License. 6b2c8c9cc9cfe77934e98bfdf8a5c797f08a6ce3fDoris Ling * You may obtain a copy of the License at 7b2c8c9cc9cfe77934e98bfdf8a5c797f08a6ce3fDoris Ling * 8b2c8c9cc9cfe77934e98bfdf8a5c797f08a6ce3fDoris Ling * http://www.apache.org/licenses/LICENSE-2.0 9b2c8c9cc9cfe77934e98bfdf8a5c797f08a6ce3fDoris Ling * 10b2c8c9cc9cfe77934e98bfdf8a5c797f08a6ce3fDoris Ling * Unless required by applicable law or agreed to in writing, software 11b2c8c9cc9cfe77934e98bfdf8a5c797f08a6ce3fDoris Ling * distributed under the License is distributed on an "AS IS" BASIS, 12b2c8c9cc9cfe77934e98bfdf8a5c797f08a6ce3fDoris Ling * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b2c8c9cc9cfe77934e98bfdf8a5c797f08a6ce3fDoris Ling * See the License for the specific language governing permissions and 14b2c8c9cc9cfe77934e98bfdf8a5c797f08a6ce3fDoris Ling * limitations under the License. 15b2c8c9cc9cfe77934e98bfdf8a5c797f08a6ce3fDoris Ling */ 16b2c8c9cc9cfe77934e98bfdf8a5c797f08a6ce3fDoris Lingpackage com.android.settings.connecteddevice; 17b2c8c9cc9cfe77934e98bfdf8a5c797f08a6ce3fDoris Ling 187c3a87ebd3a5a3805758bb246ee5f6af17c627a0Fan Zhangimport android.app.Activity; 19b2c8c9cc9cfe77934e98bfdf8a5c797f08a6ce3fDoris Lingimport android.content.Context; 20762b4969d9c5efaed9241d66abc4417419ddd0e5Fan Zhangimport android.provider.SearchIndexableResource; 217c3a87ebd3a5a3805758bb246ee5f6af17c627a0Fan Zhangimport android.support.annotation.VisibleForTesting; 22b2c8c9cc9cfe77934e98bfdf8a5c797f08a6ce3fDoris Ling 238f057ca3d401bc371bef9b2e94925cfe25980948Fan Zhangimport com.android.internal.logging.nano.MetricsProto; 24b2c8c9cc9cfe77934e98bfdf8a5c797f08a6ce3fDoris Lingimport com.android.settings.R; 25b2c8c9cc9cfe77934e98bfdf8a5c797f08a6ce3fDoris Lingimport com.android.settings.dashboard.DashboardFragment; 267c3a87ebd3a5a3805758bb246ee5f6af17c627a0Fan Zhangimport com.android.settings.dashboard.SummaryLoader; 27e214570abf9067c469d033fab7030ea048d65beeDoris Lingimport com.android.settings.nfc.NfcPreferenceController; 28762b4969d9c5efaed9241d66abc4417419ddd0e5Fan Zhangimport com.android.settings.search.BaseSearchIndexProvider; 294f636b90b8a41bfa3a57678e51d42547c1ba2229timhypengimport com.android.settingslib.core.AbstractPreferenceController; 304f636b90b8a41bfa3a57678e51d42547c1ba2229timhypengimport com.android.settingslib.core.lifecycle.Lifecycle; 31b2c8c9cc9cfe77934e98bfdf8a5c797f08a6ce3fDoris Ling 324f636b90b8a41bfa3a57678e51d42547c1ba2229timhypengimport java.util.ArrayList; 33687964cf28591b30895a087f6cd364b3a6a9c1b3Lei Yuimport java.util.Arrays; 34b2c8c9cc9cfe77934e98bfdf8a5c797f08a6ce3fDoris Lingimport java.util.List; 35b2c8c9cc9cfe77934e98bfdf8a5c797f08a6ce3fDoris Ling 36b2c8c9cc9cfe77934e98bfdf8a5c797f08a6ce3fDoris Lingpublic class ConnectedDeviceDashboardFragment extends DashboardFragment { 37b2c8c9cc9cfe77934e98bfdf8a5c797f08a6ce3fDoris Ling 38b2c8c9cc9cfe77934e98bfdf8a5c797f08a6ce3fDoris Ling private static final String TAG = "ConnectedDeviceFrag"; 39b2c8c9cc9cfe77934e98bfdf8a5c797f08a6ce3fDoris Ling 40687964cf28591b30895a087f6cd364b3a6a9c1b3Lei Yu @VisibleForTesting 41687964cf28591b30895a087f6cd364b3a6a9c1b3Lei Yu static final String KEY_CONNECTED_DEVICES = "connected_device_list"; 42687964cf28591b30895a087f6cd364b3a6a9c1b3Lei Yu @VisibleForTesting 43bd3e5de207b4b3e62e08a1b0ab506e0b686399e5hughchen static final String KEY_AVAILABLE_DEVICES = "available_device_list"; 44687964cf28591b30895a087f6cd364b3a6a9c1b3Lei Yu 45b2c8c9cc9cfe77934e98bfdf8a5c797f08a6ce3fDoris Ling @Override 46b2c8c9cc9cfe77934e98bfdf8a5c797f08a6ce3fDoris Ling public int getMetricsCategory() { 478f057ca3d401bc371bef9b2e94925cfe25980948Fan Zhang return MetricsProto.MetricsEvent.SETTINGS_CONNECTED_DEVICE_CATEGORY; 48b2c8c9cc9cfe77934e98bfdf8a5c797f08a6ce3fDoris Ling } 49b2c8c9cc9cfe77934e98bfdf8a5c797f08a6ce3fDoris Ling 50b2c8c9cc9cfe77934e98bfdf8a5c797f08a6ce3fDoris Ling @Override 51b2c8c9cc9cfe77934e98bfdf8a5c797f08a6ce3fDoris Ling protected String getLogTag() { 52b2c8c9cc9cfe77934e98bfdf8a5c797f08a6ce3fDoris Ling return TAG; 53b2c8c9cc9cfe77934e98bfdf8a5c797f08a6ce3fDoris Ling } 54b2c8c9cc9cfe77934e98bfdf8a5c797f08a6ce3fDoris Ling 55b2c8c9cc9cfe77934e98bfdf8a5c797f08a6ce3fDoris Ling @Override 56e0b0e9f9025038d72f8129606cc1f432afcb54e0Fan Zhang public int getHelpResource() { 57179645eecd1a2321e7dd8992678b47799e60f9e6Fan Zhang return R.string.help_url_connected_devices; 58179645eecd1a2321e7dd8992678b47799e60f9e6Fan Zhang } 59179645eecd1a2321e7dd8992678b47799e60f9e6Fan Zhang 60179645eecd1a2321e7dd8992678b47799e60f9e6Fan Zhang @Override 61b2c8c9cc9cfe77934e98bfdf8a5c797f08a6ce3fDoris Ling protected int getPreferenceScreenResId() { 62b2c8c9cc9cfe77934e98bfdf8a5c797f08a6ce3fDoris Ling return R.xml.connected_devices; 63b2c8c9cc9cfe77934e98bfdf8a5c797f08a6ce3fDoris Ling } 64b2c8c9cc9cfe77934e98bfdf8a5c797f08a6ce3fDoris Ling 65b2c8c9cc9cfe77934e98bfdf8a5c797f08a6ce3fDoris Ling @Override 664f636b90b8a41bfa3a57678e51d42547c1ba2229timhypeng protected List<AbstractPreferenceController> createPreferenceControllers(Context context) { 6778eb5a81ba4b1236b6764a540546de3a84ca0c3ftimhypeng return buildPreferenceControllers(context, getLifecycle()); 684f636b90b8a41bfa3a57678e51d42547c1ba2229timhypeng } 694f636b90b8a41bfa3a57678e51d42547c1ba2229timhypeng 7078eb5a81ba4b1236b6764a540546de3a84ca0c3ftimhypeng private static List<AbstractPreferenceController> buildPreferenceControllers(Context context, 7178eb5a81ba4b1236b6764a540546de3a84ca0c3ftimhypeng Lifecycle lifecycle) { 724f636b90b8a41bfa3a57678e51d42547c1ba2229timhypeng final List<AbstractPreferenceController> controllers = new ArrayList<>(); 734f636b90b8a41bfa3a57678e51d42547c1ba2229timhypeng final DiscoverableFooterPreferenceController discoverableFooterPreferenceController = 744f636b90b8a41bfa3a57678e51d42547c1ba2229timhypeng new DiscoverableFooterPreferenceController(context); 754f636b90b8a41bfa3a57678e51d42547c1ba2229timhypeng controllers.add(discoverableFooterPreferenceController); 764f636b90b8a41bfa3a57678e51d42547c1ba2229timhypeng 7778eb5a81ba4b1236b6764a540546de3a84ca0c3ftimhypeng if (lifecycle != null) { 7878eb5a81ba4b1236b6764a540546de3a84ca0c3ftimhypeng lifecycle.addObserver(discoverableFooterPreferenceController); 7978eb5a81ba4b1236b6764a540546de3a84ca0c3ftimhypeng } 8078eb5a81ba4b1236b6764a540546de3a84ca0c3ftimhypeng 814f636b90b8a41bfa3a57678e51d42547c1ba2229timhypeng return controllers; 824f636b90b8a41bfa3a57678e51d42547c1ba2229timhypeng } 834f636b90b8a41bfa3a57678e51d42547c1ba2229timhypeng 844f636b90b8a41bfa3a57678e51d42547c1ba2229timhypeng @Override 85bd3e5de207b4b3e62e08a1b0ab506e0b686399e5hughchen public void onAttach(Context context) { 86bd3e5de207b4b3e62e08a1b0ab506e0b686399e5hughchen super.onAttach(context); 87bd3e5de207b4b3e62e08a1b0ab506e0b686399e5hughchen use(AvailableMediaDeviceGroupController.class).init(this); 88bd3e5de207b4b3e62e08a1b0ab506e0b686399e5hughchen use(ConnectedDeviceGroupController.class).init(this); 89980b7189894e0bfb0b3c3c78c89028d02d558fa8hughchen use(PreviouslyConnectedDevicePreferenceController.class).init(this); 904f636b90b8a41bfa3a57678e51d42547c1ba2229timhypeng use(DiscoverableFooterPreferenceController.class).init(this); 91bd3e5de207b4b3e62e08a1b0ab506e0b686399e5hughchen } 92bd3e5de207b4b3e62e08a1b0ab506e0b686399e5hughchen 937c3a87ebd3a5a3805758bb246ee5f6af17c627a0Fan Zhang @VisibleForTesting 947c3a87ebd3a5a3805758bb246ee5f6af17c627a0Fan Zhang static class SummaryProvider implements SummaryLoader.SummaryProvider { 957c3a87ebd3a5a3805758bb246ee5f6af17c627a0Fan Zhang 967c3a87ebd3a5a3805758bb246ee5f6af17c627a0Fan Zhang private final Context mContext; 977c3a87ebd3a5a3805758bb246ee5f6af17c627a0Fan Zhang private final SummaryLoader mSummaryLoader; 987c3a87ebd3a5a3805758bb246ee5f6af17c627a0Fan Zhang 997c3a87ebd3a5a3805758bb246ee5f6af17c627a0Fan Zhang public SummaryProvider(Context context, SummaryLoader summaryLoader) { 1007c3a87ebd3a5a3805758bb246ee5f6af17c627a0Fan Zhang mContext = context; 1017c3a87ebd3a5a3805758bb246ee5f6af17c627a0Fan Zhang mSummaryLoader = summaryLoader; 1027c3a87ebd3a5a3805758bb246ee5f6af17c627a0Fan Zhang } 1037c3a87ebd3a5a3805758bb246ee5f6af17c627a0Fan Zhang 1047c3a87ebd3a5a3805758bb246ee5f6af17c627a0Fan Zhang @Override 1057c3a87ebd3a5a3805758bb246ee5f6af17c627a0Fan Zhang public void setListening(boolean listening) { 1067c3a87ebd3a5a3805758bb246ee5f6af17c627a0Fan Zhang if (listening) { 1077f1345c3cd8cb894eddd0245c03a3ae08372a528hughchen mSummaryLoader.setSummary(this, mContext.getText(AdvancedConnectedDeviceController. 1087f1345c3cd8cb894eddd0245c03a3ae08372a528hughchen getConnectedDevicesSummaryResourceId(mContext))); 1097c3a87ebd3a5a3805758bb246ee5f6af17c627a0Fan Zhang } 1107c3a87ebd3a5a3805758bb246ee5f6af17c627a0Fan Zhang } 1117c3a87ebd3a5a3805758bb246ee5f6af17c627a0Fan Zhang } 1127c3a87ebd3a5a3805758bb246ee5f6af17c627a0Fan Zhang 1137c3a87ebd3a5a3805758bb246ee5f6af17c627a0Fan Zhang public static final SummaryLoader.SummaryProviderFactory SUMMARY_PROVIDER_FACTORY 1147c3a87ebd3a5a3805758bb246ee5f6af17c627a0Fan Zhang = new SummaryLoader.SummaryProviderFactory() { 1157c3a87ebd3a5a3805758bb246ee5f6af17c627a0Fan Zhang @Override 1167c3a87ebd3a5a3805758bb246ee5f6af17c627a0Fan Zhang public SummaryLoader.SummaryProvider createSummaryProvider(Activity activity, 1177c3a87ebd3a5a3805758bb246ee5f6af17c627a0Fan Zhang SummaryLoader summaryLoader) { 1187c3a87ebd3a5a3805758bb246ee5f6af17c627a0Fan Zhang return new SummaryProvider(activity, summaryLoader); 1197c3a87ebd3a5a3805758bb246ee5f6af17c627a0Fan Zhang } 1207c3a87ebd3a5a3805758bb246ee5f6af17c627a0Fan Zhang }; 1217c3a87ebd3a5a3805758bb246ee5f6af17c627a0Fan Zhang 122762b4969d9c5efaed9241d66abc4417419ddd0e5Fan Zhang /** 123762b4969d9c5efaed9241d66abc4417419ddd0e5Fan Zhang * For Search. 124762b4969d9c5efaed9241d66abc4417419ddd0e5Fan Zhang */ 125687964cf28591b30895a087f6cd364b3a6a9c1b3Lei Yu public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = 126762b4969d9c5efaed9241d66abc4417419ddd0e5Fan Zhang new BaseSearchIndexProvider() { 127762b4969d9c5efaed9241d66abc4417419ddd0e5Fan Zhang @Override 128762b4969d9c5efaed9241d66abc4417419ddd0e5Fan Zhang public List<SearchIndexableResource> getXmlResourcesToIndex( 129762b4969d9c5efaed9241d66abc4417419ddd0e5Fan Zhang Context context, boolean enabled) { 130687964cf28591b30895a087f6cd364b3a6a9c1b3Lei Yu final SearchIndexableResource sir = new SearchIndexableResource(context); 131687964cf28591b30895a087f6cd364b3a6a9c1b3Lei Yu sir.xmlResId = R.xml.connected_devices; 132687964cf28591b30895a087f6cd364b3a6a9c1b3Lei Yu return Arrays.asList(sir); 133687964cf28591b30895a087f6cd364b3a6a9c1b3Lei Yu } 134687964cf28591b30895a087f6cd364b3a6a9c1b3Lei Yu 135687964cf28591b30895a087f6cd364b3a6a9c1b3Lei Yu @Override 13678eb5a81ba4b1236b6764a540546de3a84ca0c3ftimhypeng public List<AbstractPreferenceController> createPreferenceControllers(Context 13778eb5a81ba4b1236b6764a540546de3a84ca0c3ftimhypeng context) { 13878eb5a81ba4b1236b6764a540546de3a84ca0c3ftimhypeng return buildPreferenceControllers(context, null /* lifecycle */); 13978eb5a81ba4b1236b6764a540546de3a84ca0c3ftimhypeng } 14078eb5a81ba4b1236b6764a540546de3a84ca0c3ftimhypeng 14178eb5a81ba4b1236b6764a540546de3a84ca0c3ftimhypeng @Override 1427ca6c2410c00856333e98ede2cec828b04f982c5Ruchi Kandoi public List<String> getNonIndexableKeys(Context context) { 143687964cf28591b30895a087f6cd364b3a6a9c1b3Lei Yu List<String> keys = super.getNonIndexableKeys(context); 144687964cf28591b30895a087f6cd364b3a6a9c1b3Lei Yu // Disable because they show dynamic data 145bd3e5de207b4b3e62e08a1b0ab506e0b686399e5hughchen keys.add(KEY_AVAILABLE_DEVICES); 146687964cf28591b30895a087f6cd364b3a6a9c1b3Lei Yu keys.add(KEY_CONNECTED_DEVICES); 147687964cf28591b30895a087f6cd364b3a6a9c1b3Lei Yu return keys; 1487ca6c2410c00856333e98ede2cec828b04f982c5Ruchi Kandoi } 149762b4969d9c5efaed9241d66abc4417419ddd0e5Fan Zhang }; 1507ca6c2410c00856333e98ede2cec828b04f982c5Ruchi Kandoi} 151