diff options
author | Nate(Qiang) Jiang <qiangjiang@google.com> | 2020-02-26 09:43:51 -0800 |
---|---|---|
committer | Nate(Qiang) Jiang <qiangjiang@google.com> | 2020-02-26 18:07:18 -0800 |
commit | f771687761010c14f5187ea516d1c3f159eedead (patch) | |
tree | e6b0a82cffd9f7f6684208c8195dd658196a5f08 /service | |
parent | 861798ec8b5c8770bb883a101ceed513ef7954c4 (diff) |
Consider app disabled same as app is removed
When app is disabled, remove all related saved network, suggestion and
passpoint.
Bug: 150247605
Test: atest com.android.server.wifi
Change-Id: I274c148597cd27c7ea72ee60083b98519ca4236d
Diffstat (limited to 'service')
-rw-r--r-- | service/java/com/android/server/wifi/WifiServiceImpl.java | 65 |
1 files changed, 40 insertions, 25 deletions
diff --git a/service/java/com/android/server/wifi/WifiServiceImpl.java b/service/java/com/android/server/wifi/WifiServiceImpl.java index acb060dfc..96a60f19b 100644 --- a/service/java/com/android/server/wifi/WifiServiceImpl.java +++ b/service/java/com/android/server/wifi/WifiServiceImpl.java @@ -40,6 +40,7 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.pm.ApplicationInfo; +import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.ParceledListSlice; import android.content.pm.ResolveInfo; @@ -3051,36 +3052,50 @@ public class WifiServiceImpl extends BaseWifiService { private void registerForBroadcasts() { IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(Intent.ACTION_PACKAGE_FULLY_REMOVED); + intentFilter.addAction(Intent.ACTION_PACKAGE_CHANGED); + intentFilter.addAction(Intent.ACTION_PACKAGE_REMOVED); intentFilter.addDataScheme("package"); mContext.registerReceiver(new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { - String action = intent.getAction(); - if (action.equals(Intent.ACTION_PACKAGE_FULLY_REMOVED)) { - int uid = intent.getIntExtra(Intent.EXTRA_UID, -1); - Uri uri = intent.getData(); - if (uid == -1 || uri == null) { - return; - } - String pkgName = uri.getSchemeSpecificPart(); - - // Call the method in the main Wifi thread. - mWifiThreadRunner.post(() -> { - ApplicationInfo ai = new ApplicationInfo(); - ai.packageName = pkgName; - ai.uid = uid; - mWifiConfigManager.removeNetworksForApp(ai); - mScanRequestProxy.clearScanRequestTimestampsForApp(pkgName, uid); - - // Remove all suggestions from the package. - mWifiNetworkSuggestionsManager.removeApp(pkgName); - mClientModeImpl.removeNetworkRequestUserApprovedAccessPointsForApp(pkgName); - - // Remove all Passpoint profiles from package. - mWifiInjector.getPasspointManager().removePasspointProviderWithPackage( - pkgName); - }); + int uid = intent.getIntExtra(Intent.EXTRA_UID, -1); + Uri uri = intent.getData(); + if (uid == -1 || uri == null) { + Log.e(TAG, "Uid or Uri is missing for action:" + intent.getAction()); + return; + } + String pkgName = uri.getSchemeSpecificPart(); + PackageManager pm = context.getPackageManager(); + PackageInfo packageInfo = null; + try { + packageInfo = pm.getPackageInfo(pkgName, 0); + } catch (PackageManager.NameNotFoundException e) { + Log.e(TAG, "Couldn't get PackageInfo for package:" + pkgName); + return; + } + // If package is not removed or disabled, just ignore. + if (packageInfo != null + && packageInfo.applicationInfo != null + && packageInfo.applicationInfo.enabled) { + return; } + Log.d(TAG, "Remove settings for package:" + pkgName); + // Call the method in the main Wifi thread. + mWifiThreadRunner.post(() -> { + ApplicationInfo ai = new ApplicationInfo(); + ai.packageName = pkgName; + ai.uid = uid; + mWifiConfigManager.removeNetworksForApp(ai); + mScanRequestProxy.clearScanRequestTimestampsForApp(pkgName, uid); + + // Remove all suggestions from the package. + mWifiNetworkSuggestionsManager.removeApp(pkgName); + mClientModeImpl.removeNetworkRequestUserApprovedAccessPointsForApp(pkgName); + + // Remove all Passpoint profiles from package. + mWifiInjector.getPasspointManager().removePasspointProviderWithPackage( + pkgName); + }); } }, intentFilter); } |