summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--api/current.txt2
-rw-r--r--core/java/android/app/admin/DevicePolicyManagerInternal.java25
-rw-r--r--core/java/android/bluetooth/le/BluetoothLeAdvertiser.java163
-rw-r--r--core/java/android/bluetooth/le/BluetoothLeScanner.java62
-rw-r--r--core/java/android/net/PacProxySelector.java33
-rw-r--r--core/java/com/android/internal/app/WindowDecorActionBar.java9
-rw-r--r--core/java/com/android/internal/widget/ActionBarContainer.java13
-rw-r--r--core/java/com/android/internal/widget/ActionBarOverlayLayout.java23
-rw-r--r--core/res/res/values/attrs.xml32
-rw-r--r--core/res/res/values/config.xml7
-rw-r--r--core/res/res/values/public.xml2
-rw-r--r--core/res/res/values/strings.xml652
-rw-r--r--core/res/res/values/symbols.xml2
-rw-r--r--core/res/res/xml/tv_content_rating_systems.xml1744
-rw-r--r--core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/ConnectivityManagerTestBase.java2
-rw-r--r--core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/functional/WifiAssociationTest.java4
-rw-r--r--media/java/android/media/tv/TvContentRating.java139
-rw-r--r--packages/PrintSpooler/AndroidManifest.xml3
-rw-r--r--packages/PrintSpooler/res/drawable/ic_savetopdf.xml19
-rw-r--r--packages/PrintSpooler/res/layout/print_activity_controls.xml444
-rw-r--r--packages/PrintSpooler/res/layout/print_error_fragment.xml3
-rw-r--r--packages/PrintSpooler/src/com/android/printspooler/ui/PrintActivity.java11
-rw-r--r--packages/PrintSpooler/src/com/android/printspooler/widget/PrintContentView.java18
-rw-r--r--services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java76
-rw-r--r--services/backup/java/com/android/server/backup/BackupManagerService.java80
-rw-r--r--services/core/java/com/android/server/ConnectivityService.java76
-rw-r--r--services/core/java/com/android/server/connectivity/NetworkAgentInfo.java9
-rw-r--r--services/core/java/com/android/server/connectivity/NetworkMonitor.java56
-rw-r--r--services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java1
-rw-r--r--services/core/java/com/android/server/hdmi/HdmiControlService.java69
-rw-r--r--services/core/java/com/android/server/tv/TvInputManagerService.java1
-rw-r--r--services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java125
-rw-r--r--telephony/java/android/telephony/TelephonyManager.java36
-rw-r--r--telephony/java/com/android/internal/telephony/ITelephony.aidl12
34 files changed, 942 insertions, 3011 deletions
diff --git a/api/current.txt b/api/current.txt
index 5b8ba4d..6f07cd4 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -309,6 +309,7 @@ package android {
field public static final int addStatesFromChildren = 16842992; // 0x10100f0
field public static final int adjustViewBounds = 16843038; // 0x101011e
field public static final int advancedPrintOptionsActivity = 16843761; // 0x10103f1
+ field public static final int ageHint = 16843962; // 0x10104ba
field public static final int alertDialogIcon = 16843605; // 0x1010355
field public static final int alertDialogStyle = 16842845; // 0x101005d
field public static final int alertDialogTheme = 16843529; // 0x1010309
@@ -467,6 +468,7 @@ package android {
field public static final int controlX2 = 16843800; // 0x1010418
field public static final int controlY1 = 16843799; // 0x1010417
field public static final int controlY2 = 16843801; // 0x1010419
+ field public static final int country = 16843963; // 0x10104bb
field public static final int cropToPadding = 16843043; // 0x1010123
field public static final int cursorVisible = 16843090; // 0x1010152
field public static final int customNavigationLayout = 16843474; // 0x10102d2
diff --git a/core/java/android/app/admin/DevicePolicyManagerInternal.java b/core/java/android/app/admin/DevicePolicyManagerInternal.java
index edd8199..a1f1d92 100644
--- a/core/java/android/app/admin/DevicePolicyManagerInternal.java
+++ b/core/java/android/app/admin/DevicePolicyManagerInternal.java
@@ -26,6 +26,22 @@ import java.util.List;
public abstract class DevicePolicyManagerInternal {
/**
+ * Listener for changes in the white-listed packages to show cross-profile
+ * widgets.
+ */
+ public interface OnCrossProfileWidgetProvidersChangeListener {
+
+ /**
+ * Called when the white-listed packages to show cross-profile widgets
+ * have changed for a given user.
+ *
+ * @param profileId The profile for which the white-listed packages changed.
+ * @param packages The white-listed packages.
+ */
+ public void onCrossProfileWidgetProvidersChanged(int profileId, List<String> packages);
+ }
+
+ /**
* Gets the packages whose widget providers are white-listed to be
* available in the parent user.
*
@@ -35,4 +51,13 @@ public abstract class DevicePolicyManagerInternal {
* profile.
*/
public abstract List<String> getCrossProfileWidgetProviders(int profileId);
+
+ /**
+ * Adds a listener for changes in the white-listed packages to show
+ * cross-profile app widgets.
+ *
+ * @param listener The listener to add.
+ */
+ public abstract void addOnCrossProfileWidgetProvidersChangeListener(
+ OnCrossProfileWidgetProvidersChangeListener listener);
}
diff --git a/core/java/android/bluetooth/le/BluetoothLeAdvertiser.java b/core/java/android/bluetooth/le/BluetoothLeAdvertiser.java
index f6315ac..3568f26 100644
--- a/core/java/android/bluetooth/le/BluetoothLeAdvertiser.java
+++ b/core/java/android/bluetooth/le/BluetoothLeAdvertiser.java
@@ -21,7 +21,6 @@ import android.bluetooth.BluetoothGatt;
import android.bluetooth.BluetoothGattCallbackWrapper;
import android.bluetooth.BluetoothUuid;
import android.bluetooth.IBluetoothGatt;
-import android.bluetooth.IBluetoothGattCallback;
import android.bluetooth.IBluetoothManager;
import android.os.Handler;
import android.os.Looper;
@@ -30,7 +29,6 @@ import android.os.RemoteException;
import android.util.Log;
import java.util.HashMap;
-import java.util.List;
import java.util.Map;
import java.util.UUID;
@@ -108,41 +106,37 @@ public final class BluetoothLeAdvertiser {
public void startAdvertising(AdvertiseSettings settings,
AdvertiseData advertiseData, AdvertiseData scanResponse,
final AdvertiseCallback callback) {
- checkAdapterState();
- if (callback == null) {
- throw new IllegalArgumentException("callback cannot be null");
- }
- if (totalBytes(advertiseData) > MAX_ADVERTISING_DATA_BYTES ||
- totalBytes(scanResponse) > MAX_ADVERTISING_DATA_BYTES) {
- postCallbackFailure(callback, AdvertiseCallback.ADVERTISE_FAILED_DATA_TOO_LARGE);
- return;
- }
- if (mLeAdvertisers.containsKey(callback)) {
- postCallbackFailure(callback, AdvertiseCallback.ADVERTISE_FAILED_ALREADY_STARTED);
- return;
- }
- IBluetoothGatt gatt;
- try {
- gatt = mBluetoothManager.getBluetoothGatt();
- } catch (RemoteException e) {
- Log.e(TAG, "Failed to get Bluetooth gatt - ", e);
- postCallbackFailure(callback, AdvertiseCallback.ADVERTISE_FAILED_INTERNAL_ERROR);
- return;
- }
- if (!mBluetoothAdapter.isMultipleAdvertisementSupported()) {
- postCallbackFailure(callback, AdvertiseCallback.ADVERTISE_FAILED_FEATURE_UNSUPPORTED);
- return;
- }
- AdvertiseCallbackWrapper wrapper = new AdvertiseCallbackWrapper(callback, advertiseData,
- scanResponse, settings, gatt);
- UUID uuid = UUID.randomUUID();
- try {
- gatt.registerClient(new ParcelUuid(uuid), wrapper);
- if (wrapper.advertiseStarted()) {
- mLeAdvertisers.put(callback, wrapper);
+ synchronized (mLeAdvertisers) {
+ checkAdapterState();
+ if (callback == null) {
+ throw new IllegalArgumentException("callback cannot be null");
+ }
+ if (!mBluetoothAdapter.isMultipleAdvertisementSupported()) {
+ postStartFailure(callback,
+ AdvertiseCallback.ADVERTISE_FAILED_FEATURE_UNSUPPORTED);
+ return;
+ }
+ if (totalBytes(advertiseData) > MAX_ADVERTISING_DATA_BYTES ||
+ totalBytes(scanResponse) > MAX_ADVERTISING_DATA_BYTES) {
+ postStartFailure(callback, AdvertiseCallback.ADVERTISE_FAILED_DATA_TOO_LARGE);
+ return;
}
- } catch (RemoteException e) {
- Log.e(TAG, "Failed to stop advertising", e);
+ if (mLeAdvertisers.containsKey(callback)) {
+ postStartFailure(callback, AdvertiseCallback.ADVERTISE_FAILED_ALREADY_STARTED);
+ return;
+ }
+
+ IBluetoothGatt gatt;
+ try {
+ gatt = mBluetoothManager.getBluetoothGatt();
+ } catch (RemoteException e) {
+ Log.e(TAG, "Failed to get Bluetooth gatt - ", e);
+ postStartFailure(callback, AdvertiseCallback.ADVERTISE_FAILED_INTERNAL_ERROR);
+ return;
+ }
+ AdvertiseCallbackWrapper wrapper = new AdvertiseCallbackWrapper(callback, advertiseData,
+ scanResponse, settings, gatt);
+ wrapper.startRegisteration();
}
}
@@ -155,23 +149,14 @@ public final class BluetoothLeAdvertiser {
* @param callback {@link AdvertiseCallback} identifies the advertising instance to stop.
*/
public void stopAdvertising(final AdvertiseCallback callback) {
- checkAdapterState();
- if (callback == null) {
- throw new IllegalArgumentException("callback cannot be null");
- }
- AdvertiseCallbackWrapper wrapper = mLeAdvertisers.get(callback);
- if (wrapper == null)
- return;
- try {
- IBluetoothGatt gatt = mBluetoothManager.getBluetoothGatt();
- if (gatt != null)
- gatt.stopMultiAdvertising(wrapper.mClientIf);
-
- if (wrapper.advertiseStopped()) {
- mLeAdvertisers.remove(callback);
+ synchronized (mLeAdvertisers) {
+ checkAdapterState();
+ if (callback == null) {
+ throw new IllegalArgumentException("callback cannot be null");
}
- } catch (RemoteException e) {
- Log.e(TAG, "Failed to stop advertising", e);
+ AdvertiseCallbackWrapper wrapper = mLeAdvertisers.get(callback);
+ if (wrapper == null) return;
+ wrapper.stopAdvertising();
}
}
@@ -186,9 +171,7 @@ public final class BluetoothLeAdvertiser {
// Compute the size of the advertise data.
private int totalBytes(AdvertiseData data) {
- if (data == null) {
- return 0;
- }
+ if (data == null) return 0;
int size = FLAGS_FIELD_BYTES; // flags field is always set.
if (data.getServiceUuids() != null) {
int num16BitUuids = 0;
@@ -243,7 +226,7 @@ public final class BluetoothLeAdvertiser {
/**
* Bluetooth GATT interface callbacks for advertising.
*/
- private static class AdvertiseCallbackWrapper extends BluetoothGattCallbackWrapper {
+ private class AdvertiseCallbackWrapper extends BluetoothGattCallbackWrapper {
private static final int LE_CALLBACK_TIMEOUT_MILLIS = 2000;
private final AdvertiseCallback mAdvertiseCallback;
private final AdvertiseData mAdvertisement;
@@ -269,30 +252,40 @@ public final class BluetoothLeAdvertiser {
mClientIf = 0;
}
- public boolean advertiseStarted() {
- boolean started = false;
+ public void startRegisteration() {
synchronized (this) {
- if (mClientIf == -1) {
- return false;
- }
+ if (mClientIf == -1) return;
+
try {
+ UUID uuid = UUID.randomUUID();
+ mBluetoothGatt.registerClient(new ParcelUuid(uuid), this);
wait(LE_CALLBACK_TIMEOUT_MILLIS);
- } catch (InterruptedException e) {
- Log.e(TAG, "Callback reg wait interrupted: ", e);
+ } catch (InterruptedException | RemoteException e) {
+ Log.e(TAG, "Failed to start registeration", e);
+ }
+ if (mClientIf > 0 && mIsAdvertising) {
+ mLeAdvertisers.put(mAdvertiseCallback, this);
+ } else {
+ postStartFailure(mAdvertiseCallback,
+ AdvertiseCallback.ADVERTISE_FAILED_INTERNAL_ERROR);
}
- started = (mClientIf > 0 && mIsAdvertising);
}
- return started;
}
- public boolean advertiseStopped() {
+ public void stopAdvertising() {
synchronized (this) {
try {
+ mBluetoothGatt.stopMultiAdvertising(mClientIf);
wait(LE_CALLBACK_TIMEOUT_MILLIS);
- } catch (InterruptedException e) {
- Log.e(TAG, "Callback reg wait interrupted: " + e);
+ } catch (InterruptedException | RemoteException e) {
+ Log.e(TAG, "Failed to stop advertising", e);
+ }
+ // Advertise callback should have been removed from LeAdvertisers when
+ // onMultiAdvertiseCallback was called. In case onMultiAdvertiseCallback is never
+ // invoked and wait timeout expires, remove callback here.
+ if (mLeAdvertisers.containsKey(mAdvertiseCallback)) {
+ mLeAdvertisers.remove(mAdvertiseCallback);
}
- return !mIsAdvertising;
}
}
@@ -308,16 +301,14 @@ public final class BluetoothLeAdvertiser {
try {
mBluetoothGatt.startMultiAdvertising(mClientIf, mAdvertisement,
mScanResponse, mSettings);
+ return;
} catch (RemoteException e) {
- Log.e(TAG, "fail to start le advertise: " + e);
- mClientIf = -1;
- notifyAll();
+ Log.e(TAG, "failed to start advertising", e);
}
- } else {
- // registration failed
- mClientIf = -1;
- notifyAll();
}
+ // Registration failed.
+ mClientIf = -1;
+ notifyAll();
}
}
@@ -328,11 +319,11 @@ public final class BluetoothLeAdvertiser {
if (isStart) {
if (status == AdvertiseCallback.ADVERTISE_SUCCESS) {
// Start success
- mAdvertiseCallback.onStartSuccess(settings);
mIsAdvertising = true;
+ postStartSuccess(mAdvertiseCallback, settings);
} else {
// Start failure.
- mAdvertiseCallback.onStartFailure(status);
+ postStartFailure(mAdvertiseCallback, status);
}
} else {
// unregister client for stop.
@@ -340,6 +331,7 @@ public final class BluetoothLeAdvertiser {
mBluetoothGatt.unregisterClient(mClientIf);
mClientIf = -1;
mIsAdvertising = false;
+ mLeAdvertisers.remove(mAdvertiseCallback);
} catch (RemoteException e) {
Log.e(TAG, "remote exception when unregistering", e);
}
@@ -357,12 +349,23 @@ public final class BluetoothLeAdvertiser {
}
}
- private void postCallbackFailure(final AdvertiseCallback callback, final int error) {
+ private void postStartFailure(final AdvertiseCallback callback, final int error) {
mHandler.post(new Runnable() {
- @Override
+ @Override
public void run() {
callback.onStartFailure(error);
}
});
}
+
+ private void postStartSuccess(final AdvertiseCallback callback,
+ final AdvertiseSettings settings) {
+ mHandler.post(new Runnable() {
+
+ @Override
+ public void run() {
+ callback.onStartSuccess(settings);
+ }
+ });
+ }
}
diff --git a/core/java/android/bluetooth/le/BluetoothLeScanner.java b/core/java/android/bluetooth/le/BluetoothLeScanner.java
index 988cea5..e1d4bbd2 100644
--- a/core/java/android/bluetooth/le/BluetoothLeScanner.java
+++ b/core/java/android/bluetooth/le/BluetoothLeScanner.java
@@ -130,20 +130,7 @@ public final class BluetoothLeScanner {
}
BleScanCallbackWrapper wrapper = new BleScanCallbackWrapper(gatt, filters,
settings, callback, resultStorages);
- try {
- UUID uuid = UUID.randomUUID();
- gatt.registerClient(new ParcelUuid(uuid), wrapper);
- if (wrapper.scanStarted()) {
- mLeScanClients.put(callback, wrapper);
- } else {
- postCallbackError(callback,
- ScanCallback.SCAN_FAILED_APPLICATION_REGISTRATION_FAILED);
- return;
- }
- } catch (RemoteException e) {
- Log.e(TAG, "GATT service exception when starting scan", e);
- postCallbackError(callback, ScanCallback.SCAN_FAILED_INTERNAL_ERROR);
- }
+ wrapper.startRegisteration();
}
}
@@ -159,8 +146,7 @@ public final class BluetoothLeScanner {
synchronized (mLeScanClients) {
BleScanCallbackWrapper wrapper = mLeScanClients.remove(callback);
if (wrapper == null) {
- if (DBG)
- Log.d(TAG, "could not find callback wrapper");
+ if (DBG) Log.d(TAG, "could not find callback wrapper");
return;
}
wrapper.stopLeScan();
@@ -220,8 +206,8 @@ public final class BluetoothLeScanner {
/**
* Bluetooth GATT interface callbacks
*/
- private static class BleScanCallbackWrapper extends BluetoothGattCallbackWrapper {
- private static final int REGISTRATION_CALLBACK_TIMEOUT_SECONDS = 5;
+ private class BleScanCallbackWrapper extends BluetoothGattCallbackWrapper {
+ private static final int REGISTRATION_CALLBACK_TIMEOUT_MILLIS = 2000;
private final ScanCallback mScanCallback;
private final List<ScanFilter> mFilters;
@@ -245,18 +231,25 @@ public final class BluetoothLeScanner {
mResultStorages = resultStorages;
}
- public boolean scanStarted() {
+ public void startRegisteration() {
synchronized (this) {
- if (mClientIf == -1) {
- return false;
- }
+ // Scan stopped.
+ if (mClientIf == -1) return;
try {
- wait(REGISTRATION_CALLBACK_TIMEOUT_SECONDS);
- } catch (InterruptedException e) {
- Log.e(TAG, "Callback reg wait interrupted: " + e);
+ UUID uuid = UUID.randomUUID();
+ mBluetoothGatt.registerClient(new ParcelUuid(uuid), this);
+ wait(REGISTRATION_CALLBACK_TIMEOUT_MILLIS);
+ } catch (InterruptedException | RemoteException e) {
+ Log.e(TAG, "application registeration exception", e);
+ postCallbackError(mScanCallback, ScanCallback.SCAN_FAILED_INTERNAL_ERROR);
+ }
+ if (mClientIf > 0) {
+ mLeScanClients.put(mScanCallback, this);
+ } else {
+ postCallbackError(mScanCallback,
+ ScanCallback.SCAN_FAILED_APPLICATION_REGISTRATION_FAILED);
}
}
- return mClientIf > 0;
}
public void stopLeScan() {
@@ -272,7 +265,6 @@ public final class BluetoothLeScanner {
Log.e(TAG, "Failed to stop scan and unregister", e);
}
mClientIf = -1;
- notifyAll();
}
}
@@ -297,11 +289,9 @@ public final class BluetoothLeScanner {
public void onClientRegistered(int status, int clientIf) {
Log.d(TAG, "onClientRegistered() - status=" + status +
" clientIf=" + clientIf);
-
synchronized (this) {
if (mClientIf == -1) {
- if (DBG)
- Log.d(TAG, "onClientRegistered LE scan canceled");
+ if (DBG) Log.d(TAG, "onClientRegistered LE scan canceled");
}
if (status == BluetoothGatt.GATT_SUCCESS) {
@@ -328,17 +318,15 @@ public final class BluetoothLeScanner {
*/
@Override
public void onScanResult(final ScanResult scanResult) {
- if (DBG)
- Log.d(TAG, "onScanResult() - " + scanResult.toString());
+ if (DBG) Log.d(TAG, "onScanResult() - " + scanResult.toString());
// Check null in case the scan has been stopped
synchronized (this) {
- if (mClientIf <= 0)
- return;
+ if (mClientIf <= 0) return;
}
Handler handler = new Handler(Looper.getMainLooper());
handler.post(new Runnable() {
- @Override
+ @Override
public void run() {
mScanCallback.onScanResult(ScanSettings.CALLBACK_TYPE_ALL_MATCHES, scanResult);
}
@@ -350,7 +338,7 @@ public final class BluetoothLeScanner {
public void onBatchScanResults(final List<ScanResult> results) {
Handler handler = new Handler(Looper.getMainLooper());
handler.post(new Runnable() {
- @Override
+ @Override
public void run() {
mScanCallback.onBatchScanResults(results);
}
@@ -394,7 +382,7 @@ public final class BluetoothLeScanner {
private void postCallbackError(final ScanCallback callback, final int errorCode) {
mHandler.post(new Runnable() {
- @Override
+ @Override
public void run() {
callback.onScanFailed(errorCode);
}
diff --git a/core/java/android/net/PacProxySelector.java b/core/java/android/net/PacProxySelector.java
index 8a2c2b6..8626d08 100644
--- a/core/java/android/net/PacProxySelector.java
+++ b/core/java/android/net/PacProxySelector.java
@@ -39,6 +39,9 @@ import java.util.List;
public class PacProxySelector extends ProxySelector {
private static final String TAG = "PacProxySelector";
public static final String PROXY_SERVICE = "com.android.net.IProxyService";
+ private static final String SOCKS = "SOCKS ";
+ private static final String PROXY = "PROXY ";
+
private IProxyService mProxyService;
private final List<Proxy> mDefaultList;
@@ -88,16 +91,16 @@ public class PacProxySelector extends ProxySelector {
String trimmed = s.trim();
if (trimmed.equals("DIRECT")) {
ret.add(java.net.Proxy.NO_PROXY);
- } else if (trimmed.startsWith("PROXY ")) {
- String[] hostPort = trimmed.substring(6).split(":");
- String host = hostPort[0];
- int port;
- try {
- port = Integer.parseInt(hostPort[1]);
- } catch (Exception e) {
- port = 8080;
+ } else if (trimmed.startsWith(PROXY)) {
+ Proxy proxy = proxyFromHostPort(Type.HTTP, trimmed.substring(PROXY.length()));
+ if (proxy != null) {
+ ret.add(proxy);
+ }
+ } else if (trimmed.startsWith(SOCKS)) {
+ Proxy proxy = proxyFromHostPort(Type.SOCKS, trimmed.substring(SOCKS.length()));
+ if (proxy != null) {
+ ret.add(proxy);
}
- ret.add(new Proxy(Type.HTTP, InetSocketAddress.createUnresolved(host, port)));
}
}
if (ret.size() == 0) {
@@ -106,6 +109,18 @@ public class PacProxySelector extends ProxySelector {
return ret;
}
+ private static Proxy proxyFromHostPort(Proxy.Type type, String hostPortString) {
+ try {
+ String[] hostPort = hostPortString.split(":");
+ String host = hostPort[0];
+ int port = Integer.parseInt(hostPort[1]);
+ return new Proxy(type, InetSocketAddress.createUnresolved(host, port));
+ } catch (NumberFormatException|ArrayIndexOutOfBoundsException e) {
+ Log.d(TAG, "Unable to parse proxy " + hostPortString + " " + e);
+ return null;
+ }
+ }
+
@Override
public void connectFailed(URI uri, SocketAddress address, IOException failure) {
diff --git a/core/java/com/android/internal/app/WindowDecorActionBar.java b/core/java/com/android/internal/app/WindowDecorActionBar.java
index b5ff0cc..b58e1db 100644
--- a/core/java/com/android/internal/app/WindowDecorActionBar.java
+++ b/core/java/com/android/internal/app/WindowDecorActionBar.java
@@ -925,6 +925,15 @@ public class WindowDecorActionBar extends ActionBar implements
public void onContentScrollStopped() {
}
+ @Override
+ public boolean collapseActionView() {
+ if (mDecorToolbar != null && mDecorToolbar.hasExpandedActionView()) {
+ mDecorToolbar.collapseActionView();
+ return true;
+ }
+ return false;
+ }
+
/**
* @hide
*/
diff --git a/core/java/com/android/internal/widget/ActionBarContainer.java b/core/java/com/android/internal/widget/ActionBarContainer.java
index 254f602..a2b8ff2 100644
--- a/core/java/com/android/internal/widget/ActionBarContainer.java
+++ b/core/java/com/android/internal/widget/ActionBarContainer.java
@@ -268,16 +268,21 @@ public class ActionBarContainer extends FrameLayout {
if (mActionBarView == null) return;
- final LayoutParams lp = (LayoutParams) mActionBarView.getLayoutParams();
- final int actionBarViewHeight = isCollapsed(mActionBarView) ? 0 :
- mActionBarView.getMeasuredHeight() + lp.topMargin + lp.bottomMargin;
+ int nonTabMaxHeight = 0;
+ final int childCount = getChildCount();
+ for (int i = 0; i < childCount; i++) {
+ final View child = getChildAt(i);
+ final LayoutParams lp = (LayoutParams) child.getLayoutParams();
+ nonTabMaxHeight = isCollapsed(child) ? 0 :
+ child.getMeasuredHeight() + lp.topMargin + lp.bottomMargin;
+ }
if (mTabContainer != null && mTabContainer.getVisibility() != GONE) {
final int mode = MeasureSpec.getMode(heightMeasureSpec);
if (mode == MeasureSpec.AT_MOST) {
final int maxHeight = MeasureSpec.getSize(heightMeasureSpec);
setMeasuredDimension(getMeasuredWidth(),
- Math.min(actionBarViewHeight + mTabContainer.getMeasuredHeight(),
+ Math.min(nonTabMaxHeight + mTabContainer.getMeasuredHeight(),
maxHeight));
}
}
diff --git a/core/java/com/android/internal/widget/ActionBarOverlayLayout.java b/core/java/com/android/internal/widget/ActionBarOverlayLayout.java
index 5709f65..cca48d3 100644
--- a/core/java/com/android/internal/widget/ActionBarOverlayLayout.java
+++ b/core/java/com/android/internal/widget/ActionBarOverlayLayout.java
@@ -184,8 +184,6 @@ public class ActionBarOverlayLayout extends ViewGroup implements DecorContentPar
Build.VERSION_CODES.KITKAT;
mFlingEstimator = new OverScroller(context);
-
- setFocusableInTouchMode(true);
}
@Override
@@ -661,27 +659,6 @@ public class ActionBarOverlayLayout extends ViewGroup implements DecorContentPar
}
@Override
- public boolean dispatchKeyEvent(KeyEvent event) {
- if (super.dispatchKeyEvent(event)) {
- return true;
- }
-
- if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
- final int action = event.getAction();
-
- // Collapse any expanded action views.
- if (mDecorToolbar != null && mDecorToolbar.hasExpandedActionView()) {
- if (action == KeyEvent.ACTION_UP) {
- mDecorToolbar.collapseActionView();
- }
- return true;
- }
- }
-
- return false;
- }
-
- @Override
public void setWindowCallback(Window.Callback cb) {
pullChildren();
mDecorToolbar.setWindowCallback(cb);
diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml
index 08aaa6a..ed9e83f 100644
--- a/core/res/res/values/attrs.xml
+++ b/core/res/res/values/attrs.xml
@@ -7292,7 +7292,7 @@
<attr name="colorPrimary" />
</declare-styleable>
- <!-- Use <code>tv-input</code> as the root tag of the XML resource that describes an
+ <!-- Use <code>tv-input</code> as the root tag of the XML resource that describes a
{@link android.media.tv.TvInputService}, which is referenced from its
{@link android.media.tv.TvInputService#SERVICE_META_DATA} meta-data entry.
Described here are the attributes that can be included in that tag. -->
@@ -7307,6 +7307,36 @@
<attr name="tvContentRatingDescription" format="reference" />
</declare-styleable>
+ <!-- Attributes that can be used with <code>rating-system-definition</code> tags inside of the
+ XML resource that describes TV content rating of a
+ {@link android.media.tv.TvInputService}, which is referenced from
+ {@link android.R.attr#tvContentRatingDescription}. -->
+ <declare-styleable name="RatingSystemDefinition">
+ <!-- The unique name of the content rating system. -->
+ <attr name="name" />
+ <!-- The title of the content rating system which is shown to the user. -->
+ <attr name="title" />
+ <!-- The short description of the content rating system. -->
+ <attr name="description" />
+ <!-- The country associated with the content rating system. -->
+ <attr name="country" format="string" />
+ </declare-styleable>
+
+ <!-- Attributes that can be used with <code>rating-definition</code> tags inside of the XML
+ resource that describes TV content rating of a {@link android.media.tv.TvInputService},
+ which is referenced from {@link android.R.attr#tvContentRatingDescription}. -->
+ <declare-styleable name="RatingDefinition">
+ <!-- The unique name of the content rating. -->
+ <attr name="name" />
+ <!-- The title of the content rating which is shown to the user. -->
+ <attr name="title" />
+ <!-- The short description of the content rating. -->
+ <attr name="description" />
+ <!-- The age associated with the content rating. The content of this rating is suitable for
+ people of this age or above. -->
+ <attr name="ageHint" format="integer" />
+ </declare-styleable>
+
<declare-styleable name="ResolverDrawerLayout">
<attr name="maxWidth" />
<attr name="maxCollapsedHeight" format="dimension" />
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index a59a489..cf9a415 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -1371,6 +1371,13 @@
may have a specific value set in an overlay config.xml file. -->
<integer name="config_mobile_mtu">1500</integer>
+ <!-- Configure mobile tcp buffer sizes in the form:
+ rat-name:rmem_min,rmem_def,rmem_max,wmem_min,wmem_def,wmem_max
+ If no value is found for the rat-name in use, the system default will be applied.
+ -->
+ <string-array name="config_mobile_tcp_buffers">
+ </string-array>
+
<!-- Whether WiFi display is supported by this device.
There are many prerequisites for this feature to work correctly.
Here are a few of them:
diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml
index ed66c65..4f0c5eb 100644
--- a/core/res/res/values/public.xml
+++ b/core/res/res/values/public.xml
@@ -2273,6 +2273,8 @@
<public type="attr" name="letterSpacing" />
<public type="attr" name="fontFeatureSettings" />
<public type="attr" name="outlineProvider" />
+ <public type="attr" name="ageHint" />
+ <public type="attr" name="country" />
<public-padding type="dimen" name="l_resource_pad" end="0x01050010" />
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index 78ba738..9d71859 100644
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -4869,658 +4869,6 @@
<!-- Lock-to-app unlock password string -->
<string name="lock_to_app_unlock_password">password</string>
- <!-- Range specific TV content rating system strings for AM TV -->
- <string name="display_name_amtvrs" translatable="false">AM-TV-RS</string>
- <string name="description_amtvrs" translatable="false">Range specific TV content rating system strings for Armenia</string>
- <string name="display_name_amtvrs_y" translatable="false">Y</string>
- <string name="display_name_amtvrs_y7" translatable="false">Y7</string>
- <string name="display_name_amtvrs_ga" translatable="false">GA</string>
- <string name="display_name_amtvrs_tw" translatable="false">TW</string>
- <string name="display_name_amtvrs_t" translatable="false">T</string>
- <string name="display_name_amtvrs_a" translatable="false">A</string>
- <string name="description_amtvrs_y" translatable="false">Suitable for ages 2-11</string>
- <string name="description_amtvrs_y7" translatable="false">Suitable for ages 7-16</string>
- <string name="description_amtvrs_ga" translatable="false">Suitable for general audiences</string>
- <string name="description_amtvrs_tw" translatable="false">Suitable for teens ages 9 and up</string>
- <string name="description_amtvrs_t" translatable="false">Suitable for teens ages 12 and up</string>
- <string name="description_amtvrs_a" translatable="false">Suitable only for adults ages 18 and up</string>
-
- <!-- Age specific TV content rating system strings for AM TV -->
- <string name="display_name_amtvas" translatable="false">AM-TV-AS</string>
- <string name="description_amtvas" translatable="false">Age specific TV content rating system strings for Armenia</string>
- <string name="display_name_amtvas_ec" translatable="false">EC</string>
- <string name="display_name_amtvas_e" translatable="false">E</string>
- <string name="display_name_amtvas_e9" translatable="false">E9</string>
- <string name="display_name_amtvas_t" translatable="false">T</string>
- <string name="display_name_amtvas_m" translatable="false">M</string>
- <string name="display_name_amtvas_ao" translatable="false">AO</string>
- <string name="description_amtvas_ec" translatable="false">Suitable for ages 2 and up</string>
- <string name="description_amtvas_e" translatable="false">Suitable for ages 5 and up</string>
- <string name="description_amtvas_e9" translatable="false">Suitable for ages 9 and up</string>
- <string name="description_amtvas_t" translatable="false">Suitable for ages 12 and up</string>
- <string name="description_amtvas_m" translatable="false">Suitable for ages 16 and up</string>
- <string name="description_amtvas_ao" translatable="false">Suitable for ages 17 and up</string>
-
- <!-- TV content rating system strings for AR TV -->
- <string name="display_name_artv" translatable="false">AR-TV</string>
- <string name="display_name_artv_all" translatable="false">Apto para todo público</string>
- <string name="display_name_artv_13" translatable="false">Apto para mayores de 13 años</string>
- <string name="display_name_artv_16" translatable="false">Apto para mayores de 16 años</string>
- <string name="display_name_artv_18" translatable="false">Apto para mayores de 18 años</string>
- <string name="description_artv_all" translatable="false">Suitable for all audiences. Programs may contain mild violence, language and mature situations</string>
- <string name="description_artv_13" translatable="false">Suitable for ages 13 and up. Programs may contain mild to moderate language and mild violence and sexual references</string>
- <string name="description_artv_16" translatable="false">Suitable for ages 16 and up. Programs may contain more intensive violence and coarse language, partial nudity and moderate sexual references</string>
- <string name="description_artv_18" translatable="false">Suitable for mature audiences only. Programs contain strong violence, coarse language and explicit sexual references</string>
-
- <!-- TV content rating system strings for AU TV -->
- <string name="display_name_autv" translatable="false">Australian TV Classification</string>
- <string name="display_name_autv_ctc" translatable="false">CTC</string>
- <string name="display_name_autv_g" translatable="false">G</string>
- <string name="display_name_autv_pg" translatable="false">PG</string>
- <string name="display_name_autv_m" translatable="false">M</string>
- <string name="display_name_autv_ma15" translatable="false">MA 15+</string>
- <string name="display_name_autv_r18" translatable="false">R 18+</string>
- <string name="display_name_autv_x18" translatable="false">X 18+</string>
- <string name="description_autv_ctc" translatable="false">This has advertising approval, but is not yet classified</string>
- <string name="description_autv_g" translatable="false">The content is very mild in impact, and suitable for everyone</string>
- <string name="description_autv_pg" translatable="false">The content is mild in impact, but it may contain content that children find confusing or upsetting and may require the guidance or parents and guardians</string>
- <string name="description_autv_m" translatable="false">The content is moderate in impact, and it is recommended for teenagers aged 15 years and over</string>
- <string name="description_autv_ma15" translatable="false">The content is strong in impact, and it is legally restricted to persons 15 years and over</string>
- <string name="description_autv_r18" translatable="false">The content is high in impact, and it is restricted to adults</string>
- <string name="description_autv_x18" translatable="false">The content is restricted to adults. This classification is a special and legally restricted category which contains only sexually explicit content</string>
-
- <!-- TV content rating system strings for BG TV -->
- <string name="display_name_bgtv" translatable="false">BG-TV</string>
- <string name="display_name_bgtv_a" translatable="false">A</string>
- <string name="display_name_bgtv_b" translatable="false">B</string>
- <string name="display_name_bgtv_c" translatable="false">C</string>
- <string name="display_name_bgtv_d" translatable="false">D</string>
- <string name="display_name_bgtv_x" translatable="false">X</string>
- <string name="description_bgtv_a" translatable="false">Recommended to children. When the film confirms the ideals of humanism or popularizes the national and world cultures or contributes to upbringing children</string>
- <string name="description_bgtv_b" translatable="false">No restrictive recommendations from the Committee. When the film is in no way contrary to the universal rules of morality in this country, has no restrictive recommendations from the Committee and does not fall in rating A</string>
- <string name="description_bgtv_c" translatable="false">No persons under the age of 12 are admitted unless accompanied by an adult. When the film contains certain erotic scenes or scenes with drinking, taking drugs or stimulants or a few scenes of violence</string>
- <string name="description_bgtv_d" translatable="false">No persons under the age of 16 are admitted. When the film contains quite a number of erotic scenes or scenes with drinking, taking drugs or stimulants or a considerable number of scenes showing violence</string>
- <string name="description_bgtv_x" translatable="false">No persons under the age of 18 are admitted. When the film is naturalistically erotic or shows violence in an ostentatious manner</string>
-
- <!-- TV content rating system strings for BR TV -->
- <string name="display_name_brtv" translatable="false">Brazil Content Rating</string>
- <string name="display_name_brtv_l" translatable="false">Livre</string>
- <string name="display_name_brtv_10" translatable="false">10 anos</string>
- <string name="display_name_brtv_12" translatable="false">12 anos</string>
- <string name="display_name_brtv_14" translatable="false">14 anos</string>
- <string name="display_name_brtv_16" translatable="false">16 anos</string>
- <string name="display_name_brtv_18" translatable="false">18 anos</string>
- <string name="description_brtv_l" translatable="false">Content is suitable for all audiences</string>
- <string name="description_brtv_10" translatable="false">Content suitable for viewers over the age of 10</string>
- <string name="description_brtv_12" translatable="false">Content suitable for viewers over the age of 12</string>
- <string name="description_brtv_14" translatable="false">Content suitable for viewers over the age of 14</string>
- <string name="description_brtv_16" translatable="false">Content suitable for viewers over the age of 16</string>
- <string name="description_brtv_18" translatable="false">Content suitable for viewers over the age of 18</string>
-
- <!-- TV content rating system strings for CA TV -->
- <string name="display_name_catv" translatable="false">Canadian TV Classification System</string>
- <string name="display_name_catv_exempt" translatable="false">Exempt</string>
- <string name="display_name_catv_c" translatable="false">C</string>
- <string name="display_name_catv_c8" translatable="false">C8</string>
- <string name="display_name_catv_g" translatable="false">G</string>
- <string name="display_name_catv_pg" translatable="false">PG</string>
- <string name="display_name_catv_14" translatable="false">14+</string>
- <string name="display_name_catv_18" translatable="false">18+</string>
- <string name="description_catv_exempt" translatable="false">Shows which are exempt from ratings (such as news and sports programming) will not display an on-screen rating at all</string>
- <string name="description_catv_c" translatable="false">Programming suitable for children ages of 2-7 years. No profanity or sexual content of any level allowed. Contains little violence</string>
- <string name="description_catv_c8" translatable="false">Suitable for children ages 8+. Low level violence and fantasy horror is allowed. No foul language is allowed, but occasional "socially offensive and discriminatory" language is allowed if in the context of the story. No sexual content of any level allowed</string>
- <string name="description_catv_g" translatable="false">Suitable for general audiences. Programming suitable for the entire family with mild violence, and mild profanity and/or censored language</string>
- <string name="description_catv_pg" translatable="false">Parental guidance. Moderate violence and moderate profanity is allowed, as is brief nudity and sexual references if important to the context of the story</string>
- <string name="description_catv_14" translatable="false">Programming intended for viewers ages 14 and older. May contain strong violence and strong profanity, and depictions of sexual activity as long as they are within the context of a story</string>
- <string name="description_catv_18" translatable="false">Programming intended for viewers ages 18 and older. May contain explicit violence and sexual activity</string>
-
- <!-- TV content rating system strings for CH TV -->
- <string name="display_name_chtv" translatable="false">CH-TV</string>
- <string name="display_name_chtv_all" translatable="false">All ages</string>
- <string name="display_name_chtv_red" translatable="false">Red rectangle</string>
- <string name="description_chtv_all" translatable="false">This program is suitable for all ages</string>
- <string name="description_chtv_red" translatable="false">This program contains scenes that may hurt sensitive people, therefore the red symbol will be displayed</string>
-
- <!-- TV content rating system strings for CL TV -->
- <string name="display_name_cltv" translatable="false">CL-TV</string>
- <string name="display_name_cltv_i" translatable="false">I</string>
- <string name="display_name_cltv_i7" translatable="false">I7</string>
- <string name="display_name_cltv_i10" translatable="false">I10</string>
- <string name="display_name_cltv_i12" translatable="false">I12</string>
- <string name="display_name_cltv_f" translatable="false">F</string>
- <string name="display_name_cltv_r" translatable="false">R</string>
- <string name="display_name_cltv_a" translatable="false">A</string>
- <string name="description_cltv_i" translatable="false">Programs suitable for all children</string>
- <string name="description_cltv_i7" translatable="false">Programs recommended for children ages 7 or older</string>
- <string name="description_cltv_i10" translatable="false">Programs recommended for children ages 10 or older</string>
- <string name="description_cltv_i12" translatable="false">Programs recommended for children and teens ages 12 or older</string>
- <string name="description_cltv_f" translatable="false">Programs suitable for a general audience, with content appropriate for all ages</string>
- <string name="description_cltv_r" translatable="false">Programs may content not suitable for children not accompanied by an adult</string>
- <string name="description_cltv_a" translatable="false">Programs suitable for adult audiences only (ages 18 or older), may contain coarse language, and sexual or explicit situations</string>
-
- <!-- TV content rating system strings for DE TV -->
- <string name="display_name_detv" translatable="false">DE-TV</string>
- <string name="display_name_detv_all" translatable="false">ab 0 Jahren</string>
- <string name="display_name_detv_12" translatable="false">ab 12 Jahren</string>
- <string name="display_name_detv_16" translatable="false">ab 16 Jahren</string>
- <string name="display_name_detv_18" translatable="false">ab 18 Jahren</string>
- <string name="description_detv_all" translatable="false">The program is suitable for all ages</string>
- <string name="description_detv_12" translatable="false">The program is not suitable for viewers under the age of 12</string>
- <string name="description_detv_16" translatable="false">The program is not suitable for viewers under the age of 16</string>
- <string name="description_detv_18" translatable="false">The program is not suitable for viewers under the age of 18</string>
-
- <!-- TV content rating system strings for DK TV -->
- <string name="display_name_dktv" translatable="false">DK-TV</string>
- <string name="display_name_dktv_g" translatable="false">Green symbol</string>
- <string name="display_name_dktv_y" translatable="false">Yellow symbol</string>
- <string name="display_name_dktv_r" translatable="false">Red symbol</string>
- <string name="display_name_dktv_b" translatable="false">Blue symbol</string>
- <string name="description_dktv_g" translatable="false">programs suitable for all ages</string>
- <string name="description_dktv_y" translatable="false">programs suitable children accompanied by an adult</string>
- <string name="description_dktv_r" translatable="false">programs containing material with more intensive content </string>
- <string name="description_dktv_b" translatable="false">programs containing explicit content and strictly for adults only</string>
-
- <!-- TV content rating system strings for ES TV -->
- <string name="display_name_estv" translatable="false">ES-TV</string>
- <string name="display_name_estv_tp" translatable="false">TP</string>
- <string name="display_name_estv_i" translatable="false">I</string>
- <string name="display_name_estv_7" translatable="false">+7</string>
- <string name="display_name_estv_7i" translatable="false">7I</string>
- <string name="display_name_estv_12" translatable="false">12</string>
- <string name="display_name_estv_16" translatable="false">16</string>
- <string name="display_name_estv_18" translatable="false">18</string>
- <string name="description_estv_tp" translatable="false">Recommended for all ages</string>
- <string name="description_estv_i" translatable="false">Specially recommended for preschoolers and kids</string>
- <string name="description_estv_7" translatable="false">Recommended for people older than 7 years old</string>
- <string name="description_estv_7i" translatable="false">Recommended for kids older than 7 years old</string>
- <string name="description_estv_12" translatable="false">Recommended for people older than 12 years old</string>
- <string name="description_estv_16" translatable="false">Recommended for people older than 16 years old</string>
- <string name="description_estv_18" translatable="false">Recommended for people older than 18 years old</string>
-
- <!-- TV content rating system strings for FI TV -->
- <string name="display_name_fitv" translatable="false">FI-TV</string>
- <string name="display_name_fitv_s" translatable="false">S</string>
- <string name="display_name_fitv_k7" translatable="false">K7</string>
- <string name="display_name_fitv_k12" translatable="false">K12</string>
- <string name="display_name_fitv_k16" translatable="false">K16</string>
- <string name="display_name_fitv_k18" translatable="false">K18</string>
- <string name="description_fitv_s" translatable="false">Allowed at all times</string>
- <string name="description_fitv_k7" translatable="false">Not recommended for children under 7</string>
- <string name="description_fitv_k12" translatable="false">Not recommended for children under 12</string>
- <string name="description_fitv_k16" translatable="false">Not recommended for children under 16</string>
- <string name="description_fitv_k18" translatable="false">Not recommended for children under 18</string>
-
- <!-- TV content rating system strings for FR TV -->
- <string name="display_name_frtv" translatable="false">FR-TV</string>
- <string name="display_name_frtv_all" translatable="false">Les programmes tous publics</string>
- <string name="display_name_frtv_10" translatable="false">Déconseillé aux -10 ans</string>
- <string name="display_name_frtv_12" translatable="false">Déconseillé aux -12 ans</string>
- <string name="display_name_frtv_16" translatable="false">Déconseillé aux -16 ans</string>
- <string name="display_name_frtv_18" translatable="false">Déconseillé aux -18 ans</string>
- <string name="description_frtv_all" translatable="false">Appropriate for all ages</string>
- <string name="description_frtv_10" translatable="false">Not recommended for children under 10</string>
- <string name="description_frtv_12" translatable="false">Not recommended for children under 12</string>
- <string name="description_frtv_16" translatable="false">Not recommended for children under 16</string>
- <string name="description_frtv_18" translatable="false">Not recommended for persons under 18</string>
-
- <!-- TV content rating system strings for GR TV -->
- <string name="display_name_grtv" translatable="false">GR-TV</string>
- <string name="display_name_grtv_all" translatable="false">White rhombus in green background</string>
- <string name="display_name_grtv_10" translatable="false">White circle in blue background</string>
- <string name="display_name_grtv_12" translatable="false">White triangle in orange background</string>
- <string name="display_name_grtv_15" translatable="false">White square in purple background</string>
- <string name="display_name_grtv_18" translatable="false">White X in red background</string>
- <string name="description_grtv_all" translatable="false">Suitable for all ages</string>
- <string name="description_grtv_10" translatable="false">Parental consent suggested</string>
- <string name="description_grtv_12" translatable="false">Required parental consent</string>
- <string name="description_grtv_15" translatable="false">Suitable for minors over the age of 15</string>
- <string name="description_grtv_18" translatable="false">Suitable only for adults profanity before midnight is punishable by fine, except when used in the context of the program</string>
-
- <!-- TV content rating system strings for HK TV -->
- <string name="display_name_hktv" translatable="false">HK-TV</string>
- <string name="display_name_hktv_g" translatable="false">G</string>
- <string name="display_name_hktv_pg" translatable="false">PG</string>
- <string name="display_name_hktv_m" translatable="false">M</string>
- <string name="description_hktv_g" translatable="false">For general audiences</string>
- <string name="description_hktv_pg" translatable="false">Programs are unsuitable for children, parental guidance is recommended</string>
- <string name="description_hktv_m" translatable="false">Programs are recommended only for adult viewers above the age of 18</string>
-
- <!-- TV content rating system strings for HU TV -->
- <string name="display_name_hutv" translatable="false">HU-TV</string>
- <string name="display_name_hutv_u" translatable="false">Unrated</string>
- <string name="display_name_hutv_cf" translatable="false">Children Friendly</string>
- <string name="display_name_hutv_6" translatable="false">6</string>
- <string name="display_name_hutv_12" translatable="false">12</string>
- <string name="display_name_hutv_16" translatable="false">16</string>
- <string name="display_name_hutv_18" translatable="false">18</string>
- <string name="description_hutv_u" translatable="false">Programs can be viewed by any age</string>
- <string name="description_hutv_cf" translatable="false">Programs recommended for children. It is an optional rating, there is no obligation for broadcasters to indicate it</string>
- <string name="description_hutv_6" translatable="false">Programs not recommended for children below the age of 6, may not contain any violence or sexual content</string>
- <string name="description_hutv_12" translatable="false">Programs not recommended for children below the age of 12, may contain light sexual content or explicit language</string>
- <string name="description_hutv_16" translatable="false">Programs not recommended for teens and children below the age of 16, may contain more intensive violence and sexual content</string>
- <string name="description_hutv_18" translatable="false">The program is recommended only for adult viewers (for ages 18 and up), may contain explicit violence and explicit sexual content</string>
-
- <!-- TV content rating system strings for ID TV -->
- <string name="display_name_idtv" translatable="false">ID-TV</string>
- <string name="display_name_idtv_p" translatable="false">P</string>
- <string name="display_name_idtv_a" translatable="false">A</string>
- <string name="display_name_idtv_a_bo" translatable="false">A-BO</string>
- <string name="display_name_idtv_su" translatable="false">SU</string>
- <string name="display_name_idtv_bo" translatable="false">BO</string>
- <string name="display_name_idtv_r" translatable="false">R</string>
- <string name="display_name_idtv_r_bo" translatable="false">R-BO</string>
- <string name="display_name_idtv_d" translatable="false">D</string>
- <string name="description_idtv_p" translatable="false">Suitable for children from ages 2 through 11</string>
- <string name="description_idtv_a" translatable="false">Suitable for teens and children from ages 7 through 16</string>
- <string name="description_idtv_a_bo" translatable="false">Suitable for children ages 5 through 10, with parental guidance or permission</string>
- <string name="description_idtv_su" translatable="false">Suitable for general audiences</string>
- <string name="description_idtv_bo" translatable="false">Parental guidance suggested for ages 5 and under</string>
- <string name="description_idtv_r" translatable="false">Suitable for teens from ages 13 through 17</string>
- <string name="description_idtv_r_bo" translatable="false">Suitable for teens with parental guidance or permission</string>
- <string name="description_idtv_d" translatable="false">Suitable for viewers over 18 and older only</string>
-
- <!-- TV content rating system strings for IE TV -->
- <string name="display_name_ietv" translatable="false">RTÉ programme classifications</string>
- <string name="display_name_ietv_ga" translatable="false">GA</string>
- <string name="display_name_ietv_ch" translatable="false">Ch</string>
- <string name="display_name_ietv_ya" translatable="false">YA</string>
- <string name="display_name_ietv_ps" translatable="false">PS</string>
- <string name="display_name_ietv_ma" translatable="false">MA</string>
- <string name="description_ietv_ga" translatable="false">Suitable for all ages</string>
- <string name="description_ietv_ch" translatable="false">Suitable for children ages 5 to 10, may contain comedic violence or action fantasy violence</string>
- <string name="description_ietv_ya" translatable="false">Suitable for adolescent audiences, may contain thematic elements that would appeal to teenagers</string>
- <string name="description_ietv_ps" translatable="false">Suitable for more mature viewers, more mature themes may be present</string>
- <string name="description_ietv_ma" translatable="false">Most restrictive classification, allowing for heavy subject matter and coarse language</string>
-
- <!-- TV content rating system strings for IL TV -->
- <string name="display_name_iltv" translatable="false">IL-TV</string>
- <string name="display_name_iltv_g" translatable="false">G</string>
- <string name="display_name_iltv_12" translatable="false">12+</string>
- <string name="display_name_iltv_15" translatable="false">15+</string>
- <string name="display_name_iltv_18" translatable="false">18+</string>
- <string name="display_name_iltv_e" translatable="false">E</string>
- <string name="description_iltv_g" translatable="false">General audience; anyone, regardless of age, can view the program, usually news and children\'s programming</string>
- <string name="description_iltv_12" translatable="false">Suitable for teens and children ages 12 and over, no child under 12 are permitted to view the program</string>
- <string name="description_iltv_15" translatable="false">Suitable for teens ages 15 and over, no child under 15 may view the programme</string>
- <string name="description_iltv_18" translatable="false">Suitable for adults only, no minors may view the programme</string>
- <string name="description_iltv_e" translatable="false">Exempt from classification</string>
-
- <!-- TV content rating system strings for IN TV -->
- <string name="display_name_intv" translatable="false">IN-TV</string>
- <string name="display_name_intv_u" translatable="false">U</string>
- <string name="display_name_intv_u/a" translatable="false">U/A</string>
- <string name="display_name_intv_a" translatable="false">A</string>
- <string name="display_name_intv_s" translatable="false">S</string>
- <string name="description_intv_u" translatable="false">Unrestricted public exhibition</string>
- <string name="description_intv_u/a" translatable="false">Unrestricted public exhibition, but with a caution regarding parental guidance to those under 12 years of age</string>
- <string name="description_intv_a" translatable="false">Public exhibition restricted to adults 18 years of age and older only</string>
- <string name="description_intv_s" translatable="false">Public exhibition restricted to members of any profession or any class of persons</string>
-
- <!-- TV content rating system strings for IS TV -->
- <string name="display_name_istv" translatable="false">IS-TV</string>
- <string name="display_name_istv_l" translatable="false">L</string>
- <string name="display_name_istv_7" translatable="false">7</string>
- <string name="display_name_istv_10" translatable="false">10</string>
- <string name="display_name_istv_12" translatable="false">12</string>
- <string name="display_name_istv_14" translatable="false">14</string>
- <string name="display_name_istv_16" translatable="false">16</string>
- <string name="display_name_istv_18" translatable="false">18</string>
- <string name="description_istv_l" translatable="false">Programs suitable for all ages</string>
- <string name="description_istv_7" translatable="false">Programs suitable for ages 7 and older</string>
- <string name="description_istv_10" translatable="false">Programs suitable for ages 10 and older</string>
- <string name="description_istv_12" translatable="false">Programs suitable for ages 12 and older</string>
- <string name="description_istv_14" translatable="false">Programs suitable for ages 14 and older</string>
- <string name="description_istv_16" translatable="false">Programs suitable for ages 16 and older</string>
- <string name="description_istv_18" translatable="false">Programs suitable for ages 18 and older</string>
-
- <!-- TV content rating system strings for KR TV -->
- <string name="display_name_krtv" translatable="false">KR-TV</string>
- <string name="display_name_krtv_all" translatable="false">모든연령시청가</string>
- <string name="display_name_krtv_7" translatable="false">7세이상시청가</string>
- <string name="display_name_krtv_12" translatable="false">12세이상시청가</string>
- <string name="display_name_krtv_15" translatable="false">15세이상시청가</string>
- <string name="display_name_krtv_19" translatable="false">19세이상시청가</string>
- <string name="description_krtv_all" translatable="false">Appropriate for all ages</string>
- <string name="description_krtv_7" translatable="false">May contain material inappropriate for children younger than 7, and parental discretion should be used</string>
- <string name="description_krtv_12" translatable="false">May deemed inappropriate for those younger than 12, and parental discretion should be used</string>
- <string name="description_krtv_15" translatable="false">May be inappropriate for children under 15, and that parental discretion should be used</string>
- <string name="description_krtv_19" translatable="false">For adults only</string>
-
- <!-- TV content rating system strings for MV TV -->
- <string name="display_name_mvtv" translatable="false">MV-TV</string>
- <string name="display_name_mvtv_y" translatable="false">Y</string>
- <string name="display_name_mvtv_g" translatable="false">G</string>
- <string name="display_name_mvtv_pg" translatable="false">PG</string>
- <string name="display_name_mvtv_pg-12" translatable="false">PG-12</string>
- <string name="display_name_mvtv_12" translatable="false">12+</string>
- <string name="display_name_mvtv_15" translatable="false">15+</string>
- <string name="display_name_mvtv_18" translatable="false">18+</string>
- <string name="display_name_mvtv_21" translatable="false">21+</string>
- <string name="display_name_mvtv_x" translatable="false">X</string>
- <string name="description_mvtv_y" translatable="false">Young children</string>
- <string name="description_mvtv_g" translatable="false">General viewing for all ages</string>
- <string name="description_mvtv_pg" translatable="false">Parental guidance is required unaccompanied children</string>
- <string name="description_mvtv_pg-12" translatable="false">Parental guidance is required for children under the age of 12</string>
- <string name="description_mvtv_12" translatable="false">Teens and children aged 12 and older may watch, otherwise restricted</string>
- <string name="description_mvtv_15" translatable="false">Restricted to viewers aged 15 and above</string>
- <string name="description_mvtv_18" translatable="false">Restricted to viewers aged 18 and above</string>
- <string name="description_mvtv_21" translatable="false">Restricted to viewers aged 21 and above</string>
- <string name="description_mvtv_x" translatable="false">Most restrictive classification, only adults ages 25 and above may view</string>
-
- <!-- TV content rating system strings for MX TV -->
- <string name="display_name_mxtv" translatable="false">MX-TV</string>
- <string name="display_name_mxtv_a" translatable="false">A</string>
- <string name="display_name_mxtv_b" translatable="false">B</string>
- <string name="display_name_mxtv_b-15" translatable="false">B-15</string>
- <string name="display_name_mxtv_c" translatable="false">C</string>
- <string name="display_name_mxtv_d" translatable="false">D</string>
- <string name="display_name_mxtv_rc" translatable="false">RC</string>
- <string name="description_mxtv_a" translatable="false">Appropriate for all ages, parental guidance is recommended for children under 7 years</string>
- <string name="description_mxtv_b" translatable="false">Designed for ages 12 and older, may contain some sexual situations, mild violence, and mild language</string>
- <string name="description_mxtv_b-15" translatable="false">Designed for ages 15 and up, slightly more intensive than the \'A\' and \'B\' ratings</string>
- <string name="description_mxtv_c" translatable="false">Designed to be viewed by adults aged 18 or older only, generally more intensive content </string>
- <string name="description_mxtv_d" translatable="false">Designed to be viewed only by mature adults (at least 21 years of age and over), contains extreme content matter</string>
- <string name="description_mxtv_rc" translatable="false">Banned from public television in Mexico</string>
-
- <!-- TV content rating system strings for MY TV -->
- <string name="display_name_mytv" translatable="false">MY-TV</string>
- <string name="display_name_mytv_u" translatable="false">U</string>
- <string name="display_name_mytv_p13" translatable="false">P13</string>
- <string name="display_name_mytv_18" translatable="false">18</string>
- <string name="description_mytv_u" translatable="false">General viewing for all ages, can be broadcast anytime</string>
- <string name="description_mytv_p13" translatable="false">For viewers ages 13 and above, children under 13 needs parental guidance, can be broadcast anytime, but some elements may only be broadcast at night</string>
- <string name="description_mytv_18" translatable="false">For viewers ages 18 and above only</string>
-
- <!-- TV content rating system strings for NL TV -->
- <string name="display_name_nltv" translatable="false">NICAM</string>
- <string name="display_name_nltv_v" translatable="false">Geweld</string>
- <string name="display_name_nltv_f" translatable="false">Angst</string>
- <string name="display_name_nltv_s" translatable="false">Seks</string>
- <string name="display_name_nltv_d" translatable="false">Discriminatie</string>
- <string name="display_name_nltv_da" translatable="false">Drugs- en/of alcoholmisbruik</string>
- <string name="display_name_nltv_l" translatable="false">Grof taalgebruik</string>
- <string name="display_name_nltv_al" translatable="false">Alle leeftijden</string>
- <string name="display_name_nltv_6" translatable="false">Let op met kinderen tot 6 jaar</string>
- <string name="display_name_nltv_9" translatable="false">Let op met kinderen tot 9 jaar</string>
- <string name="display_name_nltv_12" translatable="false">Let op met kinderen tot 12 jaar</string>
- <string name="display_name_nltv_16" translatable="false">Let op met kinderen tot 16 jaar</string>
- <string name="description_nltv_v" translatable="false">Violence\nApplicable to NL_TV_AL, NL_TV_6, NL_TV_9, NL_TV_12, NL_TV_16</string>
- <string name="description_nltv_f" translatable="false">Scary or Disturbing ContentViolence\nApplicable to NL_TV_AL, NL_TV_6, NL_TV_9, NL_TV_12, NL_TV_16</string>
- <string name="description_nltv_s" translatable="false">Sexual Content\nApplicable to NL_TV_AL, NL_TV_6, NL_TV_9, NL_TV_12, NL_TV_16</string>
- <string name="description_nltv_d" translatable="false">Discrimination\nApplicable to NL_TV_AL, NL_TV_6, NL_TV_9, NL_TV_12, NL_TV_16</string>
- <string name="description_nltv_da" translatable="false">Drug and/or Alcohol abuse\nApplicable to NL_TV_AL, NL_TV_6, NL_TV_9, NL_TV_12, NL_TV_16</string>
- <string name="description_nltv_l" translatable="false">Bad Language\nApplicable to NL_TV_AL, NL_TV_6, NL_TV_9, NL_TV_12, NL_TV_16</string>
- <string name="description_nltv_al" translatable="false">All Ages</string>
- <string name="description_nltv_6" translatable="false">Parental advisory for children under 6</string>
- <string name="description_nltv_9" translatable="false">Parental advisory for children under 9</string>
- <string name="description_nltv_12" translatable="false">Parental advisory for children under 12</string>
- <string name="description_nltv_16" translatable="false">Parental advisory for children under 16</string>
-
- <!-- TV content rating system strings for NZF(Free) TV -->
- <string name="display_name_nzftv" translatable="false">NZ-Free-TV</string>
- <string name="description_nzftv" translatable="false">TV content rating system for free-to-air channels in New Zealand</string>
- <string name="display_name_nzftv_g" translatable="false">G</string>
- <string name="display_name_nzftv_pgr" translatable="false">PGR</string>
- <string name="display_name_nzftv_ao" translatable="false">AO</string>
- <string name="description_nzftv_g" translatable="false">These exclude material likely to harm children under 14 and can screen at any time. Programmes may not necessarily be designed for younger viewers, but must not contain material likely to cause them undue distress or discomfort</string>
- <string name="description_nzftv_pgr" translatable="false">Programmes more suited to more mature viewers. These are not necessarily unsuitable for children, but viewer discretion is advised, and parents and guardians are encouraged to supervise younger viewers</string>
- <string name="description_nzftv_ao" translatable="false">Contain material of an adult nature handled in such a way that it is unsuitable for children</string>
-
- <!-- TV content rating system strings for NZP(Pay) TV -->
- <string name="display_name_nzptv" translatable="false">NZ-Pay-TV</string>
- <string name="description_nzptv" translatable="false">TV content rating system for Pay TV channels in New Zealand</string>
- <string name="display_name_nzptv_c" translatable="false">C</string>
- <string name="display_name_nzptv_v" translatable="false">V</string>
- <string name="display_name_nzptv_l" translatable="false">L</string>
- <string name="display_name_nzptv_s" translatable="false">S</string>
- <string name="display_name_nzptv_g" translatable="false">G</string>
- <string name="display_name_nzptv_pg" translatable="false">PG</string>
- <string name="display_name_nzptv_m" translatable="false">M</string>
- <string name="display_name_nzptv_16" translatable="false">16</string>
- <string name="display_name_nzptv_18" translatable="false">18</string>
- <string name="description_nzptv_c" translatable="false">Content may offend\nApplicable to NZ_PTV_PG, NZ_PTV_M, NZ_PTV_16, NZ_PTV_18</string>
- <string name="description_nzptv_v" translatable="false">Violence\nApplicable to NZ_PTV_PG, NZ_PTV_M, NZ_PTV_16, NZ_PTV_18</string>
- <string name="description_nzptv_l" translatable="false">Language\nApplicable to NZ_PTV_PG, NZ_PTV_M, NZ_PTV_16, NZ_PTV_18</string>
- <string name="description_nzptv_s" translatable="false">Sexual content\nApplicable to NZ_PTV_PG, NZ_PTV_M, NZ_PTV_16, NZ_PTV_18</string>
- <string name="description_nzptv_g" translatable="false">suitable for general audiences</string>
- <string name="description_nzptv_pg" translatable="false">Parental guidance recommended for under 10</string>
- <string name="description_nzptv_m" translatable="false">Suitable for mature audiences 13 and up</string>
- <string name="description_nzptv_16" translatable="false">Suitable for viewers 16 and up</string>
- <string name="description_nzptv_18" translatable="false">Suitable for viewers 18 and up</string>
-
- <!-- TV content rating system strings for PE TV -->
- <string name="display_name_petv" translatable="false">PE-TV</string>
- <string name="description_petv" translatable="false">TV content rating system for some Peruvian channels in Peru</string>
- <string name="display_name_petv_a" translatable="false">Apt</string>
- <string name="display_name_petv_14" translatable="false">14</string>
- <string name="display_name_petv_18" translatable="false">18</string>
- <string name="description_petv_a" translatable="false">Suitable for all audiences</string>
- <string name="description_petv_14" translatable="false">Suitable for people aged 14 and above only</string>
- <string name="description_petv_18" translatable="false">Suitable for people aged 18 and above only</string>
-
- <!-- TV content rating system strings for America TV in PE -->
- <string name="display_name_peatv" translatable="false">PE-ATV</string>
- <string name="description_peatv" translatable="false">TV content rating system for America Television in Peru that uses its own rating system</string>
- <string name="display_name_peatv_gp" translatable="false">GP</string>
- <string name="display_name_peatv_pg" translatable="false">PG</string>
- <string name="display_name_peatv_14" translatable="false">TV-14</string>
- <string name="display_name_peatv_18" translatable="false">TV-18</string>
- <string name="description_peatv_gp" translatable="false">General audience</string>
- <string name="description_peatv_pg" translatable="false">Parental guidance required for under 6</string>
- <string name="description_peatv_14" translatable="false">Suitable for people aged 14 and above only</string>
- <string name="description_peatv_18" translatable="false">Suitable for people aged 18 and above only</string>
-
- <!-- TV content rating system strings for PH TV -->
- <string name="display_name_phtv" translatable="false">MTRCB</string>
- <string name="display_name_phtv_g" translatable="false">G</string>
- <string name="display_name_phtv_pg" translatable="false">PG</string>
- <string name="display_name_phtv_spg" translatable="false">SPG</string>
- <string name="description_phtv_g" translatable="false">Suitable for all public viewers</string>
- <string name="description_phtv_pg" translatable="false">Programmes rated PG may contain scenes or other content that are unsuitable for children without the guidance of a parent</string>
- <string name="description_phtv_spg" translatable="false">Contains mature themes or moderate to intense violence, which may be deemed unfit for children to watch without strict parental supervision</string>
-
- <!-- TV content rating system strings for PL TV -->
- <string name="display_name_pltv" translatable="false">PL-TV</string>
- <string name="display_name_pltv_g" translatable="false">No age limit</string>
- <string name="display_name_pltv_7" translatable="false">7</string>
- <string name="display_name_pltv_12" translatable="false">12</string>
- <string name="display_name_pltv_16" translatable="false">16</string>
- <string name="display_name_pltv_18" translatable="false">18</string>
- <string name="description_pltv_g" translatable="false">Positive or neutral view of the world, little to no violence, non-sexual love, and no sexual content</string>
- <string name="description_pltv_7" translatable="false">Age 7 and above. May additionally contain some mild language, bloodless violence, and a more negative view of the world</string>
- <string name="description_pltv_12" translatable="false">Age 12 and above. May contain some foul language, some violence, and some sexual content</string>
- <string name="description_pltv_16" translatable="false">Age 16 and above. Deviant social behaviour, world filled with violence and sexuality, simplified picture of adulthood, display of physical force, especially in controversial social context, immoral behaviour without ethic dilemma, putting the blame on the victim, excessive concentration on material possessions</string>
- <string name="description_pltv_18" translatable="false">Age 18 and above. One-sided display of the joys of adult life without showing responsibilities, social justification of violent behaviour, excessive vulgarity, use of racial slurs and social stereotypes, explicit sexual content, praise of aggression or vulgarity</string>
-
- <!-- TV content rating system strings for PT TV -->
- <string name="display_name_pttv" translatable="false">PT-TV</string>
- <string name="display_name_pttv_t" translatable="false">Todos</string>
- <string name="display_name_pttv_10" translatable="false">10</string>
- <string name="display_name_pttv_12" translatable="false">12</string>
- <string name="display_name_pttv_16" translatable="false">16</string>
- <string name="description_pttv_t" translatable="false">Suitable for all</string>
- <string name="description_pttv_10" translatable="false">May not be suitable for children under 10, parental guidance advised</string>
- <string name="description_pttv_12" translatable="false">May not be suitable for children under 12, parental guidance advised</string>
- <string name="description_pttv_16" translatable="false">Not suitable for children under 16</string>
-
- <!-- TV content rating system strings for RO TV -->
- <string name="display_name_rotv" translatable="false">RO-TV</string>
- <string name="display_name_rotv_y" translatable="false">Y</string>
- <string name="display_name_rotv_g" translatable="false">G</string>
- <string name="display_name_rotv_ap" translatable="false">AP</string>
- <string name="display_name_rotv_12" translatable="false">12</string>
- <string name="display_name_rotv_15" translatable="false">15</string>
- <string name="display_name_rotv_18" translatable="false">18</string>
- <string name="description_rotv_y" translatable="false">Young Ages</string>
- <string name="description_rotv_g" translatable="false">General Exhibition</string>
- <string name="description_rotv_ap" translatable="false">Parental guidance is recommended for children below the age of 12</string>
- <string name="description_rotv_12" translatable="false">Forbidden for children under 12 years of age</string>
- <string name="description_rotv_15" translatable="false">Forbidden for children under 15 years of age</string>
- <string name="description_rotv_18" translatable="false">Forbidden for children under 18 years of age</string>
-
- <!-- TV content rating system strings for RU TV -->
- <string name="display_name_rutv" translatable="false">RU-TV</string>
- <string name="display_name_rutv_0" translatable="false">0+</string>
- <string name="display_name_rutv_6" translatable="false">6+</string>
- <string name="display_name_rutv_12" translatable="false">12+</string>
- <string name="display_name_rutv_16" translatable="false">16+</string>
- <string name="display_name_rutv_18" translatable="false">18+</string>
- <string name="description_rutv_0" translatable="false">Can be watched by Any Age</string>
- <string name="description_rutv_6" translatable="false">Only kids the age of 6 or older can watch</string>
- <string name="description_rutv_12" translatable="false">Only kids the age of 12 or older can watch</string>
- <string name="description_rutv_16" translatable="false">Only teens the age of 16 or older can watch</string>
- <string name="description_rutv_18" translatable="false">Restricted to children ONLY people 18 or older</string>
-
- <!-- TV content rating system strings for RS TV -->
- <string name="display_name_rstv" translatable="false">RS-TV</string>
- <string name="display_name_rstv_g" translatable="false">G</string>
- <string name="display_name_rstv_12" translatable="false">12</string>
- <string name="display_name_rstv_14" translatable="false">14</string>
- <string name="display_name_rstv_15" translatable="false">15</string>
- <string name="display_name_rstv_16" translatable="false">16</string>
- <string name="display_name_rstv_17" translatable="false">17</string>
- <string name="display_name_rstv_18" translatable="false">18</string>
- <string name="description_rstv_g" translatable="false">Program suitable for all ages</string>
- <string name="description_rstv_12" translatable="false">Program not suitable for children under the age of 12 </string>
- <string name="description_rstv_14" translatable="false">Program not suitable for children/teens under the age of 14</string>
- <string name="description_rstv_15" translatable="false">Program not suitable for children/teens under the age of 15</string>
- <string name="description_rstv_16" translatable="false">Program not suitable for children/teens under the age of 16</string>
- <string name="description_rstv_17" translatable="false">Program not suitable for children/teens under the age of 17</string>
- <string name="description_rstv_18" translatable="false">Program not suitable for minors under the age of 18</string>
-
- <!-- TV content rating system strings for SGF(Free-to-Air) TV -->
- <string name="display_name_sgftv" translatable="false">SG-Free-TV</string>
- <string name="display_name_sgftv_pg" translatable="false">PG</string>
- <string name="display_name_sgftv_pg13" translatable="false">PG13</string>
- <string name="description_sgftv_pg" translatable="false">Suitable for most but parents should guide their young</string>
- <string name="description_sgftv_pg13" translatable="false">Parental Guidance Strongly Cautioned - Suitable for 13 And Above</string>
-
- <!-- TV content rating system strings for SGP(Pay TV) TV -->
- <string name="display_name_sgptv" translatable="false">SG-Pay-TV</string>
- <string name="display_name_sgptv_nc16" translatable="false">NC16</string>
- <string name="display_name_sgptv_m18" translatable="false">M18</string>
- <string name="description_sgptv_nc16" translatable="false">No Children Under 16</string>
- <string name="description_sgptv_m18" translatable="false">Nobody under age 18 is admitted</string>
-
- <!-- TV content rating system strings for SI TV -->
- <string name="display_name_sitv" translatable="false">SI-TV</string>
- <string name="display_name_sitv_vs" translatable="false">VS</string>
- <string name="display_name_sitv_12" translatable="false">+12</string>
- <string name="display_name_sitv_15" translatable="false">+15</string>
- <string name="display_name_sitv_ad" translatable="false">AD</string>
- <string name="description_sitv_vs" translatable="false">Parental guidance suggested (for children under 6)</string>
- <string name="description_sitv_12" translatable="false">Content suitable for teens over 12 years</string>
- <string name="description_sitv_15" translatable="false">Content suitable for teens over 15 years</string>
- <string name="description_sitv_ad" translatable="false">Content exclusively for adults</string>
-
- <!-- TV content rating system strings for TH TV -->
- <string name="display_name_thtv" translatable="false">TH-TV</string>
- <string name="display_name_thtv_primary" translatable="false">Primary</string>
- <string name="display_name_thtv_children" translatable="false">Children</string>
- <string name="display_name_thtv_general" translatable="false">General</string>
- <string name="display_name_thtv_pg13" translatable="false">PG13</string>
- <string name="display_name_thtv_pg18" translatable="false">PG18</string>
- <string name="display_name_thtv_adults" translatable="false">Adults</string>
- <string name="description_thtv_primary" translatable="false">Content suitable for primary school aged children</string>
- <string name="description_thtv_children" translatable="false">Content suitable for children between 6-12 years old</string>
- <string name="description_thtv_general" translatable="false">Content suitable for general audiences</string>
- <string name="description_thtv_pg13" translatable="false">Content suitable for people aged 13 and above, but can be watched by those who are under the recommended age if parental guidance is provided</string>
- <string name="description_thtv_pg18" translatable="false">Content suitable for people aged above 18 years old; those who are younger that 18 must be provided with parental guidance</string>
- <string name="description_thtv_adults" translatable="false">Content unsuitable for children and youngsters</string>
-
- <!-- TV content rating system strings for TR TV -->
- <string name="display_name_trtv" translatable="false">TR-TV</string>
- <string name="display_name_trtv_g" translatable="false">Genel İzleyici</string>
- <string name="display_name_trtv_7" translatable="false">7+</string>
- <string name="display_name_trtv_13" translatable="false">13+</string>
- <string name="display_name_trtv_18" translatable="false">18+</string>
- <string name="description_trtv_g" translatable="false">General audience. Suitable for all ages</string>
- <string name="description_trtv_7" translatable="false">Suitable for ages 7 and over</string>
- <string name="description_trtv_13" translatable="false">Suitable for ages 13 and over</string>
- <string name="description_trtv_18" translatable="false">Suitable for ages 13 and over</string>
-
- <!-- TV content rating system strings for TW TV -->
- <string name="display_name_twtv" translatable="false">TW-TV</string>
- <string name="display_name_twtv_g" translatable="false">General audiences category</string>
- <string name="display_name_twtv_p" translatable="false">Protected category</string>
- <string name="display_name_twtv_pg" translatable="false">Parental guidance category</string>
- <string name="display_name_twtv_r" translatable="false">Restricted category</string>
- <string name="description_twtv_g" translatable="false">For all ages</string>
- <string name="description_twtv_p" translatable="false">Not suitable for children under 6 years old. People aged 6 but under 12 require guidance from accompanying adults to watch</string>
- <string name="description_twtv_pg" translatable="false">Not suitable for people under 12 years of age. Parental guidance is required for people aged 12 but under 18</string>
- <string name="description_twtv_r" translatable="false">For adults only and people under 18 years of age must not watch</string>
-
- <!-- TV content rating system strings for UA TV -->
- <string name="display_name_uatv" translatable="false">UA-TV</string>
- <string name="display_name_uatv_green circle" translatable="false">Green Circle</string>
- <string name="display_name_uatv_yellow triangle" translatable="false">Yellow Triangle</string>
- <string name="display_name_uatv_red square" translatable="false">Red Square</string>
- <string name="description_uatv_green circle" translatable="false">This program does not have age restrictions</string>
- <string name="description_uatv_yellow triangle" translatable="false">Children must view this program with parents. In it program there are fragments, which unsuitable for children</string>
- <string name="description_uatv_red square" translatable="false">This program is only for adult viewers. In it there are scenes with nudity, drug use, or violence</string>
-
- <!-- TV content rating system strings for US TV -->
- <string name="display_name_ustv" translatable="false">US-TV</string>
- <string name="description_ustv" translatable="false">TV content rating system for United States</string>
- <string name="display_name_ustv_d" translatable="false">D</string>
- <string name="display_name_ustv_l" translatable="false">L</string>
- <string name="display_name_ustv_s" translatable="false">S</string>
- <string name="display_name_ustv_v" translatable="false">V</string>
- <string name="display_name_ustv_fv" translatable="false">FV</string>
- <string name="display_name_ustv_y" translatable="false">TV-Y</string>
- <string name="display_name_ustv_y7" translatable="false">TV-Y7</string>
- <string name="display_name_ustv_g" translatable="false">TV-G</string>
- <string name="display_name_ustv_pg" translatable="false">TV-PG</string>
- <string name="display_name_ustv_14" translatable="false">TV-14</string>
- <string name="display_name_ustv_ma" translatable="false">TV-MA</string>
- <string name="description_ustv_d" translatable="false">Suggestive dialogue (Usually means talks about sex)\nApplicable to US_TV_PG, US_TV_14, US_TV</string>
- <string name="description_ustv_l" translatable="false">Coarse language\nApplicable to US_TV_PG, US_TV_14</string>
- <string name="description_ustv_s" translatable="false">Sexual content\nApplicable to US_TV_PG, US_TV_14, US_TV_MA</string>
- <string name="description_ustv_v" translatable="false">Violence\nApplicable to US_TV_PG, US_TV_14, US_TV_MA</string>
- <string name="description_ustv_fv" translatable="false">Fantasy violence (Children\'s programming only)\nApplicable to US_TV_Y7</string>
- <string name="description_ustv_y" translatable="false">This program is designed to be appropriate for all children</string>
- <string name="description_ustv_y7" translatable="false">This program is designed for children age 7 and above</string>
- <string name="description_ustv_g" translatable="false">Most parents would find this program suitable for all ages</string>
- <string name="description_ustv_pg" translatable="false">This program contains material that parents may find unsuitable for younger children</string>
- <string name="description_ustv_14" translatable="false">This program contains some material that many parents would find unsuitable for children under 14 years of age</string>
- <string name="description_ustv_ma" translatable="false">This program is specifically designed to be viewed by adults and therefore may be unsuitable for children under 17</string>
-
- <!-- TV content rating system strings for VE TV -->
- <string name="display_name_vetv" translatable="false">VE-TV</string>
- <string name="display_name_vetv_tu" translatable="false">TU</string>
- <string name="display_name_vetv_su" translatable="false">SU</string>
- <string name="display_name_vetv_a" translatable="false">A</string>
- <string name="description_vetv_tu" translatable="false">For all ages</string>
- <string name="description_vetv_su" translatable="false">Parental guidance for young viewers</string>
- <string name="description_vetv_a" translatable="false">Mature viewers</string>
-
- <!-- TV content rating system strings for ZA TV -->
- <string name="display_name_zatv" translatable="false">ZA-TV</string>
- <string name="display_name_zatv_d" translatable="false">D</string>
- <string name="display_name_zatv_v" translatable="false">V</string>
- <string name="display_name_zatv_n" translatable="false">N</string>
- <string name="display_name_zatv_p" translatable="false">P</string>
- <string name="display_name_zatv_s" translatable="false">S</string>
- <string name="display_name_zatv_l" translatable="false">L</string>
- <string name="display_name_zatv_f" translatable="false">Family</string>
- <string name="display_name_zatv_pg" translatable="false">PG</string>
- <string name="display_name_zatv_13" translatable="false">13</string>
- <string name="display_name_zatv_16" translatable="false">16</string>
- <string name="display_name_zatv_18" translatable="false">18</string>
- <string name="display_name_zatv_r18" translatable="false">R18</string>
- <string name="description_zatv_d" translatable="false">Drug\nApplicable to ZA_TV_F, ZA_TV_PG, ZA_TV_13, ZA_TV_16, ZA_TV_18, ZA_TV_R18</string>
- <string name="description_zatv_v" translatable="false">Violence\nApplicable to ZA_TV_F, ZA_TV_PG, ZA_TV_13, ZA_TV_16, ZA_TV_18, ZA_TV_R18</string>
- <string name="description_zatv_n" translatable="false">Nudity\nApplicable to ZA_TV_F, ZA_TV_PG, ZA_TV_13, ZA_TV_16, ZA_TV_18, ZA_TV_R18</string>
- <string name="description_zatv_p" translatable="false">Prejudice\nApplicable to ZA_TV_F, ZA_TV_PG, ZA_TV_13, ZA_TV_16, ZA_TV_18, ZA_TV_R18</string>
- <string name="description_zatv_s" translatable="false">Sex\nApplicable to ZA_TV_F, ZA_TV_PG, ZA_TV_13, ZA_TV_16, ZA_TV_18, ZA_TV_R18</string>
- <string name="description_zatv_l" translatable="false">Language\nApplicable to ZA_TV_F, ZA_TV_PG, ZA_TV_13, ZA_TV_16, ZA_TV_18, ZA_TV_R18</string>
- <string name="description_zatv_f" translatable="false">This is a program/film that does not contain any obscenity, and is suitable for family viewing. A logo must be displayed in the corner of the screen for 30 seconds after each commercial break</string>
- <string name="description_zatv_pg" translatable="false">Children under 6 may watch this program/film, but must be accompanied by an adult. This program contains an adult related theme, which might include very mild language, violence and sexual innuendo. A logo must be displayed in the corner of the screen for one minute after each commercial break</string>
- <string name="description_zatv_13" translatable="false">Children under 13 are prohibited from watching this program/film. This program contains mild language, violence and sexual innuendo. A logo must be displayed in the corner of the screen for two minutes after each commercial break</string>
- <string name="description_zatv_16" translatable="false">Children under 16 are prohibited from watching this program/film. It contains moderate violence, language, and some sexual situations. In the case of television, this program may only be broadcast after 9pm-4:30am. A logo must be displayed in the corner of the screen for five minutes after each commercial break. A full-screen warning must be issued before the start of the program. If the program is longer than an hour, a warning must be displayed every half an hour</string>
- <string name="description_zatv_18" translatable="false">Children under 18 are prohibited from watching this program/film. It contains extreme violence, language and/or graphic sexual content. In the case of television, this program may only be broadcast from 10pm-4:30am. A logo must be displayed in the corner of the screen for the duration of the program. A full-screen warning must be issued before the start of the program and after each commercial break</string>
- <string name="description_zatv_r18" translatable="false">This is reserved for films of an extreme sexual nature (pornography). R18 films may only be distributed in the form of video and DVD in a controlled environment (e.g. Adult Shops). No public viewing of this film may take place. R18 films may not be broadcast on television and in cinemas</string>
-
<!-- [CHAR_LIMIT=NONE] Battery saver: Feature description -->
<string name="battery_saver_description">To help improve battery life, battery saver reduces your device’s performance and limits vibration and most background data. Email, messaging, and other apps that rely on syncing may not update unless you open them.\n\nBattery saver turns off automatically when your device is charging</string>
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index 0b3a132..1f862fd 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -321,6 +321,7 @@
<java-symbol type="integer" name="config_multiuserMaximumUsers" />
<java-symbol type="integer" name="config_safe_media_volume_index" />
<java-symbol type="integer" name="config_mobile_mtu" />
+ <java-symbol type="array" name="config_mobile_tcp_buffers" />
<java-symbol type="integer" name="config_volte_replacement_rat"/>
<java-symbol type="integer" name="config_valid_wappush_index" />
<java-symbol type="integer" name="config_overrideHasPermanentMenuKey" />
@@ -1265,7 +1266,6 @@
<java-symbol type="xml" name="audio_assets" />
<java-symbol type="xml" name="global_keys" />
<java-symbol type="xml" name="default_zen_mode_config" />
- <java-symbol type="xml" name="tv_content_rating_systems" />
<java-symbol type="raw" name="color_fade_vert" />
<java-symbol type="raw" name="color_fade_frag" />
diff --git a/core/res/res/xml/tv_content_rating_systems.xml b/core/res/res/xml/tv_content_rating_systems.xml
deleted file mode 100644
index 1318274..0000000
--- a/core/res/res/xml/tv_content_rating_systems.xml
+++ /dev/null
@@ -1,1744 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2014, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-<rating-system-definitions version="1.0">
- <!-- Range specific TV content rating system for AM TV-->
- <rating-system-definition id="AM_TV_RS"
- displayName="@string/display_name_amtvrs"
- description="@string/description_amtvrs"
- country="AM">
- <rating-definition id="AM_TV_RS_Y"
- displayName="@string/display_name_amtvrs_y"
- description="@string/description_amtvrs_y"
- ageHint="2" />
- <rating-definition id="AM_TV_RS_Y7"
- displayName="@string/display_name_amtvrs_y7"
- description="@string/description_amtvrs_y7"
- ageHint="7" />
- <rating-definition id="AM_TV_RS_GA"
- displayName="@string/display_name_amtvrs_ga"
- description="@string/description_amtvrs_ga"
- ageHint="0" />
- <rating-definition id="AM_TV_RS_TW"
- displayName="@string/display_name_amtvrs_tw"
- description="@string/description_amtvrs_tw"
- ageHint="9" />
- <rating-definition id="AM_TV_RS_T"
- displayName="@string/display_name_amtvrs_t"
- description="@string/description_amtvrs_t"
- ageHint="12" />
- <rating-definition id="AM_TV_RS_A"
- displayName="@string/display_name_amtvrs_a"
- description="@string/description_amtvrs_a"
- ageHint="18" />
- <order>
- <rating id="AM_TV_RS_Y" />
- <rating id="AM_TV_RS_Y7" />
- </order>
- <order>
- <rating id="AM_TV_RS_GA" />
- <rating id="AM_TV_RS_TW" />
- <rating id="AM_TV_RS_T" />
- <rating id="AM_TV_RS_A" />
- </order>
- </rating-system-definition>
-
- <!-- Age specific TV content rating system for AM TV-->
- <rating-system-definition id="AM_TV_AS"
- displayName="@string/display_name_amtvas"
- description="@string/description_amtvas"
- country="AM">
- <rating-definition id="AM_TV_AS_EC"
- displayName="@string/display_name_amtvas_ec"
- description="@string/description_amtvas_ec"
- ageHint="2" />
- <rating-definition id="AM_TV_AS_E"
- displayName="@string/display_name_amtvas_e"
- description="@string/description_amtvas_e"
- ageHint="5" />
- <rating-definition id="AM_TV_AS_E9"
- displayName="@string/display_name_amtvas_e9"
- description="@string/description_amtvas_e9"
- ageHint="9" />
- <rating-definition id="AM_TV_AS_T"
- displayName="@string/display_name_amtvas_t"
- description="@string/description_amtvas_t"
- ageHint="12" />
- <rating-definition id="AM_TV_AS_M"
- displayName="@string/display_name_amtvas_m"
- description="@string/description_amtvas_m"
- ageHint="16" />
- <rating-definition id="AM_TV_AS_AO"
- displayName="@string/display_name_amtvas_ao"
- description="@string/description_amtvas_ao"
- ageHint="17" />
- <order>
- <rating id="AM_TV_AS_EC" />
- <rating id="AM_TV_AS_E" />
- <rating id="AM_TV_AS_E9" />
- <rating id="AM_TV_AS_T" />
- <rating id="AM_TV_AS_M" />
- <rating id="AM_TV_AS_AO" />
- </order>
- </rating-system-definition>
-
- <!-- TV content rating system for AR TV -->
- <rating-system-definition id="AR_TV"
- displayName="@string/display_name_artv"
- country="AR">
- <rating-definition id="AR_TV_ALL"
- displayName="@string/display_name_artv_all"
- description="@string/description_artv_all"
- ageHint="0" />
- <rating-definition id="AR_TV_13"
- displayName="@string/display_name_artv_13"
- description="@string/description_artv_13"
- ageHint="13" />
- <rating-definition id="AR_TV_16"
- displayName="@string/display_name_artv_16"
- description="@string/description_artv_16"
- ageHint="16" />
- <rating-definition id="AR_TV_18"
- displayName="@string/display_name_artv_18"
- description="@string/description_artv_18"
- ageHint="18" />
- <order>
- <rating id="AR_TV_ALL" />
- <rating id="AR_TV_13" />
- <rating id="AR_TV_16" />
- <rating id="AR_TV_18" />
- </order>
- </rating-system-definition>
-
- <!-- TV content rating system for AU TV -->
- <rating-system-definition id="AU_TV"
- displayName="@string/display_name_autv"
- country="AU">
- <rating-definition id="AU_TV_CTC"
- displayName="@string/display_name_autv_ctc"
- description="@string/description_autv_ctc"
- ageHint="0" />
- <rating-definition id="AU_TV_G"
- displayName="@string/display_name_autv_g"
- description="@string/description_autv_g"
- ageHint="0" />
- <rating-definition id="AU_TV_PG"
- displayName="@string/display_name_autv_pg"
- description="@string/description_autv_pg"
- ageHint="15" />
- <rating-definition id="AU_TV_M"
- displayName="@string/display_name_autv_m"
- description="@string/description_autv_m"
- ageHint="15" />
- <rating-definition id="AU_TV_MA15"
- displayName="@string/display_name_autv_ma15"
- description="@string/description_autv_ma15"
- ageHint="15" />
- <rating-definition id="AU_TV_R18"
- displayName="@string/display_name_autv_r18"
- description="@string/description_autv_r18"
- ageHint="18" />
- <rating-definition id="AU_TV_X18"
- displayName="@string/display_name_autv_x18"
- description="@string/description_autv_x18"
- ageHint="18" />
- <order>
- <rating id="AU_TV_G" />
- <rating id="AU_TV_PG" />
- <rating id="AU_TV_M" />
- <rating id="AU_TV_MA15" />
- <rating id="AU_TV_R18" />
- <rating id="AU_TV_X18" />
- </order>
- </rating-system-definition>
-
- <!-- TV content rating system for BG TV -->
- <rating-system-definition id="BG_TV"
- displayName="@string/display_name_bgtv"
- country="BG">
- <rating-definition id="BG_TV_A"
- displayName="@string/display_name_bgtv_a"
- description="@string/description_bgtv_a"
- ageHint="0" />
- <rating-definition id="BG_TV_B"
- displayName="@string/display_name_bgtv_b"
- description="@string/description_bgtv_b"
- ageHint="0" />
- <rating-definition id="BG_TV_C"
- displayName="@string/display_name_bgtv_c"
- description="@string/description_bgtv_c"
- ageHint="12" />
- <rating-definition id="BG_TV_D"
- displayName="@string/display_name_bgtv_d"
- description="@string/description_bgtv_d"
- ageHint="16" />
- <rating-definition id="BG_TV_X"
- displayName="@string/display_name_bgtv_x"
- description="@string/description_bgtv_x"
- ageHint="18" />
- <order>
- <rating id="BG_TV_A" />
- <rating id="BG_TV_B" />
- <rating id="BG_TV_C" />
- <rating id="BG_TV_D" />
- <rating id="BG_TV_X" />
- </order>
- </rating-system-definition>
-
- <!-- TV content rating system for BR TV -->
- <rating-system-definition id="BR_TV"
- displayName="@string/display_name_brtv"
- country="BR">
- <rating-definition id="BR_TV_L"
- displayName="@string/display_name_brtv_l"
- description="@string/description_brtv_l"
- ageHint="0" />
- <rating-definition id="BR_TV_10"
- displayName="@string/display_name_brtv_10"
- description="@string/description_brtv_10"
- ageHint="10" />
- <rating-definition id="BR_TV_12"
- displayName="@string/display_name_brtv_12"
- description="@string/description_brtv_12"
- ageHint="12" />
- <rating-definition id="BR_TV_14"
- displayName="@string/display_name_brtv_14"
- description="@string/description_brtv_14"
- ageHint="14" />
- <rating-definition id="BR_TV_16"
- displayName="@string/display_name_brtv_16"
- description="@string/description_brtv_16"
- ageHint="16" />
- <rating-definition id="BR_TV_18"
- displayName="@string/display_name_brtv_18"
- description="@string/description_brtv_18"
- ageHint="18" />
- <order>
- <rating id="BR_TV_L" />
- <rating id="BR_TV_10" />
- <rating id="BR_TV_12" />
- <rating id="BR_TV_14" />
- <rating id="BR_TV_16" />
- <rating id="BR_TV_18" />
- </order>
- </rating-system-definition>
-
- <!-- TV content rating system for CA TV -->
- <rating-system-definition id="CA_TV"
- displayName="@string/display_name_catv"
- country="CA">
- <rating-definition id="CA_TV_EXEMPT"
- displayName="@string/display_name_catv_exempt"
- description="@string/description_catv_exempt"
- ageHint="0" />
- <rating-definition id="CA_TV_C"
- displayName="@string/display_name_catv_c"
- description="@string/description_catv_c"
- ageHint="0" />
- <rating-definition id="CA_TV_C8"
- displayName="@string/display_name_catv_c8"
- description="@string/description_catv_c8"
- ageHint="8" />
- <rating-definition id="CA_TV_G"
- displayName="@string/display_name_catv_g"
- description="@string/description_catv_g"
- ageHint="0" />
- <rating-definition id="CA_TV_PG"
- displayName="@string/display_name_catv_pg"
- description="@string/description_catv_pg"
- ageHint="14" />
- <rating-definition id="CA_TV_14"
- displayName="@string/display_name_catv_14"
- description="@string/description_catv_14"
- ageHint="14" />
- <rating-definition id="CA_TV_18"
- displayName="@string/display_name_catv_18"
- description="@string/description_catv_18"
- ageHint="18" />
- <order>
- <rating id="CA_TV_C" />
- <rating id="CA_TV_C8" />
- </order>
- <order>
- <rating id="CA_TV_G" />
- <rating id="CA_TV_PG" />
- <rating id="CA_TV_14" />
- <rating id="CA_TV_18" />
- </order>
- </rating-system-definition>
-
- <!-- TV content rating system for CH TV -->
- <rating-system-definition id="CH_TV"
- displayName="@string/display_name_chtv"
- country="CH">
- <rating-definition id="CH_TV_ALL"
- displayName="@string/display_name_chtv_all"
- description="@string/description_chtv_all"
- ageHint="0" />
- <rating-definition id="CH_TV_RED"
- displayName="@string/display_name_chtv_red"
- description="@string/description_chtv_red"
- ageHint="18" />
- <order>
- <rating id="CH_TV_ALL" />
- <rating id="CH_TV_RED" />
- </order>
- </rating-system-definition>
-
- <!-- TV content rating system for CL TV -->
- <rating-system-definition id="CL_TV"
- displayName="@string/display_name_cltv"
- country="CL">
- <rating-definition id="CL_TV_I"
- displayName="@string/display_name_cltv_i"
- description="@string/description_cltv_i"
- ageHint="0" />
- <rating-definition id="CL_TV_I7"
- displayName="@string/display_name_cltv_i7"
- description="@string/description_cltv_i7"
- ageHint="7" />
- <rating-definition id="CL_TV_I10"
- displayName="@string/display_name_cltv_i10"
- description="@string/description_cltv_i10"
- ageHint="10" />
- <rating-definition id="CL_TV_I12"
- displayName="@string/display_name_cltv_i12"
- description="@string/description_cltv_i12"
- ageHint="12" />
- <rating-definition id="CL_TV_F"
- displayName="@string/display_name_cltv_f"
- description="@string/description_cltv_f"
- ageHint="0" />
- <rating-definition id="CL_TV_R"
- displayName="@string/display_name_cltv_r"
- description="@string/description_cltv_r"
- ageHint="12" />
- <rating-definition id="CL_TV_A"
- displayName="@string/display_name_cltv_a"
- description="@string/description_cltv_a"
- ageHint="18" />
- <order>
- <rating id="CL_TV_I" />
- <rating id="CL_TV_I7" />
- <rating id="CL_TV_I10" />
- <rating id="CL_TV_I12" />
- </order>
- <order>
- <rating id="CL_TV_F" />
- <rating id="CL_TV_R" />
- <rating id="CL_TV_A" />
- </order>
- </rating-system-definition>
-
- <!-- TV content rating system for DE TV -->
- <rating-system-definition id="DE_TV"
- displayName="@string/display_name_detv"
- country="DE">
- <rating-definition id="DE_TV_ALL"
- displayName="@string/display_name_detv_all"
- description="@string/description_detv_all"
- ageHint="0" />
- <rating-definition id="DE_TV_12"
- displayName="@string/display_name_detv_12"
- description="@string/description_detv_12"
- ageHint="12" />
- <rating-definition id="DE_TV_16"
- displayName="@string/display_name_detv_16"
- description="@string/description_detv_16"
- ageHint="16" />
- <rating-definition id="DE_TV_18"
- displayName="@string/display_name_detv_18"
- description="@string/description_detv_18"
- ageHint="18" />
- <order>
- <rating id="DE_TV_ALL" />
- <rating id="DE_TV_12" />
- <rating id="DE_TV_16" />
- <rating id="DE_TV_18" />
- </order>
- </rating-system-definition>
-
- <!-- TV content rating system for DK TV -->
- <rating-system-definition id="DK_TV"
- displayName="@string/display_name_dktv"
- country="DK">
- <rating-definition id="DK_TV_G"
- displayName="@string/display_name_dktv_g"
- description="@string/description_dktv_g"
- ageHint="0" />
- <rating-definition id="DK_TV_Y"
- displayName="@string/display_name_dktv_y"
- description="@string/description_dktv_y"
- ageHint="13" />
- <rating-definition id="DK_TV_R"
- displayName="@string/display_name_dktv_r"
- description="@string/description_dktv_r"
- ageHint="18" />
- <rating-definition id="DK_TV_B"
- displayName="@string/display_name_dktv_b"
- description="@string/description_dktv_b"
- ageHint="18" />
- <order>
- <rating id="DK_TV_G" />
- <rating id="DK_TV_Y" />
- <rating id="DK_TV_R" />
- <rating id="DK_TV_B" />
- </order>
- </rating-system-definition>
-
- <!-- TV content rating system for ES TV -->
- <rating-system-definition id="ES_TV"
- displayName="@string/display_name_estv"
- country="ES">
- <rating-definition id="ES_TV_TP"
- displayName="@string/display_name_estv_tp"
- description="@string/description_estv_tp"
- ageHint="0" />
- <rating-definition id="ES_TV_I"
- displayName="@string/display_name_estv_i"
- description="@string/description_estv_i"
- ageHint="0" />
- <rating-definition id="ES_TV_7"
- displayName="@string/display_name_estv_7"
- description="@string/description_estv_7"
- ageHint="7" />
- <rating-definition id="ES_TV_7I"
- displayName="@string/display_name_estv_7i"
- description="@string/description_estv_7i"
- ageHint="7" />
- <rating-definition id="ES_TV_12"
- displayName="@string/display_name_estv_12"
- description="@string/description_estv_12"
- ageHint="12" />
- <rating-definition id="ES_TV_16"
- displayName="@string/display_name_estv_16"
- description="@string/description_estv_16"
- ageHint="16" />
- <rating-definition id="ES_TV_18"
- displayName="@string/display_name_estv_18"
- description="@string/description_estv_18"
- ageHint="18" />
- <order>
- <rating id="ES_TV_TP" />
- <rating id="ES_TV_I" />
- <rating id="ES_TV_7" />
- <rating id="ES_TV_7I" />
- <rating id="ES_TV_12" />
- <rating id="ES_TV_16" />
- <rating id="ES_TV_18" />
- </order>
- </rating-system-definition>
-
- <!-- TV content rating system for FI TV -->
- <rating-system-definition id="FI_TV"
- displayName="@string/display_name_fitv"
- country="FI">
- <rating-definition id="FI_TV_S"
- displayName="@string/display_name_fitv_s"
- description="@string/description_fitv_s"
- ageHint="0" />
- <rating-definition id="FI_TV_K7"
- displayName="@string/display_name_fitv_k7"
- description="@string/description_fitv_k7"
- ageHint="7" />
- <rating-definition id="FI_TV_K12"
- displayName="@string/display_name_fitv_k12"
- description="@string/description_fitv_k12"
- ageHint="12" />
- <rating-definition id="FI_TV_K16"
- displayName="@string/display_name_fitv_k16"
- description="@string/description_fitv_k16"
- ageHint="16" />
- <rating-definition id="FI_TV_K18"
- displayName="@string/display_name_fitv_k18"
- description="@string/description_fitv_k18"
- ageHint="18" />
- <order>
- <rating id="FI_TV_S" />
- <rating id="FI_TV_K7" />
- <rating id="FI_TV_K12" />
- <rating id="FI_TV_K16" />
- <rating id="FI_TV_K18" />
- </order>
- </rating-system-definition>
-
- <!-- TV content rating system for FR TV -->
- <rating-system-definition id="FR_TV"
- displayName="@string/display_name_frtv"
- country="FR">
- <rating-definition id="FR_TV_ALL"
- displayName="@string/display_name_frtv_all"
- description="@string/description_frtv_all"
- ageHint="0" />
- <rating-definition id="FR_TV_10"
- displayName="@string/display_name_frtv_10"
- description="@string/description_frtv_10"
- ageHint="10" />
- <rating-definition id="FR_TV_12"
- displayName="@string/display_name_frtv_12"
- description="@string/description_frtv_12"
- ageHint="12" />
- <rating-definition id="FR_TV_16"
- displayName="@string/display_name_frtv_16"
- description="@string/description_frtv_16"
- ageHint="16" />
- <rating-definition id="FR_TV_18"
- displayName="@string/display_name_frtv_18"
- description="@string/description_frtv_18"
- ageHint="18" />
- <order>
- <rating id="FR_TV_ALL" />
- <rating id="FR_TV_10" />
- <rating id="FR_TV_12" />
- <rating id="FR_TV_16" />
- <rating id="FR_TV_18" />
- </order>
- </rating-system-definition>
-
- <!-- TV content rating system for GR TV -->
- <rating-system-definition id="GR_TV"
- displayName="@string/display_name_grtv"
- country="GR">
- <rating-definition id="GR_TV_all"
- displayName="@string/display_name_grtv_all"
- description="@string/description_grtv_all"
- ageHint="0" />
- <rating-definition id="GR_TV_10"
- displayName="@string/display_name_grtv_10"
- description="@string/description_grtv_10"
- ageHint="10" />
- <rating-definition id="GR_TV_12"
- displayName="@string/display_name_grtv_12"
- description="@string/description_grtv_12"
- ageHint="12" />
- <rating-definition id="GR_TV_15"
- displayName="@string/display_name_grtv_15"
- description="@string/description_grtv_15"
- ageHint="15" />
- <rating-definition id="GR_TV_18"
- displayName="@string/display_name_grtv_18"
- description="@string/description_grtv_18"
- ageHint="18" />
- <order>
- <rating id="GR_TV_all" />
- <rating id="GR_TV_10" />
- <rating id="GR_TV_12" />
- <rating id="GR_TV_15" />
- <rating id="GR_TV_18" />
- </order>
- </rating-system-definition>
-
- <!-- TV content rating system for HK TV -->
- <rating-system-definition id="HK_TV"
- displayName="@string/display_name_hktv"
- country="HK">
- <rating-definition id="HK_TV_G"
- displayName="@string/display_name_hktv_g"
- description="@string/description_hktv_g"
- ageHint="0" />
- <rating-definition id="HK_TV_PG"
- displayName="@string/display_name_hktv_pg"
- description="@string/description_hktv_pg"
- ageHint="14" />
- <rating-definition id="HK_TV_M"
- displayName="@string/display_name_hktv_m"
- description="@string/description_hktv_m"
- ageHint="18" />
- <order>
- <rating id="HK_TV_G" />
- <rating id="HK_TV_PG" />
- <rating id="HK_TV_M" />
- </order>
- </rating-system-definition>
-
- <!-- TV content rating system for HU TV -->
- <rating-system-definition id="HU_TV"
- displayName="@string/display_name_hutv"
- country="HU">
- <rating-definition id="HU_TV_U"
- displayName="@string/display_name_hutv_u"
- description="@string/description_hutv_u"
- ageHint="0" />
- <rating-definition id="HU_TV_CF"
- displayName="@string/display_name_hutv_cf"
- description="@string/description_hutv_cf"
- ageHint="0" />
- <rating-definition id="HU_TV_6"
- displayName="@string/display_name_hutv_6"
- description="@string/description_hutv_6"
- ageHint="6" />
- <rating-definition id="HU_TV_12"
- displayName="@string/display_name_hutv_12"
- description="@string/description_hutv_12"
- ageHint="12" />
- <rating-definition id="HU_TV_16"
- displayName="@string/display_name_hutv_16"
- description="@string/description_hutv_16"
- ageHint="16" />
- <rating-definition id="HU_TV_18"
- displayName="@string/display_name_hutv_18"
- description="@string/description_hutv_18"
- ageHint="18" />
- <order>
- <rating id="HU_TV_U" />
- <rating id="HU_TV_CF" />
- <rating id="HU_TV_6" />
- <rating id="HU_TV_12" />
- <rating id="HU_TV_16" />
- <rating id="HU_TV_18" />
- </order>
- </rating-system-definition>
-
- <!-- TV content rating system for ID TV -->
- <rating-system-definition id="ID_TV"
- displayName="@string/display_name_idtv"
- country="ID">
- <rating-definition id="ID_TV_P"
- displayName="@string/display_name_idtv_p"
- description="@string/description_idtv_p"
- ageHint="2" />
- <rating-definition id="ID_TV_A"
- displayName="@string/display_name_idtv_a"
- description="@string/description_idtv_a"
- ageHint="7" />
- <rating-definition id="ID_TV_A_BO"
- displayName="@string/display_name_idtv_a_bo"
- description="@string/description_idtv_a_bo"
- ageHint="10" />
- <rating-definition id="ID_TV_SU"
- displayName="@string/display_name_idtv_su"
- description="@string/description_idtv_su"
- ageHint="0" />
- <rating-definition id="ID_TV_BO"
- displayName="@string/display_name_idtv_bo"
- description="@string/description_idtv_bo"
- ageHint="5" />
- <rating-definition id="ID_TV_R"
- displayName="@string/display_name_idtv_r"
- description="@string/description_idtv_r"
- ageHint="13" />
- <rating-definition id="ID_TV_R_BO"
- displayName="@string/display_name_idtv_r_bo"
- description="@string/description_idtv_r_bo"
- ageHint="18" />
- <rating-definition id="ID_TV_D"
- displayName="@string/display_name_idtv_d"
- description="@string/description_idtv_d"
- ageHint="18" />
- <order>
- <rating id="ID_TV_P" />
- <rating id="ID_TV_A" />
- <rating id="ID_TV_A_BO" />
- </order>
- <order>
- <rating id="ID_TV_SU" />
- <rating id="ID_TV_BO" />
- <rating id="ID_TV_R" />
- <rating id="ID_TV_R_BO" />
- <rating id="ID_TV_D" />
- </order>
- </rating-system-definition>
-
- <!-- TV content rating system for IE TV -->
- <rating-system-definition id="IE_TV"
- displayName="@string/display_name_ietv"
- country="IE">
- <rating-definition id="IE_TV_GA"
- displayName="@string/display_name_ietv_ga"
- description="@string/description_ietv_ga"
- ageHint="0" />
- <rating-definition id="IE_TV_Ch"
- displayName="@string/display_name_ietv_ch"
- description="@string/description_ietv_ch"
- ageHint="10" />
- <rating-definition id="IE_TV_YA"
- displayName="@string/display_name_ietv_ya"
- description="@string/description_ietv_ya"
- ageHint="13" />
- <rating-definition id="IE_TV_PS"
- displayName="@string/display_name_ietv_ps"
- description="@string/description_ietv_ps"
- ageHint="18" />
- <rating-definition id="IE_TV_MA"
- displayName="@string/display_name_ietv_ma"
- description="@string/description_ietv_ma"
- ageHint="21" />
- <order>
- <rating id="IE_TV_GA" />
- <rating id="IE_TV_Ch" />
- <rating id="IE_TV_YA" />
- <rating id="IE_TV_PS" />
- <rating id="IE_TV_MA" />
- </order>
- </rating-system-definition>
-
- <!-- TV content rating system for IL TV -->
- <rating-system-definition id="IL_TV"
- displayName="@string/display_name_iltv"
- country="IL">
- <rating-definition id="IL_TV_G"
- displayName="@string/display_name_iltv_g"
- description="@string/description_iltv_g"
- ageHint="0" />
- <rating-definition id="IL_TV_12"
- displayName="@string/display_name_iltv_12"
- description="@string/description_iltv_12"
- ageHint="12" />
- <rating-definition id="IL_TV_15"
- displayName="@string/display_name_iltv_15"
- description="@string/description_iltv_15"
- ageHint="15" />
- <rating-definition id="IL_TV_18"
- displayName="@string/display_name_iltv_18"
- description="@string/description_iltv_18"
- ageHint="18" />
- <rating-definition id="IL_TV_E"
- displayName="@string/display_name_iltv_e"
- description="@string/description_iltv_e"
- ageHint="0" />
- <order>
- <rating id="IL_TV_G" />
- <rating id="IL_TV_12" />
- <rating id="IL_TV_15" />
- <rating id="IL_TV_18" />
- <rating id="IL_TV_E" />
- </order>
- </rating-system-definition>
-
- <!-- TV content rating system for IN TV -->
- <rating-system-definition id="IN_TV"
- displayName="@string/display_name_intv"
- country="IN">
- <rating-definition id="IN_TV_U"
- displayName="@string/display_name_intv_u"
- description="@string/description_intv_u"
- ageHint="0" />
- <rating-definition id="IN_TV_U/A"
- displayName="@string/display_name_intv_u/a"
- description="@string/description_intv_u/a"
- ageHint="12" />
- <rating-definition id="IN_TV_A"
- displayName="@string/display_name_intv_a"
- description="@string/description_intv_a"
- ageHint="18" />
- <rating-definition id="IN_TV_S"
- displayName="@string/display_name_intv_s"
- description="@string/description_intv_s"
- ageHint="0" />
- <order>
- <rating id="IN_TV_U" />
- <rating id="IN_TV_U/A" />
- <rating id="IN_TV_A" />
- <rating id="IN_TV_S" />
- </order>
- </rating-system-definition>
-
- <!-- TV content rating system for IS TV -->
- <rating-system-definition id="IS_TV"
- displayName="@string/display_name_istv"
- country="IS">
- <rating-definition id="IS_TV_L"
- displayName="@string/display_name_istv_l"
- description="@string/description_istv_l"
- ageHint="0" />
- <rating-definition id="IS_TV_7"
- displayName="@string/display_name_istv_7"
- description="@string/description_istv_7"
- ageHint="7" />
- <rating-definition id="IS_TV_10"
- displayName="@string/display_name_istv_10"
- description="@string/description_istv_10"
- ageHint="10" />
- <rating-definition id="IS_TV_12"
- displayName="@string/display_name_istv_12"
- description="@string/description_istv_12"
- ageHint="12" />
- <rating-definition id="IS_TV_14"
- displayName="@string/display_name_istv_14"
- description="@string/description_istv_14"
- ageHint="14" />
- <rating-definition id="IS_TV_16"
- displayName="@string/display_name_istv_16"
- description="@string/description_istv_16"
- ageHint="16" />
- <rating-definition id="IS_TV_18"
- displayName="@string/display_name_istv_18"
- description="@string/description_istv_18"
- ageHint="18" />
- <order>
- <rating id="IS_TV_L" />
- <rating id="IS_TV_7" />
- <rating id="IS_TV_10" />
- <rating id="IS_TV_12" />
- <rating id="IS_TV_14" />
- <rating id="IS_TV_16" />
- <rating id="IS_TV_18" />
- </order>
- </rating-system-definition>
-
- <!-- TV content rating system for KR TV -->
- <rating-system-definition id="KR_TV"
- displayName="@string/display_name_krtv"
- country="KR">
- <rating-definition id="KR_TV_All"
- displayName="@string/display_name_krtv_all"
- description="@string/description_krtv_all"
- ageHint="0" />
- <rating-definition id="KR_TV_7"
- displayName="@string/display_name_krtv_7"
- description="@string/description_krtv_7"
- ageHint="7" />
- <rating-definition id="KR_TV_12"
- displayName="@string/display_name_krtv_12"
- description="@string/description_krtv_12"
- ageHint="12" />
- <rating-definition id="KR_TV_15"
- displayName="@string/display_name_krtv_15"
- description="@string/description_krtv_15"
- ageHint="15" />
- <rating-definition id="KR_TV_19"
- displayName="@string/display_name_krtv_19"
- description="@string/description_krtv_19"
- ageHint="19" />
- <order>
- <rating id="KR_TV_All" />
- <rating id="KR_TV_7" />
- <rating id="KR_TV_12" />
- <rating id="KR_TV_15" />
- <rating id="KR_TV_19" />
- </order>
- </rating-system-definition>
-
- <!-- TV content rating system for MV TV -->
- <rating-system-definition id="MV_TV"
- displayName="@string/display_name_mvtv"
- country="MV">
- <rating-definition id="MV_TV_Y"
- displayName="@string/display_name_mvtv_y"
- description="@string/description_mvtv_y"
- ageHint="0" />
- <rating-definition id="MV_TV_G"
- displayName="@string/display_name_mvtv_g"
- description="@string/description_mvtv_g"
- ageHint="0" />
- <rating-definition id="MV_TV_PG"
- displayName="@string/display_name_mvtv_pg"
- description="@string/description_mvtv_pg"
- ageHint="0" />
- <rating-definition id="MV_TV_PG-12"
- displayName="@string/display_name_mvtv_pg-12"
- description="@string/description_mvtv_pg-12"
- ageHint="12" />
- <rating-definition id="MV_TV_12"
- displayName="@string/display_name_mvtv_12"
- description="@string/description_mvtv_12"
- ageHint="12" />
- <rating-definition id="MV_TV_15"
- displayName="@string/display_name_mvtv_15"
- description="@string/description_mvtv_15"
- ageHint="15" />
- <rating-definition id="MV_TV_18"
- displayName="@string/display_name_mvtv_18"
- description="@string/description_mvtv_18"
- ageHint="18" />
- <rating-definition id="MV_TV_21"
- displayName="@string/display_name_mvtv_21"
- description="@string/description_mvtv_21"
- ageHint="21" />
- <rating-definition id="MV_TV_X"
- displayName="@string/display_name_mvtv_x"
- description="@string/description_mvtv_x"
- ageHint="25" />
- <order>
- <rating id="MV_TV_Y" />
- <rating id="MV_TV_G" />
- <rating id="MV_TV_PG" />
- <rating id="MV_TV_PG-12" />
- <rating id="MV_TV_12" />
- <rating id="MV_TV_15" />
- <rating id="MV_TV_18" />
- <rating id="MV_TV_21" />
- <rating id="MV_TV_X" />
- </order>
- </rating-system-definition>
-
- <!-- TV content rating system for MX TV -->
- <rating-system-definition id="MX_TV"
- displayName="@string/display_name_mxtv"
- country="MX">
- <rating-definition id="MX_TV_A"
- displayName="@string/display_name_mxtv_a"
- description="@string/description_mxtv_a"
- ageHint="7" />
- <rating-definition id="MX_TV_B"
- displayName="@string/display_name_mxtv_b"
- description="@string/description_mxtv_b"
- ageHint="12" />
- <rating-definition id="MX_TV_B-15"
- displayName="@string/display_name_mxtv_b-15"
- description="@string/description_mxtv_b-15"
- ageHint="15" />
- <rating-definition id="MX_TV_C"
- displayName="@string/display_name_mxtv_c"
- description="@string/description_mxtv_c"
- ageHint="18" />
- <rating-definition id="MX_TV_D"
- displayName="@string/display_name_mxtv_d"
- description="@string/description_mxtv_d"
- ageHint="21" />
- <rating-definition id="MX_TV_RC"
- displayName="@string/display_name_mxtv_rc"
- description="@string/description_mxtv_rc"
- ageHint="0" />
- <order>
- <rating id="MX_TV_A" />
- <rating id="MX_TV_B" />
- <rating id="MX_TV_B-15" />
- <rating id="MX_TV_C" />
- <rating id="MX_TV_D" />
- <rating id="MX_TV_RC" />
- </order>
- </rating-system-definition>
-
- <!-- TV content rating system for MY TV -->
- <rating-system-definition id="MY_TV"
- displayName="@string/display_name_mytv"
- country="MY">
- <rating-definition id="MY_TV_U"
- displayName="@string/display_name_mytv_u"
- description="@string/description_mytv_u"
- ageHint="0" />
- <rating-definition id="MY_TV_P13"
- displayName="@string/display_name_mytv_p13"
- description="@string/description_mytv_p13"
- ageHint="13" />
- <rating-definition id="MY_TV_18"
- displayName="@string/display_name_mytv_18"
- description="@string/description_mytv_18"
- ageHint="18" />
- <order>
- <rating id="MY_TV_U" />
- <rating id="MY_TV_P13" />
- <rating id="MY_TV_18" />
- </order>
- </rating-system-definition>
-
- <!-- TV content rating system for NL TV -->
- <rating-system-definition id="NL_TV"
- displayName="@string/display_name_nltv"
- country="NL">
- <sub-rating-definition id="NL_TV_V"
- displayName="@string/display_name_nltv_v"
- description="@string/description_nltv_v" />
- <sub-rating-definition id="NL_TV_F"
- displayName="@string/display_name_nltv_f"
- description="@string/description_nltv_f" />
- <sub-rating-definition id="NL_TV_S"
- displayName="@string/display_name_nltv_s"
- description="@string/description_nltv_s" />
- <sub-rating-definition id="NL_TV_D"
- displayName="@string/display_name_nltv_d"
- description="@string/description_nltv_d" />
- <sub-rating-definition id="NL_TV_DA"
- displayName="@string/display_name_nltv_da"
- description="@string/description_nltv_da" />
- <sub-rating-definition id="NL_TV_L"
- displayName="@string/display_name_nltv_l"
- description="@string/description_nltv_l" />
-
- <rating-definition id="NL_TV_AL"
- displayName="@string/display_name_nltv_al"
- description="@string/description_nltv_al"
- ageHint="0">
- <sub-rating id="NL_TV_V" />
- <sub-rating id="NL_TV_F" />
- <sub-rating id="NL_TV_S" />
- <sub-rating id="NL_TV_D" />
- <sub-rating id="NL_TV_DA" />
- <sub-rating id="NL_TV_L" />
- </rating-definition>
- <rating-definition id="NL_TV_6"
- displayName="@string/display_name_nltv_6"
- description="@string/description_nltv_6"
- ageHint="6">
- <sub-rating id="NL_TV_V" />
- <sub-rating id="NL_TV_F" />
- <sub-rating id="NL_TV_S" />
- <sub-rating id="NL_TV_D" />
- <sub-rating id="NL_TV_DA" />
- <sub-rating id="NL_TV_L" />
- </rating-definition>
- <rating-definition id="NL_TV_9"
- displayName="@string/display_name_nltv_9"
- description="@string/description_nltv_9"
- ageHint="9">
- <sub-rating id="NL_TV_V" />
- <sub-rating id="NL_TV_F" />
- <sub-rating id="NL_TV_S" />
- <sub-rating id="NL_TV_D" />
- <sub-rating id="NL_TV_DA" />
- <sub-rating id="NL_TV_L" />
- </rating-definition>
- <rating-definition id="NL_TV_12"
- displayName="@string/display_name_nltv_12"
- description="@string/description_nltv_12"
- ageHint="12">
- <sub-rating id="NL_TV_V" />
- <sub-rating id="NL_TV_F" />
- <sub-rating id="NL_TV_S" />
- <sub-rating id="NL_TV_D" />
- <sub-rating id="NL_TV_DA" />
- <sub-rating id="NL_TV_L" />
- </rating-definition>
- <rating-definition id="NL_TV_16"
- displayName="@string/display_name_nltv_16"
- description="@string/description_nltv_16"
- ageHint="16">
- <sub-rating id="NL_TV_V" />
- <sub-rating id="NL_TV_F" />
- <sub-rating id="NL_TV_S" />
- <sub-rating id="NL_TV_D" />
- <sub-rating id="NL_TV_DA" />
- <sub-rating id="NL_TV_L" />
- </rating-definition>
- <order>
- <rating id="NL_TV_AL" />
- <rating id="NL_TV_6" />
- <rating id="NL_TV_9" />
- <rating id="NL_TV_12" />
- <rating id="NL_TV_16" />
- </order>
- </rating-system-definition>
-
- <!-- TV content rating system for NZ Free-to-Air TV -->
- <rating-system-definition id="NZ_FTV"
- displayName="@string/display_name_nzftv"
- description="@string/description_nzftv"
- country="NZ">
- <rating-definition id="NZ_FTV_G"
- displayName="@string/display_name_nzftv_g"
- description="@string/description_nzftv_g"
- ageHint="0" />
- <rating-definition id="NZ_FTV_PGR"
- displayName="@string/display_name_nzftv_pgr"
- description="@string/description_nzftv_pgr"
- ageHint="14" />
- <rating-definition id="NZ_FTV_AO"
- displayName="@string/display_name_nzftv_ao"
- description="@string/description_nzftv_ao"
- ageHint="18" />
- <order>
- <rating id="NZ_FTV_G" />
- <rating id="NZ_FTV_PGR" />
- <rating id="NZ_FTV_AO" />
- </order>
- </rating-system-definition>
-
- <!-- TV content rating system for NZ Pay Television -->
- <rating-system-definition id="NZ_PTV"
- displayName="@string/display_name_nzptv"
- description="@string/description_nzptv"
- country="NZ">
- <sub-rating-definition id="NZ_PTV_C"
- displayName="@string/display_name_nzptv_c"
- description="@string/description_nzptv_c" />
- <sub-rating-definition id="NZ_PTV_V"
- displayName="@string/display_name_nzptv_v"
- description="@string/description_nzptv_v" />
- <sub-rating-definition id="NZ_PTV_L"
- displayName="@string/display_name_nzptv_l"
- description="@string/description_nzptv_l" />
- <sub-rating-definition id="NZ_PTV_S"
- displayName="@string/display_name_nzptv_s"
- description="@string/description_nzptv_s" />
- <rating-definition id="NZ_PTV_G"
- displayName="@string/display_name_nzptv_g"
- description="@string/description_nzptv_g"
- ageHint="0" />
- <rating-definition id="NZ_PTV_PG"
- displayName="@string/display_name_nzptv_pg"
- description="@string/description_nzptv_pg"
- ageHint="10">
- <sub-rating id="NZ_PTV_C" />
- <sub-rating id="NZ_PTV_V" />
- <sub-rating id="NZ_PTV_L" />
- <sub-rating id="NZ_PTV_S" />
- </rating-definition>
- <rating-definition id="NZ_PTV_M"
- displayName="@string/display_name_nzptv_m"
- description="@string/description_nzptv_m"
- ageHint="13">
- <sub-rating id="NZ_PTV_C" />
- <sub-rating id="NZ_PTV_V" />
- <sub-rating id="NZ_PTV_L" />
- <sub-rating id="NZ_PTV_S" />
- </rating-definition>
- <rating-definition id="NZ_PTV_16"
- displayName="@string/display_name_nzptv_16"
- description="@string/description_nzptv_16"
- ageHint="16">
- <sub-rating id="NZ_PTV_C" />
- <sub-rating id="NZ_PTV_V" />
- <sub-rating id="NZ_PTV_L" />
- <sub-rating id="NZ_PTV_S" />
- </rating-definition>
- <rating-definition id="NZ_PTV_18"
- displayName="@string/display_name_nzptv_18"
- description="@string/description_nzptv_18"
- ageHint="18">
- <sub-rating id="NZ_PTV_C" />
- <sub-rating id="NZ_PTV_V" />
- <sub-rating id="NZ_PTV_L" />
- <sub-rating id="NZ_PTV_S" />
- </rating-definition>
- <order>
- <rating id="NZ_PTV_G" />
- <rating id="NZ_PTV_PG" />
- <rating id="NZ_PTV_M" />
- <rating id="NZ_PTV_16" />
- <rating id="NZ_PTV_18" />
- </order>
- </rating-system-definition>
-
- <!-- TV content rating system for PE TV -->
- <rating-system-definition id="PE_TV"
- displayName="@string/display_name_petv"
- description="@string/description_petv"
- country="PE">
- <rating-definition id="PE_TV_A"
- displayName="@string/display_name_petv_a"
- description="@string/description_petv_a"
- ageHint="0" />
- <rating-definition id="PE_TV_14"
- displayName="@string/display_name_petv_14"
- description="@string/description_petv_14"
- ageHint="14" />
- <rating-definition id="PE_TV_18"
- displayName="@string/display_name_petv_18"
- description="@string/description_petv_18"
- ageHint="18" />
- <order>
- <rating id="PE_TV_A" />
- <rating id="PE_TV_14" />
- <rating id="PE_TV_18" />
- </order>
- </rating-system-definition>
-
- <rating-system-definition id="PE_ATV"
- displayName="@string/display_name_peatv"
- description="@string/description_peatv"
- country="PE">
- <rating-definition id="PE_ATV_GP"
- displayName="@string/display_name_peatv_gp"
- description="@string/description_peatv_gp"
- ageHint="0" />
- <rating-definition id="PE_ATV_PG"
- displayName="@string/display_name_peatv_pg"
- description="@string/description_peatv_pg"
- ageHint="6" />
- <rating-definition id="PE_ATV_14"
- displayName="@string/display_name_peatv_14"
- description="@string/description_peatv_14"
- ageHint="14" />
- <rating-definition id="PE_ATV_18"
- displayName="@string/display_name_peatv_18"
- description="@string/description_peatv_18"
- ageHint="18" />
- <order>
- <rating id="PE_ATV_GP" />
- <rating id="PE_ATV_PG" />
- <rating id="PE_ATV_14" />
- <rating id="PE_ATV_18" />
- </order>
- </rating-system-definition>
-
- <!-- TV content rating system for PH TV -->
- <rating-system-definition id="PH_TV"
- displayName="@string/display_name_phtv"
- country="PH">
- <rating-definition id="PH_TV_G"
- displayName="@string/display_name_phtv_g"
- description="@string/description_phtv_g"
- ageHint="0" />
- <rating-definition id="PH_TV_PG"
- displayName="@string/display_name_phtv_pg"
- description="@string/description_phtv_pg"
- ageHint="14" />
- <rating-definition id="PH_TV_SPG"
- displayName="@string/display_name_phtv_spg"
- description="@string/description_phtv_spg"
- ageHint="18" />
- <order>
- <rating id="PH_TV_G" />
- <rating id="PH_TV_PG" />
- <rating id="PH_TV_SPG" />
- </order>
- </rating-system-definition>
-
- <!-- TV content rating system for PL TV -->
- <rating-system-definition id="PL_TV"
- displayName="@string/display_name_pltv"
- country="PL">
- <rating-definition id="PL_TV_G"
- displayName="@string/display_name_pltv_g"
- description="@string/description_pltv_g"
- ageHint="0" />
- <rating-definition id="PL_TV_7"
- displayName="@string/display_name_pltv_7"
- description="@string/description_pltv_7"
- ageHint="7" />
- <rating-definition id="PL_TV_12"
- displayName="@string/display_name_pltv_12"
- description="@string/description_pltv_12"
- ageHint="12" />
- <rating-definition id="PL_TV_16"
- displayName="@string/display_name_pltv_16"
- description="@string/description_pltv_16"
- ageHint="16" />
- <rating-definition id="PL_TV_18"
- displayName="@string/display_name_pltv_18"
- description="@string/description_pltv_18"
- ageHint="18" />
- <order>
- <rating id="PL_TV_G" />
- <rating id="PL_TV_7" />
- <rating id="PL_TV_12" />
- <rating id="PL_TV_16" />
- <rating id="PL_TV_18" />
- </order>
- </rating-system-definition>
-
- <!-- TV content rating system for PT TV -->
- <rating-system-definition id="PT_TV"
- displayName="@string/display_name_pttv"
- country="PT">
- <rating-definition id="PT_TV_T"
- displayName="@string/display_name_pttv_t"
- description="@string/description_pttv_t"
- ageHint="0" />
- <rating-definition id="PT_TV_10"
- displayName="@string/display_name_pttv_10"
- description="@string/description_pttv_10"
- ageHint="10" />
- <rating-definition id="PT_TV_12"
- displayName="@string/display_name_pttv_12"
- description="@string/description_pttv_12"
- ageHint="12" />
- <rating-definition id="PT_TV_16"
- displayName="@string/display_name_pttv_16"
- description="@string/description_pttv_16"
- ageHint="16" />
- <order>
- <rating id="PT_TV_T" />
- <rating id="PT_TV_10" />
- <rating id="PT_TV_12" />
- <rating id="PT_TV_16" />
- </order>
- </rating-system-definition>
-
- <!-- TV content rating system for RO TV -->
- <rating-system-definition id="RO_TV"
- displayName="@string/display_name_rotv"
- country="RO">
- <rating-definition id="RO_TV_Y"
- displayName="@string/display_name_rotv_y"
- description="@string/description_rotv_y"
- ageHint="0" />
- <rating-definition id="RO_TV_G"
- displayName="@string/display_name_rotv_g"
- description="@string/description_rotv_g"
- ageHint="0" />
- <rating-definition id="RO_TV_AP"
- displayName="@string/display_name_rotv_ap"
- description="@string/description_rotv_ap"
- ageHint="12" />
- <rating-definition id="RO_TV_12"
- displayName="@string/display_name_rotv_12"
- description="@string/description_rotv_12"
- ageHint="12" />
- <rating-definition id="RO_TV_15"
- displayName="@string/display_name_rotv_15"
- description="@string/description_rotv_15"
- ageHint="15" />
- <rating-definition id="RO_TV_18"
- displayName="@string/display_name_rotv_18"
- description="@string/description_rotv_18"
- ageHint="18" />
- <order>
- <rating id="RO_TV_Y" />
- <rating id="RO_TV_G" />
- <rating id="RO_TV_AP" />
- <rating id="RO_TV_12" />
- <rating id="RO_TV_15" />
- <rating id="RO_TV_18" />
- </order>
- </rating-system-definition>
-
- <!-- TV content rating system for RU TV -->
- <rating-system-definition id="RU_TV"
- displayName="@string/display_name_rutv"
- country="RU">
- <rating-definition id="RU_TV_0"
- displayName="@string/display_name_rutv_0"
- description="@string/description_rutv_0"
- ageHint="0" />
- <rating-definition id="RU_TV_6"
- displayName="@string/display_name_rutv_6"
- description="@string/description_rutv_6"
- ageHint="6" />
- <rating-definition id="RU_TV_12"
- displayName="@string/display_name_rutv_12"
- description="@string/description_rutv_12"
- ageHint="12" />
- <rating-definition id="RU_TV_16"
- displayName="@string/display_name_rutv_16"
- description="@string/description_rutv_16"
- ageHint="16" />
- <rating-definition id="RU_TV_18"
- displayName="@string/display_name_rutv_18"
- description="@string/description_rutv_18"
- ageHint="18" />
- <order>
- <rating id="RU_TV_0" />
- <rating id="RU_TV_6" />
- <rating id="RU_TV_12" />
- <rating id="RU_TV_16" />
- <rating id="RU_TV_18" />
- </order>
- </rating-system-definition>
-
- <!-- TV content rating system for RS TV -->
- <rating-system-definition id="RS_TV"
- displayName="@string/display_name_rstv"
- country="RS">
- <rating-definition id="RS_TV_G"
- displayName="@string/display_name_rstv_g"
- description="@string/description_rstv_g"
- ageHint="0" />
- <rating-definition id="RS_TV_12"
- displayName="@string/display_name_rstv_12"
- description="@string/description_rstv_12"
- ageHint="12" />
- <rating-definition id="RS_TV_14"
- displayName="@string/display_name_rstv_14"
- description="@string/description_rstv_14"
- ageHint="14" />
- <rating-definition id="RS_TV_15"
- displayName="@string/display_name_rstv_15"
- description="@string/description_rstv_15"
- ageHint="15" />
- <rating-definition id="RS_TV_16"
- displayName="@string/display_name_rstv_16"
- description="@string/description_rstv_16"
- ageHint="16" />
- <rating-definition id="RS_TV_17"
- displayName="@string/display_name_rstv_17"
- description="@string/description_rstv_17"
- ageHint="17" />
- <rating-definition id="RS_TV_18"
- displayName="@string/display_name_rstv_18"
- description="@string/description_rstv_18"
- ageHint="18" />
- <order>
- <rating id="RS_TV_G" />
- <rating id="RS_TV_12" />
- <rating id="RS_TV_14" />
- <rating id="RS_TV_15" />
- <rating id="RS_TV_16" />
- <rating id="RS_TV_17" />
- <rating id="RS_TV_18" />
- </order>
- </rating-system-definition>
-
- <!-- TV content rating system for SG Free-to-Air TV -->
- <rating-system-definition id="SG_FTV"
- displayName="@string/display_name_sgftv"
- country="SG">
- <rating-definition id="SG_FTV_PG"
- displayName="@string/display_name_sgftv_pg"
- description="@string/description_sgftv_pg"
- ageHint="0" />
- <rating-definition id="SG_FTV_PG13"
- displayName="@string/display_name_sgftv_pg13"
- description="@string/description_sgftv_pg13"
- ageHint="13" />
- <order>
- <rating id="SG_FTV_PG" />
- <rating id="SG_FTV_PG13" />
- </order>
- </rating-system-definition>
-
- <!-- TV content rating system for SG Pay TV -->
- <rating-system-definition id="SG_PTV"
- displayName="@string/display_name_sgptv"
- country="SG">
- <rating-definition id="SG_PTV_NC16"
- displayName="@string/display_name_sgptv_nc16"
- description="@string/description_sgptv_nc16"
- ageHint="16" />
- <rating-definition id="SG_PTV_M18"
- displayName="@string/display_name_sgptv_m18"
- description="@string/description_sgptv_m18"
- ageHint="18" />
- <order>
- <rating id="SG_PTV_NC16" />
- <rating id="SG_PTV_M18" />
- </order>
- </rating-system-definition>
-
- <!-- TV content rating system for SI TV -->
- <rating-system-definition id="SI_TV"
- displayName="@string/display_name_sitv"
- country="SI">
- <rating-definition id="SI_TV_VS"
- displayName="@string/display_name_sitv_vs"
- description="@string/description_sitv_vs"
- ageHint="6" />
- <rating-definition id="SI_TV_12"
- displayName="@string/display_name_sitv_12"
- description="@string/description_sitv_12"
- ageHint="12" />
- <rating-definition id="SI_TV_15"
- displayName="@string/display_name_sitv_15"
- description="@string/description_sitv_15"
- ageHint="15" />
- <rating-definition id="SI_TV_AD"
- displayName="@string/display_name_sitv_ad"
- description="@string/description_sitv_ad"
- ageHint="0" />
- <order>
- <rating id="SI_TV_VS" />
- <rating id="SI_TV_12" />
- <rating id="SI_TV_15" />
- <rating id="SI_TV_AD" />
- </order>
- </rating-system-definition>
-
- <!-- TV content rating system for TH TV -->
- <rating-system-definition id="TH_TV"
- displayName="@string/display_name_thtv"
- country="TH">
- <rating-definition id="TH_TV_P"
- displayName="@string/display_name_thtv_primary"
- description="@string/description_thtv_primary"
- ageHint="0" />
- <rating-definition id="TH_TV_C"
- displayName="@string/display_name_thtv_children"
- description="@string/description_thtv_children"
- ageHint="6" />
- <rating-definition id="TH_TV_G"
- displayName="@string/display_name_thtv_general"
- description="@string/description_thtv_general"
- ageHint="0" />
- <rating-definition id="TH_TV_PG13"
- displayName="@string/display_name_thtv_pg13"
- description="@string/description_thtv_pg13"
- ageHint="13" />
- <rating-definition id="TH_TV_PG18"
- displayName="@string/display_name_thtv_pg18"
- description="@string/description_thtv_pg18"
- ageHint="18" />
- <rating-definition id="TH_TV_A"
- displayName="@string/display_name_thtv_adults"
- description="@string/description_thtv_adults"
- ageHint="18" />
- <order>
- <rating id="TH_TV_P" />
- <rating id="TH_TV_C" />
- </order>
- <order>
- <rating id="TH_TV_G" />
- <rating id="TH_TV_PG13" />
- <rating id="TH_TV_PG18" />
- <rating id="TH_TV_A" />
- </order>
- </rating-system-definition>
-
- <!-- TV content rating system for TR TV -->
- <rating-system-definition id="TR_TV"
- displayName="@string/display_name_trtv"
- country="TR">
- <rating-definition id="TR_TV_G"
- displayName="@string/display_name_trtv_g"
- description="@string/description_trtv_g"
- ageHint="0" />
- <rating-definition id="TR_TV_7"
- displayName="@string/display_name_trtv_7"
- description="@string/description_trtv_7"
- ageHint="7" />
- <rating-definition id="TR_TV_13"
- displayName="@string/display_name_trtv_13"
- description="@string/description_trtv_13"
- ageHint="13" />
- <rating-definition id="TR_TV_18"
- displayName="@string/display_name_trtv_18"
- description="@string/description_trtv_18"
- ageHint="18" />
- <order>
- <rating id="TR_TV_G" />
- <rating id="TR_TV_7" />
- <rating id="TR_TV_13" />
- <rating id="TR_TV_18" />
- </order>
- </rating-system-definition>
-
- <!-- TV content rating system for TW TV -->
- <rating-system-definition id="TW_TV"
- displayName="@string/display_name_twtv"
- country="TW">
- <rating-definition id="TW_TV_G"
- displayName="@string/display_name_twtv_g"
- description="@string/description_twtv_g"
- ageHint="0" />
- <rating-definition id="TW_TV_P"
- displayName="@string/display_name_twtv_p"
- description="@string/description_twtv_p"
- ageHint="6" />
- <rating-definition id="TW_TV_PG"
- displayName="@string/display_name_twtv_pg"
- description="@string/description_twtv_pg"
- ageHint="12" />
- <rating-definition id="TW_TV_R"
- displayName="@string/display_name_twtv_r"
- description="@string/description_twtv_r"
- ageHint="18" />
- <order>
- <rating id="TW_TV_G" />
- <rating id="TW_TV_P" />
- <rating id="TW_TV_PG" />
- <rating id="TW_TV_R" />
- </order>
- </rating-system-definition>
-
- <!-- TV content rating system for UA TV -->
- <rating-system-definition id="UA_TV"
- displayName="@string/display_name_uatv"
- country="UA">
- <rating-definition id="UA_TV_G"
- displayName="@string/display_name_uatv_green circle"
- description="@string/description_uatv_green circle"
- ageHint="0" />
- <rating-definition id="UA_TV_Y"
- displayName="@string/display_name_uatv_yellow triangle"
- description="@string/description_uatv_yellow triangle"
- ageHint="12" />
- <rating-definition id="UA_TV_R"
- displayName="@string/display_name_uatv_red square"
- description="@string/description_uatv_red square"
- ageHint="18" />
- <order>
- <rating id="UA_TV_G" />
- <rating id="UA_TV_Y" />
- <rating id="UA_TV_R" />
- </order>
- </rating-system-definition>
-
- <!-- TV content rating system for US TV -->
- <rating-system-definition id="US_TV"
- displayName="@string/display_name_ustv"
- description="@string/description_ustv"
- country="US">
- <sub-rating-definition id="US_TV_D"
- displayName="@string/display_name_ustv_d"
- description="@string/description_ustv_d" />
- <sub-rating-definition id="US_TV_L"
- displayName="@string/display_name_ustv_l"
- description="@string/description_ustv_l" />
- <sub-rating-definition id="US_TV_S"
- displayName="@string/display_name_ustv_s"
- description="@string/description_ustv_s" />
- <sub-rating-definition id="US_TV_V"
- displayName="@string/display_name_ustv_v"
- description="@string/description_ustv_v" />
- <sub-rating-definition id="US_TV_FV"
- displayName="@string/display_name_ustv_fv"
- description="@string/description_ustv_fv" />
-
- <rating-definition id="US_TV_Y"
- displayName="@string/display_name_ustv_y"
- description="@string/description_ustv_y"
- ageHint="0" />
- <rating-definition id="US_TV_Y7"
- displayName="@string/display_name_ustv_y7"
- description="@string/description_ustv_y7"
- ageHint="7">
- <sub-rating id="US_TV_FV" />
- </rating-definition>
- <rating-definition id="US_TV_G"
- displayName="@string/display_name_ustv_g"
- description="@string/description_ustv_g"
- ageHint="0" />
- <rating-definition id="US_TV_PG"
- displayName="@string/display_name_ustv_pg"
- description="@string/description_ustv_pg"
- ageHint="14">
- <sub-rating id="US_TV_D" />
- <sub-rating id="US_TV_L" />
- <sub-rating id="US_TV_S" />
- <sub-rating id="US_TV_V" />
- </rating-definition>
- <rating-definition id="US_TV_14"
- displayName="@string/display_name_ustv_14"
- description="@string/description_ustv_14"
- ageHint="14">
- <sub-rating id="US_TV_D" />
- <sub-rating id="US_TV_L" />
- <sub-rating id="US_TV_S" />
- <sub-rating id="US_TV_V" />
- </rating-definition>
- <rating-definition id="US_TV_MA"
- displayName="@string/display_name_ustv_ma"
- description="@string/description_ustv_ma"
- ageHint="17">
- <sub-rating id="US_TV_L" />
- <sub-rating id="US_TV_S" />
- <sub-rating id="US_TV_V" />
- </rating-definition>
- <order>
- <rating id="US_TV_Y" />
- <rating id="US_TV_Y7" />
- </order>
- <order>
- <rating id="US_TV_G" />
- <rating id="US_TV_PG" />
- <rating id="US_TV_14" />
- <rating id="US_TV_MA" />
- </order>
- </rating-system-definition>
-
- <!-- TV content rating system for VE TV -->
- <rating-system-definition id="VE_TV"
- displayName="@string/display_name_vetv"
- country="VE">
- <rating-definition id="VE_TV_TU"
- displayName="@string/display_name_vetv_tu"
- description="@string/description_vetv_tu"
- ageHint="0" />
- <rating-definition id="VE_TV_SU"
- displayName="@string/display_name_vetv_su"
- description="@string/description_vetv_su"
- ageHint="15" />
- <rating-definition id="VE_TV_A"
- displayName="@string/display_name_vetv_a"
- description="@string/description_vetv_a"
- ageHint="18" />
- <order>
- <rating id="VE_TV_TU" />
- <rating id="VE_TV_SU" />
- <rating id="VE_TV_A" />
- </order>
- </rating-system-definition>
-
- <!-- TV content rating system for ZA TV -->
- <rating-system-definition id="ZA_TV"
- displayName="@string/display_name_zatv"
- country="ZA">
- <sub-rating-definition id="ZA_TV_D"
- displayName="@string/display_name_zatv_d"
- description="@string/description_zatv_d" />
- <sub-rating-definition id="ZA_TV_V"
- displayName="@string/display_name_zatv_v"
- description="@string/description_zatv_v" />
- <sub-rating-definition id="ZA_TV_N"
- displayName="@string/display_name_zatv_n"
- description="@string/description_zatv_n" />
- <sub-rating-definition id="ZA_TV_P"
- displayName="@string/display_name_zatv_p"
- description="@string/description_zatv_p" />
- <sub-rating-definition id="ZA_TV_S"
- displayName="@string/display_name_zatv_s"
- description="@string/description_zatv_s" />
- <sub-rating-definition id="ZA_TV_L"
- displayName="@string/display_name_zatv_l"
- description="@string/description_zatv_l" />
- <rating-definition id="ZA_TV_F"
- displayName="@string/display_name_zatv_f"
- description="@string/description_zatv_f"
- ageHint="0">
- <sub-rating id="ZA_TV_D" />
- <sub-rating id="ZA_TV_V" />
- <sub-rating id="ZA_TV_N" />
- <sub-rating id="ZA_TV_P" />
- <sub-rating id="ZA_TV_S" />
- <sub-rating id="ZA_TV_L" />
- </rating-definition>
- <rating-definition id="ZA_TV_PG"
- displayName="@string/display_name_zatv_pg"
- description="@string/description_zatv_pg"
- ageHint="0">
- <sub-rating id="ZA_TV_D" />
- <sub-rating id="ZA_TV_V" />
- <sub-rating id="ZA_TV_N" />
- <sub-rating id="ZA_TV_P" />
- <sub-rating id="ZA_TV_S" />
- <sub-rating id="ZA_TV_L" />
- </rating-definition>
- <rating-definition id="ZA_TV_13"
- displayName="@string/display_name_zatv_13"
- description="@string/description_zatv_13"
- ageHint="13">
- <sub-rating id="ZA_TV_D" />
- <sub-rating id="ZA_TV_V" />
- <sub-rating id="ZA_TV_N" />
- <sub-rating id="ZA_TV_P" />
- <sub-rating id="ZA_TV_S" />
- <sub-rating id="ZA_TV_L" />
- </rating-definition>
- <rating-definition id="ZA_TV_16"
- displayName="@string/display_name_zatv_16"
- description="@string/description_zatv_16"
- ageHint="16">
- <sub-rating id="ZA_TV_D" />
- <sub-rating id="ZA_TV_V" />
- <sub-rating id="ZA_TV_N" />
- <sub-rating id="ZA_TV_P" />
- <sub-rating id="ZA_TV_S" />
- <sub-rating id="ZA_TV_L" />
- </rating-definition>
- <rating-definition id="ZA_TV_18"
- displayName="@string/display_name_zatv_18"
- description="@string/description_zatv_18"
- ageHint="18">
- <sub-rating id="ZA_TV_D" />
- <sub-rating id="ZA_TV_V" />
- <sub-rating id="ZA_TV_N" />
- <sub-rating id="ZA_TV_P" />
- <sub-rating id="ZA_TV_S" />
- <sub-rating id="ZA_TV_L" />
- </rating-definition>
- <rating-definition id="ZA_TV_R18"
- displayName="@string/display_name_zatv_r18"
- description="@string/description_zatv_r18"
- ageHint="18">
- <sub-rating id="ZA_TV_D" />
- <sub-rating id="ZA_TV_V" />
- <sub-rating id="ZA_TV_N" />
- <sub-rating id="ZA_TV_P" />
- <sub-rating id="ZA_TV_S" />
- <sub-rating id="ZA_TV_L" />
- </rating-definition>
- <order>
- <rating id="ZA_TV_F" />
- <rating id="ZA_TV_PG" />
- <rating id="ZA_TV_13" />
- <rating id="ZA_TV_16" />
- <rating id="ZA_TV_18" />
- <rating id="ZA_TV_R18" />
- </order>
- </rating-system-definition>
-</rating-system-definitions>
diff --git a/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/ConnectivityManagerTestBase.java b/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/ConnectivityManagerTestBase.java
index a35a8ee..0f9d8e9 100644
--- a/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/ConnectivityManagerTestBase.java
+++ b/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/ConnectivityManagerTestBase.java
@@ -520,7 +520,7 @@ public class ConnectivityManagerTestBase extends InstrumentationTestCase {
* @param length required length of the string
* @return
*/
- protected boolean isHex(String input, int length) {
+ protected static boolean isHex(String input, int length) {
Pattern p = Pattern.compile(String.format("[0-9A-Fa-f]{%d}", length));
return p.matcher(input).matches();
}
diff --git a/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/functional/WifiAssociationTest.java b/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/functional/WifiAssociationTest.java
index afaf801..eb75b0d 100644
--- a/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/functional/WifiAssociationTest.java
+++ b/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/functional/WifiAssociationTest.java
@@ -136,7 +136,7 @@ public class WifiAssociationTest extends ConnectivityManagerTestBase {
config.allowedProtocols.set(Protocol.WPA);
config.allowedPairwiseCiphers.set(PairwiseCipher.TKIP);
config.allowedGroupCiphers.set(GroupCipher.TKIP);
- if (mPassword.matches("[0-9A-Fa-f]{64}")) {
+ if (isHex(mPassword, 64)) {
config.preSharedKey = mPassword;
} else {
config.preSharedKey = '"' + mPassword + '"';
@@ -150,7 +150,7 @@ public class WifiAssociationTest extends ConnectivityManagerTestBase {
config.allowedPairwiseCiphers.set(PairwiseCipher.CCMP);
config.allowedGroupCiphers.set(GroupCipher.CCMP);
config.allowedProtocols.set(Protocol.RSN);
- if (mPassword.matches("[0-9A-Fa-f]{64}")) {
+ if (isHex(mPassword, 64)) {
config.preSharedKey = mPassword;
} else {
config.preSharedKey = '"' + mPassword + '"';
diff --git a/media/java/android/media/tv/TvContentRating.java b/media/java/android/media/tv/TvContentRating.java
index 405ef22..c4a81cc 100644
--- a/media/java/android/media/tv/TvContentRating.java
+++ b/media/java/android/media/tv/TvContentRating.java
@@ -41,78 +41,79 @@ import java.util.Objects;
* The following XML example shows how the TV Parental Guidelines in United States can be defined:
* <p><pre class="prettyprint">
* {@literal
- * <?xml version="1.0" encoding="UTF-8"?>
- * <rating-system-definitions version="1.0">
- * <rating-system-definition id="US_TV"
- * displayName="US-TV"
- * description="The TV Parental Guidelines"
- * country="US">
- * <sub-rating-definition id="US_TV_D"
- * displayName="D"
- * description="Suggestive dialogue (Usually means talks about sex)" />
- * <sub-rating-definition id="US_TV_L"
- * displayName="L"
- * description="Coarse language" />
- * <sub-rating-definition id="US_TV_S"
- * displayName="S"
- * description="Sexual content" />
- * <sub-rating-definition id="US_TV_V"
- * displayName="V"
- * description="Violence" />
- * <sub-rating-definition id="US_TV_FV"
- * displayName="FV"
- * description="Fantasy violence (Children\'s programming only)" />
+ * <rating-system-definitions xmlns:android="http://schemas.android.com/apk/res/android"
+ * android:versionCode="1">
+ * <!-- TV content rating system for US TV -->
+ * <rating-system-definition android:name="US_TV"
+ * android:title="US-TV"
+ * android:description="@string/description_ustv"
+ * android:country="US">
+ * <sub-rating-definition android:name="US_TV_D"
+ * android:title="D"
+ * android:description="@string/description_ustv_d" />
+ * <sub-rating-definition android:name="US_TV_L"
+ * android:title="L"
+ * android:description="@string/description_ustv_l" />
+ * <sub-rating-definition android:name="US_TV_S"
+ * android:title="S"
+ * android:description="@string/description_ustv_s" />
+ * <sub-rating-definition android:name="US_TV_V"
+ * android:title="V"
+ * android:description="@string/description_ustv_v" />
+ * <sub-rating-definition android:name="US_TV_FV"
+ * android:title="FV"
+ * android:description="@string/description_ustv_fv" />
*
- * <rating-definition id="US_TV_Y"
- * displayName="TV-Y"
- * description="This program is designed to be appropriate for all children"
- * ageHint="0" />
- * <rating-definition id="US_TV_Y7"
- * displayName="TV-Y7"
- * description="This program is designed for children age 7 and above"
- * ageHint="7">
- * <sub-rating id="US_TV_FV" />
+ * <rating-definition android:name="US_TV_Y"
+ * android:title="TV-Y"
+ * android:description="@string/description_ustv_y"
+ * android:ageHint="0" />
+ * <rating-definition android:name="US_TV_Y7"
+ * android:title="TV-Y7"
+ * android:description="@string/description_ustv_y7"
+ * android:ageHint="7">
+ * <sub-rating android:name="US_TV_FV" />
* </rating-definition>
- * <rating-definition id="US_TV_G"
- * displayName="TV-G"
- * description="Most parents would find this program suitable for all ages"
- * ageHint="0" />
- * <rating-definition id="US_TV_PG"
- * displayName="TV-PG"
- * description="This program contains material that parents may find unsuitable for younger children"
- * ageHint="14">
- * <sub-rating id="US_TV_D" />
- * <sub-rating id="US_TV_L" />
- * <sub-rating id="US_TV_S" />
- * <sub-rating id="US_TV_V" />
+ * <rating-definition android:name="US_TV_G"
+ * android:title="TV-G"
+ * android:description="@string/description_ustv_g"
+ * android:ageHint="0" />
+ * <rating-definition android:name="US_TV_PG"
+ * android:title="TV-PG"
+ * android:description="@string/description_ustv_pg"
+ * android:ageHint="14">
+ * <sub-rating android:name="US_TV_D" />
+ * <sub-rating android:name="US_TV_L" />
+ * <sub-rating android:name="US_TV_S" />
+ * <sub-rating android:name="US_TV_V" />
* </rating-definition>
- * <rating-definition id="US_TV_14"
- * displayName="TV-14"
- * description="This program contains some material that many parents would find unsuitable for children under 14 years of age"
- * ageHint="14">
- * <sub-rating id="US_TV_D" />
- * <sub-rating id="US_TV_L" />
- * <sub-rating id="US_TV_S" />
- * <sub-rating id="US_TV_V" />
+ * <rating-definition android:name="US_TV_14"
+ * android:title="TV-14"
+ * android:description="@string/description_ustv_14"
+ * android:ageHint="14">
+ * <sub-rating android:name="US_TV_D" />
+ * <sub-rating android:name="US_TV_L" />
+ * <sub-rating android:name="US_TV_S" />
+ * <sub-rating android:name="US_TV_V" />
* </rating-definition>
- * <rating-definition id="US_TV_MA"
- * displayName="TV-MA"
- * description="This program is specifically designed to be viewed by adults and therefore may be unsuitable for children under 17"
- * ageHint="17">
- * <sub-rating id="US_TV_L" />
- * <sub-rating id="US_TV_S" />
- * <sub-rating id="US_TV_V" />
+ * <rating-definition android:name="US_TV_MA"
+ * android:title="TV-MA"
+ * android:description="@string/description_ustv_ma"
+ * android:ageHint="17">
+ * <sub-rating android:name="US_TV_L" />
+ * <sub-rating android:name="US_TV_S" />
+ * <sub-rating android:name="US_TV_V" />
* </rating-definition>
- * <order>
- * <rating id="US_TV_Y" />
- * <rating id="US_TV_Y7" />
- * </order>
- * <order>
- * <rating id="US_TV_G" />
- * <rating id="US_TV_PG" />
- * <rating id="US_TV_14" />
- * <rating id="US_TV_MA" />
- * </order>
+ * <rating-order>
+ * <rating android:name="US_TV_Y" />
+ * <rating android:name="US_TV_Y7" />
+ * </rating-order>
+ * <rating-order>
+ * <rating android:name="US_TV_G" />
+ * <rating android:name="US_TV_PG" />
+ * <rating android:name="US_TV_14" />
+ * <rating android:name="US_TV_MA" />
+ * </rating-order>
* </rating-system-definition>
* </rating-system-definitions>}</pre></p>
*
@@ -1506,10 +1507,6 @@ import java.util.Objects;
* </table>
*/
public final class TvContentRating {
- /** @hide */
- public static final Uri SYSTEM_CONTENT_RATING_SYSTEM_XML = Uri.parse(
- "android.resource://system/" + com.android.internal.R.xml.tv_content_rating_systems);
-
// TODO: Consider to use other DELIMITER. In some countries such as India may use this delimiter
// in the main ratings.
private static final String DELIMITER = "/";
diff --git a/packages/PrintSpooler/AndroidManifest.xml b/packages/PrintSpooler/AndroidManifest.xml
index 055587a..540a2f3 100644
--- a/packages/PrintSpooler/AndroidManifest.xml
+++ b/packages/PrintSpooler/AndroidManifest.xml
@@ -45,8 +45,7 @@
android:allowClearUserData="true"
android:label="@string/app_label"
android:allowBackup= "false"
- android:supportsRtl="true"
- android:icon="@drawable/ic_print">
+ android:supportsRtl="true">
<service
android:name=".model.PrintSpoolerService"
diff --git a/packages/PrintSpooler/res/drawable/ic_savetopdf.xml b/packages/PrintSpooler/res/drawable/ic_savetopdf.xml
deleted file mode 100644
index 60ed33a..0000000
--- a/packages/PrintSpooler/res/drawable/ic_savetopdf.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/ic_menu_savetopdf"
- android:tint="@color/promoted_action_background_color" />
diff --git a/packages/PrintSpooler/res/layout/print_activity_controls.xml b/packages/PrintSpooler/res/layout/print_activity_controls.xml
index 31bda7e..0629481 100644
--- a/packages/PrintSpooler/res/layout/print_activity_controls.xml
+++ b/packages/PrintSpooler/res/layout/print_activity_controls.xml
@@ -24,241 +24,215 @@
android:elevation="@dimen/preview_controls_elevation"
android:background="?android:attr/colorPrimary">
- <LinearLayout
- android:id="@+id/draggable_content"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical">
-
- <com.android.printspooler.widget.PrintOptionsLayout
- android:id="@+id/options_container"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- printspooler:columnCount="@integer/print_option_column_count">
-
- <LinearLayout
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginStart="16dip"
- android:layout_marginEnd="16dip"
- android:orientation="vertical">
-
- <!-- Copies -->
-
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginTop="8dip"
- android:layout_marginStart="12dip"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:labelFor="@+id/copies_edittext"
- android:text="@string/label_copies">
- </TextView>
-
- <view
- class="com.android.printspooler.widget.FirstFocusableEditText"
- android:id="@+id/copies_edittext"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- style="?android:attr/editTextStyle"
- android:singleLine="true"
- android:ellipsize="end"
- android:inputType="numberDecimal">
- </view>
-
- </LinearLayout>
-
- <LinearLayout
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginStart="16dip"
- android:layout_marginEnd="16dip"
- android:orientation="vertical">
-
- <!-- Paper size -->
-
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginTop="8dip"
- android:layout_marginStart="12dip"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:labelFor="@+id/paper_size_spinner"
- android:text="@string/label_paper_size">
- </TextView>
-
- <Spinner
- android:id="@+id/paper_size_spinner"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content">
- </Spinner>
-
- </LinearLayout>
-
- <LinearLayout
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginStart="16dip"
- android:layout_marginEnd="16dip"
- android:orientation="vertical">
-
- <!-- Color -->
-
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginTop="8dip"
- android:layout_marginStart="12dip"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:labelFor="@+id/color_spinner"
- android:text="@string/label_color">
- </TextView>
-
- <Spinner
- android:id="@+id/color_spinner"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content">
- </Spinner>
-
- </LinearLayout>
-
- <LinearLayout
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginStart="16dip"
- android:layout_marginEnd="16dip"
- android:orientation="vertical">
-
- <!-- Orientation -->
-
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginTop="8dip"
- android:layout_marginStart="12dip"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:labelFor="@+id/orientation_spinner"
- android:text="@string/label_orientation">
- </TextView>
-
- <Spinner
- android:id="@+id/orientation_spinner"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content">
- </Spinner>
-
- </LinearLayout>
-
- <LinearLayout
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginStart="16dip"
- android:layout_marginEnd="16dip"
- android:orientation="vertical">
-
- <!-- Range options -->
-
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginTop="8dip"
- android:layout_marginStart="12dip"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:labelFor="@+id/range_options_spinner"
- android:text="@string/label_pages">
- </TextView>
-
- <Spinner
- android:id="@+id/range_options_spinner"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content">
- </Spinner>
-
- </LinearLayout>
-
- <LinearLayout
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginStart="16dip"
- android:layout_marginEnd="16dip"
- android:orientation="vertical">
-
- <!-- Pages -->
-
- <TextView
- android:id="@+id/page_range_title"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginTop="8dip"
- android:layout_marginStart="12dip"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:text="@string/pages_range_example"
- android:labelFor="@+id/page_range_edittext"
- android:textAllCaps="false"
- android:visibility="visible">
- </TextView>
-
- <view
- class="com.android.printspooler.widget.FirstFocusableEditText"
- android:id="@+id/page_range_edittext"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_gravity="bottom|fill_horizontal"
- android:singleLine="true"
- android:ellipsize="end"
- android:visibility="visible"
- android:inputType="textNoSuggestions">
- </view>
-
- </LinearLayout>
-
- </com.android.printspooler.widget.PrintOptionsLayout>
-
- <!-- More options -->
-
- <LinearLayout
- android:id="@+id/more_options_container"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:paddingStart="28dip"
- android:paddingEnd="28dip"
- android:orientation="vertical"
- android:visibility="visible">
-
- <ImageView
- android:layout_width="fill_parent"
- android:layout_height="1dip"
- android:layout_gravity="fill_horizontal"
- android:background="?android:attr/colorControlNormal"
- android:contentDescription="@null">
- </ImageView>
-
- <Button
- android:id="@+id/more_options_button"
- style="?android:attr/borderlessButtonStyle"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_gravity="fill_horizontal"
- android:text="@string/more_options_button"
- android:gravity="start|center_vertical"
- android:textAllCaps="false">
- </Button>
-
- <ImageView
- android:layout_width="fill_parent"
- android:layout_height="1dip"
- android:layout_gravity="fill_horizontal"
- android:background="?android:attr/colorControlNormal"
- android:contentDescription="@null">
- </ImageView>
-
- </LinearLayout>
-
- </LinearLayout>
-
- <!-- Expand/collapse handle -->
-
- <FrameLayout
+ <LinearLayout
+ android:id="@+id/draggable_content"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical">
+
+ <com.android.printspooler.widget.PrintOptionsLayout
+ android:id="@+id/options_container"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ printspooler:columnCount="@integer/print_option_column_count">
+
+ <LinearLayout
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="16dip"
+ android:layout_marginEnd="16dip"
+ android:orientation="vertical">
+
+ <!-- Copies -->
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="8dip"
+ android:layout_marginStart="12dip"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:labelFor="@+id/copies_edittext"
+ android:text="@string/label_copies">
+ </TextView>
+
+ <view
+ class="com.android.printspooler.widget.FirstFocusableEditText"
+ android:id="@+id/copies_edittext"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ style="?android:attr/editTextStyle"
+ android:singleLine="true"
+ android:ellipsize="end"
+ android:inputType="numberDecimal">
+ </view>
+
+ </LinearLayout>
+
+ <LinearLayout
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="16dip"
+ android:layout_marginEnd="16dip"
+ android:orientation="vertical">
+
+ <!-- Paper size -->
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="8dip"
+ android:layout_marginStart="12dip"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:labelFor="@+id/paper_size_spinner"
+ android:text="@string/label_paper_size">
+ </TextView>
+
+ <Spinner
+ android:id="@+id/paper_size_spinner"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content">
+ </Spinner>
+
+ </LinearLayout>
+
+ <LinearLayout
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="16dip"
+ android:layout_marginEnd="16dip"
+ android:orientation="vertical">
+
+ <!-- Color -->
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="8dip"
+ android:layout_marginStart="12dip"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:labelFor="@+id/color_spinner"
+ android:text="@string/label_color">
+ </TextView>
+
+ <Spinner
+ android:id="@+id/color_spinner"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content">
+ </Spinner>
+
+ </LinearLayout>
+
+ <LinearLayout
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="16dip"
+ android:layout_marginEnd="16dip"
+ android:orientation="vertical">
+
+ <!-- Orientation -->
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="8dip"
+ android:layout_marginStart="12dip"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:labelFor="@+id/orientation_spinner"
+ android:text="@string/label_orientation">
+ </TextView>
+
+ <Spinner
+ android:id="@+id/orientation_spinner"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content">
+ </Spinner>
+
+ </LinearLayout>
+
+ <LinearLayout
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="16dip"
+ android:layout_marginEnd="16dip"
+ android:orientation="vertical">
+
+ <!-- Range options -->
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="8dip"
+ android:layout_marginStart="12dip"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:labelFor="@+id/range_options_spinner"
+ android:text="@string/label_pages">
+ </TextView>
+
+ <Spinner
+ android:id="@+id/range_options_spinner"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content">
+ </Spinner>
+
+ </LinearLayout>
+
+ <LinearLayout
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="16dip"
+ android:layout_marginEnd="16dip"
+ android:orientation="vertical">
+
+ <!-- Pages -->
+
+ <TextView
+ android:id="@+id/page_range_title"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="8dip"
+ android:layout_marginStart="12dip"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:text="@string/pages_range_example"
+ android:labelFor="@+id/page_range_edittext"
+ android:textAllCaps="false"
+ android:visibility="visible">
+ </TextView>
+
+ <view
+ class="com.android.printspooler.widget.FirstFocusableEditText"
+ android:id="@+id/page_range_edittext"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:layout_gravity="bottom|fill_horizontal"
+ android:singleLine="true"
+ android:ellipsize="end"
+ android:visibility="visible"
+ android:inputType="textNoSuggestions">
+ </view>
+
+ </LinearLayout>
+
+ </com.android.printspooler.widget.PrintOptionsLayout>
+
+ <!-- More options -->
+
+ <Button
+ android:id="@+id/more_options_button"
+ style="?android:attr/borderlessButtonStyle"
+ android:textColor="?android:attr/textColorPrimary"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="16dip"
+ android:layout_marginEnd="16dip"
+ android:text="@string/more_options_button"
+ android:gravity="start|center_vertical">
+ </Button>
+
+ </LinearLayout>
+
+ <!-- Expand/collapse handle -->
+
+ <FrameLayout
android:id="@+id/expand_collapse_handle"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
diff --git a/packages/PrintSpooler/res/layout/print_error_fragment.xml b/packages/PrintSpooler/res/layout/print_error_fragment.xml
index dc44339..3ea2abd 100644
--- a/packages/PrintSpooler/res/layout/print_error_fragment.xml
+++ b/packages/PrintSpooler/res/layout/print_error_fragment.xml
@@ -33,6 +33,9 @@
android:id="@+id/message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
+ android:layout_marginStart="16dip"
+ android:layout_marginEnd="16dip"
+ android:gravity="center_horizontal"
android:text="@string/print_error_default_message"
android:textAppearance="?android:attr/textAppearanceLargeInverse">
</TextView>
diff --git a/packages/PrintSpooler/src/com/android/printspooler/ui/PrintActivity.java b/packages/PrintSpooler/src/com/android/printspooler/ui/PrintActivity.java
index 6b29e5f..fe17516 100644
--- a/packages/PrintSpooler/src/com/android/printspooler/ui/PrintActivity.java
+++ b/packages/PrintSpooler/src/com/android/printspooler/ui/PrintActivity.java
@@ -180,8 +180,6 @@ public class PrintActivity extends Activity implements RemotePrintDocument.Updat
private TextView mSummaryCopies;
private TextView mSummaryPaperSize;
- private View mAdvancedPrintOptionsContainer;
-
private Button mMoreOptionsButton;
private ImageView mPrintButton;
@@ -1024,7 +1022,6 @@ public class PrintActivity extends Activity implements RemotePrintDocument.Updat
mPageRangeEditText.addTextChangedListener(new RangeTextWatcher());
// Advanced options button.
- mAdvancedPrintOptionsContainer = findViewById(R.id.more_options_container);
mMoreOptionsButton = (Button) findViewById(R.id.more_options_button);
mMoreOptionsButton.setOnClickListener(clickListener);
@@ -1294,10 +1291,10 @@ public class PrintActivity extends Activity implements RemotePrintDocument.Updat
ComponentName serviceName = mCurrentPrinter.getId().getServiceName();
if (!TextUtils.isEmpty(PrintOptionUtils.getAdvancedOptionsActivityName(
this, serviceName))) {
- mAdvancedPrintOptionsContainer.setVisibility(View.VISIBLE);
+ mMoreOptionsButton.setVisibility(View.VISIBLE);
mMoreOptionsButton.setEnabled(true);
} else {
- mAdvancedPrintOptionsContainer.setVisibility(View.GONE);
+ mMoreOptionsButton.setVisibility(View.GONE);
mMoreOptionsButton.setEnabled(false);
}
@@ -1704,7 +1701,7 @@ public class PrintActivity extends Activity implements RemotePrintDocument.Updat
if (position == 0 && getPdfPrinter() != null) {
PrinterHolder printerHolder = (PrinterHolder) getItem(position);
title = printerHolder.printer.getName();
- icon = getResources().getDrawable(R.drawable.ic_savetopdf);
+ icon = getResources().getDrawable(R.drawable.ic_menu_savetopdf);
} else if (position == 1) {
title = getString(R.string.all_printers);
}
@@ -1712,7 +1709,7 @@ public class PrintActivity extends Activity implements RemotePrintDocument.Updat
if (position == 1 && getPdfPrinter() != null) {
PrinterHolder printerHolder = (PrinterHolder) getItem(position);
title = printerHolder.printer.getName();
- icon = getResources().getDrawable(R.drawable.ic_savetopdf);
+ icon = getResources().getDrawable(R.drawable.ic_menu_savetopdf);
} else if (position == getCount() - 1) {
title = getString(R.string.all_printers);
} else {
diff --git a/packages/PrintSpooler/src/com/android/printspooler/widget/PrintContentView.java b/packages/PrintSpooler/src/com/android/printspooler/widget/PrintContentView.java
index efb030e..e428948 100644
--- a/packages/PrintSpooler/src/com/android/printspooler/widget/PrintContentView.java
+++ b/packages/PrintSpooler/src/com/android/printspooler/widget/PrintContentView.java
@@ -53,7 +53,7 @@ public final class PrintContentView extends ViewGroup implements View.OnClickLis
private View mDraggableContent;
private View mPrintButton;
- private ViewGroup mMoreOptionsContainer;
+ private View mMoreOptionsButton;
private ViewGroup mOptionsContainer;
private View mEmbeddedContentContainer;
@@ -140,7 +140,7 @@ public final class PrintContentView extends ViewGroup implements View.OnClickLis
mDynamicContent = findViewById(R.id.dynamic_content);
mDraggableContent = findViewById(R.id.draggable_content);
mPrintButton = findViewById(R.id.print_button);
- mMoreOptionsContainer = (ViewGroup) findViewById(R.id.more_options_container);
+ mMoreOptionsButton = findViewById(R.id.more_options_button);
mOptionsContainer = (ViewGroup) findViewById(R.id.options_container);
mEmbeddedContentContainer = findViewById(R.id.embedded_content_container);
mEmbeddedContentScrim = findViewById(R.id.embedded_content_scrim);
@@ -301,14 +301,14 @@ public final class PrintContentView extends ViewGroup implements View.OnClickLis
|| (mDragProgress == 1.0f && progress < 1.0f)) {
mSummaryContent.setLayerType(View.LAYER_TYPE_HARDWARE, null);
mDraggableContent.setLayerType(View.LAYER_TYPE_HARDWARE, null);
- mMoreOptionsContainer.setLayerType(View.LAYER_TYPE_HARDWARE, null);
+ mMoreOptionsButton.setLayerType(View.LAYER_TYPE_HARDWARE, null);
ensureImeClosedAndInputFocusCleared();
}
if ((mDragProgress > 0 && progress == 0)
|| (mDragProgress < 1.0f && progress == 1.0f)) {
mSummaryContent.setLayerType(View.LAYER_TYPE_NONE, null);
mDraggableContent.setLayerType(View.LAYER_TYPE_NONE, null);
- mMoreOptionsContainer.setLayerType(View.LAYER_TYPE_NONE, null);
+ mMoreOptionsButton.setLayerType(View.LAYER_TYPE_NONE, null);
}
mDragProgress = progress;
@@ -317,7 +317,7 @@ public final class PrintContentView extends ViewGroup implements View.OnClickLis
final float inverseAlpha = 1.0f - progress;
mOptionsContainer.setAlpha(inverseAlpha);
- mMoreOptionsContainer.setAlpha(inverseAlpha);
+ mMoreOptionsButton.setAlpha(inverseAlpha);
mEmbeddedContentScrim.setBackgroundColor(computeScrimColor());
@@ -336,8 +336,8 @@ public final class PrintContentView extends ViewGroup implements View.OnClickLis
if (mOptionsStateChangeListener != null) {
mOptionsStateChangeListener.onOptionsClosed();
}
- if (mMoreOptionsContainer.getVisibility() != View.GONE) {
- mMoreOptionsContainer.setVisibility(View.INVISIBLE);
+ if (mMoreOptionsButton.getVisibility() != View.GONE) {
+ mMoreOptionsButton.setVisibility(View.INVISIBLE);
}
mDraggableContent.setVisibility(View.INVISIBLE);
// If we change the scrim visibility the dimming is lagging
@@ -346,8 +346,8 @@ public final class PrintContentView extends ViewGroup implements View.OnClickLis
mEmbeddedContentScrim.setClickable(false);
mExpandCollapseIcon.setBackgroundResource(R.drawable.ic_expand_more);
} else {
- if (mMoreOptionsContainer.getVisibility() != View.GONE) {
- mMoreOptionsContainer.setVisibility(View.VISIBLE);
+ if (mMoreOptionsButton.getVisibility() != View.GONE) {
+ mMoreOptionsButton.setVisibility(View.VISIBLE);
}
mDraggableContent.setVisibility(View.VISIBLE);
}
diff --git a/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java b/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java
index 609ffda..c6aa30b 100644
--- a/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java
+++ b/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java
@@ -20,6 +20,7 @@ import android.app.AlarmManager;
import android.app.AppGlobals;
import android.app.PendingIntent;
import android.app.admin.DevicePolicyManagerInternal;
+import android.app.admin.DevicePolicyManagerInternal.OnCrossProfileWidgetProvidersChangeListener;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProviderInfo;
import android.content.BroadcastReceiver;
@@ -102,7 +103,8 @@ import java.util.Locale;
import java.util.Map;
import java.util.Set;
-class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBackupProvider {
+class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBackupProvider,
+ OnCrossProfileWidgetProvidersChangeListener {
private static final String TAG = "AppWidgetServiceImpl";
private static boolean DEBUG = false;
@@ -199,6 +201,7 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku
mSecurityPolicy = new SecurityPolicy();
computeMaximumWidgetBitmapMemory();
registerBroadcastReceiver();
+ registerOnCrossProfileProvidersChangedListener();
}
private void computeMaximumWidgetBitmapMemory() {
@@ -243,6 +246,15 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku
userFilter, null, null);
}
+ private void registerOnCrossProfileProvidersChangedListener() {
+ DevicePolicyManagerInternal devicePolicyManager = LocalServices.getService(
+ DevicePolicyManagerInternal.class);
+ // The device policy is an optional component.
+ if (devicePolicyManager != null) {
+ devicePolicyManager.addOnCrossProfileWidgetProvidersChangeListener(this);
+ }
+ }
+
public void setSafeMode(boolean safeMode) {
mSafeMode = safeMode;
}
@@ -368,7 +380,7 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku
saveGroupStateAsync(userId);
// If the set of providers has been modified, notify each active AppWidgetHost
- scheduleNotifyHostsForProvidersChangedLocked();
+ scheduleNotifyGroupHostsForProvidersChangedLocked(userId);
}
}
}
@@ -1657,11 +1669,27 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku
}
}
- private void scheduleNotifyHostsForProvidersChangedLocked() {
+ private void scheduleNotifyGroupHostsForProvidersChangedLocked(int userId) {
+ final int[] profileIds = mSecurityPolicy.getEnabledGroupProfileIds(userId);
+
final int N = mHosts.size();
for (int i = N - 1; i >= 0; i--) {
Host host = mHosts.get(i);
+ boolean hostInGroup = false;
+ final int M = profileIds.length;
+ for (int j = 0; j < M; j++) {
+ final int profileId = profileIds[j];
+ if (host.getUserId() == profileId) {
+ hostInGroup = true;
+ break;
+ }
+ }
+
+ if (!hostInGroup) {
+ continue;
+ }
+
if (host == null || host.zombie || host.callbacks == null) {
continue;
}
@@ -2617,6 +2645,9 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku
private void onUserStopped(int userId) {
synchronized (mLock) {
+ boolean providersChanged = false;
+ boolean crossProfileWidgetsChanged = false;
+
// Remove widgets that have both host and provider in the user.
final int widgetCount = mWidgets.size();
for (int i = widgetCount - 1; i >= 0; i--) {
@@ -2645,6 +2676,7 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku
for (int i = hostCount - 1; i >= 0; i--) {
Host host = mHosts.get(i);
if (host.getUserId() == userId) {
+ crossProfileWidgetsChanged |= !host.widgets.isEmpty();
deleteHostLocked(host);
}
}
@@ -2654,6 +2686,8 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku
for (int i = providerCount - 1; i >= 0; i--) {
Provider provider = mProviders.get(i);
if (provider.getUserId() == userId) {
+ crossProfileWidgetsChanged |= !provider.widgets.isEmpty();
+ providersChanged = true;
deleteProviderLocked(provider);
}
}
@@ -2678,6 +2712,17 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku
if (nextIdIndex >= 0) {
mNextAppWidgetIds.removeAt(nextIdIndex);
}
+
+ // Announce removed provider changes to all hosts in the group.
+ if (providersChanged) {
+ scheduleNotifyGroupHostsForProvidersChangedLocked(userId);
+ }
+
+ // Save state if removing a profile changed the group state.
+ // Nothing will be saved if the group parent was removed.
+ if (crossProfileWidgetsChanged) {
+ saveGroupStateAsync(userId);
+ }
}
}
@@ -2843,6 +2888,31 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku
}
}
+ @Override
+ public void onCrossProfileWidgetProvidersChanged(int userId, List<String> packages) {
+ final int parentId = mSecurityPolicy.getProfileParent(userId);
+ // We care only if the white-listed package is in a profile of
+ // the group parent as only the parent can add widgets from the
+ // profile and not the other way around.
+ if (parentId != userId) {
+ synchronized (mLock) {
+ boolean providersChanged = false;
+
+ final int packageCount = packages.size();
+ for (int i = 0; i < packageCount; i++) {
+ String packageName = packages.get(i);
+ providersChanged |= updateProvidersForPackageLocked(packageName,
+ userId, null);
+ }
+
+ if (providersChanged) {
+ saveGroupStateAsync(userId);
+ scheduleNotifyGroupHostsForProvidersChangedLocked(userId);
+ }
+ }
+ }
+ }
+
private final class CallbackHandler extends Handler {
public static final int MSG_NOTIFY_UPDATE_APP_WIDGET = 1;
public static final int MSG_NOTIFY_PROVIDER_CHANGED = 2;
diff --git a/services/backup/java/com/android/server/backup/BackupManagerService.java b/services/backup/java/com/android/server/backup/BackupManagerService.java
index 2e5d43f..b576324 100644
--- a/services/backup/java/com/android/server/backup/BackupManagerService.java
+++ b/services/backup/java/com/android/server/backup/BackupManagerService.java
@@ -34,7 +34,6 @@ import android.app.backup.IBackupManager;
import android.app.backup.IFullBackupRestoreObserver;
import android.app.backup.IRestoreObserver;
import android.app.backup.IRestoreSession;
-import android.app.job.JobParameters;
import android.content.ActivityNotFoundException;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
@@ -79,6 +78,7 @@ import android.os.storage.IMountService;
import android.provider.Settings;
import android.system.ErrnoException;
import android.system.Os;
+import android.util.ArrayMap;
import android.util.AtomicFile;
import android.util.EventLog;
import android.util.Log;
@@ -308,12 +308,13 @@ public class BackupManagerService extends IBackupManager.Stub {
volatile boolean mClearingData;
// Transport bookkeeping
- final HashMap<String,String> mTransportNames
- = new HashMap<String,String>(); // component name -> registration name
- final HashMap<String,IBackupTransport> mTransports
- = new HashMap<String,IBackupTransport>(); // registration name -> binder
- final ArrayList<TransportConnection> mTransportConnections
- = new ArrayList<TransportConnection>();
+ final Intent mTransportServiceIntent = new Intent(SERVICE_ACTION_TRANSPORT_HOST);
+ final ArrayMap<String,String> mTransportNames
+ = new ArrayMap<String,String>(); // component name -> registration name
+ final ArrayMap<String,IBackupTransport> mTransports
+ = new ArrayMap<String,IBackupTransport>(); // registration name -> binder
+ final ArrayMap<String,TransportConnection> mTransportConnections
+ = new ArrayMap<String,TransportConnection>();
String mCurrentTransport;
ActiveRestoreSession mActiveRestoreSession;
@@ -1064,9 +1065,8 @@ public class BackupManagerService extends IBackupManager.Stub {
if (DEBUG) Slog.v(TAG, "Starting with transport " + mCurrentTransport);
// Find transport hosts and bind to their services
- Intent transportServiceIntent = new Intent(SERVICE_ACTION_TRANSPORT_HOST);
List<ResolveInfo> hosts = mPackageManager.queryIntentServicesAsUser(
- transportServiceIntent, 0, UserHandle.USER_OWNER);
+ mTransportServiceIntent, 0, UserHandle.USER_OWNER);
if (DEBUG) {
Slog.v(TAG, "Found transports: " + ((hosts == null) ? "null" : hosts.size()));
}
@@ -1082,17 +1082,7 @@ public class BackupManagerService extends IBackupManager.Stub {
ServiceInfo info = hosts.get(i).serviceInfo;
PackageInfo packInfo = mPackageManager.getPackageInfo(info.packageName, 0);
if ((packInfo.applicationInfo.flags & ApplicationInfo.FLAG_PRIVILEGED) != 0) {
- ComponentName svcName = new ComponentName(info.packageName, info.name);
- if (DEBUG) {
- Slog.i(TAG, "Binding to transport host " + svcName);
- }
- Intent intent = new Intent(transportServiceIntent);
- intent.setComponent(svcName);
- TransportConnection connection = new TransportConnection();
- mTransportConnections.add(connection);
- context.bindServiceAsUser(intent,
- connection, Context.BIND_AUTO_CREATE,
- UserHandle.OWNER);
+ bindTransport(info);
} else {
Slog.w(TAG, "Transport package not privileged: " + info.packageName);
}
@@ -1752,6 +1742,7 @@ public class BackupManagerService extends IBackupManager.Stub {
String action = intent.getAction();
boolean replacing = false;
boolean added = false;
+ boolean rebind = false;
Bundle extras = intent.getExtras();
String pkgList[] = null;
if (Intent.ACTION_PACKAGE_ADDED.equals(action) ||
@@ -1764,7 +1755,7 @@ public class BackupManagerService extends IBackupManager.Stub {
if (pkgName != null) {
pkgList = new String[] { pkgName };
}
- added = Intent.ACTION_PACKAGE_ADDED.equals(action);
+ rebind = added = Intent.ACTION_PACKAGE_ADDED.equals(action);
replacing = extras.getBoolean(Intent.EXTRA_REPLACING, false);
} else if (Intent.ACTION_EXTERNAL_APPLICATIONS_AVAILABLE.equals(action)) {
added = true;
@@ -1797,6 +1788,20 @@ public class BackupManagerService extends IBackupManager.Stub {
enqueueFullBackup(packageName, now);
scheduleNextFullBackupJob();
}
+
+ // if this was the PACKAGE_ADDED conclusion of an upgrade of the package
+ // hosting one of our transports, we need to explicitly rebind now.
+ if (rebind) {
+ synchronized (mTransportConnections) {
+ final TransportConnection conn = mTransportConnections.get(packageName);
+ if (conn != null) {
+ if (DEBUG) {
+ Slog.i(TAG, "Transport package changed; rebinding");
+ }
+ bindTransport(conn.mTransport);
+ }
+ }
+ }
} catch (NameNotFoundException e) {
// doesn't really exist; ignore it
if (DEBUG) {
@@ -1804,6 +1809,7 @@ public class BackupManagerService extends IBackupManager.Stub {
}
}
}
+
} else {
if (replacing) {
// The package is being updated. We'll receive a PACKAGE_ADDED shortly.
@@ -1818,6 +1824,12 @@ public class BackupManagerService extends IBackupManager.Stub {
// ----- Track connection to transports service -----
class TransportConnection implements ServiceConnection {
+ ServiceInfo mTransport;
+
+ public TransportConnection(ServiceInfo transport) {
+ mTransport = transport;
+ }
+
@Override
public void onServiceConnected(ComponentName component, IBinder service) {
if (DEBUG) Slog.v(TAG, "Connected to transport " + component);
@@ -1841,6 +1853,32 @@ public class BackupManagerService extends IBackupManager.Stub {
}
};
+ void bindTransport(ServiceInfo transport) {
+ ComponentName svcName = new ComponentName(transport.packageName, transport.name);
+ if (DEBUG) {
+ Slog.i(TAG, "Binding to transport host " + svcName);
+ }
+ Intent intent = new Intent(mTransportServiceIntent);
+ intent.setComponent(svcName);
+
+ TransportConnection connection;
+ synchronized (mTransportConnections) {
+ connection = mTransportConnections.get(transport.packageName);
+ if (null == connection) {
+ connection = new TransportConnection(transport);
+ mTransportConnections.put(transport.packageName, connection);
+ } else {
+ // This is a rebind due to package upgrade. The service won't be
+ // automatically relaunched for us until we explicitly rebind, but
+ // we need to unbind the now-orphaned original connection.
+ mContext.unbindService(connection);
+ }
+ }
+ mContext.bindServiceAsUser(intent,
+ connection, Context.BIND_AUTO_CREATE,
+ UserHandle.OWNER);
+ }
+
// Add the backup agents in the given packages to our set of known backup participants.
// If 'packageNames' is null, adds all backup agents in the whole system.
void addPackageParticipantsLocked(String[] packageNames) {
diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java
index 491f5a6..96f8324 100644
--- a/services/core/java/com/android/server/ConnectivityService.java
+++ b/services/core/java/com/android/server/ConnectivityService.java
@@ -756,10 +756,20 @@ public class ConnectivityService extends IConnectivityManager.Stub {
return mNextNetworkRequestId++;
}
- private synchronized int nextNetId() {
- int netId = mNextNetId;
- if (++mNextNetId > MAX_NET_ID) mNextNetId = MIN_NET_ID;
- return netId;
+ private void assignNextNetId(NetworkAgentInfo nai) {
+ synchronized (mNetworkForNetId) {
+ for (int i = MIN_NET_ID; i <= MAX_NET_ID; i++) {
+ int netId = mNextNetId;
+ if (++mNextNetId > MAX_NET_ID) mNextNetId = MIN_NET_ID;
+ // Make sure NetID unused. http://b/16815182
+ if (mNetworkForNetId.get(netId) == null) {
+ nai.network = new Network(netId);
+ mNetworkForNetId.put(netId, nai);
+ return;
+ }
+ }
+ }
+ throw new IllegalStateException("No free netIds");
}
private int getConnectivityChangeDelay() {
@@ -1733,6 +1743,19 @@ public class ConnectivityService extends IConnectivityManager.Stub {
}
}
+ private boolean isLiveNetworkAgent(NetworkAgentInfo nai, String msg) {
+ final NetworkAgentInfo officialNai;
+ synchronized (mNetworkForNetId) {
+ officialNai = mNetworkForNetId.get(nai.network.netId);
+ }
+ if (officialNai != null && officialNai.equals(nai)) return true;
+ if (officialNai != null || VDBG) {
+ loge(msg + " - validateNetworkAgent found mismatched netId: " + officialNai +
+ " - " + nai);
+ }
+ return false;
+ }
+
// must be stateless - things change under us.
private class NetworkStateTrackerHandler extends Handler {
public NetworkStateTrackerHandler(Looper looper) {
@@ -1862,23 +1885,30 @@ public class ConnectivityService extends IConnectivityManager.Stub {
}
case NetworkMonitor.EVENT_NETWORK_VALIDATED: {
NetworkAgentInfo nai = (NetworkAgentInfo)msg.obj;
- handleConnectionValidated(nai);
+ if (isLiveNetworkAgent(nai, "EVENT_NETWORK_VALIDATED")) {
+ handleConnectionValidated(nai);
+ }
break;
}
case NetworkMonitor.EVENT_NETWORK_LINGER_COMPLETE: {
NetworkAgentInfo nai = (NetworkAgentInfo)msg.obj;
- handleLingerComplete(nai);
+ if (isLiveNetworkAgent(nai, "EVENT_NETWORK_LINGER_COMPLETE")) {
+ handleLingerComplete(nai);
+ }
break;
}
case NetworkMonitor.EVENT_PROVISIONING_NOTIFICATION: {
+ NetworkAgentInfo nai = null;
+ synchronized (mNetworkForNetId) {
+ nai = mNetworkForNetId.get(msg.arg2);
+ }
+ if (nai == null) {
+ loge("EVENT_PROVISIONING_NOTIFICATION from unknown NetworkMonitor");
+ break;
+ }
if (msg.arg1 == 0) {
setProvNotificationVisibleIntent(false, msg.arg2, 0, null, null);
} else {
- NetworkAgentInfo nai = mNetworkForNetId.get(msg.arg2);
- if (nai == null) {
- loge("EVENT_PROVISIONING_NOTIFICATION from unknown NetworkMonitor");
- break;
- }
setProvNotificationVisibleIntent(true, msg.arg2, nai.networkInfo.getType(),
nai.networkInfo.getExtraInfo(), (PendingIntent)msg.obj);
}
@@ -2089,13 +2119,21 @@ public class ConnectivityService extends IConnectivityManager.Stub {
if (newCap.satisfiedByNetworkCapabilities(network.networkCapabilities)) {
if (VDBG) log("apparently satisfied. currentScore=" + network.currentScore);
if ((bestNetwork == null) || bestNetwork.currentScore < network.currentScore) {
- bestNetwork = network;
+ if (!nri.isRequest) {
+ // Not setting bestNetwork here as a listening NetworkRequest may be
+ // satisfied by multiple Networks. Instead the request is added to
+ // each satisfying Network and notified about each.
+ network.addRequest(nri.request);
+ notifyNetworkCallback(network, nri);
+ } else {
+ bestNetwork = network;
+ }
}
}
}
if (bestNetwork != null) {
if (VDBG) log("using " + bestNetwork.name());
- if (nri.isRequest && bestNetwork.networkInfo.isConnected()) {
+ if (bestNetwork.networkInfo.isConnected()) {
// Cancel any lingering so the linger timeout doesn't teardown this network
// even though we have a request for it.
bestNetwork.networkLingered.clear();
@@ -2105,7 +2143,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {
mNetworkForRequestId.put(nri.request.requestId, bestNetwork);
notifyNetworkCallback(bestNetwork, nri);
score = bestNetwork.currentScore;
- if (nri.isRequest && nri.request.legacyType != TYPE_NONE) {
+ if (nri.request.legacyType != TYPE_NONE) {
mLegacyTypeTracker.add(nri.request.legacyType, bestNetwork);
}
}
@@ -4121,7 +4159,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {
int currentScore, NetworkMisc networkMisc) {
enforceConnectivityInternalPermission();
- NetworkAgentInfo nai = new NetworkAgentInfo(messenger, new AsyncChannel(), nextNetId(),
+ NetworkAgentInfo nai = new NetworkAgentInfo(messenger, new AsyncChannel(),
new NetworkInfo(networkInfo), new LinkProperties(linkProperties),
new NetworkCapabilities(networkCapabilities), currentScore, mContext, mTrackerHandler,
networkMisc);
@@ -4135,9 +4173,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {
private void handleRegisterNetworkAgent(NetworkAgentInfo na) {
if (VDBG) log("Got NetworkAgent Messenger");
mNetworkAgentInfos.put(na.messenger, na);
- synchronized (mNetworkForNetId) {
- mNetworkForNetId.put(na.network.netId, na);
- }
+ assignNextNetId(na);
na.asyncChannel.connect(mContext, mTrackerHandler, na.messenger);
NetworkInfo networkInfo = na.networkInfo;
na.networkInfo = null;
@@ -4403,6 +4439,10 @@ public class ConnectivityService extends IConnectivityManager.Stub {
if (VDBG) log(" checking if request is satisfied: " + nri.request);
if (nri.request.networkCapabilities.satisfiedByNetworkCapabilities(
newNetwork.networkCapabilities)) {
+ if (!nri.isRequest) {
+ newNetwork.addRequest(nri.request);
+ continue;
+ }
// next check if it's better than any current network we're using for
// this request
if (VDBG) {
diff --git a/services/core/java/com/android/server/connectivity/NetworkAgentInfo.java b/services/core/java/com/android/server/connectivity/NetworkAgentInfo.java
index 4eb2ef1..5a97aee 100644
--- a/services/core/java/com/android/server/connectivity/NetworkAgentInfo.java
+++ b/services/core/java/com/android/server/connectivity/NetworkAgentInfo.java
@@ -40,7 +40,7 @@ import java.util.ArrayList;
*/
public class NetworkAgentInfo {
public NetworkInfo networkInfo;
- public final Network network;
+ public Network network;
public LinkProperties linkProperties;
public NetworkCapabilities networkCapabilities;
public int currentScore;
@@ -55,12 +55,12 @@ public class NetworkAgentInfo {
public final Messenger messenger;
public final AsyncChannel asyncChannel;
- public NetworkAgentInfo(Messenger messenger, AsyncChannel ac, int netId, NetworkInfo info,
+ public NetworkAgentInfo(Messenger messenger, AsyncChannel ac, NetworkInfo info,
LinkProperties lp, NetworkCapabilities nc, int score, Context context, Handler handler,
NetworkMisc misc) {
this.messenger = messenger;
asyncChannel = ac;
- network = new Network(netId);
+ network = null;
networkInfo = info;
linkProperties = lp;
networkCapabilities = nc;
@@ -87,6 +87,7 @@ public class NetworkAgentInfo {
public String name() {
return "NetworkAgentInfo [" + networkInfo.getTypeName() + " (" +
- networkInfo.getSubtypeName() + ") - " + network.toString() + "]";
+ networkInfo.getSubtypeName() + ") - " +
+ (network == null ? "null" : network.toString()) + "]";
}
}
diff --git a/services/core/java/com/android/server/connectivity/NetworkMonitor.java b/services/core/java/com/android/server/connectivity/NetworkMonitor.java
index 5057994..b09298c 100644
--- a/services/core/java/com/android/server/connectivity/NetworkMonitor.java
+++ b/services/core/java/com/android/server/connectivity/NetworkMonitor.java
@@ -272,23 +272,22 @@ public class NetworkMonitor extends StateMachine {
case CMD_NETWORK_LINGER:
if (DBG) log("Lingering");
transitionTo(mLingeringState);
- break;
+ return HANDLED;
case CMD_NETWORK_CONNECTED:
if (DBG) log("Connected");
transitionTo(mEvaluatingState);
- break;
+ return HANDLED;
case CMD_NETWORK_DISCONNECTED:
if (DBG) log("Disconnected - quitting");
quit();
- break;
+ return HANDLED;
case CMD_FORCE_REEVALUATION:
if (DBG) log("Forcing reevaluation");
transitionTo(mEvaluatingState);
- break;
+ return HANDLED;
default:
- break;
+ return HANDLED;
}
- return HANDLED;
}
}
@@ -314,11 +313,10 @@ public class NetworkMonitor extends StateMachine {
switch (message.what) {
case CMD_NETWORK_CONNECTED:
transitionTo(mValidatedState);
- break;
+ return HANDLED;
default:
return NOT_HANDLED;
}
- return HANDLED;
}
}
@@ -347,23 +345,25 @@ public class NetworkMonitor extends StateMachine {
switch (message.what) {
case CMD_REEVALUATE:
if (message.arg1 != mReevaluateToken)
- break;
+ return HANDLED;
if (mNetworkAgentInfo.isVPN()) {
transitionTo(mValidatedState);
+ return HANDLED;
}
// If network provides no internet connectivity adjust evaluation.
if (!mNetworkAgentInfo.networkCapabilities.hasCapability(
NetworkCapabilities.NET_CAPABILITY_INTERNET)) {
// TODO: Try to verify something works. Do all gateways respond to pings?
transitionTo(mValidatedState);
+ return HANDLED;
}
// Kick off a thread to perform internet connectivity evaluation.
Thread thread = new EvaluateInternetConnectivity(mReevaluateToken);
thread.run();
- break;
+ return HANDLED;
case EVENT_REEVALUATION_COMPLETE:
if (message.arg1 != mReevaluateToken)
- break;
+ return HANDLED;
int httpResponseCode = message.arg2;
if (httpResponseCode == 204) {
transitionTo(mValidatedState);
@@ -375,11 +375,10 @@ public class NetworkMonitor extends StateMachine {
Message msg = obtainMessage(CMD_REEVALUATE, ++mReevaluateToken, 0);
sendMessageDelayed(msg, mReevaluateDelayMs);
}
- break;
+ return HANDLED;
default:
return NOT_HANDLED;
}
- return HANDLED;
}
}
@@ -432,17 +431,16 @@ public class NetworkMonitor extends StateMachine {
switch (message.what) {
case EVENT_APP_BYPASSED_CAPTIVE_PORTAL:
transitionTo(mValidatedState);
- break;
+ return HANDLED;
case EVENT_APP_INDICATES_SIGN_IN_IMPOSSIBLE:
transitionTo(mOfflineState);
- break;
+ return HANDLED;
case EVENT_NO_APP_RESPONSE:
transitionTo(mUserPromptedState);
- break;
+ return HANDLED;
default:
return NOT_HANDLED;
}
- return HANDLED;
}
public void exit() {
mReceiver.cancel();
@@ -488,13 +486,12 @@ public class NetworkMonitor extends StateMachine {
switch (message.what) {
case CMD_USER_WANTS_SIGN_IN:
if (message.arg1 != mUserPromptedToken)
- break;
+ return HANDLED;
transitionTo(mInteractiveAppsPromptedState);
- break;
+ return HANDLED;
default:
return NOT_HANDLED;
}
- return HANDLED;
}
@Override
@@ -520,17 +517,16 @@ public class NetworkMonitor extends StateMachine {
switch (message.what) {
case EVENT_APP_BYPASSED_CAPTIVE_PORTAL:
transitionTo(mValidatedState);
- break;
+ return HANDLED;
case EVENT_APP_INDICATES_SIGN_IN_IMPOSSIBLE:
transitionTo(mOfflineState);
- break;
+ return HANDLED;
case EVENT_NO_APP_RESPONSE:
transitionTo(mCaptivePortalState);
- break;
+ return HANDLED;
default:
return NOT_HANDLED;
}
- return HANDLED;
}
public void exit() {
mReceiver.cancel();
@@ -581,18 +577,17 @@ public class NetworkMonitor extends StateMachine {
switch (message.what) {
case CMD_CAPTIVE_PORTAL_LOGGED_IN:
if (message.arg1 != mCaptivePortalLoggedInToken)
- break;
+ return HANDLED;
if (message.arg2 == 0) {
// TODO: Should teardown network.
transitionTo(mOfflineState);
} else {
transitionTo(mValidatedState);
}
- break;
+ return HANDLED;
default:
return NOT_HANDLED;
}
- return HANDLED;
}
@Override
@@ -616,17 +611,16 @@ public class NetworkMonitor extends StateMachine {
case CMD_NETWORK_CONNECTED:
// Go straight to active as we've already evaluated.
transitionTo(mValidatedState);
- break;
+ return HANDLED;
case CMD_LINGER_EXPIRED:
if (message.arg1 != mLingerToken)
- break;
+ return HANDLED;
mConnectivityServiceHandler.sendMessage(
obtainMessage(EVENT_NETWORK_LINGER_COMPLETE, mNetworkAgentInfo));
- break;
+ return HANDLED;
default:
return NOT_HANDLED;
}
- return HANDLED;
}
}
diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java
index b43ad1b..a12e4fc 100644
--- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java
+++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java
@@ -691,6 +691,7 @@ abstract class HdmiCecLocalDevice {
mActiveSource.logicalAddress = logicalAddress;
mActiveSource.physicalAddress = physicalAddress;
}
+ mService.setLastInputForMhl(Constants.INVALID_PORT_ID);
}
int getActivePath() {
diff --git a/services/core/java/com/android/server/hdmi/HdmiControlService.java b/services/core/java/com/android/server/hdmi/HdmiControlService.java
index 5b99f14..888ceec 100644
--- a/services/core/java/com/android/server/hdmi/HdmiControlService.java
+++ b/services/core/java/com/android/server/hdmi/HdmiControlService.java
@@ -243,6 +243,9 @@ public final class HdmiControlService extends SystemService {
// Map from port ID to HdmiPortInfo.
private UnmodifiableSparseArray<HdmiPortInfo> mPortInfoMap;
+ // Map from port ID to HdmiDeviceInfo.
+ private UnmodifiableSparseArray<HdmiDeviceInfo> mPortDeviceMap;
+
private HdmiCecMessageValidator mMessageValidator;
private final HdmiControlBroadcastReceiver
@@ -263,6 +266,12 @@ public final class HdmiControlService extends SystemService {
@ServiceThreadOnly
private int mActivePortId = Constants.INVALID_PORT_ID;
+ // Last input port before switching to the MHL port by way of incoming request RAP[ContentOn].
+ // Should switch back to this port when the device sends RAP[ContentOff].
+ // Gets invalidated if we go to other port/input.
+ @ServiceThreadOnly
+ private int mLastInputMhl = Constants.INVALID_PORT_ID;
+
public HdmiControlService(Context context) {
super(context);
mLocalDevices = getIntList(SystemProperties.get(Constants.PROPERTY_DEVICE_TYPE));
@@ -474,12 +483,15 @@ public final class HdmiControlService extends SystemService {
SparseArray<HdmiPortInfo> portInfoMap = new SparseArray<>();
SparseIntArray portIdMap = new SparseIntArray();
+ SparseArray<HdmiDeviceInfo> portDeviceMap = new SparseArray<>();
for (HdmiPortInfo info : cecPortInfo) {
portIdMap.put(info.getAddress(), info.getId());
portInfoMap.put(info.getId(), info);
+ portDeviceMap.put(info.getId(), new HdmiDeviceInfo(info.getAddress(), info.getId()));
}
mPortIdMap = new UnmodifiableSparseIntArray(portIdMap);
mPortInfoMap = new UnmodifiableSparseArray<>(portInfoMap);
+ mPortDeviceMap = new UnmodifiableSparseArray<>(portDeviceMap);
if (mMhlController == null) {
mPortInfo = Collections.unmodifiableList(Arrays.asList(cecPortInfo));
@@ -1020,6 +1032,10 @@ public final class HdmiControlService extends SystemService {
if (mMhlController != null) {
HdmiMhlLocalDevice device = mMhlController.getLocalDeviceById(deviceId);
if (device != null) {
+ if (device.getPortId() == tv.getActivePortId()) {
+ invokeCallback(callback, HdmiControlManager.RESULT_SUCCESS);
+ return;
+ }
// Upon selecting MHL device, we send RAP[Content On] to wake up
// the connected mobile device, start routing control to switch ports.
// callback is handled by MHL action.
@@ -1838,9 +1854,60 @@ public final class HdmiControlService extends SystemService {
void setActivePortId(int portId) {
assertRunOnServiceThread();
mActivePortId = portId;
+
+ // Resets last input for MHL, which stays valid only after the MHL device was selected,
+ // and no further switching is done.
+ setLastInputForMhl(Constants.INVALID_PORT_ID);
+ }
+
+ @ServiceThreadOnly
+ void setLastInputForMhl(int portId) {
+ assertRunOnServiceThread();
+ mLastInputMhl = portId;
+ }
+
+ @ServiceThreadOnly
+ int getLastInputForMhl() {
+ assertRunOnServiceThread();
+ return mLastInputMhl;
+ }
+
+ /**
+ * Performs input change, routing control for MHL device.
+ *
+ * @param portId MHL port, or the last port to go back to if {@code contentOn} is false
+ * @param contentOn {@code true} if RAP data is content on; otherwise false
+ */
+ @ServiceThreadOnly
+ void changeInputForMhl(int portId, boolean contentOn) {
+ assertRunOnServiceThread();
+ final int lastInput = contentOn ? tv().getActivePortId() : Constants.INVALID_PORT_ID;
+ tv().doManualPortSwitching(portId, new IHdmiControlCallback.Stub() {
+ @Override
+ public void onComplete(int result) throws RemoteException {
+ // Keep the last input to switch back later when RAP[ContentOff] is received.
+ // This effectively sets the port to invalid one if the switching is for
+ // RAP[ContentOff].
+ setLastInputForMhl(lastInput);
+ }
+ });
+
+ // MHL device is always directly connected to the port. Update the active port ID to avoid
+ // unnecessary post-routing control task.
+ tv().setActivePortId(portId);
+
+ // The port is either the MHL-enabled port where the mobile device is connected, or
+ // the last port to go back to when RAP[ContentOff] is received. Note that the last port
+ // may not be the MHL-enabled one. In this case the device info to be passed to
+ // input change listener should be the one describing the corresponding HDMI port.
+ HdmiMhlLocalDevice device = mMhlController.getLocalDevice(portId);
+ HdmiDeviceInfo info = (device != null && device.getInfo() != null)
+ ? device.getInfo()
+ : mPortDeviceMap.get(portId);
+ invokeInputChangeListener(info);
}
- void setMhlInputChangeEnabled(boolean enabled) {
+ void setMhlInputChangeEnabled(boolean enabled) {
if (mMhlController != null) {
mMhlController.setOption(OPTION_MHL_INPUT_SWITCHING, toInt(enabled));
}
diff --git a/services/core/java/com/android/server/tv/TvInputManagerService.java b/services/core/java/com/android/server/tv/TvInputManagerService.java
index a084cab..6481944 100644
--- a/services/core/java/com/android/server/tv/TvInputManagerService.java
+++ b/services/core/java/com/android/server/tv/TvInputManagerService.java
@@ -283,7 +283,6 @@ public final class TvInputManagerService extends SystemService {
userState.inputMap = inputMap;
userState.ratingSystemXmlUriSet.clear();
- userState.ratingSystemXmlUriSet.add(TvContentRating.SYSTEM_CONTENT_RATING_SYSTEM_XML);
for (TvInputState state : userState.inputMap.values()) {
Uri ratingSystemXmlUri = state.mInfo.getRatingSystemXmlUri();
if (ratingSystemXmlUri != null) {
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
index 02f8bd5..21ba31e 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
@@ -165,6 +165,8 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
final UserManager mUserManager;
final PowerManager.WakeLock mWakeLock;
+ final LocalService mLocalService;
+
IPowerManager mIPowerManager;
IWindowManager mIWindowManager;
NotificationManager mNotificationManager;
@@ -790,6 +792,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
PackageManager.FEATURE_DEVICE_ADMIN);
mWakeLock = ((PowerManager)context.getSystemService(Context.POWER_SERVICE))
.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "DPM");
+ mLocalService = new LocalService();
if (!mHasFeature) {
// Skip the rest of the initialization
return;
@@ -810,7 +813,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
filter.addDataScheme("package");
context.registerReceiverAsUser(mReceiver, UserHandle.ALL, filter, null, mHandler);
- LocalServices.addService(DevicePolicyManagerInternal.class, new LocalService());
+ LocalServices.addService(DevicePolicyManagerInternal.class, mLocalService);
}
/**
@@ -1899,44 +1902,71 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
@Override
public boolean addCrossProfileWidgetProvider(ComponentName admin, String packageName) {
- ActiveAdmin activeAdmin = getActiveAdminForCallerLocked(admin,
- DeviceAdminInfo.USES_POLICY_PROFILE_OWNER);
- if (activeAdmin.crossProfileWidgetProviders == null) {
- activeAdmin.crossProfileWidgetProviders = new ArrayList<>();
+ final int userId = UserHandle.getCallingUserId();
+ List<String> changedProviders = null;
+
+ synchronized (this) {
+ ActiveAdmin activeAdmin = getActiveAdminForCallerLocked(admin,
+ DeviceAdminInfo.USES_POLICY_PROFILE_OWNER);
+ if (activeAdmin.crossProfileWidgetProviders == null) {
+ activeAdmin.crossProfileWidgetProviders = new ArrayList<>();
+ }
+ List<String> providers = activeAdmin.crossProfileWidgetProviders;
+ if (!providers.contains(packageName)) {
+ providers.add(packageName);
+ changedProviders = new ArrayList<>(providers);
+ saveSettingsLocked(userId);
+ }
}
- if (activeAdmin.crossProfileWidgetProviders.add(packageName)) {
- saveSettingsLocked(UserHandle.getCallingUserId());
+
+ if (changedProviders != null) {
+ mLocalService.notifyCrossProfileProvidersChanged(userId, changedProviders);
return true;
}
+
return false;
}
@Override
public boolean removeCrossProfileWidgetProvider(ComponentName admin, String packageName) {
- ActiveAdmin activeAdmin = getActiveAdminForCallerLocked(admin,
- DeviceAdminInfo.USES_POLICY_PROFILE_OWNER);
- if (activeAdmin.crossProfileWidgetProviders == null) {
- return false;
+ final int userId = UserHandle.getCallingUserId();
+ List<String> changedProviders = null;
+
+ synchronized (this) {
+ ActiveAdmin activeAdmin = getActiveAdminForCallerLocked(admin,
+ DeviceAdminInfo.USES_POLICY_PROFILE_OWNER);
+ if (activeAdmin.crossProfileWidgetProviders == null) {
+ return false;
+ }
+ List<String> providers = activeAdmin.crossProfileWidgetProviders;
+ if (providers.remove(packageName)) {
+ changedProviders = new ArrayList<>(providers);
+ saveSettingsLocked(userId);
+ }
}
- if (activeAdmin.crossProfileWidgetProviders.remove(packageName)) {
- saveSettingsLocked(UserHandle.getCallingUserId());
+
+ if (changedProviders != null) {
+ mLocalService.notifyCrossProfileProvidersChanged(userId, changedProviders);
return true;
}
+
return false;
}
@Override
public List<String> getCrossProfileWidgetProviders(ComponentName admin) {
- ActiveAdmin activeAdmin = getActiveAdminForCallerLocked(admin,
- DeviceAdminInfo.USES_POLICY_PROFILE_OWNER);
- if (activeAdmin.crossProfileWidgetProviders == null
- || activeAdmin.crossProfileWidgetProviders.isEmpty()) {
- return null;
- }
- if (Binder.getCallingUid() == Process.myUid()) {
- return new ArrayList<>(activeAdmin.crossProfileWidgetProviders);
- } else {
- return activeAdmin.crossProfileWidgetProviders;
+ synchronized (this) {
+ ActiveAdmin activeAdmin = getActiveAdminForCallerLocked(admin,
+ DeviceAdminInfo.USES_POLICY_PROFILE_OWNER);
+ if (activeAdmin.crossProfileWidgetProviders == null
+ || activeAdmin.crossProfileWidgetProviders.isEmpty()) {
+ return null;
+ }
+ if (Binder.getCallingUid() == Process.myUid()) {
+ return new ArrayList<>(activeAdmin.crossProfileWidgetProviders);
+ } else {
+ return activeAdmin.crossProfileWidgetProviders;
+ }
}
}
@@ -4674,26 +4704,51 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
}
private final class LocalService extends DevicePolicyManagerInternal {
+ private List<OnCrossProfileWidgetProvidersChangeListener> mWidgetProviderListeners;
+
@Override
public List<String> getCrossProfileWidgetProviders(int profileId) {
- ComponentName ownerComponent = mDeviceOwner.getProfileOwnerComponent(profileId);
- if (ownerComponent == null) {
- return Collections.emptyList();
- }
+ synchronized (DevicePolicyManagerService.this) {
+ ComponentName ownerComponent = mDeviceOwner.getProfileOwnerComponent(profileId);
+ if (ownerComponent == null) {
+ return Collections.emptyList();
+ }
- DevicePolicyData policy = getUserData(profileId);
- ActiveAdmin admin = policy.mAdminMap.get(ownerComponent);
+ DevicePolicyData policy = getUserData(profileId);
+ ActiveAdmin admin = policy.mAdminMap.get(ownerComponent);
- if (admin == null) {
- return Collections.emptyList();
+ if (admin == null || admin.crossProfileWidgetProviders == null
+ || admin.crossProfileWidgetProviders.isEmpty()) {
+ return Collections.emptyList();
+ }
+
+ return admin.crossProfileWidgetProviders;
}
+ }
- if (admin.crossProfileWidgetProviders == null
- || admin.crossProfileWidgetProviders.isEmpty()) {
- return Collections.emptyList();
+ @Override
+ public void addOnCrossProfileWidgetProvidersChangeListener(
+ OnCrossProfileWidgetProvidersChangeListener listener) {
+ synchronized (DevicePolicyManagerService.this) {
+ if (mWidgetProviderListeners == null) {
+ mWidgetProviderListeners = new ArrayList<>();
+ }
+ if (!mWidgetProviderListeners.contains(listener)) {
+ mWidgetProviderListeners.add(listener);
+ }
}
+ }
- return admin.crossProfileWidgetProviders;
+ private void notifyCrossProfileProvidersChanged(int userId, List<String> packages) {
+ final List<OnCrossProfileWidgetProvidersChangeListener> listeners;
+ synchronized (DevicePolicyManagerService.this) {
+ listeners = new ArrayList<>(mWidgetProviderListeners);
+ }
+ final int listenerCount = listeners.size();
+ for (int i = 0; i < listenerCount; i++) {
+ OnCrossProfileWidgetProvidersChangeListener listener = listeners.get(i);
+ listener.onCrossProfileWidgetProvidersChanged(userId, packages);
+ }
}
}
}
diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java
index 0eb170c..71b796a 100644
--- a/telephony/java/android/telephony/TelephonyManager.java
+++ b/telephony/java/android/telephony/TelephonyManager.java
@@ -3056,6 +3056,42 @@ public class TelephonyManager {
/** @hide */
@SystemApi
+ public String getCdmaMdn() {
+ return getCdmaMdn(getDefaultSubscription());
+ }
+
+ /** @hide */
+ @SystemApi
+ public String getCdmaMdn(long subId) {
+ try {
+ return getITelephony().getCdmaMdn(subId);
+ } catch (RemoteException ex) {
+ return null;
+ } catch (NullPointerException ex) {
+ return null;
+ }
+ }
+
+ /** @hide */
+ @SystemApi
+ public String getCdmaMin() {
+ return getCdmaMin(getDefaultSubscription());
+ }
+
+ /** @hide */
+ @SystemApi
+ public String getCdmaMin(long subId) {
+ try {
+ return getITelephony().getCdmaMin(subId);
+ } catch (RemoteException ex) {
+ return null;
+ } catch (NullPointerException ex) {
+ return null;
+ }
+ }
+
+ /** @hide */
+ @SystemApi
public int checkCarrierPrivilegesForPackage(String pkgname) {
try {
return getITelephony().checkCarrierPrivilegesForPackage(pkgname);
diff --git a/telephony/java/com/android/internal/telephony/ITelephony.aidl b/telephony/java/com/android/internal/telephony/ITelephony.aidl
index d256f9d..22c09f0 100644
--- a/telephony/java/com/android/internal/telephony/ITelephony.aidl
+++ b/telephony/java/com/android/internal/telephony/ITelephony.aidl
@@ -677,6 +677,18 @@ interface ITelephony {
void setImsRegistrationState(boolean registered);
/**
+ * Return MDN string for CDMA phone.
+ * @param subId user preferred subId.
+ */
+ String getCdmaMdn(long subId);
+
+ /**
+ * Return MIN string for CDMA phone.
+ * @param subId user preferred subId.
+ */
+ String getCdmaMin(long subId);
+
+ /**
* Has the calling application been granted special privileges by the carrier.
*
* If any of the packages in the calling UID has carrier privileges, the