From 11dc2de24b4c1ff4d350491825d3c36e32c988f4 Mon Sep 17 00:00:00 2001 From: xshu Date: Thu, 16 Apr 2020 16:34:21 -0700 Subject: Add UserActionEvent for allowAutoJoin Bug: 153925826 Test: atest com.android.server.wifi Change-Id: I8a134197b444f1a715b487e101b23f7ff6474858 --- .../java/com/android/server/wifi/WifiServiceImpl.java | 16 ++++++++++++---- .../android/server/wifi/hotspot2/PasspointManager.java | 14 ++++++++++++-- .../android/server/wifi/hotspot2/PasspointProvider.java | 6 +++++- 3 files changed, 29 insertions(+), 7 deletions(-) (limited to 'service') diff --git a/service/java/com/android/server/wifi/WifiServiceImpl.java b/service/java/com/android/server/wifi/WifiServiceImpl.java index 4a9902484..e71719e8a 100644 --- a/service/java/com/android/server/wifi/WifiServiceImpl.java +++ b/service/java/com/android/server/wifi/WifiServiceImpl.java @@ -112,7 +112,7 @@ import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.AsyncChannel; import com.android.server.wifi.hotspot2.PasspointManager; import com.android.server.wifi.hotspot2.PasspointProvider; -import com.android.server.wifi.proto.nano.WifiMetricsProto; +import com.android.server.wifi.proto.nano.WifiMetricsProto.UserActionEvent; import com.android.server.wifi.util.ApConfigUtil; import com.android.server.wifi.util.ExternalCallbackTracker; import com.android.server.wifi.util.RssiUtil; @@ -2552,7 +2552,16 @@ public class WifiServiceImpl extends BaseWifiService { } // even for Suggestion, modify the current ephemeral configuration so that // existing configuration auto-connection is updated correctly - mWifiConfigManager.allowAutojoin(netId, choice); + if (choice != config.allowAutojoin) { + mWifiConfigManager.allowAutojoin(netId, choice); + // do not log this metrics for passpoint networks again here since it's already + // logged in PasspointManager. + if (!config.isPasspoint()) { + mWifiMetrics.logUserActionEvent(choice + ? UserActionEvent.EVENT_CONFIGURE_AUTO_CONNECT_ON + : UserActionEvent.EVENT_CONFIGURE_AUTO_CONNECT_OFF, netId); + } + } }); } @@ -4099,8 +4108,7 @@ public class WifiServiceImpl extends BaseWifiService { if (mWifiPermissionsUtil.checkNetworkSettingsPermission(uid)) { // It's important to log this metric before the actual forget executes because // the netId becomes invalid after the forget operation. - mWifiMetrics.logUserActionEvent(WifiMetricsProto.UserActionEvent.EVENT_FORGET_WIFI, - netId); + mWifiMetrics.logUserActionEvent(UserActionEvent.EVENT_FORGET_WIFI, netId); } mClientModeImpl.forget(netId, binder, callback, callbackIdentifier, uid); } diff --git a/service/java/com/android/server/wifi/hotspot2/PasspointManager.java b/service/java/com/android/server/wifi/hotspot2/PasspointManager.java index ba89bce2c..7ccca0625 100644 --- a/service/java/com/android/server/wifi/hotspot2/PasspointManager.java +++ b/service/java/com/android/server/wifi/hotspot2/PasspointManager.java @@ -629,7 +629,12 @@ public class PasspointManager { Log.e(TAG, "Config doesn't exist"); return false; } - provider.setAutojoinEnabled(enableAutojoin); + if (provider.setAutojoinEnabled(enableAutojoin)) { + mWifiMetrics.logUserActionEvent(enableAutojoin + ? UserActionEvent.EVENT_CONFIGURE_AUTO_CONNECT_ON + : UserActionEvent.EVENT_CONFIGURE_AUTO_CONNECT_OFF, + provider.isFromSuggestion(), true); + } mWifiConfigManager.saveToStore(true); return true; } @@ -640,7 +645,12 @@ public class PasspointManager { // FQDN provided, loop through all profiles with matching FQDN for (PasspointProvider provider : passpointProviders) { if (TextUtils.equals(provider.getConfig().getHomeSp().getFqdn(), fqdn)) { - provider.setAutojoinEnabled(enableAutojoin); + if (provider.setAutojoinEnabled(enableAutojoin)) { + mWifiMetrics.logUserActionEvent(enableAutojoin + ? UserActionEvent.EVENT_CONFIGURE_AUTO_CONNECT_ON + : UserActionEvent.EVENT_CONFIGURE_AUTO_CONNECT_OFF, + provider.isFromSuggestion(), true); + } found = true; } } diff --git a/service/java/com/android/server/wifi/hotspot2/PasspointProvider.java b/service/java/com/android/server/wifi/hotspot2/PasspointProvider.java index 45fa39502..9174534c7 100644 --- a/service/java/com/android/server/wifi/hotspot2/PasspointProvider.java +++ b/service/java/com/android/server/wifi/hotspot2/PasspointProvider.java @@ -212,9 +212,13 @@ public class PasspointProvider { /** * Enable/disable the auto-join configuration of the corresponding passpoint configuration. + * + * @return true if the setting has changed */ - public void setAutojoinEnabled(boolean autoJoinEnabled) { + public boolean setAutojoinEnabled(boolean autoJoinEnabled) { + boolean changed = mConfig.isAutojoinEnabled() != autoJoinEnabled; mConfig.setAutojoinEnabled(autoJoinEnabled); + return changed; } public boolean isAutojoinEnabled() { -- cgit v1.2.3 From 3edbf573530092ed83c7b434650ba61b5b6da26c Mon Sep 17 00:00:00 2001 From: xshu Date: Thu, 16 Apr 2020 20:35:17 -0700 Subject: Add UserActionEvent for connect tracks when a user manually connects to a network. Bug: 153925826 Test: com.android.server.wifi Change-Id: I01265159c2903689a3e005be0087cd00d790ba48 --- service/java/com/android/server/wifi/WifiServiceImpl.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'service') diff --git a/service/java/com/android/server/wifi/WifiServiceImpl.java b/service/java/com/android/server/wifi/WifiServiceImpl.java index e71719e8a..00315560b 100644 --- a/service/java/com/android/server/wifi/WifiServiceImpl.java +++ b/service/java/com/android/server/wifi/WifiServiceImpl.java @@ -4071,12 +4071,15 @@ public class WifiServiceImpl extends BaseWifiService { @Override public void connect(WifiConfiguration config, int netId, IBinder binder, @Nullable IActionListener callback, int callbackIdentifier) { - if (!isPrivileged(Binder.getCallingPid(), Binder.getCallingUid())) { + int uid = Binder.getCallingUid(); + if (!isPrivileged(Binder.getCallingPid(), uid)) { throw new SecurityException(TAG + ": Permission denied"); } - mLog.info("connect uid=%").c(Binder.getCallingUid()).flush(); - mClientModeImpl.connect( - config, netId, binder, callback, callbackIdentifier, Binder.getCallingUid()); + mLog.info("connect uid=%").c(uid).flush(); + mClientModeImpl.connect(config, netId, binder, callback, callbackIdentifier, uid); + if (mWifiPermissionsUtil.checkNetworkSettingsPermission(uid)) { + mWifiMetrics.logUserActionEvent(UserActionEvent.EVENT_MANUAL_CONNECT, netId); + } } /** -- cgit v1.2.3 From 98b20b3a66d83c71befac7788a32268d2f2b9114 Mon Sep 17 00:00:00 2001 From: xshu Date: Thu, 16 Apr 2020 22:05:28 -0700 Subject: Add UserActionEvent for disconnect Bug: 153925826 Test: atest com.android.server.wifi Change-Id: I576e67152b0d41621a8d7f13cad239d3ef8694f2 --- service/java/com/android/server/wifi/WifiConfigManager.java | 13 +++++++++---- service/java/com/android/server/wifi/WifiServiceImpl.java | 3 ++- 2 files changed, 11 insertions(+), 5 deletions(-) (limited to 'service') diff --git a/service/java/com/android/server/wifi/WifiConfigManager.java b/service/java/com/android/server/wifi/WifiConfigManager.java index 0fb7745f2..209044a65 100644 --- a/service/java/com/android/server/wifi/WifiConfigManager.java +++ b/service/java/com/android/server/wifi/WifiConfigManager.java @@ -2689,12 +2689,13 @@ public class WifiConfigManager { * @param network Input can be SSID or FQDN. And caller must ensure that the SSID passed thru * this API matched the WifiConfiguration.SSID rules, and thus be surrounded by * quotes. + * uid UID of the calling process. */ - public void userTemporarilyDisabledNetwork(String network) { + public void userTemporarilyDisabledNetwork(String network, int uid) { mUserTemporarilyDisabledList.add(network, USER_DISCONNECT_NETWORK_BLOCK_EXPIRY_MS); - Log.d(TAG, "Temporarily disable network: " + network + " num=" + Log.d(TAG, "Temporarily disable network: " + network + " uid=" + uid + " num=" + mUserTemporarilyDisabledList.size()); - removeUserChoiceFromDisabledNetwork(network); + removeUserChoiceFromDisabledNetwork(network, uid); } /** @@ -2708,9 +2709,13 @@ public class WifiConfigManager { } private void removeUserChoiceFromDisabledNetwork( - @NonNull String network) { + @NonNull String network, int uid) { for (WifiConfiguration config : getInternalConfiguredNetworks()) { if (TextUtils.equals(config.SSID, network) || TextUtils.equals(config.FQDN, network)) { + if (mWifiPermissionsUtil.checkNetworkSettingsPermission(uid)) { + mWifiInjector.getWifiMetrics().logUserActionEvent( + UserActionEvent.EVENT_DISCONNECT_WIFI, config.networkId); + } removeConnectChoiceFromAllNetworks(config.getKey()); } } diff --git a/service/java/com/android/server/wifi/WifiServiceImpl.java b/service/java/com/android/server/wifi/WifiServiceImpl.java index 00315560b..729e1303c 100644 --- a/service/java/com/android/server/wifi/WifiServiceImpl.java +++ b/service/java/com/android/server/wifi/WifiServiceImpl.java @@ -3060,7 +3060,8 @@ public class WifiServiceImpl extends BaseWifiService { return; } mLog.info("disableEphemeralNetwork uid=%").c(Binder.getCallingUid()).flush(); - mWifiThreadRunner.post(() -> mWifiConfigManager.userTemporarilyDisabledNetwork(network)); + mWifiThreadRunner.post(() -> mWifiConfigManager.userTemporarilyDisabledNetwork(network, + Binder.getCallingUid())); } private final BroadcastReceiver mReceiver = new BroadcastReceiver() { -- cgit v1.2.3