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.Utils; 26 import com.android.settings.core.TogglePreferenceController; 27 import com.android.settings.wifi.WifiPickerTrackerHelper; 28 import com.android.wifitrackerlib.WifiPickerTracker; 29 30 /** 31 * Preference controller for "Carrier Wi-Fi network" 32 */ 33 public class CarrierWifiTogglePreferenceController extends TogglePreferenceController implements 34 WifiPickerTracker.WifiPickerTrackerCallback { 35 36 private static final String TAG = "CarrierWifiTogglePreferenceController"; 37 protected static final String CARRIER_WIFI_TOGGLE_PREF_KEY = "carrier_wifi_toggle"; 38 protected static final String CARRIER_WIFI_NETWORK_PREF_KEY = "carrier_wifi_network"; 39 40 protected final Context mContext; 41 protected boolean mIsProviderModelEnabled; 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 mIsProviderModelEnabled = Utils.isProviderModelEnabled(context); 52 } 53 54 /** Initialize related properties */ init(Lifecycle lifecycle, int subId)55 public void init(Lifecycle lifecycle, int subId) { 56 mSubId = subId; 57 mWifiPickerTrackerHelper = new WifiPickerTrackerHelper(lifecycle, mContext, this); 58 mIsCarrierProvisionWifiEnabled = 59 mWifiPickerTrackerHelper.isCarrierNetworkProvisionEnabled(mSubId); 60 } 61 62 @Override getAvailabilityStatus()63 public int getAvailabilityStatus() { 64 if (!mIsProviderModelEnabled) { 65 return CONDITIONALLY_UNAVAILABLE; 66 } 67 return mIsCarrierProvisionWifiEnabled ? AVAILABLE : CONDITIONALLY_UNAVAILABLE; 68 } 69 70 @Override isChecked()71 public boolean isChecked() { 72 return mWifiPickerTrackerHelper.isCarrierNetworkEnabled(mSubId); 73 } 74 75 @Override setChecked(boolean isChecked)76 public boolean setChecked(boolean isChecked) { 77 if (mWifiPickerTrackerHelper == null) { 78 return false; 79 } 80 mWifiPickerTrackerHelper.setCarrierNetworkEnabled(isChecked); 81 return true; 82 } 83 84 @Override displayPreference(PreferenceScreen screen)85 public void displayPreference(PreferenceScreen screen) { 86 super.displayPreference(screen); 87 mCarrierNetworkPreference = screen.findPreference(CARRIER_WIFI_NETWORK_PREF_KEY); 88 updateCarrierNetworkPreference(); 89 } 90 91 @Override onWifiStateChanged()92 public void onWifiStateChanged() { 93 updateCarrierNetworkPreference(); 94 } 95 96 @Override onWifiEntriesChanged()97 public void onWifiEntriesChanged() { 98 updateCarrierNetworkPreference(); 99 } 100 101 @Override onNumSavedNetworksChanged()102 public void onNumSavedNetworksChanged() { 103 // Do nothing 104 } 105 106 @Override onNumSavedSubscriptionsChanged()107 public void onNumSavedSubscriptionsChanged() { 108 // Do nothing 109 } 110 updateCarrierNetworkPreference()111 protected void updateCarrierNetworkPreference() { 112 if (mCarrierNetworkPreference == null) { 113 return; 114 } 115 if (getAvailabilityStatus() != AVAILABLE || !isCarrierNetworkActive()) { 116 mCarrierNetworkPreference.setVisible(false); 117 return; 118 } 119 mCarrierNetworkPreference.setVisible(true); 120 mCarrierNetworkPreference.setSummary(getCarrierNetworkSsid()); 121 } 122 isCarrierNetworkActive()123 protected boolean isCarrierNetworkActive() { 124 if (mWifiPickerTrackerHelper == null) { 125 return false; 126 } 127 return mWifiPickerTrackerHelper.isCarrierNetworkActive(); 128 } 129 getCarrierNetworkSsid()130 protected String getCarrierNetworkSsid() { 131 if (mWifiPickerTrackerHelper == null) { 132 return null; 133 } 134 return mWifiPickerTrackerHelper.getCarrierNetworkSsid(); 135 } 136 } 137