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