WifiSummaryUpdater.java revision 5853f9742fb72ef155338b94f6904e635e87f675
1ff4adde5737be08d3e2d03fbe588c591d27d4a74Svetoslav Ganov/*
2ff4adde5737be08d3e2d03fbe588c591d27d4a74Svetoslav Ganov * Copyright (C) 2017 The Android Open Source Project
3ff4adde5737be08d3e2d03fbe588c591d27d4a74Svetoslav Ganov *
4ff4adde5737be08d3e2d03fbe588c591d27d4a74Svetoslav Ganov * Licensed under the Apache License, Version 2.0 (the "License");
5ff4adde5737be08d3e2d03fbe588c591d27d4a74Svetoslav Ganov * you may not use this file except in compliance with the License.
6ff4adde5737be08d3e2d03fbe588c591d27d4a74Svetoslav Ganov * You may obtain a copy of the License at
7ff4adde5737be08d3e2d03fbe588c591d27d4a74Svetoslav Ganov *
8ff4adde5737be08d3e2d03fbe588c591d27d4a74Svetoslav Ganov *      http://www.apache.org/licenses/LICENSE-2.0
9ff4adde5737be08d3e2d03fbe588c591d27d4a74Svetoslav Ganov *
10ff4adde5737be08d3e2d03fbe588c591d27d4a74Svetoslav Ganov * Unless required by applicable law or agreed to in writing, software
11ff4adde5737be08d3e2d03fbe588c591d27d4a74Svetoslav Ganov * distributed under the License is distributed on an "AS IS" BASIS,
12ff4adde5737be08d3e2d03fbe588c591d27d4a74Svetoslav Ganov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13ff4adde5737be08d3e2d03fbe588c591d27d4a74Svetoslav Ganov * See the License for the specific language governing permissions and
14ff4adde5737be08d3e2d03fbe588c591d27d4a74Svetoslav Ganov * limitations under the License.
15ff4adde5737be08d3e2d03fbe588c591d27d4a74Svetoslav Ganov */
16ff4adde5737be08d3e2d03fbe588c591d27d4a74Svetoslav Ganov
17ff4adde5737be08d3e2d03fbe588c591d27d4a74Svetoslav Ganovpackage com.android.settings.wifi;
18ff4adde5737be08d3e2d03fbe588c591d27d4a74Svetoslav Ganov
19ed6b9dff563c5e22f040ff37e12c0d771e0478aeAndreas Gampeimport android.content.BroadcastReceiver;
2035aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslavimport android.content.Context;
2135aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslavimport android.content.Intent;
2235aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslavimport android.content.IntentFilter;
23ff4adde5737be08d3e2d03fbe588c591d27d4a74Svetoslav Ganovimport android.net.wifi.WifiManager;
24ea70d22dc8dc5d61f075edf6d03f86f6a68169cdMatt Sarettimport android.support.annotation.VisibleForTesting;
2535aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslavimport com.android.settings.R;
2635aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslavimport com.android.settings.widget.SummaryUpdater;
27b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillipsimport com.android.settingslib.wifi.WifiStatusTracker;
2835aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslav
29ff4adde5737be08d3e2d03fbe588c591d27d4a74Svetoslav Ganovimport static android.net.wifi.WifiInfo.removeDoubleQuotes;
30ff4adde5737be08d3e2d03fbe588c591d27d4a74Svetoslav Ganov
31dccca44ffda4836b56a21da95a046c9708ffd49csergeyv/**
32dccca44ffda4836b56a21da95a046c9708ffd49csergeyv * Helper class that listeners to wifi callback and notify client when there is update in
33ff4adde5737be08d3e2d03fbe588c591d27d4a74Svetoslav Ganov * wifi summary info.
34ff4adde5737be08d3e2d03fbe588c591d27d4a74Svetoslav Ganov */
3535aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslavpublic final class WifiSummaryUpdater extends SummaryUpdater {
366811f4e92cbb64e72a0d13eb9b99b5894bd59c76Svetoslav
3735aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslav    private final WifiStatusTracker mWifiTracker;
38b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips    private final BroadcastReceiver mReceiver;
39b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips
40b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips    private static final IntentFilter INTENT_FILTER;
41b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips    static {
4235aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslav        INTENT_FILTER = new IntentFilter();
4335aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslav        INTENT_FILTER.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
44ff4adde5737be08d3e2d03fbe588c591d27d4a74Svetoslav Ganov        INTENT_FILTER.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
4535aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslav        INTENT_FILTER.addAction(WifiManager.RSSI_CHANGED_ACTION);
46b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips    }
47b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips
48b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips    public WifiSummaryUpdater(Context context, OnSummaryChangeListener listener) {
49b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips        this(context, listener, new WifiStatusTracker(context.getSystemService(WifiManager.class)));
5035aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslav    }
51ff4adde5737be08d3e2d03fbe588c591d27d4a74Svetoslav Ganov
52b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips    @VisibleForTesting
53b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips    public WifiSummaryUpdater(Context context, OnSummaryChangeListener listener,
5435aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslav        WifiStatusTracker wifiTracker) {
5535aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslav        super(context, listener);
5635aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslav        mWifiTracker = wifiTracker;
5735aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslav        mReceiver = new BroadcastReceiver() {
5835aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslav            @Override
5935aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslav            public void onReceive(Context context, Intent intent) {
6035aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslav                mWifiTracker.handleBroadcast(intent);
6135aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslav                notifyChangeIfNeeded();
6235aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslav            }
6335aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslav        };
6435aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslav    }
6535aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslav
6635aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslav    @Override
6735aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslav    public void register(boolean register) {
6835aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslav        if (register) {
6935aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslav            mContext.registerReceiver(mReceiver, INTENT_FILTER);
7035aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslav        } else {
7135aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslav            mContext.unregisterReceiver(mReceiver);
7235aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslav        }
7335aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslav    }
7435aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslav
75b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips    @Override
7671487eb0ceb2b7dea02649e78d99bb5952f5eaefMike Reed    public String getSummary() {
7735aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslav        if (!mWifiTracker.enabled) {
7835aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslav            return mContext.getString(R.string.switch_off_text);
7935aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslav        }
80ff4adde5737be08d3e2d03fbe588c591d27d4a74Svetoslav Ganov        if (!mWifiTracker.connected) {
8135aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslav            return mContext.getString(R.string.disconnected);
8235aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslav        }
83b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips        return removeDoubleQuotes(mWifiTracker.ssid);
84b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips    }
85260ab726486317496bc12a57d599ea96dcde3284Mike Reed
86b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips}
87b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips