1c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling/*
2c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling * Copyright (C) 2017 The Android Open Source Project
3c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling *
4c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling * Licensed under the Apache License, Version 2.0 (the "License");
5c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling * you may not use this file except in compliance with the License.
6c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling * You may obtain a copy of the License at
7c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling *
8c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling *      http://www.apache.org/licenses/LICENSE-2.0
9c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling *
10c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling * Unless required by applicable law or agreed to in writing, software
11c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling * distributed under the License is distributed on an "AS IS" BASIS,
12c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling * See the License for the specific language governing permissions and
14c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling * limitations under the License.
15c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling */
16c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling
17c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Lingpackage com.android.settings.wifi;
18c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling
19c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Lingimport android.content.BroadcastReceiver;
20c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Lingimport android.content.Context;
21c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Lingimport android.content.Intent;
22c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Lingimport android.content.IntentFilter;
23c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Lingimport android.net.wifi.WifiManager;
24c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Lingimport android.support.annotation.VisibleForTesting;
25c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Lingimport com.android.settings.R;
26c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Lingimport com.android.settings.widget.SummaryUpdater;
27c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Lingimport com.android.settingslib.wifi.WifiStatusTracker;
28c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling
2947ec3857a5c9551f95d3bf14484d98f8550241d8Doris Lingimport static android.net.wifi.WifiInfo.removeDoubleQuotes;
3047ec3857a5c9551f95d3bf14484d98f8550241d8Doris Ling
31c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling/**
32c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling * Helper class that listeners to wifi callback and notify client when there is update in
33c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling * wifi summary info.
34c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling */
35c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Lingpublic final class WifiSummaryUpdater extends SummaryUpdater {
36c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling
37c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling    private final WifiStatusTracker mWifiTracker;
38c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling    private final BroadcastReceiver mReceiver;
39c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling
40c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling    private static final IntentFilter INTENT_FILTER;
41c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling    static {
42c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling        INTENT_FILTER = new IntentFilter();
43c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling        INTENT_FILTER.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
44c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling        INTENT_FILTER.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
45c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling        INTENT_FILTER.addAction(WifiManager.RSSI_CHANGED_ACTION);
46c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling    }
47c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling
48c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling    public WifiSummaryUpdater(Context context, OnSummaryChangeListener listener) {
49c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling        this(context, listener, new WifiStatusTracker(context.getSystemService(WifiManager.class)));
50c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling    }
51c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling
52c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling    @VisibleForTesting
53c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling    public WifiSummaryUpdater(Context context, OnSummaryChangeListener listener,
54c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling        WifiStatusTracker wifiTracker) {
55c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling        super(context, listener);
56c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling        mWifiTracker = wifiTracker;
57c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling        mReceiver = new BroadcastReceiver() {
58c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling            @Override
59c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling            public void onReceive(Context context, Intent intent) {
60c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling                mWifiTracker.handleBroadcast(intent);
61c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling                notifyChangeIfNeeded();
62c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling            }
63c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling        };
64c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling    }
65c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling
66c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling    @Override
67c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling    public void register(boolean register) {
68c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling        if (register) {
69c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling            mContext.registerReceiver(mReceiver, INTENT_FILTER);
70c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling        } else {
71c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling            mContext.unregisterReceiver(mReceiver);
72c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling        }
73c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling    }
74c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling
75c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling    @Override
76c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling    public String getSummary() {
77c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling        if (!mWifiTracker.enabled) {
785853f9742fb72ef155338b94f6904e635e87f675Doris Ling            return mContext.getString(R.string.switch_off_text);
79c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling        }
80c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling        if (!mWifiTracker.connected) {
81c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling            return mContext.getString(R.string.disconnected);
82c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling        }
8347ec3857a5c9551f95d3bf14484d98f8550241d8Doris Ling        return removeDoubleQuotes(mWifiTracker.ssid);
84c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling    }
85c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling
86c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling}
87