1 /*
2  * Copyright (C) 2021 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.settings.network;
18 
19 import android.content.Context;
20 
21 import androidx.lifecycle.Lifecycle;
22 import androidx.preference.Preference;
23 import androidx.preference.PreferenceScreen;
24 
25 import com.android.settings.R;
26 import com.android.settings.Utils;
27 import com.android.settings.core.TogglePreferenceController;
28 import com.android.settings.wifi.WifiPickerTrackerHelper;
29 import com.android.wifitrackerlib.WifiPickerTracker;
30 
31 /**
32  * Preference controller for "Carrier Wi-Fi network"
33  */
34 public class CarrierWifiTogglePreferenceController extends TogglePreferenceController implements
35         WifiPickerTracker.WifiPickerTrackerCallback {
36 
37     private static final String TAG = "CarrierWifiTogglePreferenceController";
38     protected static final String CARRIER_WIFI_TOGGLE_PREF_KEY = "carrier_wifi_toggle";
39     protected static final String CARRIER_WIFI_NETWORK_PREF_KEY = "carrier_wifi_network";
40 
41     protected final Context mContext;
42     protected int mSubId;
43     protected WifiPickerTrackerHelper mWifiPickerTrackerHelper;
44     protected boolean mIsCarrierProvisionWifiEnabled;
45     protected Preference mCarrierNetworkPreference;
46 
CarrierWifiTogglePreferenceController(Context context, String preferenceKey)47     public CarrierWifiTogglePreferenceController(Context context,
48             String preferenceKey) {
49         super(context, preferenceKey);
50         mContext = context;
51     }
52 
53     /** Initialize related properties */
init(Lifecycle lifecycle, int subId)54     public void init(Lifecycle lifecycle, int subId) {
55         mSubId = subId;
56         mWifiPickerTrackerHelper = new WifiPickerTrackerHelper(lifecycle, mContext, this);
57         mIsCarrierProvisionWifiEnabled =
58                 mWifiPickerTrackerHelper.isCarrierNetworkProvisionEnabled(mSubId);
59     }
60 
61     @Override
getAvailabilityStatus()62     public int getAvailabilityStatus() {
63         return mIsCarrierProvisionWifiEnabled ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
64     }
65 
66     @Override
isChecked()67     public boolean isChecked() {
68         return mWifiPickerTrackerHelper.isCarrierNetworkEnabled(mSubId);
69     }
70 
71     @Override
setChecked(boolean isChecked)72     public boolean setChecked(boolean isChecked) {
73         if (mWifiPickerTrackerHelper == null) {
74             return false;
75         }
76         mWifiPickerTrackerHelper.setCarrierNetworkEnabled(isChecked);
77         return true;
78     }
79 
80     @Override
displayPreference(PreferenceScreen screen)81     public void displayPreference(PreferenceScreen screen) {
82         super.displayPreference(screen);
83         mCarrierNetworkPreference = screen.findPreference(CARRIER_WIFI_NETWORK_PREF_KEY);
84         updateCarrierNetworkPreference();
85     }
86 
87     @Override
getSliceHighlightMenuRes()88     public int getSliceHighlightMenuRes() {
89         return R.string.menu_key_network;
90     }
91 
92     @Override
onWifiStateChanged()93     public void onWifiStateChanged() {
94         updateCarrierNetworkPreference();
95     }
96 
97     @Override
onWifiEntriesChanged()98     public void onWifiEntriesChanged() {
99         updateCarrierNetworkPreference();
100     }
101 
102     @Override
onNumSavedNetworksChanged()103     public void onNumSavedNetworksChanged() {
104         // Do nothing
105     }
106 
107     @Override
onNumSavedSubscriptionsChanged()108     public void onNumSavedSubscriptionsChanged() {
109         // Do nothing
110     }
111 
updateCarrierNetworkPreference()112     protected void updateCarrierNetworkPreference() {
113         if (mCarrierNetworkPreference == null) {
114             return;
115         }
116         if (getAvailabilityStatus() != AVAILABLE || !isCarrierNetworkActive()) {
117             mCarrierNetworkPreference.setVisible(false);
118             return;
119         }
120         mCarrierNetworkPreference.setVisible(true);
121         mCarrierNetworkPreference.setSummary(getCarrierNetworkSsid());
122     }
123 
isCarrierNetworkActive()124     protected boolean isCarrierNetworkActive() {
125         if (mWifiPickerTrackerHelper == null) {
126             return false;
127         }
128         return mWifiPickerTrackerHelper.isCarrierNetworkActive();
129     }
130 
getCarrierNetworkSsid()131     protected String getCarrierNetworkSsid() {
132         if (mWifiPickerTrackerHelper == null) {
133             return null;
134         }
135         return mWifiPickerTrackerHelper.getCarrierNetworkSsid();
136     }
137 }
138