Loading services/core/java/com/android/server/DeviceIdleController.java +19 −26 Original line number Diff line number Diff line Loading @@ -85,6 +85,7 @@ import com.android.internal.util.DumpUtils; import com.android.internal.util.FastXmlSerializer; import com.android.internal.util.XmlUtils; import com.android.server.am.BatteryStatsService; import com.android.server.net.NetworkPolicyManagerInternal; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; Loading Loading @@ -303,10 +304,7 @@ public class DeviceIdleController extends SystemService private final SparseArray<Pair<MutableLong, String>> mTempWhitelistAppIdEndTimes = new SparseArray<>(); /** * Callback to the NetworkPolicyManagerService to tell it that the temp whitelist has changed. */ Runnable mNetworkPolicyTempWhitelistCallback; private NetworkPolicyManagerInternal mNetworkPolicyManagerInternal; /** * Current app IDs of temporarily whitelist apps for high-priority messages. Loading Loading @@ -1018,6 +1016,7 @@ public class DeviceIdleController extends SystemService private static final int MSG_TEMP_APP_WHITELIST_TIMEOUT = 6; private static final int MSG_REPORT_MAINTENANCE_ACTIVITY = 7; private static final int MSG_FINISH_IDLE_OP = 8; private static final int MSG_REPORT_TEMP_APP_WHITELIST_CHANGED = 9; final class MyHandler extends Handler { MyHandler(Looper looper) { Loading Loading @@ -1133,6 +1132,11 @@ public class DeviceIdleController extends SystemService // mActiveIdleWakeLock is held at this point decActiveIdleOps(); } break; case MSG_REPORT_TEMP_APP_WHITELIST_CHANGED: { final int appId = msg.arg1; final boolean added = (msg.arg2 == 1); mNetworkPolicyManagerInternal.onTempPowerSaveWhitelistChange(appId, added); } break; } } } Loading Loading @@ -1283,10 +1287,6 @@ public class DeviceIdleController extends SystemService return mConstants.NOTIFICATION_WHITELIST_DURATION; } public void setNetworkPolicyTempWhitelistCallback(Runnable callback) { setNetworkPolicyTempWhitelistCallbackInternal(callback); } public void setJobsActive(boolean active) { DeviceIdleController.this.setJobsActive(active); } Loading Loading @@ -1411,6 +1411,7 @@ public class DeviceIdleController extends SystemService mLocalAlarmManager = getLocalService(AlarmManagerService.LocalService.class); mNetworkPolicyManager = INetworkPolicyManager.Stub.asInterface( ServiceManager.getService(Context.NETWORK_POLICY_SERVICE)); mNetworkPolicyManagerInternal = getLocalService(NetworkPolicyManagerInternal.class); mDisplayManager = (DisplayManager) getContext().getSystemService( Context.DISPLAY_SERVICE); mSensorManager = (SensorManager) getContext().getSystemService(Context.SENSOR_SERVICE); Loading Loading @@ -1699,7 +1700,7 @@ public class DeviceIdleController extends SystemService void addPowerSaveTempWhitelistAppDirectInternal(int callingUid, int appId, long duration, boolean sync, String reason) { final long timeNow = SystemClock.elapsedRealtime(); Runnable networkPolicyTempWhitelistCallback = null; boolean informWhitelistChanged = false; synchronized (this) { int callingAppId = UserHandle.getAppId(callingUid); if (callingAppId >= Process.FIRST_APPLICATION_UID) { Loading Loading @@ -1729,24 +1730,17 @@ public class DeviceIdleController extends SystemService } postTempActiveTimeoutMessage(appId, duration); updateTempWhitelistAppIdsLocked(appId, true); if (mNetworkPolicyTempWhitelistCallback != null) { if (!sync) { mHandler.post(mNetworkPolicyTempWhitelistCallback); if (sync) { informWhitelistChanged = true; } else { networkPolicyTempWhitelistCallback = mNetworkPolicyTempWhitelistCallback; } mHandler.obtainMessage(MSG_REPORT_TEMP_APP_WHITELIST_CHANGED, appId, 1) .sendToTarget(); } reportTempWhitelistChangedLocked(); } } if (networkPolicyTempWhitelistCallback != null) { networkPolicyTempWhitelistCallback.run(); } } public void setNetworkPolicyTempWhitelistCallbackInternal(Runnable callback) { synchronized (this) { mNetworkPolicyTempWhitelistCallback = callback; if (informWhitelistChanged) { mNetworkPolicyManagerInternal.onTempPowerSaveWhitelistChange(appId, true); } } Loading Loading @@ -1775,9 +1769,8 @@ public class DeviceIdleController extends SystemService Slog.d(TAG, "Removing UID " + uid + " from temp whitelist"); } updateTempWhitelistAppIdsLocked(uid, false); if (mNetworkPolicyTempWhitelistCallback != null) { mHandler.post(mNetworkPolicyTempWhitelistCallback); } mHandler.obtainMessage(MSG_REPORT_TEMP_APP_WHITELIST_CHANGED, uid, 0) .sendToTarget(); reportTempWhitelistChangedLocked(); try { mBatteryStats.noteEvent(BatteryStats.HistoryItem.EVENT_TEMP_WHITELIST_FINISH, Loading services/core/java/com/android/server/net/NetworkPolicyManagerInternal.java +9 −0 Original line number Diff line number Diff line Loading @@ -38,4 +38,13 @@ public abstract class NetworkPolicyManagerInternal { * to current networking policies. */ public abstract boolean isUidNetworkingBlocked(int uid, String ifname); /** * Informs that an appId has been added or removed from the temp-powersave-whitelist so that * that network rules for that appId can be updated. * * @param appId The appId which has been updated in the whitelist. * @param added Denotes whether the {@param appId} has been added or removed from the whitelist. */ public abstract void onTempPowerSaveWhitelistChange(int appId, boolean added); } services/core/java/com/android/server/net/NetworkPolicyManagerService.java +22 −58 Original line number Diff line number Diff line Loading @@ -183,7 +183,6 @@ import com.android.internal.util.DumpUtils; import com.android.internal.util.FastXmlSerializer; import com.android.internal.util.IndentingPrintWriter; import com.android.internal.util.Preconditions; import com.android.server.DeviceIdleController; import com.android.server.EventLogTags; import com.android.server.LocalServices; import com.android.server.ServiceThread; Loading Loading @@ -607,36 +606,6 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { return changed; } void updatePowerSaveTempWhitelistUL() { try { // Clear the states of the current whitelist final int N = mPowerSaveTempWhitelistAppIds.size(); for (int i = 0; i < N; i++) { mPowerSaveTempWhitelistAppIds.setValueAt(i, false); } // Update the states with the new whitelist final int[] whitelist = mDeviceIdleController.getAppIdTempWhitelist(); if (whitelist != null) { for (int uid : whitelist) { mPowerSaveTempWhitelistAppIds.put(uid, true); } } } catch (RemoteException e) { } } /** * Remove unnecessary entries in the temp whitelist */ void purgePowerSaveTempWhitelistUL() { final int N = mPowerSaveTempWhitelistAppIds.size(); for (int i = N - 1; i >= 0; i--) { if (mPowerSaveTempWhitelistAppIds.valueAt(i) == false) { mPowerSaveTempWhitelistAppIds.removeAt(i); } } } private void initService(CountDownLatch initCompleteSignal) { Trace.traceBegin(Trace.TRACE_TAG_NETWORK, "systemReady"); final int oldPriority = Process.getThreadPriority(Process.myTid()); Loading Loading @@ -734,10 +703,6 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { PowerManager.ACTION_POWER_SAVE_WHITELIST_CHANGED); mContext.registerReceiver(mPowerSaveWhitelistReceiver, whitelistFilter, null, mHandler); DeviceIdleController.LocalService deviceIdleService = LocalServices.getService(DeviceIdleController.LocalService.class); deviceIdleService.setNetworkPolicyTempWhitelistCallback(mTempPowerSaveChangedCallback); // watch for network interfaces to be claimed final IntentFilter connFilter = new IntentFilter(CONNECTIVITY_ACTION); mContext.registerReceiver(mConnReceiver, connFilter, CONNECTIVITY_INTERNAL, mHandler); Loading Loading @@ -842,17 +807,6 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { } }; final private Runnable mTempPowerSaveChangedCallback = new Runnable() { @Override public void run() { synchronized (mUidRulesFirstLock) { updatePowerSaveTempWhitelistUL(); updateRulesForTempWhitelistChangeUL(); purgePowerSaveTempWhitelistUL(); } } }; final private BroadcastReceiver mPackageReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { Loading Loading @@ -3395,12 +3349,11 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { } } private void updateRulesForTempWhitelistChangeUL() { private void updateRulesForTempWhitelistChangeUL(int appId) { final List<UserInfo> users = mUserManager.getUsers(); for (int i = 0; i < users.size(); i++) { final int numUsers = users.size(); for (int i = 0; i < numUsers; i++) { final UserInfo user = users.get(i); for (int j = mPowerSaveTempWhitelistAppIds.size() - 1; j >= 0; j--) { int appId = mPowerSaveTempWhitelistAppIds.keyAt(j); int uid = UserHandle.getUid(user.id, appId); // Update external firewall rules. updateRuleForAppIdleUL(uid); Loading @@ -3410,7 +3363,6 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { updateRulesForPowerRestrictionsUL(uid); } } } // TODO: the MEDIA / DRM restriction might not be needed anymore, in which case both // methods below could be merged into a isUidValidForRules() method. Loading Loading @@ -4389,6 +4341,18 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { if (LOGV) logUidStatus(uid, "allowed by default"); return false; } @Override public void onTempPowerSaveWhitelistChange(int appId, boolean added) { synchronized (mUidRulesFirstLock) { if (added) { mPowerSaveTempWhitelistAppIds.put(appId, true); } else { mPowerSaveTempWhitelistAppIds.delete(appId); } updateRulesForTempWhitelistChangeUL(appId); } } } private static boolean hasRule(int uidRules, int rule) { Loading Loading
services/core/java/com/android/server/DeviceIdleController.java +19 −26 Original line number Diff line number Diff line Loading @@ -85,6 +85,7 @@ import com.android.internal.util.DumpUtils; import com.android.internal.util.FastXmlSerializer; import com.android.internal.util.XmlUtils; import com.android.server.am.BatteryStatsService; import com.android.server.net.NetworkPolicyManagerInternal; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; Loading Loading @@ -303,10 +304,7 @@ public class DeviceIdleController extends SystemService private final SparseArray<Pair<MutableLong, String>> mTempWhitelistAppIdEndTimes = new SparseArray<>(); /** * Callback to the NetworkPolicyManagerService to tell it that the temp whitelist has changed. */ Runnable mNetworkPolicyTempWhitelistCallback; private NetworkPolicyManagerInternal mNetworkPolicyManagerInternal; /** * Current app IDs of temporarily whitelist apps for high-priority messages. Loading Loading @@ -1018,6 +1016,7 @@ public class DeviceIdleController extends SystemService private static final int MSG_TEMP_APP_WHITELIST_TIMEOUT = 6; private static final int MSG_REPORT_MAINTENANCE_ACTIVITY = 7; private static final int MSG_FINISH_IDLE_OP = 8; private static final int MSG_REPORT_TEMP_APP_WHITELIST_CHANGED = 9; final class MyHandler extends Handler { MyHandler(Looper looper) { Loading Loading @@ -1133,6 +1132,11 @@ public class DeviceIdleController extends SystemService // mActiveIdleWakeLock is held at this point decActiveIdleOps(); } break; case MSG_REPORT_TEMP_APP_WHITELIST_CHANGED: { final int appId = msg.arg1; final boolean added = (msg.arg2 == 1); mNetworkPolicyManagerInternal.onTempPowerSaveWhitelistChange(appId, added); } break; } } } Loading Loading @@ -1283,10 +1287,6 @@ public class DeviceIdleController extends SystemService return mConstants.NOTIFICATION_WHITELIST_DURATION; } public void setNetworkPolicyTempWhitelistCallback(Runnable callback) { setNetworkPolicyTempWhitelistCallbackInternal(callback); } public void setJobsActive(boolean active) { DeviceIdleController.this.setJobsActive(active); } Loading Loading @@ -1411,6 +1411,7 @@ public class DeviceIdleController extends SystemService mLocalAlarmManager = getLocalService(AlarmManagerService.LocalService.class); mNetworkPolicyManager = INetworkPolicyManager.Stub.asInterface( ServiceManager.getService(Context.NETWORK_POLICY_SERVICE)); mNetworkPolicyManagerInternal = getLocalService(NetworkPolicyManagerInternal.class); mDisplayManager = (DisplayManager) getContext().getSystemService( Context.DISPLAY_SERVICE); mSensorManager = (SensorManager) getContext().getSystemService(Context.SENSOR_SERVICE); Loading Loading @@ -1699,7 +1700,7 @@ public class DeviceIdleController extends SystemService void addPowerSaveTempWhitelistAppDirectInternal(int callingUid, int appId, long duration, boolean sync, String reason) { final long timeNow = SystemClock.elapsedRealtime(); Runnable networkPolicyTempWhitelistCallback = null; boolean informWhitelistChanged = false; synchronized (this) { int callingAppId = UserHandle.getAppId(callingUid); if (callingAppId >= Process.FIRST_APPLICATION_UID) { Loading Loading @@ -1729,24 +1730,17 @@ public class DeviceIdleController extends SystemService } postTempActiveTimeoutMessage(appId, duration); updateTempWhitelistAppIdsLocked(appId, true); if (mNetworkPolicyTempWhitelistCallback != null) { if (!sync) { mHandler.post(mNetworkPolicyTempWhitelistCallback); if (sync) { informWhitelistChanged = true; } else { networkPolicyTempWhitelistCallback = mNetworkPolicyTempWhitelistCallback; } mHandler.obtainMessage(MSG_REPORT_TEMP_APP_WHITELIST_CHANGED, appId, 1) .sendToTarget(); } reportTempWhitelistChangedLocked(); } } if (networkPolicyTempWhitelistCallback != null) { networkPolicyTempWhitelistCallback.run(); } } public void setNetworkPolicyTempWhitelistCallbackInternal(Runnable callback) { synchronized (this) { mNetworkPolicyTempWhitelistCallback = callback; if (informWhitelistChanged) { mNetworkPolicyManagerInternal.onTempPowerSaveWhitelistChange(appId, true); } } Loading Loading @@ -1775,9 +1769,8 @@ public class DeviceIdleController extends SystemService Slog.d(TAG, "Removing UID " + uid + " from temp whitelist"); } updateTempWhitelistAppIdsLocked(uid, false); if (mNetworkPolicyTempWhitelistCallback != null) { mHandler.post(mNetworkPolicyTempWhitelistCallback); } mHandler.obtainMessage(MSG_REPORT_TEMP_APP_WHITELIST_CHANGED, uid, 0) .sendToTarget(); reportTempWhitelistChangedLocked(); try { mBatteryStats.noteEvent(BatteryStats.HistoryItem.EVENT_TEMP_WHITELIST_FINISH, Loading
services/core/java/com/android/server/net/NetworkPolicyManagerInternal.java +9 −0 Original line number Diff line number Diff line Loading @@ -38,4 +38,13 @@ public abstract class NetworkPolicyManagerInternal { * to current networking policies. */ public abstract boolean isUidNetworkingBlocked(int uid, String ifname); /** * Informs that an appId has been added or removed from the temp-powersave-whitelist so that * that network rules for that appId can be updated. * * @param appId The appId which has been updated in the whitelist. * @param added Denotes whether the {@param appId} has been added or removed from the whitelist. */ public abstract void onTempPowerSaveWhitelistChange(int appId, boolean added); }
services/core/java/com/android/server/net/NetworkPolicyManagerService.java +22 −58 Original line number Diff line number Diff line Loading @@ -183,7 +183,6 @@ import com.android.internal.util.DumpUtils; import com.android.internal.util.FastXmlSerializer; import com.android.internal.util.IndentingPrintWriter; import com.android.internal.util.Preconditions; import com.android.server.DeviceIdleController; import com.android.server.EventLogTags; import com.android.server.LocalServices; import com.android.server.ServiceThread; Loading Loading @@ -607,36 +606,6 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { return changed; } void updatePowerSaveTempWhitelistUL() { try { // Clear the states of the current whitelist final int N = mPowerSaveTempWhitelistAppIds.size(); for (int i = 0; i < N; i++) { mPowerSaveTempWhitelistAppIds.setValueAt(i, false); } // Update the states with the new whitelist final int[] whitelist = mDeviceIdleController.getAppIdTempWhitelist(); if (whitelist != null) { for (int uid : whitelist) { mPowerSaveTempWhitelistAppIds.put(uid, true); } } } catch (RemoteException e) { } } /** * Remove unnecessary entries in the temp whitelist */ void purgePowerSaveTempWhitelistUL() { final int N = mPowerSaveTempWhitelistAppIds.size(); for (int i = N - 1; i >= 0; i--) { if (mPowerSaveTempWhitelistAppIds.valueAt(i) == false) { mPowerSaveTempWhitelistAppIds.removeAt(i); } } } private void initService(CountDownLatch initCompleteSignal) { Trace.traceBegin(Trace.TRACE_TAG_NETWORK, "systemReady"); final int oldPriority = Process.getThreadPriority(Process.myTid()); Loading Loading @@ -734,10 +703,6 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { PowerManager.ACTION_POWER_SAVE_WHITELIST_CHANGED); mContext.registerReceiver(mPowerSaveWhitelistReceiver, whitelistFilter, null, mHandler); DeviceIdleController.LocalService deviceIdleService = LocalServices.getService(DeviceIdleController.LocalService.class); deviceIdleService.setNetworkPolicyTempWhitelistCallback(mTempPowerSaveChangedCallback); // watch for network interfaces to be claimed final IntentFilter connFilter = new IntentFilter(CONNECTIVITY_ACTION); mContext.registerReceiver(mConnReceiver, connFilter, CONNECTIVITY_INTERNAL, mHandler); Loading Loading @@ -842,17 +807,6 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { } }; final private Runnable mTempPowerSaveChangedCallback = new Runnable() { @Override public void run() { synchronized (mUidRulesFirstLock) { updatePowerSaveTempWhitelistUL(); updateRulesForTempWhitelistChangeUL(); purgePowerSaveTempWhitelistUL(); } } }; final private BroadcastReceiver mPackageReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { Loading Loading @@ -3395,12 +3349,11 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { } } private void updateRulesForTempWhitelistChangeUL() { private void updateRulesForTempWhitelistChangeUL(int appId) { final List<UserInfo> users = mUserManager.getUsers(); for (int i = 0; i < users.size(); i++) { final int numUsers = users.size(); for (int i = 0; i < numUsers; i++) { final UserInfo user = users.get(i); for (int j = mPowerSaveTempWhitelistAppIds.size() - 1; j >= 0; j--) { int appId = mPowerSaveTempWhitelistAppIds.keyAt(j); int uid = UserHandle.getUid(user.id, appId); // Update external firewall rules. updateRuleForAppIdleUL(uid); Loading @@ -3410,7 +3363,6 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { updateRulesForPowerRestrictionsUL(uid); } } } // TODO: the MEDIA / DRM restriction might not be needed anymore, in which case both // methods below could be merged into a isUidValidForRules() method. Loading Loading @@ -4389,6 +4341,18 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { if (LOGV) logUidStatus(uid, "allowed by default"); return false; } @Override public void onTempPowerSaveWhitelistChange(int appId, boolean added) { synchronized (mUidRulesFirstLock) { if (added) { mPowerSaveTempWhitelistAppIds.put(appId, true); } else { mPowerSaveTempWhitelistAppIds.delete(appId); } updateRulesForTempWhitelistChangeUL(appId); } } } private static boolean hasRule(int uidRules, int rule) { Loading