Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 72e61c83 authored by Sudheer Shanka's avatar Sudheer Shanka Committed by Automerger Merge Worker
Browse files

Include blocked reasons in the netpolicy dump. am: 6a0976aa

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1902410

Change-Id: Icbe093e03734b0e560497112b72e11c238ad8824
parents 1baad423 6a0976aa
Loading
Loading
Loading
Loading
+133 −1
Original line number Diff line number Diff line
@@ -3826,6 +3826,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
                final SparseBooleanArray knownUids = new SparseBooleanArray();
                collectKeys(mUidState, knownUids);
                collectKeys(mUidRules, knownUids);
                collectKeys(mUidBlockedState, knownUids);

                fout.println("Status for all known UIDs:");
                fout.increaseIndent();
@@ -3846,6 +3847,14 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
                    final int uidRules = mUidRules.get(uid, RULE_NONE);
                    fout.print(" rules=");
                    fout.print(uidRulesToString(uidRules));

                    final UidBlockedState uidBlockedState = mUidBlockedState.get(uid);
                    if (uidBlockedState == null) {
                        fout.print(" blocked_state={null}");
                    } else {
                        fout.print(" blocked_state=");
                        fout.print(uidBlockedState.toString());
                    }
                    fout.println();
                }
                fout.decreaseIndent();
@@ -4555,6 +4564,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
    private void onUidDeletedUL(int uid) {
        // First cleanup in-memory state synchronously...
        mUidRules.delete(uid);
        mUidBlockedState.delete(uid);
        mUidPolicy.delete(uid);
        mUidFirewallStandbyRules.delete(uid);
        mUidFirewallDozableRules.delete(uid);
@@ -5605,7 +5615,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
        }
    }

    private static void collectKeys(SparseArray<UidState> source, SparseBooleanArray target) {
    private static <T> void collectKeys(SparseArray<T> source, SparseBooleanArray target) {
        final int size = source.size();
        for (int i = 0; i < size; i++) {
            target.put(source.keyAt(i), true);
@@ -6008,6 +6018,128 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
            }
            return effectiveBlockedReasons;
        }

        @Override
        public String toString() {
            final StringBuilder sb = new StringBuilder();
            sb.append("{");
            sb.append("blocked=").append(blockedReasonsToString(blockedReasons)).append(",");
            sb.append("allowed=").append(allowedReasonsToString(allowedReasons)).append(",");
            sb.append("effective=").append(blockedReasonsToString(effectiveBlockedReasons));
            sb.append("}");
            return sb.toString();
        }

        private static final int[] BLOCKED_REASONS = {
                BLOCKED_REASON_BATTERY_SAVER,
                BLOCKED_REASON_DOZE,
                BLOCKED_REASON_APP_STANDBY,
                BLOCKED_REASON_RESTRICTED_MODE,
                BLOCKED_METERED_REASON_DATA_SAVER,
                BLOCKED_METERED_REASON_USER_RESTRICTED,
                BLOCKED_METERED_REASON_ADMIN_DISABLED,
        };

        private static final int[] ALLOWED_REASONS = {
                ALLOWED_REASON_SYSTEM,
                ALLOWED_REASON_FOREGROUND,
                ALLOWED_REASON_POWER_SAVE_ALLOWLIST,
                ALLOWED_REASON_POWER_SAVE_EXCEPT_IDLE_ALLOWLIST,
                ALLOWED_REASON_RESTRICTED_MODE_PERMISSIONS,
                ALLOWED_METERED_REASON_USER_EXEMPTED,
                ALLOWED_METERED_REASON_SYSTEM,
                ALLOWED_METERED_REASON_FOREGROUND,
        };

        private static String blockedReasonToString(int blockedReason) {
            switch (blockedReason) {
                case BLOCKED_REASON_NONE:
                    return "NONE";
                case BLOCKED_REASON_BATTERY_SAVER:
                    return "BATTERY_SAVER";
                case BLOCKED_REASON_DOZE:
                    return "DOZE";
                case BLOCKED_REASON_APP_STANDBY:
                    return "APP_STANDBY";
                case BLOCKED_REASON_RESTRICTED_MODE:
                    return "RESTRICTED_MODE";
                case BLOCKED_METERED_REASON_DATA_SAVER:
                    return "DATA_SAVER";
                case BLOCKED_METERED_REASON_USER_RESTRICTED:
                    return "METERED_USER_RESTRICTED";
                case BLOCKED_METERED_REASON_ADMIN_DISABLED:
                    return "METERED_ADMIN_DISABLED";
                default:
                    Slog.wtfStack(TAG, "Unknown blockedReason: " + blockedReason);
                    return String.valueOf(blockedReason);
            }
        }

        private static String allowedReasonToString(int allowedReason) {
            switch (allowedReason) {
                case ALLOWED_REASON_NONE:
                    return "NONE";
                case ALLOWED_REASON_SYSTEM:
                    return "SYSTEM";
                case ALLOWED_REASON_FOREGROUND:
                    return "FOREGROUND";
                case ALLOWED_REASON_POWER_SAVE_ALLOWLIST:
                    return "POWER_SAVE_ALLOWLIST";
                case ALLOWED_REASON_POWER_SAVE_EXCEPT_IDLE_ALLOWLIST:
                    return "POWER_SAVE_EXCEPT_IDLE_ALLOWLIST";
                case ALLOWED_REASON_RESTRICTED_MODE_PERMISSIONS:
                    return "RESTRICTED_MODE_PERMISSIONS";
                case ALLOWED_METERED_REASON_USER_EXEMPTED:
                    return "METERED_USER_EXEMPTED";
                case ALLOWED_METERED_REASON_SYSTEM:
                    return "METERED_SYSTEM";
                case ALLOWED_METERED_REASON_FOREGROUND:
                    return "METERED_FOREGROUND";
                default:
                    Slog.wtfStack(TAG, "Unknown allowedReason: " + allowedReason);
                    return String.valueOf(allowedReason);
            }
        }

        private static String blockedReasonsToString(int blockedReasons) {
            if (blockedReasons == BLOCKED_REASON_NONE) {
                return blockedReasonToString(BLOCKED_REASON_NONE);
            }
            final StringBuilder sb = new StringBuilder();
            for (int reason : BLOCKED_REASONS) {
                if ((blockedReasons & reason) != 0) {
                    sb.append(sb.length() == 0 ? "" : "|");
                    sb.append(blockedReasonToString(reason));
                    blockedReasons &= ~reason;
                }
            }
            if (blockedReasons != 0) {
                sb.append(sb.length() == 0 ? "" : "|");
                sb.append(String.valueOf(blockedReasons));
                Slog.wtfStack(TAG, "Unknown blockedReasons: " + blockedReasons);
            }
            return sb.toString();
        }

        private static String allowedReasonsToString(int allowedReasons) {
            if (allowedReasons == ALLOWED_REASON_NONE) {
                return allowedReasonToString(ALLOWED_REASON_NONE);
            }
            final StringBuilder sb = new StringBuilder();
            for (int reason : ALLOWED_REASONS) {
                if ((allowedReasons & reason) != 0) {
                    sb.append(sb.length() == 0 ? "" : "|");
                    sb.append(allowedReasonToString(reason));
                    allowedReasons &= ~reason;
                }
            }
            if (allowedReasons != 0) {
                sb.append(sb.length() == 0 ? "" : "|");
                sb.append(String.valueOf(allowedReasons));
                Slog.wtfStack(TAG, "Unknown allowedReasons: " + allowedReasons);
            }
            return sb.toString();
        }
    }

    private class NotificationId {