ConnectedDeviceDashboardFragment.java revision dec7a719d16411d3f9d37bff7ffc4d4c6edb06f8
1/*
2 * Copyright (C) 2016 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 */
16package com.android.settings.connecteddevice;
17
18import android.app.Activity;
19import android.content.Context;
20import android.provider.SearchIndexableResource;
21import android.support.annotation.VisibleForTesting;
22
23import com.android.internal.logging.nano.MetricsProto;
24import com.android.settings.R;
25import com.android.settings.bluetooth.BluetoothSwitchPreferenceController;
26import com.android.settings.dashboard.DashboardFragment;
27import com.android.settings.dashboard.SummaryLoader;
28import com.android.settings.nfc.NfcPreferenceController;
29import com.android.settings.search.BaseSearchIndexProvider;
30import com.android.settingslib.core.AbstractPreferenceController;
31import com.android.settingslib.core.lifecycle.Lifecycle;
32
33import java.util.ArrayList;
34import java.util.Arrays;
35import java.util.List;
36
37public class ConnectedDeviceDashboardFragment extends DashboardFragment {
38
39    private static final String TAG = "ConnectedDeviceFrag";
40
41    @VisibleForTesting
42    static final String KEY_CONNECTED_DEVICES = "connected_device_list";
43    @VisibleForTesting
44    static final String KEY_SAVED_DEVICES = "saved_device_list";
45
46    @Override
47    public int getMetricsCategory() {
48        return MetricsProto.MetricsEvent.SETTINGS_CONNECTED_DEVICE_CATEGORY;
49    }
50
51    @Override
52    protected String getLogTag() {
53        return TAG;
54    }
55
56    @Override
57    public int getHelpResource() {
58        return R.string.help_url_connected_devices;
59    }
60
61    @Override
62    protected int getPreferenceScreenResId() {
63        return R.xml.connected_devices;
64    }
65
66    @Override
67    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
68        return buildPreferenceControllers(context, getLifecycle(), this);
69    }
70
71    private static List<AbstractPreferenceController> buildPreferenceControllers(Context context,
72            Lifecycle lifecycle, DashboardFragment dashboardFragment) {
73        final List<AbstractPreferenceController> controllers = new ArrayList<>();
74        controllers.add(new ConnectedDeviceGroupController(context, dashboardFragment, lifecycle));
75        controllers.add(new SavedDeviceGroupController(context, dashboardFragment, lifecycle));
76
77        final NfcPreferenceController nfcPreferenceController =
78                new NfcPreferenceController(context);
79        controllers.add(nfcPreferenceController);
80
81        final BluetoothSwitchPreferenceController bluetoothPreferenceController =
82                new BluetoothSwitchPreferenceController(context);
83        controllers.add(bluetoothPreferenceController);
84
85        if (lifecycle != null) {
86            lifecycle.addObserver(nfcPreferenceController);
87            lifecycle.addObserver(bluetoothPreferenceController);
88        }
89
90        return controllers;
91    }
92
93    @VisibleForTesting
94    static class SummaryProvider implements SummaryLoader.SummaryProvider {
95
96        private final Context mContext;
97        private final SummaryLoader mSummaryLoader;
98        private final NfcPreferenceController mNfcPreferenceController;
99
100        public SummaryProvider(Context context, SummaryLoader summaryLoader) {
101            mContext = context;
102            mSummaryLoader = summaryLoader;
103            mNfcPreferenceController = new NfcPreferenceController(context);
104        }
105
106
107        @Override
108        public void setListening(boolean listening) {
109            if (listening) {
110                if (mNfcPreferenceController.isAvailable()) {
111                    mSummaryLoader.setSummary(this,
112                            mContext.getString(R.string.connected_devices_dashboard_summary));
113                } else {
114                    mSummaryLoader.setSummary(this, mContext.getString(
115                            R.string.connected_devices_dashboard_no_nfc_summary));
116                }
117            }
118        }
119    }
120
121    public static final SummaryLoader.SummaryProviderFactory SUMMARY_PROVIDER_FACTORY
122            = new SummaryLoader.SummaryProviderFactory() {
123        @Override
124        public SummaryLoader.SummaryProvider createSummaryProvider(Activity activity,
125                SummaryLoader summaryLoader) {
126            return new SummaryProvider(activity, summaryLoader);
127        }
128    };
129
130    /**
131     * For Search.
132     */
133    public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
134            new BaseSearchIndexProvider() {
135                @Override
136                public List<SearchIndexableResource> getXmlResourcesToIndex(
137                        Context context, boolean enabled) {
138                    final SearchIndexableResource sir = new SearchIndexableResource(context);
139                    sir.xmlResId = R.xml.connected_devices;
140                    return Arrays.asList(sir);
141                }
142
143                @Override
144                public List<AbstractPreferenceController> createPreferenceControllers(Context
145                        context) {
146                    return buildPreferenceControllers(context, null /* lifecycle */,
147                            null /* dashboardFragment */);
148                }
149
150                @Override
151                public List<String> getNonIndexableKeys(Context context) {
152                    List<String> keys = super.getNonIndexableKeys(context);
153                    // Disable because they show dynamic data
154                    keys.add(KEY_CONNECTED_DEVICES);
155                    keys.add(KEY_SAVED_DEVICES);
156                    return keys;
157                }
158            };
159}
160