Allow SysUi to see the connectivity diagnostic callbacks
SysUi needs to see connectivity diagnostic callbacks to display "Checking for internet access..." -> "Connected" or "No internet access". Bug: 307161342 Test: atest FrameworksNetTests, manually connect to a network without internet connectivity, verify Internet Dialog doesn't get stuck showing "Checking for internet access..." Change-Id: I86e2b852ff9e5dfbfc37ba711f477166b0ac6835
This commit is contained in:
parent
85fce4f871
commit
28eefef05d
1 changed files with 52 additions and 0 deletions
|
|
@ -968,6 +968,9 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||
// Flag to optimize closing frozen app sockets by waiting for the cellular modem to wake up.
|
||||
private final boolean mDelayDestroyFrozenSockets;
|
||||
|
||||
// Flag to allow SysUI to receive connectivity reports for wifi picker UI.
|
||||
private final boolean mAllowSysUiConnectivityReports;
|
||||
|
||||
// Uids that ConnectivityService is pending to close sockets of.
|
||||
private final Set<Integer> mPendingFrozenUids = new ArraySet<>();
|
||||
|
||||
|
|
@ -1467,6 +1470,13 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||
return DeviceConfigUtils.isTetheringFeatureEnabled(context, name);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see DeviceConfigUtils#isTetheringFeatureNotChickenedOut
|
||||
*/
|
||||
public boolean isFeatureNotChickenedOut(Context context, String name) {
|
||||
return DeviceConfigUtils.isTetheringFeatureNotChickenedOut(context, name);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the BpfNetMaps implementation to use in ConnectivityService.
|
||||
* @param netd a netd binder
|
||||
|
|
@ -1834,6 +1844,8 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||
&& mDeps.isFeatureEnabled(context, KEY_DESTROY_FROZEN_SOCKETS_VERSION);
|
||||
mDelayDestroyFrozenSockets = mDeps.isAtLeastU()
|
||||
&& mDeps.isFeatureEnabled(context, DELAY_DESTROY_FROZEN_SOCKETS_VERSION);
|
||||
mAllowSysUiConnectivityReports = mDeps.isFeatureNotChickenedOut(
|
||||
mContext, ALLOW_SYSUI_CONNECTIVITY_REPORTS);
|
||||
if (mDestroyFrozenSockets) {
|
||||
final UidFrozenStateChangedCallback frozenStateChangedCallback =
|
||||
new UidFrozenStateChangedCallback() {
|
||||
|
|
@ -3296,6 +3308,10 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||
static final String DELAY_DESTROY_FROZEN_SOCKETS_VERSION =
|
||||
"delay_destroy_frozen_sockets_version";
|
||||
|
||||
@VisibleForTesting
|
||||
public static final String ALLOW_SYSUI_CONNECTIVITY_REPORTS =
|
||||
"allow_sysui_connectivity_reports";
|
||||
|
||||
private void enforceInternetPermission() {
|
||||
mContext.enforceCallingOrSelfPermission(
|
||||
android.Manifest.permission.INTERNET,
|
||||
|
|
@ -3459,6 +3475,11 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||
NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK);
|
||||
}
|
||||
|
||||
private boolean checkSystemBarServicePermission(int pid, int uid) {
|
||||
return checkAnyPermissionOf(mContext, pid, uid,
|
||||
android.Manifest.permission.STATUS_BAR_SERVICE);
|
||||
}
|
||||
|
||||
private boolean checkNetworkSignalStrengthWakeupPermission(int pid, int uid) {
|
||||
return checkAnyPermissionOf(mContext, pid, uid,
|
||||
android.Manifest.permission.NETWORK_SIGNAL_STRENGTH_WAKEUP,
|
||||
|
|
@ -11532,6 +11553,10 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||
if (checkNetworkStackPermission(callbackPid, callbackUid)) {
|
||||
return true;
|
||||
}
|
||||
if (mAllowSysUiConnectivityReports
|
||||
&& checkSystemBarServicePermission(callbackPid, callbackUid)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// Administrator UIDs also contains the Owner UID
|
||||
final int[] administratorUids = nai.networkCapabilities.getAdministratorUids();
|
||||
|
|
|
|||
Loading…
Reference in a new issue