WifiSummaryUpdater.java revision c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924
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
29c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling/**
30c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling * Helper class that listeners to wifi callback and notify client when there is update in
31c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling * wifi summary info.
32c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling */
33c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Lingpublic final class WifiSummaryUpdater extends SummaryUpdater {
34c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling
35c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling    private final WifiStatusTracker mWifiTracker;
36c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling    private final BroadcastReceiver mReceiver;
37c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling
38c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling    private static final IntentFilter INTENT_FILTER;
39c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling    static {
40c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling        INTENT_FILTER = new IntentFilter();
41c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling        INTENT_FILTER.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
42c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling        INTENT_FILTER.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
43c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling        INTENT_FILTER.addAction(WifiManager.RSSI_CHANGED_ACTION);
44c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling    }
45c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling
46c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling    public WifiSummaryUpdater(Context context, OnSummaryChangeListener listener) {
47c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling        this(context, listener, new WifiStatusTracker(context.getSystemService(WifiManager.class)));
48c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling    }
49c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling
50c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling    @VisibleForTesting
51c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling    public WifiSummaryUpdater(Context context, OnSummaryChangeListener listener,
52c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling        WifiStatusTracker wifiTracker) {
53c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling        super(context, listener);
54c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling        mWifiTracker = wifiTracker;
55c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling        mReceiver = new BroadcastReceiver() {
56c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling            @Override
57c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling            public void onReceive(Context context, Intent intent) {
58c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling                mWifiTracker.handleBroadcast(intent);
59c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling                notifyChangeIfNeeded();
60c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling            }
61c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling        };
62c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling    }
63c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling
64c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling    @Override
65c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling    public void register(boolean register) {
66c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling        if (register) {
67c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling            mContext.registerReceiver(mReceiver, INTENT_FILTER);
68c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling        } else {
69c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling            mContext.unregisterReceiver(mReceiver);
70c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling        }
71c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling    }
72c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling
73c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling    @Override
74c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling    public String getSummary() {
75c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling        if (!mWifiTracker.enabled) {
76c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling            return mContext.getString(R.string.wifi_disabled_generic);
77c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling        }
78c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling        if (!mWifiTracker.connected) {
79c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling            return mContext.getString(R.string.disconnected);
80c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling        }
81c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling        return mWifiTracker.ssid;
82c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling    }
83c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling
84c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling}
85