10b4fdc49fba83ad2a950681ef014b6927e438007Jason Monk/*
20b4fdc49fba83ad2a950681ef014b6927e438007Jason Monk * Copyright (C) 2015 The Android Open Source Project
30b4fdc49fba83ad2a950681ef014b6927e438007Jason Monk *
40b4fdc49fba83ad2a950681ef014b6927e438007Jason Monk * Licensed under the Apache License, Version 2.0 (the "License");
50b4fdc49fba83ad2a950681ef014b6927e438007Jason Monk * you may not use this file except in compliance with the License.
60b4fdc49fba83ad2a950681ef014b6927e438007Jason Monk * You may obtain a copy of the License at
70b4fdc49fba83ad2a950681ef014b6927e438007Jason Monk *
80b4fdc49fba83ad2a950681ef014b6927e438007Jason Monk *      http://www.apache.org/licenses/LICENSE-2.0
90b4fdc49fba83ad2a950681ef014b6927e438007Jason Monk *
100b4fdc49fba83ad2a950681ef014b6927e438007Jason Monk * Unless required by applicable law or agreed to in writing, software
110b4fdc49fba83ad2a950681ef014b6927e438007Jason Monk * distributed under the License is distributed on an "AS IS" BASIS,
120b4fdc49fba83ad2a950681ef014b6927e438007Jason Monk * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
130b4fdc49fba83ad2a950681ef014b6927e438007Jason Monk * See the License for the specific language governing permissions and
140b4fdc49fba83ad2a950681ef014b6927e438007Jason Monk * limitations under the License.
150b4fdc49fba83ad2a950681ef014b6927e438007Jason Monk */
160b4fdc49fba83ad2a950681ef014b6927e438007Jason Monkpackage com.android.settings.wifi;
170b4fdc49fba83ad2a950681ef014b6927e438007Jason Monk
18dfa9bb8914acd564bd73ba4f70fa50b28bd8cef4Amin Shaikhimport static android.content.Context.WIFI_SERVICE;
19dfa9bb8914acd564bd73ba4f70fa50b28bd8cef4Amin Shaikh
200b4fdc49fba83ad2a950681ef014b6927e438007Jason Monkimport android.content.Context;
211cf25748d61c4823b953dc57f7bdd5110cbf2c2fAmin Shaikhimport android.content.Intent;
224b0677a2a45e2542b44e906c91e4bf57ed00f44eMatthew Fritzeimport android.net.ConnectivityManager;
234b0677a2a45e2542b44e906c91e4bf57ed00f44eMatthew Fritzeimport android.net.NetworkInfo;
240b4fdc49fba83ad2a950681ef014b6927e438007Jason Monkimport android.net.wifi.WifiManager;
253aa547b50d09ea901ac4e649e7029345af97f32eAmin Shaikhimport android.provider.SearchIndexableResource;
26dfa9bb8914acd564bd73ba4f70fa50b28bd8cef4Amin Shaikh
27265d3c2a0c36251bf8a9f571d7239b6dd404d942Tamas Berghammerimport com.android.internal.logging.nano.MetricsProto.MetricsEvent;
280b4fdc49fba83ad2a950681ef014b6927e438007Jason Monkimport com.android.settings.R;
29925f23244a5e90e0694a602d4a1f2b5e8b748fefFan Zhangimport com.android.settings.dashboard.DashboardFragment;
303aa547b50d09ea901ac4e649e7029345af97f32eAmin Shaikhimport com.android.settings.search.BaseSearchIndexProvider;
313aa547b50d09ea901ac4e649e7029345af97f32eAmin Shaikhimport com.android.settings.search.Indexable;
329d2712cd78514eb35ba1d480738841f3c203ecfdStephen Chenimport com.android.settings.wifi.p2p.WifiP2pPreferenceController;
331d583e125faf3ae4c9cd82636d8f3ecf1cdec3aaTony Mantlerimport com.android.settingslib.core.AbstractPreferenceController;
340b4fdc49fba83ad2a950681ef014b6927e438007Jason Monk
35925f23244a5e90e0694a602d4a1f2b5e8b748fefFan Zhangimport java.util.ArrayList;
363aa547b50d09ea901ac4e649e7029345af97f32eAmin Shaikhimport java.util.Arrays;
37925f23244a5e90e0694a602d4a1f2b5e8b748fefFan Zhangimport java.util.List;
380b4fdc49fba83ad2a950681ef014b6927e438007Jason Monk
39925f23244a5e90e0694a602d4a1f2b5e8b748fefFan Zhangpublic class ConfigureWifiSettings extends DashboardFragment {
400b4fdc49fba83ad2a950681ef014b6927e438007Jason Monk
41925f23244a5e90e0694a602d4a1f2b5e8b748fefFan Zhang    private static final String TAG = "ConfigureWifiSettings";
420b4fdc49fba83ad2a950681ef014b6927e438007Jason Monk
434b0677a2a45e2542b44e906c91e4bf57ed00f44eMatthew Fritze    public static final String KEY_IP_ADDRESS = "current_ip_address";
442f5292454bb83e7df21d2b8086c5cbd59498fb87Salvador Martinez    public static final int WIFI_WAKEUP_REQUEST_CODE = 600;
454b0677a2a45e2542b44e906c91e4bf57ed00f44eMatthew Fritze
467e27006a7bc8162b535aecb69cf2e5872bb19d77Stephen Chen    private WifiWakeupPreferenceController mWifiWakeupPreferenceController;
471cf25748d61c4823b953dc57f7bdd5110cbf2c2fAmin Shaikh    private UseOpenWifiPreferenceController mUseOpenWifiPreferenceController;
480b4fdc49fba83ad2a950681ef014b6927e438007Jason Monk
490b4fdc49fba83ad2a950681ef014b6927e438007Jason Monk    @Override
50925f23244a5e90e0694a602d4a1f2b5e8b748fefFan Zhang    public int getMetricsCategory() {
51925f23244a5e90e0694a602d4a1f2b5e8b748fefFan Zhang        return MetricsEvent.CONFIGURE_WIFI;
520b4fdc49fba83ad2a950681ef014b6927e438007Jason Monk    }
530b4fdc49fba83ad2a950681ef014b6927e438007Jason Monk
540b4fdc49fba83ad2a950681ef014b6927e438007Jason Monk    @Override
55925f23244a5e90e0694a602d4a1f2b5e8b748fefFan Zhang    protected String getLogTag() {
56925f23244a5e90e0694a602d4a1f2b5e8b748fefFan Zhang        return TAG;
570b4fdc49fba83ad2a950681ef014b6927e438007Jason Monk    }
580b4fdc49fba83ad2a950681ef014b6927e438007Jason Monk
590b4fdc49fba83ad2a950681ef014b6927e438007Jason Monk    @Override
6072456a9ea677b91389ba4ece88842b65c45d5107Fan Zhang    public int getInitialExpandedChildCount() {
613810036691fa25ef39021e8d244c13d54a892a91Joe LaPenna        int tileLimit = 2;
627e27006a7bc8162b535aecb69cf2e5872bb19d77Stephen Chen        if (mUseOpenWifiPreferenceController.isAvailable()) {
637e27006a7bc8162b535aecb69cf2e5872bb19d77Stephen Chen            tileLimit++;
647e27006a7bc8162b535aecb69cf2e5872bb19d77Stephen Chen        }
6572456a9ea677b91389ba4ece88842b65c45d5107Fan Zhang        return tileLimit;
66a7b27b22b99e005cecd7b2deab74565683b3998aStephen Chen    }
67a7b27b22b99e005cecd7b2deab74565683b3998aStephen Chen
68a7b27b22b99e005cecd7b2deab74565683b3998aStephen Chen    @Override
69925f23244a5e90e0694a602d4a1f2b5e8b748fefFan Zhang    protected int getPreferenceScreenResId() {
70925f23244a5e90e0694a602d4a1f2b5e8b748fefFan Zhang        return R.xml.wifi_configure_settings;
710b4fdc49fba83ad2a950681ef014b6927e438007Jason Monk    }
720b4fdc49fba83ad2a950681ef014b6927e438007Jason Monk
730b4fdc49fba83ad2a950681ef014b6927e438007Jason Monk    @Override
74f7843adabd4e8e1cc84a52721daabefa3a1410fdFan Zhang    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
752f5292454bb83e7df21d2b8086c5cbd59498fb87Salvador Martinez        mWifiWakeupPreferenceController = new WifiWakeupPreferenceController(context, this);
761cf25748d61c4823b953dc57f7bdd5110cbf2c2fAmin Shaikh        mUseOpenWifiPreferenceController = new UseOpenWifiPreferenceController(context, this,
77368c81e97b0f5902df5e5f76bed1ba31cbc8b43eFan Zhang                getLifecycle());
78dfa9bb8914acd564bd73ba4f70fa50b28bd8cef4Amin Shaikh        final WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
791d583e125faf3ae4c9cd82636d8f3ecf1cdec3aaTony Mantler        final List<AbstractPreferenceController> controllers = new ArrayList<>();
807e27006a7bc8162b535aecb69cf2e5872bb19d77Stephen Chen        controllers.add(mWifiWakeupPreferenceController);
81dfa9bb8914acd564bd73ba4f70fa50b28bd8cef4Amin Shaikh        controllers.add(new NotifyOpenNetworksPreferenceController(context, getLifecycle()));
821cf25748d61c4823b953dc57f7bdd5110cbf2c2fAmin Shaikh        controllers.add(mUseOpenWifiPreferenceController);
831cf25748d61c4823b953dc57f7bdd5110cbf2c2fAmin Shaikh        controllers.add(new WifiInfoPreferenceController(context, getLifecycle(), wifiManager));
841cf25748d61c4823b953dc57f7bdd5110cbf2c2fAmin Shaikh        controllers.add(new CellularFallbackPreferenceController(context));
851cf25748d61c4823b953dc57f7bdd5110cbf2c2fAmin Shaikh        controllers.add(new WifiP2pPreferenceController(context, getLifecycle(), wifiManager));
86925f23244a5e90e0694a602d4a1f2b5e8b748fefFan Zhang        return controllers;
870b4fdc49fba83ad2a950681ef014b6927e438007Jason Monk    }
883aa547b50d09ea901ac4e649e7029345af97f32eAmin Shaikh
891cf25748d61c4823b953dc57f7bdd5110cbf2c2fAmin Shaikh    @Override
901cf25748d61c4823b953dc57f7bdd5110cbf2c2fAmin Shaikh    public void onActivityResult(int requestCode, int resultCode, Intent data) {
917486f1cf121a6416f99fe8034e28d3592f49ea3eSalvador Martinez        if (requestCode == WIFI_WAKEUP_REQUEST_CODE && mWifiWakeupPreferenceController != null) {
922f5292454bb83e7df21d2b8086c5cbd59498fb87Salvador Martinez            mWifiWakeupPreferenceController.onActivityResult(requestCode, resultCode);
932f5292454bb83e7df21d2b8086c5cbd59498fb87Salvador Martinez            return;
941cf25748d61c4823b953dc57f7bdd5110cbf2c2fAmin Shaikh        }
957486f1cf121a6416f99fe8034e28d3592f49ea3eSalvador Martinez        if (requestCode == UseOpenWifiPreferenceController.REQUEST_CODE_OPEN_WIFI_AUTOMATICALLY
967486f1cf121a6416f99fe8034e28d3592f49ea3eSalvador Martinez                && mUseOpenWifiPreferenceController != null) {
972f5292454bb83e7df21d2b8086c5cbd59498fb87Salvador Martinez            mUseOpenWifiPreferenceController.onActivityResult(requestCode, resultCode);
982f5292454bb83e7df21d2b8086c5cbd59498fb87Salvador Martinez            return;
992f5292454bb83e7df21d2b8086c5cbd59498fb87Salvador Martinez        }
1002f5292454bb83e7df21d2b8086c5cbd59498fb87Salvador Martinez        super.onActivityResult(requestCode, resultCode, data);
1011cf25748d61c4823b953dc57f7bdd5110cbf2c2fAmin Shaikh    }
1021cf25748d61c4823b953dc57f7bdd5110cbf2c2fAmin Shaikh
1033aa547b50d09ea901ac4e649e7029345af97f32eAmin Shaikh    public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
1043aa547b50d09ea901ac4e649e7029345af97f32eAmin Shaikh            new BaseSearchIndexProvider() {
1053aa547b50d09ea901ac4e649e7029345af97f32eAmin Shaikh                @Override
1063aa547b50d09ea901ac4e649e7029345af97f32eAmin Shaikh                public List<SearchIndexableResource> getXmlResourcesToIndex(Context context,
1073aa547b50d09ea901ac4e649e7029345af97f32eAmin Shaikh                        boolean enabled) {
1083aa547b50d09ea901ac4e649e7029345af97f32eAmin Shaikh                    final SearchIndexableResource sir = new SearchIndexableResource(context);
1093aa547b50d09ea901ac4e649e7029345af97f32eAmin Shaikh                    sir.xmlResId = R.xml.wifi_configure_settings;
1103aa547b50d09ea901ac4e649e7029345af97f32eAmin Shaikh                    return Arrays.asList(sir);
1113aa547b50d09ea901ac4e649e7029345af97f32eAmin Shaikh                }
1124b0677a2a45e2542b44e906c91e4bf57ed00f44eMatthew Fritze
1134b0677a2a45e2542b44e906c91e4bf57ed00f44eMatthew Fritze                @Override
1144b0677a2a45e2542b44e906c91e4bf57ed00f44eMatthew Fritze                public List<String> getNonIndexableKeys(Context context) {
115368c81e97b0f5902df5e5f76bed1ba31cbc8b43eFan Zhang                    List<String> keys = super.getNonIndexableKeys(context);
1164b0677a2a45e2542b44e906c91e4bf57ed00f44eMatthew Fritze
1174b0677a2a45e2542b44e906c91e4bf57ed00f44eMatthew Fritze                    // If connected to WiFi, this IP address will be the same as the Status IP.
1184b0677a2a45e2542b44e906c91e4bf57ed00f44eMatthew Fritze                    // Or, if there is no connection they will say unavailable.
1194b0677a2a45e2542b44e906c91e4bf57ed00f44eMatthew Fritze                    ConnectivityManager cm = (ConnectivityManager)
1204b0677a2a45e2542b44e906c91e4bf57ed00f44eMatthew Fritze                            context.getSystemService(Context.CONNECTIVITY_SERVICE);
1214b0677a2a45e2542b44e906c91e4bf57ed00f44eMatthew Fritze                    NetworkInfo info = cm.getActiveNetworkInfo();
1224b0677a2a45e2542b44e906c91e4bf57ed00f44eMatthew Fritze                    if (info == null
1234b0677a2a45e2542b44e906c91e4bf57ed00f44eMatthew Fritze                            || info.getType() == ConnectivityManager.TYPE_WIFI) {
1244b0677a2a45e2542b44e906c91e4bf57ed00f44eMatthew Fritze                        keys.add(KEY_IP_ADDRESS);
1254b0677a2a45e2542b44e906c91e4bf57ed00f44eMatthew Fritze                    }
1264b0677a2a45e2542b44e906c91e4bf57ed00f44eMatthew Fritze
1274b0677a2a45e2542b44e906c91e4bf57ed00f44eMatthew Fritze                    return keys;
1284b0677a2a45e2542b44e906c91e4bf57ed00f44eMatthew Fritze                }
129848f67d17a2a452da8549ab787e4419b927e5698Ben Lin
130848f67d17a2a452da8549ab787e4419b927e5698Ben Lin                protected boolean isPageSearchEnabled(Context context) {
131848f67d17a2a452da8549ab787e4419b927e5698Ben Lin                    return context.getResources()
132848f67d17a2a452da8549ab787e4419b927e5698Ben Lin                            .getBoolean(R.bool.config_show_wifi_settings);
133848f67d17a2a452da8549ab787e4419b927e5698Ben Lin                }
1343aa547b50d09ea901ac4e649e7029345af97f32eAmin Shaikh            };
1350b4fdc49fba83ad2a950681ef014b6927e438007Jason Monk}
136