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

Commit 724c2aa0 authored by Sudheer Shanka's avatar Sudheer Shanka
Browse files

Propagate the temp allowlist reason to NPMS.

Bug: 189291729
Test: atest ./tests/cts/hostside/src/com/android/cts/net/HostsideRestrictBackgroundNetworkTests.java
BYPASS_INCLUSIVE_LANGUAGE_REASON=Existing public API
Change-Id: I7e26eaef4fe9d7d7b4b3a1740608e0fe821537d2
parent e71b4d16
Loading
Loading
Loading
Loading
+18 −9
Original line number Diff line number Diff line
@@ -1536,13 +1536,14 @@ public class DeviceIdleController extends SystemService
    @VisibleForTesting
    static final int MSG_REPORT_STATIONARY_STATUS = 7;
    private static final int MSG_FINISH_IDLE_OP = 8;
    private static final int MSG_REPORT_TEMP_APP_WHITELIST_CHANGED_TO_NPMS = 9;
    private static final int MSG_SEND_CONSTRAINT_MONITORING = 10;
    @VisibleForTesting
    static final int MSG_UPDATE_PRE_IDLE_TIMEOUT_FACTOR = 11;
    @VisibleForTesting
    static final int MSG_RESET_PRE_IDLE_TIMEOUT_FACTOR = 12;
    private static final int MSG_REPORT_TEMP_APP_WHITELIST_CHANGED = 13;
    private static final int MSG_REPORT_TEMP_APP_WHITELIST_ADDED_TO_NPMS = 14;
    private static final int MSG_REPORT_TEMP_APP_WHITELIST_REMOVED_TO_NPMS = 15;

    final class MyHandler extends Handler {
        MyHandler(Looper looper) {
@@ -1659,10 +1660,17 @@ public class DeviceIdleController extends SystemService
                        }
                    }
                } break;
                case MSG_REPORT_TEMP_APP_WHITELIST_CHANGED_TO_NPMS: {
                case MSG_REPORT_TEMP_APP_WHITELIST_ADDED_TO_NPMS: {
                    final int appId = msg.arg1;
                    final boolean added = (msg.arg2 == 1);
                    mNetworkPolicyManagerInternal.onTempPowerSaveWhitelistChange(appId, added);
                    final int reasonCode = msg.arg2;
                    final String reason = (String) msg.obj;
                    mNetworkPolicyManagerInternal.onTempPowerSaveWhitelistChange(appId, true,
                            reasonCode, reason);
                } break;
                case MSG_REPORT_TEMP_APP_WHITELIST_REMOVED_TO_NPMS: {
                    final int appId = msg.arg1;
                    mNetworkPolicyManagerInternal.onTempPowerSaveWhitelistChange(appId, false,
                            REASON_UNKNOWN, /* reason= */ null);
                } break;
                case MSG_SEND_CONSTRAINT_MONITORING: {
                    final IDeviceIdleConstraint constraint = (IDeviceIdleConstraint) msg.obj;
@@ -2811,14 +2819,15 @@ public class DeviceIdleController extends SystemService
                    // NPMS needs to update its state synchronously in certain situations so we
                    // can't have it use the TempAllowlistChangeListener path right now.
                    // TODO: see if there's a way to simplify/consolidate
                    mHandler.obtainMessage(MSG_REPORT_TEMP_APP_WHITELIST_CHANGED_TO_NPMS, appId, 1)
                            .sendToTarget();
                    mHandler.obtainMessage(MSG_REPORT_TEMP_APP_WHITELIST_ADDED_TO_NPMS, appId,
                            reasonCode, reason).sendToTarget();
                }
                reportTempWhitelistChangedLocked(uid, true);
            }
        }
        if (informWhitelistChanged) {
            mNetworkPolicyManagerInternal.onTempPowerSaveWhitelistChange(appId, true);
            mNetworkPolicyManagerInternal.onTempPowerSaveWhitelistChange(appId, true,
                    reasonCode, reason);
        }
    }

