Merge "Show enter PIN/PUK before notifications on Keyguard."
diff --git a/api/current.txt b/api/current.txt
index ffc7ad4..9edc6d3 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -382,6 +382,7 @@
field public static final int codes = 16843330; // 0x1010242
field public static final int collapseColumns = 16843083; // 0x101014b
field public static final int color = 16843173; // 0x10101a5
+ field public static final int colorAccent = 16843842; // 0x1010442
field public static final int colorActivatedHighlight = 16843664; // 0x1010390
field public static final int colorBackground = 16842801; // 0x1010031
field public static final int colorBackgroundCacheHint = 16843435; // 0x10102ab
@@ -397,6 +398,9 @@
field public static final int colorLongPressedHighlight = 16843662; // 0x101038e
field public static final int colorMultiSelectHighlight = 16843665; // 0x1010391
field public static final int colorPressedHighlight = 16843661; // 0x101038d
+ field public static final int colorPrimary = 16843840; // 0x1010440
+ field public static final int colorPrimaryDark = 16843841; // 0x1010441
+ field public static final int colorPrimaryLight = 16843839; // 0x101043f
field public static final int columnCount = 16843639; // 0x1010377
field public static final int columnDelay = 16843215; // 0x10101cf
field public static final int columnOrderPreserved = 16843640; // 0x1010378
@@ -6467,6 +6471,7 @@
field public static final java.lang.String ALARM_SERVICE = "alarm";
field public static final java.lang.String APP_OPS_SERVICE = "appops";
field public static final java.lang.String AUDIO_SERVICE = "audio";
+ field public static final java.lang.String BATTERY_SERVICE = "batterymanager";
field public static final int BIND_ABOVE_CLIENT = 8; // 0x8
field public static final int BIND_ADJUST_WITH_ACTIVITY = 128; // 0x80
field public static final int BIND_ALLOW_OOM_MANAGEMENT = 16; // 0x10
@@ -18977,6 +18982,7 @@
public class BatteryManager {
ctor public BatteryManager();
+ method public android.os.BatteryProperty getProperty(int) throws android.os.RemoteException;
field public static final int BATTERY_HEALTH_COLD = 7; // 0x7
field public static final int BATTERY_HEALTH_DEAD = 4; // 0x4
field public static final int BATTERY_HEALTH_GOOD = 2; // 0x2
@@ -19004,6 +19010,18 @@
field public static final java.lang.String EXTRA_VOLTAGE = "voltage";
}
+ public class BatteryProperty implements android.os.Parcelable {
+ method public int describeContents();
+ method public int getInt();
+ method public void readFromParcel(android.os.Parcel);
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final int CAPACITY = 4; // 0x4
+ field public static final int CHARGE_COUNTER = 1; // 0x1
+ field public static final android.os.Parcelable.Creator CREATOR;
+ field public static final int CURRENT_AVERAGE = 3; // 0x3
+ field public static final int CURRENT_NOW = 2; // 0x2
+ }
+
public class Binder implements android.os.IBinder {
ctor public Binder();
method public void attachInterface(android.os.IInterface, java.lang.String);
@@ -19084,6 +19102,7 @@
field public static final int JELLY_BEAN_MR1 = 17; // 0x11
field public static final int JELLY_BEAN_MR2 = 18; // 0x12
field public static final int KITKAT = 19; // 0x13
+ field public static final int KITKAT_WATCH = 10000; // 0x2710
field public static final int L = 10000; // 0x2710
}
@@ -25184,6 +25203,18 @@
field public static final android.os.Parcelable.Creator CREATOR;
}
+ public class DataConnectionRealTimeInfo implements android.os.Parcelable {
+ method public int describeContents();
+ method public int getDcPowerState();
+ method public long getTime();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator CREATOR;
+ field public static int DC_POWER_STATE_HIGH;
+ field public static int DC_POWER_STATE_LOW;
+ field public static int DC_POWER_STATE_MEDIUM;
+ field public static int DC_POWER_STATE_UNKNOWN;
+ }
+
public class NeighboringCellInfo implements android.os.Parcelable {
ctor public deprecated NeighboringCellInfo();
ctor public deprecated NeighboringCellInfo(int, int);
@@ -27817,14 +27848,6 @@
method public abstract boolean onTune(android.net.Uri);
}
- public abstract class TvInputSession {
- ctor public TvInputSession();
- method public void release();
- method public void setSurface(android.view.Surface);
- method public void setVolume(float);
- method public void tune(android.net.Uri);
- }
-
}
package android.util {
diff --git a/cmds/content/src/com/android/commands/content/Content.java b/cmds/content/src/com/android/commands/content/Content.java
index 466dcd4..948c9a2 100644
--- a/cmds/content/src/com/android/commands/content/Content.java
+++ b/cmds/content/src/com/android/commands/content/Content.java
@@ -26,9 +26,17 @@
import android.os.Binder;
import android.os.Bundle;
import android.os.IBinder;
+import android.os.ParcelFileDescriptor;
import android.os.UserHandle;
import android.text.TextUtils;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+import libcore.io.IoUtils;
+
/**
* This class is a command line utility for manipulating content. A client
* can insert, update, and remove records in a content provider. For example,
@@ -109,6 +117,12 @@
+ " <METHOD> is the name of a provider-defined method\n"
+ " <ARG> is an optional string argument\n"
+ " <BINDING> is like --bind above, typed data of the form <KEY>:{b,s,i,l,f,d}:<VAL>\n"
+ + "\n"
+ + "usage: adb shell content read --uri <URI> [--user <USER_ID>]\n"
+ + " Example:\n"
+ + " # cat default ringtone to a file, then pull to host\n"
+ + " adb shell 'content read --uri content://settings/system/ringtone >"
+ + " /mnt/sdcard/tmp.ogg' && adb pull /mnt/sdcard/tmp.ogg\n"
+ "\n";
private static class Parser {
@@ -117,6 +131,7 @@
private static final String ARGUMENT_UPDATE = "update";
private static final String ARGUMENT_QUERY = "query";
private static final String ARGUMENT_CALL = "call";
+ private static final String ARGUMENT_READ = "read";
private static final String ARGUMENT_WHERE = "--where";
private static final String ARGUMENT_BIND = "--bind";
private static final String ARGUMENT_URI = "--uri";
@@ -154,6 +169,8 @@
return parseQueryCommand();
} else if (ARGUMENT_CALL.equals(operation)) {
return parseCallCommand();
+ } else if (ARGUMENT_READ.equals(operation)) {
+ return parseReadCommand();
} else {
throw new IllegalArgumentException("Unsupported operation: " + operation);
}
@@ -273,6 +290,25 @@
return new CallCommand(uri, userId, method, arg, values);
}
+ private ReadCommand parseReadCommand() {
+ Uri uri = null;
+ int userId = UserHandle.USER_OWNER;
+ for (String argument; (argument = mTokenizer.nextArg())!= null;) {
+ if (ARGUMENT_URI.equals(argument)) {
+ uri = Uri.parse(argumentValueRequired(argument));
+ } else if (ARGUMENT_USER.equals(argument)) {
+ userId = Integer.parseInt(argumentValueRequired(argument));
+ } else {
+ throw new IllegalArgumentException("Unsupported argument: " + argument);
+ }
+ }
+ if (uri == null) {
+ throw new IllegalArgumentException("Content provider URI not specified."
+ + " Did you specify --uri argument?");
+ }
+ return new ReadCommand(uri, userId);
+ }
+
public QueryCommand parseQueryCommand() {
Uri uri = null;
int userId = UserHandle.USER_OWNER;
@@ -458,6 +494,31 @@
}
}
+ private static class ReadCommand extends Command {
+ public ReadCommand(Uri uri, int userId) {
+ super(uri, userId);
+ }
+
+ @Override
+ public void onExecute(IContentProvider provider) throws Exception {
+ final ParcelFileDescriptor fd = provider.openFile(null, mUri, "r", null);
+ copy(new FileInputStream(fd.getFileDescriptor()), System.out);
+ }
+
+ private static void copy(InputStream is, OutputStream os) throws IOException {
+ final byte[] buffer = new byte[8 * 1024];
+ int read;
+ try {
+ while ((read = is.read(buffer)) > -1) {
+ os.write(buffer, 0, read);
+ }
+ } finally {
+ IoUtils.closeQuietly(is);
+ IoUtils.closeQuietly(os);
+ }
+ }
+ }
+
private static class QueryCommand extends DeleteCommand {
final String[] mProjection;
final String mSortOrder;
diff --git a/core/java/android/app/ActivityManagerNative.java b/core/java/android/app/ActivityManagerNative.java
index 9f1b56e..44c74d8 100644
--- a/core/java/android/app/ActivityManagerNative.java
+++ b/core/java/android/app/ActivityManagerNative.java
@@ -2029,7 +2029,7 @@
data.enforceInterface(IActivityManager.descriptor);
IBinder parentActivityToken = data.readStrongBinder();
IActivityContainerCallback callback =
- (IActivityContainerCallback) data.readStrongBinder();
+ IActivityContainerCallback.Stub.asInterface(data.readStrongBinder());
IActivityContainer activityContainer =
createActivityContainer(parentActivityToken, callback);
reply.writeNoException();
@@ -4744,7 +4744,7 @@
Parcel reply = Parcel.obtain();
data.writeInterfaceToken(IActivityManager.descriptor);
data.writeStrongBinder(parentActivityToken);
- data.writeStrongBinder((IBinder)callback);
+ data.writeStrongBinder(callback == null ? null : callback.asBinder());
mRemote.transact(CREATE_ACTIVITY_CONTAINER_TRANSACTION, data, reply, 0);
reply.readException();
final int result = reply.readInt();
diff --git a/core/java/android/app/ActivityView.java b/core/java/android/app/ActivityView.java
index 113f123..51cb12a 100644
--- a/core/java/android/app/ActivityView.java
+++ b/core/java/android/app/ActivityView.java
@@ -92,8 +92,8 @@
super.onAttachedToWindow();
try {
final IBinder token = mActivity.getActivityToken();
- mActivityContainer =
- ActivityManagerNative.getDefault().createActivityContainer(token, null);
+ mActivityContainer = ActivityManagerNative.getDefault().createActivityContainer(token,
+ new ActivityContainerCallback());
} catch (RemoteException e) {
throw new IllegalStateException("ActivityView: Unable to create ActivityContainer. "
+ e);
@@ -282,4 +282,14 @@
}
}
+
+ private class ActivityContainerCallback extends IActivityContainerCallback.Stub {
+ @Override
+ public void setVisible(IBinder container, boolean visible) {
+ if (DEBUG) Log.v(TAG, "setVisible(): container=" + container + " visible=" + visible);
+ if (visible) {
+ } else {
+ }
+ }
+ }
}
diff --git a/core/java/android/app/ContextImpl.java b/core/java/android/app/ContextImpl.java
index 1c02102..77b5485 100644
--- a/core/java/android/app/ContextImpl.java
+++ b/core/java/android/app/ContextImpl.java
@@ -72,6 +72,7 @@
import android.net.IConnectivityManager;
import android.net.INetworkPolicyManager;
import android.net.NetworkPolicyManager;
+import android.net.NetworkScoreManager;
import android.net.Uri;
import android.net.nsd.INsdManager;
import android.net.nsd.NsdManager;
@@ -82,6 +83,7 @@
import android.net.wifi.p2p.IWifiP2pManager;
import android.net.wifi.p2p.WifiP2pManager;
import android.nfc.NfcManager;
+import android.os.BatteryManager;
import android.os.Binder;
import android.os.Bundle;
import android.os.Debug;
@@ -404,6 +406,11 @@
return new DownloadManager(ctx.getContentResolver(), ctx.getPackageName());
}});
+ registerService(BATTERY_SERVICE, new ServiceFetcher() {
+ public Object createService(ContextImpl ctx) {
+ return new BatteryManager();
+ }});
+
registerService(NFC_SERVICE, new ServiceFetcher() {
public Object createService(ContextImpl ctx) {
return new NfcManager(ctx);
@@ -648,6 +655,12 @@
ITvInputManager service = ITvInputManager.Stub.asInterface(iBinder);
return new TvInputManager(service, UserHandle.myUserId());
}});
+
+ registerService(NETWORK_SCORE_SERVICE, new ServiceFetcher() {
+ public Object createService(ContextImpl ctx) {
+ return new NetworkScoreManager(ctx);
+ }
+ });
}
static ContextImpl getImpl(Context context) {
diff --git a/core/java/android/app/IActivityContainerCallback.aidl b/core/java/android/app/IActivityContainerCallback.aidl
index 55c2001..7f6d2c3 100644
--- a/core/java/android/app/IActivityContainerCallback.aidl
+++ b/core/java/android/app/IActivityContainerCallback.aidl
@@ -20,5 +20,5 @@
/** @hide */
interface IActivityContainerCallback {
- oneway void onLastActivityRemoved(IBinder container);
+ oneway void setVisible(IBinder container, boolean visible);
}
diff --git a/core/java/android/app/INotificationManager.aidl b/core/java/android/app/INotificationManager.aidl
index 9911467..bb6eeda 100644
--- a/core/java/android/app/INotificationManager.aidl
+++ b/core/java/android/app/INotificationManager.aidl
@@ -31,7 +31,7 @@
void enqueueToast(String pkg, ITransientNotification callback, int duration);
void cancelToast(String pkg, ITransientNotification callback);
- void enqueueNotificationWithTag(String pkg, String basePkg, String tag, int id,
+ void enqueueNotificationWithTag(String pkg, String opPkg, String tag, int id,
in Notification notification, inout int[] idReceived, int userId);
void cancelNotificationWithTag(String pkg, String tag, int id, int userId);
diff --git a/core/java/android/content/Context.java b/core/java/android/content/Context.java
index ed0cc23..ff92d82 100644
--- a/core/java/android/content/Context.java
+++ b/core/java/android/content/Context.java
@@ -2009,6 +2009,7 @@
CAMERA_SERVICE,
PRINT_SERVICE,
MEDIA_SESSION_SERVICE,
+ BATTERY_SERVICE,
})
@Retention(RetentionPolicy.SOURCE)
public @interface ServiceName {}
@@ -2060,6 +2061,8 @@
* <dd> An {@link android.app.UiModeManager} for controlling UI modes.
* <dt> {@link #DOWNLOAD_SERVICE} ("download")
* <dd> A {@link android.app.DownloadManager} for requesting HTTP downloads
+ * <dt> {@link #BATTERY_SERVICE} ("batterymanager")
+ * <dd> A {@link android.os.BatteryManager} for managing battery state
* </dl>
*
* <p>Note: System services obtained via this API may be closely associated with
@@ -2113,6 +2116,8 @@
* @see android.app.UiModeManager
* @see #DOWNLOAD_SERVICE
* @see android.app.DownloadManager
+ * @see #BATTERY_SERVICE
+ * @see android.os.BatteryManager
*/
public abstract Object getSystemService(@ServiceName @NonNull String name);
@@ -2481,6 +2486,14 @@
/**
* Use with {@link #getSystemService} to retrieve a
+ * {@link android.os.BatteryManager} for managing battery state.
+ *
+ * @see #getSystemService
+ */
+ public static final String BATTERY_SERVICE = "batterymanager";
+
+ /**
+ * Use with {@link #getSystemService} to retrieve a
* {@link android.nfc.NfcManager} for using NFC.
*
* @see #getSystemService
@@ -2630,6 +2643,14 @@
public static final String TV_INPUT_SERVICE = "tv_input";
/**
+ * {@link android.net.NetworkScoreManager} for managing network scoring.
+ * @see #getSystemService
+ * @see android.net.NetworkScoreManager
+ * @hide
+ */
+ public static final String NETWORK_SCORE_SERVICE = "network_score";
+
+ /**
* Determine whether the given permission is allowed for a particular
* process and user ID running in the system.
*
diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java
index 4b5616f..8d8d220 100644
--- a/core/java/android/content/pm/PackageParser.java
+++ b/core/java/android/content/pm/PackageParser.java
@@ -3292,19 +3292,23 @@
if (packageName == null || packageName.length() == 0) {
Slog.i(TAG, "verifier package name was null; skipping");
return null;
- } else if (encodedPublicKey == null) {
- Slog.i(TAG, "verifier " + packageName + " public key was null; skipping");
}
- PublicKey publicKey = parsePublicKey(encodedPublicKey);
- if (publicKey != null) {
- return new VerifierInfo(packageName, publicKey);
+ final PublicKey publicKey = parsePublicKey(encodedPublicKey);
+ if (publicKey == null) {
+ Slog.i(TAG, "Unable to parse verifier public key for " + packageName);
+ return null;
}
- return null;
+ return new VerifierInfo(packageName, publicKey);
}
- public static final PublicKey parsePublicKey(String encodedPublicKey) {
+ public static final PublicKey parsePublicKey(final String encodedPublicKey) {
+ if (encodedPublicKey == null) {
+ Slog.i(TAG, "Could not parse null public key");
+ return null;
+ }
+
EncodedKeySpec keySpec;
try {
final byte[] encoded = Base64.decode(encodedPublicKey, Base64.DEFAULT);
diff --git a/core/java/android/hardware/input/InputManager.java b/core/java/android/hardware/input/InputManager.java
index 0c0dfe9..b5efa8e 100644
--- a/core/java/android/hardware/input/InputManager.java
+++ b/core/java/android/hardware/input/InputManager.java
@@ -857,7 +857,7 @@
* @hide
*/
@Override
- public void vibrate(int owningUid, String owningPackage, long milliseconds,
+ public void vibrate(int uid, String opPkg, long milliseconds,
int streamHint) {
vibrate(new long[] { 0, milliseconds}, -1);
}
@@ -866,7 +866,7 @@
* @hide
*/
@Override
- public void vibrate(int owningUid, String owningPackage, long[] pattern, int repeat,
+ public void vibrate(int uid, String opPkg, long[] pattern, int repeat,
int streamHint) {
if (repeat >= pattern.length) {
throw new ArrayIndexOutOfBoundsException();
diff --git a/core/java/android/net/NetworkKey.aidl b/core/java/android/net/NetworkKey.aidl
new file mode 100644
index 0000000..637075f
--- /dev/null
+++ b/core/java/android/net/NetworkKey.aidl
@@ -0,0 +1,19 @@
+/**
+ * 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.
+ */
+
+package android.net;
+
+parcelable NetworkKey;
diff --git a/core/java/android/net/NetworkKey.java b/core/java/android/net/NetworkKey.java
new file mode 100644
index 0000000..cc3ad3e
--- /dev/null
+++ b/core/java/android/net/NetworkKey.java
@@ -0,0 +1,105 @@
+/*
+ * 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
+ */
+
+package android.net;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+/**
+ * Information which identifies a specific network.
+ *
+ * @hide
+ */
+public class NetworkKey implements Parcelable {
+
+ /** A wifi network, for which {@link #wifiKey} will be populated. */
+ public static final int TYPE_WIFI = 1;
+
+ /**
+ * The type of this network.
+ * @see #TYPE_WIFI
+ */
+ public final int type;
+
+ /**
+ * Information identifying a Wi-Fi network. Only set when {@link #type} equals
+ * {@link #TYPE_WIFI}.
+ */
+ public final WifiKey wifiKey;
+
+ /**
+ * Construct a new {@link NetworkKey} for a Wi-Fi network.
+ * @param wifiKey the {@link WifiKey} identifying this Wi-Fi network.
+ */
+ public NetworkKey(WifiKey wifiKey) {
+ this.type = TYPE_WIFI;
+ this.wifiKey = wifiKey;
+ }
+
+ private NetworkKey(Parcel in) {
+ type = in.readInt();
+ switch (type) {
+ case TYPE_WIFI:
+ wifiKey = WifiKey.CREATOR.createFromParcel(in);
+ break;
+ default:
+ throw new IllegalArgumentException("Parcel has unknown type: " + type);
+ }
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel out, int flags) {
+ out.writeInt(type);
+ switch (type) {
+ case TYPE_WIFI:
+ wifiKey.writeToParcel(out, flags);
+ break;
+ default:
+ throw new IllegalStateException("NetworkKey has unknown type " + type);
+ }
+ }
+
+ @Override
+ public String toString() {
+ switch (type) {
+ case TYPE_WIFI:
+ return wifiKey.toString();
+ default:
+ // Don't throw an exception here in case someone is logging this object in a catch
+ // block for debugging purposes.
+ return "InvalidKey";
+ }
+ }
+
+ public static final Parcelable.Creator<NetworkKey> CREATOR =
+ new Parcelable.Creator<NetworkKey>() {
+ @Override
+ public NetworkKey createFromParcel(Parcel in) {
+ return new NetworkKey(in);
+ }
+
+ @Override
+ public NetworkKey[] newArray(int size) {
+ return new NetworkKey[size];
+ }
+ };
+}
diff --git a/core/java/android/net/NetworkScoreManager.java b/core/java/android/net/NetworkScoreManager.java
new file mode 100644
index 0000000..3430547
--- /dev/null
+++ b/core/java/android/net/NetworkScoreManager.java
@@ -0,0 +1,118 @@
+/*
+ * 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
+ */
+
+package android.net;
+
+import android.annotation.SdkConstant;
+import android.annotation.SdkConstant.SdkConstantType;
+import android.content.Context;
+
+/**
+ * Class that manages communication between network subsystems and a network scorer.
+ *
+ * <p>You can get an instance of this class by calling
+ * {@link android.content.Context#getSystemService(String)}:
+ *
+ * <pre>NetworkScoreManager manager =
+ * (NetworkScoreManager) getSystemService(Context.NETWORK_SCORE_SERVICE)</pre>
+ *
+ * <p>A network scorer is any application which:
+ * <ul>
+ * <li>Declares the {@link android.Manifest.permission#SCORE_NETWORKS} permission.
+ * <li>Includes a receiver for {@link #ACTION_SCORE_NETWORKS} guarded by the
+ * {@link android.Manifest.permission#BROADCAST_SCORE_NETWORKS} permission which scores networks
+ * and (eventually) calls {@link #updateScores} with the results.
+ * </ul>
+ *
+ * <p>The system keeps track of a default scorer application; at any time, only this application
+ * will receive {@link #ACTION_SCORE_NETWORKS} broadcasts and will be permitted to call
+ * {@link #updateScores}. Applications may determine the current default scorer with
+ * {@link #getDefaultScorerPackage()} and request to change the default scorer by sending an
+ * {@link #ACTION_CHANGE_DEFAULT} broadcast with another scorer.
+ *
+ * @hide
+ */
+public class NetworkScoreManager {
+ /**
+ * Activity action: ask the user to change the default network scorer. This will show a dialog
+ * that asks the user whether they want to replace the current default scorer with the one
+ * specified in {@link #EXTRA_PACKAGE_NAME}. The activity will finish with RESULT_OK if the
+ * default was changed or RESULT_CANCELED if it failed for any reason.
+ */
+ @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
+ public static final String ACTION_CHANGE_DEFAULT = "android.net.scoring.CHANGE_DEFAULT";
+
+ /**
+ * Extra used with {@link #ACTION_CHANGE_DEFAULT} to specify the new scorer package. Set with
+ * {@link android.content.Intent#putExtra(String, String)}.
+ */
+ public static final String EXTRA_PACKAGE_NAME = "packageName";
+
+ /**
+ * Broadcast action: new network scores are being requested. This intent will only be delivered
+ * to the current default scorer app. That app is responsible for scoring the networks and
+ * calling {@link #updateScores} when complete. The networks to score are specified in
+ * {@link #EXTRA_NETWORKS_TO_SCORE}, and will generally consist of all networks which have been
+ * configured by the user as well as any open networks.
+ *
+ * <p class="note">This is a protected intent that can only be sent by the system.
+ */
+ @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
+ public static final String ACTION_SCORE_NETWORKS = "android.net.scoring.SCORE_NETWORKS";
+
+ /**
+ * Extra used with {@link #ACTION_SCORE_NETWORKS} to specify the networks to be scored, as an
+ * array of {@link NetworkKey}s. Can be obtained with
+ * {@link android.content.Intent#getParcelableArrayExtra(String)}}.
+ */
+ public static final String EXTRA_NETWORKS_TO_SCORE = "networksToScore";
+
+ private final Context mContext;
+
+ /** @hide */
+ public NetworkScoreManager(Context context) {
+ mContext = context;
+ }
+
+ /**
+ * Obtain the package name of the current default network scorer.
+ *
+ * At any time, only one scorer application will receive {@link #ACTION_SCORE_NETWORKS}
+ * broadcasts and be allowed to call {@link #updateScores}. Applications may use this method to
+ * determine the current scorer and offer the user the ability to select a different scorer via
+ * the {@link #ACTION_CHANGE_DEFAULT} intent.
+ * @return the full package name of the current default scorer, or null if there is no active
+ * scorer.
+ */
+ public String getDefaultScorerPackage() {
+ // TODO: Implement.
+ return null;
+ }
+
+ /**
+ * Update network scores.
+ *
+ * This may be called at any time to re-score active networks. Scores will generally be updated
+ * quickly, but if this method is called too frequently, the scores may be held and applied at
+ * a later time.
+ *
+ * @param networks the networks which have been scored by the scorer.
+ * @throws SecurityException if the caller is not the default scorer.
+ */
+ public void updateScores(ScoredNetwork[] networks) throws SecurityException {
+ // TODO: Implement.
+ }
+}
diff --git a/core/java/android/net/NetworkScorerApplication.java b/core/java/android/net/NetworkScorerApplication.java
new file mode 100644
index 0000000..b137ad3
--- /dev/null
+++ b/core/java/android/net/NetworkScorerApplication.java
@@ -0,0 +1,156 @@
+/*
+ * 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
+ */
+
+package android.net;
+
+import android.Manifest.permission;
+import android.app.AppOpsManager;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.ActivityInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.provider.Settings;
+import android.provider.Settings.Global;
+import android.text.TextUtils;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * Internal class for managing the primary network scorer application.
+ *
+ * @hide
+ */
+public final class NetworkScorerApplication {
+
+ private static final Intent SCORE_INTENT =
+ new Intent(NetworkScoreManager.ACTION_SCORE_NETWORKS);
+
+ /** This class cannot be instantiated. */
+ private NetworkScorerApplication() {}
+
+ /**
+ * Returns the list of available scorer app package names.
+ *
+ * <p>A network scorer is any application which:
+ * <ul>
+ * <li>Declares the {@link android.Manifest.permission#SCORE_NETWORKS} permission.
+ * <li>Includes a receiver for {@link NetworkScoreManager#ACTION_SCORE_NETWORKS} guarded by the
+ * {@link android.Manifest.permission#BROADCAST_SCORE_NETWORKS} permission.
+ * </ul>
+ *
+ * @return the list of scorers, or the empty list if there are no valid scorers.
+ */
+ public static Collection<String> getAllValidScorers(Context context) {
+ List<String> scorers = new ArrayList<>();
+
+ PackageManager pm = context.getPackageManager();
+ List<ResolveInfo> receivers = pm.queryBroadcastReceivers(SCORE_INTENT, 0 /* flags */);
+ for (ResolveInfo receiver : receivers) {
+ // This field is a misnomer, see android.content.pm.ResolveInfo#activityInfo
+ final ActivityInfo receiverInfo = receiver.activityInfo;
+ if (receiverInfo == null) {
+ // Should never happen with queryBroadcastReceivers, but invalid nonetheless.
+ continue;
+ }
+ if (!permission.BROADCAST_SCORE_NETWORKS.equals(receiverInfo.permission)) {
+ // Receiver doesn't require the BROADCAST_SCORE_NETWORKS permission, which means
+ // anyone could trigger network scoring and flood the framework with score requests.
+ continue;
+ }
+ if (pm.checkPermission(permission.SCORE_NETWORKS, receiverInfo.packageName) !=
+ PackageManager.PERMISSION_GRANTED) {
+ // Application doesn't hold the SCORE_NETWORKS permission, so the user never
+ // approved it as a network scorer.
+ continue;
+ }
+ scorers.add(receiverInfo.packageName);
+ }
+
+ return scorers;
+ }
+
+ /**
+ * Get the application package name to use for scoring networks.
+ *
+ * @return the scorer package or null if scoring is disabled (including if no scorer was ever
+ * selected) or if the previously-set scorer is no longer a valid scorer app (e.g. because
+ * it was disabled or uninstalled).
+ */
+ public static String getActiveScorer(Context context) {
+ String scorerPackage = Settings.Global.getString(context.getContentResolver(),
+ Global.NETWORK_SCORER_APP);
+ Collection<String> applications = getAllValidScorers(context);
+ if (isPackageValidScorer(applications, scorerPackage)) {
+ return scorerPackage;
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Set the specified package as the default scorer application.
+ *
+ * <p>The caller must have permission to write to {@link Settings.Global}.
+ *
+ * @param context the context of the calling application
+ * @param packageName the packageName of the new scorer to use. If null, scoring will be
+ * disabled. Otherwise, the scorer will only be set if it is a valid scorer application.
+ */
+ public static void setActiveScorer(Context context, String packageName) {
+ String oldPackageName = Settings.Global.getString(context.getContentResolver(),
+ Settings.Global.NETWORK_SCORER_APP);
+ if (TextUtils.equals(oldPackageName, packageName)) {
+ // No change.
+ return;
+ }
+
+ if (packageName == null) {
+ Settings.Global.putString(context.getContentResolver(), Global.NETWORK_SCORER_APP,
+ null);
+ } else {
+ // We only make the change if the new package is valid.
+ Collection<String> applications = getAllValidScorers(context);
+ if (isPackageValidScorer(applications, packageName)) {
+ Settings.Global.putString(context.getContentResolver(),
+ Settings.Global.NETWORK_SCORER_APP, packageName);
+ }
+ }
+ }
+
+ /** Determine whether the application with the given UID is the enabled scorer. */
+ public static boolean isCallerDefaultScorer(Context context, int callingUid) {
+ String defaultApp = getActiveScorer(context);
+ if (defaultApp == null) {
+ return false;
+ }
+ AppOpsManager appOpsMgr = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
+ try {
+ appOpsMgr.checkPackage(callingUid, defaultApp);
+ return true;
+ } catch (SecurityException e) {
+ return false;
+ }
+ }
+
+ /** Returns true if the given package is a valid scorer. */
+ private static boolean isPackageValidScorer(Collection<String> scorerPackageNames,
+ String packageName) {
+ return packageName != null && scorerPackageNames.contains(packageName);
+ }
+}
diff --git a/core/java/android/net/RssiCurve.java b/core/java/android/net/RssiCurve.java
new file mode 100644
index 0000000..7af7998
--- /dev/null
+++ b/core/java/android/net/RssiCurve.java
@@ -0,0 +1,129 @@
+/*
+ * 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
+ */
+
+package android.net;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+/**
+ * A curve defining the network score over a range of RSSI values.
+ *
+ * <p>For each RSSI bucket, the score may be any byte. Scores have no absolute meaning and are only
+ * considered relative to other scores assigned by the same scorer. Networks with no score are all
+ * considered equivalent and ranked below any network with a score.
+ *
+ * <p>For example, consider a curve starting at -110 dBm with a bucket width of 10 and the
+ * following buckets: {@code [-20, -10, 0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120]}.
+ * This represents a linear curve between -110 dBm and 30 dBm. It scores progressively higher at
+ * stronger signal strengths.
+ *
+ * <p>A network can be assigned a fixed score independent of RSSI by setting
+ * {@link #rssiBuckets} to a one-byte array whose element is the fixed score. {@link #start}
+ * should be set to the lowest RSSI value at which this fixed score should apply, and
+ * {@link #bucketWidth} should be set such that {@code start + bucketWidth} is equal to the
+ * highest RSSI value at which this fixed score should apply.
+ *
+ * <p>Note that RSSI values below -110 dBm or above 30 dBm are unlikely to cause any difference
+ * in connectivity behavior from those endpoints. That is, the connectivity framework will treat
+ * a network with a -120 dBm signal exactly as it would treat one with a -110 dBm signal.
+ * Therefore, graphs which specify scores outside this range may be truncated to this range by
+ * the system.
+ *
+ * @see ScoredNetwork
+ * @hide
+ */
+public class RssiCurve implements Parcelable {
+
+ /** The starting dBm of the curve. */
+ public final int start;
+
+ /** The width of each RSSI bucket, in dBm. */
+ public final int bucketWidth;
+
+ /** The score for each RSSI bucket. */
+ public final byte[] rssiBuckets;
+
+ /**
+ * Construct a new {@link RssiCurve}.
+ *
+ * @param start the starting dBm of the curve.
+ * @param bucketWidth the width of each RSSI bucket, in dBm.
+ * @param rssiBuckets the score for each RSSI bucket.
+ */
+ public RssiCurve(int start, int bucketWidth, byte[] rssiBuckets) {
+ this.start = start;
+ this.bucketWidth = bucketWidth;
+ if (rssiBuckets == null || rssiBuckets.length == 0) {
+ throw new IllegalArgumentException("rssiBuckets must be at least one element large.");
+ }
+ this.rssiBuckets = rssiBuckets;
+ }
+
+ private RssiCurve(Parcel in) {
+ start = in.readInt();
+ bucketWidth = in.readInt();
+ int bucketCount = in.readInt();
+ rssiBuckets = new byte[bucketCount];
+ in.readByteArray(rssiBuckets);
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel out, int flags) {
+ out.writeInt(start);
+ out.writeInt(bucketWidth);
+ out.writeInt(rssiBuckets.length);
+ out.writeByteArray(rssiBuckets);
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("RssiCurve[start=")
+ .append(start)
+ .append(",bucketWidth=")
+ .append(bucketWidth);
+
+ sb.append(",buckets=");
+ for (int i = 0; i < rssiBuckets.length; i++) {
+ sb.append(rssiBuckets[i]);
+ if (i < rssiBuckets.length - 1) {
+ sb.append(",");
+ }
+ }
+ sb.append("]");
+
+ return sb.toString();
+ }
+
+ public static final Creator<RssiCurve> CREATOR =
+ new Creator<RssiCurve>() {
+ @Override
+ public RssiCurve createFromParcel(Parcel in) {
+ return new RssiCurve(in);
+ }
+
+ @Override
+ public RssiCurve[] newArray(int size) {
+ return new RssiCurve[size];
+ }
+ };
+}
diff --git a/core/java/android/net/ScoredNetwork.aidl b/core/java/android/net/ScoredNetwork.aidl
new file mode 100644
index 0000000..f83db11
--- /dev/null
+++ b/core/java/android/net/ScoredNetwork.aidl
@@ -0,0 +1,19 @@
+/**
+ * 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.
+ */
+
+package android.net;
+
+parcelable ScoredNetwork;
diff --git a/core/java/android/net/ScoredNetwork.java b/core/java/android/net/ScoredNetwork.java
new file mode 100644
index 0000000..8af3c3c
--- /dev/null
+++ b/core/java/android/net/ScoredNetwork.java
@@ -0,0 +1,99 @@
+/*
+ * 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
+ */
+
+package android.net;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+/**
+ * A network identifier along with a score for the quality of that network.
+ *
+ * @hide
+ */
+public class ScoredNetwork implements Parcelable {
+
+ /** A {@link NetworkKey} uniquely identifying this network. */
+ public final NetworkKey networkKey;
+
+ /**
+ * The {@link RssiCurve} representing the scores for this network based on the RSSI.
+ *
+ * <p>This field is optional and may be set to null to indicate that no score is available for
+ * this network at this time. Such networks, along with networks for which the scorer has not
+ * responded, are always prioritized below scored networks, regardless of the score.
+ */
+ public final RssiCurve rssiCurve;
+
+ /**
+ * Construct a new {@link ScoredNetwork}.
+ *
+ * @param networkKey the {@link NetworkKey} uniquely identifying this network.
+ * @param rssiCurve the {@link RssiCurve} representing the scores for this network based on the
+ * RSSI. This field is optional, and may be skipped to represent a network which the scorer
+ * has opted not to score at this time. Passing a null value here is strongly preferred to
+ * not returning any {@link ScoredNetwork} for a given {@link NetworkKey} because it
+ * indicates to the system not to request scores for this network in the future, although
+ * the scorer may choose to issue an out-of-band update at any time.
+ */
+ public ScoredNetwork(NetworkKey networkKey, RssiCurve rssiCurve) {
+ this.networkKey = networkKey;
+ this.rssiCurve = rssiCurve;
+ }
+
+ private ScoredNetwork(Parcel in) {
+ networkKey = NetworkKey.CREATOR.createFromParcel(in);
+ if (in.readByte() == 1) {
+ rssiCurve = RssiCurve.CREATOR.createFromParcel(in);
+ } else {
+ rssiCurve = null;
+ }
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel out, int flags) {
+ networkKey.writeToParcel(out, flags);
+ if (rssiCurve != null) {
+ out.writeByte((byte) 1);
+ rssiCurve.writeToParcel(out, flags);
+ } else {
+ out.writeByte((byte) 0);
+ }
+ }
+
+ @Override
+ public String toString() {
+ return "ScoredNetwork[key=" + networkKey + ",score=" + rssiCurve + "]";
+ }
+
+ public static final Parcelable.Creator<ScoredNetwork> CREATOR =
+ new Parcelable.Creator<ScoredNetwork>() {
+ @Override
+ public ScoredNetwork createFromParcel(Parcel in) {
+ return new ScoredNetwork(in);
+ }
+
+ @Override
+ public ScoredNetwork[] newArray(int size) {
+ return new ScoredNetwork[size];
+ }
+ };
+}
diff --git a/core/java/android/net/WifiKey.java b/core/java/android/net/WifiKey.java
new file mode 100644
index 0000000..ffcd85a
--- /dev/null
+++ b/core/java/android/net/WifiKey.java
@@ -0,0 +1,106 @@
+/*
+ * 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
+ */
+
+package android.net;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import java.util.regex.Pattern;
+
+/**
+ * Information identifying a Wi-Fi network.
+ * @see NetworkKey
+ *
+ * @hide
+ */
+public class WifiKey implements Parcelable {
+
+ // Patterns used for validation.
+ private static final Pattern SSID_PATTERN = Pattern.compile("(\".*\")|(0x[\\p{XDigit}]+)");
+ private static final Pattern BSSID_PATTERN =
+ Pattern.compile("([\\p{XDigit}]{2}:){5}[\\p{XDigit}]{2}");
+
+ /**
+ * The service set identifier (SSID) of an 802.11 network. If the SSID can be decoded as
+ * UTF-8, it will be surrounded by double quotation marks. Otherwise, it will be a string of
+ * hex digits starting with 0x.
+ */
+ public final String ssid;
+
+ /**
+ * The basic service set identifier (BSSID) of an access point for this network. This will
+ * be in the form of a six-byte MAC address: {@code XX:XX:XX:XX:XX:XX}, where each X is a
+ * hexadecimal digit.
+ */
+ public final String bssid;
+
+ /**
+ * Construct a new {@link WifiKey} for the given Wi-Fi SSID/BSSID pair.
+ *
+ * @param ssid the service set identifier (SSID) of an 802.11 network. If the SSID can be
+ * decoded as UTF-8, it should be surrounded by double quotation marks. Otherwise,
+ * it should be a string of hex digits starting with 0x.
+ * @param bssid the basic service set identifier (BSSID) of this network's access point.
+ * This should be in the form of a six-byte MAC address: {@code XX:XX:XX:XX:XX:XX},
+ * where each X is a hexadecimal digit.
+ * @throws IllegalArgumentException if either the SSID or BSSID is invalid.
+ */
+ public WifiKey(String ssid, String bssid) {
+ if (!SSID_PATTERN.matcher(ssid).matches()) {
+ throw new IllegalArgumentException("Invalid ssid: " + ssid);
+ }
+ if (!BSSID_PATTERN.matcher(bssid).matches()) {
+ throw new IllegalArgumentException("Invalid bssid: " + bssid);
+ }
+ this.ssid = ssid;
+ this.bssid = bssid;
+ }
+
+ private WifiKey(Parcel in) {
+ ssid = in.readString();
+ bssid = in.readString();
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel out, int flags) {
+ out.writeString(ssid);
+ out.writeString(bssid);
+ }
+
+ @Override
+ public String toString() {
+ return "WifiKey[SSID=" + ssid + ",BSSID=" + bssid + "]";
+ }
+
+ public static final Creator<WifiKey> CREATOR =
+ new Creator<WifiKey>() {
+ @Override
+ public WifiKey createFromParcel(Parcel in) {
+ return new WifiKey(in);
+ }
+
+ @Override
+ public WifiKey[] newArray(int size) {
+ return new WifiKey[size];
+ }
+ };
+}
diff --git a/core/java/android/os/BatteryManager.java b/core/java/android/os/BatteryManager.java
index 2e38960..f339e52 100644
--- a/core/java/android/os/BatteryManager.java
+++ b/core/java/android/os/BatteryManager.java
@@ -16,9 +16,15 @@
package android.os;
+import android.os.BatteryProperty;
+import android.os.IBatteryPropertiesRegistrar;
+import android.os.RemoteException;
+import android.os.ServiceManager;
+
/**
* The BatteryManager class contains strings and constants used for values
- * in the {@link android.content.Intent#ACTION_BATTERY_CHANGED} Intent.
+ * in the {@link android.content.Intent#ACTION_BATTERY_CHANGED} Intent, and
+ * provides a method for querying battery and charging properties.
*/
public class BatteryManager {
/**
@@ -121,4 +127,30 @@
/** @hide */
public static final int BATTERY_PLUGGED_ANY =
BATTERY_PLUGGED_AC | BATTERY_PLUGGED_USB | BATTERY_PLUGGED_WIRELESS;
+
+ private IBatteryPropertiesRegistrar mBatteryPropertiesRegistrar;
+
+ /**
+ * Return the requested battery property.
+ *
+ * @param id identifier from {@link BatteryProperty} of the requested property
+ * @return a {@link BatteryProperty} object that returns the property value, or null on error
+ */
+ public BatteryProperty getProperty(int id) throws RemoteException {
+ if (mBatteryPropertiesRegistrar == null) {
+ IBinder b = ServiceManager.getService("batteryproperties");
+ mBatteryPropertiesRegistrar =
+ IBatteryPropertiesRegistrar.Stub.asInterface(b);
+
+ if (mBatteryPropertiesRegistrar == null)
+ return null;
+ }
+
+ BatteryProperty prop = new BatteryProperty(Integer.MIN_VALUE);
+ if ((mBatteryPropertiesRegistrar.getProperty(id, prop) == 0) &&
+ (prop.getInt() != Integer.MIN_VALUE))
+ return prop;
+ else
+ return null;
+ }
}
diff --git a/core/java/android/os/BatteryProperty.java b/core/java/android/os/BatteryProperty.java
index 76b0dc4..ec73952 100644
--- a/core/java/android/os/BatteryProperty.java
+++ b/core/java/android/os/BatteryProperty.java
@@ -19,22 +19,67 @@
import android.os.Parcelable;
/**
- * {@hide}
+ * Battery properties that may be queried using
+ * {@link BatteryManager#getProperty
+ * BatteryManager.getProperty()}
*/
public class BatteryProperty implements Parcelable {
/*
* Battery property identifiers. These must match the values in
* frameworks/native/include/batteryservice/BatteryService.h
*/
- public static final int BATTERY_PROP_CHARGE_COUNTER = 1;
- public static final int BATTERY_PROP_CURRENT_NOW = 2;
- public static final int BATTERY_PROP_CURRENT_AVG = 3;
- public static final int BATTERY_PROP_CAPACITY = 4;
+ /** Battery capacity in microampere-hours, as an integer. */
+ public static final int CHARGE_COUNTER = 1;
- public int valueInt;
+ /**
+ * Instantaneous battery current in microamperes, as an integer. Positive
+ * values indicate net current entering the battery from a charge source,
+ * negative values indicate net current discharging from the battery.
+ */
+ public static final int CURRENT_NOW = 2;
+ /**
+ * Average battery current in microamperes, as an integer. Positive
+ * values indicate net current entering the battery from a charge source,
+ * negative values indicate net current discharging from the battery.
+ * The time period over which the average is computed may depend on the
+ * fuel gauge hardware and its configuration.
+ */
+ public static final int CURRENT_AVERAGE = 3;
+
+ /**
+ * Remaining battery capacity as an integer percentage of total capacity
+ * (with no fractional part).
+ */
+ public static final int CAPACITY = 4;
+
+ private int mValueInt;
+
+ /**
+ * @hide
+ */
+ public BatteryProperty(int value) {
+ mValueInt = value;
+ }
+
+ /**
+ * @hide
+ */
public BatteryProperty() {
- valueInt = Integer.MIN_VALUE;
+ mValueInt = Integer.MIN_VALUE;
+ }
+
+ /**
+ * Return the value of a property of integer type previously queried
+ * via {@link BatteryManager#getProperty
+ * BatteryManager.getProperty()}. If the platform does
+ * not provide the property queried, this value will be
+ * Integer.MIN_VALUE.
+ *
+ * @return The queried property value, or Integer.MIN_VALUE if not supported.
+ */
+ public int getInt() {
+ return mValueInt;
}
/*
@@ -47,11 +92,11 @@
}
public void readFromParcel(Parcel p) {
- valueInt = p.readInt();
+ mValueInt = p.readInt();
}
public void writeToParcel(Parcel p, int flags) {
- p.writeInt(valueInt);
+ p.writeInt(mValueInt);
}
public static final Parcelable.Creator<BatteryProperty> CREATOR
diff --git a/core/java/android/os/Build.java b/core/java/android/os/Build.java
index 7f1a2e4..63e15a9 100644
--- a/core/java/android/os/Build.java
+++ b/core/java/android/os/Build.java
@@ -476,6 +476,11 @@
public static final int KITKAT = 19;
/**
+ * Android 4.5: KitKat for watches, snacks on the run.
+ */
+ public static final int KITKAT_WATCH = CUR_DEVELOPMENT; // STOPSHIP: update API level
+
+ /**
* L!
*
* <p>Applications targeting this or a later release will get these
diff --git a/core/java/android/os/IVibratorService.aidl b/core/java/android/os/IVibratorService.aidl
index 4854bc0..4d05e2d 100644
--- a/core/java/android/os/IVibratorService.aidl
+++ b/core/java/android/os/IVibratorService.aidl
@@ -20,8 +20,8 @@
interface IVibratorService
{
boolean hasVibrator();
- void vibrate(int uid, String packageName, long milliseconds, int streamHint, IBinder token);
- void vibratePattern(int uid, String packageName, in long[] pattern, int repeat, int streamHint, IBinder token);
+ void vibrate(int uid, String opPkg, long milliseconds, int streamHint, IBinder token);
+ void vibratePattern(int uid, String opPkg, in long[] pattern, int repeat, int streamHint, IBinder token);
void cancelVibrate(IBinder token);
}
diff --git a/core/java/android/os/NullVibrator.java b/core/java/android/os/NullVibrator.java
index 536da32..7b870ac 100644
--- a/core/java/android/os/NullVibrator.java
+++ b/core/java/android/os/NullVibrator.java
@@ -40,7 +40,7 @@
* @hide
*/
@Override
- public void vibrate(int owningUid, String owningPackage, long milliseconds, int streamHint) {
+ public void vibrate(int uid, String opPkg, long milliseconds, int streamHint) {
vibrate(milliseconds);
}
@@ -48,7 +48,7 @@
* @hide
*/
@Override
- public void vibrate(int owningUid, String owningPackage, long[] pattern, int repeat,
+ public void vibrate(int uid, String opPkg, long[] pattern, int repeat,
int streamHint) {
if (repeat >= pattern.length) {
throw new ArrayIndexOutOfBoundsException();
diff --git a/core/java/android/os/SystemVibrator.java b/core/java/android/os/SystemVibrator.java
index 13bc4f6..8d9cf54 100644
--- a/core/java/android/os/SystemVibrator.java
+++ b/core/java/android/os/SystemVibrator.java
@@ -58,13 +58,13 @@
* @hide
*/
@Override
- public void vibrate(int owningUid, String owningPackage, long milliseconds, int streamHint) {
+ public void vibrate(int uid, String opPkg, long milliseconds, int streamHint) {
if (mService == null) {
Log.w(TAG, "Failed to vibrate; no vibrator service.");
return;
}
try {
- mService.vibrate(owningUid, owningPackage, milliseconds, streamHint, mToken);
+ mService.vibrate(uid, opPkg, milliseconds, streamHint, mToken);
} catch (RemoteException e) {
Log.w(TAG, "Failed to vibrate.", e);
}
@@ -74,7 +74,7 @@
* @hide
*/
@Override
- public void vibrate(int owningUid, String owningPackage, long[] pattern, int repeat,
+ public void vibrate(int uid, String opPkg, long[] pattern, int repeat,
int streamHint) {
if (mService == null) {
Log.w(TAG, "Failed to vibrate; no vibrator service.");
@@ -85,7 +85,7 @@
// anyway
if (repeat < pattern.length) {
try {
- mService.vibratePattern(owningUid, owningPackage, pattern, repeat, streamHint,
+ mService.vibratePattern(uid, opPkg, pattern, repeat, streamHint,
mToken);
} catch (RemoteException e) {
Log.w(TAG, "Failed to vibrate.", e);
diff --git a/core/java/android/os/Vibrator.java b/core/java/android/os/Vibrator.java
index 8845ba3..c1d4d4c 100644
--- a/core/java/android/os/Vibrator.java
+++ b/core/java/android/os/Vibrator.java
@@ -135,7 +135,7 @@
* Like {@link #vibrate(long, int)}, but allowing the caller to specify that
* the vibration is owned by someone else.
*/
- public abstract void vibrate(int owningUid, String owningPackage,
+ public abstract void vibrate(int uid, String opPkg,
long milliseconds, int streamHint);
/**
@@ -143,7 +143,7 @@
* Like {@link #vibrate(long[], int, int)}, but allowing the caller to specify that
* the vibration is owned by someone else.
*/
- public abstract void vibrate(int owningUid, String owningPackage,
+ public abstract void vibrate(int uid, String opPkg,
long[] pattern, int repeat, int streamHint);
/**
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 7062933..1e202ca 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -5097,6 +5097,13 @@
public static final String NETWORK_PREFERENCE = "network_preference";
/**
+ * Which package name to use for network scoring. If null, or if the package is not a valid
+ * scorer app, external network scores will neither be requested nor accepted.
+ * @hide
+ */
+ public static final String NETWORK_SCORER_APP = "network_scorer_app";
+
+ /**
* If the NITZ_UPDATE_DIFF time is exceeded then an automatic adjustment
* to SystemClock will be allowed even if NITZ_UPDATE_SPACING has not been
* exceeded.
diff --git a/core/java/android/service/notification/StatusBarNotification.java b/core/java/android/service/notification/StatusBarNotification.java
index 0f74169..2c0b76d 100644
--- a/core/java/android/service/notification/StatusBarNotification.java
+++ b/core/java/android/service/notification/StatusBarNotification.java
@@ -32,7 +32,7 @@
private final String key;
private final int uid;
- private final String basePkg;
+ private final String opPkg;
private final int initialPid;
private final Notification notification;
private final UserHandle user;
@@ -41,26 +41,20 @@
private final int score;
/** @hide */
- public StatusBarNotification(String pkg, int id, String tag, int uid, int initialPid, int score,
- Notification notification, UserHandle user) {
- this(pkg, null, id, tag, uid, initialPid, score, notification, user);
- }
-
- /** @hide */
- public StatusBarNotification(String pkg, String basePkg, int id, String tag, int uid,
+ public StatusBarNotification(String pkg, String opPkg, int id, String tag, int uid,
int initialPid, int score, Notification notification, UserHandle user) {
- this(pkg, basePkg, id, tag, uid, initialPid, score, notification, user,
+ this(pkg, opPkg, id, tag, uid, initialPid, score, notification, user,
System.currentTimeMillis());
}
- public StatusBarNotification(String pkg, String basePkg, int id, String tag, int uid,
+ public StatusBarNotification(String pkg, String opPkg, int id, String tag, int uid,
int initialPid, int score, Notification notification, UserHandle user,
long postTime) {
if (pkg == null) throw new NullPointerException();
if (notification == null) throw new NullPointerException();
this.pkg = pkg;
- this.basePkg = pkg;
+ this.opPkg = opPkg;
this.id = id;
this.tag = tag;
this.uid = uid;
@@ -75,7 +69,7 @@
public StatusBarNotification(Parcel in) {
this.pkg = in.readString();
- this.basePkg = in.readString();
+ this.opPkg = in.readString();
this.id = in.readInt();
if (in.readInt() != 0) {
this.tag = in.readString();
@@ -93,12 +87,12 @@
}
private String key() {
- return pkg + '|' + basePkg + '|' + id + '|' + tag + '|' + uid;
+ return pkg + '|' + opPkg + '|' + id + '|' + tag + '|' + uid;
}
public void writeToParcel(Parcel out, int flags) {
out.writeString(this.pkg);
- out.writeString(this.basePkg);
+ out.writeString(this.opPkg);
out.writeInt(this.id);
if (this.tag != null) {
out.writeInt(1);
@@ -139,14 +133,14 @@
public StatusBarNotification cloneLight() {
final Notification no = new Notification();
this.notification.cloneInto(no, false); // light copy
- return new StatusBarNotification(this.pkg, this.basePkg,
+ return new StatusBarNotification(this.pkg, this.opPkg,
this.id, this.tag, this.uid, this.initialPid,
this.score, no, this.user, this.postTime);
}
@Override
public StatusBarNotification clone() {
- return new StatusBarNotification(this.pkg, this.basePkg,
+ return new StatusBarNotification(this.pkg, this.opPkg,
this.id, this.tag, this.uid, this.initialPid,
this.score, this.notification.clone(), this.user, this.postTime);
}
@@ -205,9 +199,9 @@
return uid;
}
- /** The notifying app's base package. @hide */
- public String getBasePkg() {
- return basePkg;
+ /** The package used for AppOps tracking. @hide */
+ public String getOpPkg() {
+ return opPkg;
}
/** @hide */
diff --git a/core/java/android/tv/ITvInputSessionWrapper.java b/core/java/android/tv/ITvInputSessionWrapper.java
index fd4e1e3..66fe5e1 100644
--- a/core/java/android/tv/ITvInputSessionWrapper.java
+++ b/core/java/android/tv/ITvInputSessionWrapper.java
@@ -19,6 +19,7 @@
import android.content.Context;
import android.net.Uri;
import android.os.Message;
+import android.tv.TvInputService.TvInputSessionImpl;
import android.util.Log;
import android.view.Surface;
@@ -38,10 +39,10 @@
private static final int DO_SET_VOLUME = 3;
private static final int DO_TUNE = 4;
- private TvInputSession mTvInputSession;
+ private TvInputSessionImpl mTvInputSession;
private final HandlerCaller mCaller;
- public ITvInputSessionWrapper(Context context, TvInputSession session) {
+ public ITvInputSessionWrapper(Context context, TvInputSessionImpl session) {
mCaller = new HandlerCaller(context, null, this, true /* asyncHandler */);
mTvInputSession = session;
}
diff --git a/core/java/android/tv/TvInputManager.java b/core/java/android/tv/TvInputManager.java
index 0b6ab64..4cf2b35 100644
--- a/core/java/android/tv/TvInputManager.java
+++ b/core/java/android/tv/TvInputManager.java
@@ -282,7 +282,7 @@
}
/**
- * Creates a {@link TvInputSession} interface for a given TV input.
+ * Creates a {@link Session} for a given TV input.
* <p>
* The number of sessions that can be created at the same time is limited by the capability of
* the given TV input.
diff --git a/core/java/android/tv/TvInputService.java b/core/java/android/tv/TvInputService.java
index e43cc95..d7f6c32 100644
--- a/core/java/android/tv/TvInputService.java
+++ b/core/java/android/tv/TvInputService.java
@@ -123,7 +123,7 @@
public abstract TvInputSessionImpl onCreateSession();
/**
- * Base class for derived classes to implement to provide {@link TvInputSession}.
+ * Base class for derived classes to implement to provide {@link TvInputManager.Session}.
*/
public abstract static class TvInputSessionImpl {
/**
@@ -155,52 +155,35 @@
* @return {@code true} the tuning was successful, {@code false} otherwise.
*/
public abstract boolean onTune(Uri channelUri);
- }
-
- /**
- * Internal implementation of {@link TvInputSession}. This takes care of basic maintenance of
- * the TV input session but most behavior must be implemented in {@link TvInputSessionImpl}
- * returned by {@link TvInputService#onCreateSession}.
- */
- private static class TvInputSessionImplInternal extends TvInputSession {
- private final TvInputSessionImpl mSessionImpl;
-
- public TvInputSessionImplInternal(TvInputSessionImpl sessionImpl) {
- mSessionImpl = sessionImpl;
- }
/**
* This method is called when the application would like to stop using the current input
* session.
*/
- @Override
- public final void release() {
- mSessionImpl.onRelease();
+ void release() {
+ onRelease();
}
/**
- * Calls {@link TvInputSessionImpl#onSetSurface}.
+ * Calls {@link onSetSurface}.
*/
- @Override
- public final void setSurface(Surface surface) {
- mSessionImpl.onSetSurface(surface);
+ void setSurface(Surface surface) {
+ onSetSurface(surface);
// TODO: Handle failure.
}
/**
- * Calls {@link TvInputSessionImpl#onSetVolume}.
+ * Calls {@link onSetVolume}.
*/
- @Override
- public final void setVolume(float volume) {
- mSessionImpl.onSetVolume(volume);
+ void setVolume(float volume) {
+ onSetVolume(volume);
}
/**
- * Calls {@link TvInputSessionImpl#onTune}.
+ * Calls {@link onTune}.
*/
- @Override
- public final void tune(Uri channelUri) {
- mSessionImpl.onTune(channelUri);
+ void tune(Uri channelUri) {
+ onTune(channelUri);
// TODO: Handle failure.
}
}
@@ -222,7 +205,7 @@
return;
}
ITvInputSession stub = new ITvInputSessionWrapper(TvInputService.this,
- new TvInputSessionImplInternal(sessionImpl));
+ sessionImpl);
cb.onSessionCreated(stub);
} catch (RemoteException e) {
Log.e(TAG, "error in onSessionCreated");
diff --git a/core/java/android/tv/TvInputSession.java b/core/java/android/tv/TvInputSession.java
deleted file mode 100644
index cdd363b..0000000
--- a/core/java/android/tv/TvInputSession.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * 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.
- */
-
-package android.tv;
-
-import android.net.Uri;
-import android.view.Surface;
-
-/**
- * The TvInputSession provides the per-session functionality of TvInputService.
- */
-public abstract class TvInputSession {
- /**
- * This method is called when the application would like to stop using the current input
- * session.
- */
- public void release() { }
-
- /**
- * Sets the {@link Surface} for the current input session on which the TV input renders video.
- *
- * @param surface {@link Surface} to be used for the video playback of this session.
- */
- public void setSurface(Surface surface) { }
-
- /**
- * This method is called when the application needs to handle the change of audio focus by
- * setting the relative volume of the current TV input service session.
- *
- * @param volume Volume scale from 0.0 to 1.0.
- */
- // TODO: Remove this once it becomes irrelevant for applications to handle audio focus. The plan
- // is to introduce some new concepts that will solve a number of problems in audio policy today.
- public void setVolume(float volume) { }
-
- /**
- * Tunes to a given channel.
- *
- * @param channelUri The URI of the channel.
- */
- public void tune(Uri channelUri) { }
-}
diff --git a/core/java/android/webkit/PermissionRequest.java b/core/java/android/webkit/PermissionRequest.java
new file mode 100644
index 0000000..2f8850b
--- /dev/null
+++ b/core/java/android/webkit/PermissionRequest.java
@@ -0,0 +1,74 @@
+/*
+ * 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.
+ */
+
+package android.webkit;
+
+import android.net.Uri;
+
+/**
+ * This class wraps a permission request, and is used to request permission for
+ * the web content to access the resources.
+ *
+ * Either {@link #grant(long) grant()} or {@link #deny()} must be called to response the
+ * request, otherwise, {@link WebChromeClient#onPermissionRequest(PermissionRequest)} will
+ * not be invoked again if there is other permission request in this WebView.
+ *
+ * @hide
+ */
+public interface PermissionRequest {
+ /**
+ * Resource belongs to geolocation service.
+ */
+ public final static long RESOURCE_GEOLOCATION = 1 << 0;
+ /**
+ * Resource belongs to video capture device, like camera.
+ */
+ public final static long RESOURCE_VIDEO_CAPTURE = 1 << 1;
+ /**
+ * Resource belongs to audio capture device, like microphone.
+ */
+ public final static long RESOURCE_AUDIO_CAPTURE = 1 << 2;
+
+ /**
+ * @return the origin of web content which attempt to access the restricted
+ * resources.
+ */
+ public Uri getOrigin();
+
+ /**
+ * @return a bit mask of resources the web content wants to access.
+ */
+ public long getResources();
+
+ /**
+ * Call this method to grant origin the permission to access the given resources.
+ * The granted permission is only valid for this WebView.
+ *
+ * @param resources the resources granted to be accessed by origin, to grant
+ * request, the requested resources returned by {@link #getResources()}
+ * must be equals or a subset of granted resources.
+ * This parameter is designed to avoid granting permission by accident
+ * especially when new resources are requested by web content.
+ * Calling grant(getResources()) has security issue, the new permission
+ * will be granted without being noticed.
+ */
+ public void grant(long resources);
+
+ /**
+ * Call this method to deny the request.
+ */
+ public void deny();
+}
diff --git a/core/java/android/webkit/WebChromeClient.java b/core/java/android/webkit/WebChromeClient.java
index aa57423..60cba86 100644
--- a/core/java/android/webkit/WebChromeClient.java
+++ b/core/java/android/webkit/WebChromeClient.java
@@ -296,6 +296,30 @@
public void onGeolocationPermissionsHidePrompt() {}
/**
+ * Notify the host application that web content is requesting permission to
+ * access the specified resources and the permission currently isn't granted
+ * or denied. The host application must invoke {@link PermissionRequest#grant(long)}
+ * or {@link PermissionRequest#deny()}.
+ *
+ * If this method isn't overridden, the permission is denied.
+ *
+ * @param request the PermissionRequest from current web content.
+ * @hide
+ */
+ public void onPermissionRequest(PermissionRequest request) {
+ request.deny();
+ }
+
+ /**
+ * Notify the host application that the given permission request
+ * has been canceled. Any related UI should therefore be hidden.
+ *
+ * @param request the PermissionRequest need be canceled.
+ * @hide
+ */
+ public void onPermissionRequestCanceled(PermissionRequest request) {}
+
+ /**
* Tell the client that a JavaScript execution timeout has occured. And the
* client may decide whether or not to interrupt the execution. If the
* client returns true, the JavaScript will be interrupted. If the client
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java
index 85168fd..62fbbc4 100644
--- a/core/java/android/webkit/WebView.java
+++ b/core/java/android/webkit/WebView.java
@@ -25,6 +25,7 @@
import android.graphics.Picture;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
+import android.net.Uri;
import android.net.http.SslCertificate;
import android.os.Build;
import android.os.Bundle;
@@ -1640,6 +1641,21 @@
}
/**
+ * Preauthorize the given origin to access resources.
+ * This authorization only valid for this WebView instance life cycle and
+ * will not retained.
+ *
+ * @param origin the origin authorized to access resources
+ * @param resources the resource authorized to be accessed by origin.
+ *
+ * @hide
+ */
+ public void preauthorizePermission(Uri origin, long resources) {
+ checkThread();
+ mProvider.preauthorizePermission(origin, resources);
+ }
+
+ /**
* Sets the Picture listener. This is an interface used to receive
* notifications of a new Picture.
*
diff --git a/core/java/android/webkit/WebViewProvider.java b/core/java/android/webkit/WebViewProvider.java
index 696aad4..9488cdd 100644
--- a/core/java/android/webkit/WebViewProvider.java
+++ b/core/java/android/webkit/WebViewProvider.java
@@ -23,6 +23,7 @@
import android.graphics.Picture;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
+import android.net.Uri;
import android.net.http.SslCertificate;
import android.os.Bundle;
import android.os.Message;
@@ -245,6 +246,8 @@
public View findHierarchyView(String className, int hashCode);
+ public void preauthorizePermission(Uri origin, long resources);
+
//-------------------------------------------------------------------------
// Provider internal methods
//-------------------------------------------------------------------------
diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java
index 96a2ab5..301317e 100644
--- a/core/java/android/widget/AbsListView.java
+++ b/core/java/android/widget/AbsListView.java
@@ -7167,7 +7167,7 @@
final int itemCount = getCount();
final int clampedPosition = MathUtils.constrain(targetPosition, 0, itemCount - 1);
- final int clampedBoundPosition = MathUtils.constrain(boundPosition, 0, itemCount - 1);
+ final int clampedBoundPosition = MathUtils.constrain(boundPosition, -1, itemCount - 1);
final int firstPosition = getFirstVisiblePosition();
final int lastPosition = firstPosition + getChildCount();
final int targetRow = getRowForPosition(clampedPosition);
diff --git a/core/java/com/android/internal/statusbar/IStatusBarService.aidl b/core/java/com/android/internal/statusbar/IStatusBarService.aidl
index dfdb9ae..6428e15 100644
--- a/core/java/com/android/internal/statusbar/IStatusBarService.aidl
+++ b/core/java/com/android/internal/statusbar/IStatusBarService.aidl
@@ -47,6 +47,8 @@
int uid, int initialPid, String message, int userId);
void onClearAllNotifications(int userId);
void onNotificationClear(String pkg, String tag, int id, int userId);
+ void onNotificationVisibilityChanged(
+ in String[] newlyVisibleKeys, in String[] noLongerVisibleKeys);
void setSystemUiVisibility(int vis, int mask);
void setHardKeyboardEnabled(boolean enabled);
void toggleRecentApps();
diff --git a/core/java/com/android/internal/widget/LockPatternUtils.java b/core/java/com/android/internal/widget/LockPatternUtils.java
index 4504910..2882b54 100644
--- a/core/java/com/android/internal/widget/LockPatternUtils.java
+++ b/core/java/com/android/internal/widget/LockPatternUtils.java
@@ -788,13 +788,13 @@
*/
public int getKeyguardStoredPasswordQuality() {
int quality =
- (int) getLong(PASSWORD_TYPE_KEY, DevicePolicyManager.PASSWORD_QUALITY_SOMETHING);
+ (int) getLong(PASSWORD_TYPE_KEY, DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED);
// If the user has chosen to use weak biometric sensor, then return the backup locking
// method and treat biometric as a special case.
if (quality == DevicePolicyManager.PASSWORD_QUALITY_BIOMETRIC_WEAK) {
quality =
(int) getLong(PASSWORD_TYPE_ALTERNATE_KEY,
- DevicePolicyManager.PASSWORD_QUALITY_SOMETHING);
+ DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED);
}
return quality;
}
@@ -804,7 +804,7 @@
*/
public boolean usingBiometricWeak() {
int quality =
- (int) getLong(PASSWORD_TYPE_KEY, DevicePolicyManager.PASSWORD_QUALITY_SOMETHING);
+ (int) getLong(PASSWORD_TYPE_KEY, DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED);
return quality == DevicePolicyManager.PASSWORD_QUALITY_BIOMETRIC_WEAK;
}
@@ -943,11 +943,12 @@
*/
public boolean isLockPatternEnabled() {
final boolean backupEnabled =
- getLong(PASSWORD_TYPE_ALTERNATE_KEY, DevicePolicyManager.PASSWORD_QUALITY_SOMETHING)
- == DevicePolicyManager.PASSWORD_QUALITY_SOMETHING;
+ getLong(PASSWORD_TYPE_ALTERNATE_KEY,
+ DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED)
+ == DevicePolicyManager.PASSWORD_QUALITY_SOMETHING;
return getBoolean(Settings.Secure.LOCK_PATTERN_ENABLED, false)
- && (getLong(PASSWORD_TYPE_KEY, DevicePolicyManager.PASSWORD_QUALITY_SOMETHING)
+ && (getLong(PASSWORD_TYPE_KEY, DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED)
== DevicePolicyManager.PASSWORD_QUALITY_SOMETHING ||
(usingBiometricWeak() && backupEnabled));
}
diff --git a/core/jni/android_database_CursorWindow.cpp b/core/jni/android_database_CursorWindow.cpp
index 67f3879..af6cc72 100644
--- a/core/jni/android_database_CursorWindow.cpp
+++ b/core/jni/android_database_CursorWindow.cpp
@@ -17,6 +17,7 @@
#undef LOG_TAG
#define LOG_TAG "CursorWindow"
+#include <inttypes.h>
#include <jni.h>
#include <JNIHelp.h>
#include <android_runtime/AndroidRuntime.h>
@@ -225,7 +226,7 @@
} else if (type == CursorWindow::FIELD_TYPE_INTEGER) {
int64_t value = window->getFieldSlotValueLong(fieldSlot);
char buf[32];
- snprintf(buf, sizeof(buf), "%lld", value);
+ snprintf(buf, sizeof(buf), "%" PRId64, value);
return env->NewStringUTF(buf);
} else if (type == CursorWindow::FIELD_TYPE_FLOAT) {
double value = window->getFieldSlotValueDouble(fieldSlot);
@@ -314,7 +315,7 @@
} else if (type == CursorWindow::FIELD_TYPE_INTEGER) {
int64_t value = window->getFieldSlotValueLong(fieldSlot);
char buf[32];
- snprintf(buf, sizeof(buf), "%lld", value);
+ snprintf(buf, sizeof(buf), "%" PRId64, value);
fillCharArrayBufferUTF(env, bufferObj, buf, strlen(buf));
} else if (type == CursorWindow::FIELD_TYPE_FLOAT) {
double value = window->getFieldSlotValueDouble(fieldSlot);
diff --git a/core/jni/android_net_TrafficStats.cpp b/core/jni/android_net_TrafficStats.cpp
index f904b62..031637f 100644
--- a/core/jni/android_net_TrafficStats.cpp
+++ b/core/jni/android_net_TrafficStats.cpp
@@ -19,6 +19,7 @@
#include <dirent.h>
#include <errno.h>
#include <fcntl.h>
+#include <inttypes.h>
#include <sys/stat.h>
#include <sys/types.h>
@@ -85,9 +86,9 @@
uint64_t rxBytes, rxPackets, txBytes, txPackets, tcpRxPackets, tcpTxPackets;
while (fgets(buffer, sizeof(buffer), fp) != NULL) {
- int matched = sscanf(buffer, "%31s %llu %llu %llu %llu "
- "%*u %llu %*u %*u %*u %*u "
- "%*u %llu %*u %*u %*u %*u", cur_iface, &rxBytes,
+ int matched = sscanf(buffer, "%31s %" SCNu64 " %" SCNu64 " %" SCNu64
+ " %" SCNu64 " " "%*u %" SCNu64 " %*u %*u %*u %*u "
+ "%*u %" SCNu64 " %*u %*u %*u %*u", cur_iface, &rxBytes,
&rxPackets, &txBytes, &txPackets, &tcpRxPackets, &tcpTxPackets);
if (matched >= 5) {
if (matched == 7) {
@@ -129,9 +130,11 @@
uint64_t tag, rxBytes, rxPackets, txBytes, txPackets;
while (fgets(buffer, sizeof(buffer), fp) != NULL) {
- if (sscanf(buffer, "%d %31s 0x%llx %u %u %llu %llu %llu %llu", &idx,
- iface, &tag, &cur_uid, &set, &rxBytes, &rxPackets, &txBytes,
- &txPackets) == 9) {
+ if (sscanf(buffer,
+ "%" SCNu32 " %31s 0x%" SCNx64 " %u %u %" SCNu64 " %" SCNu64
+ " %" SCNu64 " %" SCNu64 "",
+ &idx, iface, &tag, &cur_uid, &set, &rxBytes, &rxPackets,
+ &txBytes, &txPackets) == 9) {
if (uid == cur_uid && tag == 0L) {
stats->rxBytes += rxBytes;
stats->rxPackets += rxPackets;
diff --git a/core/jni/android_os_Debug.cpp b/core/jni/android_os_Debug.cpp
index d4873d6..86207f0 100644
--- a/core/jni/android_os_Debug.cpp
+++ b/core/jni/android_os_Debug.cpp
@@ -24,6 +24,7 @@
#include <cutils/log.h>
#include <fcntl.h>
+#include <inttypes.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -824,9 +825,9 @@
break;
} else {
#ifdef __LP64__
- fprintf(fp, " %016x", backtrace[bt]);
+ fprintf(fp, " %016" PRIxPTR, backtrace[bt]);
#else
- fprintf(fp, " %08x", backtrace[bt]);
+ fprintf(fp, " %08" PRIxPTR, backtrace[bt]);
#endif
}
}
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index b2709af..606a4b1 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -234,6 +234,7 @@
<protected-broadcast android:name="android.net.conn.NETWORK_CONDITIONS_MEASURED" />
<protected-broadcast
android:name="android.net.ConnectivityService.action.PKT_CNT_SAMPLE_INTERVAL_ELAPSED" />
+ <protected-broadcast android:name="android.net.scoring.SCORE_NETWORKS" />
<protected-broadcast android:name="android.intent.action.EXTERNAL_APPLICATIONS_AVAILABLE" />
<protected-broadcast android:name="android.intent.action.EXTERNAL_APPLICATIONS_UNAVAILABLE" />
<protected-broadcast android:name="android.intent.action.AIRPLANE_MODE" />
@@ -762,6 +763,13 @@
android:description="@string/permdesc_changeWimaxState"
android:label="@string/permlab_changeWimaxState" />
+ <!-- Allows applications to act as network scorers. @hide -->
+ <permission android:name="android.permission.SCORE_NETWORKS"
+ android:permissionGroup="android.permission-group.NETWORK"
+ android:protectionLevel="normal"
+ android:description="@string/permdesc_scoreNetworks"
+ android:label="@string/permlab_scoreNetworks" />
+
<!-- ======================================= -->
<!-- Permissions for short range, peripheral networks -->
<!-- ======================================= -->
@@ -2290,6 +2298,13 @@
android:description="@string/permdesc_broadcastWapPush"
android:protectionLevel="signature" />
+ <!-- Allows an application to broadcast a SCORE_NETWORKS request.
+ <p>Not for use by third-party applications. @hide -->
+ <permission android:name="android.permission.BROADCAST_SCORE_NETWORKS"
+ android:label="@string/permlab_broadcastScoreNetworks"
+ android:description="@string/permdesc_broadcastScoreNetworks"
+ android:protectionLevel="signature|system" />
+
<!-- Not for use by third-party applications. -->
<permission android:name="android.permission.MASTER_CLEAR"
android:label="@string/permlab_masterClear"
diff --git a/core/res/res/layout/action_bar_home_quantum.xml b/core/res/res/layout/action_bar_home_quantum.xml
index 3968429..9213458 100644
--- a/core/res/res/layout/action_bar_home_quantum.xml
+++ b/core/res/res/layout/action_bar_home_quantum.xml
@@ -25,9 +25,13 @@
android:visibility="gone"
android:layout_width="48dp"
android:layout_height="48dp"
- android:scaleType="center" />
+ android:scaleType="centerInside" />
<ImageView android:id="@android:id/home"
- android:layout_width="48dp"
- android:layout_height="48dp"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginEnd="8dip"
+ android:layout_marginTop="@android:dimen/action_bar_icon_vertical_padding"
+ android:layout_marginBottom="@android:dimen/action_bar_icon_vertical_padding"
+ android:adjustViewBounds="true"
android:scaleType="fitCenter" />
</view>
diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml
index b63a1a7..32b674e 100644
--- a/core/res/res/values/public.xml
+++ b/core/res/res/values/public.xml
@@ -2149,6 +2149,10 @@
<public type="attr" name="slideEdge" />
<public type="attr" name="actionBarTheme" />
<public type="attr" name="textAppearanceListItemSecondary" />
+ <public type="attr" name="colorPrimaryLight" />
+ <public type="attr" name="colorPrimary" />
+ <public type="attr" name="colorPrimaryDark" />
+ <public type="attr" name="colorAccent" />
<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 fde5e3f..b0e1150 100644
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -278,6 +278,8 @@
<!-- If MMS discovers there isn't much space left on the device, it will show a toast with this message. -->
<string name="low_memory" product="tablet">Tablet storage is full. Delete some files to free space.</string>
<!-- If MMS discovers there isn't much space left on the device, it will show a toast with this message. -->
+ <string name="low_memory" product="watch">Watch storage is full. Delete some files to free space.</string>
+ <!-- If MMS discovers there isn't much space left on the device, it will show a toast with this message. -->
<string name="low_memory" product="default">Phone storage is full. Delete some files to free space.</string>
<!-- SSL CA cert notification --> <skip />
@@ -324,6 +326,9 @@
<!-- Shutdown Confirmation Dialog. When the user chooses to power off the phone, there will
be a confirmation dialog. This is the message. -->
<string name="shutdown_confirm" product="tablet">Your tablet will shut down.</string>
+ <!-- Shutdown Confirmation Dialog. When the user chooses to power off the watch, there will
+ be a confirmation dialog. This is the message. -->
+ <string name="shutdown_confirm" product="watch">Your watch will shut down.</string>
<!-- Shutdown Confirmation Dialog. When the user chooses to power off the phone, there will
be a confirmation dialog. This is the message. -->
<string name="shutdown_confirm" product="default">Your phone will shut down.</string>
@@ -901,6 +906,14 @@
silently replace the content of any webpage with malicious variants.</string>
<!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permlab_broadcastScoreNetworks">send score networks broadcast</string>
+ <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permdesc_broadcastScoreNetworks">Allows the app
+ to broadcast a notification that networks need to be scored.
+ Never needed for normal apps.
+ </string>
+
+ <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
<string name="permlab_setProcessLimit">limit number of running processes</string>
<!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
<string name="permdesc_setProcessLimit">Allows the app
@@ -1876,6 +1889,15 @@
connect the phone to and disconnect the phone from WiMAX networks.</string>
<!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permlab_scoreNetworks">score networks</string>
+ <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permdesc_scoreNetworks" product="tablet">Allows the app to
+ rank networks and influence which networks the tablet should prefer.</string>
+ <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permdesc_scoreNetworks" product="default">Allows the app to
+ rank networks and influence which networks the phone should prefer.</string>
+
+ <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
<string name="permlab_bluetooth">pair with Bluetooth devices</string>
<!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
<string name="permdesc_bluetooth" product="tablet">Allows the app to view the
diff --git a/core/res/res/values/styles_quantum.xml b/core/res/res/values/styles_quantum.xml
index 595dc79..e42703e 100644
--- a/core/res/res/values/styles_quantum.xml
+++ b/core/res/res/values/styles_quantum.xml
@@ -761,7 +761,7 @@
<item name="background">@null</item>
<item name="backgroundStacked">@null</item>
<item name="backgroundSplit">@null</item>
- <item name="displayOptions">showHome|showTitle</item>
+ <item name="displayOptions">useLogo|showHome|showTitle</item>
<item name="divider">?attr/dividerVertical</item>
<item name="titleTextStyle">@style/TextAppearance.Quantum.Widget.ActionBar.Title</item>
<item name="subtitleTextStyle">@style/TextAppearance.Quantum.Widget.ActionBar.Subtitle</item>
diff --git a/core/res/res/values/themes_quantum.xml b/core/res/res/values/themes_quantum.xml
index ab1c212..a28496e 100644
--- a/core/res/res/values/themes_quantum.xml
+++ b/core/res/res/values/themes_quantum.xml
@@ -303,7 +303,7 @@
<item name="actionBarSize">@dimen/action_bar_default_height_quantum</item>
<item name="actionModePopupWindowStyle">@style/Widget.Quantum.PopupWindow.ActionMode</item>
<item name="actionBarWidgetTheme">@null</item>
- <item name="actionBarTheme">@style/Theme.Quantum.ActionBar</item>
+ <item name="actionBarTheme">@style/ThemeOverlay.Quantum.ActionBarWidget</item>
<item name="actionBarItemBackground">@drawable/item_background_quantum</item>
<item name="actionModeCutDrawable">@drawable/ic_menu_cut_quantum</item>
@@ -648,7 +648,7 @@
<item name="actionBarSize">@dimen/action_bar_default_height_quantum</item>
<item name="actionModePopupWindowStyle">@style/Widget.Quantum.Light.PopupWindow.ActionMode</item>
<item name="actionBarWidgetTheme">@null</item>
- <item name="actionBarTheme">@style/Theme.Quantum.Light.ActionBar</item>
+ <item name="actionBarTheme">@style/ThemeOverlay.Quantum.Light.ActionBarWidget</item>
<item name="actionBarItemBackground">@drawable/item_background_quantum</item>
<item name="actionModeCutDrawable">@drawable/ic_menu_cut_quantum</item>
@@ -722,11 +722,21 @@
<item name="colorButtonPressedColored">?attr/colorPrimaryDark</item>
</style>
- <style name="Theme.Quantum.ActionBar">
+ <style name="ThemeOverlay" />
+ <style name="ThemeOverlay.Quantum" />
+ <style name="ThemeOverlay.Quantum.Light" />
+
+ <!-- Variant of the quantum theme that replaces the activated control color
+ (which by default is identical to the action bar background color) with
+ the normal control color . -->
+ <style name="ThemeOverlay.Quantum.ActionBarWidget">
<item name="colorControlActivated">?attr/colorControlNormal</item>
</style>
- <style name="Theme.Quantum.Light.ActionBar">
+ <!-- Variant of the quantum (light) theme that replaces the activated control
+ color (which by default is identical to the action bar background color)
+ with the normal control color . -->
+ <style name="ThemeOverlay.Quantum.Light.ActionBarWidget">
<item name="colorControlActivated">?attr/colorControlNormal</item>
</style>
@@ -734,8 +744,7 @@
with an inverse color profile. The dark action bar sharply stands out against
the light content. -->
<style name="Theme.Quantum.Light.DarkActionBar">
- <item name="actionBarWidgetTheme">@null</item>
- <item name="actionBarTheme">@style/Theme.Quantum.ActionBar</item>
+ <!-- TODO -->
</style>
<!-- Variant of the quantum (dark) theme with no action bar. -->
diff --git a/core/tests/coretests/Android.mk b/core/tests/coretests/Android.mk
index 73a53cb..6bdeaf0 100644
--- a/core/tests/coretests/Android.mk
+++ b/core/tests/coretests/Android.mk
@@ -23,7 +23,7 @@
LOCAL_DX_FLAGS := --core-library
LOCAL_AAPT_FLAGS = -0 dat -0 gld
-LOCAL_STATIC_JAVA_LIBRARIES := core-tests-support android-common frameworks-core-util-lib mockwebserver guava littlemock
+LOCAL_STATIC_JAVA_LIBRARIES := core-tests-support android-common frameworks-core-util-lib mockwebserver guava littlemock mockito-target
LOCAL_JAVA_LIBRARIES := android.test.runner conscrypt telephony-common
LOCAL_PACKAGE_NAME := FrameworksCoreTests
diff --git a/core/tests/coretests/src/android/net/NetworkKeyTest.java b/core/tests/coretests/src/android/net/NetworkKeyTest.java
new file mode 100644
index 0000000..9005188
--- /dev/null
+++ b/core/tests/coretests/src/android/net/NetworkKeyTest.java
@@ -0,0 +1,97 @@
+/*
+ * 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
+ */
+
+package android.net;
+
+import android.os.Parcel;
+
+import junit.framework.TestCase;
+
+public class NetworkKeyTest extends TestCase {
+ public void testValidWifiKey_utf8() {
+ new WifiKey("\"quotedSsid\"", "AB:CD:01:EF:23:03");
+ new WifiKey("\"\"", "AB:CD:01:EF:23:03");
+ }
+
+ public void testValidWifiKey_hex() {
+ new WifiKey("0x1234abcd", "AB:CD:01:EF:23:03");
+ }
+
+ public void testInvalidWifiKey_empty() {
+ try {
+ new WifiKey("", "AB:CD:01:EF:23:03");
+ fail("Should have thrown IllegalArgumentException");
+ } catch (IllegalArgumentException e) {
+ // expected - empty SSID
+ }
+ }
+
+ public void testInvalidWifiKey_unquotedUtf8() {
+ try {
+ new WifiKey("unquotedSsid", "AB:CD:01:EF:23:03");
+ fail("Should have thrown IllegalArgumentException");
+ } catch (IllegalArgumentException e) {
+ // expected - empty SSID
+ }
+ }
+
+ public void testInvalidWifiKey_invalidHex() {
+ try {
+ new WifiKey("0x\"nothex\"", "AB:CD:01:EF:23:03");
+ fail("Should have thrown IllegalArgumentException");
+ } catch (IllegalArgumentException e) {
+ // expected - empty SSID
+ }
+ }
+
+ public void testInvalidWifiKey_shortBssid() {
+ try {
+ new WifiKey("\"quotedSsid\"", "AB:CD:01:EF:23");
+ fail("Should have thrown IllegalArgumentException");
+ } catch (IllegalArgumentException e) {
+ // expected - BSSID too short
+ }
+ }
+
+ public void testInvalidWifiKey_longBssid() {
+ try {
+ new WifiKey("\"quotedSsid\"", "AB:CD:01:EF:23:03:11");
+ fail("Should have thrown IllegalArgumentException");
+ } catch (IllegalArgumentException e) {
+ // expected - BSSID too long
+ }
+ }
+
+ public void testParceling() {
+ WifiKey wifiKey = new WifiKey("\"ssid\"", "00:00:00:00:00:00");
+ NetworkKey networkKey = new NetworkKey(wifiKey);
+ Parcel parcel = null;
+ try {
+ parcel = Parcel.obtain();
+ parcel.writeParcelable(networkKey, 0);
+ parcel.setDataPosition(0);
+ networkKey = parcel.readParcelable(getClass().getClassLoader());
+ } finally {
+ if (parcel != null) {
+ parcel.recycle();
+ }
+ }
+
+ assertEquals(NetworkKey.TYPE_WIFI, networkKey.type);
+ assertEquals("\"ssid\"", networkKey.wifiKey.ssid);
+ assertEquals("00:00:00:00:00:00", networkKey.wifiKey.bssid);
+ }
+}
diff --git a/core/tests/coretests/src/android/net/NetworkScorerApplicationTest.java b/core/tests/coretests/src/android/net/NetworkScorerApplicationTest.java
new file mode 100644
index 0000000..6d5ede8
--- /dev/null
+++ b/core/tests/coretests/src/android/net/NetworkScorerApplicationTest.java
@@ -0,0 +1,101 @@
+/*
+ * 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
+ */
+
+package android.net;
+
+import android.Manifest.permission;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.ActivityInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.test.InstrumentationTestCase;
+
+import com.google.android.collect.Lists;
+
+import org.mockito.ArgumentMatcher;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.MockitoAnnotations;
+
+import java.util.Iterator;
+
+public class NetworkScorerApplicationTest extends InstrumentationTestCase {
+ @Mock private Context mMockContext;
+ @Mock private PackageManager mMockPm;
+
+ @Override
+ public void setUp() throws Exception {
+ super.setUp();
+
+ // Configuration needed to make mockito/dexcache work.
+ System.setProperty("dexmaker.dexcache",
+ getInstrumentation().getTargetContext().getCacheDir().getPath());
+ ClassLoader newClassLoader = getInstrumentation().getClass().getClassLoader();
+ Thread.currentThread().setContextClassLoader(newClassLoader);
+
+ MockitoAnnotations.initMocks(this);
+ Mockito.when(mMockContext.getPackageManager()).thenReturn(mMockPm);
+ }
+
+ public void testGetAllValidScorers() throws Exception {
+ // Package 1 - Valid scorer.
+ ResolveInfo package1 = buildResolveInfo("package1", true, true);
+
+ // Package 2 - Receiver does not have BROADCAST_SCORE_NETWORKS permission.
+ ResolveInfo package2 = buildResolveInfo("package2", false, true);
+
+ // Package 3 - App does not have SCORE_NETWORKS permission.
+ ResolveInfo package3 = buildResolveInfo("package3", true, false);
+
+ setScorers(package1, package2, package3);
+
+ Iterator<String> result =
+ NetworkScorerApplication.getAllValidScorers(mMockContext).iterator();
+
+ assertTrue(result.hasNext());
+ assertEquals("package1", result.next());
+
+ assertFalse(result.hasNext());
+ }
+
+ private void setScorers(ResolveInfo... scorers) {
+ Mockito.when(mMockPm.queryBroadcastReceivers(
+ Mockito.argThat(new ArgumentMatcher<Intent>() {
+ @Override
+ public boolean matches(Object object) {
+ Intent intent = (Intent) object;
+ return NetworkScoreManager.ACTION_SCORE_NETWORKS.equals(intent.getAction());
+ }
+ }), Mockito.eq(0)))
+ .thenReturn(Lists.newArrayList(scorers));
+ }
+
+ private ResolveInfo buildResolveInfo(String packageName,
+ boolean hasReceiverPermission, boolean hasScorePermission) throws Exception {
+ Mockito.when(mMockPm.checkPermission(permission.SCORE_NETWORKS, packageName))
+ .thenReturn(hasScorePermission ?
+ PackageManager.PERMISSION_GRANTED : PackageManager.PERMISSION_DENIED);
+
+ ResolveInfo resolveInfo = new ResolveInfo();
+ resolveInfo.activityInfo = new ActivityInfo();
+ resolveInfo.activityInfo.packageName = packageName;
+ if (hasReceiverPermission) {
+ resolveInfo.activityInfo.permission = permission.BROADCAST_SCORE_NETWORKS;
+ }
+ return resolveInfo;
+ }
+}
diff --git a/core/tests/coretests/src/android/net/ScoredNetworkTest.java b/core/tests/coretests/src/android/net/ScoredNetworkTest.java
new file mode 100644
index 0000000..7ab69ad
--- /dev/null
+++ b/core/tests/coretests/src/android/net/ScoredNetworkTest.java
@@ -0,0 +1,65 @@
+/*
+ * 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
+ */
+
+package android.net;
+
+import android.os.Parcel;
+
+import junit.framework.TestCase;
+
+import java.util.Arrays;
+
+public class ScoredNetworkTest extends TestCase {
+ private static final RssiCurve CURVE =
+ new RssiCurve(-110, 10, new byte[] {0, 1, 2, 3, 4, 5, 6, 7});
+
+ public void testInvalidCurve_nullBuckets() {
+ try {
+ new RssiCurve(-110, 10, null);
+ fail("Should have thrown IllegalArgumentException");
+ } catch (IllegalArgumentException e) {
+ // expected
+ }
+ }
+
+ public void testInvalidCurve_emptyBuckets() {
+ try {
+ new RssiCurve(-110, 10, new byte[] {});
+ fail("Should have thrown IllegalArgumentException");
+ } catch (IllegalArgumentException e) {
+ // expected
+ }
+ }
+
+ public void testParceling() {
+ NetworkKey key = new NetworkKey(new WifiKey("\"ssid\"", "00:00:00:00:00:00"));
+ ScoredNetwork network = new ScoredNetwork(key, CURVE);
+ Parcel parcel = null;
+ try {
+ parcel = Parcel.obtain();
+ parcel.writeParcelable(network, 0);
+ parcel.setDataPosition(0);
+ network = parcel.readParcelable(getClass().getClassLoader());
+ } finally {
+ if (parcel != null) {
+ parcel.recycle();
+ }
+ }
+ assertEquals(CURVE.start, network.rssiCurve.start);
+ assertEquals(CURVE.bucketWidth, network.rssiCurve.bucketWidth);
+ assertTrue(Arrays.equals(CURVE.rssiBuckets, network.rssiCurve.rssiBuckets));
+ }
+}
diff --git a/docs/html/google/gcm/ccs.jd b/docs/html/google/gcm/ccs.jd
index d2177ca..03addfd 100644
--- a/docs/html/google/gcm/ccs.jd
+++ b/docs/html/google/gcm/ccs.jd
@@ -8,7 +8,7 @@
<h2>In this document</h2>
<ol class="toc">
- <li><a href="#usage">How to Use CCS</a>
+ <li><a href="#connecting">Establishing a Connection</a>
<ol class="toc">
<li><a href="#auth">Authentication</a></li>
</ol>
@@ -46,19 +46,20 @@
<p class="note"><strong>Note:</strong> To try out this feature, sign up using
<a href="https://services.google.com/fb/forms/gcm/">this form</a>.</p>
-<p>The GCM Cloud Connection Server (CCS) is a connection server based on XMPP.
-CCS allows 3rd-party app servers (which you're
-responsible for implementing) to communicate
-with Android devices by establishing a persistent TCP connection with Google
-servers using the XMPP protocol. This communication is asynchronous and bidirectional.</p>
+<p>The GCM Cloud Connection Server (CCS) is an XMPP endpoint that provides a
+persistent, asynchronous, bidirectional connection to Google servers. The
+connection can be used to send and receive messages between your server and
+your users' GCM-connected devices.</p>
+
<p>You can continue to use the HTTP request mechanism to send messages to GCM
servers, side-by-side with CCS which uses XMPP. Some of the benefits of CCS include:</p>
+
<ul>
<li>The asynchronous nature of XMPP allows you to send more messages with fewer
resources.</li>
- <li>Communication is bidirectional—not only can the server send messages
-to the device, but the device can send messages back to the server.</li>
-<li>You can send messages back using the same connection used for receiving,
+ <li>Communication is bidirectional—not only can your server send messages
+to the device, but the device can send messages back to your server.</li>
+ <li>The device can send messages back using the same connection used for receiving,
thereby improving battery life.</li>
</ul>
@@ -73,22 +74,34 @@
<a href="server.html#params">Implementing GCM Server</a> for a list of all the message
parameters and which connection server(s) supports them.</p>
+<h2 id="connecting">Establishing a Connection</h2>
-<h2 id="usage">How to Use CCS</h2>
+<p>CCS just uses XMPP as an authenticated transport layer, so you can use most
+XMPP libraries to manage the connection. For an example, see <a href="#smack">
+Java sample using the Smack library</a>.</p>
-<p>GCM Cloud Connection Server (CCS) is an XMPP endpoint, running on
-{@code http://gcm.googleapis.com} port 5235.</p>
+<p>The CCS XMPP endpoint runs at {@code gcm.googleapis.com:5235}. When testing
+functionality (with non-production users), you should instead connect to
+{@code gcm-staging.googleapis.com:5236} (note the different port). Testing on
+staging (a smaller environment where the latest CCS builds run) is beneficial
+both for isolating real users from test code, as well as for early detection of
+unexpected behavior changes.</p>
-<p>CCS requires a Transport Layer Security (TLS) connection. That means the XMPP
-client must initiate a TLS connection.
-For example in Java, you would call {@code setSocketFactory(SSLSocketFactory)}.</p>
+<p>The connection has two important requirements:</p>
-<p>CCS requires a SASL PLAIN authentication mechanism using
-{@code <your_GCM_Sender_Id>@gcm.googleapis.com} (GCM sender ID) and the
-API key as the password, where the sender ID and API key are the same as described
-in <a href="gs.html">Getting Started</a>.</p>
+<ul>
+ <li>You must initiate a Transport Layer Security (TLS) connection. Note that
+ CCS doesn't currently support the <a href="http://xmpp.org/rfcs/rfc3920.html"
+ class="external-link" target="_android">STARTTLS extension</a>.</li>
+ <li>CCS requires a SASL PLAIN authentication mechanism using
+ {@code <your_GCM_Sender_Id>@gcm.googleapis.com} (GCM sender ID)
+ and the API key as the password, where the sender ID and API key are the same
+ as described in <a href="gs.html">Getting Started</a>.</li>
+</ul>
-<p> You can use most XMPP libraries to interact with CCS.</p>
+<p>If at any point the connection fails, you should immediately reconnect.
+There is no need to back off after a disconnect that happens after
+authentication.</p>
<h3 id="auth">Authentication</h3>
@@ -100,11 +113,11 @@
</pre>
<h4>Server</h4>
<pre><str:features xmlns:str="http://etherx.jabber.org/streams">
- <mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl">
- <mechanism>X-OAUTH2</mechanism>
- <mechanism>X-GOOGLE-TOKEN</mechanism>
- <mechanism>PLAIN</mechanism>
- </mechanisms>
+ <mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl">
+ <mechanism>X-OAUTH2</mechanism>
+ <mechanism>X-GOOGLE-TOKEN</mechanism>
+ <mechanism>PLAIN</mechanism>
+ </mechanisms>
</str:features>
</pre>
@@ -118,16 +131,18 @@
<pre><success xmlns="urn:ietf:params:xml:ns:xmpp-sasl"/></pre>
<h2 id="format">Message Format</h2>
-<p>CCS uses normal XMPP <code><message></code> stanzas. The body of the message must be:
-</p>
+<p>Once the XMPP connection is established, CCS and your server use normal XMPP
+<code><message></code> stanzas to send JSON-encoded messages back and
+forth. The body of the <code><message></code> must be:</p>
<pre>
<gcm xmlns:google:mobile:data>
<em>JSON payload</em>
</gcm>
</pre>
-<p>The JSON payload for server-to-device is similar to what the GCM http endpoint
-uses, with these exceptions:</p>
+<p>The JSON payload for regular GCM messages is similar to
+<a href="http.html#request">what the GCM http endpoint uses</a>, with these
+exceptions:</p>
<ul>
<li>There is no support for multiple recipients.</li>
<li>{@code to} is used instead of {@code registration_ids}.</li>
@@ -136,14 +151,13 @@
{@code message_id} to identify a message sent from 3rd-party app servers to CCS.
Therefore, it's important that this {@code message_id} not only be unique, but
always present.</li>
-
-<li>For ACK/NACK messages that are special control messages, you also need to
-include a {@code message_type} field in the JSON message. The value can be either
-'ack' or 'nack'. For example:
-
-<pre>message_type = ('ack');</pre>
- </li>
</ul>
+
+<p>In addition to regular GCM messages, control messages are sent, indicated by
+the {@code message_type} field in the JSON object. The value can be either
+'ack' or 'nack', or 'control' (see formats below). Any GCM message with an
+unknown {@code message_type} can be ignored by your server.</p>
+
<p>For each device message your app server receives from CCS, it needs to send
an ACK message.
It never needs to send a NACK message. If you don't send an ACK for a message,
@@ -251,7 +265,9 @@
</message></pre>
-<p>The following table lists some of the more common NACK error codes.</p>
+<p>The following table lists NACK error codes. Unless otherwise
+indicated, a NACKed message should not be retried. Unexpected NACK error codes
+should be treated the same as {@code INTERNAL_SERVER_ERROR}.</p>
<p class="table-caption" id="table1">
<strong>Table 1.</strong> NACK error codes.</p>
@@ -262,8 +278,17 @@
<th>Description</th>
</tr>
<tr>
+<td>{@code BAD_ACK}</td>
+<td>The ACK message is improperly formed.</td>
+</tr>
+<tr>
<td>{@code BAD_REGISTRATION}</td>
-<td>The device has a registration ID, but it's invalid.</td>
+<td>The device has a registration ID, but it's invalid or expired.</td>
+</tr>
+<tr>
+<td>{@code CONNECTION_DRAINING}</td>
+<td>The message couldn't be processed because the connection is draining. The
+message should be immediately retried over another connection.</td>
</tr>
<tr>
<td>{@code DEVICE_UNREGISTERED}</td>
@@ -274,25 +299,20 @@
<td>The server encountered an error while trying to process the request.</td>
</tr>
<tr>
+<td>{@code INVALID_JSON}</td>
+<td>The JSON message payload was not valid.</td>
+</tr>
+<tr>
+<td>{@code QUOTA_EXCEEDED}</td>
+<td>The rate of messages to a particular registration ID (in other words, to a
+sender/device pair) is too high. If you want to retry the message, try using a slower
+rate.</td>
+</tr>
+<tr>
<td>{@code SERVICE_UNAVAILABLE}</td>
-<td>The CCS connection server is temporarily unavailable, try again later
-(using exponential backoff, etc.).</td>
-</tr>
-<tr>
-<td>{@code BAD_ACK}</td>
-<td>The ACK message is improperly formed.</td>
-</tr>
-<tr>
-<td>{@code AUTHENTICATION_FAILED}</td>
-<td>This is a 401 error indicating that there was an error authenticating the sender account.</td>
-</tr>
-<tr>
-<td>{@code INVALID_TTL}</td>
-<td>There was an error in the supplied "time to live" value.</td>
-</tr>
-<tr>
-<td>{@code JSON_TYPE_ERROR}</td>
-<td>There was an error in the supplied JSON data type.</td>
+<td>CCS is not currently able to process the message. The
+message should be retried over the same connection using exponential backoff
+with an initial delay of 1 second.</td>
</tr>
</table>
@@ -319,6 +339,28 @@
</message>
</pre>
+<h4 id="control">Control messages</h4>
+
+<p>Periodically, CCS needs to close down a connection to perform load balancing. Before it
+closes the connection, CCS sends a {@code CONNECTION_DRAINING} message to indicate that the connection is being drained
+and will be closed soon. "Draining" refers to shutting off the flow of messages coming into a
+connection, but allowing whatever is already in the pipeline to continue. When you receive
+a {@code CONNECTION_DRAINING} message, you should immediately begin sending messages to another CCS
+connection, opening a new connection if necessary. You should, however, keep the original
+connection open and continue receiving messages that may come over the connection (and
+ACKing them)—CCS will handle initiating a connection close when it is ready.</p>
+
+<p>The {@code CONNECTION_DRAINING} message looks like this:</p>
+<pre><message>
+ <data:gcm xmlns:data="google:mobile:data">
+ {
+ "message_type":"control"
+ "control_type":"CONNECTION_DRAINING"
+ }
+ </data:gcm>
+</message></pre>
+
+<p>{@code CONNECTION_DRAINING} is currently the only {@code control_type} supported.</p>
<h2 id="upstream">Upstream Messages</h2>
@@ -381,7 +423,7 @@
<p>Every message sent to CCS receives either an ACK or a NACK response. Messages
that haven't received one of these responses are considered pending. If the pending
-message count reaches 1000, the 3rd-party app server should stop sending new messages
+message count reaches 100, the 3rd-party app server should stop sending new messages
and wait for CCS to acknowledge some of the existing pending messages as illustrated in
figure 1:</p>
@@ -395,7 +437,7 @@
if there are too many unacknowledged messages. Therefore, the 3rd-party app server
should "ACK" upstream messages, received from the client application via CCS, as soon as possible
to maintain a constant flow of incoming messages. The aforementioned pending message limit doesn't
-apply to these ACKs. Even if the pending message count reaches 1000, the 3rd-party app server
+apply to these ACKs. Even if the pending message count reaches 100, the 3rd-party app server
should continue sending ACKs for messages received from CCS to avoid blocking delivery of new
upstream messages.</p>
@@ -795,7 +837,7 @@
PASSWORD = "API Key"
REGISTRATION_ID = "Registration Id of the target device"
-unacked_messages_quota = 1000
+unacked_messages_quota = 100
send_queue = []
# Return a random alphanumerical id
diff --git a/docs/html/google/play-services/maps.jd b/docs/html/google/play-services/maps.jd
index c24cc74..c541b08 100644
--- a/docs/html/google/play-services/maps.jd
+++ b/docs/html/google/play-services/maps.jd
@@ -1,4 +1,4 @@
-page.title=Google Maps Android API
+page.title=Google Maps Android API v2
page.tags=mapview,location
header.hide=1
@@ -12,14 +12,14 @@
</div>
<div class="col-6">
- <h1 itemprop="name" style="margin-bottom:0;">Google Maps Android API</h1>
+ <h1 itemprop="name" style="margin-bottom:0;">Google Maps Android API v2</h1>
<p itemprop="description">Allow your users explore the world with rich maps provided by
Google. Identify locations with <b>custom markers</b>, augment the map data
with <b>image overlays</b>, embed <b>one or more maps</b> as fragments,
and much more.</p>
<p>Explore the <a
href="{@docRoot}reference/com/google/android/gms/maps/package-summary.html"
->Google Maps Android API reference</a> or visit <a class="external-link"
+>Google Maps Android API v2 reference</a> or visit <a class="external-link"
href="https://developers.google.com/maps/documentation/android/">developers.google.com/maps</a>
for more information about adding maps to your app.</p>
</div>
@@ -31,7 +31,7 @@
<div class="col-6 normal-links">
<h3 style="clear:left">Key Developer Features</h3>
<h4>Add maps to your app</h4>
- <p>With version 2 of the Google Maps Android API, you can embed maps into an activity
+ <p>With Google Maps Android API v2, you can embed maps into an activity
as a fragment with a simple XML snippet. The new Maps offer exciting features such as 3D maps;
indoor, satellite, terrain, and hybrid maps;
vector-based tiles for efficient caching and drawing; animated transitions; and much more.
@@ -58,7 +58,7 @@
<div class="col-6 normal-links">
<h3 style="clear:left">Getting Started</h3>
<h4>1. Get the Google Play services SDK</h4>
- <p>The Google Maps Android APIs are part of the Google Play services platform.</p>
+ <p>Google Maps Android API v2 is part of the Google Play services platform.</p>
<p>To use Google Maps, <a href="{@docRoot}google/play-services/setup.html">set up
the Google Play services SDK</a>. Then see the <a class="external-link"
href="https://developers.google.com/maps/documentation/android/start#installing_the_google_maps_android_v2_api">
@@ -69,7 +69,7 @@
<p>Once you've installed the Google Play services package, the Google Maps sample is located in
<code><android-sdk>/extras/google-play-services/samples/maps</code> and shows you
- how to use the major components of the Google Maps Android APIs.
+ how to use the major components of Google Maps Android API v2.
</p>
<h4>3. Read the documentation</h4>
@@ -79,9 +79,9 @@
<p>For quick access while developing your Android apps, the
<a href="{@docRoot}reference/com/google/android/gms/maps/package-summary.html">Google Maps
- Android API reference</a> is available here on developer.android.com.</p>
+ Android API v2 reference</a> is available here on developer.android.com.</p>
- <p>Detailed documentation for the Google Maps Android APIs is available with the rest of the
+ <p>Detailed documentation for Google Maps Android API v2 is available with the rest of the
Google Maps developer documents at <a class="external-link"
href="https://developers.google.com/maps/documentation/android/">developers.google.com/maps</a>.
</p>
diff --git a/docs/html/google/play-services/setup.jd b/docs/html/google/play-services/setup.jd
index 3137890..5df2629 100644
--- a/docs/html/google/play-services/setup.jd
+++ b/docs/html/google/play-services/setup.jd
@@ -104,7 +104,7 @@
dependencies {
compile 'com.android.support:appcompat-v7:+'
- <strong>compile 'com.google.android.gms:play-services:4.0.30'</strong>
+ <strong>compile 'com.google.android.gms:play-services:4.3.23'</strong>
}
</pre>
<p>Be sure you update this version number each time Google Play services is updated.</p>
@@ -235,4 +235,4 @@
<p>To then begin a connection to Google Play services, read <a
-href="{@docRoot}google/auth/api-client.html">Accessing Google Play Services APIs</a>.</p>
\ No newline at end of file
+href="{@docRoot}google/auth/api-client.html">Accessing Google Play Services APIs</a>.</p>
diff --git a/docs/html/images/gcm/CCS-ack.png b/docs/html/images/gcm/CCS-ack.png
index bce2ab2..4633157 100644
--- a/docs/html/images/gcm/CCS-ack.png
+++ b/docs/html/images/gcm/CCS-ack.png
Binary files differ
diff --git a/docs/image_sources/gcm/CCS-ack.graffle b/docs/image_sources/gcm/CCS-ack.graffle
new file mode 100644
index 0000000..addd456
--- /dev/null
+++ b/docs/image_sources/gcm/CCS-ack.graffle
@@ -0,0 +1,1580 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>ActiveLayerIndex</key>
+ <integer>0</integer>
+ <key>ApplicationVersion</key>
+ <array>
+ <string>com.omnigroup.OmniGrafflePro</string>
+ <string>139.18.0.187838</string>
+ </array>
+ <key>AutoAdjust</key>
+ <true/>
+ <key>BackgroundGraphic</key>
+ <dict>
+ <key>Bounds</key>
+ <string>{{0, 0}, {576.00002479553223, 733}}</string>
+ <key>Class</key>
+ <string>SolidGraphic</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Font</key>
+ <string>Helvetica</string>
+ <key>Size</key>
+ <real>12</real>
+ </dict>
+ <key>ID</key>
+ <integer>2</integer>
+ <key>Style</key>
+ <dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ </dict>
+ <key>BaseZoom</key>
+ <integer>0</integer>
+ <key>CanvasOrigin</key>
+ <string>{0, 0}</string>
+ <key>ColumnAlign</key>
+ <integer>1</integer>
+ <key>ColumnSpacing</key>
+ <real>36</real>
+ <key>CreationDate</key>
+ <string>2013-08-08 01:54:22 +0000</string>
+ <key>Creator</key>
+ <string>Katie McCormick</string>
+ <key>DisplayScale</key>
+ <string>1 0/72 in = 1.0000 in</string>
+ <key>GraphDocumentVersion</key>
+ <integer>8</integer>
+ <key>GraphicsList</key>
+ <array>
+ <dict>
+ <key>Bounds</key>
+ <string>{{89, 329}, {169, 44}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>YES</string>
+ <key>Flow</key>
+ <string>Resize</string>
+ <key>ID</key>
+ <integer>250</integer>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400
+\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
+
+\f0\fs28 \cf0 Now app server can send\
+message no. 101}</string>
+ </dict>
+ <key>Wrap</key>
+ <string>NO</string>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{102, 266}, {114, 44}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>YES</string>
+ <key>Flow</key>
+ <string>Resize</string>
+ <key>ID</key>
+ <integer>249</integer>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400
+\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
+
+\f0\fs28 \cf0 App server waits\
+for ack 1}</string>
+ </dict>
+ <key>Wrap</key>
+ <string>NO</string>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{153, 154}, {98, 44}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>YES</string>
+ <key>Flow</key>
+ <string>Resize</string>
+ <key>ID</key>
+ <integer>244</integer>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400
+\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
+
+\f0\fs28 \cf0 Average\
+response time}</string>
+ </dict>
+ <key>Wrap</key>
+ <string>NO</string>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>Head</key>
+ <dict>
+ <key>ID</key>
+ <integer>226</integer>
+ <key>Position</key>
+ <real>0.375</real>
+ </dict>
+ <key>ID</key>
+ <integer>242</integer>
+ <key>Points</key>
+ <array>
+ <string>{263.00000095367432, 314.5}</string>
+ <string>{261, 99}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.112257</string>
+ <key>g</key>
+ <string>0.107007</string>
+ <key>r</key>
+ <string>0.934433</string>
+ </dict>
+ <key>HeadArrow</key>
+ <string>FilledArrow</string>
+ <key>Legacy</key>
+ <true/>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ <key>Tail</key>
+ <dict>
+ <key>ID</key>
+ <integer>227</integer>
+ <key>Position</key>
+ <real>0.34722220897674561</real>
+ </dict>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>Head</key>
+ <dict>
+ <key>ID</key>
+ <integer>227</integer>
+ <key>Position</key>
+ <real>0.3541666567325592</real>
+ </dict>
+ <key>ID</key>
+ <integer>241</integer>
+ <key>Points</key>
+ <array>
+ <string>{261, 99}</string>
+ <string>{262.50000071525574, 314.5}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.112257</string>
+ <key>g</key>
+ <string>0.107007</string>
+ <key>r</key>
+ <string>0.934433</string>
+ </dict>
+ <key>HeadArrow</key>
+ <string>FilledArrow</string>
+ <key>Legacy</key>
+ <true/>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ <key>Tail</key>
+ <dict>
+ <key>ID</key>
+ <integer>226</integer>
+ <key>Position</key>
+ <real>0.375</real>
+ </dict>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>Head</key>
+ <dict>
+ <key>ID</key>
+ <integer>227</integer>
+ </dict>
+ <key>ID</key>
+ <integer>240</integer>
+ <key>Points</key>
+ <array>
+ <string>{257.5, 336.5}</string>
+ <string>{288, 314.5}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.112257</string>
+ <key>g</key>
+ <string>0.107007</string>
+ <key>r</key>
+ <string>0.934433</string>
+ </dict>
+ <key>HeadArrow</key>
+ <string>FilledArrow</string>
+ <key>Legacy</key>
+ <true/>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>ID</key>
+ <integer>239</integer>
+ <key>Points</key>
+ <array>
+ <string>{231, 288.50000116229057}</string>
+ <string>{231, 251.25}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.112257</string>
+ <key>g</key>
+ <string>0.107007</string>
+ <key>r</key>
+ <string>0.934433</string>
+ </dict>
+ <key>HeadArrow</key>
+ <string>FilledArrow</string>
+ <key>Legacy</key>
+ <true/>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ <key>Tail</key>
+ <dict>
+ <key>ID</key>
+ <integer>238</integer>
+ <key>Position</key>
+ <real>0.56800001859664917</real>
+ </dict>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>ID</key>
+ <integer>238</integer>
+ <key>Points</key>
+ <array>
+ <string>{231, 253}</string>
+ <string>{231, 315.5}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.112257</string>
+ <key>g</key>
+ <string>0.107007</string>
+ <key>r</key>
+ <string>0.934433</string>
+ </dict>
+ <key>HeadArrow</key>
+ <string>FilledArrow</string>
+ <key>Legacy</key>
+ <true/>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{476, 33}, {49, 32}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>YES</string>
+ <key>Flow</key>
+ <string>Resize</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Font</key>
+ <string>Helvetica</string>
+ <key>Size</key>
+ <real>18</real>
+ </dict>
+ <key>ID</key>
+ <integer>230</integer>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400
+\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
+
+\f0\fs36 \cf0 CCS}</string>
+ </dict>
+ <key>Wrap</key>
+ <string>NO</string>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{243, 35}, {101, 32}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>YES</string>
+ <key>Flow</key>
+ <string>Resize</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Font</key>
+ <string>Helvetica</string>
+ <key>Size</key>
+ <real>18</real>
+ </dict>
+ <key>ID</key>
+ <integer>229</integer>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400
+\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
+
+\f0\fs36 \cf0 App Server}</string>
+ </dict>
+ <key>Wrap</key>
+ <string>NO</string>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>ID</key>
+ <integer>228</integer>
+ <key>Points</key>
+ <array>
+ <string>{288, 252}</string>
+ <string>{216, 252}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>HeadArrow</key>
+ <string>0</string>
+ <key>Legacy</key>
+ <true/>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>ID</key>
+ <integer>227</integer>
+ <key>Points</key>
+ <array>
+ <string>{288, 314.5}</string>
+ <string>{216, 314.5}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>HeadArrow</key>
+ <string>0</string>
+ <key>Legacy</key>
+ <true/>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>ID</key>
+ <integer>226</integer>
+ <key>Points</key>
+ <array>
+ <string>{288, 99}</string>
+ <string>{216, 99}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>HeadArrow</key>
+ <string>0</string>
+ <key>Legacy</key>
+ <true/>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{393.69128000000001, 348.37441999999999}, {57, 27}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>YES</string>
+ <key>Flow</key>
+ <string>Resize</string>
+ <key>ID</key>
+ <integer>223</integer>
+ <key>Rotation</key>
+ <real>23</real>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400
+\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
+
+\f0\fs28 \cf0 no. 101}</string>
+ </dict>
+ <key>Wrap</key>
+ <string>NO</string>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{290.12054000000001, 420.17102}, {60, 27}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>YES</string>
+ <key>Flow</key>
+ <string>Resize</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Font</key>
+ <string>Helvetica</string>
+ <key>Size</key>
+ <real>14</real>
+ </dict>
+ <key>ID</key>
+ <integer>222</integer>
+ <key>Rotation</key>
+ <real>341</real>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400
+\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
+
+\f0\fs28 \cf0 ack 100}</string>
+ </dict>
+ <key>Wrap</key>
+ <string>NO</string>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>ID</key>
+ <integer>220</integer>
+ <key>Points</key>
+ <array>
+ <string>{504, 351}</string>
+ <string>{288, 463}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.934433</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0.122713</string>
+ </dict>
+ <key>HeadArrow</key>
+ <string>FilledArrow</string>
+ <key>Legacy</key>
+ <true/>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{430.51697000000001, 279.19488999999999}, {44, 27}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>YES</string>
+ <key>Flow</key>
+ <string>Resize</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Font</key>
+ <string>Helvetica</string>
+ <key>Size</key>
+ <real>14</real>
+ </dict>
+ <key>ID</key>
+ <integer>219</integer>
+ <key>Rotation</key>
+ <real>341</real>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400
+\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
+
+\f0\fs28 \cf0 ack.. }</string>
+ </dict>
+ <key>Wrap</key>
+ <string>NO</string>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{390.63733000000002, 258.42700000000002}, {44, 27}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>YES</string>
+ <key>Flow</key>
+ <string>Resize</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Font</key>
+ <string>Helvetica</string>
+ <key>Size</key>
+ <real>14</real>
+ </dict>
+ <key>ID</key>
+ <integer>218</integer>
+ <key>Rotation</key>
+ <real>341</real>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400
+\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
+
+\f0\fs28 \cf0 ack 2}</string>
+ </dict>
+ <key>Wrap</key>
+ <string>NO</string>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{290.74178999999998, 239.21059}, {57, 27}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>YES</string>
+ <key>Flow</key>
+ <string>Resize</string>
+ <key>ID</key>
+ <integer>217</integer>
+ <key>Rotation</key>
+ <real>23</real>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400
+\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
+
+\f0\fs28 \cf0 no. 100}</string>
+ </dict>
+ <key>Wrap</key>
+ <string>NO</string>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{342.63623000000001, 185.82861}, {38, 27}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>YES</string>
+ <key>Flow</key>
+ <string>Resize</string>
+ <key>ID</key>
+ <integer>216</integer>
+ <key>Rotation</key>
+ <real>18</real>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400
+\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
+
+\f0\fs28 \cf0 no...}</string>
+ </dict>
+ <key>Wrap</key>
+ <string>NO</string>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{361.60431, 234}, {44, 27}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>YES</string>
+ <key>Flow</key>
+ <string>Resize</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Font</key>
+ <string>Helvetica</string>
+ <key>Size</key>
+ <real>14</real>
+ </dict>
+ <key>ID</key>
+ <integer>209</integer>
+ <key>Rotation</key>
+ <real>341</real>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400
+\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
+
+\f0\fs28 \cf0 ack 1}</string>
+ </dict>
+ <key>Wrap</key>
+ <string>NO</string>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{351.16005999999999, 153.43960999999999}, {42, 27}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>YES</string>
+ <key>Flow</key>
+ <string>Resize</string>
+ <key>ID</key>
+ <integer>172</integer>
+ <key>Rotation</key>
+ <real>18</real>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400
+\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
+
+\f0\fs28 \cf0 no. 2}</string>
+ </dict>
+ <key>Wrap</key>
+ <string>NO</string>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{363, 117}, {42, 27}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>YES</string>
+ <key>Flow</key>
+ <string>Resize</string>
+ <key>ID</key>
+ <integer>171</integer>
+ <key>Rotation</key>
+ <real>18</real>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400
+\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
+
+\f0\fs28 \cf0 no. 1}</string>
+ </dict>
+ <key>Wrap</key>
+ <string>NO</string>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>ID</key>
+ <integer>169</integer>
+ <key>Points</key>
+ <array>
+ <string>{504, 200.62189000000001}</string>
+ <string>{288, 312.62189000000001}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.934433</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0.122713</string>
+ </dict>
+ <key>HeadArrow</key>
+ <string>FilledArrow</string>
+ <key>Legacy</key>
+ <true/>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>ID</key>
+ <integer>168</integer>
+ <key>Points</key>
+ <array>
+ <string>{504, 241.00763000000001}</string>
+ <string>{288, 353.00763000000001}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.934433</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0.122713</string>
+ </dict>
+ <key>HeadArrow</key>
+ <string>FilledArrow</string>
+ <key>Legacy</key>
+ <true/>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>ID</key>
+ <integer>167</integer>
+ <key>Points</key>
+ <array>
+ <string>{504, 279}</string>
+ <string>{288, 391}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.934433</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0.122713</string>
+ </dict>
+ <key>HeadArrow</key>
+ <string>FilledArrow</string>
+ <key>Legacy</key>
+ <true/>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>ID</key>
+ <integer>165</integer>
+ <key>Points</key>
+ <array>
+ <string>{289, 391}</string>
+ <string>{505, 492}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.934433</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0.122713</string>
+ </dict>
+ <key>HeadArrow</key>
+ <string>FilledArrow</string>
+ <key>Legacy</key>
+ <true/>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>ID</key>
+ <integer>164</integer>
+ <key>Points</key>
+ <array>
+ <string>{288, 353}</string>
+ <string>{504, 454}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.934433</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0.122713</string>
+ </dict>
+ <key>HeadArrow</key>
+ <string>FilledArrow</string>
+ <key>Legacy</key>
+ <true/>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>ID</key>
+ <integer>163</integer>
+ <key>Points</key>
+ <array>
+ <string>{288, 313}</string>
+ <string>{504, 414}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.934433</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0.122713</string>
+ </dict>
+ <key>HeadArrow</key>
+ <string>FilledArrow</string>
+ <key>Legacy</key>
+ <true/>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>ID</key>
+ <integer>162</integer>
+ <key>Points</key>
+ <array>
+ <string>{288, 180}</string>
+ <string>{504, 281}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.934433</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0.122713</string>
+ </dict>
+ <key>HeadArrow</key>
+ <string>FilledArrow</string>
+ <key>Legacy</key>
+ <true/>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>ID</key>
+ <integer>161</integer>
+ <key>Points</key>
+ <array>
+ <string>{288, 252}</string>
+ <string>{504, 353}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.934433</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0.122713</string>
+ </dict>
+ <key>HeadArrow</key>
+ <string>FilledArrow</string>
+ <key>Legacy</key>
+ <true/>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>ID</key>
+ <integer>160</integer>
+ <key>Points</key>
+ <array>
+ <string>{288, 139.5}</string>
+ <string>{504, 240.5}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.934433</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0.122713</string>
+ </dict>
+ <key>HeadArrow</key>
+ <string>FilledArrow</string>
+ <key>Legacy</key>
+ <true/>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>Head</key>
+ <dict>
+ <key>ID</key>
+ <integer>158</integer>
+ <key>Position</key>
+ <real>0.29398149251937866</real>
+ </dict>
+ <key>ID</key>
+ <integer>159</integer>
+ <key>Points</key>
+ <array>
+ <string>{288, 98.000000596046448}</string>
+ <string>{504, 199.00000476837158}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.934433</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0.122713</string>
+ </dict>
+ <key>HeadArrow</key>
+ <string>FilledArrow</string>
+ <key>Legacy</key>
+ <true/>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ <key>Tail</key>
+ <dict>
+ <key>ID</key>
+ <integer>157</integer>
+ <key>Position</key>
+ <real>0.060185186564922333</real>
+ </dict>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>ID</key>
+ <integer>158</integer>
+ <key>Points</key>
+ <array>
+ <string>{504, 72}</string>
+ <string>{504, 504}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>HeadArrow</key>
+ <string>0</string>
+ <key>Legacy</key>
+ <true/>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>ID</key>
+ <integer>157</integer>
+ <key>Points</key>
+ <array>
+ <string>{288, 72}</string>
+ <string>{288, 504}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>HeadArrow</key>
+ <string>0</string>
+ <key>Legacy</key>
+ <true/>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ </dict>
+ </array>
+ <key>GridInfo</key>
+ <dict>
+ <key>ShowsGrid</key>
+ <string>YES</string>
+ </dict>
+ <key>GuidesLocked</key>
+ <string>NO</string>
+ <key>GuidesVisible</key>
+ <string>YES</string>
+ <key>HPages</key>
+ <integer>1</integer>
+ <key>ImageCounter</key>
+ <integer>1</integer>
+ <key>KeepToScale</key>
+ <false/>
+ <key>Layers</key>
+ <array>
+ <dict>
+ <key>Lock</key>
+ <string>NO</string>
+ <key>Name</key>
+ <string>Layer 1</string>
+ <key>Print</key>
+ <string>YES</string>
+ <key>View</key>
+ <string>YES</string>
+ </dict>
+ </array>
+ <key>LayoutInfo</key>
+ <dict>
+ <key>Animate</key>
+ <string>NO</string>
+ <key>circoMinDist</key>
+ <real>18</real>
+ <key>circoSeparation</key>
+ <real>0.0</real>
+ <key>layoutEngine</key>
+ <string>dot</string>
+ <key>neatoSeparation</key>
+ <real>0.0</real>
+ <key>twopiSeparation</key>
+ <real>0.0</real>
+ </dict>
+ <key>LinksVisible</key>
+ <string>NO</string>
+ <key>MagnetsVisible</key>
+ <string>NO</string>
+ <key>MasterSheets</key>
+ <array/>
+ <key>ModificationDate</key>
+ <string>2014-01-22 22:42:38 +0000</string>
+ <key>Modifier</key>
+ <string>Katie McCormick</string>
+ <key>NotesVisible</key>
+ <string>NO</string>
+ <key>Orientation</key>
+ <integer>2</integer>
+ <key>OriginVisible</key>
+ <string>NO</string>
+ <key>PageBreaks</key>
+ <string>YES</string>
+ <key>PrintInfo</key>
+ <dict>
+ <key>NSBottomMargin</key>
+ <array>
+ <string>float</string>
+ <string>41</string>
+ </array>
+ <key>NSHorizonalPagination</key>
+ <array>
+ <string>int</string>
+ <string>0</string>
+ </array>
+ <key>NSLeftMargin</key>
+ <array>
+ <string>float</string>
+ <string>18</string>
+ </array>
+ <key>NSPaperSize</key>
+ <array>
+ <string>size</string>
+ <string>{612.00002479553223, 792}</string>
+ </array>
+ <key>NSPrintReverseOrientation</key>
+ <array>
+ <string>int</string>
+ <string>0</string>
+ </array>
+ <key>NSRightMargin</key>
+ <array>
+ <string>float</string>
+ <string>18</string>
+ </array>
+ <key>NSTopMargin</key>
+ <array>
+ <string>float</string>
+ <string>18</string>
+ </array>
+ </dict>
+ <key>PrintOnePage</key>
+ <false/>
+ <key>ReadOnly</key>
+ <string>NO</string>
+ <key>RowAlign</key>
+ <integer>1</integer>
+ <key>RowSpacing</key>
+ <real>36</real>
+ <key>SheetTitle</key>
+ <string>Canvas 1</string>
+ <key>SmartAlignmentGuidesActive</key>
+ <string>YES</string>
+ <key>SmartDistanceGuidesActive</key>
+ <string>YES</string>
+ <key>UniqueID</key>
+ <integer>1</integer>
+ <key>UseEntirePage</key>
+ <false/>
+ <key>VPages</key>
+ <integer>1</integer>
+ <key>WindowInfo</key>
+ <dict>
+ <key>CurrentSheet</key>
+ <integer>0</integer>
+ <key>ExpandedCanvases</key>
+ <array>
+ <dict>
+ <key>name</key>
+ <string>Canvas 1</string>
+ </dict>
+ </array>
+ <key>Frame</key>
+ <string>{{170, 139}, {1218, 882}}</string>
+ <key>ListView</key>
+ <true/>
+ <key>OutlineWidth</key>
+ <integer>142</integer>
+ <key>RightSidebar</key>
+ <false/>
+ <key>ShowRuler</key>
+ <true/>
+ <key>Sidebar</key>
+ <true/>
+ <key>SidebarWidth</key>
+ <integer>120</integer>
+ <key>VisibleRegion</key>
+ <string>{{40.5, 0}, {534.5, 364}}</string>
+ <key>Zoom</key>
+ <real>2</real>
+ <key>ZoomValues</key>
+ <array>
+ <array>
+ <string>Canvas 1</string>
+ <real>2</real>
+ <real>1</real>
+ </array>
+ </array>
+ </dict>
+</dict>
+</plist>
diff --git a/graphics/java/android/graphics/drawable/VectorDrawable.java b/graphics/java/android/graphics/drawable/VectorDrawable.java
index 493e276..8fe06b5 100644
--- a/graphics/java/android/graphics/drawable/VectorDrawable.java
+++ b/graphics/java/android/graphics/drawable/VectorDrawable.java
@@ -206,6 +206,11 @@
return mVectorState;
}
+ @Override
+ public void jumpToCurrentState() {
+ mVectorState.mBasicAnimator.end();
+ }
+
/**
* Starts the animation.
*/
diff --git a/media/java/android/media/WebVttRenderer.java b/media/java/android/media/WebVttRenderer.java
index 58d3520..1c9730f 100644
--- a/media/java/android/media/WebVttRenderer.java
+++ b/media/java/android/media/WebVttRenderer.java
@@ -558,7 +558,11 @@
}
}
-/** @hide */
+/**
+ * Supporting July 10 2013 draft version
+ *
+ * @hide
+ */
class WebVttParser {
private static final String TAG = "WebVttParser";
private Phase mPhase;
@@ -726,15 +730,15 @@
"has invalid value", e.getMessage(), value);
}
} else if (name.equals("lines")) {
- try {
- int lines = Integer.parseInt(value);
- if (lines >= 0) {
- region.mLines = lines;
- } else {
- log_warning("region setting", name, "is negative", value);
+ if (value.matches(".*[^0-9].*")) {
+ log_warning("lines", name, "contains an invalid character", value);
+ } else {
+ try {
+ region.mLines = Integer.parseInt(value);
+ assert(region.mLines >= 0); // lines contains only digits
+ } catch (NumberFormatException e) {
+ log_warning("region setting", name, "is not numeric", value);
}
- } catch (NumberFormatException e) {
- log_warning("region setting", name, "is not numeric", value);
}
} else if (name.equals("regionanchor") ||
name.equals("viewportanchor")) {
@@ -872,26 +876,23 @@
}
} else if (name.equals("line")) {
try {
- int linePosition;
/* TRICKY: we know that there are no spaces in value */
assert(value.indexOf(' ') < 0);
if (value.endsWith("%")) {
- linePosition = Integer.parseInt(
- value.substring(0, value.length() - 1));
- if (linePosition < 0 || linePosition > 100) {
- log_warning("cue setting", name, "is out of range", value);
- continue;
- }
mCue.mSnapToLines = false;
- mCue.mLinePosition = linePosition;
+ mCue.mLinePosition = parseIntPercentage(value);
+ } else if (value.matches(".*[^0-9].*")) {
+ log_warning("cue setting", name,
+ "contains an invalid character", value);
} else {
mCue.mSnapToLines = true;
mCue.mLinePosition = Integer.parseInt(value);
}
} catch (NumberFormatException e) {
log_warning("cue setting", name,
- "is not numeric or percentage", value);
+ "is not numeric or percentage", value);
}
+ // TODO: add support for optional alignment value [,start|middle|end]
} else if (name.equals("position")) {
try {
mCue.mTextPosition = parseIntPercentage(value);
diff --git a/media/jni/android_media_MediaRecorder.cpp b/media/jni/android_media_MediaRecorder.cpp
index fd69cad..1685a44 100644
--- a/media/jni/android_media_MediaRecorder.cpp
+++ b/media/jni/android_media_MediaRecorder.cpp
@@ -14,6 +14,13 @@
* limitations under the License.
*/
+#include <assert.h>
+#include <fcntl.h>
+#include <inttypes.h>
+#include <limits.h>
+#include <stdio.h>
+#include <unistd.h>
+
//#define LOG_NDEBUG 0
#define LOG_TAG "MediaRecorderJNI"
#include <utils/Log.h>
@@ -22,11 +29,6 @@
#include <camera/ICameraService.h>
#include <camera/Camera.h>
#include <media/mediarecorder.h>
-#include <stdio.h>
-#include <assert.h>
-#include <limits.h>
-#include <unistd.h>
-#include <fcntl.h>
#include <utils/threads.h>
#include "jni.h"
@@ -303,7 +305,7 @@
sp<MediaRecorder> mr = getMediaRecorder(env, thiz);
char params[64];
- sprintf(params, "max-filesize=%lld", max_filesize_bytes);
+ sprintf(params, "max-filesize=%" PRId64, max_filesize_bytes);
process_media_recorder_call(env, mr->setParameters(String8(params)), "java/lang/RuntimeException", "setMaxFileSize failed.");
}
diff --git a/media/jni/mediaeditor/VideoEditorMain.cpp b/media/jni/mediaeditor/VideoEditorMain.cpp
index 058012b..0894d74 100644
--- a/media/jni/mediaeditor/VideoEditorMain.cpp
+++ b/media/jni/mediaeditor/VideoEditorMain.cpp
@@ -16,6 +16,7 @@
#define LOG_NDEBUG 1
#define LOG_TAG "VideoEditorMain"
#include <dlfcn.h>
+#include <inttypes.h>
#include <stdio.h>
#include <unistd.h>
#include <utils/Log.h>
@@ -24,7 +25,6 @@
#include <VideoEditorJava.h>
#include <VideoEditorOsal.h>
#include <VideoEditorLogging.h>
-#include <marker.h>
#include <VideoEditorClasses.h>
#include <VideoEditorThumbnailMain.h>
#include <M4OSA_Debug.h>
@@ -438,7 +438,7 @@
M4VS, (M4OSA_Char*)"videoEdito JNI overlayFile");
if (pContext->mOverlayFileName != NULL) {
strncpy (pContext->mOverlayFileName,
- (const char*)pContext->pEditSettings->\
+ (const char*)pContext->pEditSettings->
Effects[overlayEffectIndex].xVSS.pFramingFilePath, overlayFileNameLen);
//Change the name to png file
extPos = strstr(pContext->mOverlayFileName, ".rgb");
@@ -1560,9 +1560,6 @@
int *pOverlayIndex = M4OSA_NULL;
M4OSA_Char* pTempChar = M4OSA_NULL;
- // Add a code marker (the condition must always be true).
- ADD_CODE_MARKER_FUN(NULL != pEnv)
-
// Validate the settings parameter.
videoEditJava_checkAndThrowIllegalArgumentException(&needToBeLoaded, pEnv,
(NULL == settings),
@@ -2196,10 +2193,6 @@
M4OSA_Context mContext = M4OSA_NULL;
jint* m_dst32 = M4OSA_NULL;
-
- // Add a text marker (the condition must always be true).
- ADD_TEXT_MARKER_FUN(NULL != env)
-
const char *pString = env->GetStringUTFChars(path, NULL);
if (pString == M4OSA_NULL) {
if (env != NULL) {
@@ -2537,9 +2530,6 @@
VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR", "videoEditor_init()");
- // Add a text marker (the condition must always be true).
- ADD_TEXT_MARKER_FUN(NULL != pEnv)
-
// Get the context.
pContext = (ManualEditContext*)videoEditClasses_getContext(&initialized, pEnv, thiz);
@@ -2948,9 +2938,6 @@
VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR", "videoEditor_loadSettings()");
- // Add a code marker (the condition must always be true).
- ADD_CODE_MARKER_FUN(NULL != pEnv)
-
// Get the context.
pContext = (ManualEditContext*)videoEditClasses_getContext(&needToBeLoaded,
pEnv, thiz);
@@ -3123,9 +3110,6 @@
VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR", "videoEditor_release()");
- // Add a text marker (the condition must always be true).
- ADD_TEXT_MARKER_FUN(NULL != pEnv)
-
// Get the context.
pContext = (ManualEditContext*)videoEditClasses_getContext(&released, pEnv, thiz);
@@ -3388,7 +3372,7 @@
err = M4OSA_fileReadOpen (&inputFileHandle, pInputFileURL, M4OSA_kFileRead);
if (inputFileHandle == M4OSA_NULL) {
VIDEOEDIT_LOG_ERROR(ANDROID_LOG_INFO, "VIDEO_EDITOR",
- "M4MA_generateAudioGraphFile: Cannot open input file 0x%lx", err);
+ "M4MA_generateAudioGraphFile: Cannot open input file 0x%" PRIx32, err);
return err;
}
@@ -3422,7 +3406,7 @@
bufferIn.m_bufferSize = samplesCountInBytes*sizeof(M4OSA_UInt16);
} else {
VIDEOEDIT_LOG_ERROR(ANDROID_LOG_INFO, "VIDEO_EDITOR",
- "M4MA_generateAudioGraphFile: Malloc failed for bufferIn.m_dataAddress 0x%lx",
+ "M4MA_generateAudioGraphFile: Malloc failed for bufferIn.m_dataAddress 0x%" PRIx32,
M4ERR_ALLOC);
return M4ERR_ALLOC;
}
@@ -3462,7 +3446,7 @@
if (err != M4NO_ERROR) {
// if out value of bytes-read is 0, break
if ( numBytesToRead == 0) {
- VIDEOEDIT_LOG_ERROR(ANDROID_LOG_INFO, "VIDEO_EDITOR", "numBytesToRead 0x%lx",
+ VIDEOEDIT_LOG_ERROR(ANDROID_LOG_INFO, "VIDEO_EDITOR", "numBytesToRead 0x%" PRIx32,
numBytesToRead);
break; /* stop if file is empty or EOF */
}
@@ -3514,7 +3498,7 @@
} while (numBytesToRead != 0);
- VIDEOEDIT_LOG_ERROR(ANDROID_LOG_INFO, "VIDEO_EDITOR", "loop 0x%lx", volumeValuesCount);
+ VIDEOEDIT_LOG_ERROR(ANDROID_LOG_INFO, "VIDEO_EDITOR", "loop 0x%" PRIx32, volumeValuesCount);
/* if some error occured in fwrite */
if (numBytesToRead != 0) {
@@ -3633,15 +3617,9 @@
VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", "JNI_OnLoad()");
- // Add a text marker (the condition must always be true).
- ADD_TEXT_MARKER_FUN(NULL != pVm)
-
// Check the JNI version.
if (pVm->GetEnv(&pEnv, JNI_VERSION_1_4) == JNI_OK)
{
- // Add a code marker (the condition must always be true).
- ADD_CODE_MARKER_FUN(NULL != pEnv)
-
// Register the manual edit JNI methods.
if (videoEditor_registerManualEditMethods((JNIEnv*)pEnv) == 0)
{
diff --git a/media/jni/mediaeditor/VideoEditorPropertiesMain.cpp b/media/jni/mediaeditor/VideoEditorPropertiesMain.cpp
index 2f8e357..ae1a80e 100644
--- a/media/jni/mediaeditor/VideoEditorPropertiesMain.cpp
+++ b/media/jni/mediaeditor/VideoEditorPropertiesMain.cpp
@@ -26,7 +26,6 @@
#include <VideoEditorOsal.h>
#include <VideoEditorLogging.h>
#include <VideoEditorOsal.h>
-#include <marker.h>
extern "C" {
#include <M4OSA_Clock.h>
@@ -107,9 +106,6 @@
ANDROID_LOG_INFO, "VIDEO_EDITOR_PROPERTIES",
"videoEditProp_getProperties()");
- // Add a text marker (the condition must always be true).
- ADD_TEXT_MARKER_FUN(NULL != pEnv)
-
// Initialize the classes.
videoEditPropClass_init(&initialized, (JNIEnv*)pEnv);
@@ -192,9 +188,6 @@
// dereferencing of pClipProperties).
if (gotten)
{
- // Add a code marker (the condition must always be true).
- ADD_CODE_MARKER_FUN(NULL != pClipProperties)
-
// Log the API call.
VIDEOEDIT_LOG_API(
ANDROID_LOG_INFO, "VIDEO_EDITOR_PROPERTIES",
@@ -316,9 +309,6 @@
videoEditOsal_free(pFile);
pFile = M4OSA_NULL;
- // Add a text marker (the condition must always be true).
- ADD_TEXT_MARKER_FUN(NULL != pEnv)
-
// Return the Properties object.
return(properties);
}
diff --git a/packages/DocumentsUI/res/values-zh-rTW/strings.xml b/packages/DocumentsUI/res/values-zh-rTW/strings.xml
index 269583a..75ecbcf 100644
--- a/packages/DocumentsUI/res/values-zh-rTW/strings.xml
+++ b/packages/DocumentsUI/res/values-zh-rTW/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"文件"</string>
- <string name="title_open" msgid="4353228937663917801">"開啟工具"</string>
+ <string name="title_open" msgid="4353228937663917801">"開啟檔案"</string>
<string name="title_save" msgid="2433679664882857999">"儲存至"</string>
<string name="menu_create_dir" msgid="5947289605844398389">"建立資料夾"</string>
<string name="menu_grid" msgid="6878021334497835259">"格狀檢視"</string>
@@ -38,7 +38,7 @@
<string name="save_error" msgid="6167009778003223664">"無法儲存文件"</string>
<string name="create_error" msgid="3735649141335444215">"無法建立資料夾"</string>
<string name="query_error" msgid="1222448261663503501">"無法查詢文件"</string>
- <string name="root_recent" msgid="4470053704320518133">"最近使用過的項目"</string>
+ <string name="root_recent" msgid="4470053704320518133">"最近存取過"</string>
<string name="root_available_bytes" msgid="8568452858617033281">"可用空間:<xliff:g id="SIZE">%1$s</xliff:g>"</string>
<string name="root_type_service" msgid="2178854894416775409">"儲存空間服務"</string>
<string name="root_type_shortcut" msgid="3318760609471618093">"捷徑"</string>
@@ -47,7 +47,7 @@
<string name="pref_advanced_devices" msgid="903257239609301276">"顯示進階裝置"</string>
<string name="pref_file_size" msgid="2826879315743961459">"顯示檔案大小"</string>
<string name="pref_device_size" msgid="3542106883278997222">"顯示裝置大小"</string>
- <string name="empty" msgid="7858882803708117596">"沒有項目"</string>
+ <string name="empty" msgid="7858882803708117596">"沒有任何項目"</string>
<string name="toast_no_application" msgid="1339885974067891667">"無法開啟檔案"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"無法刪除部分文件"</string>
<string name="share_via" msgid="8966594246261344259">"分享方式:"</string>
diff --git a/packages/Keyguard/res/values-af/activitystrings.xml b/packages/Keyguard/res/values-af/activitystrings.xml
deleted file mode 100644
index f6e8d5e..0000000
--- a/packages/Keyguard/res/values-af/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="3352888186674981593">"KeyguardToetsAktiwiteit"</string>
- <string name="secure_app_name" msgid="7955498742816868049">"VerenigdeKamera"</string>
- <string name="none_menu_item" msgid="6156747285687551424">"Geen sekuriteit nie"</string>
- <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string>
- <string name="password_menu_item" msgid="1959980499662153160">"Wagwoord"</string>
- <string name="pattern_menu_item" msgid="2987798152175140249">"Patroon"</string>
- <string name="sim_pin_menu_item" msgid="3962286639645084880">"SIM PIN"</string>
- <string name="sim_puk_menu_item" msgid="6190044133008392974">"SIM PUK"</string>
- <string name="add_widget_item" msgid="279702152366857415">"Kies legstuk…"</string>
- <string name="on_screen_turned_off" msgid="8761396329770508367">"opSkermAfgeskakel"</string>
- <string name="on_screen_turned_on" msgid="9222926818030728999">"opSkermAangeskakel"</string>
- <string name="do_keyguard" msgid="9210936977823118796">"doenKeyguard"</string>
- <string name="verify_unlock" msgid="8508722273329306968">"verifieerOntsluit"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-am/activitystrings.xml b/packages/Keyguard/res/values-am/activitystrings.xml
deleted file mode 100644
index a6c7449..0000000
--- a/packages/Keyguard/res/values-am/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
- <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
- <string name="none_menu_item" msgid="6156747285687551424">"ምንም ደህንነት የለም"</string>
- <string name="pin_menu_item" msgid="1179756433268962311">"ፒን"</string>
- <string name="password_menu_item" msgid="1959980499662153160">"የይለፍ ቃል"</string>
- <string name="pattern_menu_item" msgid="2987798152175140249">"ሥርዓተ ጥለት"</string>
- <string name="sim_pin_menu_item" msgid="3962286639645084880">"የሲም ፒን"</string>
- <string name="sim_puk_menu_item" msgid="6190044133008392974">"የሲም ፒዩኬ"</string>
- <string name="add_widget_item" msgid="279702152366857415">"ንዑስ ፕሮግራም ይምረጡ..."</string>
- <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
- <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
- <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
- <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-ar/activitystrings.xml b/packages/Keyguard/res/values-ar/activitystrings.xml
deleted file mode 100644
index f77d8f00..0000000
--- a/packages/Keyguard/res/values-ar/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
- <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
- <string name="none_menu_item" msgid="6156747285687551424">"بدون تأمين"</string>
- <string name="pin_menu_item" msgid="1179756433268962311">"رقم التعريف الشخصي"</string>
- <string name="password_menu_item" msgid="1959980499662153160">"كلمة المرور"</string>
- <string name="pattern_menu_item" msgid="2987798152175140249">"نقش"</string>
- <string name="sim_pin_menu_item" msgid="3962286639645084880">"رقم التعريف الشخصي لبطاقة SIM"</string>
- <string name="sim_puk_menu_item" msgid="6190044133008392974">"رمز PUK لبطاقة SIM"</string>
- <string name="add_widget_item" msgid="279702152366857415">"جارٍ اختيار أداة..."</string>
- <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
- <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
- <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
- <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-bg/activitystrings.xml b/packages/Keyguard/res/values-bg/activitystrings.xml
deleted file mode 100644
index 807bcf2..0000000
--- a/packages/Keyguard/res/values-bg/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
- <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
- <string name="none_menu_item" msgid="6156747285687551424">"Без защита"</string>
- <string name="pin_menu_item" msgid="1179756433268962311">"ПИН код"</string>
- <string name="password_menu_item" msgid="1959980499662153160">"Парола"</string>
- <string name="pattern_menu_item" msgid="2987798152175140249">"Фигура"</string>
- <string name="sim_pin_menu_item" msgid="3962286639645084880">"ПИН код за SIM карта"</string>
- <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK код за SIM карта"</string>
- <string name="add_widget_item" msgid="279702152366857415">"Избиране на приспособление..."</string>
- <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
- <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
- <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
- <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-ca/activitystrings.xml b/packages/Keyguard/res/values-ca/activitystrings.xml
deleted file mode 100644
index c18b9bb..0000000
--- a/packages/Keyguard/res/values-ca/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
- <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
- <string name="none_menu_item" msgid="6156747285687551424">"No hi ha seguretat"</string>
- <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string>
- <string name="password_menu_item" msgid="1959980499662153160">"Contrasenya"</string>
- <string name="pattern_menu_item" msgid="2987798152175140249">"Patró"</string>
- <string name="sim_pin_menu_item" msgid="3962286639645084880">"PIN de la SIM"</string>
- <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK de la SIM"</string>
- <string name="add_widget_item" msgid="279702152366857415">"Tria un widget..."</string>
- <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
- <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
- <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
- <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-cs/activitystrings.xml b/packages/Keyguard/res/values-cs/activitystrings.xml
deleted file mode 100644
index 354176e..0000000
--- a/packages/Keyguard/res/values-cs/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
- <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
- <string name="none_menu_item" msgid="6156747285687551424">"Žádné zabezpečení"</string>
- <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string>
- <string name="password_menu_item" msgid="1959980499662153160">"Heslo"</string>
- <string name="pattern_menu_item" msgid="2987798152175140249">"Gesto"</string>
- <string name="sim_pin_menu_item" msgid="3962286639645084880">"PIN SIM karty"</string>
- <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK SIM karty"</string>
- <string name="add_widget_item" msgid="279702152366857415">"Zvolte widget..."</string>
- <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
- <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
- <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
- <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-da/activitystrings.xml b/packages/Keyguard/res/values-da/activitystrings.xml
deleted file mode 100644
index af07ba5..0000000
--- a/packages/Keyguard/res/values-da/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
- <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
- <string name="none_menu_item" msgid="6156747285687551424">"Ingen sikkerhed"</string>
- <string name="pin_menu_item" msgid="1179756433268962311">"Pinkode"</string>
- <string name="password_menu_item" msgid="1959980499662153160">"Adgangskode"</string>
- <string name="pattern_menu_item" msgid="2987798152175140249">"Mønster"</string>
- <string name="sim_pin_menu_item" msgid="3962286639645084880">"Pinkode til SIM-kort"</string>
- <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK-kode til SIM-kort"</string>
- <string name="add_widget_item" msgid="279702152366857415">"Vælg widget..."</string>
- <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
- <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
- <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
- <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-de/activitystrings.xml b/packages/Keyguard/res/values-de/activitystrings.xml
deleted file mode 100644
index d8e9272..0000000
--- a/packages/Keyguard/res/values-de/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
- <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
- <string name="none_menu_item" msgid="6156747285687551424">"Keine Sicherheit"</string>
- <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string>
- <string name="password_menu_item" msgid="1959980499662153160">"Passwort"</string>
- <string name="pattern_menu_item" msgid="2987798152175140249">"Muster"</string>
- <string name="sim_pin_menu_item" msgid="3962286639645084880">"PIN für SIM-Karte"</string>
- <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK für SIM-Karte"</string>
- <string name="add_widget_item" msgid="279702152366857415">"Widget auswählen..."</string>
- <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
- <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
- <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
- <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-el/activitystrings.xml b/packages/Keyguard/res/values-el/activitystrings.xml
deleted file mode 100644
index 3941f4f..0000000
--- a/packages/Keyguard/res/values-el/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
- <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
- <string name="none_menu_item" msgid="6156747285687551424">"Χωρίς ασφάλεια"</string>
- <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string>
- <string name="password_menu_item" msgid="1959980499662153160">"Κωδικός πρόσβασης"</string>
- <string name="pattern_menu_item" msgid="2987798152175140249">"Μοτίβο"</string>
- <string name="sim_pin_menu_item" msgid="3962286639645084880">"Κωδικός PIN κάρτας SIM"</string>
- <string name="sim_puk_menu_item" msgid="6190044133008392974">"Κωδικός PUK κάρτας SIM"</string>
- <string name="add_widget_item" msgid="279702152366857415">"Επιλογή γραφικού στοιχείου…"</string>
- <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
- <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
- <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
- <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-en-rGB/activitystrings.xml b/packages/Keyguard/res/values-en-rGB/activitystrings.xml
deleted file mode 100644
index 88e806e..0000000
--- a/packages/Keyguard/res/values-en-rGB/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
- <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
- <string name="none_menu_item" msgid="6156747285687551424">"No security"</string>
- <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string>
- <string name="password_menu_item" msgid="1959980499662153160">"Password"</string>
- <string name="pattern_menu_item" msgid="2987798152175140249">"Pattern"</string>
- <string name="sim_pin_menu_item" msgid="3962286639645084880">"SIM PIN"</string>
- <string name="sim_puk_menu_item" msgid="6190044133008392974">"SIM PUK"</string>
- <string name="add_widget_item" msgid="279702152366857415">"Choose widget..."</string>
- <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
- <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
- <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
- <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-es-rUS/activitystrings.xml b/packages/Keyguard/res/values-es-rUS/activitystrings.xml
deleted file mode 100644
index 20117c4..0000000
--- a/packages/Keyguard/res/values-es-rUS/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
- <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
- <string name="none_menu_item" msgid="6156747285687551424">"Sin seguridad"</string>
- <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string>
- <string name="password_menu_item" msgid="1959980499662153160">"Contraseña"</string>
- <string name="pattern_menu_item" msgid="2987798152175140249">"Patrón"</string>
- <string name="sim_pin_menu_item" msgid="3962286639645084880">"PIN de tarjeta SIM"</string>
- <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK de tarjeta SIM"</string>
- <string name="add_widget_item" msgid="279702152366857415">"Elegir widget..."</string>
- <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
- <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
- <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
- <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-es/activitystrings.xml b/packages/Keyguard/res/values-es/activitystrings.xml
deleted file mode 100644
index 34899cc..0000000
--- a/packages/Keyguard/res/values-es/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
- <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
- <string name="none_menu_item" msgid="6156747285687551424">"Sin seguridad"</string>
- <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string>
- <string name="password_menu_item" msgid="1959980499662153160">"Contraseña"</string>
- <string name="pattern_menu_item" msgid="2987798152175140249">"Patrón"</string>
- <string name="sim_pin_menu_item" msgid="3962286639645084880">"PIN de tarjeta SIM"</string>
- <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK de tarjeta SIM"</string>
- <string name="add_widget_item" msgid="279702152366857415">"Seleccionar widget..."</string>
- <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
- <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
- <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
- <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-fa/activitystrings.xml b/packages/Keyguard/res/values-fa/activitystrings.xml
deleted file mode 100644
index 735af8d..0000000
--- a/packages/Keyguard/res/values-fa/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
- <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
- <string name="none_menu_item" msgid="6156747285687551424">"عدم وجود امنیت"</string>
- <string name="pin_menu_item" msgid="1179756433268962311">"پین"</string>
- <string name="password_menu_item" msgid="1959980499662153160">"گذرواژه"</string>
- <string name="pattern_menu_item" msgid="2987798152175140249">"الگو"</string>
- <string name="sim_pin_menu_item" msgid="3962286639645084880">"پین سیم کارت"</string>
- <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK سیم کارت"</string>
- <string name="add_widget_item" msgid="279702152366857415">"انتخاب ابزارک..."</string>
- <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
- <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
- <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
- <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-fi/activitystrings.xml b/packages/Keyguard/res/values-fi/activitystrings.xml
deleted file mode 100644
index 6e0a5a9..0000000
--- a/packages/Keyguard/res/values-fi/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
- <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
- <string name="none_menu_item" msgid="6156747285687551424">"Ei suojausta"</string>
- <string name="pin_menu_item" msgid="1179756433268962311">"PIN-koodi"</string>
- <string name="password_menu_item" msgid="1959980499662153160">"Salasana"</string>
- <string name="pattern_menu_item" msgid="2987798152175140249">"Kuvio"</string>
- <string name="sim_pin_menu_item" msgid="3962286639645084880">"SIM-kortin PIN-koodi"</string>
- <string name="sim_puk_menu_item" msgid="6190044133008392974">"SIM-kortin PUK-koodi"</string>
- <string name="add_widget_item" msgid="279702152366857415">"Valitse widget…"</string>
- <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
- <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
- <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
- <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-fr/activitystrings.xml b/packages/Keyguard/res/values-fr/activitystrings.xml
deleted file mode 100644
index dc79842..0000000
--- a/packages/Keyguard/res/values-fr/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
- <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
- <string name="none_menu_item" msgid="6156747285687551424">"Aucune sécurité"</string>
- <string name="pin_menu_item" msgid="1179756433268962311">"Code PIN"</string>
- <string name="password_menu_item" msgid="1959980499662153160">"Mot de passe"</string>
- <string name="pattern_menu_item" msgid="2987798152175140249">"Schéma"</string>
- <string name="sim_pin_menu_item" msgid="3962286639645084880">"Code PIN de la carte SIM"</string>
- <string name="sim_puk_menu_item" msgid="6190044133008392974">"Clé PUK de la carte SIM"</string>
- <string name="add_widget_item" msgid="279702152366857415">"Sélectionner un widget"</string>
- <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
- <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
- <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
- <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-hi/activitystrings.xml b/packages/Keyguard/res/values-hi/activitystrings.xml
deleted file mode 100644
index 4b0a082..0000000
--- a/packages/Keyguard/res/values-hi/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
- <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
- <string name="none_menu_item" msgid="6156747285687551424">"कोई सुरक्षा नहीं"</string>
- <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string>
- <string name="password_menu_item" msgid="1959980499662153160">"पासवर्ड"</string>
- <string name="pattern_menu_item" msgid="2987798152175140249">"प्रतिमान"</string>
- <string name="sim_pin_menu_item" msgid="3962286639645084880">"SIM पिन"</string>
- <string name="sim_puk_menu_item" msgid="6190044133008392974">"SIM PUK"</string>
- <string name="add_widget_item" msgid="279702152366857415">"विजेट चुनें..."</string>
- <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
- <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
- <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
- <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-hr/activitystrings.xml b/packages/Keyguard/res/values-hr/activitystrings.xml
deleted file mode 100644
index d2b8e92..0000000
--- a/packages/Keyguard/res/values-hr/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
- <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
- <string name="none_menu_item" msgid="6156747285687551424">"Nema zaštite"</string>
- <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string>
- <string name="password_menu_item" msgid="1959980499662153160">"Zaporka"</string>
- <string name="pattern_menu_item" msgid="2987798152175140249">"Uzorak"</string>
- <string name="sim_pin_menu_item" msgid="3962286639645084880">"PIN za SIM"</string>
- <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK za SIM"</string>
- <string name="add_widget_item" msgid="279702152366857415">"Odaberite widget..."</string>
- <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
- <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
- <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
- <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-hu/activitystrings.xml b/packages/Keyguard/res/values-hu/activitystrings.xml
deleted file mode 100644
index 30d2951..0000000
--- a/packages/Keyguard/res/values-hu/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
- <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
- <string name="none_menu_item" msgid="6156747285687551424">"Nincs védelem"</string>
- <string name="pin_menu_item" msgid="1179756433268962311">"PIN kód"</string>
- <string name="password_menu_item" msgid="1959980499662153160">"Jelszó"</string>
- <string name="pattern_menu_item" msgid="2987798152175140249">"Minta"</string>
- <string name="sim_pin_menu_item" msgid="3962286639645084880">"SIM kártya PIN kódja"</string>
- <string name="sim_puk_menu_item" msgid="6190044133008392974">"SIM kártya PUK kódja"</string>
- <string name="add_widget_item" msgid="279702152366857415">"Modul kiválasztása..."</string>
- <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
- <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
- <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
- <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-in/activitystrings.xml b/packages/Keyguard/res/values-in/activitystrings.xml
deleted file mode 100644
index ec9774d..0000000
--- a/packages/Keyguard/res/values-in/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
- <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
- <string name="none_menu_item" msgid="6156747285687551424">"Tanpa pengamanan"</string>
- <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string>
- <string name="password_menu_item" msgid="1959980499662153160">"Sandi"</string>
- <string name="pattern_menu_item" msgid="2987798152175140249">"Pola"</string>
- <string name="sim_pin_menu_item" msgid="3962286639645084880">"PIN SIM"</string>
- <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK SIM"</string>
- <string name="add_widget_item" msgid="279702152366857415">"Pilih widget..."</string>
- <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
- <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
- <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
- <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-it/activitystrings.xml b/packages/Keyguard/res/values-it/activitystrings.xml
deleted file mode 100644
index 34ad96497..0000000
--- a/packages/Keyguard/res/values-it/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
- <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
- <string name="none_menu_item" msgid="6156747285687551424">"Nessuna sicurezza"</string>
- <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string>
- <string name="password_menu_item" msgid="1959980499662153160">"Password"</string>
- <string name="pattern_menu_item" msgid="2987798152175140249">"Sequenza"</string>
- <string name="sim_pin_menu_item" msgid="3962286639645084880">"PIN della SIM"</string>
- <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK della SIM"</string>
- <string name="add_widget_item" msgid="279702152366857415">"Scegli widget..."</string>
- <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
- <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
- <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
- <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-iw/activitystrings.xml b/packages/Keyguard/res/values-iw/activitystrings.xml
deleted file mode 100644
index 84e351a2..0000000
--- a/packages/Keyguard/res/values-iw/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
- <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
- <string name="none_menu_item" msgid="6156747285687551424">"ללא אבטחה"</string>
- <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string>
- <string name="password_menu_item" msgid="1959980499662153160">"סיסמה"</string>
- <string name="pattern_menu_item" msgid="2987798152175140249">"קו ביטול נעילה"</string>
- <string name="sim_pin_menu_item" msgid="3962286639645084880">"PIN של SIM"</string>
- <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK של SIM"</string>
- <string name="add_widget_item" msgid="279702152366857415">"בחר Widget..."</string>
- <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
- <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
- <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
- <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-ja/activitystrings.xml b/packages/Keyguard/res/values-ja/activitystrings.xml
deleted file mode 100644
index b0e77f1..0000000
--- a/packages/Keyguard/res/values-ja/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
- <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
- <string name="none_menu_item" msgid="6156747285687551424">"セキュリティなし"</string>
- <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string>
- <string name="password_menu_item" msgid="1959980499662153160">"パスワード"</string>
- <string name="pattern_menu_item" msgid="2987798152175140249">"パターン"</string>
- <string name="sim_pin_menu_item" msgid="3962286639645084880">"SIM PIN"</string>
- <string name="sim_puk_menu_item" msgid="6190044133008392974">"SIM PUK"</string>
- <string name="add_widget_item" msgid="279702152366857415">"ウィジェットを選択..."</string>
- <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
- <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
- <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
- <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-ko/activitystrings.xml b/packages/Keyguard/res/values-ko/activitystrings.xml
deleted file mode 100644
index 3aab225..0000000
--- a/packages/Keyguard/res/values-ko/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
- <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
- <string name="none_menu_item" msgid="6156747285687551424">"보안 사용 안함"</string>
- <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string>
- <string name="password_menu_item" msgid="1959980499662153160">"비밀번호"</string>
- <string name="pattern_menu_item" msgid="2987798152175140249">"패턴"</string>
- <string name="sim_pin_menu_item" msgid="3962286639645084880">"SIM PIN"</string>
- <string name="sim_puk_menu_item" msgid="6190044133008392974">"SIM PUK"</string>
- <string name="add_widget_item" msgid="279702152366857415">"위젯 선택..."</string>
- <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
- <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
- <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
- <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-lt/activitystrings.xml b/packages/Keyguard/res/values-lt/activitystrings.xml
deleted file mode 100644
index 9ec21e4..0000000
--- a/packages/Keyguard/res/values-lt/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
- <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
- <string name="none_menu_item" msgid="6156747285687551424">"Neapsaugota"</string>
- <string name="pin_menu_item" msgid="1179756433268962311">"PIN kodas"</string>
- <string name="password_menu_item" msgid="1959980499662153160">"Slaptažodis"</string>
- <string name="pattern_menu_item" msgid="2987798152175140249">"Šablonas"</string>
- <string name="sim_pin_menu_item" msgid="3962286639645084880">"SIM kortelės PIN kodas"</string>
- <string name="sim_puk_menu_item" msgid="6190044133008392974">"SIM kortelės PUK kodas"</string>
- <string name="add_widget_item" msgid="279702152366857415">"Pasirinkite valdiklį..."</string>
- <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
- <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
- <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
- <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-lv/activitystrings.xml b/packages/Keyguard/res/values-lv/activitystrings.xml
deleted file mode 100644
index 96807de..0000000
--- a/packages/Keyguard/res/values-lv/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
- <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
- <string name="none_menu_item" msgid="6156747285687551424">"Drošība nav iespējota"</string>
- <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string>
- <string name="password_menu_item" msgid="1959980499662153160">"Parole"</string>
- <string name="pattern_menu_item" msgid="2987798152175140249">"Kombinācija"</string>
- <string name="sim_pin_menu_item" msgid="3962286639645084880">"SIM PIN"</string>
- <string name="sim_puk_menu_item" msgid="6190044133008392974">"SIM PUK"</string>
- <string name="add_widget_item" msgid="279702152366857415">"Izvēlēties logrīku..."</string>
- <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
- <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
- <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
- <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-nb/activitystrings.xml b/packages/Keyguard/res/values-nb/activitystrings.xml
deleted file mode 100644
index 015df15..0000000
--- a/packages/Keyguard/res/values-nb/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
- <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
- <string name="none_menu_item" msgid="6156747285687551424">"Ingen sikkerhet"</string>
- <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string>
- <string name="password_menu_item" msgid="1959980499662153160">"Passord"</string>
- <string name="pattern_menu_item" msgid="2987798152175140249">"Mønster"</string>
- <string name="sim_pin_menu_item" msgid="3962286639645084880">"Personlig kode for SIM-kort"</string>
- <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK-kode for SIM-kort"</string>
- <string name="add_widget_item" msgid="279702152366857415">"Velg modul"</string>
- <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
- <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
- <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
- <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-nl/activitystrings.xml b/packages/Keyguard/res/values-nl/activitystrings.xml
deleted file mode 100644
index fcb0be9..0000000
--- a/packages/Keyguard/res/values-nl/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
- <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
- <string name="none_menu_item" msgid="6156747285687551424">"Geen beveiliging"</string>
- <string name="pin_menu_item" msgid="1179756433268962311">"Pincode"</string>
- <string name="password_menu_item" msgid="1959980499662153160">"Wachtwoord"</string>
- <string name="pattern_menu_item" msgid="2987798152175140249">"Patroon"</string>
- <string name="sim_pin_menu_item" msgid="3962286639645084880">"Pincode van simkaart"</string>
- <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK-code van simkaart"</string>
- <string name="add_widget_item" msgid="279702152366857415">"Widget kiezen…"</string>
- <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
- <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
- <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
- <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-pl/activitystrings.xml b/packages/Keyguard/res/values-pl/activitystrings.xml
deleted file mode 100644
index f04170e..0000000
--- a/packages/Keyguard/res/values-pl/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
- <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
- <string name="none_menu_item" msgid="6156747285687551424">"Bez zabezpieczeń"</string>
- <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string>
- <string name="password_menu_item" msgid="1959980499662153160">"Hasło"</string>
- <string name="pattern_menu_item" msgid="2987798152175140249">"Wzór"</string>
- <string name="sim_pin_menu_item" msgid="3962286639645084880">"PIN do karty SIM"</string>
- <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK do karty SIM"</string>
- <string name="add_widget_item" msgid="279702152366857415">"Wybierz widżet..."</string>
- <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
- <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
- <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
- <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-pt-rPT/activitystrings.xml b/packages/Keyguard/res/values-pt-rPT/activitystrings.xml
deleted file mode 100644
index 470865d..0000000
--- a/packages/Keyguard/res/values-pt-rPT/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
- <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
- <string name="none_menu_item" msgid="6156747285687551424">"Sem segurança"</string>
- <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string>
- <string name="password_menu_item" msgid="1959980499662153160">"Palavra-passe"</string>
- <string name="pattern_menu_item" msgid="2987798152175140249">"Sequência"</string>
- <string name="sim_pin_menu_item" msgid="3962286639645084880">"PIN do SIM"</string>
- <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK do SIM"</string>
- <string name="add_widget_item" msgid="279702152366857415">"Escolher widget..."</string>
- <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
- <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
- <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
- <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-pt/activitystrings.xml b/packages/Keyguard/res/values-pt/activitystrings.xml
deleted file mode 100644
index 7a63708..0000000
--- a/packages/Keyguard/res/values-pt/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
- <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
- <string name="none_menu_item" msgid="6156747285687551424">"Sem segurança"</string>
- <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string>
- <string name="password_menu_item" msgid="1959980499662153160">"Senha"</string>
- <string name="pattern_menu_item" msgid="2987798152175140249">"Padrão"</string>
- <string name="sim_pin_menu_item" msgid="3962286639645084880">"PIN do SIM"</string>
- <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK do SIM"</string>
- <string name="add_widget_item" msgid="279702152366857415">"Escolher widget..."</string>
- <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
- <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
- <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
- <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-ro/activitystrings.xml b/packages/Keyguard/res/values-ro/activitystrings.xml
deleted file mode 100644
index 6d3447d..0000000
--- a/packages/Keyguard/res/values-ro/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
- <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
- <string name="none_menu_item" msgid="6156747285687551424">"Fără securitate"</string>
- <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string>
- <string name="password_menu_item" msgid="1959980499662153160">"Parolă"</string>
- <string name="pattern_menu_item" msgid="2987798152175140249">"Model"</string>
- <string name="sim_pin_menu_item" msgid="3962286639645084880">"PIN SIM"</string>
- <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK SIM"</string>
- <string name="add_widget_item" msgid="279702152366857415">"Alegeți un widget..."</string>
- <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
- <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
- <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
- <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-ru/activitystrings.xml b/packages/Keyguard/res/values-ru/activitystrings.xml
deleted file mode 100644
index 002cd56..0000000
--- a/packages/Keyguard/res/values-ru/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
- <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
- <string name="none_menu_item" msgid="6156747285687551424">"Защита отключена"</string>
- <string name="pin_menu_item" msgid="1179756433268962311">"PIN-код"</string>
- <string name="password_menu_item" msgid="1959980499662153160">"Пароль"</string>
- <string name="pattern_menu_item" msgid="2987798152175140249">"Графический ключ"</string>
- <string name="sim_pin_menu_item" msgid="3962286639645084880">"PIN-код SIM-карты"</string>
- <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK-код SIM-карты"</string>
- <string name="add_widget_item" msgid="279702152366857415">"Выбор виджета..."</string>
- <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
- <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
- <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
- <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-sk/activitystrings.xml b/packages/Keyguard/res/values-sk/activitystrings.xml
deleted file mode 100644
index 33f2228..0000000
--- a/packages/Keyguard/res/values-sk/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
- <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
- <string name="none_menu_item" msgid="6156747285687551424">"Bez zabezpečenia"</string>
- <string name="pin_menu_item" msgid="1179756433268962311">"Kód PIN"</string>
- <string name="password_menu_item" msgid="1959980499662153160">"Heslo"</string>
- <string name="pattern_menu_item" msgid="2987798152175140249">"Vzor"</string>
- <string name="sim_pin_menu_item" msgid="3962286639645084880">"PIN karty SIM"</string>
- <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK karty SIM"</string>
- <string name="add_widget_item" msgid="279702152366857415">"Vyberte miniaplikáciu..."</string>
- <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
- <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
- <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
- <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-sl/activitystrings.xml b/packages/Keyguard/res/values-sl/activitystrings.xml
deleted file mode 100644
index 2c60219..0000000
--- a/packages/Keyguard/res/values-sl/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
- <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
- <string name="none_menu_item" msgid="6156747285687551424">"Brez varnosti"</string>
- <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string>
- <string name="password_menu_item" msgid="1959980499662153160">"Geslo"</string>
- <string name="pattern_menu_item" msgid="2987798152175140249">"Vzorec"</string>
- <string name="sim_pin_menu_item" msgid="3962286639645084880">"PIN za kartico SIM"</string>
- <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK za kartico SIM"</string>
- <string name="add_widget_item" msgid="279702152366857415">"Izberite pripomoček ..."</string>
- <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
- <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
- <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
- <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-sr/activitystrings.xml b/packages/Keyguard/res/values-sr/activitystrings.xml
deleted file mode 100644
index 34802df..0000000
--- a/packages/Keyguard/res/values-sr/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
- <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
- <string name="none_menu_item" msgid="6156747285687551424">"Без заштите"</string>
- <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string>
- <string name="password_menu_item" msgid="1959980499662153160">"Лозинка"</string>
- <string name="pattern_menu_item" msgid="2987798152175140249">"Шаблон"</string>
- <string name="sim_pin_menu_item" msgid="3962286639645084880">"PIN SIM картице"</string>
- <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK SIM картице"</string>
- <string name="add_widget_item" msgid="279702152366857415">"Изабери виџет..."</string>
- <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
- <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
- <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
- <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-sv/activitystrings.xml b/packages/Keyguard/res/values-sv/activitystrings.xml
deleted file mode 100644
index e664383..0000000
--- a/packages/Keyguard/res/values-sv/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
- <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
- <string name="none_menu_item" msgid="6156747285687551424">"Ingen säkerhet"</string>
- <string name="pin_menu_item" msgid="1179756433268962311">"PIN-kod"</string>
- <string name="password_menu_item" msgid="1959980499662153160">"Lösenord"</string>
- <string name="pattern_menu_item" msgid="2987798152175140249">"Grafiskt lösenord"</string>
- <string name="sim_pin_menu_item" msgid="3962286639645084880">"PIN-kod för SIM-kort"</string>
- <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK-kod för SIM-kort"</string>
- <string name="add_widget_item" msgid="279702152366857415">"Välj widget ..."</string>
- <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
- <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
- <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
- <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-sw/activitystrings.xml b/packages/Keyguard/res/values-sw/activitystrings.xml
deleted file mode 100644
index 357b911..0000000
--- a/packages/Keyguard/res/values-sw/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
- <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
- <string name="none_menu_item" msgid="6156747285687551424">"Hakuna usalama"</string>
- <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string>
- <string name="password_menu_item" msgid="1959980499662153160">"Nenosiri"</string>
- <string name="pattern_menu_item" msgid="2987798152175140249">"Ruwaza"</string>
- <string name="sim_pin_menu_item" msgid="3962286639645084880">"PIN ya SIM"</string>
- <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK ya SIM"</string>
- <string name="add_widget_item" msgid="279702152366857415">"Chagua wijeti..."</string>
- <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
- <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
- <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
- <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-th/activitystrings.xml b/packages/Keyguard/res/values-th/activitystrings.xml
deleted file mode 100644
index 64f50cc..0000000
--- a/packages/Keyguard/res/values-th/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
- <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
- <string name="none_menu_item" msgid="6156747285687551424">"ไม่มีการรักษาความปลอดภัย"</string>
- <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string>
- <string name="password_menu_item" msgid="1959980499662153160">"รหัสผ่าน"</string>
- <string name="pattern_menu_item" msgid="2987798152175140249">"รูปแบบ"</string>
- <string name="sim_pin_menu_item" msgid="3962286639645084880">"PIN ของซิม"</string>
- <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK ของซิม"</string>
- <string name="add_widget_item" msgid="279702152366857415">"เลือกวิดเจ็ต..."</string>
- <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
- <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
- <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
- <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-tl/activitystrings.xml b/packages/Keyguard/res/values-tl/activitystrings.xml
deleted file mode 100644
index 71f3564..0000000
--- a/packages/Keyguard/res/values-tl/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
- <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
- <string name="none_menu_item" msgid="6156747285687551424">"Walang seguridad"</string>
- <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string>
- <string name="password_menu_item" msgid="1959980499662153160">"Password"</string>
- <string name="pattern_menu_item" msgid="2987798152175140249">"Pattern"</string>
- <string name="sim_pin_menu_item" msgid="3962286639645084880">"SIM PIN"</string>
- <string name="sim_puk_menu_item" msgid="6190044133008392974">"SIM PUK"</string>
- <string name="add_widget_item" msgid="279702152366857415">"Pumili ng widget..."</string>
- <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenNaka-off"</string>
- <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenNaka-on"</string>
- <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
- <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-tr/activitystrings.xml b/packages/Keyguard/res/values-tr/activitystrings.xml
deleted file mode 100644
index 7f5a958..0000000
--- a/packages/Keyguard/res/values-tr/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
- <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
- <string name="none_menu_item" msgid="6156747285687551424">"Güvenlik yok"</string>
- <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string>
- <string name="password_menu_item" msgid="1959980499662153160">"Şifre"</string>
- <string name="pattern_menu_item" msgid="2987798152175140249">"Desen"</string>
- <string name="sim_pin_menu_item" msgid="3962286639645084880">"SIM PIN\'i"</string>
- <string name="sim_puk_menu_item" msgid="6190044133008392974">"SIM PUK\'u"</string>
- <string name="add_widget_item" msgid="279702152366857415">"Widget seç..."</string>
- <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
- <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
- <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
- <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-uk/activitystrings.xml b/packages/Keyguard/res/values-uk/activitystrings.xml
deleted file mode 100644
index d4d0a4d..0000000
--- a/packages/Keyguard/res/values-uk/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
- <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
- <string name="none_menu_item" msgid="6156747285687551424">"Без захисту"</string>
- <string name="pin_menu_item" msgid="1179756433268962311">"PIN-код"</string>
- <string name="password_menu_item" msgid="1959980499662153160">"Пароль"</string>
- <string name="pattern_menu_item" msgid="2987798152175140249">"Ключ"</string>
- <string name="sim_pin_menu_item" msgid="3962286639645084880">"PIN-код SIM-карти"</string>
- <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK-код SIM-карти"</string>
- <string name="add_widget_item" msgid="279702152366857415">"Вибрати віджет…"</string>
- <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
- <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
- <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
- <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-vi/activitystrings.xml b/packages/Keyguard/res/values-vi/activitystrings.xml
deleted file mode 100644
index 009c3bd..0000000
--- a/packages/Keyguard/res/values-vi/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
- <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
- <string name="none_menu_item" msgid="6156747285687551424">"Không có bảo mật"</string>
- <string name="pin_menu_item" msgid="1179756433268962311">"Mã PIN"</string>
- <string name="password_menu_item" msgid="1959980499662153160">"Mật khẩu"</string>
- <string name="pattern_menu_item" msgid="2987798152175140249">"Hình"</string>
- <string name="sim_pin_menu_item" msgid="3962286639645084880">"Mã PIN của SIM"</string>
- <string name="sim_puk_menu_item" msgid="6190044133008392974">"Mã PUK của SIM"</string>
- <string name="add_widget_item" msgid="279702152366857415">"Chọn tiện ích..."</string>
- <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
- <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
- <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
- <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-zh-rCN/activitystrings.xml b/packages/Keyguard/res/values-zh-rCN/activitystrings.xml
deleted file mode 100644
index d9b99e0..0000000
--- a/packages/Keyguard/res/values-zh-rCN/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
- <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
- <string name="none_menu_item" msgid="6156747285687551424">"无安全措施"</string>
- <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string>
- <string name="password_menu_item" msgid="1959980499662153160">"密码"</string>
- <string name="pattern_menu_item" msgid="2987798152175140249">"图案"</string>
- <string name="sim_pin_menu_item" msgid="3962286639645084880">"SIM 卡 PIN"</string>
- <string name="sim_puk_menu_item" msgid="6190044133008392974">"SIM 卡 PUK"</string>
- <string name="add_widget_item" msgid="279702152366857415">"选择小部件..."</string>
- <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
- <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
- <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
- <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-zh-rTW/activitystrings.xml b/packages/Keyguard/res/values-zh-rTW/activitystrings.xml
deleted file mode 100644
index 42c2a51..0000000
--- a/packages/Keyguard/res/values-zh-rTW/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="3352888186674981593">"Keyguard 測試活動"</string>
- <string name="secure_app_name" msgid="7955498742816868049">"整合式相機"</string>
- <string name="none_menu_item" msgid="6156747285687551424">"無安全性設定"</string>
- <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string>
- <string name="password_menu_item" msgid="1959980499662153160">"密碼"</string>
- <string name="pattern_menu_item" msgid="2987798152175140249">"圖形"</string>
- <string name="sim_pin_menu_item" msgid="3962286639645084880">"SIM PIN"</string>
- <string name="sim_puk_menu_item" msgid="6190044133008392974">"SIM PUK"</string>
- <string name="add_widget_item" msgid="279702152366857415">"選擇小工具..."</string>
- <string name="on_screen_turned_off" msgid="8761396329770508367">"在螢幕上關閉"</string>
- <string name="on_screen_turned_on" msgid="9222926818030728999">"在螢幕上開啟"</string>
- <string name="do_keyguard" msgid="9210936977823118796">"執行 Keyguard"</string>
- <string name="verify_unlock" msgid="8508722273329306968">"驗證解鎖"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-zu/activitystrings.xml b/packages/Keyguard/res/values-zu/activitystrings.xml
deleted file mode 100644
index 0031a8b..0000000
--- a/packages/Keyguard/res/values-zu/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="3352888186674981593">"I-KeyguardTestActivity"</string>
- <string name="secure_app_name" msgid="7955498742816868049">"I-UnifiedCamera"</string>
- <string name="none_menu_item" msgid="6156747285687551424">"Akukho ukuphepha"</string>
- <string name="pin_menu_item" msgid="1179756433268962311">"I-PIN"</string>
- <string name="password_menu_item" msgid="1959980499662153160">"Iphasiwedi"</string>
- <string name="pattern_menu_item" msgid="2987798152175140249">"Iphethini"</string>
- <string name="sim_pin_menu_item" msgid="3962286639645084880">"I-PIN ye-SIM"</string>
- <string name="sim_puk_menu_item" msgid="6190044133008392974">"I-PUK YE-SIM"</string>
- <string name="add_widget_item" msgid="279702152366857415">"Khetha iwijethi..."</string>
- <string name="on_screen_turned_off" msgid="8761396329770508367">"I-onScreenTurnedOff"</string>
- <string name="on_screen_turned_on" msgid="9222926818030728999">"I-onScreenTurnedOn"</string>
- <string name="do_keyguard" msgid="9210936977823118796">"I-doKeyguard"</string>
- <string name="verify_unlock" msgid="8508722273329306968">"I-verifyUnlock"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-af/strings.xml b/packages/SystemUI/res/values-af/strings.xml
index 98d132a..a3cabc2 100644
--- a/packages/SystemUI/res/values-af/strings.xml
+++ b/packages/SystemUI/res/values-af/strings.xml
@@ -209,4 +209,9 @@
<string name="description_target_search" msgid="3091587249776033139">"Soek"</string>
<string name="description_direction_up" msgid="7169032478259485180">"Gly op vir <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
<string name="description_direction_left" msgid="7207478719805562165">"Gly links vir <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+ <plurals name="zen_mode_notification_title">
+ <item quantity="one" msgid="7809876956258040354">"Kennisgewing versteek"</item>
+ <item quantity="other" msgid="7388721375827338153">"%d kennisgewings versteek"</item>
+ </plurals>
+ <string name="zen_mode_notification_text" msgid="8336623711388065713">"Raak om te wys"</string>
</resources>
diff --git a/packages/SystemUI/res/values-am/strings.xml b/packages/SystemUI/res/values-am/strings.xml
index 2e116d0..5dbc618 100644
--- a/packages/SystemUI/res/values-am/strings.xml
+++ b/packages/SystemUI/res/values-am/strings.xml
@@ -209,4 +209,9 @@
<string name="description_target_search" msgid="3091587249776033139">"ፍለጋ"</string>
<string name="description_direction_up" msgid="7169032478259485180">"ለ<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ወደ ላይ አንሸራትት።"</string>
<string name="description_direction_left" msgid="7207478719805562165">"ለ<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ወደ ግራ አንሸራትት።"</string>
+ <plurals name="zen_mode_notification_title">
+ <item quantity="one" msgid="7809876956258040354">"ማሳወቂያ ተደብቋል"</item>
+ <item quantity="other" msgid="7388721375827338153">"%d ማሳወቂያዎች ተደብቀዋል"</item>
+ </plurals>
+ <string name="zen_mode_notification_text" msgid="8336623711388065713">"ለማሳየት ነካ ያድርጉ"</string>
</resources>
diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml
index 596f612..715aadc 100644
--- a/packages/SystemUI/res/values-ar/strings.xml
+++ b/packages/SystemUI/res/values-ar/strings.xml
@@ -209,4 +209,9 @@
<string name="description_target_search" msgid="3091587249776033139">"بحث"</string>
<string name="description_direction_up" msgid="7169032478259485180">"تمرير لأعلى لـ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
<string name="description_direction_left" msgid="7207478719805562165">"تمرير لليسار لـ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+ <plurals name="zen_mode_notification_title">
+ <item quantity="one" msgid="7809876956258040354">"تم إخفاء الإشعار"</item>
+ <item quantity="other" msgid="7388721375827338153">"تم إخفاء %d من الإشعارات"</item>
+ </plurals>
+ <string name="zen_mode_notification_text" msgid="8336623711388065713">"المس للعرض"</string>
</resources>
diff --git a/packages/SystemUI/res/values-bg/strings.xml b/packages/SystemUI/res/values-bg/strings.xml
index 335c33a..c9ca1f0 100644
--- a/packages/SystemUI/res/values-bg/strings.xml
+++ b/packages/SystemUI/res/values-bg/strings.xml
@@ -209,4 +209,9 @@
<string name="description_target_search" msgid="3091587249776033139">"Търсене"</string>
<string name="description_direction_up" msgid="7169032478259485180">"Плъзнете нагоре за <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
<string name="description_direction_left" msgid="7207478719805562165">"Плъзнете наляво за <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+ <plurals name="zen_mode_notification_title">
+ <item quantity="one" msgid="7809876956258040354">"Известието е скрито"</item>
+ <item quantity="other" msgid="7388721375827338153">"%d известия са скрити"</item>
+ </plurals>
+ <string name="zen_mode_notification_text" msgid="8336623711388065713">"Докоснете за показване"</string>
</resources>
diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml
index e79e094..62d4c72 100644
--- a/packages/SystemUI/res/values-ca/strings.xml
+++ b/packages/SystemUI/res/values-ca/strings.xml
@@ -211,4 +211,9 @@
<string name="description_target_search" msgid="3091587249776033139">"Cerca"</string>
<string name="description_direction_up" msgid="7169032478259485180">"Fes lliscar el dit cap amunt per <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
<string name="description_direction_left" msgid="7207478719805562165">"Fes lliscar el dit cap a l\'esquerra per <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+ <plurals name="zen_mode_notification_title">
+ <item quantity="one" msgid="7809876956258040354">"Notificació oculta"</item>
+ <item quantity="other" msgid="7388721375827338153">"%d notificacions ocultes"</item>
+ </plurals>
+ <string name="zen_mode_notification_text" msgid="8336623711388065713">"Toca per mostrar-ho."</string>
</resources>
diff --git a/packages/SystemUI/res/values-cs/strings.xml b/packages/SystemUI/res/values-cs/strings.xml
index 60bbe3b..e96f8cf 100644
--- a/packages/SystemUI/res/values-cs/strings.xml
+++ b/packages/SystemUI/res/values-cs/strings.xml
@@ -211,4 +211,9 @@
<string name="description_target_search" msgid="3091587249776033139">"Vyhledávání"</string>
<string name="description_direction_up" msgid="7169032478259485180">"Přejeďte prstem nahoru: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>"</string>
<string name="description_direction_left" msgid="7207478719805562165">"Přejeďte prstem doleva: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>"</string>
+ <plurals name="zen_mode_notification_title">
+ <item quantity="one" msgid="7809876956258040354">"Oznámení bylo skryto"</item>
+ <item quantity="other" msgid="7388721375827338153">"Skrytá oznámení: %d"</item>
+ </plurals>
+ <string name="zen_mode_notification_text" msgid="8336623711388065713">"Oznámení zobrazíte kliknutím"</string>
</resources>
diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml
index 86c1eb96..5b4a41c 100644
--- a/packages/SystemUI/res/values-da/strings.xml
+++ b/packages/SystemUI/res/values-da/strings.xml
@@ -209,4 +209,9 @@
<string name="description_target_search" msgid="3091587249776033139">"Søgning"</string>
<string name="description_direction_up" msgid="7169032478259485180">"Glid op for at <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
<string name="description_direction_left" msgid="7207478719805562165">"Glid til venstre for at <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+ <plurals name="zen_mode_notification_title">
+ <item quantity="one" msgid="7809876956258040354">"Underretningen er skjult"</item>
+ <item quantity="other" msgid="7388721375827338153">"%d underretninger er skjult"</item>
+ </plurals>
+ <string name="zen_mode_notification_text" msgid="8336623711388065713">"Tryk for at vise"</string>
</resources>
diff --git a/packages/SystemUI/res/values-de/strings.xml b/packages/SystemUI/res/values-de/strings.xml
index c8cb0a4..9557897 100644
--- a/packages/SystemUI/res/values-de/strings.xml
+++ b/packages/SystemUI/res/values-de/strings.xml
@@ -211,4 +211,9 @@
<string name="description_target_search" msgid="3091587249776033139">"Suche"</string>
<string name="description_direction_up" msgid="7169032478259485180">"Zum <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> nach oben schieben"</string>
<string name="description_direction_left" msgid="7207478719805562165">"Zum <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> nach links schieben"</string>
+ <plurals name="zen_mode_notification_title">
+ <item quantity="one" msgid="7809876956258040354">"Benachrichtigung ausgeblendet"</item>
+ <item quantity="other" msgid="7388721375827338153">"%d Benachrichtigungen ausgeblendet"</item>
+ </plurals>
+ <string name="zen_mode_notification_text" msgid="8336623711388065713">"Zum Ansehen tippen"</string>
</resources>
diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml
index 79025b6..796b80d 100644
--- a/packages/SystemUI/res/values-el/strings.xml
+++ b/packages/SystemUI/res/values-el/strings.xml
@@ -211,4 +211,9 @@
<string name="description_target_search" msgid="3091587249776033139">"Αναζήτηση"</string>
<string name="description_direction_up" msgid="7169032478259485180">"Κύλιση προς τα επάνω για <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
<string name="description_direction_left" msgid="7207478719805562165">"Κύλιση προς τα αριστερά για <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+ <plurals name="zen_mode_notification_title">
+ <item quantity="one" msgid="7809876956258040354">"Έγινε απόκρυψη της ειδοποίησης"</item>
+ <item quantity="other" msgid="7388721375827338153">"Έγινε απόκρυψη %d ειδοποιήσεων"</item>
+ </plurals>
+ <string name="zen_mode_notification_text" msgid="8336623711388065713">"Αγγίξτε για εμφάνιση"</string>
</resources>
diff --git a/packages/SystemUI/res/values-en-rGB/strings.xml b/packages/SystemUI/res/values-en-rGB/strings.xml
index 338c8ac..77262d5 100644
--- a/packages/SystemUI/res/values-en-rGB/strings.xml
+++ b/packages/SystemUI/res/values-en-rGB/strings.xml
@@ -209,4 +209,9 @@
<string name="description_target_search" msgid="3091587249776033139">"Search"</string>
<string name="description_direction_up" msgid="7169032478259485180">"Slide up for <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
<string name="description_direction_left" msgid="7207478719805562165">"Slide left for <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+ <plurals name="zen_mode_notification_title">
+ <item quantity="one" msgid="7809876956258040354">"Notification hidden"</item>
+ <item quantity="other" msgid="7388721375827338153">"%d notifications hidden"</item>
+ </plurals>
+ <string name="zen_mode_notification_text" msgid="8336623711388065713">"Touch to show"</string>
</resources>
diff --git a/packages/SystemUI/res/values-en-rIN/strings.xml b/packages/SystemUI/res/values-en-rIN/strings.xml
index 338c8ac..77262d5 100644
--- a/packages/SystemUI/res/values-en-rIN/strings.xml
+++ b/packages/SystemUI/res/values-en-rIN/strings.xml
@@ -209,4 +209,9 @@
<string name="description_target_search" msgid="3091587249776033139">"Search"</string>
<string name="description_direction_up" msgid="7169032478259485180">"Slide up for <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
<string name="description_direction_left" msgid="7207478719805562165">"Slide left for <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+ <plurals name="zen_mode_notification_title">
+ <item quantity="one" msgid="7809876956258040354">"Notification hidden"</item>
+ <item quantity="other" msgid="7388721375827338153">"%d notifications hidden"</item>
+ </plurals>
+ <string name="zen_mode_notification_text" msgid="8336623711388065713">"Touch to show"</string>
</resources>
diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml
index 89fe58b..f195f6a 100644
--- a/packages/SystemUI/res/values-es-rUS/strings.xml
+++ b/packages/SystemUI/res/values-es-rUS/strings.xml
@@ -211,4 +211,9 @@
<string name="description_target_search" msgid="3091587249776033139">"Buscar"</string>
<string name="description_direction_up" msgid="7169032478259485180">"Desliza el dedo hacia arriba para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
<string name="description_direction_left" msgid="7207478719805562165">"Desliza el dedo hacia la izquierda para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+ <plurals name="zen_mode_notification_title">
+ <item quantity="one" msgid="7809876956258040354">"Notificación oculta"</item>
+ <item quantity="other" msgid="7388721375827338153">"%d notificaciones ocultas"</item>
+ </plurals>
+ <string name="zen_mode_notification_text" msgid="8336623711388065713">"Toca para mostrar"</string>
</resources>
diff --git a/packages/SystemUI/res/values-es/strings.xml b/packages/SystemUI/res/values-es/strings.xml
index f2a9850..d6ddd63 100644
--- a/packages/SystemUI/res/values-es/strings.xml
+++ b/packages/SystemUI/res/values-es/strings.xml
@@ -209,4 +209,9 @@
<string name="description_target_search" msgid="3091587249776033139">"Buscar"</string>
<string name="description_direction_up" msgid="7169032478259485180">"Desliza el dedo hacia arriba para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
<string name="description_direction_left" msgid="7207478719805562165">"Desliza el dedo hacia la izquierda para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+ <plurals name="zen_mode_notification_title">
+ <item quantity="one" msgid="7809876956258040354">"Notification oculta"</item>
+ <item quantity="other" msgid="7388721375827338153">"%d notificaciones ocultas"</item>
+ </plurals>
+ <string name="zen_mode_notification_text" msgid="8336623711388065713">"Toca para mostrar"</string>
</resources>
diff --git a/packages/SystemUI/res/values-et-rEE/strings.xml b/packages/SystemUI/res/values-et-rEE/strings.xml
index b734fa8..ab9b18e 100644
--- a/packages/SystemUI/res/values-et-rEE/strings.xml
+++ b/packages/SystemUI/res/values-et-rEE/strings.xml
@@ -209,4 +209,7 @@
<string name="description_target_search" msgid="3091587249776033139">"Otsing"</string>
<string name="description_direction_up" msgid="7169032478259485180">"Lohistage üles: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
<string name="description_direction_left" msgid="7207478719805562165">"Lohistage vasakule: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+ <!-- String.format failed for translation -->
+ <!-- no translation found for zen_mode_notification_title:other (7388721375827338153) -->
+ <string name="zen_mode_notification_text" msgid="8336623711388065713">"Puudutage kuvamiseks"</string>
</resources>
diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml
index 5780a57..bf295f2 100644
--- a/packages/SystemUI/res/values-fa/strings.xml
+++ b/packages/SystemUI/res/values-fa/strings.xml
@@ -209,4 +209,9 @@
<string name="description_target_search" msgid="3091587249776033139">"جستجو"</string>
<string name="description_direction_up" msgid="7169032478259485180">"لغزاندن به بالا برای <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
<string name="description_direction_left" msgid="7207478719805562165">"لغزاندن به چپ برای <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+ <plurals name="zen_mode_notification_title">
+ <item quantity="one" msgid="7809876956258040354">"اعلان پنهان شده"</item>
+ <item quantity="other" msgid="7388721375827338153">"%d اعلان پنهان شده"</item>
+ </plurals>
+ <string name="zen_mode_notification_text" msgid="8336623711388065713">"برای نمایش لمس کنید"</string>
</resources>
diff --git a/packages/SystemUI/res/values-fi/strings.xml b/packages/SystemUI/res/values-fi/strings.xml
index 4809741..0fa764e 100644
--- a/packages/SystemUI/res/values-fi/strings.xml
+++ b/packages/SystemUI/res/values-fi/strings.xml
@@ -209,4 +209,9 @@
<string name="description_target_search" msgid="3091587249776033139">"Haku"</string>
<string name="description_direction_up" msgid="7169032478259485180">"Liu\'uta ylös ja <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
<string name="description_direction_left" msgid="7207478719805562165">"Liu\'uta vasemmalle ja <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+ <plurals name="zen_mode_notification_title">
+ <item quantity="one" msgid="7809876956258040354">"Ilmoitus piilotettu"</item>
+ <item quantity="other" msgid="7388721375827338153">"%d ilmoitusta piilotettu"</item>
+ </plurals>
+ <string name="zen_mode_notification_text" msgid="8336623711388065713">"Näytä koskettamalla"</string>
</resources>
diff --git a/packages/SystemUI/res/values-fr-rCA/strings.xml b/packages/SystemUI/res/values-fr-rCA/strings.xml
index 36b54ce..2a2ed5e 100644
--- a/packages/SystemUI/res/values-fr-rCA/strings.xml
+++ b/packages/SystemUI/res/values-fr-rCA/strings.xml
@@ -211,4 +211,9 @@
<string name="description_target_search" msgid="3091587249776033139">"Recherche"</string>
<string name="description_direction_up" msgid="7169032478259485180">"Faire glisser le doigt vers le haut : <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>"</string>
<string name="description_direction_left" msgid="7207478719805562165">"Faites glisser votre doigt vers la gauche pour <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+ <plurals name="zen_mode_notification_title">
+ <item quantity="one" msgid="7809876956258040354">"Notification masquée"</item>
+ <item quantity="other" msgid="7388721375827338153">"%d notifications masquées"</item>
+ </plurals>
+ <string name="zen_mode_notification_text" msgid="8336623711388065713">"Touchez pour afficher la notification"</string>
</resources>
diff --git a/packages/SystemUI/res/values-fr/strings.xml b/packages/SystemUI/res/values-fr/strings.xml
index 5b81975..278e580 100644
--- a/packages/SystemUI/res/values-fr/strings.xml
+++ b/packages/SystemUI/res/values-fr/strings.xml
@@ -211,4 +211,9 @@
<string name="description_target_search" msgid="3091587249776033139">"Rechercher"</string>
<string name="description_direction_up" msgid="7169032478259485180">"Faites glisser vers le haut pour <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
<string name="description_direction_left" msgid="7207478719805562165">"Faites glisser vers la gauche pour <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+ <plurals name="zen_mode_notification_title">
+ <item quantity="one" msgid="7809876956258040354">"Notification masquée"</item>
+ <item quantity="other" msgid="7388721375827338153">"%d notifications masquées"</item>
+ </plurals>
+ <string name="zen_mode_notification_text" msgid="8336623711388065713">"Appuyer pour afficher"</string>
</resources>
diff --git a/packages/SystemUI/res/values-hi/strings.xml b/packages/SystemUI/res/values-hi/strings.xml
index 9be9550..139ae83 100644
--- a/packages/SystemUI/res/values-hi/strings.xml
+++ b/packages/SystemUI/res/values-hi/strings.xml
@@ -209,4 +209,9 @@
<string name="description_target_search" msgid="3091587249776033139">"खोजें"</string>
<string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> के लिए ऊपर स्लाइड करें."</string>
<string name="description_direction_left" msgid="7207478719805562165">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> के लिए बाएं स्लाइड करें."</string>
+ <plurals name="zen_mode_notification_title">
+ <item quantity="one" msgid="7809876956258040354">"सूचना छिपी हुई है"</item>
+ <item quantity="other" msgid="7388721375827338153">"%d सूचनाएं छिपी हुई हैं"</item>
+ </plurals>
+ <string name="zen_mode_notification_text" msgid="8336623711388065713">"दिखाने के लिए स्पर्श करें"</string>
</resources>
diff --git a/packages/SystemUI/res/values-hr/strings.xml b/packages/SystemUI/res/values-hr/strings.xml
index 21d6ef5..646c391 100644
--- a/packages/SystemUI/res/values-hr/strings.xml
+++ b/packages/SystemUI/res/values-hr/strings.xml
@@ -209,4 +209,9 @@
<string name="description_target_search" msgid="3091587249776033139">"Pretraživanje"</string>
<string name="description_direction_up" msgid="7169032478259485180">"Kliznite prema gore za <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
<string name="description_direction_left" msgid="7207478719805562165">"Kliznite lijevo za <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+ <plurals name="zen_mode_notification_title">
+ <item quantity="one" msgid="7809876956258040354">"Obavijest je skrivena"</item>
+ <item quantity="other" msgid="7388721375827338153">"Broj skrivenih obavijesti: %d"</item>
+ </plurals>
+ <string name="zen_mode_notification_text" msgid="8336623711388065713">"Dodirnite za prikaz"</string>
</resources>
diff --git a/packages/SystemUI/res/values-hu/strings.xml b/packages/SystemUI/res/values-hu/strings.xml
index 8e6ee4f..ea1caec 100644
--- a/packages/SystemUI/res/values-hu/strings.xml
+++ b/packages/SystemUI/res/values-hu/strings.xml
@@ -209,4 +209,9 @@
<string name="description_target_search" msgid="3091587249776033139">"Keresés"</string>
<string name="description_direction_up" msgid="7169032478259485180">"A(z) <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> művelethez csúsztassa felfelé."</string>
<string name="description_direction_left" msgid="7207478719805562165">"A(z) <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> művelethez csúsztassa balra."</string>
+ <plurals name="zen_mode_notification_title">
+ <item quantity="one" msgid="7809876956258040354">"Értesítés elrejtve"</item>
+ <item quantity="other" msgid="7388721375827338153">"%d értesítés elrejtve"</item>
+ </plurals>
+ <string name="zen_mode_notification_text" msgid="8336623711388065713">"A megtekintéshez érintse meg"</string>
</resources>
diff --git a/packages/SystemUI/res/values-hy-rAM/strings.xml b/packages/SystemUI/res/values-hy-rAM/strings.xml
index a787983..ca185f6 100644
--- a/packages/SystemUI/res/values-hy-rAM/strings.xml
+++ b/packages/SystemUI/res/values-hy-rAM/strings.xml
@@ -209,4 +209,9 @@
<string name="description_target_search" msgid="3091587249776033139">"Որոնել"</string>
<string name="description_direction_up" msgid="7169032478259485180">"Սահեցրեք վերև <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>-ի համար:"</string>
<string name="description_direction_left" msgid="7207478719805562165">"Սահեցրեք ձախ` <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>-ի համար:"</string>
+ <plurals name="zen_mode_notification_title">
+ <item quantity="one" msgid="7809876956258040354">"Ծանուցումը թաքցված է"</item>
+ <item quantity="other" msgid="7388721375827338153">"%d ծանուցում թաքցված է"</item>
+ </plurals>
+ <string name="zen_mode_notification_text" msgid="8336623711388065713">"Հպեք՝ ցուցադրելու համար"</string>
</resources>
diff --git a/packages/SystemUI/res/values-in/strings.xml b/packages/SystemUI/res/values-in/strings.xml
index 13fc534..d6dacd6 100644
--- a/packages/SystemUI/res/values-in/strings.xml
+++ b/packages/SystemUI/res/values-in/strings.xml
@@ -209,4 +209,9 @@
<string name="description_target_search" msgid="3091587249776033139">"Telusuri"</string>
<string name="description_direction_up" msgid="7169032478259485180">"Geser ke atas untuk <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
<string name="description_direction_left" msgid="7207478719805562165">"Geser ke kiri untuk <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+ <plurals name="zen_mode_notification_title">
+ <item quantity="one" msgid="7809876956258040354">"Pemberitahuan disembunyikan"</item>
+ <item quantity="other" msgid="7388721375827338153">"%d pemberitahuan disembunyikan"</item>
+ </plurals>
+ <string name="zen_mode_notification_text" msgid="8336623711388065713">"Sentuh untuk menampilkan"</string>
</resources>
diff --git a/packages/SystemUI/res/values-it/strings.xml b/packages/SystemUI/res/values-it/strings.xml
index 289d6c6..5a6d93b 100644
--- a/packages/SystemUI/res/values-it/strings.xml
+++ b/packages/SystemUI/res/values-it/strings.xml
@@ -211,4 +211,9 @@
<string name="description_target_search" msgid="3091587249776033139">"Ricerca"</string>
<string name="description_direction_up" msgid="7169032478259485180">"Su per <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
<string name="description_direction_left" msgid="7207478719805562165">"A sinistra per <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+ <plurals name="zen_mode_notification_title">
+ <item quantity="one" msgid="7809876956258040354">"Notifica nascosta"</item>
+ <item quantity="other" msgid="7388721375827338153">"%d notifiche nascoste"</item>
+ </plurals>
+ <string name="zen_mode_notification_text" msgid="8336623711388065713">"Tocca per visualizzare"</string>
</resources>
diff --git a/packages/SystemUI/res/values-iw/strings.xml b/packages/SystemUI/res/values-iw/strings.xml
index 798e8c3..3650bfe 100644
--- a/packages/SystemUI/res/values-iw/strings.xml
+++ b/packages/SystemUI/res/values-iw/strings.xml
@@ -209,4 +209,9 @@
<string name="description_target_search" msgid="3091587249776033139">"חיפוש"</string>
<string name="description_direction_up" msgid="7169032478259485180">"הסט למעלה כדי להציג <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
<string name="description_direction_left" msgid="7207478719805562165">"הסט שמאלה כדי להציג <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+ <plurals name="zen_mode_notification_title">
+ <item quantity="one" msgid="7809876956258040354">"ההודעה הוסתרה"</item>
+ <item quantity="other" msgid="7388721375827338153">"%d הודעות הוסתרו"</item>
+ </plurals>
+ <string name="zen_mode_notification_text" msgid="8336623711388065713">"גע כדי להציג"</string>
</resources>
diff --git a/packages/SystemUI/res/values-ja/strings.xml b/packages/SystemUI/res/values-ja/strings.xml
index c5070a8..97a3083 100644
--- a/packages/SystemUI/res/values-ja/strings.xml
+++ b/packages/SystemUI/res/values-ja/strings.xml
@@ -211,4 +211,9 @@
<string name="description_target_search" msgid="3091587249776033139">"検索します"</string>
<string name="description_direction_up" msgid="7169032478259485180">"上にスライドして<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>を行います。"</string>
<string name="description_direction_left" msgid="7207478719805562165">"左にスライドして<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>を行います。"</string>
+ <plurals name="zen_mode_notification_title">
+ <item quantity="one" msgid="7809876956258040354">"通知が非表示"</item>
+ <item quantity="other" msgid="7388721375827338153">"%d件の通知が非表示"</item>
+ </plurals>
+ <string name="zen_mode_notification_text" msgid="8336623711388065713">"表示するにはタップします"</string>
</resources>
diff --git a/packages/SystemUI/res/values-ka-rGE/strings.xml b/packages/SystemUI/res/values-ka-rGE/strings.xml
index bbdce19..d893f51 100644
--- a/packages/SystemUI/res/values-ka-rGE/strings.xml
+++ b/packages/SystemUI/res/values-ka-rGE/strings.xml
@@ -209,4 +209,9 @@
<string name="description_target_search" msgid="3091587249776033139">"ძიება"</string>
<string name="description_direction_up" msgid="7169032478259485180">"გაასრიალეთ ზემოთ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>-თვის."</string>
<string name="description_direction_left" msgid="7207478719805562165">"გაასრიალეთ მარცხნივ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>-თვის."</string>
+ <plurals name="zen_mode_notification_title">
+ <item quantity="one" msgid="7809876956258040354">"შეტყობინება დამალულია"</item>
+ <item quantity="other" msgid="7388721375827338153">"%d შეტყობინება დამალულია"</item>
+ </plurals>
+ <string name="zen_mode_notification_text" msgid="8336623711388065713">"შეეხეთ საჩვენებლად"</string>
</resources>
diff --git a/packages/SystemUI/res/values-km-rKH/strings.xml b/packages/SystemUI/res/values-km-rKH/strings.xml
index 61ca77d..ed0b874 100644
--- a/packages/SystemUI/res/values-km-rKH/strings.xml
+++ b/packages/SystemUI/res/values-km-rKH/strings.xml
@@ -209,4 +209,9 @@
<string name="description_target_search" msgid="3091587249776033139">"ស្វែងរក"</string>
<string name="description_direction_up" msgid="7169032478259485180">"រុញឡើងលើដើម្បី <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ។"</string>
<string name="description_direction_left" msgid="7207478719805562165">"រុញទៅឆ្វេងដើម្បី <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ។"</string>
+ <plurals name="zen_mode_notification_title">
+ <item quantity="one" msgid="7809876956258040354">"បានលាក់ការជូនដំណឹង"</item>
+ <item quantity="other" msgid="7388721375827338153">"បានលាក់ការជូនដំណឹង %d"</item>
+ </plurals>
+ <string name="zen_mode_notification_text" msgid="8336623711388065713">"ប៉ះដើម្បីបង្ហាញ"</string>
</resources>
diff --git a/packages/SystemUI/res/values-ko/strings.xml b/packages/SystemUI/res/values-ko/strings.xml
index 8108daa..56f0278 100644
--- a/packages/SystemUI/res/values-ko/strings.xml
+++ b/packages/SystemUI/res/values-ko/strings.xml
@@ -209,4 +209,9 @@
<string name="description_target_search" msgid="3091587249776033139">"검색"</string>
<string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>하려면 위로 슬라이드"</string>
<string name="description_direction_left" msgid="7207478719805562165">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>하려면 왼쪽으로 슬라이드"</string>
+ <plurals name="zen_mode_notification_title">
+ <item quantity="one" msgid="7809876956258040354">"알림 숨김"</item>
+ <item quantity="other" msgid="7388721375827338153">"알림 %d개 숨김"</item>
+ </plurals>
+ <string name="zen_mode_notification_text" msgid="8336623711388065713">"표시하려면 터치"</string>
</resources>
diff --git a/packages/SystemUI/res/values-lo-rLA/strings.xml b/packages/SystemUI/res/values-lo-rLA/strings.xml
index c2e5990..b0e4b15 100644
--- a/packages/SystemUI/res/values-lo-rLA/strings.xml
+++ b/packages/SystemUI/res/values-lo-rLA/strings.xml
@@ -209,4 +209,9 @@
<string name="description_target_search" msgid="3091587249776033139">"ຊອກຫາ"</string>
<string name="description_direction_up" msgid="7169032478259485180">"ເລື່ອນຂຶ້ນເພື່ອ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
<string name="description_direction_left" msgid="7207478719805562165">"ເລື່ອນໄປທາງຊ້າຍເພື່ອ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+ <plurals name="zen_mode_notification_title">
+ <item quantity="one" msgid="7809876956258040354">"ເຊື່ອງການແຈ້ງເຕືອນແລ້ວ"</item>
+ <item quantity="other" msgid="7388721375827338153">"ເຊື່ອງ %d ການແຈ້ງເຕືອນແລ້ວ"</item>
+ </plurals>
+ <string name="zen_mode_notification_text" msgid="8336623711388065713">"ແຕະເພື່ອສະແດງ"</string>
</resources>
diff --git a/packages/SystemUI/res/values-lt/strings.xml b/packages/SystemUI/res/values-lt/strings.xml
index 1d8b051..adbba12 100644
--- a/packages/SystemUI/res/values-lt/strings.xml
+++ b/packages/SystemUI/res/values-lt/strings.xml
@@ -209,4 +209,9 @@
<string name="description_target_search" msgid="3091587249776033139">"Paieška"</string>
<string name="description_direction_up" msgid="7169032478259485180">"Slyskite aukštyn link <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
<string name="description_direction_left" msgid="7207478719805562165">"Slyskite į kairę link <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+ <plurals name="zen_mode_notification_title">
+ <item quantity="one" msgid="7809876956258040354">"Pranešimas paslėptas"</item>
+ <item quantity="other" msgid="7388721375827338153">"Paslėpta pranešimų: %d"</item>
+ </plurals>
+ <string name="zen_mode_notification_text" msgid="8336623711388065713">"Palieskite, kad būtų rodoma"</string>
</resources>
diff --git a/packages/SystemUI/res/values-lv/strings.xml b/packages/SystemUI/res/values-lv/strings.xml
index 603fa1a..42bdbc8 100644
--- a/packages/SystemUI/res/values-lv/strings.xml
+++ b/packages/SystemUI/res/values-lv/strings.xml
@@ -209,4 +209,9 @@
<string name="description_target_search" msgid="3091587249776033139">"Meklēt"</string>
<string name="description_direction_up" msgid="7169032478259485180">"Velciet uz augšu, lai veiktu šādu darbību: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
<string name="description_direction_left" msgid="7207478719805562165">"Velciet pa kreisi, lai veiktu šādu darbību: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+ <plurals name="zen_mode_notification_title">
+ <item quantity="one" msgid="7809876956258040354">"Paziņojums paslēpts"</item>
+ <item quantity="other" msgid="7388721375827338153">"%d paziņojumi paslēpti"</item>
+ </plurals>
+ <string name="zen_mode_notification_text" msgid="8336623711388065713">"Pieskarieties, lai rādītu"</string>
</resources>
diff --git a/packages/SystemUI/res/values-mn-rMN/strings.xml b/packages/SystemUI/res/values-mn-rMN/strings.xml
index 110cfd2..c56d51a 100644
--- a/packages/SystemUI/res/values-mn-rMN/strings.xml
+++ b/packages/SystemUI/res/values-mn-rMN/strings.xml
@@ -209,4 +209,9 @@
<string name="description_target_search" msgid="3091587249776033139">"Хайх"</string>
<string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>-г гулсуулах."</string>
<string name="description_direction_left" msgid="7207478719805562165">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> хийх зүүнлүү гулсуулах."</string>
+ <plurals name="zen_mode_notification_title">
+ <item quantity="one" msgid="7809876956258040354">"Мэдэгдлийг нуусан"</item>
+ <item quantity="other" msgid="7388721375827338153">"%d мэдэгдлийг нуусан"</item>
+ </plurals>
+ <string name="zen_mode_notification_text" msgid="8336623711388065713">"Харуулахын тулд хүрнэ үү"</string>
</resources>
diff --git a/packages/SystemUI/res/values-ms-rMY/strings.xml b/packages/SystemUI/res/values-ms-rMY/strings.xml
index 62c90ab..5ca5082 100644
--- a/packages/SystemUI/res/values-ms-rMY/strings.xml
+++ b/packages/SystemUI/res/values-ms-rMY/strings.xml
@@ -209,4 +209,9 @@
<string name="description_target_search" msgid="3091587249776033139">"Carian"</string>
<string name="description_direction_up" msgid="7169032478259485180">"Luncurkan ke atas untuk <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
<string name="description_direction_left" msgid="7207478719805562165">"Luncurkan ke kiri untuk <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+ <plurals name="zen_mode_notification_title">
+ <item quantity="one" msgid="7809876956258040354">"Pemberitahuan disembunyikan"</item>
+ <item quantity="other" msgid="7388721375827338153">"%d pemberitahuan disembunyikan"</item>
+ </plurals>
+ <string name="zen_mode_notification_text" msgid="8336623711388065713">"Sentuh untuk menunjukkan"</string>
</resources>
diff --git a/packages/SystemUI/res/values-nb/strings.xml b/packages/SystemUI/res/values-nb/strings.xml
index 0e914ea..7f4d0d1 100644
--- a/packages/SystemUI/res/values-nb/strings.xml
+++ b/packages/SystemUI/res/values-nb/strings.xml
@@ -209,4 +209,9 @@
<string name="description_target_search" msgid="3091587249776033139">"Søk"</string>
<string name="description_direction_up" msgid="7169032478259485180">"Dra opp for å <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
<string name="description_direction_left" msgid="7207478719805562165">"Dra til venstre for å <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+ <plurals name="zen_mode_notification_title">
+ <item quantity="one" msgid="7809876956258040354">"Varselet er skjult"</item>
+ <item quantity="other" msgid="7388721375827338153">"%d varsler er skjult"</item>
+ </plurals>
+ <string name="zen_mode_notification_text" msgid="8336623711388065713">"Trykk for å vise"</string>
</resources>
diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml
index 032fa34..4e1c811 100644
--- a/packages/SystemUI/res/values-nl/strings.xml
+++ b/packages/SystemUI/res/values-nl/strings.xml
@@ -209,4 +209,9 @@
<string name="description_target_search" msgid="3091587249776033139">"Zoeken"</string>
<string name="description_direction_up" msgid="7169032478259485180">"Veeg omhoog voor <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
<string name="description_direction_left" msgid="7207478719805562165">"Veeg naar links voor <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+ <plurals name="zen_mode_notification_title">
+ <item quantity="one" msgid="7809876956258040354">"Melding verborgen"</item>
+ <item quantity="other" msgid="7388721375827338153">"%d meldingen verborgen"</item>
+ </plurals>
+ <string name="zen_mode_notification_text" msgid="8336623711388065713">"Raak aan om weer te geven"</string>
</resources>
diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml
index c21230c..5b360c9 100644
--- a/packages/SystemUI/res/values-pl/strings.xml
+++ b/packages/SystemUI/res/values-pl/strings.xml
@@ -209,4 +209,9 @@
<string name="description_target_search" msgid="3091587249776033139">"Szukaj"</string>
<string name="description_direction_up" msgid="7169032478259485180">"Przesuń w górę: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
<string name="description_direction_left" msgid="7207478719805562165">"Przesuń w lewo: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+ <plurals name="zen_mode_notification_title">
+ <item quantity="one" msgid="7809876956258040354">"Powiadomienie ukryte"</item>
+ <item quantity="other" msgid="7388721375827338153">"Ukryte powiadomienia: %d"</item>
+ </plurals>
+ <string name="zen_mode_notification_text" msgid="8336623711388065713">"Dotknij, by zobaczyć"</string>
</resources>
diff --git a/packages/SystemUI/res/values-pt-rPT/strings.xml b/packages/SystemUI/res/values-pt-rPT/strings.xml
index 771daf2..5e182f6 100644
--- a/packages/SystemUI/res/values-pt-rPT/strings.xml
+++ b/packages/SystemUI/res/values-pt-rPT/strings.xml
@@ -209,4 +209,9 @@
<string name="description_target_search" msgid="3091587249776033139">"Pesquisar"</string>
<string name="description_direction_up" msgid="7169032478259485180">"Deslize para cima para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ."</string>
<string name="description_direction_left" msgid="7207478719805562165">"Deslize para a esquerda para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ."</string>
+ <plurals name="zen_mode_notification_title">
+ <item quantity="one" msgid="7809876956258040354">"Notificação oculta"</item>
+ <item quantity="other" msgid="7388721375827338153">"%d notificações ocultas"</item>
+ </plurals>
+ <string name="zen_mode_notification_text" msgid="8336623711388065713">"Toque para mostrar"</string>
</resources>
diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml
index b643bae..c88faf1 100644
--- a/packages/SystemUI/res/values-pt/strings.xml
+++ b/packages/SystemUI/res/values-pt/strings.xml
@@ -211,4 +211,9 @@
<string name="description_target_search" msgid="3091587249776033139">"Pesquisar"</string>
<string name="description_direction_up" msgid="7169032478259485180">"Para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>, deslize para cima."</string>
<string name="description_direction_left" msgid="7207478719805562165">"Para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>, deslize para a esquerda."</string>
+ <plurals name="zen_mode_notification_title">
+ <item quantity="one" msgid="7809876956258040354">"Notificação oculta"</item>
+ <item quantity="other" msgid="7388721375827338153">"%d notificações ocultas"</item>
+ </plurals>
+ <string name="zen_mode_notification_text" msgid="8336623711388065713">"Toque para mostrar"</string>
</resources>
diff --git a/packages/SystemUI/res/values-rm/strings.xml b/packages/SystemUI/res/values-rm/strings.xml
index 33cb355..7f17a23 100644
--- a/packages/SystemUI/res/values-rm/strings.xml
+++ b/packages/SystemUI/res/values-rm/strings.xml
@@ -388,4 +388,8 @@
<skip />
<!-- no translation found for description_direction_left (7207478719805562165) -->
<skip />
+ <!-- no translation found for zen_mode_notification_title:one (7809876956258040354) -->
+ <!-- no translation found for zen_mode_notification_title:other (7388721375827338153) -->
+ <!-- no translation found for zen_mode_notification_text (8336623711388065713) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml
index 87f9c0c..c37fda5 100644
--- a/packages/SystemUI/res/values-ro/strings.xml
+++ b/packages/SystemUI/res/values-ro/strings.xml
@@ -209,4 +209,9 @@
<string name="description_target_search" msgid="3091587249776033139">"Căutaţi"</string>
<string name="description_direction_up" msgid="7169032478259485180">"Glisaţi în sus pentru <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
<string name="description_direction_left" msgid="7207478719805562165">"Glisaţi spre stânga pentru <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+ <plurals name="zen_mode_notification_title">
+ <item quantity="one" msgid="7809876956258040354">"Notificare ascunsă"</item>
+ <item quantity="other" msgid="7388721375827338153">"%d de notificări ascunse"</item>
+ </plurals>
+ <string name="zen_mode_notification_text" msgid="8336623711388065713">"Atingeți pentru a afișa"</string>
</resources>
diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml
index e79a0dd..aff253c 100644
--- a/packages/SystemUI/res/values-ru/strings.xml
+++ b/packages/SystemUI/res/values-ru/strings.xml
@@ -213,4 +213,9 @@
<string name="description_target_search" msgid="3091587249776033139">"Поиск"</string>
<string name="description_direction_up" msgid="7169032478259485180">"Проведите вверх, чтобы <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
<string name="description_direction_left" msgid="7207478719805562165">"Проведите влево, чтобы <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+ <plurals name="zen_mode_notification_title">
+ <item quantity="one" msgid="7809876956258040354">"Оповещение скрыто"</item>
+ <item quantity="other" msgid="7388721375827338153">"Скрыто оповещений: %d"</item>
+ </plurals>
+ <string name="zen_mode_notification_text" msgid="8336623711388065713">"Нажмите, чтобы открыть"</string>
</resources>
diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml
index d39c8bd..5e5ae9b 100644
--- a/packages/SystemUI/res/values-sk/strings.xml
+++ b/packages/SystemUI/res/values-sk/strings.xml
@@ -211,4 +211,9 @@
<string name="description_target_search" msgid="3091587249776033139">"Vyhľadávanie"</string>
<string name="description_direction_up" msgid="7169032478259485180">"Prejdite prstom nahor: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
<string name="description_direction_left" msgid="7207478719805562165">"Prejdite prstom doľava: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+ <plurals name="zen_mode_notification_title">
+ <item quantity="one" msgid="7809876956258040354">"Upozornenie bolo skryté"</item>
+ <item quantity="other" msgid="7388721375827338153">"Skryté upozornenia: %d"</item>
+ </plurals>
+ <string name="zen_mode_notification_text" msgid="8336623711388065713">"Upozornenie zobrazíte dotykom"</string>
</resources>
diff --git a/packages/SystemUI/res/values-sl/strings.xml b/packages/SystemUI/res/values-sl/strings.xml
index 9d57586..2d562da 100644
--- a/packages/SystemUI/res/values-sl/strings.xml
+++ b/packages/SystemUI/res/values-sl/strings.xml
@@ -209,4 +209,9 @@
<string name="description_target_search" msgid="3091587249776033139">"Iskanje"</string>
<string name="description_direction_up" msgid="7169032478259485180">"Povlecite navzgor za <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
<string name="description_direction_left" msgid="7207478719805562165">"Povlecite v levo za <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ."</string>
+ <plurals name="zen_mode_notification_title">
+ <item quantity="one" msgid="7809876956258040354">"Obvestilo je skrito"</item>
+ <item quantity="other" msgid="7388721375827338153">"Skritih je toliko obvestil: %d"</item>
+ </plurals>
+ <string name="zen_mode_notification_text" msgid="8336623711388065713">"Dotaknite se za prikaz"</string>
</resources>
diff --git a/packages/SystemUI/res/values-sr/strings.xml b/packages/SystemUI/res/values-sr/strings.xml
index 89bc3c5..97743ad 100644
--- a/packages/SystemUI/res/values-sr/strings.xml
+++ b/packages/SystemUI/res/values-sr/strings.xml
@@ -209,4 +209,9 @@
<string name="description_target_search" msgid="3091587249776033139">"Претрага"</string>
<string name="description_direction_up" msgid="7169032478259485180">"Превуците нагоре за <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
<string name="description_direction_left" msgid="7207478719805562165">"Превуците улево за <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+ <plurals name="zen_mode_notification_title">
+ <item quantity="one" msgid="7809876956258040354">"Обавештење је сакривено"</item>
+ <item quantity="other" msgid="7388721375827338153">"Сакривена обавештења: %d"</item>
+ </plurals>
+ <string name="zen_mode_notification_text" msgid="8336623711388065713">"Додирните за приказ"</string>
</resources>
diff --git a/packages/SystemUI/res/values-sv/strings.xml b/packages/SystemUI/res/values-sv/strings.xml
index 1b47be5..4ce20e9 100644
--- a/packages/SystemUI/res/values-sv/strings.xml
+++ b/packages/SystemUI/res/values-sv/strings.xml
@@ -209,4 +209,9 @@
<string name="description_target_search" msgid="3091587249776033139">"Sök"</string>
<string name="description_direction_up" msgid="7169032478259485180">"Dra uppåt för <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ."</string>
<string name="description_direction_left" msgid="7207478719805562165">"Dra åt vänster för <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ."</string>
+ <plurals name="zen_mode_notification_title">
+ <item quantity="one" msgid="7809876956258040354">"Aviseringen har dolts"</item>
+ <item quantity="other" msgid="7388721375827338153">"%d aviseringar har dolts"</item>
+ </plurals>
+ <string name="zen_mode_notification_text" msgid="8336623711388065713">"Tryck här om du vill visa aviseringar"</string>
</resources>
diff --git a/packages/SystemUI/res/values-sw/strings.xml b/packages/SystemUI/res/values-sw/strings.xml
index 3702196..5b9a4ad 100644
--- a/packages/SystemUI/res/values-sw/strings.xml
+++ b/packages/SystemUI/res/values-sw/strings.xml
@@ -207,4 +207,9 @@
<string name="description_target_search" msgid="3091587249776033139">"Tafuta"</string>
<string name="description_direction_up" msgid="7169032478259485180">"Sogeza juu kwa <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ."</string>
<string name="description_direction_left" msgid="7207478719805562165">"Sogeza kushoto kwa <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ."</string>
+ <plurals name="zen_mode_notification_title">
+ <item quantity="one" msgid="7809876956258040354">"Arifa imefichwa"</item>
+ <item quantity="other" msgid="7388721375827338153">"Arifa %d zimefichwa"</item>
+ </plurals>
+ <string name="zen_mode_notification_text" msgid="8336623711388065713">"Gusa ili zionekane"</string>
</resources>
diff --git a/packages/SystemUI/res/values-th/strings.xml b/packages/SystemUI/res/values-th/strings.xml
index 0188563..74edb61 100644
--- a/packages/SystemUI/res/values-th/strings.xml
+++ b/packages/SystemUI/res/values-th/strings.xml
@@ -209,4 +209,9 @@
<string name="description_target_search" msgid="3091587249776033139">"ค้นหา"</string>
<string name="description_direction_up" msgid="7169032478259485180">"เลื่อนขึ้นเพื่อ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>"</string>
<string name="description_direction_left" msgid="7207478719805562165">"เลื่อนไปทางซ้ายเพื่อ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>"</string>
+ <plurals name="zen_mode_notification_title">
+ <item quantity="one" msgid="7809876956258040354">"ซ่อนการแจ้งเตือนแล้ว"</item>
+ <item quantity="other" msgid="7388721375827338153">"ซ่อน %d การแจ้งเตือนแล้ว"</item>
+ </plurals>
+ <string name="zen_mode_notification_text" msgid="8336623711388065713">"แตะเพื่อแสดง"</string>
</resources>
diff --git a/packages/SystemUI/res/values-tl/strings.xml b/packages/SystemUI/res/values-tl/strings.xml
index d7502cb..3ac4cd5 100644
--- a/packages/SystemUI/res/values-tl/strings.xml
+++ b/packages/SystemUI/res/values-tl/strings.xml
@@ -209,4 +209,9 @@
<string name="description_target_search" msgid="3091587249776033139">"Maghanap"</string>
<string name="description_direction_up" msgid="7169032478259485180">"Mag-slide pataas para sa <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
<string name="description_direction_left" msgid="7207478719805562165">"Mag-slide pakaliwa para sa <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+ <plurals name="zen_mode_notification_title">
+ <item quantity="one" msgid="7809876956258040354">"Nakatago ang notification"</item>
+ <item quantity="other" msgid="7388721375827338153">"Nakatago ang %d (na) notification"</item>
+ </plurals>
+ <string name="zen_mode_notification_text" msgid="8336623711388065713">"Pindutin upang ipakita"</string>
</resources>
diff --git a/packages/SystemUI/res/values-tr/strings.xml b/packages/SystemUI/res/values-tr/strings.xml
index f56293b..f38c86a 100644
--- a/packages/SystemUI/res/values-tr/strings.xml
+++ b/packages/SystemUI/res/values-tr/strings.xml
@@ -209,4 +209,9 @@
<string name="description_target_search" msgid="3091587249776033139">"Ara"</string>
<string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> için yukarı kaydırın."</string>
<string name="description_direction_left" msgid="7207478719805562165">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> için sola kaydırın."</string>
+ <plurals name="zen_mode_notification_title">
+ <item quantity="one" msgid="7809876956258040354">"Bildirim gizli"</item>
+ <item quantity="other" msgid="7388721375827338153">"%d bildirim gizli"</item>
+ </plurals>
+ <string name="zen_mode_notification_text" msgid="8336623711388065713">"Görüntülemek için dokunun"</string>
</resources>
diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml
index df94b26..54e7ca1 100644
--- a/packages/SystemUI/res/values-uk/strings.xml
+++ b/packages/SystemUI/res/values-uk/strings.xml
@@ -209,4 +209,9 @@
<string name="description_target_search" msgid="3091587249776033139">"Пошук"</string>
<string name="description_direction_up" msgid="7169032478259485180">"Проведіть пальцем угору, щоб <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
<string name="description_direction_left" msgid="7207478719805562165">"Проведіть пальцем ліворуч, щоб <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+ <plurals name="zen_mode_notification_title">
+ <item quantity="one" msgid="7809876956258040354">"Сповіщення сховано"</item>
+ <item quantity="other" msgid="7388721375827338153">"Сховано сповіщень: %d"</item>
+ </plurals>
+ <string name="zen_mode_notification_text" msgid="8336623711388065713">"Торкніться, щоб показати"</string>
</resources>
diff --git a/packages/SystemUI/res/values-vi/strings.xml b/packages/SystemUI/res/values-vi/strings.xml
index 471cbd3..ade5fe1 100644
--- a/packages/SystemUI/res/values-vi/strings.xml
+++ b/packages/SystemUI/res/values-vi/strings.xml
@@ -209,4 +209,9 @@
<string name="description_target_search" msgid="3091587249776033139">"Tìm kiếm"</string>
<string name="description_direction_up" msgid="7169032478259485180">"Trượt lên để <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
<string name="description_direction_left" msgid="7207478719805562165">"Trượt sang trái để <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+ <plurals name="zen_mode_notification_title">
+ <item quantity="one" msgid="7809876956258040354">"Thông báo ẩn"</item>
+ <item quantity="other" msgid="7388721375827338153">"%d thông báo ẩn"</item>
+ </plurals>
+ <string name="zen_mode_notification_text" msgid="8336623711388065713">"Chạm để hiển thị"</string>
</resources>
diff --git a/packages/SystemUI/res/values-zh-rCN/strings.xml b/packages/SystemUI/res/values-zh-rCN/strings.xml
index 7fb5868..cbb1496 100644
--- a/packages/SystemUI/res/values-zh-rCN/strings.xml
+++ b/packages/SystemUI/res/values-zh-rCN/strings.xml
@@ -211,4 +211,9 @@
<string name="description_target_search" msgid="3091587249776033139">"搜索"</string>
<string name="description_direction_up" msgid="7169032478259485180">"向上滑动以<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>。"</string>
<string name="description_direction_left" msgid="7207478719805562165">"向左滑动以<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>。"</string>
+ <plurals name="zen_mode_notification_title">
+ <item quantity="one" msgid="7809876956258040354">"已隐藏通知"</item>
+ <item quantity="other" msgid="7388721375827338153">"已隐藏%d条通知"</item>
+ </plurals>
+ <string name="zen_mode_notification_text" msgid="8336623711388065713">"触摸即可显示"</string>
</resources>
diff --git a/packages/SystemUI/res/values-zh-rHK/strings.xml b/packages/SystemUI/res/values-zh-rHK/strings.xml
index d4defa4..b6d438c 100644
--- a/packages/SystemUI/res/values-zh-rHK/strings.xml
+++ b/packages/SystemUI/res/values-zh-rHK/strings.xml
@@ -211,4 +211,9 @@
<string name="description_target_search" msgid="3091587249776033139">"搜尋"</string>
<string name="description_direction_up" msgid="7169032478259485180">"向上滑動即可<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>。"</string>
<string name="description_direction_left" msgid="7207478719805562165">"向左滑動即可<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>。"</string>
+ <plurals name="zen_mode_notification_title">
+ <item quantity="one" msgid="7809876956258040354">"已隱藏通知"</item>
+ <item quantity="other" msgid="7388721375827338153">"已隱藏 %d 則通知"</item>
+ </plurals>
+ <string name="zen_mode_notification_text" msgid="8336623711388065713">"輕觸即可顯示"</string>
</resources>
diff --git a/packages/SystemUI/res/values-zh-rTW/strings.xml b/packages/SystemUI/res/values-zh-rTW/strings.xml
index 163ef2a..1c4cb4a 100644
--- a/packages/SystemUI/res/values-zh-rTW/strings.xml
+++ b/packages/SystemUI/res/values-zh-rTW/strings.xml
@@ -211,4 +211,9 @@
<string name="description_target_search" msgid="3091587249776033139">"搜尋"</string>
<string name="description_direction_up" msgid="7169032478259485180">"向上滑動即可<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>。"</string>
<string name="description_direction_left" msgid="7207478719805562165">"向左滑動即可<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>。"</string>
+ <plurals name="zen_mode_notification_title">
+ <item quantity="one" msgid="7809876956258040354">"已隱藏通知"</item>
+ <item quantity="other" msgid="7388721375827338153">"已隱藏 %d 則通知"</item>
+ </plurals>
+ <string name="zen_mode_notification_text" msgid="8336623711388065713">"輕觸即可顯示"</string>
</resources>
diff --git a/packages/SystemUI/res/values-zu/strings.xml b/packages/SystemUI/res/values-zu/strings.xml
index 92e3382..cbb6c09 100644
--- a/packages/SystemUI/res/values-zu/strings.xml
+++ b/packages/SystemUI/res/values-zu/strings.xml
@@ -209,4 +209,9 @@
<string name="description_target_search" msgid="3091587249776033139">"Sesha"</string>
<string name="description_direction_up" msgid="7169032478259485180">"Shelelisela ngenhla ku-<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
<string name="description_direction_left" msgid="7207478719805562165">"Shelelisela ngakwesokunxele ku-<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+ <plurals name="zen_mode_notification_title">
+ <item quantity="one" msgid="7809876956258040354">"Isaziso sifihliwe"</item>
+ <item quantity="other" msgid="7388721375827338153">"%d izaziso zifihliwe"</item>
+ </plurals>
+ <string name="zen_mode_notification_text" msgid="8336623711388065713">"Thinta ukuze ubonise"</string>
</resources>
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java
index 10a9b64..0266144c 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java
@@ -334,6 +334,7 @@
mTimeAnimator = new TimeAnimator();
mTimeAnimator.setTimeListener(mAnimationCallback);
+ setOnHierarchyChangeListener(mHierarchyListener);
}
private void loadDimens() {
@@ -630,11 +631,6 @@
return mViewName;
}
- @Override
- protected void onViewAdded(View child) {
- if (DEBUG) logf("onViewAdded: " + child);
- }
-
public View getHandle() {
return mHandleView;
}
@@ -834,4 +830,15 @@
mTimeAnimator, ((mTimeAnimator!=null && mTimeAnimator.isStarted())?" (started)":"")
));
}
+
+ private final OnHierarchyChangeListener mHierarchyListener = new OnHierarchyChangeListener() {
+ @Override
+ public void onChildViewAdded(View parent, View child) {
+ if (DEBUG) logf("onViewAdded: " + child);
+ }
+
+ @Override
+ public void onChildViewRemoved(View parent, View child) {
+ }
+ };
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
index 679b81b..04b0fc6 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
@@ -63,6 +63,7 @@
import android.provider.Settings;
import android.provider.Settings.Global;
import android.service.notification.StatusBarNotification;
+import android.util.ArraySet;
import android.util.DisplayMetrics;
import android.util.EventLog;
import android.util.Log;
@@ -111,10 +112,14 @@
import com.android.systemui.statusbar.policy.NetworkController;
import com.android.systemui.statusbar.policy.RotationLockController;
import com.android.systemui.statusbar.stack.NotificationStackScrollLayout;
+import com.android.systemui.statusbar.stack.NotificationStackScrollLayout.OnChildLocationsChangedListener;
+import com.android.systemui.statusbar.stack.StackScrollState.ViewState;
import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
public class PhoneStatusBar extends BaseStatusBar implements DemoMode {
static final String TAG = "PhoneStatusBar";
@@ -147,6 +152,9 @@
View.STATUS_BAR_TRANSIENT | View.NAVIGATION_BAR_TRANSIENT;
private static final long AUTOHIDE_TIMEOUT_MS = 3000;
+ /** The minimum delay in ms between reports of notification visibility. */
+ private static final int VISIBILITY_REPORT_MIN_DELAY_MS = 500;
+
// fling gesture tuning parameters, scaled to display density
private float mSelfExpandVelocityPx; // classic value: 2000px/s
private float mSelfCollapseVelocityPx; // classic value: 2000px/s (will be negated to collapse "up")
@@ -376,6 +384,82 @@
mOnFlipRunnable = onFlipRunnable;
}
+ /** Keys of notifications currently visible to the user. */
+ private final ArraySet<String> mCurrentlyVisibleNotifications = new ArraySet<String>();
+ private long mLastVisibilityReportUptimeMs;
+
+ private static final int VISIBLE_LOCATIONS = ViewState.LOCATION_FIRST_CARD
+ | ViewState.LOCATION_TOP_STACK_PEEKING
+ | ViewState.LOCATION_MAIN_AREA
+ | ViewState.LOCATION_BOTTOM_STACK_PEEKING;
+
+ private final OnChildLocationsChangedListener mNotificationLocationsChangedListener =
+ new OnChildLocationsChangedListener() {
+ @Override
+ public void onChildLocationsChanged(
+ NotificationStackScrollLayout stackScrollLayout) {
+ if (mHandler.hasCallbacks(mVisibilityReporter)) {
+ // Visibilities will be reported when the existing
+ // callback is executed.
+ return;
+ }
+ // Calculate when we're allowed to run the visibility
+ // reporter. Note that this timestamp might already have
+ // passed. That's OK, the callback will just be executed
+ // ASAP.
+ long nextReportUptimeMs =
+ mLastVisibilityReportUptimeMs + VISIBILITY_REPORT_MIN_DELAY_MS;
+ mHandler.postAtTime(mVisibilityReporter, nextReportUptimeMs);
+ }
+ };
+
+ // Tracks notifications currently visible in mNotificationStackScroller and
+ // emits visibility events via NoMan on changes.
+ private final Runnable mVisibilityReporter = new Runnable() {
+ private final ArrayList<String> mTmpNewlyVisibleNotifications = new ArrayList<String>();
+ private final ArrayList<String> mTmpCurrentlyVisibleNotifications = new ArrayList<String>();
+
+ @Override
+ public void run() {
+ mLastVisibilityReportUptimeMs = SystemClock.uptimeMillis();
+
+ // 1. Loop over mNotificationData entries:
+ // A. Keep list of visible notifications.
+ // B. Keep list of previously hidden, now visible notifications.
+ // 2. Compute no-longer visible notifications by removing currently
+ // visible notifications from the set of previously visible
+ // notifications.
+ // 3. Report newly visible and no-longer visible notifications.
+ // 4. Keep currently visible notifications for next report.
+ int N = mNotificationData.size();
+ for (int i = 0; i < N; i++) {
+ Entry entry = mNotificationData.get(i);
+ String key = entry.notification.getKey();
+ boolean previouslyVisible = mCurrentlyVisibleNotifications.contains(key);
+ boolean currentlyVisible =
+ (mStackScroller.getChildLocation(entry.row) & VISIBLE_LOCATIONS) != 0;
+ if (currentlyVisible) {
+ // Build new set of visible notifications.
+ mTmpCurrentlyVisibleNotifications.add(key);
+ }
+ if (!previouslyVisible && currentlyVisible) {
+ mTmpNewlyVisibleNotifications.add(key);
+ }
+ }
+ ArraySet<String> noLongerVisibleNotifications = mCurrentlyVisibleNotifications;
+ noLongerVisibleNotifications.removeAll(mTmpCurrentlyVisibleNotifications);
+
+ logNotificationVisibilityChanges(
+ mTmpNewlyVisibleNotifications, noLongerVisibleNotifications);
+
+ mCurrentlyVisibleNotifications.clear();
+ mCurrentlyVisibleNotifications.addAll(mTmpCurrentlyVisibleNotifications);
+
+ mTmpNewlyVisibleNotifications.clear();
+ mTmpCurrentlyVisibleNotifications.clear();
+ }
+ };
+
@Override
public void setZenMode(int mode) {
super.setZenMode(mode);
@@ -2647,6 +2731,41 @@
if (false) Log.v(TAG, "updateResources");
}
+ // Visibility reporting
+
+ @Override
+ protected void visibilityChanged(boolean visible) {
+ if (visible) {
+ mStackScroller.setChildLocationsChangedListener(mNotificationLocationsChangedListener);
+ } else {
+ // Report all notifications as invisible and turn down the
+ // reporter.
+ if (!mCurrentlyVisibleNotifications.isEmpty()) {
+ logNotificationVisibilityChanges(
+ Collections.<String>emptyList(), mCurrentlyVisibleNotifications);
+ mCurrentlyVisibleNotifications.clear();
+ }
+ mHandler.removeCallbacks(mVisibilityReporter);
+ mStackScroller.setChildLocationsChangedListener(null);
+ }
+ super.visibilityChanged(visible);
+ }
+
+ private void logNotificationVisibilityChanges(
+ Collection<String> newlyVisible, Collection<String> noLongerVisible) {
+ if (newlyVisible.isEmpty() && noLongerVisible.isEmpty()) {
+ return;
+ }
+
+ String[] newlyVisibleAr = newlyVisible.toArray(new String[newlyVisible.size()]);
+ String[] noLongerVisibleAr = noLongerVisible.toArray(new String[noLongerVisible.size()]);
+ try {
+ mBarService.onNotificationVisibilityChanged(newlyVisibleAr, noLongerVisibleAr);
+ } catch (RemoteException e) {
+ // Ignore.
+ }
+ }
+
//
// tracing
//
@@ -2844,7 +2963,9 @@
mOnKeyguard = false;
mKeyguardStatusView.setVisibility(View.GONE);
mNotificationPanelHeader.setVisibility(View.VISIBLE);
- mKeyguardSettingsFlipButton.setVisibility(View.GONE);
+ if (mKeyguardSettingsFlipButton != null) {
+ mKeyguardSettingsFlipButton.setVisibility(View.GONE);
+ }
updateRowStates();
instantCollapseNotificationPanel();
}
diff --git a/services/core/java/com/android/server/EventLogTags.logtags b/services/core/java/com/android/server/EventLogTags.logtags
index 9768934..5083d44 100644
--- a/services/core/java/com/android/server/EventLogTags.logtags
+++ b/services/core/java/com/android/server/EventLogTags.logtags
@@ -63,6 +63,8 @@
27500 notification_panel_revealed
# when the notification panel is hidden
27501 notification_panel_hidden
+# when notifications are newly displayed on screen, or disappear from screen
+27510 notification_visibility_changed (newlyVisibleKeys|3),(noLongerVisibleKeys|3)
# ---------------------------
# Watchdog.java
diff --git a/services/core/java/com/android/server/TelephonyRegistry.java b/services/core/java/com/android/server/TelephonyRegistry.java
index 77f5182..037a744 100644
--- a/services/core/java/com/android/server/TelephonyRegistry.java
+++ b/services/core/java/com/android/server/TelephonyRegistry.java
@@ -32,6 +32,7 @@
import android.os.RemoteException;
import android.os.UserHandle;
import android.telephony.CellLocation;
+import android.telephony.DataConnectionRealTimeInfo;
import android.telephony.PhoneStateListener;
import android.telephony.ServiceState;
import android.telephony.SignalStrength;
@@ -129,6 +130,8 @@
private List<CellInfo> mCellInfo = null;
+ private DataConnectionRealTimeInfo mDcRtInfo = new DataConnectionRealTimeInfo();
+
private int mRingingCallState = PreciseCallState.PRECISE_CALL_STATE_IDLE;
private int mForegroundCallState = PreciseCallState.PRECISE_CALL_STATE_IDLE;
@@ -324,6 +327,13 @@
remove(r.binder);
}
}
+ if ((events & PhoneStateListener.LISTEN_DATA_CONNECTION_REAL_TIME_INFO) != 0) {
+ try {
+ r.callback.onDataConnectionRealTimeInfoChanged(mDcRtInfo);
+ } catch (RemoteException ex) {
+ remove(r.binder);
+ }
+ }
if ((events & PhoneStateListener.LISTEN_PRECISE_CALL_STATE) != 0) {
try {
r.callback.onPreciseCallStateChanged(mPreciseCallState);
@@ -451,6 +461,31 @@
}
}
+ public void notifyDataConnectionRealTimeInfo(DataConnectionRealTimeInfo dcRtInfo) {
+ if (!checkNotifyPermission("notifyDataConnectionRealTimeInfo()")) {
+ return;
+ }
+
+ synchronized (mRecords) {
+ mDcRtInfo = dcRtInfo;
+ for (Record r : mRecords) {
+ if (validateEventsAndUserLocked(r,
+ PhoneStateListener.LISTEN_DATA_CONNECTION_REAL_TIME_INFO)) {
+ try {
+ if (DBG_LOC) {
+ Slog.d(TAG, "notifyDataConnectionRealTimeInfo: mDcRtInfo="
+ + mDcRtInfo + " r=" + r);
+ }
+ r.callback.onDataConnectionRealTimeInfoChanged(mDcRtInfo);
+ } catch (RemoteException ex) {
+ mRemoveList.add(r.binder);
+ }
+ }
+ }
+ handleRemoveListLocked();
+ }
+ }
+
public void notifyMessageWaitingChanged(boolean mwi) {
if (!checkNotifyPermission("notifyMessageWaitingChanged()")) {
return;
@@ -754,6 +789,7 @@
pw.println(" mDataConnectionLinkCapabilities=" + mDataConnectionLinkCapabilities);
pw.println(" mCellLocation=" + mCellLocation);
pw.println(" mCellInfo=" + mCellInfo);
+ pw.println(" mDcRtInfo=" + mDcRtInfo);
pw.println("registrations: count=" + recordCount);
for (Record r : mRecords) {
pw.println(" " + r.pkgForDebug + " 0x" + Integer.toHexString(r.events));
diff --git a/services/core/java/com/android/server/VibratorService.java b/services/core/java/com/android/server/VibratorService.java
index aa756a1..132ca00 100644
--- a/services/core/java/com/android/server/VibratorService.java
+++ b/services/core/java/com/android/server/VibratorService.java
@@ -86,19 +86,19 @@
private final int mRepeat;
private final int mStreamHint;
private final int mUid;
- private final String mPackageName;
+ private final String mOpPkg;
- Vibration(IBinder token, long millis, int streamHint, int uid, String packageName) {
- this(token, millis, null, 0, streamHint, uid, packageName);
+ Vibration(IBinder token, long millis, int streamHint, int uid, String opPkg) {
+ this(token, millis, null, 0, streamHint, uid, opPkg);
}
Vibration(IBinder token, long[] pattern, int repeat, int streamHint, int uid,
- String packageName) {
- this(token, 0, pattern, repeat, streamHint, uid, packageName);
+ String opPkg) {
+ this(token, 0, pattern, repeat, streamHint, uid, opPkg);
}
private Vibration(IBinder token, long millis, long[] pattern,
- int repeat, int streamHint, int uid, String packageName) {
+ int repeat, int streamHint, int uid, String opPkg) {
mToken = token;
mTimeout = millis;
mStartTime = SystemClock.uptimeMillis();
@@ -106,7 +106,7 @@
mRepeat = repeat;
mStreamHint = streamHint;
mUid = uid;
- mPackageName = packageName;
+ mOpPkg = opPkg;
}
public void binderDied() {
@@ -194,7 +194,7 @@
Binder.getCallingPid(), Binder.getCallingUid(), null);
}
- public void vibrate(int uid, String packageName, long milliseconds, int streamHint,
+ public void vibrate(int uid, String opPkg, long milliseconds, int streamHint,
IBinder token) {
if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.VIBRATE)
!= PackageManager.PERMISSION_GRANTED) {
@@ -211,7 +211,7 @@
return;
}
- Vibration vib = new Vibration(token, milliseconds, streamHint, uid, packageName);
+ Vibration vib = new Vibration(token, milliseconds, streamHint, uid, opPkg);
final long ident = Binder.clearCallingIdentity();
try {
@@ -347,10 +347,10 @@
private void startVibrationLocked(final Vibration vib) {
try {
int mode = mAppOpsService.checkAudioOperation(AppOpsManager.OP_VIBRATE,
- vib.mStreamHint, vib.mUid, vib.mPackageName);
+ vib.mStreamHint, vib.mUid, vib.mOpPkg);
if (mode == AppOpsManager.MODE_ALLOWED) {
mode = mAppOpsService.startOperation(AppOpsManager.getToken(mAppOpsService),
- AppOpsManager.OP_VIBRATE, vib.mUid, vib.mPackageName);
+ AppOpsManager.OP_VIBRATE, vib.mUid, vib.mOpPkg);
}
if (mode != AppOpsManager.MODE_ALLOWED) {
if (mode == AppOpsManager.MODE_ERRORED) {
@@ -377,7 +377,7 @@
try {
mAppOpsService.finishOperation(AppOpsManager.getToken(mAppOpsService),
AppOpsManager.OP_VIBRATE, mCurrentVibration.mUid,
- mCurrentVibration.mPackageName);
+ mCurrentVibration.mOpPkg);
} catch (RemoteException e) {
}
mCurrentVibration = null;
diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java
index b894724..8dd4317 100755
--- a/services/core/java/com/android/server/am/ActivityStack.java
+++ b/services/core/java/com/android/server/am/ActivityStack.java
@@ -1063,6 +1063,16 @@
return mStackSupervisor.isFrontStack(this);
}
+ private void setVisibile(ActivityRecord r, boolean visible) {
+ r.visible = visible;
+ mWindowManager.setAppVisibility(r.appToken, visible);
+ final ArrayList<ActivityStack> containers = r.mChildContainers;
+ for (int containerNdx = containers.size() - 1; containerNdx >= 0; --containerNdx) {
+ ActivityContainer container = containers.get(containerNdx).mActivityContainer;
+ container.setVisible(visible);
+ }
+ }
+
/**
* Version of ensureActivitiesVisible that can easily be called anywhere.
*/
@@ -1141,8 +1151,7 @@
if (!r.visible) {
if (DEBUG_VISBILITY) Slog.v(
TAG, "Starting and making visible: " + r);
- r.visible = true;
- mWindowManager.setAppVisibility(r.appToken, true);
+ setVisibile(r, true);
}
if (r != starting) {
mStackSupervisor.startSpecificActivityLocked(r, false, false);
@@ -1168,7 +1177,7 @@
if (mTranslucentActivityWaiting != null) {
mUndrawnActivitiesBelowTopTranslucent.add(r);
}
- mWindowManager.setAppVisibility(r.appToken, true);
+ setVisibile(r, true);
r.sleeping = false;
r.app.pendingUiClean = true;
r.app.thread.scheduleWindowVisibility(r.appToken, true);
@@ -1204,9 +1213,8 @@
// sure they no longer are keeping the screen frozen.
if (r.visible) {
if (DEBUG_VISBILITY) Slog.v(TAG, "Making invisible: " + r);
- r.visible = false;
try {
- mWindowManager.setAppVisibility(r.appToken, false);
+ setVisibile(r, false);
switch (r.state) {
case STOPPING:
case STOPPED:
diff --git a/services/core/java/com/android/server/am/ActivityStackSupervisor.java b/services/core/java/com/android/server/am/ActivityStackSupervisor.java
index 47b4d0a..63f9d09 100644
--- a/services/core/java/com/android/server/am/ActivityStackSupervisor.java
+++ b/services/core/java/com/android/server/am/ActivityStackSupervisor.java
@@ -127,6 +127,7 @@
static final int HANDLE_DISPLAY_ADDED = FIRST_SUPERVISOR_STACK_MSG + 5;
static final int HANDLE_DISPLAY_CHANGED = FIRST_SUPERVISOR_STACK_MSG + 6;
static final int HANDLE_DISPLAY_REMOVED = FIRST_SUPERVISOR_STACK_MSG + 7;
+ static final int CONTAINER_CALLBACK_VISIBILITY = FIRST_SUPERVISOR_STACK_MSG + 8;
private final static String VIRTUAL_DISPLAY_BASE_NAME = "ActivityViewVirtualDisplay";
@@ -3015,6 +3016,14 @@
case HANDLE_DISPLAY_REMOVED: {
handleDisplayRemovedLocked(msg.arg1);
} break;
+ case CONTAINER_CALLBACK_VISIBILITY: {
+ final ActivityContainer container = (ActivityContainer) msg.obj;
+ try {
+ // We only send this message if mCallback is non-null.
+ container.mCallback.setVisible(container.asBinder(), msg.arg1 == 1);
+ } catch (RemoteException e) {
+ }
+ }
}
}
}
@@ -3026,6 +3035,8 @@
final ActivityRecord mParentActivity;
final String mIdString;
+ boolean mVisible = true;
+
/** Display this ActivityStack is currently on. Null if not attached to a Display. */
ActivityDisplay mActivityDisplay;
@@ -3173,6 +3184,16 @@
}
}
+ void setVisible(boolean visible) {
+ if (mVisible != visible) {
+ mVisible = visible;
+ if (mCallback != null) {
+ mHandler.obtainMessage(CONTAINER_CALLBACK_VISIBILITY, visible ? 1 : 0,
+ 0 /* unused */, this).sendToTarget();
+ }
+ }
+ }
+
@Override
public String toString() {
return mIdString + (mActivityDisplay == null ? "N" : "A");
diff --git a/services/core/java/com/android/server/notification/NotificationDelegate.java b/services/core/java/com/android/server/notification/NotificationDelegate.java
index e0591a2..ce4c1ed 100644
--- a/services/core/java/com/android/server/notification/NotificationDelegate.java
+++ b/services/core/java/com/android/server/notification/NotificationDelegate.java
@@ -31,4 +31,6 @@
void onPanelRevealed();
void onPanelHidden();
boolean allowDisable(int what, IBinder token, String pkg);
+ void onNotificationVisibilityChanged(
+ String[] newlyVisibleKeys, String[] noLongerVisibleKeys);
}
diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java
index 6534783..5b597a3 100644
--- a/services/core/java/com/android/server/notification/NotificationManagerService.java
+++ b/services/core/java/com/android/server/notification/NotificationManagerService.java
@@ -1071,6 +1071,16 @@
}
return true;
}
+
+ @Override
+ public void onNotificationVisibilityChanged(
+ String[] newlyVisibleKeys, String[] noLongerVisibleKeys) {
+ // Using ';' as separator since eventlogs uses ',' to separate
+ // args.
+ EventLogTags.writeNotificationVisibilityChanged(
+ TextUtils.join(";", newlyVisibleKeys),
+ TextUtils.join(";", noLongerVisibleKeys));
+ }
};
private BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {
@@ -1487,9 +1497,9 @@
}
@Override
- public void enqueueNotificationWithTag(String pkg, String basePkg, String tag, int id,
+ public void enqueueNotificationWithTag(String pkg, String opPkg, String tag, int id,
Notification notification, int[] idOut, int userId) throws RemoteException {
- enqueueNotificationInternal(pkg, basePkg, Binder.getCallingUid(),
+ enqueueNotificationInternal(pkg, opPkg, Binder.getCallingUid(),
Binder.getCallingPid(), tag, id, notification, idOut, userId);
}
@@ -1839,14 +1849,14 @@
*/
private final NotificationManagerInternal mInternalService = new NotificationManagerInternal() {
@Override
- public void enqueueNotification(String pkg, String basePkg, int callingUid, int callingPid,
+ public void enqueueNotification(String pkg, String opPkg, int callingUid, int callingPid,
String tag, int id, Notification notification, int[] idReceived, int userId) {
- enqueueNotificationInternal(pkg, basePkg, callingUid, callingPid, tag, id, notification,
+ enqueueNotificationInternal(pkg, opPkg, callingUid, callingPid, tag, id, notification,
idReceived, userId);
}
};
- void enqueueNotificationInternal(final String pkg, String basePkg, final int callingUid,
+ void enqueueNotificationInternal(final String pkg, final String opPkg, final int callingUid,
final int callingPid, final String tag, final int id, final Notification notification,
int[] idOut, int incomingUserId) {
if (DBG) {
@@ -1971,7 +1981,8 @@
if (DBG) Slog.v(TAG, "canInterrupt=" + canInterrupt + " intercept=" + intercept);
synchronized (mNotificationList) {
final StatusBarNotification n = new StatusBarNotification(
- pkg, id, tag, callingUid, callingPid, score, notification, user);
+ pkg, opPkg, id, tag, callingUid, callingPid, score, notification,
+ user);
NotificationRecord r = new NotificationRecord(n);
NotificationRecord old = null;
@@ -2147,7 +2158,7 @@
// notifying app does not have the VIBRATE permission.
long identity = Binder.clearCallingIdentity();
try {
- mVibrator.vibrate(r.sbn.getUid(), r.sbn.getBasePkg(),
+ mVibrator.vibrate(r.sbn.getUid(), r.sbn.getOpPkg(),
useDefaultVibrate ? mDefaultVibrationPattern
: mFallbackVibrationPattern,
((notification.flags & Notification.FLAG_INSISTENT) != 0)
@@ -2158,7 +2169,7 @@
} else if (notification.vibrate.length > 1) {
// If you want your own vibration pattern, you need the VIBRATE
// permission
- mVibrator.vibrate(r.sbn.getUid(), r.sbn.getBasePkg(),
+ mVibrator.vibrate(r.sbn.getUid(), r.sbn.getOpPkg(),
notification.vibrate,
((notification.flags & Notification.FLAG_INSISTENT) != 0)
? 0: -1, notification.audioStreamType);
diff --git a/services/core/java/com/android/server/statusbar/StatusBarManagerService.java b/services/core/java/com/android/server/statusbar/StatusBarManagerService.java
index e4b5f3a..91f796b 100644
--- a/services/core/java/com/android/server/statusbar/StatusBarManagerService.java
+++ b/services/core/java/com/android/server/statusbar/StatusBarManagerService.java
@@ -588,6 +588,19 @@
}
@Override
+ public void onNotificationVisibilityChanged(
+ String[] newlyVisibleKeys, String[] noLongerVisibleKeys) throws RemoteException {
+ enforceStatusBarService();
+ long identity = Binder.clearCallingIdentity();
+ try {
+ mNotificationDelegate.onNotificationVisibilityChanged(
+ newlyVisibleKeys, noLongerVisibleKeys);
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
+ }
+
+ @Override
public void onClearAllNotifications(int userId) {
enforceStatusBarService();
final int callingUid = Binder.getCallingUid();
diff --git a/services/core/java/com/android/server/tv/TvInputManagerService.java b/services/core/java/com/android/server/tv/TvInputManagerService.java
index 79c4a50..16ed7fe 100644
--- a/services/core/java/com/android/server/tv/TvInputManagerService.java
+++ b/services/core/java/com/android/server/tv/TvInputManagerService.java
@@ -277,8 +277,14 @@
}
synchronized (mLock) {
sessionState.session = session;
- sendSessionTokenToClientLocked(sessionState.client, sessionState.name,
- sessionToken, sessionState.seq, userId);
+ if (session == null) {
+ removeSessionStateLocked(sessionToken, userId);
+ sendSessionTokenToClientLocked(sessionState.client, sessionState.name, null,
+ sessionState.seq, userId);
+ } else {
+ sendSessionTokenToClientLocked(sessionState.client, sessionState.name,
+ sessionToken, sessionState.seq, userId);
+ }
}
}
};
@@ -288,6 +294,7 @@
service.createSession(callback);
} catch (RemoteException e) {
Log.e(TAG, "error in createSession", e);
+ removeSessionStateLocked(sessionToken, userId);
sendSessionTokenToClientLocked(sessionState.client, sessionState.name, null,
sessionState.seq, userId);
}
@@ -307,6 +314,19 @@
}
}
+ private void removeSessionStateLocked(IBinder sessionToken, int userId) {
+ // Remove the session state from the global session state map of the current user.
+ UserState userState = getUserStateLocked(userId);
+ SessionState sessionState = userState.sessionStateMap.remove(sessionToken);
+
+ // Also remove the session state from the session state map of the current service.
+ ServiceState serviceState = userState.serviceStateMap.get(sessionState.name);
+ if (serviceState != null) {
+ serviceState.sessionStateMap.remove(sessionToken);
+ }
+ updateServiceConnectionLocked(sessionState.name, userId);
+ }
+
private final class BinderService extends ITvInputManager.Stub {
@Override
public List<TvInputInfo> getTvInputList(int userId) {
@@ -474,17 +494,7 @@
Log.e(TAG, "error in release", e);
}
- // Remove its state from the global session state map of the current user.
- UserState userState = getUserStateLocked(resolvedUserId);
- SessionState sessionState = userState.sessionStateMap.remove(sessionToken);
-
- // Also remove it from the session state map of the current service.
- ServiceState serviceState = userState.serviceStateMap.get(sessionState.name);
- if (serviceState != null) {
- serviceState.sessionStateMap.remove(sessionToken);
- }
-
- updateServiceConnectionLocked(sessionState.name, resolvedUserId);
+ removeSessionStateLocked(sessionToken, resolvedUserId);
}
} finally {
Binder.restoreCallingIdentity(identity);
diff --git a/services/core/java/com/android/server/wm/AppTransition.java b/services/core/java/com/android/server/wm/AppTransition.java
index 7d8b5af..f17b2f4 100644
--- a/services/core/java/com/android/server/wm/AppTransition.java
+++ b/services/core/java/com/android/server/wm/AppTransition.java
@@ -17,6 +17,7 @@
package com.android.server.wm;
import android.content.Context;
+import android.content.res.Configuration;
import android.graphics.Bitmap;
import android.graphics.Point;
import android.graphics.Rect;
@@ -147,6 +148,9 @@
private int mNextAppTransitionStartWidth;
private int mNextAppTransitionStartHeight;
+ private Rect mTmpFromClipRect = new Rect();
+ private Rect mTmpToClipRect = new Rect();
+
private final static int APP_STATE_IDLE = 0;
private final static int APP_STATE_READY = 1;
private final static int APP_STATE_RUNNING = 2;
@@ -485,7 +489,7 @@
* activity that is leaving, and the activity that is entering.
*/
Animation createAlternateThumbnailEnterExitAnimationLocked(int thumbTransitState, int appWidth,
- int appHeight, int transit,
+ int appHeight, int orientation, int transit,
Rect containingFrame, Rect contentInsets) {
Animation a;
final int thumbWidthI = mNextAppTransitionThumbnail.getWidth();
@@ -493,21 +497,36 @@
final int thumbHeightI = mNextAppTransitionThumbnail.getHeight();
final float thumbHeight = thumbHeightI > 0 ? thumbHeightI : 1;
+ // Used for the ENTER_SCALE_UP and EXIT_SCALE_DOWN transitions
+ float scale = 1f;
+ int scaledTopDecor = 0;
+
switch (thumbTransitState) {
case THUMBNAIL_TRANSITION_ENTER_SCALE_UP: {
// Entering app scales up with the thumbnail
- float scale = thumbWidth / appWidth;
- int unscaledThumbHeight = (int) (thumbHeight / scale);
- int scaledTopDecor = (int) (scale * contentInsets.top);
- Rect fromClipRect = new Rect(containingFrame);
- fromClipRect.bottom = (fromClipRect.top + unscaledThumbHeight);
- Rect toClipRect = new Rect(containingFrame);
+ if (orientation == Configuration.ORIENTATION_PORTRAIT) {
+ // In portrait, we scale the width and clip to the top/left square
+ scale = thumbWidth / appWidth;
+ scaledTopDecor = (int) (scale * contentInsets.top);
+ int unscaledThumbHeight = (int) (thumbHeight / scale);
+ mTmpFromClipRect.set(containingFrame);
+ mTmpFromClipRect.bottom = (mTmpFromClipRect.top + unscaledThumbHeight);
+ mTmpToClipRect.set(containingFrame);
+ } else {
+ // In landscape, we scale the height and clip to the top/left square
+ scale = thumbHeight / (appHeight - contentInsets.top);
+ scaledTopDecor = (int) (scale * contentInsets.top);
+ int unscaledThumbWidth = (int) (thumbWidth / scale);
+ mTmpFromClipRect.set(containingFrame);
+ mTmpFromClipRect.right = (mTmpFromClipRect.left + unscaledThumbWidth);
+ mTmpToClipRect.set(containingFrame);
+ }
Animation scaleAnim = new ScaleAnimation(scale, 1, scale, 1,
computePivot(mNextAppTransitionStartX, scale),
computePivot(mNextAppTransitionStartY, scale));
Animation alphaAnim = new AlphaAnimation(1, 1);
- Animation clipAnim = new ClipRectAnimation(fromClipRect, toClipRect);
+ Animation clipAnim = new ClipRectAnimation(mTmpFromClipRect, mTmpToClipRect);
Animation translateAnim = new TranslateAnimation(0, 0, -scaledTopDecor, 0);
AnimationSet set = new AnimationSet(true);
@@ -539,18 +558,29 @@
}
case THUMBNAIL_TRANSITION_EXIT_SCALE_DOWN: {
// Exiting the current app, the app should scale down with the thumbnail
- float scale = thumbWidth / appWidth;
- int unscaledThumbHeight = (int) (thumbHeight / scale);
- int scaledTopDecor = (int) (scale * contentInsets.top);
- Rect fromClipRect = new Rect(containingFrame);
- Rect toClipRect = new Rect(containingFrame);
- toClipRect.bottom = (toClipRect.top + unscaledThumbHeight);
+ if (orientation == Configuration.ORIENTATION_PORTRAIT) {
+ // In portrait, we scale the width and clip to the top/left square
+ scale = thumbWidth / appWidth;
+ scaledTopDecor = (int) (scale * contentInsets.top);
+ int unscaledThumbHeight = (int) (thumbHeight / scale);
+ mTmpFromClipRect.set(containingFrame);
+ mTmpToClipRect.set(containingFrame);
+ mTmpToClipRect.bottom = (mTmpToClipRect.top + unscaledThumbHeight);
+ } else {
+ // In landscape, we scale the height and clip to the top/left square
+ scale = thumbHeight / (appHeight - contentInsets.top);
+ scaledTopDecor = (int) (scale * contentInsets.top);
+ int unscaledThumbWidth = (int) (thumbWidth / scale);
+ mTmpFromClipRect.set(containingFrame);
+ mTmpToClipRect.set(containingFrame);
+ mTmpToClipRect.right = (mTmpToClipRect.left + unscaledThumbWidth);
+ }
Animation scaleAnim = new ScaleAnimation(1, scale, 1, scale,
computePivot(mNextAppTransitionStartX, scale),
computePivot(mNextAppTransitionStartY, scale));
Animation alphaAnim = new AlphaAnimation(1, 1);
- Animation clipAnim = new ClipRectAnimation(fromClipRect, toClipRect);
+ Animation clipAnim = new ClipRectAnimation(mTmpFromClipRect, mTmpToClipRect);
Animation translateAnim = new TranslateAnimation(0, 0, 0, -scaledTopDecor);
AnimationSet set = new AnimationSet(true);
@@ -637,7 +667,8 @@
Animation loadAnimation(WindowManager.LayoutParams lp, int transit, boolean enter,
- int appWidth, int appHeight, Rect containingFrame, Rect contentInsets) {
+ int appWidth, int appHeight, int orientation,
+ Rect containingFrame, Rect contentInsets) {
Animation a;
if (mNextAppTransitionType == NEXT_TRANSIT_TYPE_CUSTOM) {
a = loadAnimation(mNextAppTransitionPackage, enter ?
@@ -660,8 +691,8 @@
(mNextAppTransitionType == NEXT_TRANSIT_TYPE_THUMBNAIL_SCALE_UP);
if (mUseAlternateThumbnailAnimation) {
a = createAlternateThumbnailEnterExitAnimationLocked(
- getThumbnailTransitionState(enter), appWidth, appHeight, transit,
- containingFrame, contentInsets);
+ getThumbnailTransitionState(enter), appWidth, appHeight, orientation,
+ transit, containingFrame, contentInsets);
} else {
a = createThumbnailEnterExitAnimationLocked(getThumbnailTransitionState(enter),
appWidth, appHeight, transit);
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index ad256c8..524d78b 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -3192,7 +3192,7 @@
}
Animation a = mAppTransition.loadAnimation(lp, transit, enter, width, height,
- containingFrame, contentInsets);
+ mCurConfiguration.orientation, containingFrame, contentInsets);
if (a != null) {
if (DEBUG_ANIM) {
RuntimeException e = null;
diff --git a/telephony/java/android/telephony/DataConnectionRealTimeInfo.aidl b/telephony/java/android/telephony/DataConnectionRealTimeInfo.aidl
new file mode 100644
index 0000000..70fbb11
--- /dev/null
+++ b/telephony/java/android/telephony/DataConnectionRealTimeInfo.aidl
@@ -0,0 +1,20 @@
+/*
+**
+** Copyright 2007, 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.
+*/
+
+package android.telephony;
+
+parcelable DataConnectionRealTimeInfo;
diff --git a/telephony/java/android/telephony/DataConnectionRealTimeInfo.java b/telephony/java/android/telephony/DataConnectionRealTimeInfo.java
new file mode 100644
index 0000000..4a9ae39
--- /dev/null
+++ b/telephony/java/android/telephony/DataConnectionRealTimeInfo.java
@@ -0,0 +1,138 @@
+/*
+ * 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.
+ */
+
+package android.telephony;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+/**
+ * Data connection real time information
+ *
+ * TODO: How to handle multiple subscriptions?
+ */
+public class DataConnectionRealTimeInfo implements Parcelable {
+ private long mTime; // Time the info was collected since boot in nanos;
+
+ public static int DC_POWER_STATE_LOW = 1;
+ public static int DC_POWER_STATE_MEDIUM = 2;
+ public static int DC_POWER_STATE_HIGH = 3;
+ public static int DC_POWER_STATE_UNKNOWN = Integer.MAX_VALUE;
+
+ private int mDcPowerState; // DC_POWER_STATE_[LOW | MEDIUM | HIGH | UNKNOWN]
+
+ /**
+ * Constructor
+ *
+ * @hide
+ */
+ public DataConnectionRealTimeInfo(long time, int dcPowerState) {
+ mTime = time;
+ mDcPowerState = dcPowerState;
+ }
+
+ /**
+ * Constructor
+ *
+ * @hide
+ */
+ public DataConnectionRealTimeInfo() {
+ mTime = Long.MAX_VALUE;
+ mDcPowerState = DC_POWER_STATE_UNKNOWN;
+ }
+
+ /**
+ * Construct a PreciseCallState object from the given parcel.
+ */
+ private DataConnectionRealTimeInfo(Parcel in) {
+ mTime = in.readLong();
+ mDcPowerState = in.readInt();
+ }
+
+ /**
+ * @return time the information was collected or Long.MAX_VALUE if unknown
+ */
+ public long getTime() {
+ return mTime;
+ }
+
+ /**
+ * @return DC_POWER_STATE_[LOW | MEDIUM | HIGH | UNKNOWN]
+ */
+ public int getDcPowerState() {
+ return mDcPowerState;
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel out, int flags) {
+ out.writeLong(mTime);
+ out.writeInt(mDcPowerState);
+ }
+
+ public static final Parcelable.Creator<DataConnectionRealTimeInfo> CREATOR
+ = new Parcelable.Creator<DataConnectionRealTimeInfo>() {
+
+ @Override
+ public DataConnectionRealTimeInfo createFromParcel(Parcel in) {
+ return new DataConnectionRealTimeInfo(in);
+ }
+
+ @Override
+ public DataConnectionRealTimeInfo[] newArray(int size) {
+ return new DataConnectionRealTimeInfo[size];
+ }
+ };
+
+ @Override
+ public int hashCode() {
+ final long prime = 17;
+ long result = 1;
+ result = (prime * result) + mTime;
+ result += (prime * result) + mDcPowerState;
+ return (int)result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ DataConnectionRealTimeInfo other = (DataConnectionRealTimeInfo) obj;
+ return (mTime == other.mTime)
+ && (mDcPowerState == other.mDcPowerState);
+ }
+
+ @Override
+ public String toString() {
+ StringBuffer sb = new StringBuffer();
+
+ sb.append("mTime=").append(mTime);
+ sb.append(" mDcPowerState=").append(mDcPowerState);
+
+ return sb.toString();
+ }
+}
diff --git a/telephony/java/android/telephony/PhoneStateListener.java b/telephony/java/android/telephony/PhoneStateListener.java
index bb3f132..7c5c648 100644
--- a/telephony/java/android/telephony/PhoneStateListener.java
+++ b/telephony/java/android/telephony/PhoneStateListener.java
@@ -188,6 +188,17 @@
*/
public static final int LISTEN_PRECISE_DATA_CONNECTION_STATE = 0x00001000;
+ /**
+ * Listen for real time info for all data connections (cellular)).
+ * {@more}
+ * Requires Permission: {@link android.Manifest.permission#READ_PRECISE_PHONE_STATE
+ * READ_PRECISE_PHONE_STATE}
+ *
+ * @see #onDataConnectionRealTimeInfoChanged(DataConnectionRealTimeInfo)
+ * @hide
+ */
+ public static final int LISTEN_DATA_CONNECTION_REAL_TIME_INFO = 0x00002000;
+
public PhoneStateListener() {
}
@@ -335,6 +346,16 @@
}
/**
+ * Callback invoked when data connection state changes with precise information.
+ *
+ * @hide
+ */
+ public void onDataConnectionRealTimeInfoChanged(
+ DataConnectionRealTimeInfo dcRtInfo) {
+ // default implementation empty
+ }
+
+ /**
* The callback methods need to be called on the handler thread where
* this object was created. If the binder did that for us it'd be nice.
*/
@@ -396,6 +417,12 @@
Message.obtain(mHandler, LISTEN_PRECISE_DATA_CONNECTION_STATE, 0, 0,
dataConnectionState).sendToTarget();
}
+
+ public void onDataConnectionRealTimeInfoChanged(
+ DataConnectionRealTimeInfo dcRtInfo) {
+ Message.obtain(mHandler, LISTEN_DATA_CONNECTION_REAL_TIME_INFO, 0, 0,
+ dcRtInfo).sendToTarget();
+ }
};
Handler mHandler = new Handler() {
@@ -441,6 +468,11 @@
break;
case LISTEN_PRECISE_DATA_CONNECTION_STATE:
PhoneStateListener.this.onPreciseDataConnectionStateChanged((PreciseDataConnectionState)msg.obj);
+ break;
+ case LISTEN_DATA_CONNECTION_REAL_TIME_INFO:
+ PhoneStateListener.this.onDataConnectionRealTimeInfoChanged(
+ (DataConnectionRealTimeInfo)msg.obj);
+ break;
}
}
};
diff --git a/telephony/java/com/android/internal/telephony/IPhoneStateListener.aidl b/telephony/java/com/android/internal/telephony/IPhoneStateListener.aidl
index f228d4e..3f36645 100644
--- a/telephony/java/com/android/internal/telephony/IPhoneStateListener.aidl
+++ b/telephony/java/com/android/internal/telephony/IPhoneStateListener.aidl
@@ -20,6 +20,7 @@
import android.telephony.ServiceState;
import android.telephony.SignalStrength;
import android.telephony.CellInfo;
+import android.telephony.DataConnectionRealTimeInfo;
import android.telephony.PreciseCallState;
import android.telephony.PreciseDataConnectionState;
@@ -39,5 +40,6 @@
void onCellInfoChanged(in List<CellInfo> cellInfo);
void onPreciseCallStateChanged(in PreciseCallState callState);
void onPreciseDataConnectionStateChanged(in PreciseDataConnectionState dataConnectionState);
+ void onDataConnectionRealTimeInfoChanged(in DataConnectionRealTimeInfo dcRtInfo);
}
diff --git a/telephony/java/com/android/internal/telephony/ITelephonyRegistry.aidl b/telephony/java/com/android/internal/telephony/ITelephonyRegistry.aidl
index 546ce17..8ea9b0d 100644
--- a/telephony/java/com/android/internal/telephony/ITelephonyRegistry.aidl
+++ b/telephony/java/com/android/internal/telephony/ITelephonyRegistry.aidl
@@ -20,9 +20,10 @@
import android.net.LinkProperties;
import android.net.LinkCapabilities;
import android.os.Bundle;
+import android.telephony.CellInfo;
+import android.telephony.DataConnectionRealTimeInfo;
import android.telephony.ServiceState;
import android.telephony.SignalStrength;
-import android.telephony.CellInfo;
import com.android.internal.telephony.IPhoneStateListener;
interface ITelephonyRegistry {
@@ -46,4 +47,5 @@
void notifyDisconnectCause(int disconnectCause, int preciseDisconnectCause);
void notifyPreciseDataConnectionFailed(String reason, String apnType, String apn,
String failCause);
+ void notifyDataConnectionRealTimeInfo(in DataConnectionRealTimeInfo dcRtInfo);
}