NetworkPolicyManager.java revision fdfef57f498e3021a34342538aef9f1c7ccbae78
1d5cdd597b895a48ffa9a8e39f8a2504cd9b905c4Jeff Sharkey/* 2d5cdd597b895a48ffa9a8e39f8a2504cd9b905c4Jeff Sharkey * Copyright (C) 2011 The Android Open Source Project 3d5cdd597b895a48ffa9a8e39f8a2504cd9b905c4Jeff Sharkey * 4d5cdd597b895a48ffa9a8e39f8a2504cd9b905c4Jeff Sharkey * Licensed under the Apache License, Version 2.0 (the "License"); 5d5cdd597b895a48ffa9a8e39f8a2504cd9b905c4Jeff Sharkey * you may not use this file except in compliance with the License. 6d5cdd597b895a48ffa9a8e39f8a2504cd9b905c4Jeff Sharkey * You may obtain a copy of the License at 7d5cdd597b895a48ffa9a8e39f8a2504cd9b905c4Jeff Sharkey * 8d5cdd597b895a48ffa9a8e39f8a2504cd9b905c4Jeff Sharkey * http://www.apache.org/licenses/LICENSE-2.0 9d5cdd597b895a48ffa9a8e39f8a2504cd9b905c4Jeff Sharkey * 10d5cdd597b895a48ffa9a8e39f8a2504cd9b905c4Jeff Sharkey * Unless required by applicable law or agreed to in writing, software 11d5cdd597b895a48ffa9a8e39f8a2504cd9b905c4Jeff Sharkey * distributed under the License is distributed on an "AS IS" BASIS, 12d5cdd597b895a48ffa9a8e39f8a2504cd9b905c4Jeff Sharkey * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d5cdd597b895a48ffa9a8e39f8a2504cd9b905c4Jeff Sharkey * See the License for the specific language governing permissions and 14d5cdd597b895a48ffa9a8e39f8a2504cd9b905c4Jeff Sharkey * limitations under the License. 15d5cdd597b895a48ffa9a8e39f8a2504cd9b905c4Jeff Sharkey */ 16d5cdd597b895a48ffa9a8e39f8a2504cd9b905c4Jeff Sharkey 17d5cdd597b895a48ffa9a8e39f8a2504cd9b905c4Jeff Sharkeypackage android.net; 18d5cdd597b895a48ffa9a8e39f8a2504cd9b905c4Jeff Sharkey 19cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkeyimport static android.text.format.Time.MONTH_DAY; 20cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey 21eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkeyimport android.content.Context; 2214711eb5b6a45b587222ae71c57a381beb7b1a7eJeff Sharkeyimport android.content.Intent; 23d5cdd597b895a48ffa9a8e39f8a2504cd9b905c4Jeff Sharkeyimport android.os.RemoteException; 24cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkeyimport android.text.format.Time; 25d5cdd597b895a48ffa9a8e39f8a2504cd9b905c4Jeff Sharkey 261b861278a2051f53ce7955fb7992fa536dc975d9Jeff Sharkeyimport java.io.PrintWriter; 271b861278a2051f53ce7955fb7992fa536dc975d9Jeff Sharkey 28d5cdd597b895a48ffa9a8e39f8a2504cd9b905c4Jeff Sharkey/** 29d5cdd597b895a48ffa9a8e39f8a2504cd9b905c4Jeff Sharkey * Manager for creating and modifying network policy rules. 30d5cdd597b895a48ffa9a8e39f8a2504cd9b905c4Jeff Sharkey * 31d5cdd597b895a48ffa9a8e39f8a2504cd9b905c4Jeff Sharkey * {@hide} 32d5cdd597b895a48ffa9a8e39f8a2504cd9b905c4Jeff Sharkey */ 33d5cdd597b895a48ffa9a8e39f8a2504cd9b905c4Jeff Sharkeypublic class NetworkPolicyManager { 34d5cdd597b895a48ffa9a8e39f8a2504cd9b905c4Jeff Sharkey 35d5cdd597b895a48ffa9a8e39f8a2504cd9b905c4Jeff Sharkey /** No specific network policy, use system default. */ 36d5cdd597b895a48ffa9a8e39f8a2504cd9b905c4Jeff Sharkey public static final int POLICY_NONE = 0x0; 37fdfef57f498e3021a34342538aef9f1c7ccbae78Jeff Sharkey /** Reject network usage on metered networks when application in background. */ 38fdfef57f498e3021a34342538aef9f1c7ccbae78Jeff Sharkey public static final int POLICY_REJECT_METERED_BACKGROUND = 0x1; 39c006f1aec15454782c35e028ad64d79a5c161cc1Jeff Sharkey 40c006f1aec15454782c35e028ad64d79a5c161cc1Jeff Sharkey /** All network traffic should be allowed. */ 41c006f1aec15454782c35e028ad64d79a5c161cc1Jeff Sharkey public static final int RULE_ALLOW_ALL = 0x0; 42fdfef57f498e3021a34342538aef9f1c7ccbae78Jeff Sharkey /** Reject traffic on metered networks. */ 43fdfef57f498e3021a34342538aef9f1c7ccbae78Jeff Sharkey public static final int RULE_REJECT_METERED = 0x1; 44d5cdd597b895a48ffa9a8e39f8a2504cd9b905c4Jeff Sharkey 4514711eb5b6a45b587222ae71c57a381beb7b1a7eJeff Sharkey /** 4614711eb5b6a45b587222ae71c57a381beb7b1a7eJeff Sharkey * {@link Intent} action launched when user selects {@link NetworkPolicy} 4714711eb5b6a45b587222ae71c57a381beb7b1a7eJeff Sharkey * warning notification. 4814711eb5b6a45b587222ae71c57a381beb7b1a7eJeff Sharkey */ 4914711eb5b6a45b587222ae71c57a381beb7b1a7eJeff Sharkey public static final String ACTION_DATA_USAGE_WARNING = 5014711eb5b6a45b587222ae71c57a381beb7b1a7eJeff Sharkey "android.intent.action.DATA_USAGE_WARNING"; 5114711eb5b6a45b587222ae71c57a381beb7b1a7eJeff Sharkey 5214711eb5b6a45b587222ae71c57a381beb7b1a7eJeff Sharkey /** 5314711eb5b6a45b587222ae71c57a381beb7b1a7eJeff Sharkey * {@link Intent} action launched when user selects {@link NetworkPolicy} 5414711eb5b6a45b587222ae71c57a381beb7b1a7eJeff Sharkey * limit notification. 5514711eb5b6a45b587222ae71c57a381beb7b1a7eJeff Sharkey */ 5614711eb5b6a45b587222ae71c57a381beb7b1a7eJeff Sharkey public static final String ACTION_DATA_USAGE_LIMIT = 5714711eb5b6a45b587222ae71c57a381beb7b1a7eJeff Sharkey "android.intent.action.DATA_USAGE_LIMIT"; 5814711eb5b6a45b587222ae71c57a381beb7b1a7eJeff Sharkey 5914711eb5b6a45b587222ae71c57a381beb7b1a7eJeff Sharkey /** 6014711eb5b6a45b587222ae71c57a381beb7b1a7eJeff Sharkey * {@link Intent} extra included in {@link #ACTION_DATA_USAGE_WARNING} and 6114711eb5b6a45b587222ae71c57a381beb7b1a7eJeff Sharkey * {@link #ACTION_DATA_USAGE_LIMIT} to indicate which 6214711eb5b6a45b587222ae71c57a381beb7b1a7eJeff Sharkey * {@link NetworkPolicy#networkTemplate} it applies to. 6314711eb5b6a45b587222ae71c57a381beb7b1a7eJeff Sharkey */ 6414711eb5b6a45b587222ae71c57a381beb7b1a7eJeff Sharkey public static final String EXTRA_NETWORK_TEMPLATE = 6514711eb5b6a45b587222ae71c57a381beb7b1a7eJeff Sharkey "android.intent.extra.NETWORK_TEMPLATE"; 6614711eb5b6a45b587222ae71c57a381beb7b1a7eJeff Sharkey 67d5cdd597b895a48ffa9a8e39f8a2504cd9b905c4Jeff Sharkey private INetworkPolicyManager mService; 68d5cdd597b895a48ffa9a8e39f8a2504cd9b905c4Jeff Sharkey 69d5cdd597b895a48ffa9a8e39f8a2504cd9b905c4Jeff Sharkey public NetworkPolicyManager(INetworkPolicyManager service) { 70d5cdd597b895a48ffa9a8e39f8a2504cd9b905c4Jeff Sharkey if (service == null) { 71d5cdd597b895a48ffa9a8e39f8a2504cd9b905c4Jeff Sharkey throw new IllegalArgumentException("missing INetworkPolicyManager"); 72d5cdd597b895a48ffa9a8e39f8a2504cd9b905c4Jeff Sharkey } 73d5cdd597b895a48ffa9a8e39f8a2504cd9b905c4Jeff Sharkey mService = service; 74d5cdd597b895a48ffa9a8e39f8a2504cd9b905c4Jeff Sharkey } 75d5cdd597b895a48ffa9a8e39f8a2504cd9b905c4Jeff Sharkey 76eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey public static NetworkPolicyManager getSystemService(Context context) { 77eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey return (NetworkPolicyManager) context.getSystemService(Context.NETWORK_POLICY_SERVICE); 78eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey } 79eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey 8021c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey /** {@hide} */ 8122c055e6424e0e9579711545d8f4800c0f796db8Jeff Sharkey public void setNetworkPolicies(NetworkPolicy[] policies) { 8221c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey try { 8322c055e6424e0e9579711545d8f4800c0f796db8Jeff Sharkey mService.setNetworkPolicies(policies); 8421c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey } catch (RemoteException e) { 8521c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey } 8621c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey } 8721c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey 8821c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey /** {@hide} */ 8922c055e6424e0e9579711545d8f4800c0f796db8Jeff Sharkey public NetworkPolicy[] getNetworkPolicies() { 9021c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey try { 9122c055e6424e0e9579711545d8f4800c0f796db8Jeff Sharkey return mService.getNetworkPolicies(); 9221c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey } catch (RemoteException e) { 9321c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey return null; 9421c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey } 9521c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey } 9621c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey 97d5cdd597b895a48ffa9a8e39f8a2504cd9b905c4Jeff Sharkey /** 98d5cdd597b895a48ffa9a8e39f8a2504cd9b905c4Jeff Sharkey * Set policy flags for specific UID. 99d5cdd597b895a48ffa9a8e39f8a2504cd9b905c4Jeff Sharkey * 100c006f1aec15454782c35e028ad64d79a5c161cc1Jeff Sharkey * @param policy {@link #POLICY_NONE} or combination of flags like 101fdfef57f498e3021a34342538aef9f1c7ccbae78Jeff Sharkey * {@link #POLICY_REJECT_METERED_BACKGROUND}. 102d5cdd597b895a48ffa9a8e39f8a2504cd9b905c4Jeff Sharkey */ 103d5cdd597b895a48ffa9a8e39f8a2504cd9b905c4Jeff Sharkey public void setUidPolicy(int uid, int policy) { 104d5cdd597b895a48ffa9a8e39f8a2504cd9b905c4Jeff Sharkey try { 105d5cdd597b895a48ffa9a8e39f8a2504cd9b905c4Jeff Sharkey mService.setUidPolicy(uid, policy); 106d5cdd597b895a48ffa9a8e39f8a2504cd9b905c4Jeff Sharkey } catch (RemoteException e) { 107d5cdd597b895a48ffa9a8e39f8a2504cd9b905c4Jeff Sharkey } 108d5cdd597b895a48ffa9a8e39f8a2504cd9b905c4Jeff Sharkey } 109d5cdd597b895a48ffa9a8e39f8a2504cd9b905c4Jeff Sharkey 110d5cdd597b895a48ffa9a8e39f8a2504cd9b905c4Jeff Sharkey public int getUidPolicy(int uid) { 111d5cdd597b895a48ffa9a8e39f8a2504cd9b905c4Jeff Sharkey try { 112d5cdd597b895a48ffa9a8e39f8a2504cd9b905c4Jeff Sharkey return mService.getUidPolicy(uid); 113d5cdd597b895a48ffa9a8e39f8a2504cd9b905c4Jeff Sharkey } catch (RemoteException e) { 114d5cdd597b895a48ffa9a8e39f8a2504cd9b905c4Jeff Sharkey return POLICY_NONE; 115d5cdd597b895a48ffa9a8e39f8a2504cd9b905c4Jeff Sharkey } 116d5cdd597b895a48ffa9a8e39f8a2504cd9b905c4Jeff Sharkey } 117cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey 1181a303953589fdddf21d88b8fa660136f5b060d0dJeff Sharkey public void registerListener(INetworkPolicyListener listener) { 1191a303953589fdddf21d88b8fa660136f5b060d0dJeff Sharkey try { 1201a303953589fdddf21d88b8fa660136f5b060d0dJeff Sharkey mService.registerListener(listener); 1211a303953589fdddf21d88b8fa660136f5b060d0dJeff Sharkey } catch (RemoteException e) { 1221a303953589fdddf21d88b8fa660136f5b060d0dJeff Sharkey } 1231a303953589fdddf21d88b8fa660136f5b060d0dJeff Sharkey } 1241a303953589fdddf21d88b8fa660136f5b060d0dJeff Sharkey 1251a303953589fdddf21d88b8fa660136f5b060d0dJeff Sharkey public void unregisterListener(INetworkPolicyListener listener) { 1261a303953589fdddf21d88b8fa660136f5b060d0dJeff Sharkey try { 1271a303953589fdddf21d88b8fa660136f5b060d0dJeff Sharkey mService.unregisterListener(listener); 1281a303953589fdddf21d88b8fa660136f5b060d0dJeff Sharkey } catch (RemoteException e) { 1291a303953589fdddf21d88b8fa660136f5b060d0dJeff Sharkey } 1301a303953589fdddf21d88b8fa660136f5b060d0dJeff Sharkey } 1311a303953589fdddf21d88b8fa660136f5b060d0dJeff Sharkey 132cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey /** 133cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey * Compute the last cycle boundary for the given {@link NetworkPolicy}. For 134cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey * example, if cycle day is 20th, and today is June 15th, it will return May 135cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey * 20th. When cycle day doesn't exist in current month, it snaps to the 1st 136cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey * of following month. 137cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey * 138cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey * @hide 139cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey */ 140cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey public static long computeLastCycleBoundary(long currentTime, NetworkPolicy policy) { 141cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey final Time now = new Time(Time.TIMEZONE_UTC); 142cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey now.set(currentTime); 143cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey 144cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey // first, find cycle boundary for current month 145cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey final Time cycle = new Time(now); 146cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey cycle.hour = cycle.minute = cycle.second = 0; 147cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey snapToCycleDay(cycle, policy.cycleDay); 148cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey 149cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey if (Time.compare(cycle, now) >= 0) { 150cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey // cycle boundary is beyond now, use last cycle boundary; start by 151cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey // pushing ourselves squarely into last month. 152cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey final Time lastMonth = new Time(now); 153cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey lastMonth.hour = lastMonth.minute = lastMonth.second = 0; 154cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey lastMonth.monthDay = 1; 155cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey lastMonth.month -= 1; 156cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey lastMonth.normalize(true); 157cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey 158cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey cycle.set(lastMonth); 159cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey snapToCycleDay(cycle, policy.cycleDay); 160cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey } 161cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey 162cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey return cycle.toMillis(true); 163cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey } 164cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey 165cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey /** {@hide} */ 166cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey public static long computeNextCycleBoundary(long currentTime, NetworkPolicy policy) { 167cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey final Time now = new Time(Time.TIMEZONE_UTC); 168cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey now.set(currentTime); 169cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey 170cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey // first, find cycle boundary for current month 171cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey final Time cycle = new Time(now); 172cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey cycle.hour = cycle.minute = cycle.second = 0; 173cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey snapToCycleDay(cycle, policy.cycleDay); 174cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey 175cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey if (Time.compare(cycle, now) <= 0) { 176cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey // cycle boundary is before now, use next cycle boundary; start by 177cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey // pushing ourselves squarely into next month. 178cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey final Time nextMonth = new Time(now); 179cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey nextMonth.hour = nextMonth.minute = nextMonth.second = 0; 180cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey nextMonth.monthDay = 1; 181cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey nextMonth.month += 1; 182cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey nextMonth.normalize(true); 183cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey 184cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey cycle.set(nextMonth); 185cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey snapToCycleDay(cycle, policy.cycleDay); 186cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey } 187cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey 188cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey return cycle.toMillis(true); 189cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey } 190cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey 191cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey /** 192cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey * Snap to the cycle day for the current month given; when cycle day doesn't 193cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey * exist, it snaps to 1st of following month. 194cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey * 195cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey * @hide 196cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey */ 197cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey public static void snapToCycleDay(Time time, int cycleDay) { 198cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey if (cycleDay > time.getActualMaximum(MONTH_DAY)) { 199cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey // cycle day isn't valid this month; snap to 1st of next month 200cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey time.month += 1; 201cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey time.monthDay = 1; 202cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey } else { 203cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey time.monthDay = cycleDay; 204cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey } 205cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey time.normalize(true); 206cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey } 207cd2ca4038a027315832c38c68be5076000bc4b53Jeff Sharkey 208497e4437af386930dff3bd55296d128bd4520959Jeff Sharkey /** 209497e4437af386930dff3bd55296d128bd4520959Jeff Sharkey * Check if given UID can have a {@link #setUidPolicy(int, int)} defined, 210497e4437af386930dff3bd55296d128bd4520959Jeff Sharkey * usually to protect critical system services. 211497e4437af386930dff3bd55296d128bd4520959Jeff Sharkey */ 212497e4437af386930dff3bd55296d128bd4520959Jeff Sharkey public static boolean isUidValidForPolicy(Context context, int uid) { 213497e4437af386930dff3bd55296d128bd4520959Jeff Sharkey return (uid >= android.os.Process.FIRST_APPLICATION_UID 214497e4437af386930dff3bd55296d128bd4520959Jeff Sharkey && uid <= android.os.Process.LAST_APPLICATION_UID); 215497e4437af386930dff3bd55296d128bd4520959Jeff Sharkey } 216497e4437af386930dff3bd55296d128bd4520959Jeff Sharkey 2171b861278a2051f53ce7955fb7992fa536dc975d9Jeff Sharkey /** {@hide} */ 2181b861278a2051f53ce7955fb7992fa536dc975d9Jeff Sharkey public static void dumpPolicy(PrintWriter fout, int policy) { 2191b861278a2051f53ce7955fb7992fa536dc975d9Jeff Sharkey fout.write("["); 220fdfef57f498e3021a34342538aef9f1c7ccbae78Jeff Sharkey if ((policy & POLICY_REJECT_METERED_BACKGROUND) != 0) { 221fdfef57f498e3021a34342538aef9f1c7ccbae78Jeff Sharkey fout.write("REJECT_METERED_BACKGROUND"); 2221b861278a2051f53ce7955fb7992fa536dc975d9Jeff Sharkey } 2231b861278a2051f53ce7955fb7992fa536dc975d9Jeff Sharkey fout.write("]"); 2241b861278a2051f53ce7955fb7992fa536dc975d9Jeff Sharkey } 2251b861278a2051f53ce7955fb7992fa536dc975d9Jeff Sharkey 2261b861278a2051f53ce7955fb7992fa536dc975d9Jeff Sharkey /** {@hide} */ 2271b861278a2051f53ce7955fb7992fa536dc975d9Jeff Sharkey public static void dumpRules(PrintWriter fout, int rules) { 2281b861278a2051f53ce7955fb7992fa536dc975d9Jeff Sharkey fout.write("["); 229fdfef57f498e3021a34342538aef9f1c7ccbae78Jeff Sharkey if ((rules & RULE_REJECT_METERED) != 0) { 230fdfef57f498e3021a34342538aef9f1c7ccbae78Jeff Sharkey fout.write("REJECT_METERED"); 2311b861278a2051f53ce7955fb7992fa536dc975d9Jeff Sharkey } 2321b861278a2051f53ce7955fb7992fa536dc975d9Jeff Sharkey fout.write("]"); 2331b861278a2051f53ce7955fb7992fa536dc975d9Jeff Sharkey } 2341b861278a2051f53ce7955fb7992fa536dc975d9Jeff Sharkey 235d5cdd597b895a48ffa9a8e39f8a2504cd9b905c4Jeff Sharkey} 236