1 /* 2 * Copyright (C) 2018 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.wifi.savedaccesspoints; 18 19 import android.content.Context; 20 import android.net.wifi.WifiManager; 21 22 import androidx.annotation.VisibleForTesting; 23 import androidx.preference.Preference; 24 import androidx.preference.PreferenceGroup; 25 import androidx.preference.PreferenceScreen; 26 27 import com.android.settings.core.BasePreferenceController; 28 import com.android.settingslib.wifi.AccessPoint; 29 import com.android.settingslib.wifi.AccessPointPreference; 30 import com.android.settingslib.wifi.AccessPointPreference.UserBadgeCache; 31 import com.android.settingslib.wifi.WifiSavedConfigUtils; 32 33 import java.util.List; 34 import java.util.stream.Collectors; 35 36 /** 37 * Controller that manages a PreferenceGroup, which contains a list of saved access points. 38 * 39 * Migrating from Wi-Fi SettingsLib to to WifiTrackerLib, this object will be removed in the near 40 * future, please develop in 41 * {@link com.android.settings.wifi.savedaccesspoints2.SavedAccessPointsPreferenceController2}. 42 */ 43 public class SavedAccessPointsPreferenceController extends BasePreferenceController implements 44 Preference.OnPreferenceClickListener { 45 46 protected final WifiManager mWifiManager; 47 private final UserBadgeCache mUserBadgeCache; 48 private PreferenceGroup mPreferenceGroup; 49 private SavedAccessPointsWifiSettings mHost; 50 @VisibleForTesting 51 List<AccessPoint> mAccessPoints; 52 SavedAccessPointsPreferenceController(Context context, String preferenceKey)53 public SavedAccessPointsPreferenceController(Context context, String preferenceKey) { 54 super(context, preferenceKey); 55 mUserBadgeCache = new AccessPointPreference.UserBadgeCache(context.getPackageManager()); 56 mWifiManager = context.getSystemService(WifiManager.class); 57 } 58 setHost(SavedAccessPointsWifiSettings host)59 public SavedAccessPointsPreferenceController setHost(SavedAccessPointsWifiSettings host) { 60 mHost = host; 61 return this; 62 } 63 64 @Override getAvailabilityStatus()65 public int getAvailabilityStatus() { 66 refreshSavedAccessPoints(); 67 return mAccessPoints.size() > 0 ? AVAILABLE : CONDITIONALLY_UNAVAILABLE; 68 } 69 70 @Override displayPreference(PreferenceScreen screen)71 public void displayPreference(PreferenceScreen screen) { 72 mPreferenceGroup = screen.findPreference(getPreferenceKey()); 73 refreshSavedAccessPoints(); 74 updatePreference(); 75 super.displayPreference(screen); 76 } 77 78 @Override onPreferenceClick(Preference preference)79 public boolean onPreferenceClick(Preference preference) { 80 if (mHost != null) { 81 final Preference preferenceInGroup = 82 mPreferenceGroup.findPreference(preference.getKey()); 83 mHost.showWifiPage((AccessPointPreference) preferenceInGroup); 84 } 85 return false; 86 } 87 refreshSavedAccessPoints()88 protected void refreshSavedAccessPoints() { 89 mAccessPoints = WifiSavedConfigUtils.getAllConfigs(mContext, mWifiManager).stream() 90 .filter(accessPoint -> !accessPoint.isPasspointConfig()) 91 .sorted(SavedNetworkComparator.INSTANCE) 92 .collect(Collectors.toList()); 93 } 94 updatePreference()95 private void updatePreference() { 96 mPreferenceGroup.removeAll(); 97 for (AccessPoint accessPoint : mAccessPoints) { 98 final String key = accessPoint.getKey(); 99 100 final AccessPointPreference preference = new AccessPointPreference(accessPoint, 101 mContext, mUserBadgeCache, true /* forSavedNetworks */); 102 preference.setKey(key); 103 preference.setIcon(null); 104 preference.setOnPreferenceClickListener(this); 105 106 mPreferenceGroup.addPreference(preference); 107 } 108 } 109 } 110