1afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project/*
2afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Copyright (C) 2008 The Android Open Source Project
3afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project *
4afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
5afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * you may not use this file except in compliance with the License.
6afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * You may obtain a copy of the License at
7afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project *
8afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
9afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project *
10afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software
11afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
12afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * See the License for the specific language governing permissions and
14afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * limitations under the License.
15afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */
16afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
17afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectpackage com.android.settings;
18afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
19d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasaniimport android.app.Activity;
20b00811da646a2ea335074f2a478f3c18b1a09274Fan Zhangimport android.app.Fragment;
21caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackbornimport android.content.Context;
22afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.Intent;
23b2385ea46286933add8ea3fb86db7870fe294334Fabrice Di Meglioimport android.provider.SearchIndexableResource;
24ffe701dc0e52ee95bf6c54291ed1b574d389019cChristopher Tate
25265d3c2a0c36251bf8a9f571d7239b6dd404d942Tamas Berghammerimport com.android.internal.logging.nano.MetricsProto.MetricsEvent;
26c62e2f033d945b8bc576f87bc5aaaba37e2afc87Fan Zhangimport com.android.settings.dashboard.DashboardFragment;
27d53859df7d7e0f4f7212a97e224f3bb906960749Fan Zhangimport com.android.settings.dashboard.SummaryLoader;
2866b573ad5ac6782b0e65b3dd98037eae01b527e5Fan Zhangimport com.android.settings.deviceinfo.AdditionalSystemUpdatePreferenceController;
29efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhangimport com.android.settings.deviceinfo.BasebandVersionPreferenceController;
303aa68c8b80633b9091734fd237e1921fb7efc792Fan Zhangimport com.android.settings.deviceinfo.BuildNumberPreferenceController;
31efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhangimport com.android.settings.deviceinfo.DeviceModelPreferenceController;
32efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhangimport com.android.settings.deviceinfo.FccEquipmentIdPreferenceController;
3369e95c6e75054a4e858c721fb466f7896d949d55Fan Zhangimport com.android.settings.deviceinfo.FeedbackPreferenceController;
34efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhangimport com.android.settings.deviceinfo.FirmwareVersionPreferenceController;
3569e95c6e75054a4e858c721fb466f7896d949d55Fan Zhangimport com.android.settings.deviceinfo.KernelVersionPreferenceController;
36c62e2f033d945b8bc576f87bc5aaaba37e2afc87Fan Zhangimport com.android.settings.deviceinfo.ManualPreferenceController;
37efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhangimport com.android.settings.deviceinfo.RegulatoryInfoPreferenceController;
38efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhangimport com.android.settings.deviceinfo.SELinuxStatusPreferenceController;
39efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhangimport com.android.settings.deviceinfo.SafetyInfoPreferenceController;
40efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhangimport com.android.settings.deviceinfo.SecurityPatchPreferenceController;
41b2385ea46286933add8ea3fb86db7870fe294334Fabrice Di Meglioimport com.android.settings.search.BaseSearchIndexProvider;
42b2385ea46286933add8ea3fb86db7870fe294334Fabrice Di Meglioimport com.android.settings.search.Indexable;
431d583e125faf3ae4c9cd82636d8f3ecf1cdec3aaTony Mantlerimport com.android.settingslib.core.AbstractPreferenceController;
44777ed2535a7fd6f618a0d12f381af99252283574Juan Langimport com.android.settingslib.core.lifecycle.Lifecycle;
45afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
46b2385ea46286933add8ea3fb86db7870fe294334Fabrice Di Meglioimport java.util.ArrayList;
47b2385ea46286933add8ea3fb86db7870fe294334Fabrice Di Meglioimport java.util.Arrays;
48b42573d0e6870b026110ece22f13dc15452d507cRajat Dewanimport java.util.List;
49afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
50c62e2f033d945b8bc576f87bc5aaaba37e2afc87Fan Zhangpublic class DeviceInfoSettings extends DashboardFragment implements Indexable {
51c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani
52362bd107a11e4cb74c53e8058fe0dfaf9baac65fGilles Debunne    private static final String LOG_TAG = "DeviceInfoSettings";
532397a7391e2ba9434ee89345c1d3a47948d8f226Amith Yamasani
542e89758b016ae4ddbf52958ae3397e6688bcee23Matthew Fritze    private static final String KEY_LEGAL_CONTAINER = "legal_container";
552e89758b016ae4ddbf52958ae3397e6688bcee23Matthew Fritze
56afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
576507613ebcd22e4691c2af92a5c161bd327db336Fan Zhang    public int getMetricsCategory() {
589d1bfd1e8de6e46137a9571507c03526880d6a46Chris Wren        return MetricsEvent.DEVICEINFO;
598a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren    }
608a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren
618a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren    @Override
6223acc2bb8af7da000d72a8c1d8c28a2792200348Jason Monk    protected int getHelpResource() {
6323acc2bb8af7da000d72a8c1d8c28a2792200348Jason Monk        return R.string.help_uri_about;
6423acc2bb8af7da000d72a8c1d8c28a2792200348Jason Monk    }
6523acc2bb8af7da000d72a8c1d8c28a2792200348Jason Monk
6623acc2bb8af7da000d72a8c1d8c28a2792200348Jason Monk    @Override
673aa68c8b80633b9091734fd237e1921fb7efc792Fan Zhang    public void onActivityResult(int requestCode, int resultCode, Intent data) {
68b00811da646a2ea335074f2a478f3c18b1a09274Fan Zhang        final BuildNumberPreferenceController buildNumberPreferenceController =
69b00811da646a2ea335074f2a478f3c18b1a09274Fan Zhang                getPreferenceController(BuildNumberPreferenceController.class);
70b00811da646a2ea335074f2a478f3c18b1a09274Fan Zhang        if (buildNumberPreferenceController.onActivityResult(requestCode, resultCode, data)) {
713aa68c8b80633b9091734fd237e1921fb7efc792Fan Zhang            return;
723aa68c8b80633b9091734fd237e1921fb7efc792Fan Zhang        }
733aa68c8b80633b9091734fd237e1921fb7efc792Fan Zhang        super.onActivityResult(requestCode, resultCode, data);
743aa68c8b80633b9091734fd237e1921fb7efc792Fan Zhang    }
753aa68c8b80633b9091734fd237e1921fb7efc792Fan Zhang
763aa68c8b80633b9091734fd237e1921fb7efc792Fan Zhang    @Override
77c62e2f033d945b8bc576f87bc5aaaba37e2afc87Fan Zhang    protected String getLogTag() {
78c62e2f033d945b8bc576f87bc5aaaba37e2afc87Fan Zhang        return LOG_TAG;
79c62e2f033d945b8bc576f87bc5aaaba37e2afc87Fan Zhang    }
80c62e2f033d945b8bc576f87bc5aaaba37e2afc87Fan Zhang
81c62e2f033d945b8bc576f87bc5aaaba37e2afc87Fan Zhang    @Override
82c62e2f033d945b8bc576f87bc5aaaba37e2afc87Fan Zhang    protected int getPreferenceScreenResId() {
83c62e2f033d945b8bc576f87bc5aaaba37e2afc87Fan Zhang        return R.xml.device_info_settings;
84c62e2f033d945b8bc576f87bc5aaaba37e2afc87Fan Zhang    }
85c62e2f033d945b8bc576f87bc5aaaba37e2afc87Fan Zhang
86c62e2f033d945b8bc576f87bc5aaaba37e2afc87Fan Zhang    @Override
871d583e125faf3ae4c9cd82636d8f3ecf1cdec3aaTony Mantler    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
88b00811da646a2ea335074f2a478f3c18b1a09274Fan Zhang        return buildPreferenceControllers(context, getActivity(), this /* fragment */,
89b00811da646a2ea335074f2a478f3c18b1a09274Fan Zhang                getLifecycle());
90e3751a1a7357ed6c185187d0fc09ddce05f060bdDoris Ling    }
91e3751a1a7357ed6c185187d0fc09ddce05f060bdDoris Ling
92d53859df7d7e0f4f7212a97e224f3bb906960749Fan Zhang    private static class SummaryProvider implements SummaryLoader.SummaryProvider {
93d53859df7d7e0f4f7212a97e224f3bb906960749Fan Zhang
94d53859df7d7e0f4f7212a97e224f3bb906960749Fan Zhang        private final SummaryLoader mSummaryLoader;
95d53859df7d7e0f4f7212a97e224f3bb906960749Fan Zhang
96d53859df7d7e0f4f7212a97e224f3bb906960749Fan Zhang        public SummaryProvider(SummaryLoader summaryLoader) {
97d53859df7d7e0f4f7212a97e224f3bb906960749Fan Zhang            mSummaryLoader = summaryLoader;
98d53859df7d7e0f4f7212a97e224f3bb906960749Fan Zhang        }
99d53859df7d7e0f4f7212a97e224f3bb906960749Fan Zhang
100d53859df7d7e0f4f7212a97e224f3bb906960749Fan Zhang        @Override
101d53859df7d7e0f4f7212a97e224f3bb906960749Fan Zhang        public void setListening(boolean listening) {
102d53859df7d7e0f4f7212a97e224f3bb906960749Fan Zhang            if (listening) {
103d53859df7d7e0f4f7212a97e224f3bb906960749Fan Zhang                mSummaryLoader.setSummary(this, DeviceModelPreferenceController.getDeviceModel());
104d53859df7d7e0f4f7212a97e224f3bb906960749Fan Zhang            }
105d53859df7d7e0f4f7212a97e224f3bb906960749Fan Zhang        }
106d53859df7d7e0f4f7212a97e224f3bb906960749Fan Zhang    }
107d53859df7d7e0f4f7212a97e224f3bb906960749Fan Zhang
108d53859df7d7e0f4f7212a97e224f3bb906960749Fan Zhang    public static final SummaryLoader.SummaryProviderFactory SUMMARY_PROVIDER_FACTORY
109d53859df7d7e0f4f7212a97e224f3bb906960749Fan Zhang            = new SummaryLoader.SummaryProviderFactory() {
110d53859df7d7e0f4f7212a97e224f3bb906960749Fan Zhang        @Override
111d53859df7d7e0f4f7212a97e224f3bb906960749Fan Zhang        public SummaryLoader.SummaryProvider createSummaryProvider(Activity activity,
112d53859df7d7e0f4f7212a97e224f3bb906960749Fan Zhang                SummaryLoader summaryLoader) {
113d53859df7d7e0f4f7212a97e224f3bb906960749Fan Zhang            return new SummaryProvider(summaryLoader);
114d53859df7d7e0f4f7212a97e224f3bb906960749Fan Zhang        }
115d53859df7d7e0f4f7212a97e224f3bb906960749Fan Zhang    };
116d53859df7d7e0f4f7212a97e224f3bb906960749Fan Zhang
1171d583e125faf3ae4c9cd82636d8f3ecf1cdec3aaTony Mantler    private static List<AbstractPreferenceController> buildPreferenceControllers(Context context,
118b00811da646a2ea335074f2a478f3c18b1a09274Fan Zhang            Activity activity, Fragment fragment, Lifecycle lifecycle) {
1191d583e125faf3ae4c9cd82636d8f3ecf1cdec3aaTony Mantler        final List<AbstractPreferenceController> controllers = new ArrayList<>();
120b00811da646a2ea335074f2a478f3c18b1a09274Fan Zhang        controllers.add(
121b00811da646a2ea335074f2a478f3c18b1a09274Fan Zhang                new BuildNumberPreferenceController(context, activity, fragment, lifecycle));
122b00811da646a2ea335074f2a478f3c18b1a09274Fan Zhang        controllers.add(new AdditionalSystemUpdatePreferenceController(context));
123b00811da646a2ea335074f2a478f3c18b1a09274Fan Zhang        controllers.add(new ManualPreferenceController(context));
124b00811da646a2ea335074f2a478f3c18b1a09274Fan Zhang        controllers.add(new FeedbackPreferenceController(fragment, context));
125b00811da646a2ea335074f2a478f3c18b1a09274Fan Zhang        controllers.add(new KernelVersionPreferenceController(context));
126b00811da646a2ea335074f2a478f3c18b1a09274Fan Zhang        controllers.add(new BasebandVersionPreferenceController(context));
127b00811da646a2ea335074f2a478f3c18b1a09274Fan Zhang        controllers.add(new FirmwareVersionPreferenceController(context, lifecycle));
128b00811da646a2ea335074f2a478f3c18b1a09274Fan Zhang        controllers.add(new RegulatoryInfoPreferenceController(context));
129dc5a06e7e49e19fb33ebd9616d5a91aadcca4901Fan Zhang        controllers.add(new DeviceModelPreferenceController(context, fragment));
130b00811da646a2ea335074f2a478f3c18b1a09274Fan Zhang        controllers.add(new SecurityPatchPreferenceController(context));
131b00811da646a2ea335074f2a478f3c18b1a09274Fan Zhang        controllers.add(new FccEquipmentIdPreferenceController(context));
132b00811da646a2ea335074f2a478f3c18b1a09274Fan Zhang        controllers.add(new SELinuxStatusPreferenceController(context));
133b00811da646a2ea335074f2a478f3c18b1a09274Fan Zhang        controllers.add(new SafetyInfoPreferenceController(context));
134b00811da646a2ea335074f2a478f3c18b1a09274Fan Zhang        return controllers;
135b00811da646a2ea335074f2a478f3c18b1a09274Fan Zhang    }
136b00811da646a2ea335074f2a478f3c18b1a09274Fan Zhang
1372397a7391e2ba9434ee89345c1d3a47948d8f226Amith Yamasani    /**
138b2385ea46286933add8ea3fb86db7870fe294334Fabrice Di Meglio     * For Search.
139b2385ea46286933add8ea3fb86db7870fe294334Fabrice Di Meglio     */
140b2385ea46286933add8ea3fb86db7870fe294334Fabrice Di Meglio    public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
141efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang            new BaseSearchIndexProvider() {
142efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang
143efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang                @Override
144efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang                public List<SearchIndexableResource> getXmlResourcesToIndex(
145efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang                        Context context, boolean enabled) {
146efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang                    final SearchIndexableResource sir = new SearchIndexableResource(context);
147efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang                    sir.xmlResId = R.xml.device_info_settings;
148efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang                    return Arrays.asList(sir);
149b2385ea46286933add8ea3fb86db7870fe294334Fabrice Di Meglio                }
150b2385ea46286933add8ea3fb86db7870fe294334Fabrice Di Meglio
151efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang                @Override
1521d583e125faf3ae4c9cd82636d8f3ecf1cdec3aaTony Mantler                public List<AbstractPreferenceController> getPreferenceControllers(Context context) {
153b00811da646a2ea335074f2a478f3c18b1a09274Fan Zhang                    return buildPreferenceControllers(context, null /*activity */,
154b00811da646a2ea335074f2a478f3c18b1a09274Fan Zhang                            null /* fragment */, null /* lifecycle */);
155efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang                }
1562e89758b016ae4ddbf52958ae3397e6688bcee23Matthew Fritze
1572e89758b016ae4ddbf52958ae3397e6688bcee23Matthew Fritze                @Override
1582e89758b016ae4ddbf52958ae3397e6688bcee23Matthew Fritze                public List<String> getNonIndexableKeys(Context context) {
1592e89758b016ae4ddbf52958ae3397e6688bcee23Matthew Fritze                    List<String> keys = super.getNonIndexableKeys(context);
1602e89758b016ae4ddbf52958ae3397e6688bcee23Matthew Fritze                    keys.add(KEY_LEGAL_CONTAINER);
1612e89758b016ae4ddbf52958ae3397e6688bcee23Matthew Fritze                    return keys;
1622e89758b016ae4ddbf52958ae3397e6688bcee23Matthew Fritze                }
163efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang            };
164afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project}
165