diff options
author | Quang Luong <qal@google.com> | 2020-05-06 21:05:56 -0700 |
---|---|---|
committer | Quang Luong <qal@google.com> | 2020-05-11 10:05:08 -0700 |
commit | ce106d20d4bb71ab13f4f351a41ab0481ae49609 (patch) | |
tree | 366a0c161563777b2a26d9dc0868465e5e5ca51f /libs/WifiTrackerLib/src | |
parent | 18ae05a8368df5d55b2f7ead4fd5cb862d2f46a2 (diff) | |
download | frameworks_opt_net_wifi-ce106d20d4bb71ab13f4f351a41ab0481ae49609.tar.gz frameworks_opt_net_wifi-ce106d20d4bb71ab13f4f351a41ab0481ae49609.tar.bz2 frameworks_opt_net_wifi-ce106d20d4bb71ab13f4f351a41ab0481ae49609.zip |
[WifiTrackerLib] Use open wifi package name for app label if applicable
App label of an open wifi network should use the open wifi package name
instead of the active scorer name.
Bug: 153352576
Test: manual visual verification that connected open wifi network uses
the open wifi package name instead of the active scorer name
Change-Id: I1e5dd068a5e9086143b928e3f16fec86b23b89b3
Diffstat (limited to 'libs/WifiTrackerLib/src')
3 files changed, 28 insertions, 46 deletions
diff --git a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/PasspointWifiEntry.java b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/PasspointWifiEntry.java index 350580250..8b66fd5e8 100644 --- a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/PasspointWifiEntry.java +++ b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/PasspointWifiEntry.java @@ -21,7 +21,6 @@ import static android.net.wifi.WifiInfo.sanitizeSsid; import static androidx.core.util.Preconditions.checkNotNull; import static com.android.wifitrackerlib.Utils.getAppLabel; -import static com.android.wifitrackerlib.Utils.getAppLabelForWifiConfiguration; import static com.android.wifitrackerlib.Utils.getAutoConnectDescription; import static com.android.wifitrackerlib.Utils.getAverageSpeedFromScanResults; import static com.android.wifitrackerlib.Utils.getBestScanResultByLevel; @@ -167,7 +166,7 @@ public class PasspointWifiEntry extends WifiEntry { getSubIdForConfig(mContext, mWifiConfig)); sj.add(mContext.getString(R.string.available_via_app, carrierName != null ? carrierName - : getAppLabelForWifiConfiguration(mContext, mWifiConfig))); + : getAppLabel(mContext, mWifiConfig.creatorName))); } else { sj.add(mContext.getString(R.string.wifi_remembered)); } diff --git a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/StandardWifiEntry.java b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/StandardWifiEntry.java index 06b27656a..5518a39bb 100644 --- a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/StandardWifiEntry.java +++ b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/StandardWifiEntry.java @@ -25,8 +25,6 @@ import static android.net.wifi.WifiInfo.sanitizeSsid; import static androidx.core.util.Preconditions.checkNotNull; import static com.android.wifitrackerlib.Utils.getAppLabel; -import static com.android.wifitrackerlib.Utils.getAppLabelForSavedNetwork; -import static com.android.wifitrackerlib.Utils.getAppLabelForWifiConfiguration; import static com.android.wifitrackerlib.Utils.getAutoConnectDescription; import static com.android.wifitrackerlib.Utils.getAverageSpeedFromScanResults; import static com.android.wifitrackerlib.Utils.getBestScanResultByLevel; @@ -196,7 +194,7 @@ public class StandardWifiEntry extends WifiEntry { StringJoiner sj = new StringJoiner(mContext.getString(R.string.summary_separator)); if (!concise && mForSavedNetworksPage && isSaved()) { - final CharSequence appLabel = getAppLabelForSavedNetwork(mContext, this); + final CharSequence appLabel = getAppLabel(mContext, mWifiConfig.creatorName); if (!TextUtils.isEmpty(appLabel)) { sj.add(mContext.getString(R.string.saved_network, appLabel)); } @@ -214,7 +212,7 @@ public class StandardWifiEntry extends WifiEntry { getSubIdForConfig(mContext, mWifiConfig)); sj.add(mContext.getString(R.string.available_via_app, carrierName != null ? carrierName - : getAppLabelForWifiConfiguration(mContext, mWifiConfig))); + : getAppLabel(mContext, mWifiConfig.creatorName))); } else if (isSaved()) { sj.add(mContext.getString(R.string.wifi_remembered)); } diff --git a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/Utils.java b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/Utils.java index ced1d81bd..1125e086c 100644 --- a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/Utils.java +++ b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/Utils.java @@ -37,15 +37,14 @@ import static com.android.wifitrackerlib.WifiEntry.Speed; import static java.util.Comparator.comparingInt; import static java.util.stream.Collectors.groupingBy; -import android.app.AppGlobals; import android.content.Context; import android.content.pm.ApplicationInfo; -import android.content.pm.IPackageManager; import android.content.pm.PackageManager; import android.net.NetworkCapabilities; import android.net.NetworkInfo; import android.net.NetworkInfo.DetailedState; import android.net.NetworkKey; +import android.net.NetworkScoreManager; import android.net.ScoredNetwork; import android.net.wifi.ScanResult; import android.net.wifi.WifiConfiguration; @@ -53,8 +52,8 @@ import android.net.wifi.WifiConfiguration.NetworkSelectionStatus; import android.net.wifi.WifiInfo; import android.net.wifi.WifiNetworkScoreCache; import android.os.PersistableBundle; -import android.os.RemoteException; import android.os.UserHandle; +import android.provider.Settings; import android.telephony.CarrierConfigManager; import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionManager; @@ -83,6 +82,15 @@ import java.util.StringJoiner; * Utility methods for WifiTrackerLib. */ class Utils { + private static NetworkScoreManager sNetworkScoreManager; + + private static String getActiveScorerPackage(@NonNull Context context) { + if (sNetworkScoreManager == null) { + sNetworkScoreManager = context.getSystemService(NetworkScoreManager.class); + } + return sNetworkScoreManager.getActiveScorerPackage(); + } + // Returns the ScanResult with the best RSSI from a list of ScanResults. @Nullable static ScanResult getBestScanResultByLevel(@NonNull List<ScanResult> scanResults) { @@ -360,51 +368,28 @@ class Utils { } } + /** + * Get the app label for a suggestion/specifier package name. + */ static CharSequence getAppLabel(Context context, String packageName) { try { + String openWifiPackageName = Settings.Global.getString(context.getContentResolver(), + Settings.Global.USE_OPEN_WIFI_PACKAGE); + if (!TextUtils.isEmpty(openWifiPackageName) && TextUtils.equals(packageName, + getActiveScorerPackage(context))) { + packageName = openWifiPackageName; + } + ApplicationInfo appInfo = context.getPackageManager().getApplicationInfoAsUser( packageName, 0 /* flags */, UserHandle.getUserId(UserHandle.USER_CURRENT)); return appInfo.loadLabel(context.getPackageManager()); } catch (PackageManager.NameNotFoundException e) { - // Do nothing. - } - return ""; - } - - static CharSequence getAppLabelForSavedNetwork(@NonNull Context context, - @NonNull WifiEntry wifiEntry) { - return getAppLabelForWifiConfiguration(context, wifiEntry.getWifiConfiguration()); - } - - static CharSequence getAppLabelForWifiConfiguration(@NonNull Context context, - @NonNull WifiConfiguration config) { - if (context == null || config == null) { - return ""; - } - - final PackageManager pm = context.getPackageManager(); - final String systemName = pm.getNameForUid(android.os.Process.SYSTEM_UID); - final int userId = UserHandle.getUserId(config.creatorUid); - ApplicationInfo appInfo = null; - if (config.creatorName != null && config.creatorName.equals(systemName)) { - appInfo = context.getApplicationInfo(); - } else { - try { - final IPackageManager ipm = AppGlobals.getPackageManager(); - appInfo = ipm.getApplicationInfo(config.creatorName, 0 /* flags */, userId); - } catch (RemoteException rex) { - // Do nothing. - } - } - if (appInfo != null - && !appInfo.packageName.equals(context.getString(R.string.settings_package)) - && !appInfo.packageName.equals( - context.getString(R.string.certinstaller_package))) { - return appInfo.loadLabel(pm); - } else { - return ""; + // The packageName should come from a suggestion/specifier which is guaranteed to + // have an associated app label. If there is a concurrency issue between the current + // connection and the suggestion being removed, we should fall back to the packageName. + return packageName; } } |