@@ -2890,8 +2899,8 @@ public class DeviceIdleController extends SystemService
        final int appId = UserHandle.getAppId(uid);
        updateTempWhitelistAppIdsLocked(uid, false, 0, 0, REASON_UNKNOWN,
                reason, INVALID_UID);
        mHandler.obtainMessage(MSG_REPORT_TEMP_APP_WHITELIST_CHANGED_TO_NPMS, appId, 0)
                .sendToTarget();
        mHandler.obtainMessage(MSG_REPORT_TEMP_APP_WHITELIST_REMOVED_TO_NPMS, appId,
                /* unused= */ 0).sendToTarget();
        reportTempWhitelistChangedLocked(uid, false);
        try {
            mBatteryStats.noteEvent(BatteryStats.HistoryItem.EVENT_TEMP_WHITELIST_FINISH,
+14 −8
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ import static android.net.NetworkPolicyManager.FIREWALL_CHAIN_NAME_POWERSAVE;
import static android.net.NetworkPolicyManager.FIREWALL_CHAIN_NAME_RESTRICTED;
import static android.net.NetworkPolicyManager.FIREWALL_CHAIN_NAME_STANDBY;
import static android.net.NetworkPolicyManager.FIREWALL_RULE_DEFAULT;
import static android.os.PowerExemptionManager.reasonCodeToString;
import static android.os.Process.INVALID_UID;

import android.app.ActivityManager;
@@ -192,13 +193,12 @@ public class NetworkPolicyLogger {
        }
    }

    void tempPowerSaveWlChanged(int appId, boolean added) {
    void tempPowerSaveWlChanged(int appId, boolean added, int reasonCode, String reason) {
        synchronized (mLock) {
            if (LOGV || appId == UserHandle.getAppId(mDebugUid)) {
                Slog.v(TAG,
                        getTempPowerSaveWlChangedLog(appId, added));
                Slog.v(TAG, getTempPowerSaveWlChangedLog(appId, added, reasonCode, reason));
            }
            mEventsBuffer.tempPowerSaveWlChanged(appId, added);
            mEventsBuffer.tempPowerSaveWlChanged(appId, added, reasonCode, reason);
        }
    }

@@ -326,8 +326,10 @@ public class NetworkPolicyLogger {
        return "Parole state: " + paroleOn;
    }

    private static String getTempPowerSaveWlChangedLog(int appId, boolean added) {
        return "temp-power-save whitelist for " + appId + " changed to: " + added;
    private static String getTempPowerSaveWlChangedLog(int appId, boolean added,
            int reasonCode, String reason) {
        return "temp-power-save whitelist for " + appId + " changed to: " + added
                + "; reason=" + reasonCodeToString(reasonCode) + " <" + reason + ">";
    }

    private static String getUidFirewallRuleChangedLog(int chain, int uid, int rule) {
@@ -497,14 +499,17 @@ public class NetworkPolicyLogger {
            data.timeStamp = System.currentTimeMillis();
        }

        public void tempPowerSaveWlChanged(int appId, boolean added) {
        public void tempPowerSaveWlChanged(int appId, boolean added,
                int reasonCode, String reason) {
            final Data data = getNextSlot();
            if (data == null) return;

            data.reset();
            data.type = EVENT_TEMP_POWER_SAVE_WL_CHANGED;
            data.ifield1 = appId;
            data.ifield2 = reasonCode;
            data.bfield1 = added;
            data.sfield1 = reason;
            data.timeStamp = System.currentTimeMillis();
        }

@@ -571,7 +576,8 @@ public class NetworkPolicyLogger {
                case EVENT_PAROLE_STATE_CHANGED:
                    return getParoleStateChanged(data.bfield1);
                case EVENT_TEMP_POWER_SAVE_WL_CHANGED:
                    return getTempPowerSaveWlChangedLog(data.ifield1, data.bfield1);
                    return getTempPowerSaveWlChangedLog(data.ifield1, data.bfield1,
                            data.ifield2, data.sfield1);
                case EVENT_UID_FIREWALL_RULE_CHANGED:
                    return getUidFirewallRuleChangedLog(data.ifield1, data.ifield2, data.ifield3);
                case EVENT_FIREWALL_CHAIN_ENABLED:
+8 −2
Original line number Diff line number Diff line
@@ -17,9 +17,11 @@
package com.android.server.net;

import android.annotation.NonNull;
import android.annotation.Nullable;
import android.net.Network;
import android.net.NetworkTemplate;
import android.net.netstats.provider.NetworkStatsProvider;
import android.os.PowerExemptionManager.ReasonCode;
import android.telephony.SubscriptionPlan;

import java.util.Set;
@@ -41,9 +43,13 @@ public abstract class NetworkPolicyManagerInternal {
     * that network rules for that appId can be updated.
     *
     * @param appId The appId which has been updated in the allowlist.
     * @param added Denotes whether the {@param appId} has been added or removed from the allowlist.
     * @param added Denotes whether the {@code appId} has been added or removed from the allowlist.
     * @param reasonCode one of {@link ReasonCode} indicating the reason for the change.
     *                   Only valid when {@code added} is {@code true}.
     * @param reason an optional human-readable reason explaining why the app is temp allow-listed.
     */
    public abstract void onTempPowerSaveWhitelistChange(int appId, boolean added);
    public abstract void onTempPowerSaveWhitelistChange(int appId, boolean added,
            @ReasonCode int reasonCode, @Nullable String reason);

    /**
     * Return the active {@link SubscriptionPlan} for the given network.
+4 −2
Original line number Diff line number Diff line
@@ -211,6 +211,7 @@ import android.os.Message;
import android.os.MessageQueue.IdleHandler;
import android.os.ParcelFileDescriptor;
import android.os.PersistableBundle;
import android.os.PowerExemptionManager.ReasonCode;
import android.os.PowerManager;
import android.os.PowerManager.ServiceType;
import android.os.PowerManagerInternal;
@@ -5743,12 +5744,13 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
        }

        @Override
        public void onTempPowerSaveWhitelistChange(int appId, boolean added) {
        public void onTempPowerSaveWhitelistChange(int appId, boolean added,
                @ReasonCode int reasonCode, @Nullable String reason) {
            synchronized (mUidRulesFirstLock) {
                if (!mSystemReady) {
                    return;
                }
                mLogger.tempPowerSaveWlChanged(appId, added);
                mLogger.tempPowerSaveWlChanged(appId, added, reasonCode, reason);
                if (added) {
                    mPowerSaveTempWhitelistAppIds.put(appId, true);
                } else {