Merge "AccessibilityNodeInfo for visible views should reported." into jb-dev
diff --git a/Android.mk b/Android.mk
index 678ae55..eef900a 100644
--- a/Android.mk
+++ b/Android.mk
@@ -94,7 +94,6 @@
core/java/android/bluetooth/IBluetoothHealthCallback.aidl \
core/java/android/bluetooth/IBluetoothPbap.aidl \
core/java/android/bluetooth/IBluetoothStateChangeCallback.aidl \
- core/java/android/content/ICancellationSignal.aidl \
core/java/android/content/IClipboard.aidl \
core/java/android/content/IContentService.aidl \
core/java/android/content/IIntentReceiver.aidl \
@@ -126,6 +125,7 @@
core/java/android/nfc/INfcAdapter.aidl \
core/java/android/nfc/INfcAdapterExtras.aidl \
core/java/android/nfc/INfcTag.aidl \
+ core/java/android/os/ICancellationSignal.aidl \
core/java/android/os/IHardwareService.aidl \
core/java/android/os/IMessenger.aidl \
core/java/android/os/INetworkManagementService.aidl \
diff --git a/api/current.txt b/api/current.txt
index c5c84bc..2e5a09e 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -103,7 +103,6 @@
field public static final java.lang.String SET_ALWAYS_FINISH = "android.permission.SET_ALWAYS_FINISH";
field public static final java.lang.String SET_ANIMATION_SCALE = "android.permission.SET_ANIMATION_SCALE";
field public static final java.lang.String SET_DEBUG_APP = "android.permission.SET_DEBUG_APP";
- field public static final java.lang.String SET_KEYBOARD_LAYOUT = "android.permission.SET_KEYBOARD_LAYOUT";
field public static final java.lang.String SET_ORIENTATION = "android.permission.SET_ORIENTATION";
field public static final java.lang.String SET_POINTER_SPEED = "android.permission.SET_POINTER_SPEED";
field public static final deprecated java.lang.String SET_PREFERRED_APPLICATIONS = "android.permission.SET_PREFERRED_APPLICATIONS";
@@ -144,6 +143,7 @@
field public static final java.lang.String AFFECTS_BATTERY = "android.permission-group.AFFECTS_BATTERY";
field public static final java.lang.String APP_INFO = "android.permission-group.APP_INFO";
field public static final java.lang.String AUDIO_SETTINGS = "android.permission-group.AUDIO_SETTINGS";
+ field public static final java.lang.String BLUETOOTH_NETWORK = "android.permission-group.BLUETOOTH_NETWORK";
field public static final java.lang.String BOOKMARKS = "android.permission-group.BOOKMARKS";
field public static final java.lang.String CALENDAR = "android.permission-group.CALENDAR";
field public static final java.lang.String CAMERA = "android.permission-group.CAMERA";
@@ -169,6 +169,7 @@
field public static final java.lang.String USER_DICTIONARY = "android.permission-group.USER_DICTIONARY";
field public static final java.lang.String VOICEMAIL = "android.permission-group.VOICEMAIL";
field public static final java.lang.String WALLPAPER = "android.permission-group.WALLPAPER";
+ field public static final java.lang.String WRITE_USER_DICTIONARY = "android.permission-group.WRITE_USER_DICTIONARY";
}
public final class R {
@@ -4908,18 +4909,6 @@
method public final void setResultExtras(android.os.Bundle);
}
- public final class CancellationSignal {
- ctor public CancellationSignal();
- method public void cancel();
- method public boolean isCanceled();
- method public void setOnCancelListener(android.content.CancellationSignal.OnCancelListener);
- method public void throwIfCanceled();
- }
-
- public static abstract interface CancellationSignal.OnCancelListener {
- method public abstract void onCancel();
- }
-
public class ClipData implements android.os.Parcelable {
ctor public ClipData(java.lang.CharSequence, java.lang.String[], android.content.ClipData.Item);
ctor public ClipData(android.content.ClipDescription, android.content.ClipData.Item);
@@ -5050,7 +5039,7 @@
method public android.os.ParcelFileDescriptor openPipeHelper(android.net.Uri, java.lang.String, android.os.Bundle, T, android.content.ContentProvider.PipeDataWriter<T>) throws java.io.FileNotFoundException;
method public android.content.res.AssetFileDescriptor openTypedAssetFile(android.net.Uri, java.lang.String, android.os.Bundle) throws java.io.FileNotFoundException;
method public abstract android.database.Cursor query(android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String);
- method public android.database.Cursor query(android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, android.content.CancellationSignal);
+ method public android.database.Cursor query(android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, android.os.CancellationSignal);
method protected final void setPathPermissions(android.content.pm.PathPermission[]);
method protected final void setReadPermission(java.lang.String);
method protected final void setWritePermission(java.lang.String);
@@ -5074,7 +5063,7 @@
method public android.os.ParcelFileDescriptor openFile(android.net.Uri, java.lang.String) throws java.io.FileNotFoundException, android.os.RemoteException;
method public final android.content.res.AssetFileDescriptor openTypedAssetFileDescriptor(android.net.Uri, java.lang.String, android.os.Bundle) throws java.io.FileNotFoundException, android.os.RemoteException;
method public android.database.Cursor query(android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String) throws android.os.RemoteException;
- method public android.database.Cursor query(android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, android.content.CancellationSignal) throws android.os.RemoteException;
+ method public android.database.Cursor query(android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, android.os.CancellationSignal) throws android.os.RemoteException;
method public boolean release();
method public int update(android.net.Uri, android.content.ContentValues, java.lang.String, java.lang.String[]) throws android.os.RemoteException;
}
@@ -5161,7 +5150,7 @@
method public final java.io.OutputStream openOutputStream(android.net.Uri, java.lang.String) throws java.io.FileNotFoundException;
method public final android.content.res.AssetFileDescriptor openTypedAssetFileDescriptor(android.net.Uri, java.lang.String, android.os.Bundle) throws java.io.FileNotFoundException;
method public final android.database.Cursor query(android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String);
- method public final android.database.Cursor query(android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, android.content.CancellationSignal);
+ method public final android.database.Cursor query(android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, android.os.CancellationSignal);
method public final void registerContentObserver(android.net.Uri, boolean, android.database.ContentObserver);
method public static void removePeriodicSync(android.accounts.Account, java.lang.String, android.os.Bundle);
method public static void removeStatusChangeListener(java.lang.Object);
@@ -6038,11 +6027,6 @@
method public int getNumSuccessfulYieldPoints();
}
- public class OperationCanceledException extends java.lang.RuntimeException {
- ctor public OperationCanceledException();
- ctor public OperationCanceledException(java.lang.String);
- }
-
public class PeriodicSync implements android.os.Parcelable {
ctor public PeriodicSync(android.accounts.Account, java.lang.String, android.os.Bundle, long);
method public int describeContents();
@@ -7502,15 +7486,15 @@
method public static android.database.sqlite.SQLiteDatabase openOrCreateDatabase(java.lang.String, android.database.sqlite.SQLiteDatabase.CursorFactory);
method public static android.database.sqlite.SQLiteDatabase openOrCreateDatabase(java.lang.String, android.database.sqlite.SQLiteDatabase.CursorFactory, android.database.DatabaseErrorHandler);
method public android.database.Cursor query(boolean, java.lang.String, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String, java.lang.String);
- method public android.database.Cursor query(boolean, java.lang.String, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String, java.lang.String, android.content.CancellationSignal);
+ method public android.database.Cursor query(boolean, java.lang.String, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String, java.lang.String, android.os.CancellationSignal);
method public android.database.Cursor query(java.lang.String, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String);
method public android.database.Cursor query(java.lang.String, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String, java.lang.String);
method public android.database.Cursor queryWithFactory(android.database.sqlite.SQLiteDatabase.CursorFactory, boolean, java.lang.String, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String, java.lang.String);
- method public android.database.Cursor queryWithFactory(android.database.sqlite.SQLiteDatabase.CursorFactory, boolean, java.lang.String, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String, java.lang.String, android.content.CancellationSignal);
+ method public android.database.Cursor queryWithFactory(android.database.sqlite.SQLiteDatabase.CursorFactory, boolean, java.lang.String, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String, java.lang.String, android.os.CancellationSignal);
method public android.database.Cursor rawQuery(java.lang.String, java.lang.String[]);
- method public android.database.Cursor rawQuery(java.lang.String, java.lang.String[], android.content.CancellationSignal);
+ method public android.database.Cursor rawQuery(java.lang.String, java.lang.String[], android.os.CancellationSignal);
method public android.database.Cursor rawQueryWithFactory(android.database.sqlite.SQLiteDatabase.CursorFactory, java.lang.String, java.lang.String[], java.lang.String);
- method public android.database.Cursor rawQueryWithFactory(android.database.sqlite.SQLiteDatabase.CursorFactory, java.lang.String, java.lang.String[], java.lang.String, android.content.CancellationSignal);
+ method public android.database.Cursor rawQueryWithFactory(android.database.sqlite.SQLiteDatabase.CursorFactory, java.lang.String, java.lang.String[], java.lang.String, android.os.CancellationSignal);
method public static int releaseMemory();
method public long replace(java.lang.String, java.lang.String, android.content.ContentValues);
method public long replaceOrThrow(java.lang.String, java.lang.String, android.content.ContentValues) throws android.database.SQLException;
@@ -7636,7 +7620,7 @@
method public java.lang.String getTables();
method public android.database.Cursor query(android.database.sqlite.SQLiteDatabase, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String);
method public android.database.Cursor query(android.database.sqlite.SQLiteDatabase, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String, java.lang.String);
- method public android.database.Cursor query(android.database.sqlite.SQLiteDatabase, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String, java.lang.String, android.content.CancellationSignal);
+ method public android.database.Cursor query(android.database.sqlite.SQLiteDatabase, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String, java.lang.String, android.os.CancellationSignal);
method public void setCursorFactory(android.database.sqlite.SQLiteDatabase.CursorFactory);
method public void setDistinct(boolean);
method public void setProjectionMap(java.util.Map<java.lang.String, java.lang.String>);
@@ -15363,6 +15347,18 @@
field public static final android.os.Bundle EMPTY;
}
+ public final class CancellationSignal {
+ ctor public CancellationSignal();
+ method public void cancel();
+ method public boolean isCanceled();
+ method public void setOnCancelListener(android.os.CancellationSignal.OnCancelListener);
+ method public void throwIfCanceled();
+ }
+
+ public static abstract interface CancellationSignal.OnCancelListener {
+ method public abstract void onCancel();
+ }
+
public class ConditionVariable {
ctor public ConditionVariable();
ctor public ConditionVariable(boolean);
@@ -15727,6 +15723,11 @@
ctor public NetworkOnMainThreadException();
}
+ public class OperationCanceledException extends java.lang.RuntimeException {
+ ctor public OperationCanceledException();
+ ctor public OperationCanceledException(java.lang.String);
+ }
+
public final class Parcel {
method public final void appendFrom(android.os.Parcel, int, int);
method public final android.os.IBinder[] createBinderArray();
@@ -24592,7 +24593,6 @@
method public android.view.View getFocusedChild();
method public android.view.animation.LayoutAnimationController getLayoutAnimation();
method public android.view.animation.Animation.AnimationListener getLayoutAnimationListener();
- method public int getLayoutMode();
method public android.animation.LayoutTransition getLayoutTransition();
method public int getPersistentDrawingCache();
method public int indexOfChild(android.view.View);
@@ -24640,7 +24640,6 @@
method public void setDescendantFocusability(int);
method public void setLayoutAnimation(android.view.animation.LayoutAnimationController);
method public void setLayoutAnimationListener(android.view.animation.Animation.AnimationListener);
- method public void setLayoutMode(int);
method public void setLayoutTransition(android.animation.LayoutTransition);
method public void setMotionEventSplittingEnabled(boolean);
method public void setOnHierarchyChangeListener(android.view.ViewGroup.OnHierarchyChangeListener);
@@ -24652,12 +24651,10 @@
method public void startLayoutAnimation();
method public void startViewTransition(android.view.View);
method public void updateViewLayout(android.view.View, android.view.ViewGroup.LayoutParams);
- field public static final int CLIP_BOUNDS = 0; // 0x0
field protected static final int CLIP_TO_PADDING_MASK = 34; // 0x22
field public static final int FOCUS_AFTER_DESCENDANTS = 262144; // 0x40000
field public static final int FOCUS_BEFORE_DESCENDANTS = 131072; // 0x20000
field public static final int FOCUS_BLOCK_DESCENDANTS = 393216; // 0x60000
- field public static final int OPTICAL_BOUNDS = 1; // 0x1
field public static final int PERSISTENT_ALL_CACHES = 3; // 0x3
field public static final int PERSISTENT_ANIMATION_CACHE = 1; // 0x1
field public static final int PERSISTENT_NO_CACHE = 0; // 0x0
@@ -25090,6 +25087,7 @@
method public void appendRecord(android.view.accessibility.AccessibilityRecord);
method public int describeContents();
method public static java.lang.String eventTypeToString(int);
+ method public int getAction();
method public long getEventTime();
method public int getEventType();
method public int getMovementGranularity();
@@ -25100,6 +25098,7 @@
method public static android.view.accessibility.AccessibilityEvent obtain(int);
method public static android.view.accessibility.AccessibilityEvent obtain(android.view.accessibility.AccessibilityEvent);
method public static android.view.accessibility.AccessibilityEvent obtain();
+ method public void setAction(int);
method public void setEventTime(long);
method public void setEventType(int);
method public void setMovementGranularity(int);
diff --git a/cmds/pm/src/com/android/commands/pm/Pm.java b/cmds/pm/src/com/android/commands/pm/Pm.java
index e19ad66..f9ff861 100644
--- a/cmds/pm/src/com/android/commands/pm/Pm.java
+++ b/cmds/pm/src/com/android/commands/pm/Pm.java
@@ -16,9 +16,12 @@
package com.android.commands.pm;
+import com.android.internal.content.PackageHelper;
+
import android.app.ActivityManagerNative;
import android.content.ComponentName;
import android.content.pm.ApplicationInfo;
+import android.content.pm.ContainerEncryptionParams;
import android.content.pm.FeatureInfo;
import android.content.pm.IPackageDataObserver;
import android.content.pm.IPackageDeleteObserver;
@@ -40,17 +43,20 @@
import android.os.RemoteException;
import android.os.ServiceManager;
-import com.android.internal.content.PackageHelper;
-
import java.io.File;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
+import java.security.InvalidAlgorithmParameterException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.WeakHashMap;
+import javax.crypto.SecretKey;
+import javax.crypto.spec.IvParameterSpec;
+import javax.crypto.spec.SecretKeySpec;
+
public final class Pm {
IPackageManager mPm;
@@ -763,6 +769,15 @@
String installerPackageName = null;
String opt;
+
+ String algo = null;
+ byte[] iv = null;
+ byte[] key = null;
+
+ String macAlgo = null;
+ byte[] macKey = null;
+ byte[] tag = null;
+
while ((opt=nextOption()) != null) {
if (opt.equals("-l")) {
installFlags |= PackageManager.INSTALL_FORWARD_LOCK;
@@ -783,6 +798,48 @@
} else if (opt.equals("-f")) {
// Override if -s option is specified.
installFlags |= PackageManager.INSTALL_INTERNAL;
+ } else if (opt.equals("--algo")) {
+ algo = nextOptionData();
+ if (algo == null) {
+ System.err.println("Error: must supply argument for --algo");
+ showUsage();
+ return;
+ }
+ } else if (opt.equals("--iv")) {
+ iv = hexToBytes(nextOptionData());
+ if (iv == null) {
+ System.err.println("Error: must supply argument for --iv");
+ showUsage();
+ return;
+ }
+ } else if (opt.equals("--key")) {
+ key = hexToBytes(nextOptionData());
+ if (key == null) {
+ System.err.println("Error: must supply argument for --key");
+ showUsage();
+ return;
+ }
+ } else if (opt.equals("--macalgo")) {
+ macAlgo = nextOptionData();
+ if (macAlgo == null) {
+ System.err.println("Error: must supply argument for --macalgo");
+ showUsage();
+ return;
+ }
+ } else if (opt.equals("--mackey")) {
+ macKey = hexToBytes(nextOptionData());
+ if (macKey == null) {
+ System.err.println("Error: must supply argument for --mackey");
+ showUsage();
+ return;
+ }
+ } else if (opt.equals("--tag")) {
+ tag = hexToBytes(nextOptionData());
+ if (tag == null) {
+ System.err.println("Error: must supply argument for --tag");
+ showUsage();
+ return;
+ }
} else {
System.err.println("Error: Unknown option: " + opt);
showUsage();
@@ -790,6 +847,44 @@
}
}
+ final ContainerEncryptionParams encryptionParams;
+ if (algo != null || iv != null || key != null || macAlgo != null || macKey != null
+ || tag != null) {
+ if (algo == null || iv == null || key == null) {
+ System.err.println("Error: all of --algo, --iv, and --key must be specified");
+ showUsage();
+ return;
+ }
+
+ if (macAlgo != null || macKey != null || tag != null) {
+ if (macAlgo == null || macKey == null || tag == null) {
+ System.err.println("Error: all of --macalgo, --mackey, and --tag must "
+ + "be specified");
+ showUsage();
+ return;
+ }
+ }
+
+ try {
+ final SecretKey encKey = new SecretKeySpec(key, "RAW");
+
+ final SecretKey macSecretKey;
+ if (macKey == null || macKey.length == 0) {
+ macSecretKey = null;
+ } else {
+ macSecretKey = new SecretKeySpec(macKey, "RAW");
+ }
+
+ encryptionParams = new ContainerEncryptionParams(algo, new IvParameterSpec(iv),
+ encKey, macAlgo, null, macSecretKey, tag, -1, -1, -1);
+ } catch (InvalidAlgorithmParameterException e) {
+ e.printStackTrace();
+ return;
+ }
+ } else {
+ encryptionParams = null;
+ }
+
final Uri apkURI;
final Uri verificationURI;
@@ -816,7 +911,7 @@
PackageInstallObserver obs = new PackageInstallObserver();
try {
mPm.installPackageWithVerification(apkURI, obs, installFlags, installerPackageName,
- verificationURI, null);
+ verificationURI, null, encryptionParams);
synchronized (obs) {
while (!obs.finished) {
@@ -839,6 +934,37 @@
}
}
+ /**
+ * Convert a string containing hex-encoded bytes to a byte array.
+ *
+ * @param input String containing hex-encoded bytes
+ * @return input as an array of bytes
+ */
+ private byte[] hexToBytes(String input) {
+ if (input == null) {
+ return null;
+ }
+
+ final int inputLength = input.length();
+ if ((inputLength % 2) != 0) {
+ System.err.print("Invalid length; must be multiple of 2");
+ return null;
+ }
+
+ final int byteLength = inputLength / 2;
+ final byte[] output = new byte[byteLength];
+
+ int inputIndex = 0;
+ int byteIndex = 0;
+ while (inputIndex < inputLength) {
+ output[byteIndex++] = (byte) Integer.parseInt(
+ input.substring(inputIndex, inputIndex + 2), 16);
+ inputIndex += 2;
+ }
+
+ return output;
+ }
+
public void runCreateUser() {
// Need to be run as root
if (Process.myUid() != ROOT_UID) {
@@ -1236,7 +1362,8 @@
System.err.println(" pm list libraries");
System.err.println(" pm list users");
System.err.println(" pm path PACKAGE");
- System.err.println(" pm install [-l] [-r] [-t] [-i INSTALLER_PACKAGE_NAME] [-s] [-f] PATH");
+ System.err.println(" pm install [-l] [-r] [-t] [-i INSTALLER_PACKAGE_NAME] [-s] [-f]");
+ System.err.println(" [--algo <algorithm name> --key <key-in-hex> --iv <IV-in-hex>] PATH");
System.err.println(" pm uninstall [-k] PACKAGE");
System.err.println(" pm clear PACKAGE");
System.err.println(" pm enable [--user USER_ID] PACKAGE_OR_COMPONENT");
diff --git a/core/java/android/animation/ValueAnimator.java b/core/java/android/animation/ValueAnimator.java
index 326f27c..f3a442a 100755
--- a/core/java/android/animation/ValueAnimator.java
+++ b/core/java/android/animation/ValueAnimator.java
@@ -910,7 +910,7 @@
animationHandler.mPendingAnimations.add(this);
if (mStartDelay == 0) {
// This sets the initial value of the animation, prior to actually starting it running
- setCurrentPlayTime(getCurrentPlayTime());
+ setCurrentPlayTime(0);
mPlayingState = STOPPED;
mRunning = true;
notifyStartListeners();
diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java
index 29d96fe..ac55abe 100644
--- a/core/java/android/app/Activity.java
+++ b/core/java/android/app/Activity.java
@@ -2493,7 +2493,7 @@
if (featureId == Window.FEATURE_OPTIONS_PANEL && menu != null) {
boolean goforit = onPrepareOptionsMenu(menu);
goforit |= mFragments.dispatchPrepareOptionsMenu(menu);
- return goforit && menu.hasVisibleItems();
+ return goforit;
}
return true;
}
@@ -2540,11 +2540,10 @@
if (item.getItemId() == android.R.id.home && mActionBar != null &&
(mActionBar.getDisplayOptions() & ActionBar.DISPLAY_HOME_AS_UP) != 0) {
if (mParent == null) {
- onNavigateUp();
+ return onNavigateUp();
} else {
- mParent.onNavigateUpFromChild(this);
+ return mParent.onNavigateUpFromChild(this);
}
- return true;
}
return false;
diff --git a/core/java/android/app/ActivityOptions.java b/core/java/android/app/ActivityOptions.java
index b730581..3d0b7d8 100644
--- a/core/java/android/app/ActivityOptions.java
+++ b/core/java/android/app/ActivityOptions.java
@@ -147,12 +147,17 @@
* activity is scaled from a small originating area of the screen to
* its final full representation.
*
+ * <p>If the Intent this is being used with has not set its
+ * {@link android.content.Intent#setSourceBounds Intent.setSourceBounds},
+ * those bounds will be filled in for you based on the initial
+ * bounds passed in here.
+ *
* @param source The View that the new activity is animating from. This
* defines the coordinate space for <var>startX</var> and <var>startY</var>.
* @param startX The x starting location of the new activity, relative to <var>source</var>.
* @param startY The y starting location of the activity, relative to <var>source</var>.
* @param startWidth The initial width of the new activity.
- * @param startWidth The initial height of the new activity.
+ * @param startHeight The initial height of the new activity.
* @return Returns a new ActivityOptions object that you can use to
* supply these options as the options Bundle when starting an activity.
*/
@@ -175,6 +180,11 @@
* is scaled from a given position to the new activity window that is
* being started.
*
+ * <p>If the Intent this is being used with has not set its
+ * {@link android.content.Intent#setSourceBounds Intent.setSourceBounds},
+ * those bounds will be filled in for you based on the initial
+ * thumbnail location and size provided here.
+ *
* @param source The View that this thumbnail is animating from. This
* defines the coordinate space for <var>startX</var> and <var>startY</var>.
* @param thumbnail The bitmap that will be shown as the initial thumbnail
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java
index b55ee26..8799194 100644
--- a/core/java/android/app/ActivityThread.java
+++ b/core/java/android/app/ActivityThread.java
@@ -136,7 +136,7 @@
/** @hide */
public static final boolean DEBUG_BROADCAST = false;
private static final boolean DEBUG_RESULTS = false;
- private static final boolean DEBUG_BACKUP = true;
+ private static final boolean DEBUG_BACKUP = false;
private static final boolean DEBUG_CONFIGURATION = false;
private static final boolean DEBUG_SERVICE = false;
private static final boolean DEBUG_MEMORY_TRIM = false;
@@ -1172,10 +1172,10 @@
case DUMP_PROVIDER: return "DUMP_PROVIDER";
}
}
- return "(unknown)";
+ return Integer.toString(code);
}
public void handleMessage(Message msg) {
- if (DEBUG_MESSAGES) Slog.v(TAG, ">>> handling: " + msg.what);
+ if (DEBUG_MESSAGES) Slog.v(TAG, ">>> handling: " + codeToString(msg.what));
switch (msg.what) {
case LAUNCH_ACTIVITY: {
Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "activityStart");
@@ -1378,7 +1378,7 @@
Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
break;
}
- if (DEBUG_MESSAGES) Slog.v(TAG, "<<< done: " + msg.what);
+ if (DEBUG_MESSAGES) Slog.v(TAG, "<<< done: " + codeToString(msg.what));
}
private void maybeSnapshot() {
@@ -2639,6 +2639,7 @@
if (DEBUG_CONFIGURATION) Slog.v(TAG, "Resuming activity "
+ r.activityInfo.name + " with newConfig " + r.newConfig);
performConfigurationChanged(r.activity, r.newConfig);
+ freeTextLayoutCachesIfNeeded(r.activity.mCurrentConfig.diff(r.newConfig));
r.newConfig = null;
}
if (localLOGV) Slog.v(TAG, "Resuming " + r + " with isForward="
@@ -2955,6 +2956,7 @@
if (DEBUG_CONFIGURATION) Slog.v(TAG, "Updating activity vis "
+ r.activityInfo.name + " with new config " + r.newConfig);
performConfigurationChanged(r.activity, r.newConfig);
+ freeTextLayoutCachesIfNeeded(r.activity.mCurrentConfig.diff(r.newConfig));
r.newConfig = null;
}
} else {
@@ -3669,6 +3671,7 @@
final void handleConfigurationChanged(Configuration config, CompatibilityInfo compat) {
ArrayList<ComponentCallbacks2> callbacks = null;
+ int configDiff = 0;
synchronized (mPackages) {
if (mPendingConfiguration != null) {
@@ -3693,6 +3696,7 @@
if (!mConfiguration.isOtherSeqNewer(config) && compat == null) {
return;
}
+ configDiff = mConfiguration.diff(config);
mConfiguration.updateFrom(config);
config = applyCompatConfiguration();
callbacks = collectComponentCallbacksLocked(false, config);
@@ -3701,6 +3705,8 @@
// Cleanup hardware accelerated stuff
WindowManagerImpl.getDefault().trimLocalMemory();
+ freeTextLayoutCachesIfNeeded(configDiff);
+
if (callbacks != null) {
final int N = callbacks.size();
for (int i=0; i<N; i++) {
@@ -3709,6 +3715,17 @@
}
}
+ final void freeTextLayoutCachesIfNeeded(int configDiff) {
+ if (configDiff != 0) {
+ // Ask text layout engine to free its caches if there is a locale change
+ boolean hasLocaleConfigChange = ((configDiff & ActivityInfo.CONFIG_LOCALE) != 0);
+ if (hasLocaleConfigChange) {
+ Canvas.freeTextLayoutCaches();
+ if (DEBUG_CONFIGURATION) Slog.v(TAG, "Cleared TextLayout Caches");
+ }
+ }
+ }
+
final void handleActivityConfigurationChanged(IBinder token) {
ActivityClientRecord r = mActivities.get(token);
if (r == null || r.activity == null) {
@@ -3719,6 +3736,8 @@
+ r.activityInfo.name);
performConfigurationChanged(r.activity, mCompatConfiguration);
+
+ freeTextLayoutCachesIfNeeded(r.activity.mCurrentConfig.diff(mCompatConfiguration));
}
final void handleProfilerControl(boolean start, ProfilerControlData pcd, int profileType) {
@@ -3821,6 +3840,9 @@
// Ask graphics to free up as much as possible (font/image caches)
Canvas.freeCaches();
+ // Ask text layout engine to free also as much as possible
+ Canvas.freeTextLayoutCaches();
+
BinderInternal.forceGc("mem");
}
diff --git a/core/java/android/app/ApplicationPackageManager.java b/core/java/android/app/ApplicationPackageManager.java
index 0510de1..191a696 100644
--- a/core/java/android/app/ApplicationPackageManager.java
+++ b/core/java/android/app/ApplicationPackageManager.java
@@ -24,6 +24,7 @@
import android.content.pm.ActivityInfo;
import android.content.pm.ApplicationInfo;
import android.content.pm.ComponentInfo;
+import android.content.pm.ContainerEncryptionParams;
import android.content.pm.FeatureInfo;
import android.content.pm.IPackageDataObserver;
import android.content.pm.IPackageDeleteObserver;
@@ -973,10 +974,10 @@
@Override
public void installPackageWithVerification(Uri packageURI, IPackageInstallObserver observer,
int flags, String installerPackageName, Uri verificationURI,
- ManifestDigest manifestDigest) {
+ ManifestDigest manifestDigest, ContainerEncryptionParams encryptionParams) {
try {
mPM.installPackageWithVerification(packageURI, observer, flags, installerPackageName,
- verificationURI, manifestDigest);
+ verificationURI, manifestDigest, encryptionParams);
} catch (RemoteException e) {
// Should never happen!
}
diff --git a/core/java/android/app/Notification.java b/core/java/android/app/Notification.java
index 2951476..f962259 100644
--- a/core/java/android/app/Notification.java
+++ b/core/java/android/app/Notification.java
@@ -806,6 +806,10 @@
contentView.setViewVisibility(R.id.time, View.VISIBLE);
contentView.setLong(R.id.time, "setTime", when);
}
+ if (this.number != 0) {
+ NumberFormat f = NumberFormat.getIntegerInstance();
+ contentView.setTextViewText(R.id.info, f.format(this.number));
+ }
this.contentView = contentView;
this.contentIntent = contentIntent;
@@ -1432,6 +1436,7 @@
// Log.d("Notification", "has actions: " + mContentText);
big.setViewVisibility(R.id.actions, View.VISIBLE);
if (N>3) N=3;
+ big.removeAllViews(R.id.actions);
for (int i=0; i<N; i++) {
final RemoteViews button = generateActionButton(mActions.get(i));
//Log.d("Notification", "adding action " + i + ": " + mActions.get(i).title);
diff --git a/core/java/android/content/AsyncTaskLoader.java b/core/java/android/content/AsyncTaskLoader.java
index da51952..f9025d9 100644
--- a/core/java/android/content/AsyncTaskLoader.java
+++ b/core/java/android/content/AsyncTaskLoader.java
@@ -18,6 +18,7 @@
import android.os.AsyncTask;
import android.os.Handler;
+import android.os.OperationCanceledException;
import android.os.SystemClock;
import android.util.Slog;
import android.util.TimeUtils;
diff --git a/core/java/android/content/ContentProvider.java b/core/java/android/content/ContentProvider.java
index 1206056..b22179e 100644
--- a/core/java/android/content/ContentProvider.java
+++ b/core/java/android/content/ContentProvider.java
@@ -29,6 +29,9 @@
import android.os.AsyncTask;
import android.os.Binder;
import android.os.Bundle;
+import android.os.CancellationSignal;
+import android.os.ICancellationSignal;
+import android.os.OperationCanceledException;
import android.os.ParcelFileDescriptor;
import android.os.Process;
import android.os.RemoteException;
diff --git a/core/java/android/content/ContentProviderClient.java b/core/java/android/content/ContentProviderClient.java
index 3ac5e07..da2ab94 100644
--- a/core/java/android/content/ContentProviderClient.java
+++ b/core/java/android/content/ContentProviderClient.java
@@ -19,6 +19,8 @@
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
+import android.os.CancellationSignal;
+import android.os.ICancellationSignal;
import android.os.RemoteException;
import android.os.ParcelFileDescriptor;
import android.content.res.AssetFileDescriptor;
diff --git a/core/java/android/content/ContentProviderNative.java b/core/java/android/content/ContentProviderNative.java
index 4b31552..550a1c9 100644
--- a/core/java/android/content/ContentProviderNative.java
+++ b/core/java/android/content/ContentProviderNative.java
@@ -30,6 +30,7 @@
import android.os.Bundle;
import android.os.RemoteException;
import android.os.IBinder;
+import android.os.ICancellationSignal;
import android.os.Parcel;
import android.os.ParcelFileDescriptor;
import android.os.Parcelable;
diff --git a/core/java/android/content/ContentResolver.java b/core/java/android/content/ContentResolver.java
index 722fdc6..d4bca0a 100644
--- a/core/java/android/content/ContentResolver.java
+++ b/core/java/android/content/ContentResolver.java
@@ -33,7 +33,10 @@
import android.database.IContentObserver;
import android.net.Uri;
import android.os.Bundle;
+import android.os.CancellationSignal;
import android.os.IBinder;
+import android.os.ICancellationSignal;
+import android.os.OperationCanceledException;
import android.os.ParcelFileDescriptor;
import android.os.RemoteException;
import android.os.ServiceManager;
diff --git a/core/java/android/content/CursorLoader.java b/core/java/android/content/CursorLoader.java
index aed3728..9f7a104 100644
--- a/core/java/android/content/CursorLoader.java
+++ b/core/java/android/content/CursorLoader.java
@@ -19,6 +19,8 @@
import android.database.ContentObserver;
import android.database.Cursor;
import android.net.Uri;
+import android.os.CancellationSignal;
+import android.os.OperationCanceledException;
import java.io.FileDescriptor;
import java.io.PrintWriter;
diff --git a/core/java/android/content/IContentProvider.java b/core/java/android/content/IContentProvider.java
index 16478b7..eeba1e0 100644
--- a/core/java/android/content/IContentProvider.java
+++ b/core/java/android/content/IContentProvider.java
@@ -21,6 +21,7 @@
import android.net.Uri;
import android.os.Bundle;
import android.os.IBinder;
+import android.os.ICancellationSignal;
import android.os.IInterface;
import android.os.ParcelFileDescriptor;
import android.os.RemoteException;
diff --git a/core/java/android/content/SyncManager.java b/core/java/android/content/SyncManager.java
index 34c40a0..badcb03 100644
--- a/core/java/android/content/SyncManager.java
+++ b/core/java/android/content/SyncManager.java
@@ -17,7 +17,6 @@
package android.content;
import com.android.internal.R;
-import com.android.internal.util.ArrayUtils;
import com.google.android.collect.Lists;
import com.google.android.collect.Maps;
@@ -32,7 +31,6 @@
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
-import android.app.DownloadManager.Request;
import android.content.SyncStorageEngine.OnSyncRequestListener;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
@@ -1998,6 +1996,7 @@
ActiveSyncContext conflict = null;
ActiveSyncContext longRunning = null;
ActiveSyncContext toReschedule = null;
+ ActiveSyncContext oldestNonExpeditedRegular = null;
for (ActiveSyncContext activeSyncContext : mActiveSyncContexts) {
final SyncOperation activeOp = activeSyncContext.mSyncOperation;
@@ -2005,6 +2004,13 @@
numInit++;
} else {
numRegular++;
+ if (!activeOp.isExpedited()) {
+ if (oldestNonExpeditedRegular == null
+ || (oldestNonExpeditedRegular.mStartTime
+ > activeSyncContext.mStartTime)) {
+ oldestNonExpeditedRegular = activeSyncContext;
+ }
+ }
}
if (activeOp.account.type.equals(candidate.account.type)
&& activeOp.authority.equals(candidate.authority)
@@ -2027,8 +2033,13 @@
Log.v(TAG, " numActiveInit=" + numInit + ", numActiveRegular=" + numRegular);
Log.v(TAG, " longRunning: " + longRunning);
Log.v(TAG, " conflict: " + conflict);
+ Log.v(TAG, " oldestNonExpeditedRegular: " + oldestNonExpeditedRegular);
}
+ final boolean roomAvailable = candidateIsInitialization
+ ? numInit < MAX_SIMULTANEOUS_INITIALIZATION_SYNCS
+ : numRegular < MAX_SIMULTANEOUS_REGULAR_SYNCS;
+
if (conflict != null) {
if (candidateIsInitialization && !conflict.mSyncOperation.isInitialization()
&& numInit < MAX_SIMULTANEOUS_INITIALIZATION_SYNCS) {
@@ -2048,23 +2059,32 @@
} else {
continue;
}
- } else {
- final boolean roomAvailable = candidateIsInitialization
- ? numInit < MAX_SIMULTANEOUS_INITIALIZATION_SYNCS
- : numRegular < MAX_SIMULTANEOUS_REGULAR_SYNCS;
- if (roomAvailable) {
- // dispatch candidate
- } else if (longRunning != null
- && (candidateIsInitialization
- == longRunning.mSyncOperation.isInitialization())) {
- toReschedule = longRunning;
- if (Log.isLoggable(TAG, Log.VERBOSE)) {
- Log.v(TAG, "canceling and rescheduling sync since it ran roo long, "
- + longRunning);
- }
- } else {
- continue;
+ } else if (roomAvailable) {
+ // dispatch candidate
+ } else if (candidate.isExpedited() && oldestNonExpeditedRegular != null
+ && !candidateIsInitialization) {
+ // We found an active, non-expedited regular sync. We also know that the
+ // candidate doesn't conflict with this active sync since conflict
+ // is null. Reschedule the active sync and start the candidate.
+ toReschedule = oldestNonExpeditedRegular;
+ if (Log.isLoggable(TAG, Log.VERBOSE)) {
+ Log.v(TAG, "canceling and rescheduling sync since an expedited is ready to run, "
+ + oldestNonExpeditedRegular);
}
+ } else if (longRunning != null
+ && (candidateIsInitialization
+ == longRunning.mSyncOperation.isInitialization())) {
+ // We found an active, long-running sync. Reschedule the active
+ // sync and start the candidate.
+ toReschedule = longRunning;
+ if (Log.isLoggable(TAG, Log.VERBOSE)) {
+ Log.v(TAG, "canceling and rescheduling sync since it ran roo long, "
+ + longRunning);
+ }
+ } else {
+ // we were unable to find or make space to run this candidate, go on to
+ // the next one
+ continue;
}
if (toReschedule != null) {
@@ -2516,7 +2536,7 @@
return mSyncStorageEngine.insertStartSyncEvent(
syncOperation.account, syncOperation.userId, syncOperation.authority,
- now, source);
+ now, source, syncOperation.isInitialization());
}
public void stopSyncEvent(long rowId, SyncOperation syncOperation, String resultMessage,
diff --git a/core/java/android/content/SyncOperation.java b/core/java/android/content/SyncOperation.java
index 4e86ef8..9fcc22d 100644
--- a/core/java/android/content/SyncOperation.java
+++ b/core/java/android/content/SyncOperation.java
@@ -116,6 +116,10 @@
return extras.getBoolean(ContentResolver.SYNC_EXTRAS_INITIALIZE, false);
}
+ public boolean isExpedited() {
+ return extras.getBoolean(ContentResolver.SYNC_EXTRAS_EXPEDITED, false);
+ }
+
public boolean ignoreBackoff() {
return extras.getBoolean(ContentResolver.SYNC_EXTRAS_IGNORE_BACKOFF, false);
}
diff --git a/core/java/android/content/SyncStorageEngine.java b/core/java/android/content/SyncStorageEngine.java
index d821918..6c7e940 100644
--- a/core/java/android/content/SyncStorageEngine.java
+++ b/core/java/android/content/SyncStorageEngine.java
@@ -221,6 +221,7 @@
long upstreamActivity;
long downstreamActivity;
String mesg;
+ boolean initialization;
}
public static class DayStats {
@@ -1012,7 +1013,7 @@
* Note that sync has started for the given account and authority.
*/
public long insertStartSyncEvent(Account accountName, int userId, String authorityName,
- long now, int source) {
+ long now, int source, boolean initialization) {
long id;
synchronized (mAuthorities) {
if (Log.isLoggable(TAG, Log.VERBOSE)) {
@@ -1025,6 +1026,7 @@
return -1;
}
SyncHistoryItem item = new SyncHistoryItem();
+ item.initialization = initialization;
item.authorityId = authority.ident;
item.historyId = mNextHistoryId++;
if (mNextHistoryId < 0) mNextHistoryId = 0;
diff --git a/core/java/android/content/ICancellationSignal.aidl b/core/java/android/content/pm/ContainerEncryptionParams.aidl
similarity index 70%
copy from core/java/android/content/ICancellationSignal.aidl
copy to core/java/android/content/pm/ContainerEncryptionParams.aidl
index cf1c5d3..c13d946 100644
--- a/core/java/android/content/ICancellationSignal.aidl
+++ b/core/java/android/content/pm/ContainerEncryptionParams.aidl
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 The Android Open Source Project
+ * Copyright 2012, 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
+ * 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,
@@ -14,11 +14,6 @@
* limitations under the License.
*/
-package android.content;
+package android.content.pm;
-/**
- * @hide
- */
-interface ICancellationSignal {
- oneway void cancel();
-}
+parcelable ContainerEncryptionParams;
diff --git a/core/java/android/content/pm/ContainerEncryptionParams.java b/core/java/android/content/pm/ContainerEncryptionParams.java
new file mode 100644
index 0000000..5b1440d
--- /dev/null
+++ b/core/java/android/content/pm/ContainerEncryptionParams.java
@@ -0,0 +1,378 @@
+/*
+ * Copyright (C) 2012 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.content.pm;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.text.TextUtils;
+import android.util.Slog;
+
+import java.security.InvalidAlgorithmParameterException;
+import java.security.spec.AlgorithmParameterSpec;
+import java.util.Arrays;
+
+import javax.crypto.SecretKey;
+import javax.crypto.spec.IvParameterSpec;
+
+/**
+ * Represents encryption parameters used to read a container.
+ *
+ * @hide
+ */
+public class ContainerEncryptionParams implements Parcelable {
+ protected static final String TAG = "ContainerEncryptionParams";
+
+ /** What we print out first when toString() is called. */
+ private static final String TO_STRING_PREFIX = "ContainerEncryptionParams{";
+
+ /**
+ * Parameter type for parceling that indicates the next parameters are
+ * IvParameters.
+ */
+ private static final int ENC_PARAMS_IV_PARAMETERS = 1;
+
+ /** Parameter type for paceling that indicates there are no MAC parameters. */
+ private static final int MAC_PARAMS_NONE = 1;
+
+ /** The encryption algorithm used. */
+ private final String mEncryptionAlgorithm;
+
+ /** The parameter spec to be used for encryption. */
+ private final IvParameterSpec mEncryptionSpec;
+
+ /** Secret key to be used for decryption. */
+ private final SecretKey mEncryptionKey;
+
+ /** Algorithm name for the MAC to be used. */
+ private final String mMacAlgorithm;
+
+ /** The parameter spec to be used for the MAC tag authentication. */
+ private final AlgorithmParameterSpec mMacSpec;
+
+ /** Secret key to be used for MAC tag authentication. */
+ private final SecretKey mMacKey;
+
+ /** MAC tag authenticating the data in the container. */
+ private final byte[] mMacTag;
+
+ /** Offset into file where authenticated (e.g., MAC protected) data begins. */
+ private final int mAuthenticatedDataStart;
+
+ /** Offset into file where encrypted data begins. */
+ private final int mEncryptedDataStart;
+
+ /**
+ * Offset into file for the end of encrypted data (and, by extension,
+ * authenticated data) in file.
+ */
+ private final int mDataEnd;
+
+ public ContainerEncryptionParams(String encryptionAlgorithm,
+ AlgorithmParameterSpec encryptionSpec, SecretKey encryptionKey)
+ throws InvalidAlgorithmParameterException {
+ this(encryptionAlgorithm, encryptionSpec, encryptionKey, null, null, null, null, -1, -1,
+ -1);
+ }
+
+ /**
+ * Creates container encryption specifications for installing from encrypted
+ * containers.
+ *
+ * @param encryptionAlgorithm encryption algorithm to use; format matches
+ * JCE
+ * @param encryptionSpec algorithm parameter specification
+ * @param encryptionKey key used for decryption
+ * @param macAlgorithm MAC algorithm to use; format matches JCE
+ * @param macSpec algorithm parameters specification, may be {@code null}
+ * @param macKey key used for authentication (i.e., for the MAC tag)
+ * @param authenticatedDataStart offset of start of authenticated data in
+ * stream
+ * @param encryptedDataStart offset of start of encrypted data in stream
+ * @param dataEnd offset of the end of both the authenticated and encrypted
+ * data
+ * @throws InvalidAlgorithmParameterException
+ */
+ public ContainerEncryptionParams(String encryptionAlgorithm,
+ AlgorithmParameterSpec encryptionSpec, SecretKey encryptionKey, String macAlgorithm,
+ AlgorithmParameterSpec macSpec, SecretKey macKey, byte[] macTag,
+ int authenticatedDataStart, int encryptedDataStart, int dataEnd)
+ throws InvalidAlgorithmParameterException {
+ if (TextUtils.isEmpty(encryptionAlgorithm)) {
+ throw new NullPointerException("algorithm == null");
+ } else if (encryptionSpec == null) {
+ throw new NullPointerException("encryptionSpec == null");
+ } else if (encryptionKey == null) {
+ throw new NullPointerException("encryptionKey == null");
+ }
+
+ if (!TextUtils.isEmpty(macAlgorithm)) {
+ if (macKey == null) {
+ throw new NullPointerException("macKey == null");
+ }
+ }
+
+ if (!(encryptionSpec instanceof IvParameterSpec)) {
+ throw new InvalidAlgorithmParameterException(
+ "Unknown parameter spec class; must be IvParameters");
+ }
+
+ mEncryptionAlgorithm = encryptionAlgorithm;
+ mEncryptionSpec = (IvParameterSpec) encryptionSpec;
+ mEncryptionKey = encryptionKey;
+
+ mMacAlgorithm = macAlgorithm;
+ mMacSpec = macSpec;
+ mMacKey = macKey;
+ mMacTag = macTag;
+
+ mAuthenticatedDataStart = authenticatedDataStart;
+ mEncryptedDataStart = encryptedDataStart;
+ mDataEnd = dataEnd;
+ }
+
+ public String getEncryptionAlgorithm() {
+ return mEncryptionAlgorithm;
+ }
+
+ public AlgorithmParameterSpec getEncryptionSpec() {
+ return mEncryptionSpec;
+ }
+
+ public SecretKey getEncryptionKey() {
+ return mEncryptionKey;
+ }
+
+ public String getMacAlgorithm() {
+ return mMacAlgorithm;
+ }
+
+ public AlgorithmParameterSpec getMacSpec() {
+ return mMacSpec;
+ }
+
+ public SecretKey getMacKey() {
+ return mMacKey;
+ }
+
+ public byte[] getMacTag() {
+ return mMacTag;
+ }
+
+ public int getAuthenticatedDataStart() {
+ return mAuthenticatedDataStart;
+ }
+
+ public int getEncryptedDataStart() {
+ return mEncryptedDataStart;
+ }
+
+ public int getDataEnd() {
+ return mDataEnd;
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+
+ if (!(o instanceof ContainerEncryptionParams)) {
+ return false;
+ }
+
+ final ContainerEncryptionParams other = (ContainerEncryptionParams) o;
+
+ // Primitive comparison
+ if ((mAuthenticatedDataStart != other.mAuthenticatedDataStart)
+ || (mEncryptedDataStart != other.mEncryptedDataStart)
+ || (mDataEnd != other.mDataEnd)) {
+ return false;
+ }
+
+ // String comparison
+ if (!mEncryptionAlgorithm.equals(other.mEncryptionAlgorithm)
+ || !mMacAlgorithm.equals(other.mMacAlgorithm)) {
+ return false;
+ }
+
+ // Object comparison
+ if (!isSecretKeyEqual(mEncryptionKey, other.mEncryptionKey)
+ || !isSecretKeyEqual(mMacKey, other.mMacKey)) {
+ return false;
+ }
+
+ if (!Arrays.equals(mEncryptionSpec.getIV(), other.mEncryptionSpec.getIV())
+ || !Arrays.equals(mMacTag, other.mMacTag) || (mMacSpec != other.mMacSpec)) {
+ return false;
+ }
+
+ return true;
+ }
+
+ private static final boolean isSecretKeyEqual(SecretKey key1, SecretKey key2) {
+ final String keyFormat = key1.getFormat();
+ final String otherKeyFormat = key2.getFormat();
+
+ if (keyFormat == null) {
+ if (keyFormat != otherKeyFormat) {
+ return false;
+ }
+
+ if (key1.getEncoded() != key2.getEncoded()) {
+ return false;
+ }
+ } else {
+ if (!keyFormat.equals(key2.getFormat())) {
+ return false;
+ }
+
+ if (!Arrays.equals(key1.getEncoded(), key2.getEncoded())) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ int hash = 3;
+
+ hash += 5 * mEncryptionAlgorithm.hashCode();
+ hash += 7 * Arrays.hashCode(mEncryptionSpec.getIV());
+ hash += 11 * mEncryptionKey.hashCode();
+ hash += 13 * mMacAlgorithm.hashCode();
+ hash += 17 * mMacKey.hashCode();
+ hash += 19 * Arrays.hashCode(mMacTag);
+ hash += 23 * mAuthenticatedDataStart;
+ hash += 29 * mEncryptedDataStart;
+ hash += 31 * mDataEnd;
+
+ return hash;
+ }
+
+ @Override
+ public String toString() {
+ final StringBuilder sb = new StringBuilder(TO_STRING_PREFIX);
+
+ sb.append("mEncryptionAlgorithm=\"");
+ sb.append(mEncryptionAlgorithm);
+ sb.append("\",");
+ sb.append("mEncryptionSpec=");
+ sb.append(mEncryptionSpec.toString());
+ sb.append("mEncryptionKey=");
+ sb.append(mEncryptionKey.toString());
+
+ sb.append("mMacAlgorithm=\"");
+ sb.append(mMacAlgorithm);
+ sb.append("\",");
+ sb.append("mMacSpec=");
+ sb.append(mMacSpec.toString());
+ sb.append("mMacKey=");
+ sb.append(mMacKey.toString());
+
+ sb.append(",mAuthenticatedDataStart=");
+ sb.append(mAuthenticatedDataStart);
+ sb.append(",mEncryptedDataStart=");
+ sb.append(mEncryptedDataStart);
+ sb.append(",mDataEnd=");
+ sb.append(mDataEnd);
+ sb.append('}');
+
+ return sb.toString();
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeString(mEncryptionAlgorithm);
+ dest.writeInt(ENC_PARAMS_IV_PARAMETERS);
+ dest.writeByteArray(mEncryptionSpec.getIV());
+ dest.writeSerializable(mEncryptionKey);
+
+ dest.writeString(mMacAlgorithm);
+ dest.writeInt(MAC_PARAMS_NONE);
+ dest.writeByteArray(new byte[0]);
+ dest.writeSerializable(mMacKey);
+
+ dest.writeByteArray(mMacTag);
+
+ dest.writeInt(mAuthenticatedDataStart);
+ dest.writeInt(mEncryptedDataStart);
+ dest.writeInt(mDataEnd);
+ }
+
+ private ContainerEncryptionParams(Parcel source) throws InvalidAlgorithmParameterException {
+ mEncryptionAlgorithm = source.readString();
+ final int encParamType = source.readInt();
+ final byte[] encParamsEncoded = source.createByteArray();
+ mEncryptionKey = (SecretKey) source.readSerializable();
+
+ mMacAlgorithm = source.readString();
+ final int macParamType = source.readInt();
+ source.createByteArray(); // byte[] macParamsEncoded
+ mMacKey = (SecretKey) source.readSerializable();
+
+ mMacTag = source.createByteArray();
+
+ mAuthenticatedDataStart = source.readInt();
+ mEncryptedDataStart = source.readInt();
+ mDataEnd = source.readInt();
+
+ switch (encParamType) {
+ case ENC_PARAMS_IV_PARAMETERS:
+ mEncryptionSpec = new IvParameterSpec(encParamsEncoded);
+ break;
+ default:
+ throw new InvalidAlgorithmParameterException("Unknown parameter type "
+ + encParamType);
+ }
+
+ switch (macParamType) {
+ case MAC_PARAMS_NONE:
+ mMacSpec = null;
+ break;
+ default:
+ throw new InvalidAlgorithmParameterException("Unknown parameter type "
+ + macParamType);
+ }
+
+ if (mEncryptionKey == null) {
+ throw new NullPointerException("encryptionKey == null");
+ }
+ }
+
+ public static final Parcelable.Creator<ContainerEncryptionParams> CREATOR =
+ new Parcelable.Creator<ContainerEncryptionParams>() {
+ public ContainerEncryptionParams createFromParcel(Parcel source) {
+ try {
+ return new ContainerEncryptionParams(source);
+ } catch (InvalidAlgorithmParameterException e) {
+ Slog.e(TAG, "Invalid algorithm parameters specified", e);
+ return null;
+ }
+ }
+
+ public ContainerEncryptionParams[] newArray(int size) {
+ return new ContainerEncryptionParams[size];
+ }
+ };
+}
\ No newline at end of file
diff --git a/core/java/android/content/pm/IPackageManager.aidl b/core/java/android/content/pm/IPackageManager.aidl
index 9b8454a..70c0c48 100644
--- a/core/java/android/content/pm/IPackageManager.aidl
+++ b/core/java/android/content/pm/IPackageManager.aidl
@@ -22,6 +22,7 @@
import android.content.IntentFilter;
import android.content.pm.ActivityInfo;
import android.content.pm.ApplicationInfo;
+import android.content.pm.ContainerEncryptionParams;
import android.content.pm.FeatureInfo;
import android.content.pm.IPackageInstallObserver;
import android.content.pm.IPackageDeleteObserver;
@@ -362,7 +363,7 @@
void installPackageWithVerification(in Uri packageURI, in IPackageInstallObserver observer,
int flags, in String installerPackageName, in Uri verificationURI,
- in ManifestDigest manifestDigest);
+ in ManifestDigest manifestDigest, in ContainerEncryptionParams encryptionParams);
void verifyPendingInstall(int id, int verificationCode);
diff --git a/core/java/android/content/pm/LimitedLengthInputStream.java b/core/java/android/content/pm/LimitedLengthInputStream.java
new file mode 100644
index 0000000..25a490f
--- /dev/null
+++ b/core/java/android/content/pm/LimitedLengthInputStream.java
@@ -0,0 +1,82 @@
+package android.content.pm;
+
+import java.io.FilterInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+/**
+ * A class that limits the amount of data that is read from an InputStream. When
+ * the specified length is reached, the stream returns an EOF even if the
+ * underlying stream still has more data.
+ *
+ * @hide
+ */
+public class LimitedLengthInputStream extends FilterInputStream {
+ /**
+ * The end of the stream where we don't want to allow more data to be read.
+ */
+ private final int mEnd;
+
+ /**
+ * Current offset in the stream.
+ */
+ private int mOffset;
+
+ /**
+ * @param in underlying stream to wrap
+ * @param offset offset into stream where data starts
+ * @param length length of data at offset
+ * @throws IOException if an error occured with the underlying stream
+ */
+ public LimitedLengthInputStream(InputStream in, int offset, int length) throws IOException {
+ super(in);
+
+ if (in == null) {
+ throw new IOException("in == null");
+ }
+
+ if (offset < 0) {
+ throw new IOException("offset == " + offset);
+ }
+
+ if (length < 0) {
+ throw new IOException("length must be non-negative; is " + length);
+ }
+
+ mEnd = offset + length;
+
+ skip(offset);
+ mOffset = offset;
+ }
+
+ @Override
+ public synchronized int read() throws IOException {
+ if (mOffset >= mEnd) {
+ return -1;
+ }
+
+ mOffset++;
+ return super.read();
+ }
+
+ @Override
+ public int read(byte[] buffer, int offset, int byteCount) throws IOException {
+ if (mOffset >= mEnd) {
+ return -1;
+ }
+
+ if (mOffset + byteCount > mEnd) {
+ byteCount = mEnd - mOffset;
+ }
+
+ final int numRead = super.read(buffer, offset, byteCount);
+ mOffset += numRead;
+
+ return numRead;
+ }
+
+ @Override
+ public int read(byte[] buffer) throws IOException {
+ return read(buffer, 0, buffer.length);
+ }
+}
diff --git a/core/java/android/content/pm/MacAuthenticatedInputStream.java b/core/java/android/content/pm/MacAuthenticatedInputStream.java
new file mode 100644
index 0000000..11f4b94
--- /dev/null
+++ b/core/java/android/content/pm/MacAuthenticatedInputStream.java
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2012 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.content.pm;
+
+import java.io.FilterInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+import javax.crypto.Mac;
+
+/**
+ * An input stream filter that applies a MAC to the data passing through it. At
+ * the end of the data that should be authenticated, the tag can be calculated.
+ * After that, the stream should not be used.
+ *
+ * @hide
+ */
+public class MacAuthenticatedInputStream extends FilterInputStream {
+ private final Mac mMac;
+
+ public MacAuthenticatedInputStream(InputStream in, Mac mac) {
+ super(in);
+
+ mMac = mac;
+ }
+
+ public boolean isTagEqual(byte[] tag) {
+ final byte[] actualTag = mMac.doFinal();
+
+ if (tag == null || actualTag == null || tag.length != actualTag.length) {
+ return false;
+ }
+
+ /*
+ * Attempt to prevent timing attacks by doing the same amount of work
+ * whether the first byte matches or not. Do not change this to a loop
+ * that exits early when a byte does not match.
+ */
+ int value = 0;
+ for (int i = 0; i < tag.length; i++) {
+ value |= tag[i] ^ actualTag[i];
+ }
+
+ return value == 0;
+ }
+
+ @Override
+ public int read() throws IOException {
+ final int b = super.read();
+ if (b >= 0) {
+ mMac.update((byte) b);
+ }
+ return b;
+ }
+
+ @Override
+ public int read(byte[] buffer, int offset, int count) throws IOException {
+ int numRead = super.read(buffer, offset, count);
+ if (numRead > 0) {
+ mMac.update(buffer, offset, numRead);
+ }
+ return numRead;
+ }
+}
diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java
index c3ce1cf..a48924e 100644
--- a/core/java/android/content/pm/PackageManager.java
+++ b/core/java/android/content/pm/PackageManager.java
@@ -28,7 +28,6 @@
import android.content.res.XmlResourceParser;
import android.graphics.drawable.Drawable;
import android.net.Uri;
-import android.os.Build;
import android.os.Environment;
import android.util.AndroidException;
import android.util.DisplayMetrics;
@@ -2199,12 +2198,19 @@
* is performing the installation. This identifies which market
* the package came from.
* @param verificationURI The location of the supplementary verification
- * file. This can be a 'file:' or a 'content:' URI.
+ * file. This can be a 'file:' or a 'content:' URI. May be
+ * {@code null}.
+ * @param manifestDigest an object that holds the digest of the package
+ * which can be used to verify ownership. May be {@code null}.
+ * @param encryptionParams if the package to be installed is encrypted,
+ * these parameters describing the encryption and authentication
+ * used. May be {@code null}.
* @hide
*/
public abstract void installPackageWithVerification(Uri packageURI,
IPackageInstallObserver observer, int flags, String installerPackageName,
- Uri verificationURI, ManifestDigest manifestDigest);
+ Uri verificationURI, ManifestDigest manifestDigest,
+ ContainerEncryptionParams encryptionParams);
/**
* Allows a package listening to the
diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java
index 98b40eb..ad52e13 100644
--- a/core/java/android/content/pm/PackageParser.java
+++ b/core/java/android/content/pm/PackageParser.java
@@ -1458,7 +1458,7 @@
com.android.internal.R.styleable.AndroidManifestPermissionGroup_permissionGroupFlags, 0);
perm.info.priority = sa.getInt(
com.android.internal.R.styleable.AndroidManifestPermissionGroup_priority, 0);
- if (perm.info.priority > 0 && (flags&PARSE_IS_SYSTEM) != 0) {
+ if (perm.info.priority > 0 && (flags&PARSE_IS_SYSTEM) == 0) {
perm.info.priority = 0;
}
diff --git a/core/java/android/database/DatabaseUtils.java b/core/java/android/database/DatabaseUtils.java
index 40a54cf..a6af5c2 100644
--- a/core/java/android/database/DatabaseUtils.java
+++ b/core/java/android/database/DatabaseUtils.java
@@ -21,7 +21,6 @@
import android.content.ContentValues;
import android.content.Context;
import android.content.OperationApplicationException;
-import android.content.OperationCanceledException;
import android.database.sqlite.SQLiteAbortException;
import android.database.sqlite.SQLiteConstraintException;
import android.database.sqlite.SQLiteDatabase;
@@ -31,6 +30,7 @@
import android.database.sqlite.SQLiteFullException;
import android.database.sqlite.SQLiteProgram;
import android.database.sqlite.SQLiteStatement;
+import android.os.OperationCanceledException;
import android.os.Parcel;
import android.os.ParcelFileDescriptor;
import android.text.TextUtils;
diff --git a/core/java/android/database/sqlite/SQLiteConnection.java b/core/java/android/database/sqlite/SQLiteConnection.java
index acdc488..6f7c1f3 100644
--- a/core/java/android/database/sqlite/SQLiteConnection.java
+++ b/core/java/android/database/sqlite/SQLiteConnection.java
@@ -19,12 +19,12 @@
import dalvik.system.BlockGuard;
import dalvik.system.CloseGuard;
-import android.content.CancellationSignal;
-import android.content.OperationCanceledException;
import android.database.Cursor;
import android.database.CursorWindow;
import android.database.DatabaseUtils;
import android.database.sqlite.SQLiteDebug.DbStats;
+import android.os.CancellationSignal;
+import android.os.OperationCanceledException;
import android.os.ParcelFileDescriptor;
import android.util.Log;
import android.util.LruCache;
diff --git a/core/java/android/database/sqlite/SQLiteConnectionPool.java b/core/java/android/database/sqlite/SQLiteConnectionPool.java
index a175662..3a1714c 100644
--- a/core/java/android/database/sqlite/SQLiteConnectionPool.java
+++ b/core/java/android/database/sqlite/SQLiteConnectionPool.java
@@ -18,9 +18,9 @@
import dalvik.system.CloseGuard;
-import android.content.CancellationSignal;
-import android.content.OperationCanceledException;
import android.database.sqlite.SQLiteDebug.DbStats;
+import android.os.CancellationSignal;
+import android.os.OperationCanceledException;
import android.os.SystemClock;
import android.util.Log;
import android.util.PrefixPrinter;
diff --git a/core/java/android/database/sqlite/SQLiteDatabase.java b/core/java/android/database/sqlite/SQLiteDatabase.java
index 7bd0c8d..e2d44f2 100644
--- a/core/java/android/database/sqlite/SQLiteDatabase.java
+++ b/core/java/android/database/sqlite/SQLiteDatabase.java
@@ -16,16 +16,16 @@
package android.database.sqlite;
-import android.content.CancellationSignal;
import android.content.ContentValues;
-import android.content.OperationCanceledException;
import android.database.Cursor;
import android.database.DatabaseErrorHandler;
import android.database.DatabaseUtils;
import android.database.DefaultDatabaseErrorHandler;
import android.database.SQLException;
import android.database.sqlite.SQLiteDebug.DbStats;
+import android.os.CancellationSignal;
import android.os.Looper;
+import android.os.OperationCanceledException;
import android.text.TextUtils;
import android.util.EventLog;
import android.util.Log;
diff --git a/core/java/android/database/sqlite/SQLiteDirectCursorDriver.java b/core/java/android/database/sqlite/SQLiteDirectCursorDriver.java
index 294edc4..797430a 100644
--- a/core/java/android/database/sqlite/SQLiteDirectCursorDriver.java
+++ b/core/java/android/database/sqlite/SQLiteDirectCursorDriver.java
@@ -16,9 +16,9 @@
package android.database.sqlite;
-import android.content.CancellationSignal;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
+import android.os.CancellationSignal;
/**
* A cursor driver that uses the given query directly.
diff --git a/core/java/android/database/sqlite/SQLiteProgram.java b/core/java/android/database/sqlite/SQLiteProgram.java
index e9b06c6..26e8c31 100644
--- a/core/java/android/database/sqlite/SQLiteProgram.java
+++ b/core/java/android/database/sqlite/SQLiteProgram.java
@@ -16,8 +16,8 @@
package android.database.sqlite;
-import android.content.CancellationSignal;
import android.database.DatabaseUtils;
+import android.os.CancellationSignal;
import java.util.Arrays;
diff --git a/core/java/android/database/sqlite/SQLiteQuery.java b/core/java/android/database/sqlite/SQLiteQuery.java
index 30e77b5..62bcc20 100644
--- a/core/java/android/database/sqlite/SQLiteQuery.java
+++ b/core/java/android/database/sqlite/SQLiteQuery.java
@@ -16,9 +16,9 @@
package android.database.sqlite;
-import android.content.CancellationSignal;
-import android.content.OperationCanceledException;
import android.database.CursorWindow;
+import android.os.CancellationSignal;
+import android.os.OperationCanceledException;
import android.util.Log;
/**
diff --git a/core/java/android/database/sqlite/SQLiteQueryBuilder.java b/core/java/android/database/sqlite/SQLiteQueryBuilder.java
index 6f84b5e..91884ab 100644
--- a/core/java/android/database/sqlite/SQLiteQueryBuilder.java
+++ b/core/java/android/database/sqlite/SQLiteQueryBuilder.java
@@ -16,10 +16,10 @@
package android.database.sqlite;
-import android.content.CancellationSignal;
-import android.content.OperationCanceledException;
import android.database.Cursor;
import android.database.DatabaseUtils;
+import android.os.CancellationSignal;
+import android.os.OperationCanceledException;
import android.provider.BaseColumns;
import android.text.TextUtils;
import android.util.Log;
diff --git a/core/java/android/database/sqlite/SQLiteSession.java b/core/java/android/database/sqlite/SQLiteSession.java
index 9410243..beb5b3a 100644
--- a/core/java/android/database/sqlite/SQLiteSession.java
+++ b/core/java/android/database/sqlite/SQLiteSession.java
@@ -16,10 +16,10 @@
package android.database.sqlite;
-import android.content.CancellationSignal;
-import android.content.OperationCanceledException;
import android.database.CursorWindow;
import android.database.DatabaseUtils;
+import android.os.CancellationSignal;
+import android.os.OperationCanceledException;
import android.os.ParcelFileDescriptor;
/**
diff --git a/core/java/android/net/EthernetDataTracker.java b/core/java/android/net/EthernetDataTracker.java
index fb09ba5..28bd289 100644
--- a/core/java/android/net/EthernetDataTracker.java
+++ b/core/java/android/net/EthernetDataTracker.java
@@ -59,6 +59,8 @@
private static String sIfaceMatch = "";
private static String mIface = "";
+ private INetworkManagementService mNMService;
+
private static class InterfaceObserver extends INetworkManagementEventObserver.Stub {
private EthernetDataTracker mTracker;
@@ -117,6 +119,13 @@
mIface = iface;
}
+ // we don't get link status indications unless the iface is up - bring it up
+ try {
+ mNMService.setInterfaceUp(iface);
+ } catch (Exception e) {
+ Log.e(TAG, "Error upping interface " + iface + ": " + e);
+ }
+
mNetworkInfo.setIsAvailable(true);
Message msg = mCsHandler.obtainMessage(EVENT_CONFIGURATION_CHANGED, mNetworkInfo);
msg.sendToTarget();
@@ -199,7 +208,7 @@
// register for notifications from NetworkManagement Service
IBinder b = ServiceManager.getService(Context.NETWORKMANAGEMENT_SERVICE);
- INetworkManagementService service = INetworkManagementService.Stub.asInterface(b);
+ mNMService = INetworkManagementService.Stub.asInterface(b);
mInterfaceObserver = new InterfaceObserver(this);
@@ -208,12 +217,12 @@
sIfaceMatch = context.getResources().getString(
com.android.internal.R.string.config_ethernet_iface_regex);
try {
- final String[] ifaces = service.listInterfaces();
+ final String[] ifaces = mNMService.listInterfaces();
for (String iface : ifaces) {
if (iface.matches(sIfaceMatch)) {
mIface = iface;
- service.setInterfaceUp(iface);
- InterfaceConfiguration config = service.getInterfaceConfig(iface);
+ mNMService.setInterfaceUp(iface);
+ InterfaceConfiguration config = mNMService.getInterfaceConfig(iface);
mLinkUp = config.isActive();
if (config != null && mHwAddr == null) {
mHwAddr = config.getHardwareAddress();
@@ -230,7 +239,7 @@
}
try {
- service.registerObserver(mInterfaceObserver);
+ mNMService.registerObserver(mInterfaceObserver);
} catch (RemoteException e) {
Log.e(TAG, "Could not register InterfaceObserver " + e);
}
diff --git a/core/java/android/content/CancellationSignal.java b/core/java/android/os/CancellationSignal.java
similarity index 98%
rename from core/java/android/content/CancellationSignal.java
rename to core/java/android/os/CancellationSignal.java
index dcaeeb7..dcba9b7 100644
--- a/core/java/android/content/CancellationSignal.java
+++ b/core/java/android/os/CancellationSignal.java
@@ -14,9 +14,10 @@
* limitations under the License.
*/
-package android.content;
+package android.os;
-import android.os.RemoteException;
+import android.os.ICancellationSignal;
+import android.os.ICancellationSignal.Stub;
/**
* Provides the ability to cancel an operation in progress.
diff --git a/core/java/android/content/ICancellationSignal.aidl b/core/java/android/os/ICancellationSignal.aidl
similarity index 96%
rename from core/java/android/content/ICancellationSignal.aidl
rename to core/java/android/os/ICancellationSignal.aidl
index cf1c5d3..d92464c 100644
--- a/core/java/android/content/ICancellationSignal.aidl
+++ b/core/java/android/os/ICancellationSignal.aidl
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package android.content;
+package android.os;
/**
* @hide
diff --git a/core/java/android/os/Message.java b/core/java/android/os/Message.java
index 4aa7fe2..0abc149 100644
--- a/core/java/android/os/Message.java
+++ b/core/java/android/os/Message.java
@@ -97,8 +97,8 @@
private static Message sPool;
private static int sPoolSize = 0;
- private static final int MAX_POOL_SIZE = 10;
-
+ private static final int MAX_POOL_SIZE = 50;
+
/**
* Return a new Message instance from the global pool. Allows us to
* avoid allocating new objects in many cases.
diff --git a/core/java/android/content/OperationCanceledException.java b/core/java/android/os/OperationCanceledException.java
similarity index 97%
rename from core/java/android/content/OperationCanceledException.java
rename to core/java/android/os/OperationCanceledException.java
index d783a07..b0cd663 100644
--- a/core/java/android/content/OperationCanceledException.java
+++ b/core/java/android/os/OperationCanceledException.java
@@ -14,7 +14,8 @@
* limitations under the License.
*/
-package android.content;
+package android.os;
+
/**
* An exception type that is thrown when an operation in progress is canceled.
diff --git a/core/java/android/os/Trace.java b/core/java/android/os/Trace.java
index 05acd63..ac9ee26 100644
--- a/core/java/android/os/Trace.java
+++ b/core/java/android/os/Trace.java
@@ -37,6 +37,7 @@
public static final long TRACE_TAG_WINDOW_MANAGER = 1L << 5;
public static final long TRACE_TAG_ACTIVITY_MANAGER = 1L << 6;
public static final long TRACE_TAG_SYNC_MANAGER = 1L << 7;
+ public static final long TRACE_TAG_AUDIO = 1L << 8;
private static final long sEnabledTags = nativeGetEnabledTags();
diff --git a/core/java/android/preference/MultiCheckPreference.java b/core/java/android/preference/MultiCheckPreference.java
new file mode 100644
index 0000000..735f66ae
--- /dev/null
+++ b/core/java/android/preference/MultiCheckPreference.java
@@ -0,0 +1,313 @@
+/*
+ * Copyright (C) 2012 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.preference;
+
+import java.util.Arrays;
+
+import android.app.AlertDialog.Builder;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.res.TypedArray;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.util.AttributeSet;
+
+/**
+ * @hide
+ * A {@link Preference} that displays a list of entries as
+ * a dialog which allow the user to toggle each individually on and off.
+ *
+ * @attr ref android.R.styleable#ListPreference_entries
+ * @attr ref android.R.styleable#ListPreference_entryValues
+ */
+public class MultiCheckPreference extends DialogPreference {
+ private CharSequence[] mEntries;
+ private String[] mEntryValues;
+ private boolean[] mSetValues;
+ private boolean[] mOrigValues;
+ private String mSummary;
+
+ public MultiCheckPreference(Context context, AttributeSet attrs) {
+ super(context, attrs);
+
+ TypedArray a = context.obtainStyledAttributes(attrs,
+ com.android.internal.R.styleable.ListPreference, 0, 0);
+ mEntries = a.getTextArray(com.android.internal.R.styleable.ListPreference_entries);
+ if (mEntries != null) {
+ setEntries(mEntries);
+ }
+ setEntryValuesCS(a.getTextArray(
+ com.android.internal.R.styleable.ListPreference_entryValues));
+ a.recycle();
+
+ /* Retrieve the Preference summary attribute since it's private
+ * in the Preference class.
+ */
+ a = context.obtainStyledAttributes(attrs,
+ com.android.internal.R.styleable.Preference, 0, 0);
+ mSummary = a.getString(com.android.internal.R.styleable.Preference_summary);
+ a.recycle();
+ }
+
+ public MultiCheckPreference(Context context) {
+ this(context, null);
+ }
+
+ /**
+ * Sets the human-readable entries to be shown in the list. This will be
+ * shown in subsequent dialogs.
+ * <p>
+ * Each entry must have a corresponding index in
+ * {@link #setEntryValues(CharSequence[])}.
+ *
+ * @param entries The entries.
+ * @see #setEntryValues(CharSequence[])
+ */
+ public void setEntries(CharSequence[] entries) {
+ mEntries = entries;
+ mSetValues = new boolean[entries.length];
+ mOrigValues = new boolean[entries.length];
+ }
+
+ /**
+ * @see #setEntries(CharSequence[])
+ * @param entriesResId The entries array as a resource.
+ */
+ public void setEntries(int entriesResId) {
+ setEntries(getContext().getResources().getTextArray(entriesResId));
+ }
+
+ /**
+ * The list of entries to be shown in the list in subsequent dialogs.
+ *
+ * @return The list as an array.
+ */
+ public CharSequence[] getEntries() {
+ return mEntries;
+ }
+
+ /**
+ * The array to find the value to save for a preference when an entry from
+ * entries is selected. If a user clicks on the second item in entries, the
+ * second item in this array will be saved to the preference.
+ *
+ * @param entryValues The array to be used as values to save for the preference.
+ */
+ public void setEntryValues(String[] entryValues) {
+ mEntryValues = entryValues;
+ Arrays.fill(mSetValues, false);
+ Arrays.fill(mOrigValues, false);
+ }
+
+ /**
+ * @see #setEntryValues(CharSequence[])
+ * @param entryValuesResId The entry values array as a resource.
+ */
+ public void setEntryValues(int entryValuesResId) {
+ setEntryValuesCS(getContext().getResources().getTextArray(entryValuesResId));
+ }
+
+ private void setEntryValuesCS(CharSequence[] values) {
+ setValues(null);
+ if (values != null) {
+ mEntryValues = new String[values.length];
+ for (int i=0; i<values.length; i++) {
+ mEntryValues[i] = values[i].toString();
+ }
+ }
+ }
+
+ /**
+ * Returns the array of values to be saved for the preference.
+ *
+ * @return The array of values.
+ */
+ public CharSequence[] getEntryValues() {
+ return mEntryValues;
+ }
+
+ /**
+ * Sets the current values.
+ */
+ public void setValues(boolean[] values) {
+ if (mSetValues != null) {
+ Arrays.fill(mSetValues, false);
+ Arrays.fill(mOrigValues, false);
+ if (values != null) {
+ System.arraycopy(values, 0, mSetValues, 0,
+ values.length < mSetValues.length ? values.length : mSetValues.length);
+ }
+ }
+ }
+
+ /**
+ * Returns the summary of this ListPreference. If the summary
+ * has a {@linkplain java.lang.String#format String formatting}
+ * marker in it (i.e. "%s" or "%1$s"), then the current entry
+ * value will be substituted in its place.
+ *
+ * @return the summary with appropriate string substitution
+ */
+ @Override
+ public CharSequence getSummary() {
+ if (mSummary == null) {
+ return super.getSummary();
+ } else {
+ return mSummary;
+ }
+ }
+
+ /**
+ * Sets the summary for this Preference with a CharSequence.
+ * If the summary has a
+ * {@linkplain java.lang.String#format String formatting}
+ * marker in it (i.e. "%s" or "%1$s"), then the current entry
+ * value will be substituted in its place when it's retrieved.
+ *
+ * @param summary The summary for the preference.
+ */
+ @Override
+ public void setSummary(CharSequence summary) {
+ super.setSummary(summary);
+ if (summary == null && mSummary != null) {
+ mSummary = null;
+ } else if (summary != null && !summary.equals(mSummary)) {
+ mSummary = summary.toString();
+ }
+ }
+
+ /**
+ * Returns the currently selected values.
+ */
+ public boolean[] getValues() {
+ return mSetValues;
+ }
+
+ /**
+ * Returns the index of the given value (in the entry values array).
+ *
+ * @param value The value whose index should be returned.
+ * @return The index of the value, or -1 if not found.
+ */
+ public int findIndexOfValue(String value) {
+ if (value != null && mEntryValues != null) {
+ for (int i = mEntryValues.length - 1; i >= 0; i--) {
+ if (mEntryValues[i].equals(value)) {
+ return i;
+ }
+ }
+ }
+ return -1;
+ }
+
+ @Override
+ protected void onPrepareDialogBuilder(Builder builder) {
+ super.onPrepareDialogBuilder(builder);
+
+ if (mEntries == null || mEntryValues == null) {
+ throw new IllegalStateException(
+ "ListPreference requires an entries array and an entryValues array.");
+ }
+
+ mOrigValues = Arrays.copyOf(mSetValues, mSetValues.length);
+ builder.setMultiChoiceItems(mEntries, mSetValues,
+ new DialogInterface.OnMultiChoiceClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which, boolean isChecked) {
+ mSetValues[which] = isChecked;
+ }
+ });
+ }
+
+ @Override
+ protected void onDialogClosed(boolean positiveResult) {
+ super.onDialogClosed(positiveResult);
+
+ if (positiveResult) {
+ if (callChangeListener(getValues())) {
+ return;
+ }
+ }
+ System.arraycopy(mOrigValues, 0, mSetValues, 0, mSetValues.length);
+ }
+
+ @Override
+ protected Object onGetDefaultValue(TypedArray a, int index) {
+ return a.getString(index);
+ }
+
+ @Override
+ protected void onSetInitialValue(boolean restoreValue, Object defaultValue) {
+ }
+
+ @Override
+ protected Parcelable onSaveInstanceState() {
+ final Parcelable superState = super.onSaveInstanceState();
+ if (isPersistent()) {
+ // No need to save instance state since it's persistent
+ return superState;
+ }
+
+ final SavedState myState = new SavedState(superState);
+ myState.values = getValues();
+ return myState;
+ }
+
+ @Override
+ protected void onRestoreInstanceState(Parcelable state) {
+ if (state == null || !state.getClass().equals(SavedState.class)) {
+ // Didn't save state for us in onSaveInstanceState
+ super.onRestoreInstanceState(state);
+ return;
+ }
+
+ SavedState myState = (SavedState) state;
+ super.onRestoreInstanceState(myState.getSuperState());
+ setValues(myState.values);
+ }
+
+ private static class SavedState extends BaseSavedState {
+ boolean[] values;
+
+ public SavedState(Parcel source) {
+ super(source);
+ values = source.createBooleanArray();
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ super.writeToParcel(dest, flags);
+ dest.writeBooleanArray(values);
+ }
+
+ public SavedState(Parcelable superState) {
+ super(superState);
+ }
+
+ public static final Parcelable.Creator<SavedState> CREATOR =
+ new Parcelable.Creator<SavedState>() {
+ public SavedState createFromParcel(Parcel in) {
+ return new SavedState(in);
+ }
+
+ public SavedState[] newArray(int size) {
+ return new SavedState[size];
+ }
+ };
+ }
+
+}
diff --git a/core/java/android/provider/CallLog.java b/core/java/android/provider/CallLog.java
index 6d14dfc..7824724 100644
--- a/core/java/android/provider/CallLog.java
+++ b/core/java/android/provider/CallLog.java
@@ -25,6 +25,7 @@
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
+import android.provider.ContactsContract.CommonDataKinds.Callable;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.ContactsContract.DataUsageFeedback;
import android.text.TextUtils;
@@ -312,10 +313,12 @@
null);
} else {
final String phoneNumber = ci.phoneNumber != null ? ci.phoneNumber : number;
- cursor = resolver.query(Phone.CONTENT_URI,
+ cursor = resolver.query(
+ Uri.withAppendedPath(Callable.CONTENT_FILTER_URI,
+ Uri.encode(phoneNumber)),
new String[] { Phone._ID },
- Phone.CONTACT_ID + " =? AND " + Phone.NUMBER + " =?",
- new String[] { String.valueOf(ci.person_id), phoneNumber},
+ Phone.CONTACT_ID + " =?",
+ new String[] { String.valueOf(ci.person_id) },
null);
}
diff --git a/core/java/android/server/BluetoothAdapterStateMachine.java b/core/java/android/server/BluetoothAdapterStateMachine.java
index f543de9..2a994b2 100644
--- a/core/java/android/server/BluetoothAdapterStateMachine.java
+++ b/core/java/android/server/BluetoothAdapterStateMachine.java
@@ -39,7 +39,7 @@
* (BluetootOn)<----------------------<-
* | ^ -------------------->- |
* | | | |
- * TURN_OFF | | SCAN_MODE_CHANGED m1 | | USER_TURN_ON
+ * USER_TURN_OFF | | SCAN_MODE_CHANGED m1 | | USER_TURN_ON
* AIRPLANE_MODE_ON | | | |
* V | | |
* (Switching) (PerProcessState)
@@ -121,8 +121,10 @@
private static final int DEVICES_DISCONNECT_TIMEOUT = 103;
// Prepare Bluetooth timeout happens
private static final int PREPARE_BLUETOOTH_TIMEOUT = 104;
- // Bluetooth Powerdown timeout happens
- private static final int POWER_DOWN_TIMEOUT = 105;
+ // Bluetooth turn off wait timeout happens
+ private static final int TURN_OFF_TIMEOUT = 105;
+ // Bluetooth device power off wait timeout happens
+ private static final int POWER_DOWN_TIMEOUT = 106;
private Context mContext;
private BluetoothService mBluetoothService;
@@ -137,13 +139,17 @@
// this is the BluetoothAdapter state that reported externally
private int mPublicState;
+ // When turning off, broadcast STATE_OFF in the last HotOff state
+ // This is because we do HotOff -> PowerOff -> HotOff for USER_TURN_OFF
+ private boolean mDelayBroadcastStateOff;
// timeout value waiting for all the devices to be disconnected
private static final int DEVICES_DISCONNECT_TIMEOUT_TIME = 3000;
private static final int PREPARE_BLUETOOTH_TIMEOUT_TIME = 10000;
- private static final int POWER_DOWN_TIMEOUT_TIME = 5000;
+ private static final int TURN_OFF_TIMEOUT_TIME = 5000;
+ private static final int POWER_DOWN_TIMEOUT_TIME = 20;
BluetoothAdapterStateMachine(Context context, BluetoothService bluetoothService,
BluetoothAdapter bluetoothAdapter) {
@@ -168,6 +174,7 @@
setInitialState(mPowerOff);
mPublicState = BluetoothAdapter.STATE_OFF;
+ mDelayBroadcastStateOff = false;
}
/**
@@ -315,6 +322,10 @@
case SERVICE_RECORD_LOADED:
removeMessages(PREPARE_BLUETOOTH_TIMEOUT);
transitionTo(mHotOff);
+ if (mDelayBroadcastStateOff) {
+ broadcastState(BluetoothAdapter.STATE_OFF);
+ mDelayBroadcastStateOff = false;
+ }
break;
case PREPARE_BLUETOOTH_TIMEOUT:
Log.e(TAG, "Bluetooth adapter SDP failed to load");
@@ -373,8 +384,17 @@
case AIRPLANE_MODE_ON:
case TURN_COLD:
shutoffBluetooth();
+ // we cannot go to power off state yet, we need wait for the Bluetooth
+ // device power off. Unfortunately the stack does not give a event back
+ // so we wait a little bit here
+ sendMessageDelayed(POWER_DOWN_TIMEOUT,
+ POWER_DOWN_TIMEOUT_TIME);
+ break;
+ case POWER_DOWN_TIMEOUT:
transitionTo(mPowerOff);
- broadcastState(BluetoothAdapter.STATE_OFF);
+ if (!mDelayBroadcastStateOff) {
+ broadcastState(BluetoothAdapter.STATE_OFF);
+ }
break;
case AIRPLANE_MODE_OFF:
if (getBluetoothPersistedSetting()) {
@@ -402,6 +422,9 @@
recoverStateMachine(TURN_HOT, null);
}
break;
+ case TURN_HOT:
+ deferMessage(message);
+ break;
default:
return NOT_HANDLED;
}
@@ -436,15 +459,17 @@
}
break;
case POWER_STATE_CHANGED:
- removeMessages(POWER_DOWN_TIMEOUT);
+ removeMessages(TURN_OFF_TIMEOUT);
if (!((Boolean) message.obj)) {
if (mPublicState == BluetoothAdapter.STATE_TURNING_OFF) {
transitionTo(mHotOff);
- finishSwitchingOff();
+ mBluetoothService.finishDisable();
+ mBluetoothService.cleanupAfterFinishDisable();
deferMessage(obtainMessage(TURN_COLD));
if (mContext.getResources().getBoolean
(com.android.internal.R.bool.config_bluetooth_adapter_quick_switch)) {
deferMessage(obtainMessage(TURN_HOT));
+ mDelayBroadcastStateOff = true;
}
}
} else {
@@ -461,7 +486,7 @@
case ALL_DEVICES_DISCONNECTED:
removeMessages(DEVICES_DISCONNECT_TIMEOUT);
mBluetoothService.switchConnectable(false);
- sendMessageDelayed(POWER_DOWN_TIMEOUT, POWER_DOWN_TIMEOUT_TIME);
+ sendMessageDelayed(TURN_OFF_TIMEOUT, TURN_OFF_TIMEOUT_TIME);
break;
case DEVICES_DISCONNECT_TIMEOUT:
sendMessage(ALL_DEVICES_DISCONNECTED);
@@ -473,7 +498,7 @@
deferMessage(obtainMessage(TURN_HOT));
}
break;
- case POWER_DOWN_TIMEOUT:
+ case TURN_OFF_TIMEOUT:
transitionTo(mHotOff);
finishSwitchingOff();
// reset the hardware for error recovery
@@ -536,7 +561,7 @@
DEVICES_DISCONNECT_TIMEOUT_TIME);
} else {
mBluetoothService.switchConnectable(false);
- sendMessageDelayed(POWER_DOWN_TIMEOUT, POWER_DOWN_TIMEOUT_TIME);
+ sendMessageDelayed(TURN_OFF_TIMEOUT, TURN_OFF_TIMEOUT_TIME);
}
// we turn all the way to PowerOff with AIRPLANE_MODE_ON
@@ -610,13 +635,12 @@
}
break;
case POWER_STATE_CHANGED:
- removeMessages(POWER_DOWN_TIMEOUT);
+ removeMessages(TURN_OFF_TIMEOUT);
if (!((Boolean) message.obj)) {
transitionTo(mHotOff);
- deferMessage(obtainMessage(TURN_COLD));
- if (mContext.getResources().getBoolean
+ if (!mContext.getResources().getBoolean
(com.android.internal.R.bool.config_bluetooth_adapter_quick_switch)) {
- deferMessage(obtainMessage(TURN_HOT));
+ deferMessage(obtainMessage(TURN_COLD));
}
} else {
if (!isTurningOn) {
@@ -629,7 +653,7 @@
}
}
break;
- case POWER_DOWN_TIMEOUT:
+ case TURN_OFF_TIMEOUT:
transitionTo(mHotOff);
Log.e(TAG, "Power-down timed out, resetting...");
deferMessage(obtainMessage(TURN_COLD));
@@ -676,12 +700,12 @@
perProcessCallback(false, (IBluetoothStateChangeCallback)message.obj);
if (mBluetoothService.isApplicationStateChangeTrackerEmpty()) {
mBluetoothService.switchConnectable(false);
- sendMessageDelayed(POWER_DOWN_TIMEOUT, POWER_DOWN_TIMEOUT_TIME);
+ sendMessageDelayed(TURN_OFF_TIMEOUT, TURN_OFF_TIMEOUT_TIME);
}
break;
case AIRPLANE_MODE_ON:
mBluetoothService.switchConnectable(false);
- sendMessageDelayed(POWER_DOWN_TIMEOUT, POWER_DOWN_TIMEOUT_TIME);
+ sendMessageDelayed(TURN_OFF_TIMEOUT, TURN_OFF_TIMEOUT_TIME);
allProcessesCallback(false);
// we turn all the way to PowerOff with AIRPLANE_MODE_ON
deferMessage(obtainMessage(AIRPLANE_MODE_ON));
diff --git a/core/java/android/server/BluetoothService.java b/core/java/android/server/BluetoothService.java
index a420734..3cf207f 100755
--- a/core/java/android/server/BluetoothService.java
+++ b/core/java/android/server/BluetoothService.java
@@ -526,6 +526,12 @@
return false;
}
switchConnectable(false);
+
+ // Bluetooth stack needs a small delay here before adding
+ // SDP records, otherwise dbus stalls for over 30 seconds 1 out of 50 runs
+ try {
+ Thread.sleep(20);
+ } catch (InterruptedException e) {}
updateSdpRecords();
return true;
}
@@ -593,6 +599,12 @@
// Add SDP records for profiles maintained by Android userspace
addReservedSdpRecords(uuids);
+ // Bluetooth stack need some a small delay here before adding more
+ // SDP records, otherwise dbus stalls for over 30 seconds 1 out of 50 runs
+ try {
+ Thread.sleep(20);
+ } catch (InterruptedException e) {}
+
if (R.getBoolean(com.android.internal.R.bool.config_bluetooth_default_profiles)) {
// Enable profiles maintained by Bluez userspace.
setBluetoothTetheringNative(true, BluetoothPanProfileHandler.NAP_ROLE,
diff --git a/core/java/android/service/textservice/SpellCheckerService.java b/core/java/android/service/textservice/SpellCheckerService.java
index c579e6e..77b22ed 100644
--- a/core/java/android/service/textservice/SpellCheckerService.java
+++ b/core/java/android/service/textservice/SpellCheckerService.java
@@ -397,14 +397,6 @@
}
wordStart = wordIterator.getBeginning(wordEnd);
}
- if (originalText.length() >= SpellChecker.WORD_ITERATOR_INTERVAL
- && wordItems.size() >= 2) {
- if (DBG) {
- Log.w(TAG, "Remove possibly divided word: "
- + wordItems.get(0).mTextInfo.getText());
- }
- wordItems.remove(0);
- }
return new SentenceTextInfoParams(originalTextInfo, wordItems);
}
diff --git a/core/java/android/text/SpannableStringBuilder.java b/core/java/android/text/SpannableStringBuilder.java
index 09c9438..0f30d25 100644
--- a/core/java/android/text/SpannableStringBuilder.java
+++ b/core/java/android/text/SpannableStringBuilder.java
@@ -308,6 +308,7 @@
resizeFor(mText.length + nbNewChars - mGapLength);
}
+ final boolean textIsRemoved = replacementLength == 0;
// The removal pass needs to be done before the gap is updated in order to broadcast the
// correct previous positions to the correct intersecting SpanWatchers
if (replacedLength > 0) { // no need for span fixup on pure insertion
@@ -319,12 +320,15 @@
while (i < mSpanCount) {
if ((mSpanFlags[i] & Spanned.SPAN_EXCLUSIVE_EXCLUSIVE) ==
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE &&
- mSpanStarts[i] >= start && mSpanStarts[i] < mGapStart + mGapLength &&
- mSpanEnds[i] >= start && mSpanEnds[i] < mGapStart + mGapLength) {
+ mSpanStarts[i] >= start && mSpanStarts[i] < mGapStart + mGapLength &&
+ mSpanEnds[i] >= start && mSpanEnds[i] < mGapStart + mGapLength &&
+ // This condition indicates that the span would become empty
+ (textIsRemoved || mSpanStarts[i] > start || mSpanEnds[i] < mGapStart)) {
removeSpan(i);
- } else {
- i++;
+ continue; // do not increment i, spans will be shifted left in the array
}
+
+ i++;
}
}
@@ -338,7 +342,6 @@
if (replacedLength > 0) { // no need for span fixup on pure insertion
final boolean atEnd = (mGapStart + mGapLength == mText.length);
- final boolean textIsRemoved = replacementLength == 0;
for (int i = 0; i < mSpanCount; i++) {
final int startFlag = (mSpanFlags[i] & START_MASK) >> START_SHIFT;
@@ -390,9 +393,9 @@
return mGapStart + mGapLength;
}
} else { // MARK
- // MARKs should be moved to the start, with the exception of a mark located at the
- // end of the range (which will be < mGapStart + mGapLength since mGapLength > 0)
- // which should stay 'unchanged' at the end of the replaced text.
+ // MARKs should be moved to the start, with the exception of a mark located at
+ // the end of the range (which will be < mGapStart + mGapLength since mGapLength
+ // is > 0, which should stay 'unchanged' at the end of the replaced text.
if (textIsRemoved || offset < mGapStart - nbNewChars) {
return start;
} else {
diff --git a/core/java/android/view/AccessibilityIterators.java b/core/java/android/view/AccessibilityIterators.java
new file mode 100644
index 0000000..386c866d
--- /dev/null
+++ b/core/java/android/view/AccessibilityIterators.java
@@ -0,0 +1,352 @@
+/*
+ * Copyright (C) 2012 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.view;
+
+import android.content.ComponentCallbacks;
+import android.content.Context;
+import android.content.pm.ActivityInfo;
+import android.content.res.Configuration;
+
+import java.text.BreakIterator;
+import java.util.Locale;
+
+/**
+ * This class contains the implementation of text segment iterators
+ * for accessibility support.
+ *
+ * Note: Such iterators are needed in the view package since we want
+ * to be able to iterator over content description of any view.
+ *
+ * @hide
+ */
+public final class AccessibilityIterators {
+
+ /**
+ * @hide
+ */
+ public static interface TextSegmentIterator {
+ public int[] following(int current);
+ public int[] preceding(int current);
+ }
+
+ /**
+ * @hide
+ */
+ public static abstract class AbstractTextSegmentIterator implements TextSegmentIterator {
+ protected static final int DONE = -1;
+
+ protected String mText;
+
+ private final int[] mSegment = new int[2];
+
+ public void initialize(String text) {
+ mText = text;
+ }
+
+ protected int[] getRange(int start, int end) {
+ if (start < 0 || end < 0 || start == end) {
+ return null;
+ }
+ mSegment[0] = start;
+ mSegment[1] = end;
+ return mSegment;
+ }
+ }
+
+ static class CharacterTextSegmentIterator extends AbstractTextSegmentIterator
+ implements ComponentCallbacks {
+ private static CharacterTextSegmentIterator sInstance;
+
+ private final Context mAppContext;
+
+ protected BreakIterator mImpl;
+
+ public static CharacterTextSegmentIterator getInstance(Context context) {
+ if (sInstance == null) {
+ sInstance = new CharacterTextSegmentIterator(context);
+ }
+ return sInstance;
+ }
+
+ private CharacterTextSegmentIterator(Context context) {
+ mAppContext = context.getApplicationContext();
+ Locale locale = mAppContext.getResources().getConfiguration().locale;
+ onLocaleChanged(locale);
+ ViewRootImpl.addConfigCallback(this);
+ }
+
+ @Override
+ public void initialize(String text) {
+ super.initialize(text);
+ mImpl.setText(text);
+ }
+
+ @Override
+ public int[] following(int offset) {
+ final int textLegth = mText.length();
+ if (textLegth <= 0) {
+ return null;
+ }
+ if (offset >= textLegth) {
+ return null;
+ }
+ int start = -1;
+ if (offset < 0) {
+ offset = 0;
+ if (mImpl.isBoundary(offset)) {
+ start = offset;
+ }
+ }
+ if (start < 0) {
+ start = mImpl.following(offset);
+ }
+ if (start < 0) {
+ return null;
+ }
+ final int end = mImpl.following(start);
+ return getRange(start, end);
+ }
+
+ @Override
+ public int[] preceding(int offset) {
+ final int textLegth = mText.length();
+ if (textLegth <= 0) {
+ return null;
+ }
+ if (offset <= 0) {
+ return null;
+ }
+ int end = -1;
+ if (offset > mText.length()) {
+ offset = mText.length();
+ if (mImpl.isBoundary(offset)) {
+ end = offset;
+ }
+ }
+ if (end < 0) {
+ end = mImpl.preceding(offset);
+ }
+ if (end < 0) {
+ return null;
+ }
+ final int start = mImpl.preceding(end);
+ return getRange(start, end);
+ }
+
+ @Override
+ public void onConfigurationChanged(Configuration newConfig) {
+ Configuration oldConfig = mAppContext.getResources().getConfiguration();
+ final int changed = oldConfig.diff(newConfig);
+ if ((changed & ActivityInfo.CONFIG_LOCALE) != 0) {
+ Locale locale = newConfig.locale;
+ onLocaleChanged(locale);
+ }
+ }
+
+ @Override
+ public void onLowMemory() {
+ /* ignore */
+ }
+
+ protected void onLocaleChanged(Locale locale) {
+ mImpl = BreakIterator.getCharacterInstance(locale);
+ }
+ }
+
+ static class WordTextSegmentIterator extends CharacterTextSegmentIterator {
+ private static WordTextSegmentIterator sInstance;
+
+ public static WordTextSegmentIterator getInstance(Context context) {
+ if (sInstance == null) {
+ sInstance = new WordTextSegmentIterator(context);
+ }
+ return sInstance;
+ }
+
+ private WordTextSegmentIterator(Context context) {
+ super(context);
+ }
+
+ @Override
+ protected void onLocaleChanged(Locale locale) {
+ mImpl = BreakIterator.getWordInstance(locale);
+ }
+
+ @Override
+ public int[] following(int offset) {
+ final int textLegth = mText.length();
+ if (textLegth <= 0) {
+ return null;
+ }
+ if (offset >= mText.length()) {
+ return null;
+ }
+ int start = -1;
+ if (offset < 0) {
+ offset = 0;
+ if (mImpl.isBoundary(offset) && isLetterOrDigit(offset)) {
+ start = offset;
+ }
+ }
+ if (start < 0) {
+ while ((offset = mImpl.following(offset)) != DONE) {
+ if (isLetterOrDigit(offset)) {
+ start = offset;
+ break;
+ }
+ }
+ }
+ if (start < 0) {
+ return null;
+ }
+ final int end = mImpl.following(start);
+ return getRange(start, end);
+ }
+
+ @Override
+ public int[] preceding(int offset) {
+ final int textLegth = mText.length();
+ if (textLegth <= 0) {
+ return null;
+ }
+ if (offset <= 0) {
+ return null;
+ }
+ int end = -1;
+ if (offset > mText.length()) {
+ offset = mText.length();
+ if (mImpl.isBoundary(offset) && offset > 0 && isLetterOrDigit(offset - 1)) {
+ end = offset;
+ }
+ }
+ if (end < 0) {
+ while ((offset = mImpl.preceding(offset)) != DONE) {
+ if (offset > 0 && isLetterOrDigit(offset - 1)) {
+ end = offset;
+ break;
+ }
+ }
+ }
+ if (end < 0) {
+ return null;
+ }
+ final int start = mImpl.preceding(end);
+ return getRange(start, end);
+ }
+
+ private boolean isLetterOrDigit(int index) {
+ if (index >= 0 && index < mText.length()) {
+ final int codePoint = mText.codePointAt(index);
+ return Character.isLetterOrDigit(codePoint);
+ }
+ return false;
+ }
+ }
+
+ static class ParagraphTextSegmentIterator extends AbstractTextSegmentIterator {
+ private static ParagraphTextSegmentIterator sInstance;
+
+ public static ParagraphTextSegmentIterator getInstance() {
+ if (sInstance == null) {
+ sInstance = new ParagraphTextSegmentIterator();
+ }
+ return sInstance;
+ }
+
+ @Override
+ public int[] following(int offset) {
+ final int textLength = mText.length();
+ if (textLength <= 0) {
+ return null;
+ }
+ if (offset >= textLength) {
+ return null;
+ }
+ int start = -1;
+ if (offset < 0) {
+ start = 0;
+ } else {
+ for (int i = offset + 1; i < textLength; i++) {
+ if (mText.charAt(i) == '\n') {
+ start = i;
+ break;
+ }
+ }
+ }
+ while (start < textLength && mText.charAt(start) == '\n') {
+ start++;
+ }
+ if (start < 0) {
+ return null;
+ }
+ int end = start;
+ for (int i = end + 1; i < textLength; i++) {
+ end = i;
+ if (mText.charAt(i) == '\n') {
+ break;
+ }
+ }
+ while (end < textLength && mText.charAt(end) == '\n') {
+ end++;
+ }
+ return getRange(start, end);
+ }
+
+ @Override
+ public int[] preceding(int offset) {
+ final int textLength = mText.length();
+ if (textLength <= 0) {
+ return null;
+ }
+ if (offset <= 0) {
+ return null;
+ }
+ int end = -1;
+ if (offset > mText.length()) {
+ end = mText.length();
+ } else {
+ if (offset > 0 && mText.charAt(offset - 1) == '\n') {
+ offset--;
+ }
+ for (int i = offset - 1; i >= 0; i--) {
+ if (i > 0 && mText.charAt(i - 1) == '\n') {
+ end = i;
+ break;
+ }
+ }
+ }
+ if (end <= 0) {
+ return null;
+ }
+ int start = end;
+ while (start > 0 && mText.charAt(start - 1) == '\n') {
+ start--;
+ }
+ if (start == 0 && mText.charAt(start) == '\n') {
+ return null;
+ }
+ for (int i = start - 1; i >= 0; i--) {
+ start = i;
+ if (start > 0 && mText.charAt(i - 1) == '\n') {
+ break;
+ }
+ }
+ start = Math.max(0, start);
+ return getRange(start, end);
+ }
+ }
+}
diff --git a/core/java/android/view/Choreographer.java b/core/java/android/view/Choreographer.java
index b319cd5..825f351 100644
--- a/core/java/android/view/Choreographer.java
+++ b/core/java/android/view/Choreographer.java
@@ -92,6 +92,7 @@
private boolean mFrameScheduled;
private boolean mCallbacksRunning;
private long mLastFrameTimeNanos;
+ private long mFrameIntervalNanos;
/**
* Callback type: Input callback. Runs first.
@@ -116,6 +117,8 @@
mHandler = new FrameHandler(looper);
mDisplayEventReceiver = USE_VSYNC ? new FrameDisplayEventReceiver(looper) : null;
mLastFrameTimeNanos = Long.MIN_VALUE;
+ mFrameIntervalNanos = (long)(1000000000 /
+ new Display(Display.DEFAULT_DISPLAY, null).getRefreshRate());
mCallbackQueues = new CallbackQueue[CALLBACK_LAST + 1];
for (int i = 0; i <= CALLBACK_LAST; i++) {
@@ -343,19 +346,39 @@
}
void doFrame(long timestampNanos, int frame) {
+ final long startNanos;
synchronized (mLock) {
if (!mFrameScheduled) {
return; // no work to do
}
+
+ startNanos = System.nanoTime();
+ final long jitterNanos = startNanos - timestampNanos;
+ if (jitterNanos >= mFrameIntervalNanos) {
+ final long lastFrameOffset = jitterNanos % mFrameIntervalNanos;
+ if (DEBUG) {
+ Log.d(TAG, "Missed vsync by " + (jitterNanos * 0.000001f) + " ms "
+ + "which is more than the frame interval of "
+ + (mFrameIntervalNanos * 0.000001f) + " ms! "
+ + "Setting frame time to " + (lastFrameOffset * 0.000001f)
+ + " ms in the past.");
+ }
+ timestampNanos = startNanos - lastFrameOffset;
+ }
+
+ if (timestampNanos < mLastFrameTimeNanos) {
+ if (DEBUG) {
+ Log.d(TAG, "Frame time appears to be going backwards. May be due to a "
+ + "previously skipped frame. Waiting for next vsync");
+ }
+ scheduleVsyncLocked();
+ return;
+ }
+
mFrameScheduled = false;
mLastFrameTimeNanos = timestampNanos;
}
- final long startNanos;
- if (DEBUG) {
- startNanos = System.nanoTime();
- }
-
doCallbacks(Choreographer.CALLBACK_INPUT);
doCallbacks(Choreographer.CALLBACK_ANIMATION);
doCallbacks(Choreographer.CALLBACK_TRAVERSAL);
diff --git a/core/java/android/view/HardwareRenderer.java b/core/java/android/view/HardwareRenderer.java
index c0771c5..e25e2ef 100644
--- a/core/java/android/view/HardwareRenderer.java
+++ b/core/java/android/view/HardwareRenderer.java
@@ -152,7 +152,7 @@
/**
* Number of frames to profile.
*/
- private static final int PROFILE_MAX_FRAMES = 64;
+ private static final int PROFILE_MAX_FRAMES = 128;
/**
* Number of floats per profiled frame.
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index 6ed4e86..8053238 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -47,7 +47,6 @@
import android.os.RemoteException;
import android.os.SystemClock;
import android.os.SystemProperties;
-import android.text.TextUtils;
import android.util.AttributeSet;
import android.util.FloatProperty;
import android.util.LocaleUtil;
@@ -60,6 +59,10 @@
import android.util.SparseArray;
import android.util.TypedValue;
import android.view.ContextMenu.ContextMenuInfo;
+import android.view.AccessibilityIterators.TextSegmentIterator;
+import android.view.AccessibilityIterators.CharacterTextSegmentIterator;
+import android.view.AccessibilityIterators.WordTextSegmentIterator;
+import android.view.AccessibilityIterators.ParagraphTextSegmentIterator;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityEventSource;
import android.view.accessibility.AccessibilityManager;
@@ -1524,7 +1527,8 @@
| AccessibilityEvent.TYPE_VIEW_HOVER_EXIT
| AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED
| AccessibilityEvent.TYPE_VIEW_TEXT_SELECTION_CHANGED
- | AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED;
+ | AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED
+ | AccessibilityEvent.TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY;
/**
* Temporary Rect currently for use in setBackground(). This will probably
@@ -1590,6 +1594,11 @@
int mAccessibilityViewId = NO_ID;
/**
+ * @hide
+ */
+ private int mAccessibilityCursorPosition = -1;
+
+ /**
* The view's tag.
* {@hide}
*
@@ -4749,8 +4758,11 @@
}
}
- info.addAction(AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS);
- info.addAction(AccessibilityNodeInfo.ACTION_CLEAR_ACCESSIBILITY_FOCUS);
+ if (!isAccessibilityFocused()) {
+ info.addAction(AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS);
+ } else {
+ info.addAction(AccessibilityNodeInfo.ACTION_CLEAR_ACCESSIBILITY_FOCUS);
+ }
if (isClickable()) {
info.addAction(AccessibilityNodeInfo.ACTION_CLICK);
@@ -4760,11 +4772,12 @@
info.addAction(AccessibilityNodeInfo.ACTION_LONG_CLICK);
}
- if (getContentDescription() != null) {
+ if (mContentDescription != null && mContentDescription.length() > 0) {
info.addAction(AccessibilityNodeInfo.ACTION_NEXT_AT_MOVEMENT_GRANULARITY);
info.addAction(AccessibilityNodeInfo.ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY);
info.setMovementGranularities(AccessibilityNodeInfo.MOVEMENT_GRANULARITY_CHARACTER
- | AccessibilityNodeInfo.MOVEMENT_GRANULARITY_WORD);
+ | AccessibilityNodeInfo.MOVEMENT_GRANULARITY_WORD
+ | AccessibilityNodeInfo.MOVEMENT_GRANULARITY_PARAGRAPH);
}
}
@@ -5997,7 +6010,8 @@
outViews.add(this);
}
} else if ((flags & FIND_VIEWS_WITH_CONTENT_DESCRIPTION) != 0
- && !TextUtils.isEmpty(searched) && !TextUtils.isEmpty(mContentDescription)) {
+ && (searched != null && searched.length() > 0)
+ && (mContentDescription != null && mContentDescription.length() > 0)) {
String searchedLowerCase = searched.toString().toLowerCase();
String contentDescriptionLowerCase = mContentDescription.toString().toLowerCase();
if (contentDescriptionLowerCase.contains(searchedLowerCase)) {
@@ -6098,6 +6112,10 @@
invalidate();
sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED);
notifyAccessibilityStateChanged();
+
+ // Clear the text navigation state.
+ setAccessibilityCursorPosition(-1);
+
// Try to move accessibility focus to the input focus.
View rootView = getRootView();
if (rootView != null) {
@@ -6495,9 +6513,10 @@
* possible accessibility actions look at {@link AccessibilityNodeInfo}.
*
* @param action The action to perform.
+ * @param arguments Optional action arguments.
* @return Whether the action was performed.
*/
- public boolean performAccessibilityAction(int action, Bundle args) {
+ public boolean performAccessibilityAction(int action, Bundle arguments) {
switch (action) {
case AccessibilityNodeInfo.ACTION_CLICK: {
if (isClickable()) {
@@ -6546,14 +6565,155 @@
return true;
}
} break;
+ case AccessibilityNodeInfo.ACTION_NEXT_AT_MOVEMENT_GRANULARITY: {
+ if (arguments != null) {
+ final int granularity = arguments.getInt(
+ AccessibilityNodeInfo.ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT);
+ return nextAtGranularity(granularity);
+ }
+ } break;
+ case AccessibilityNodeInfo.ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY: {
+ if (arguments != null) {
+ final int granularity = arguments.getInt(
+ AccessibilityNodeInfo.ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT);
+ return previousAtGranularity(granularity);
+ }
+ } break;
}
return false;
}
+ private boolean nextAtGranularity(int granularity) {
+ CharSequence text = getIterableTextForAccessibility();
+ if (text != null && text.length() > 0) {
+ return false;
+ }
+ TextSegmentIterator iterator = getIteratorForGranularity(granularity);
+ if (iterator == null) {
+ return false;
+ }
+ final int current = getAccessibilityCursorPosition();
+ final int[] range = iterator.following(current);
+ if (range == null) {
+ setAccessibilityCursorPosition(-1);
+ return false;
+ }
+ final int start = range[0];
+ final int end = range[1];
+ setAccessibilityCursorPosition(start);
+ sendViewTextTraversedAtGranularityEvent(
+ AccessibilityNodeInfo.ACTION_NEXT_AT_MOVEMENT_GRANULARITY,
+ granularity, start, end);
+ return true;
+ }
+
+ private boolean previousAtGranularity(int granularity) {
+ CharSequence text = getIterableTextForAccessibility();
+ if (text != null && text.length() > 0) {
+ return false;
+ }
+ TextSegmentIterator iterator = getIteratorForGranularity(granularity);
+ if (iterator == null) {
+ return false;
+ }
+ final int selectionStart = getAccessibilityCursorPosition();
+ final int current = selectionStart >= 0 ? selectionStart : text.length() + 1;
+ final int[] range = iterator.preceding(current);
+ if (range == null) {
+ setAccessibilityCursorPosition(-1);
+ return false;
+ }
+ final int start = range[0];
+ final int end = range[1];
+ setAccessibilityCursorPosition(end);
+ sendViewTextTraversedAtGranularityEvent(
+ AccessibilityNodeInfo.ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY,
+ granularity, start, end);
+ return true;
+ }
+
+ /**
+ * Gets the text reported for accessibility purposes.
+ *
+ * @return The accessibility text.
+ *
+ * @hide
+ */
+ public CharSequence getIterableTextForAccessibility() {
+ return mContentDescription;
+ }
+
+ /**
+ * @hide
+ */
+ public int getAccessibilityCursorPosition() {
+ return mAccessibilityCursorPosition;
+ }
+
+ /**
+ * @hide
+ */
+ public void setAccessibilityCursorPosition(int position) {
+ mAccessibilityCursorPosition = position;
+ }
+
+ private void sendViewTextTraversedAtGranularityEvent(int action, int granularity,
+ int fromIndex, int toIndex) {
+ if (mParent == null) {
+ return;
+ }
+ AccessibilityEvent event = AccessibilityEvent.obtain(
+ AccessibilityEvent.TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY);
+ onInitializeAccessibilityEvent(event);
+ onPopulateAccessibilityEvent(event);
+ event.setFromIndex(fromIndex);
+ event.setToIndex(toIndex);
+ event.setAction(action);
+ event.setMovementGranularity(granularity);
+ mParent.requestSendAccessibilityEvent(this, event);
+ }
+
+ /**
+ * @hide
+ */
+ public TextSegmentIterator getIteratorForGranularity(int granularity) {
+ switch (granularity) {
+ case AccessibilityNodeInfo.MOVEMENT_GRANULARITY_CHARACTER: {
+ CharSequence text = getIterableTextForAccessibility();
+ if (text != null && text.length() > 0) {
+ CharacterTextSegmentIterator iterator =
+ CharacterTextSegmentIterator.getInstance(mContext);
+ iterator.initialize(text.toString());
+ return iterator;
+ }
+ } break;
+ case AccessibilityNodeInfo.MOVEMENT_GRANULARITY_WORD: {
+ CharSequence text = getIterableTextForAccessibility();
+ if (text != null && text.length() > 0) {
+ WordTextSegmentIterator iterator =
+ WordTextSegmentIterator.getInstance(mContext);
+ iterator.initialize(text.toString());
+ return iterator;
+ }
+ } break;
+ case AccessibilityNodeInfo.MOVEMENT_GRANULARITY_PARAGRAPH: {
+ CharSequence text = getIterableTextForAccessibility();
+ if (text != null && text.length() > 0) {
+ ParagraphTextSegmentIterator iterator =
+ ParagraphTextSegmentIterator.getInstance();
+ iterator.initialize(text.toString());
+ return iterator;
+ }
+ } break;
+ }
+ return null;
+ }
+
/**
* @hide
*/
public void dispatchStartTemporaryDetach() {
+ clearAccessibilityFocus();
onStartTemporaryDetach();
}
@@ -11168,7 +11328,6 @@
resetResolvedLayoutDirection();
resetResolvedTextAlignment();
resetAccessibilityStateChanged();
- clearAccessibilityFocus();
}
/**
diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java
index a5ae248..acfca26 100644
--- a/core/java/android/view/ViewGroup.java
+++ b/core/java/android/view/ViewGroup.java
@@ -348,6 +348,8 @@
* This constant is a {@link #setLayoutMode(int) layoutMode}.
* Clip bounds are the raw values of {@link #getLeft() left}, {@link #getTop() top},
* {@link #getRight() right} and {@link #getBottom() bottom}.
+ *
+ * @hide
*/
public static final int CLIP_BOUNDS = 0;
@@ -356,6 +358,8 @@
* Optical bounds describe where a widget appears to be. They sit inside the clip
* bounds which need to cover a larger area to allow other effects,
* such as shadows and glows, to be drawn.
+ *
+ * @hide
*/
public static final int OPTICAL_BOUNDS = 1;
@@ -3582,6 +3586,8 @@
clearChildFocus = true;
}
+ view.clearAccessibilityFocus();
+
cancelTouchTarget(view);
cancelHoverTarget(view);
@@ -3665,6 +3671,8 @@
clearChildFocus = view;
}
+ view.clearAccessibilityFocus();
+
cancelTouchTarget(view);
cancelHoverTarget(view);
@@ -3738,6 +3746,8 @@
clearChildFocus = view;
}
+ view.clearAccessibilityFocus();
+
cancelTouchTarget(view);
cancelHoverTarget(view);
@@ -3786,6 +3796,8 @@
child.clearFocus();
}
+ child.clearAccessibilityFocus();
+
cancelTouchTarget(child);
cancelHoverTarget(child);
@@ -4539,6 +4551,8 @@
* @return the layout mode to use during layout operations
*
* @see #setLayoutMode(int)
+ *
+ * @hide
*/
public int getLayoutMode() {
return mLayoutMode;
@@ -4553,6 +4567,8 @@
* @param layoutMode the layout mode to use during layout operations
*
* @see #getLayoutMode()
+ *
+ * @hide
*/
public void setLayoutMode(int layoutMode) {
if (mLayoutMode != layoutMode) {
diff --git a/core/java/android/view/ViewTreeObserver.java b/core/java/android/view/ViewTreeObserver.java
index 1c5d436..6a8a60a 100644
--- a/core/java/android/view/ViewTreeObserver.java
+++ b/core/java/android/view/ViewTreeObserver.java
@@ -20,7 +20,6 @@
import android.graphics.Region;
import java.util.ArrayList;
-import java.util.concurrent.CopyOnWriteArrayList;
/**
* A view tree observer is used to register listeners that can be notified of global
@@ -32,12 +31,12 @@
* for more information.
*/
public final class ViewTreeObserver {
- private CopyOnWriteArrayList<OnGlobalFocusChangeListener> mOnGlobalFocusListeners;
- private CopyOnWriteArrayList<OnGlobalLayoutListener> mOnGlobalLayoutListeners;
- private CopyOnWriteArrayList<OnTouchModeChangeListener> mOnTouchModeChangeListeners;
- private CopyOnWriteArrayList<OnComputeInternalInsetsListener> mOnComputeInternalInsetsListeners;
- private CopyOnWriteArrayList<OnScrollChangedListener> mOnScrollChangedListeners;
- private ArrayList<OnPreDrawListener> mOnPreDrawListeners;
+ private CopyOnWriteArray<OnGlobalFocusChangeListener> mOnGlobalFocusListeners;
+ private CopyOnWriteArray<OnGlobalLayoutListener> mOnGlobalLayoutListeners;
+ private CopyOnWriteArray<OnTouchModeChangeListener> mOnTouchModeChangeListeners;
+ private CopyOnWriteArray<OnComputeInternalInsetsListener> mOnComputeInternalInsetsListeners;
+ private CopyOnWriteArray<OnScrollChangedListener> mOnScrollChangedListeners;
+ private CopyOnWriteArray<OnPreDrawListener> mOnPreDrawListeners;
private ArrayList<OnDrawListener> mOnDrawListeners;
private boolean mAlive = true;
@@ -147,7 +146,7 @@
* windows behind it should be placed.
*/
public final Rect contentInsets = new Rect();
-
+
/**
* Offsets from the frame of the window at which windows behind it
* are visible.
@@ -166,13 +165,13 @@
* can be touched.
*/
public static final int TOUCHABLE_INSETS_FRAME = 0;
-
+
/**
* Option for {@link #setTouchableInsets(int)}: the area inside of
* the content insets can be touched.
*/
public static final int TOUCHABLE_INSETS_CONTENT = 1;
-
+
/**
* Option for {@link #setTouchableInsets(int)}: the area inside of
* the visible insets can be touched.
@@ -195,7 +194,7 @@
}
int mTouchableInsets;
-
+
void reset() {
contentInsets.setEmpty();
visibleInsets.setEmpty();
@@ -231,7 +230,7 @@
mTouchableInsets = other.mTouchableInsets;
}
}
-
+
/**
* Interface definition for a callback to be invoked when layout has
* completed and the client can compute its interior insets.
@@ -328,7 +327,7 @@
checkIsAlive();
if (mOnGlobalFocusListeners == null) {
- mOnGlobalFocusListeners = new CopyOnWriteArrayList<OnGlobalFocusChangeListener>();
+ mOnGlobalFocusListeners = new CopyOnWriteArray<OnGlobalFocusChangeListener>();
}
mOnGlobalFocusListeners.add(listener);
@@ -363,7 +362,7 @@
checkIsAlive();
if (mOnGlobalLayoutListeners == null) {
- mOnGlobalLayoutListeners = new CopyOnWriteArrayList<OnGlobalLayoutListener>();
+ mOnGlobalLayoutListeners = new CopyOnWriteArray<OnGlobalLayoutListener>();
}
mOnGlobalLayoutListeners.add(listener);
@@ -413,7 +412,7 @@
checkIsAlive();
if (mOnPreDrawListeners == null) {
- mOnPreDrawListeners = new ArrayList<OnPreDrawListener>();
+ mOnPreDrawListeners = new CopyOnWriteArray<OnPreDrawListener>();
}
mOnPreDrawListeners.add(listener);
@@ -485,7 +484,7 @@
checkIsAlive();
if (mOnScrollChangedListeners == null) {
- mOnScrollChangedListeners = new CopyOnWriteArrayList<OnScrollChangedListener>();
+ mOnScrollChangedListeners = new CopyOnWriteArray<OnScrollChangedListener>();
}
mOnScrollChangedListeners.add(listener);
@@ -519,7 +518,7 @@
checkIsAlive();
if (mOnTouchModeChangeListeners == null) {
- mOnTouchModeChangeListeners = new CopyOnWriteArrayList<OnTouchModeChangeListener>();
+ mOnTouchModeChangeListeners = new CopyOnWriteArray<OnTouchModeChangeListener>();
}
mOnTouchModeChangeListeners.add(listener);
@@ -558,7 +557,7 @@
if (mOnComputeInternalInsetsListeners == null) {
mOnComputeInternalInsetsListeners =
- new CopyOnWriteArrayList<OnComputeInternalInsetsListener>();
+ new CopyOnWriteArray<OnComputeInternalInsetsListener>();
}
mOnComputeInternalInsetsListeners.add(listener);
@@ -622,10 +621,16 @@
// perform the dispatching. The iterator is a safe guard against listeners that
// could mutate the list by calling the various add/remove methods. This prevents
// the array from being modified while we iterate it.
- final CopyOnWriteArrayList<OnGlobalFocusChangeListener> listeners = mOnGlobalFocusListeners;
+ final CopyOnWriteArray<OnGlobalFocusChangeListener> listeners = mOnGlobalFocusListeners;
if (listeners != null && listeners.size() > 0) {
- for (OnGlobalFocusChangeListener listener : listeners) {
- listener.onGlobalFocusChanged(oldFocus, newFocus);
+ CopyOnWriteArray.Access<OnGlobalFocusChangeListener> access = listeners.start();
+ try {
+ int count = access.size();
+ for (int i = 0; i < count; i++) {
+ access.get(i).onGlobalFocusChanged(oldFocus, newFocus);
+ }
+ } finally {
+ listeners.end();
}
}
}
@@ -640,10 +645,16 @@
// perform the dispatching. The iterator is a safe guard against listeners that
// could mutate the list by calling the various add/remove methods. This prevents
// the array from being modified while we iterate it.
- final CopyOnWriteArrayList<OnGlobalLayoutListener> listeners = mOnGlobalLayoutListeners;
+ final CopyOnWriteArray<OnGlobalLayoutListener> listeners = mOnGlobalLayoutListeners;
if (listeners != null && listeners.size() > 0) {
- for (OnGlobalLayoutListener listener : listeners) {
- listener.onGlobalLayout();
+ CopyOnWriteArray.Access<OnGlobalLayoutListener> access = listeners.start();
+ try {
+ int count = access.size();
+ for (int i = 0; i < count; i++) {
+ access.get(i).onGlobalLayout();
+ }
+ } finally {
+ listeners.end();
}
}
}
@@ -658,17 +669,17 @@
*/
@SuppressWarnings("unchecked")
public final boolean dispatchOnPreDraw() {
- // NOTE: we *must* clone the listener list to perform the dispatching.
- // The clone is a safe guard against listeners that
- // could mutate the list by calling the various add/remove methods. This prevents
- // the array from being modified while we process it.
boolean cancelDraw = false;
- if (mOnPreDrawListeners != null && mOnPreDrawListeners.size() > 0) {
- final ArrayList<OnPreDrawListener> listeners =
- (ArrayList<OnPreDrawListener>) mOnPreDrawListeners.clone();
- int numListeners = listeners.size();
- for (int i = 0; i < numListeners; ++i) {
- cancelDraw |= !(listeners.get(i).onPreDraw());
+ final CopyOnWriteArray<OnPreDrawListener> listeners = mOnPreDrawListeners;
+ if (listeners != null && listeners.size() > 0) {
+ CopyOnWriteArray.Access<OnPreDrawListener> access = listeners.start();
+ try {
+ int count = access.size();
+ for (int i = 0; i < count; i++) {
+ cancelDraw |= !(access.get(i).onPreDraw());
+ }
+ } finally {
+ listeners.end();
}
}
return cancelDraw;
@@ -693,11 +704,17 @@
* @param inTouchMode True if the touch mode is now enabled, false otherwise.
*/
final void dispatchOnTouchModeChanged(boolean inTouchMode) {
- final CopyOnWriteArrayList<OnTouchModeChangeListener> listeners =
+ final CopyOnWriteArray<OnTouchModeChangeListener> listeners =
mOnTouchModeChangeListeners;
if (listeners != null && listeners.size() > 0) {
- for (OnTouchModeChangeListener listener : listeners) {
- listener.onTouchModeChanged(inTouchMode);
+ CopyOnWriteArray.Access<OnTouchModeChangeListener> access = listeners.start();
+ try {
+ int count = access.size();
+ for (int i = 0; i < count; i++) {
+ access.get(i).onTouchModeChanged(inTouchMode);
+ }
+ } finally {
+ listeners.end();
}
}
}
@@ -710,10 +727,16 @@
// perform the dispatching. The iterator is a safe guard against listeners that
// could mutate the list by calling the various add/remove methods. This prevents
// the array from being modified while we iterate it.
- final CopyOnWriteArrayList<OnScrollChangedListener> listeners = mOnScrollChangedListeners;
+ final CopyOnWriteArray<OnScrollChangedListener> listeners = mOnScrollChangedListeners;
if (listeners != null && listeners.size() > 0) {
- for (OnScrollChangedListener listener : listeners) {
- listener.onScrollChanged();
+ CopyOnWriteArray.Access<OnScrollChangedListener> access = listeners.start();
+ try {
+ int count = access.size();
+ for (int i = 0; i < count; i++) {
+ access.get(i).onScrollChanged();
+ }
+ } finally {
+ listeners.end();
}
}
}
@@ -722,11 +745,11 @@
* Returns whether there are listeners for computing internal insets.
*/
final boolean hasComputeInternalInsetsListeners() {
- final CopyOnWriteArrayList<OnComputeInternalInsetsListener> listeners =
+ final CopyOnWriteArray<OnComputeInternalInsetsListener> listeners =
mOnComputeInternalInsetsListeners;
return (listeners != null && listeners.size() > 0);
}
-
+
/**
* Calls all listeners to compute the current insets.
*/
@@ -735,12 +758,105 @@
// perform the dispatching. The iterator is a safe guard against listeners that
// could mutate the list by calling the various add/remove methods. This prevents
// the array from being modified while we iterate it.
- final CopyOnWriteArrayList<OnComputeInternalInsetsListener> listeners =
+ final CopyOnWriteArray<OnComputeInternalInsetsListener> listeners =
mOnComputeInternalInsetsListeners;
if (listeners != null && listeners.size() > 0) {
- for (OnComputeInternalInsetsListener listener : listeners) {
- listener.onComputeInternalInsets(inoutInfo);
+ CopyOnWriteArray.Access<OnComputeInternalInsetsListener> access = listeners.start();
+ try {
+ int count = access.size();
+ for (int i = 0; i < count; i++) {
+ access.get(i).onComputeInternalInsets(inoutInfo);
+ }
+ } finally {
+ listeners.end();
}
}
}
+
+ /**
+ * Copy on write array. This array is not thread safe, and only one loop can
+ * iterate over this array at any given time. This class avoids allocations
+ * until a concurrent modification happens.
+ *
+ * Usage:
+ *
+ * CopyOnWriteArray.Access<MyData> access = array.start();
+ * try {
+ * for (int i = 0; i < access.size(); i++) {
+ * MyData d = access.get(i);
+ * }
+ * } finally {
+ * access.end();
+ * }
+ */
+ static class CopyOnWriteArray<T> {
+ private ArrayList<T> mData = new ArrayList<T>();
+ private ArrayList<T> mDataCopy;
+
+ private final Access<T> mAccess = new Access<T>();
+
+ private boolean mStart;
+
+ static class Access<T> {
+ private ArrayList<T> mData;
+ private int mSize;
+
+ T get(int index) {
+ return mData.get(index);
+ }
+
+ int size() {
+ return mSize;
+ }
+ }
+
+ CopyOnWriteArray() {
+ }
+
+ private ArrayList<T> getArray() {
+ if (mStart) {
+ if (mDataCopy == null) mDataCopy = new ArrayList<T>(mData);
+ return mDataCopy;
+ }
+ return mData;
+ }
+
+ Access<T> start() {
+ if (mStart) throw new IllegalStateException("Iteration already started");
+ mStart = true;
+ mDataCopy = null;
+ mAccess.mData = mData;
+ mAccess.mSize = mData.size();
+ return mAccess;
+ }
+
+ void end() {
+ if (!mStart) throw new IllegalStateException("Iteration not started");
+ mStart = false;
+ if (mDataCopy != null) {
+ mData = mDataCopy;
+ }
+ mDataCopy = null;
+ }
+
+ int size() {
+ return getArray().size();
+ }
+
+ void add(T item) {
+ getArray().add(item);
+ }
+
+ void addAll(CopyOnWriteArray<T> array) {
+ getArray().addAll(array.mData);
+ }
+
+ void remove(T item) {
+ getArray().remove(item);
+ }
+
+ void clear() {
+ getArray().clear();
+ }
+ }
}
diff --git a/core/java/android/view/WindowOrientationListener.java b/core/java/android/view/WindowOrientationListener.java
index c28b220..4c34dd4 100755
--- a/core/java/android/view/WindowOrientationListener.java
+++ b/core/java/android/view/WindowOrientationListener.java
@@ -21,6 +21,7 @@
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
+import android.os.SystemProperties;
import android.util.FloatMath;
import android.util.Log;
import android.util.Slog;
@@ -34,20 +35,15 @@
* "App/Activity/Screen Orientation" to ensure that all orientation
* modes still work correctly.
*
- * You can also visualize the behavior of the WindowOrientationListener by
- * enabling the window orientation listener log using the Development Settings
- * in the Dev Tools application (Development.apk)
- * and running frameworks/base/tools/orientationplot/orientationplot.py.
- *
- * More information about how to tune this algorithm in
- * frameworks/base/tools/orientationplot/README.txt.
+ * You can also visualize the behavior of the WindowOrientationListener.
+ * Refer to frameworks/base/tools/orientationplot/README.txt for details.
*
* @hide
*/
public abstract class WindowOrientationListener {
private static final String TAG = "WindowOrientationListener";
- private static final boolean DEBUG = false;
- private static final boolean localLOGV = DEBUG || false;
+ private static final boolean LOG = SystemProperties.getBoolean(
+ "debug.orientation.log", false);
private static final boolean USE_GRAVITY_SENSOR = false;
@@ -56,7 +52,6 @@
private int mRate;
private Sensor mSensor;
private SensorEventListenerImpl mSensorEventListener;
- boolean mLogEnabled;
int mCurrentRotation = -1;
/**
@@ -100,7 +95,9 @@
return;
}
if (mEnabled == false) {
- if (localLOGV) Log.d(TAG, "WindowOrientationListener enabled");
+ if (LOG) {
+ Log.d(TAG, "WindowOrientationListener enabled");
+ }
mSensorManager.registerListener(mSensorEventListener, mSensor, mRate);
mEnabled = true;
}
@@ -115,7 +112,9 @@
return;
}
if (mEnabled == true) {
- if (localLOGV) Log.d(TAG, "WindowOrientationListener disabled");
+ if (LOG) {
+ Log.d(TAG, "WindowOrientationListener disabled");
+ }
mSensorManager.unregisterListener(mSensorEventListener);
mEnabled = false;
}
@@ -165,16 +164,6 @@
public abstract void onProposedRotationChanged(int rotation);
/**
- * Enables or disables the window orientation listener logging for use with
- * the orientationplot.py tool.
- * Logging is usually enabled via Development Settings. (See class comments.)
- * @param enable True to enable logging.
- */
- public void setLogEnabled(boolean enable) {
- mLogEnabled = enable;
- }
-
- /**
* This class filters the raw accelerometer data and tries to detect actual changes in
* orientation. This is a very ill-defined problem so there are a lot of tweakable parameters,
* but here's the outline:
@@ -238,11 +227,16 @@
// can change.
private static final long PROPOSAL_MIN_TIME_SINCE_FLAT_ENDED_NANOS = 500 * NANOS_PER_MS;
- // The mininum amount of time that must have elapsed since the device stopped
+ // The minimum amount of time that must have elapsed since the device stopped
// swinging (time since device appeared to be in the process of being put down
// or put away into a pocket) before the proposed rotation can change.
private static final long PROPOSAL_MIN_TIME_SINCE_SWING_ENDED_NANOS = 300 * NANOS_PER_MS;
+ // The minimum amount of time that must have elapsed since the device stopped
+ // undergoing external acceleration before the proposed rotation can change.
+ private static final long PROPOSAL_MIN_TIME_SINCE_ACCELERATION_ENDED_NANOS =
+ 500 * NANOS_PER_MS;
+
// If the tilt angle remains greater than the specified angle for a minimum of
// the specified time, then the device is deemed to be lying flat
// (just chillin' on a table).
@@ -300,10 +294,15 @@
// singularities in the tilt and orientation calculations.
//
// In both cases, we postpone choosing an orientation.
+ //
+ // However, we need to tolerate some acceleration because the angular momentum
+ // of turning the device can skew the observed acceleration for a short period of time.
+ private static final float NEAR_ZERO_MAGNITUDE = 1; // m/s^2
+ private static final float ACCELERATION_TOLERANCE = 4; // m/s^2
private static final float MIN_ACCELERATION_MAGNITUDE =
- SensorManager.STANDARD_GRAVITY * 0.3f;
+ SensorManager.STANDARD_GRAVITY - ACCELERATION_TOLERANCE;
private static final float MAX_ACCELERATION_MAGNITUDE =
- SensorManager.STANDARD_GRAVITY * 1.25f;
+ SensorManager.STANDARD_GRAVITY + ACCELERATION_TOLERANCE;
// Maximum absolute tilt angle at which to consider orientation data. Beyond this (i.e.
// when screen is facing the sky or ground), we completely ignore orientation data.
@@ -353,6 +352,9 @@
// Timestamp when the device last appeared to be swinging.
private long mSwingTimestampNanos;
+ // Timestamp when the device last appeared to be undergoing external acceleration.
+ private long mAccelerationTimestampNanos;
+
// History of observed tilt angles.
private static final int TILT_HISTORY_SIZE = 40;
private float[] mTiltHistory = new float[TILT_HISTORY_SIZE];
@@ -374,15 +376,13 @@
@Override
public void onSensorChanged(SensorEvent event) {
- final boolean log = mOrientationListener.mLogEnabled;
-
// The vector given in the SensorEvent points straight up (towards the sky) under ideal
// conditions (the phone is not accelerating). I'll call this up vector elsewhere.
float x = event.values[ACCELEROMETER_DATA_X];
float y = event.values[ACCELEROMETER_DATA_Y];
float z = event.values[ACCELEROMETER_DATA_Z];
- if (log) {
+ if (LOG) {
Slog.v(TAG, "Raw acceleration vector: "
+ "x=" + x + ", y=" + y + ", z=" + z
+ ", magnitude=" + FloatMath.sqrt(x * x + y * y + z * z));
@@ -399,7 +399,7 @@
if (now < then
|| now > then + MAX_FILTER_DELTA_TIME_NANOS
|| (x == 0 && y == 0 && z == 0)) {
- if (log) {
+ if (LOG) {
Slog.v(TAG, "Resetting orientation listener.");
}
reset();
@@ -409,7 +409,7 @@
x = alpha * (x - mLastFilteredX) + mLastFilteredX;
y = alpha * (y - mLastFilteredY) + mLastFilteredY;
z = alpha * (z - mLastFilteredZ) + mLastFilteredZ;
- if (log) {
+ if (LOG) {
Slog.v(TAG, "Filtered acceleration vector: "
+ "x=" + x + ", y=" + y + ", z=" + z
+ ", magnitude=" + FloatMath.sqrt(x * x + y * y + z * z));
@@ -421,18 +421,24 @@
mLastFilteredY = y;
mLastFilteredZ = z;
+ boolean isAccelerating = false;
boolean isFlat = false;
boolean isSwinging = false;
if (!skipSample) {
// Calculate the magnitude of the acceleration vector.
final float magnitude = FloatMath.sqrt(x * x + y * y + z * z);
- if (magnitude < MIN_ACCELERATION_MAGNITUDE
- || magnitude > MAX_ACCELERATION_MAGNITUDE) {
- if (log) {
- Slog.v(TAG, "Ignoring sensor data, magnitude out of range.");
+ if (magnitude < NEAR_ZERO_MAGNITUDE) {
+ if (LOG) {
+ Slog.v(TAG, "Ignoring sensor data, magnitude too close to zero.");
}
clearPredictedRotation();
} else {
+ // Determine whether the device appears to be undergoing external acceleration.
+ if (isAccelerating(magnitude)) {
+ isAccelerating = true;
+ mAccelerationTimestampNanos = now;
+ }
+
// Calculate the tilt angle.
// This is the angle between the up vector and the x-y plane (the plane of
// the screen) in a range of [-90, 90] degrees.
@@ -441,6 +447,7 @@
// 90 degrees: screen horizontal and facing the sky (on table)
final int tiltAngle = (int) Math.round(
Math.asin(z / magnitude) * RADIANS_TO_DEGREES);
+ addTiltHistoryEntry(now, tiltAngle);
// Determine whether the device appears to be flat or swinging.
if (isFlat(now)) {
@@ -451,12 +458,11 @@
isSwinging = true;
mSwingTimestampNanos = now;
}
- addTiltHistoryEntry(now, tiltAngle);
// If the tilt angle is too close to horizontal then we cannot determine
// the orientation angle of the screen.
if (Math.abs(tiltAngle) > MAX_TILT) {
- if (log) {
+ if (LOG) {
Slog.v(TAG, "Ignoring sensor data, tilt angle too high: "
+ "tiltAngle=" + tiltAngle);
}
@@ -483,7 +489,7 @@
&& isOrientationAngleAcceptable(nearestRotation,
orientationAngle)) {
updatePredictedRotation(now, nearestRotation);
- if (log) {
+ if (LOG) {
Slog.v(TAG, "Predicted: "
+ "tiltAngle=" + tiltAngle
+ ", orientationAngle=" + orientationAngle
@@ -493,7 +499,7 @@
* 0.000001f));
}
} else {
- if (log) {
+ if (LOG) {
Slog.v(TAG, "Ignoring sensor data, no predicted rotation: "
+ "tiltAngle=" + tiltAngle
+ ", orientationAngle=" + orientationAngle);
@@ -511,15 +517,18 @@
}
// Write final statistics about where we are in the orientation detection process.
- if (log) {
+ if (LOG) {
Slog.v(TAG, "Result: currentRotation=" + mOrientationListener.mCurrentRotation
+ ", proposedRotation=" + mProposedRotation
+ ", predictedRotation=" + mPredictedRotation
+ ", timeDeltaMS=" + timeDeltaMS
+ + ", isAccelerating=" + isAccelerating
+ ", isFlat=" + isFlat
+ ", isSwinging=" + isSwinging
+ ", timeUntilSettledMS=" + remainingMS(now,
mPredictedRotationTimestampNanos + PROPOSAL_SETTLE_TIME_NANOS)
+ + ", timeUntilAccelerationDelayExpiredMS=" + remainingMS(now,
+ mAccelerationTimestampNanos + PROPOSAL_MIN_TIME_SINCE_ACCELERATION_ENDED_NANOS)
+ ", timeUntilFlatDelayExpiredMS=" + remainingMS(now,
mFlatTimestampNanos + PROPOSAL_MIN_TIME_SINCE_FLAT_ENDED_NANOS)
+ ", timeUntilSwingDelayExpiredMS=" + remainingMS(now,
@@ -528,7 +537,7 @@
// Tell the listener.
if (mProposedRotation != oldProposedRotation && mProposedRotation >= 0) {
- if (log) {
+ if (LOG) {
Slog.v(TAG, "Proposed rotation changed! proposedRotation=" + mProposedRotation
+ ", oldProposedRotation=" + oldProposedRotation);
}
@@ -618,6 +627,12 @@
return false;
}
+ // The last acceleration state must have been sufficiently long ago.
+ if (now < mAccelerationTimestampNanos
+ + PROPOSAL_MIN_TIME_SINCE_ACCELERATION_ENDED_NANOS) {
+ return false;
+ }
+
// Looks good!
return true;
}
@@ -627,6 +642,7 @@
mProposedRotation = -1;
mFlatTimestampNanos = Long.MIN_VALUE;
mSwingTimestampNanos = Long.MIN_VALUE;
+ mAccelerationTimestampNanos = Long.MIN_VALUE;
clearPredictedRotation();
clearTiltHistory();
}
@@ -643,6 +659,11 @@
}
}
+ private boolean isAccelerating(float magnitude) {
+ return magnitude < MIN_ACCELERATION_MAGNITUDE
+ || magnitude > MAX_ACCELERATION_MAGNITUDE;
+ }
+
private void clearTiltHistory() {
mTiltHistoryTimestampNanos[0] = Long.MIN_VALUE;
mTiltHistoryIndex = 1;
diff --git a/core/java/android/view/accessibility/AccessibilityEvent.java b/core/java/android/view/accessibility/AccessibilityEvent.java
index f70ffa9..1a2a194 100644
--- a/core/java/android/view/accessibility/AccessibilityEvent.java
+++ b/core/java/android/view/accessibility/AccessibilityEvent.java
@@ -236,12 +236,19 @@
* <li>{@link #getClassName()} - The class name of the source.</li>
* <li>{@link #getPackageName()} - The package name of the source.</li>
* <li>{@link #getEventTime()} - The event time.</li>
- * <li>{@link #getText()} - The text of the current text at the movement granularity.</li>
+ * <li>{@link #getMovementGranularity()} - Sets the granularity at which a view's text
+ * was traversed.</li>
+ * <li>{@link #getText()} - The text of the source's sub-tree.</li>
+ * <li>{@link #getFromIndex()} - The start of the next/previous text at the specified granularity
+ * - inclusive.</li>
+ * <li>{@link #getToIndex()} - The end of the next/previous text at the specified granularity
+ * - exclusive.</li>
* <li>{@link #isPassword()} - Whether the source is password.</li>
* <li>{@link #isEnabled()} - Whether the source is enabled.</li>
* <li>{@link #getContentDescription()} - The content description of the source.</li>
* <li>{@link #getMovementGranularity()} - Sets the granularity at which a view's text
* was traversed.</li>
+ * <li>{@link #getAction()} - Gets traversal action which specifies the direction.</li>
* </ul>
* </p>
* <p>
@@ -635,6 +642,7 @@
private CharSequence mPackageName;
private long mEventTime;
int mMovementGranularity;
+ int mAction;
private final ArrayList<AccessibilityRecord> mRecords = new ArrayList<AccessibilityRecord>();
@@ -653,6 +661,7 @@
super.init(event);
mEventType = event.mEventType;
mMovementGranularity = event.mMovementGranularity;
+ mAction = event.mAction;
mEventTime = event.mEventTime;
mPackageName = event.mPackageName;
}
@@ -791,6 +800,27 @@
}
/**
+ * Sets the performed action that triggered this event.
+ *
+ * @param action The action.
+ *
+ * @throws IllegalStateException If called from an AccessibilityService.
+ */
+ public void setAction(int action) {
+ enforceNotSealed();
+ mAction = action;
+ }
+
+ /**
+ * Gets the performed action that triggered this event.
+ *
+ * @return The action.
+ */
+ public int getAction() {
+ return mAction;
+ }
+
+ /**
* Returns a cached instance if such is available or a new one is
* instantiated with its type property set.
*
@@ -879,6 +909,7 @@
super.clear();
mEventType = 0;
mMovementGranularity = 0;
+ mAction = 0;
mPackageName = null;
mEventTime = 0;
while (!mRecords.isEmpty()) {
@@ -896,6 +927,7 @@
mSealed = (parcel.readInt() == 1);
mEventType = parcel.readInt();
mMovementGranularity = parcel.readInt();
+ mAction = parcel.readInt();
mPackageName = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(parcel);
mEventTime = parcel.readLong();
mConnectionId = parcel.readInt();
@@ -947,6 +979,7 @@
parcel.writeInt(isSealed() ? 1 : 0);
parcel.writeInt(mEventType);
parcel.writeInt(mMovementGranularity);
+ parcel.writeInt(mAction);
TextUtils.writeToParcel(mPackageName, parcel, 0);
parcel.writeLong(mEventTime);
parcel.writeInt(mConnectionId);
@@ -1004,6 +1037,7 @@
builder.append("; EventTime: ").append(mEventTime);
builder.append("; PackageName: ").append(mPackageName);
builder.append("; MovementGranularity: ").append(mMovementGranularity);
+ builder.append("; Action: ").append(mAction);
builder.append(super.toString());
if (DEBUG) {
builder.append("\n");
diff --git a/core/java/android/view/accessibility/AccessibilityNodeInfo.java b/core/java/android/view/accessibility/AccessibilityNodeInfo.java
index 36295e1..6b14ba5 100644
--- a/core/java/android/view/accessibility/AccessibilityNodeInfo.java
+++ b/core/java/android/view/accessibility/AccessibilityNodeInfo.java
@@ -102,12 +102,12 @@
public static final int ACTION_CLEAR_SELECTION = 0x00000008;
/**
- * Action that long clicks on the node info.
+ * Action that clicks on the node info.
*/
public static final int ACTION_CLICK = 0x00000010;
/**
- * Action that clicks on the node.
+ * Action that long clicks on the node.
*/
public static final int ACTION_LONG_CLICK = 0x00000020;
diff --git a/core/java/android/view/inputmethod/InputMethodSubtype.java b/core/java/android/view/inputmethod/InputMethodSubtype.java
index c22750e..b7c94a3 100644
--- a/core/java/android/view/inputmethod/InputMethodSubtype.java
+++ b/core/java/android/view/inputmethod/InputMethodSubtype.java
@@ -58,7 +58,7 @@
private final String mSubtypeLocale;
private final String mSubtypeMode;
private final String mSubtypeExtraValue;
- private HashMap<String, String> mExtraValueHashMapCache;
+ private volatile HashMap<String, String> mExtraValueHashMapCache;
/**
* Constructor.
@@ -237,18 +237,22 @@
private HashMap<String, String> getExtraValueHashMap() {
if (mExtraValueHashMapCache == null) {
- mExtraValueHashMapCache = new HashMap<String, String>();
- final String[] pairs = mSubtypeExtraValue.split(EXTRA_VALUE_PAIR_SEPARATOR);
- final int N = pairs.length;
- for (int i = 0; i < N; ++i) {
- final String[] pair = pairs[i].split(EXTRA_VALUE_KEY_VALUE_SEPARATOR);
- if (pair.length == 1) {
- mExtraValueHashMapCache.put(pair[0], null);
- } else if (pair.length > 1) {
- if (pair.length > 2) {
- Slog.w(TAG, "ExtraValue has two or more '='s");
+ synchronized(this) {
+ if (mExtraValueHashMapCache == null) {
+ mExtraValueHashMapCache = new HashMap<String, String>();
+ final String[] pairs = mSubtypeExtraValue.split(EXTRA_VALUE_PAIR_SEPARATOR);
+ final int N = pairs.length;
+ for (int i = 0; i < N; ++i) {
+ final String[] pair = pairs[i].split(EXTRA_VALUE_KEY_VALUE_SEPARATOR);
+ if (pair.length == 1) {
+ mExtraValueHashMapCache.put(pair[0], null);
+ } else if (pair.length > 1) {
+ if (pair.length > 2) {
+ Slog.w(TAG, "ExtraValue has two or more '='s");
+ }
+ mExtraValueHashMapCache.put(pair[0], pair[1]);
+ }
}
- mExtraValueHashMapCache.put(pair[0], pair[1]);
}
}
}
diff --git a/core/java/android/webkit/BrowserFrame.java b/core/java/android/webkit/BrowserFrame.java
index c169de4..fe812af 100644
--- a/core/java/android/webkit/BrowserFrame.java
+++ b/core/java/android/webkit/BrowserFrame.java
@@ -56,6 +56,8 @@
import java.util.Set;
import org.apache.harmony.security.provider.cert.X509CertImpl;
+import org.apache.harmony.xnet.provider.jsse.OpenSSLDSAPrivateKey;
+import org.apache.harmony.xnet.provider.jsse.OpenSSLRSAPrivateKey;
class BrowserFrame extends Handler {
@@ -1104,12 +1106,23 @@
SslClientCertLookupTable table = SslClientCertLookupTable.getInstance();
if (table.IsAllowed(hostAndPort)) {
// previously allowed
- nativeSslClientCert(handle,
- table.PrivateKey(hostAndPort),
- table.CertificateChain(hostAndPort));
+ PrivateKey pkey = table.PrivateKey(hostAndPort);
+ if (pkey instanceof OpenSSLRSAPrivateKey) {
+ nativeSslClientCert(handle,
+ ((OpenSSLRSAPrivateKey)pkey).getPkeyContext(),
+ table.CertificateChain(hostAndPort));
+ } else if (pkey instanceof OpenSSLDSAPrivateKey) {
+ nativeSslClientCert(handle,
+ ((OpenSSLDSAPrivateKey)pkey).getPkeyContext(),
+ table.CertificateChain(hostAndPort));
+ } else {
+ nativeSslClientCert(handle,
+ pkey.getEncoded(),
+ table.CertificateChain(hostAndPort));
+ }
} else if (table.IsDenied(hostAndPort)) {
// previously denied
- nativeSslClientCert(handle, null, null);
+ nativeSslClientCert(handle, 0, null);
} else {
// previously ignored or new
mCallbackProxy.onReceivedClientCertRequest(
@@ -1296,7 +1309,11 @@
private native void nativeSslCertErrorCancel(int handle, int certError);
native void nativeSslClientCert(int handle,
- byte[] pkcs8EncodedPrivateKey,
+ int ctx,
+ byte[][] asn1DerEncodedCertificateChain);
+
+ native void nativeSslClientCert(int handle,
+ byte[] pkey,
byte[][] asn1DerEncodedCertificateChain);
/**
diff --git a/core/java/android/webkit/ClientCertRequestHandler.java b/core/java/android/webkit/ClientCertRequestHandler.java
index f862613..6570a9b8 100644
--- a/core/java/android/webkit/ClientCertRequestHandler.java
+++ b/core/java/android/webkit/ClientCertRequestHandler.java
@@ -21,6 +21,8 @@
import java.security.cert.CertificateEncodingException;
import java.security.cert.X509Certificate;
import org.apache.harmony.xnet.provider.jsse.NativeCrypto;
+import org.apache.harmony.xnet.provider.jsse.OpenSSLDSAPrivateKey;
+import org.apache.harmony.xnet.provider.jsse.OpenSSLRSAPrivateKey;
/**
* ClientCertRequestHandler: class responsible for handling client
@@ -50,20 +52,23 @@
* Proceed with the specified private key and client certificate chain.
*/
public void proceed(PrivateKey privateKey, X509Certificate[] chain) {
- final byte[] privateKeyBytes = privateKey.getEncoded();
- final byte[][] chainBytes;
try {
- chainBytes = NativeCrypto.encodeCertificates(chain);
- mTable.Allow(mHostAndPort, privateKeyBytes, chainBytes);
- post(new Runnable() {
- public void run() {
- mBrowserFrame.nativeSslClientCert(mHandle, privateKeyBytes, chainBytes);
- }
- });
+ byte[][] chainBytes = NativeCrypto.encodeCertificates(chain);
+ mTable.Allow(mHostAndPort, privateKey, chainBytes);
+
+ if (privateKey instanceof OpenSSLRSAPrivateKey) {
+ setSslClientCertFromCtx(((OpenSSLRSAPrivateKey)privateKey).getPkeyContext(),
+ chainBytes);
+ } else if (privateKey instanceof OpenSSLDSAPrivateKey) {
+ setSslClientCertFromCtx(((OpenSSLDSAPrivateKey)privateKey).getPkeyContext(),
+ chainBytes);
+ } else {
+ setSslClientCertFromPKCS8(privateKey.getEncoded(),chainBytes);
+ }
} catch (CertificateEncodingException e) {
post(new Runnable() {
public void run() {
- mBrowserFrame.nativeSslClientCert(mHandle, null, null);
+ mBrowserFrame.nativeSslClientCert(mHandle, 0, null);
return;
}
});
@@ -71,12 +76,34 @@
}
/**
+ * Proceed with the specified private key bytes and client certificate chain.
+ */
+ private void setSslClientCertFromCtx(final int ctx, final byte[][] chainBytes) {
+ post(new Runnable() {
+ public void run() {
+ mBrowserFrame.nativeSslClientCert(mHandle, ctx, chainBytes);
+ }
+ });
+ }
+
+ /**
+ * Proceed with the specified private key context and client certificate chain.
+ */
+ private void setSslClientCertFromPKCS8(final byte[] key, final byte[][] chainBytes) {
+ post(new Runnable() {
+ public void run() {
+ mBrowserFrame.nativeSslClientCert(mHandle, key, chainBytes);
+ }
+ });
+ }
+
+ /**
* Igore the request for now, the user may be prompted again.
*/
public void ignore() {
post(new Runnable() {
public void run() {
- mBrowserFrame.nativeSslClientCert(mHandle, null, null);
+ mBrowserFrame.nativeSslClientCert(mHandle, 0, null);
}
});
}
@@ -88,7 +115,7 @@
mTable.Deny(mHostAndPort);
post(new Runnable() {
public void run() {
- mBrowserFrame.nativeSslClientCert(mHandle, null, null);
+ mBrowserFrame.nativeSslClientCert(mHandle, 0, null);
}
});
}
diff --git a/core/java/android/webkit/SslClientCertLookupTable.java b/core/java/android/webkit/SslClientCertLookupTable.java
index 630debd..c52b7e8 100644
--- a/core/java/android/webkit/SslClientCertLookupTable.java
+++ b/core/java/android/webkit/SslClientCertLookupTable.java
@@ -16,6 +16,7 @@
package android.webkit;
+import java.security.PrivateKey;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
@@ -26,7 +27,7 @@
*/
final class SslClientCertLookupTable {
private static SslClientCertLookupTable sTable;
- private final Map<String, byte[]> privateKeys;
+ private final Map<String, PrivateKey> privateKeys;
private final Map<String, byte[][]> certificateChains;
private final Set<String> denied;
@@ -38,12 +39,12 @@
}
private SslClientCertLookupTable() {
- privateKeys = new HashMap<String, byte[]>();
+ privateKeys = new HashMap<String, PrivateKey>();
certificateChains = new HashMap<String, byte[][]>();
denied = new HashSet<String>();
}
- public void Allow(String host_and_port, byte[] privateKey, byte[][] chain) {
+ public void Allow(String host_and_port, PrivateKey privateKey, byte[][] chain) {
privateKeys.put(host_and_port, privateKey);
certificateChains.put(host_and_port, chain);
denied.remove(host_and_port);
@@ -63,7 +64,7 @@
return denied.contains(host_and_port);
}
- public byte[] PrivateKey(String host_and_port) {
+ public PrivateKey PrivateKey(String host_and_port) {
return privateKeys.get(host_and_port);
}
diff --git a/core/java/android/webkit/WebHistoryItem.java b/core/java/android/webkit/WebHistoryItem.java
index ccf3d6b..788d05c 100644
--- a/core/java/android/webkit/WebHistoryItem.java
+++ b/core/java/android/webkit/WebHistoryItem.java
@@ -32,12 +32,8 @@
private static int sNextId = 0;
// Unique identifier.
private final int mId;
- // The title of this item's document.
- private String mTitle;
- // The base url of this item.
- private String mUrl;
- // The original requested url of this item.
- private String mOriginalUrl;
+ // A point to a native WebHistoryItem instance which contains the actual data
+ private int mNativeBridge;
// The favicon for this item.
private Bitmap mFavicon;
// The pre-flattened data used for saving the state.
@@ -55,10 +51,19 @@
* Basic constructor that assigns a unique id to the item. Called by JNI
* only.
*/
- private WebHistoryItem() {
+ private WebHistoryItem(int nativeBridge) {
synchronized (WebHistoryItem.class) {
mId = sNextId++;
}
+ mNativeBridge = nativeBridge;
+ nativeRef(mNativeBridge);
+ }
+
+ protected void finalize() throws Throwable {
+ if (mNativeBridge != 0) {
+ nativeUnref(mNativeBridge);
+ mNativeBridge = 0;
+ }
}
/**
@@ -66,7 +71,6 @@
* @param data The pre-flattened data coming from restoreState.
*/
/*package*/ WebHistoryItem(byte[] data) {
- mUrl = null; // This will be updated natively
mFlattenedData = data;
synchronized (WebHistoryItem.class) {
mId = sNextId++;
@@ -78,12 +82,14 @@
* @param item The history item to clone.
*/
private WebHistoryItem(WebHistoryItem item) {
- mUrl = item.mUrl;
- mTitle = item.mTitle;
mFlattenedData = item.mFlattenedData;
- mFavicon = item.mFavicon;
mId = item.mId;
-}
+ mFavicon = item.mFavicon;
+ mNativeBridge = item.mNativeBridge;
+ if (mNativeBridge != 0) {
+ nativeRef(mNativeBridge);
+ }
+ }
/**
* Return an identifier for this history item. If an item is a copy of
@@ -106,7 +112,8 @@
* to synchronize this method.
*/
public String getUrl() {
- return mUrl;
+ if (mNativeBridge == 0) return null;
+ return nativeGetUrl(mNativeBridge);
}
/**
@@ -116,7 +123,8 @@
* @return The original url of this history item.
*/
public String getOriginalUrl() {
- return mOriginalUrl;
+ if (mNativeBridge == 0) return null;
+ return nativeGetOriginalUrl(mNativeBridge);
}
/**
@@ -126,7 +134,8 @@
* to synchronize this method.
*/
public String getTitle() {
- return mTitle;
+ if (mNativeBridge == 0) return null;
+ return nativeGetTitle(mNativeBridge);
}
/**
@@ -136,6 +145,9 @@
* to synchronize this method.
*/
public Bitmap getFavicon() {
+ if (mFavicon == null && mNativeBridge != 0) {
+ mFavicon = nativeGetFavicon(mNativeBridge);
+ }
return mFavicon;
}
@@ -156,7 +168,7 @@
}
try {
- URL url = new URL(mOriginalUrl);
+ URL url = new URL(getOriginalUrl());
mTouchIconUrlServerDefault = new URL(url.getProtocol(), url.getHost(), url.getPort(),
"/apple-touch-icon.png").toString();
} catch (MalformedURLException e) {
@@ -214,6 +226,9 @@
* to synchronize this method.
*/
/*package*/ byte[] getFlattenedData() {
+ if (mNativeBridge != 0) {
+ return nativeGetFlattenedData(mNativeBridge);
+ }
return mFlattenedData;
}
@@ -223,7 +238,8 @@
* to synchronize this method.
*/
/*package*/ void inflate(int nativeFrame) {
- inflate(nativeFrame, mFlattenedData);
+ mNativeBridge = inflate(nativeFrame, mFlattenedData);
+ mFlattenedData = null;
}
/**
@@ -235,15 +251,13 @@
/* Natively inflate this item, this method is called in the WebCore thread.
*/
- private native void inflate(int nativeFrame, byte[] data);
+ private native int inflate(int nativeFrame, byte[] data);
+ private native void nativeRef(int nptr);
+ private native void nativeUnref(int nptr);
+ private native String nativeGetTitle(int nptr);
+ private native String nativeGetUrl(int nptr);
+ private native String nativeGetOriginalUrl(int nptr);
+ private native byte[] nativeGetFlattenedData(int nptr);
+ private native Bitmap nativeGetFavicon(int nptr);
- /* Called by jni when the item is updated */
- private void update(String url, String originalUrl, String title,
- Bitmap favicon, byte[] data) {
- mUrl = url;
- mOriginalUrl = originalUrl;
- mTitle = title;
- mFavicon = favicon;
- mFlattenedData = data;
- }
}
diff --git a/core/java/android/webkit/WebViewClassic.java b/core/java/android/webkit/WebViewClassic.java
index dcc99d8..92143203 100644
--- a/core/java/android/webkit/WebViewClassic.java
+++ b/core/java/android/webkit/WebViewClassic.java
@@ -149,24 +149,6 @@
@SuppressWarnings("deprecation")
public final class WebViewClassic implements WebViewProvider, WebViewProvider.ScrollDelegate,
WebViewProvider.ViewDelegate {
- private class InnerGlobalLayoutListener implements ViewTreeObserver.OnGlobalLayoutListener {
- @Override
- public void onGlobalLayout() {
- if (mWebView.isShown()) {
- setInvScreenRect();
- }
- }
- }
-
- private class InnerScrollChangedListener implements ViewTreeObserver.OnScrollChangedListener {
- @Override
- public void onScrollChanged() {
- if (mWebView.isShown()) {
- setInvScreenRect();
- }
- }
- }
-
/**
* InputConnection used for ContentEditable. This captures changes
* to the text and sends them either as key strokes or text changes.
@@ -617,12 +599,6 @@
}
}
- // The listener to capture global layout change event.
- private InnerGlobalLayoutListener mGlobalLayoutListener = null;
-
- // The listener to capture scroll event.
- private InnerScrollChangedListener mScrollChangedListener = null;
-
// if AUTO_REDRAW_HACK is true, then the CALL key will toggle redrawing
// the screen all-the-time. Good for profiling our drawing code
static private final boolean AUTO_REDRAW_HACK = false;
@@ -647,7 +623,7 @@
private final Rect mInvScreenRect = new Rect();
private final Rect mScreenRect = new Rect();
private final RectF mVisibleContentRect = new RectF();
- private boolean mGLViewportEmpty = false;
+ private boolean mIsWebViewVisible = true;
WebViewInputConnection mInputConnection = null;
private int mFieldPointer;
private PastePopupWindow mPasteWindow;
@@ -2979,7 +2955,10 @@
// updated when we get out of that mode.
if (!mDrawHistory) {
// repin our scroll, taking into account the new content size
- updateScrollCoordinates(pinLocX(getScrollX()), pinLocY(getScrollY()));
+ if (updateScrollCoordinates(pinLocX(getScrollX()),
+ pinLocY(getScrollY()))) {
+ invalidate();
+ }
if (!mScroller.isFinished()) {
// We are in the middle of a scroll. Repin the final scroll
// position.
@@ -3050,21 +3029,14 @@
r.bottom = viewToContentY(r.bottom);
}
- private Rect mContentVisibleRect = new Rect();
+ private final Rect mTempContentVisibleRect = new Rect();
// Sets r to be our visible rectangle in content coordinates. We use this
// method on the native side to compute the position of the fixed layers.
// Uses floating coordinates (necessary to correctly place elements when
// the scale factor is not 1)
private void calcOurContentVisibleRectF(RectF r) {
- calcOurVisibleRect(mContentVisibleRect);
- r.left = viewToContentXf(mContentVisibleRect.left) / mWebView.getScaleX();
- // viewToContentY will remove the total height of the title bar. Add
- // the visible height back in to account for the fact that if the title
- // bar is partially visible, the part of the visible rect which is
- // displaying our content is displaced by that amount.
- r.top = viewToContentYf(mContentVisibleRect.top + getVisibleTitleHeightImpl()) / mWebView.getScaleY();
- r.right = viewToContentXf(mContentVisibleRect.right) / mWebView.getScaleX();
- r.bottom = viewToContentYf(mContentVisibleRect.bottom) / mWebView.getScaleY();
+ calcOurVisibleRect(mTempContentVisibleRect);
+ viewToContentVisibleRect(r, mTempContentVisibleRect);
}
static class ViewSizeData {
@@ -4224,8 +4196,8 @@
calcOurContentVisibleRectF(mVisibleContentRect);
if (canvas.isHardwareAccelerated()) {
- Rect invScreenRect = mGLViewportEmpty ? null : mInvScreenRect;
- Rect screenRect = mGLViewportEmpty ? null : mScreenRect;
+ Rect invScreenRect = mIsWebViewVisible ? mInvScreenRect : null;
+ Rect screenRect = mIsWebViewVisible ? mScreenRect : null;
int functor = nativeCreateDrawGLFunction(mNativeClass, invScreenRect,
screenRect, mVisibleContentRect, getScale(), extras);
@@ -5405,15 +5377,6 @@
@Override
public void onAttachedToWindow() {
if (mWebView.hasWindowFocus()) setActive(true);
- final ViewTreeObserver treeObserver = mWebView.getViewTreeObserver();
- if (mGlobalLayoutListener == null) {
- mGlobalLayoutListener = new InnerGlobalLayoutListener();
- treeObserver.addOnGlobalLayoutListener(mGlobalLayoutListener);
- }
- if (mScrollChangedListener == null) {
- mScrollChangedListener = new InnerScrollChangedListener();
- treeObserver.addOnScrollChangedListener(mScrollChangedListener);
- }
addAccessibilityApisToJavaScript();
@@ -5426,16 +5389,6 @@
mZoomManager.dismissZoomPicker();
if (mWebView.hasWindowFocus()) setActive(false);
- final ViewTreeObserver treeObserver = mWebView.getViewTreeObserver();
- if (mGlobalLayoutListener != null) {
- treeObserver.removeGlobalOnLayoutListener(mGlobalLayoutListener);
- mGlobalLayoutListener = null;
- }
- if (mScrollChangedListener != null) {
- treeObserver.removeOnScrollChangedListener(mScrollChangedListener);
- mScrollChangedListener = null;
- }
-
removeAccessibilityApisFromJavaScript();
updateHwAccelerated();
@@ -5547,11 +5500,18 @@
}
}
- void setInvScreenRect() {
+ // updateRectsForGL() happens almost every draw call, in order to avoid creating
+ // any object in this code path, we move the local variable out to be a private
+ // final member, and we marked them as mTemp*.
+ private final Point mTempVisibleRectOffset = new Point();
+ private final Rect mTempVisibleRect = new Rect();
+
+ void updateRectsForGL() {
// Use the getGlobalVisibleRect() to get the intersection among the parents
// visible == false means we're clipped - send a null rect down to indicate that
// we should not draw
- boolean visible = mWebView.getGlobalVisibleRect(mInvScreenRect);
+ boolean visible = mWebView.getGlobalVisibleRect(mTempVisibleRect, mTempVisibleRectOffset);
+ mInvScreenRect.set(mTempVisibleRect);
if (visible) {
// Then need to invert the Y axis, just for GL
View rootView = mWebView.getRootView();
@@ -5560,16 +5520,33 @@
int savedWebViewBottom = mInvScreenRect.bottom;
mInvScreenRect.bottom = rootViewHeight - mInvScreenRect.top - getVisibleTitleHeightImpl();
mInvScreenRect.top = rootViewHeight - savedWebViewBottom;
- mGLViewportEmpty = false;
+ mIsWebViewVisible = true;
} else {
- mGLViewportEmpty = true;
+ mIsWebViewVisible = false;
}
- calcOurContentVisibleRectF(mVisibleContentRect);
- nativeUpdateDrawGLFunction(mNativeClass, mGLViewportEmpty ? null : mInvScreenRect,
- mGLViewportEmpty ? null : mScreenRect,
+
+ mTempVisibleRect.offset(-mTempVisibleRectOffset.x, -mTempVisibleRectOffset.y);
+ viewToContentVisibleRect(mVisibleContentRect, mTempVisibleRect);
+
+ nativeUpdateDrawGLFunction(mNativeClass, mIsWebViewVisible ? mInvScreenRect : null,
+ mIsWebViewVisible ? mScreenRect : null,
mVisibleContentRect, getScale());
}
+ // Input : viewRect, rect in view/screen coordinate.
+ // Output: contentRect, rect in content/document coordinate.
+ private void viewToContentVisibleRect(RectF contentRect, Rect viewRect) {
+ contentRect.left = viewToContentXf(viewRect.left) / mWebView.getScaleX();
+ // viewToContentY will remove the total height of the title bar. Add
+ // the visible height back in to account for the fact that if the title
+ // bar is partially visible, the part of the visible rect which is
+ // displaying our content is displaced by that amount.
+ contentRect.top = viewToContentYf(viewRect.top + getVisibleTitleHeightImpl())
+ / mWebView.getScaleY();
+ contentRect.right = viewToContentXf(viewRect.right) / mWebView.getScaleX();
+ contentRect.bottom = viewToContentYf(viewRect.bottom) / mWebView.getScaleY();
+ }
+
@Override
public boolean setFrame(int left, int top, int right, int bottom) {
boolean changed = mWebViewPrivate.super_setFrame(left, top, right, bottom);
@@ -5582,7 +5559,7 @@
// notify the WebKit about the new dimensions.
sendViewSizeZoom(false);
}
- setInvScreenRect();
+ updateRectsForGL();
return changed;
}
@@ -5753,6 +5730,7 @@
if (mInputDispatcher.postPointerEvent(ev, getScrollX(),
getScrollY() - getTitleHeight(), mZoomManager.getInvScale())) {
+ mInputDispatcher.dispatchUiEvents();
return true;
} else {
Log.w(LOGTAG, "mInputDispatcher rejected the event!");
@@ -6021,10 +5999,8 @@
}
if (deltaX * deltaX + deltaY * deltaY > mTouchSlopSquare) {
mHeldMotionless = MOTIONLESS_FALSE;
- nativeSetIsScrolling(true);
} else {
mHeldMotionless = MOTIONLESS_TRUE;
- nativeSetIsScrolling(false);
keepScrollBarsVisible = true;
}
diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java
index 449870e..a3b613b 100644
--- a/core/java/android/widget/AbsListView.java
+++ b/core/java/android/widget/AbsListView.java
@@ -3985,7 +3985,7 @@
}
class PositionScroller implements Runnable {
- private static final int SCROLL_DURATION = 400;
+ private static final int SCROLL_DURATION = 200;
private static final int MOVE_DOWN_POS = 1;
private static final int MOVE_UP_POS = 2;
@@ -4006,21 +4006,35 @@
mExtraScroll = ViewConfiguration.get(mContext).getScaledFadingEdgeLength();
}
- void start(int position) {
+ void start(final int position) {
stop();
+ final int childCount = getChildCount();
+ if (childCount == 0) {
+ // Can't scroll without children.
+ if (mDataChanged) {
+ // But we might have something in a minute.
+ post(new Runnable() {
+ @Override public void run() {
+ start(position);
+ }
+ });
+ }
+ return;
+ }
+
final int firstPos = mFirstPosition;
- final int lastPos = firstPos + getChildCount() - 1;
+ final int lastPos = firstPos + childCount - 1;
int viewTravelCount;
- if (position <= firstPos) {
+ if (position < firstPos) {
viewTravelCount = firstPos - position + 1;
mMode = MOVE_UP_POS;
- } else if (position >= lastPos) {
+ } else if (position > lastPos) {
viewTravelCount = position - lastPos + 1;
mMode = MOVE_DOWN_POS;
} else {
- // Already on screen, nothing to do
+ scrollToVisible(position, INVALID_POSITION, SCROLL_DURATION);
return;
}
@@ -4036,7 +4050,7 @@
postOnAnimation(this);
}
- void start(int position, int boundPosition) {
+ void start(final int position, final int boundPosition) {
stop();
if (boundPosition == INVALID_POSITION) {
@@ -4044,11 +4058,25 @@
return;
}
+ final int childCount = getChildCount();
+ if (childCount == 0) {
+ // Can't scroll without children.
+ if (mDataChanged) {
+ // But we might have something in a minute.
+ post(new Runnable() {
+ @Override public void run() {
+ start(position, boundPosition);
+ }
+ });
+ }
+ return;
+ }
+
final int firstPos = mFirstPosition;
- final int lastPos = firstPos + getChildCount() - 1;
+ final int lastPos = firstPos + childCount - 1;
int viewTravelCount;
- if (position <= firstPos) {
+ if (position < firstPos) {
final int boundPosFromLast = lastPos - boundPosition;
if (boundPosFromLast < 1) {
// Moving would shift our bound position off the screen. Abort.
@@ -4064,7 +4092,7 @@
viewTravelCount = posTravel;
mMode = MOVE_UP_POS;
}
- } else if (position >= lastPos) {
+ } else if (position > lastPos) {
final int boundPosFromFirst = boundPosition - firstPos;
if (boundPosFromFirst < 1) {
// Moving would shift our bound position off the screen. Abort.
@@ -4081,7 +4109,7 @@
mMode = MOVE_DOWN_POS;
}
} else {
- // Already on screen, nothing to do
+ scrollToVisible(position, boundPosition, SCROLL_DURATION);
return;
}
@@ -4137,6 +4165,60 @@
postOnAnimation(this);
}
+ /**
+ * Scroll such that targetPos is in the visible padded region without scrolling
+ * boundPos out of view. Assumes targetPos is onscreen.
+ */
+ void scrollToVisible(int targetPos, int boundPos, int duration) {
+ final int firstPos = mFirstPosition;
+ final int childCount = getChildCount();
+ final int lastPos = firstPos + childCount - 1;
+ final int paddedTop = mListPadding.top;
+ final int paddedBottom = getHeight() - mListPadding.bottom;
+
+ if (targetPos < firstPos || targetPos > lastPos) {
+ Log.w(TAG, "scrollToVisible called with targetPos " + targetPos +
+ " not visible [" + firstPos + ", " + lastPos + "]");
+ }
+ if (boundPos < firstPos || boundPos > lastPos) {
+ // boundPos doesn't matter, it's already offscreen.
+ boundPos = INVALID_POSITION;
+ }
+
+ final View targetChild = getChildAt(targetPos - firstPos);
+ final int targetTop = targetChild.getTop();
+ final int targetBottom = targetChild.getBottom();
+ int scrollBy = 0;
+
+ if (targetBottom > paddedBottom) {
+ scrollBy = targetBottom - paddedBottom;
+ }
+ if (targetTop < paddedTop) {
+ scrollBy = targetTop - paddedTop;
+ }
+
+ if (scrollBy == 0) {
+ return;
+ }
+
+ if (boundPos >= 0) {
+ final View boundChild = getChildAt(boundPos - firstPos);
+ final int boundTop = boundChild.getTop();
+ final int boundBottom = boundChild.getBottom();
+ final int absScroll = Math.abs(scrollBy);
+
+ if (scrollBy < 0 && boundBottom + absScroll > paddedBottom) {
+ // Don't scroll the bound view off the bottom of the screen.
+ scrollBy = Math.max(0, boundBottom - paddedBottom);
+ } else if (scrollBy > 0 && boundTop - absScroll < paddedTop) {
+ // Don't scroll the bound view off the top of the screen.
+ scrollBy = Math.min(0, boundTop - paddedTop);
+ }
+ }
+
+ smoothScrollBy(scrollBy, duration);
+ }
+
void stop() {
removeCallbacks(this);
}
@@ -6217,6 +6299,16 @@
removeDetachedView(scrapPile.remove(size--), false);
}
}
+
+ if (mTransientStateViews != null) {
+ for (int i = 0; i < mTransientStateViews.size(); i++) {
+ final View v = mTransientStateViews.valueAt(i);
+ if (!v.hasTransientState()) {
+ mTransientStateViews.removeAt(i);
+ i--;
+ }
+ }
+ }
}
/**
diff --git a/core/java/android/widget/AccessibilityIterators.java b/core/java/android/widget/AccessibilityIterators.java
new file mode 100644
index 0000000..e800e8d
--- /dev/null
+++ b/core/java/android/widget/AccessibilityIterators.java
@@ -0,0 +1,219 @@
+/*
+ * Copyright (C) 2012 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.widget;
+
+import android.graphics.Rect;
+import android.text.Layout;
+import android.text.Spannable;
+import android.view.AccessibilityIterators.AbstractTextSegmentIterator;
+
+/**
+ * This class contains the implementation of text segment iterators
+ * for accessibility support.
+ */
+final class AccessibilityIterators {
+
+ static class LineTextSegmentIterator extends AbstractTextSegmentIterator {
+ private static LineTextSegmentIterator sLineInstance;
+
+ protected static final int DIRECTION_START = -1;
+ protected static final int DIRECTION_END = 1;
+
+ protected Layout mLayout;
+
+ public static LineTextSegmentIterator getInstance() {
+ if (sLineInstance == null) {
+ sLineInstance = new LineTextSegmentIterator();
+ }
+ return sLineInstance;
+ }
+
+ public void initialize(Spannable text, Layout layout) {
+ mText = text.toString();
+ mLayout = layout;
+ }
+
+ @Override
+ public int[] following(int offset) {
+ final int textLegth = mText.length();
+ if (textLegth <= 0) {
+ return null;
+ }
+ if (offset >= mText.length()) {
+ return null;
+ }
+ int nextLine = -1;
+ if (offset < 0) {
+ nextLine = mLayout.getLineForOffset(0);
+ } else {
+ final int currentLine = mLayout.getLineForOffset(offset);
+ if (currentLine < mLayout.getLineCount() - 1) {
+ nextLine = currentLine + 1;
+ }
+ }
+ if (nextLine < 0) {
+ return null;
+ }
+ final int start = getLineEdgeIndex(nextLine, DIRECTION_START);
+ final int end = getLineEdgeIndex(nextLine, DIRECTION_END) + 1;
+ return getRange(start, end);
+ }
+
+ @Override
+ public int[] preceding(int offset) {
+ final int textLegth = mText.length();
+ if (textLegth <= 0) {
+ return null;
+ }
+ if (offset <= 0) {
+ return null;
+ }
+ int previousLine = -1;
+ if (offset > mText.length()) {
+ previousLine = mLayout.getLineForOffset(mText.length());
+ } else {
+ final int currentLine = mLayout.getLineForOffset(offset - 1);
+ if (currentLine > 0) {
+ previousLine = currentLine - 1;
+ }
+ }
+ if (previousLine < 0) {
+ return null;
+ }
+ final int start = getLineEdgeIndex(previousLine, DIRECTION_START);
+ final int end = getLineEdgeIndex(previousLine, DIRECTION_END) + 1;
+ return getRange(start, end);
+ }
+
+ protected int getLineEdgeIndex(int lineNumber, int direction) {
+ final int paragraphDirection = mLayout.getParagraphDirection(lineNumber);
+ if (direction * paragraphDirection < 0) {
+ return mLayout.getLineStart(lineNumber);
+ } else {
+ return mLayout.getLineEnd(lineNumber) - 1;
+ }
+ }
+ }
+
+ static class PageTextSegmentIterator extends LineTextSegmentIterator {
+ private static PageTextSegmentIterator sPageInstance;
+
+ private TextView mView;
+
+ private final Rect mTempRect = new Rect();
+
+ public static PageTextSegmentIterator getInstance() {
+ if (sPageInstance == null) {
+ sPageInstance = new PageTextSegmentIterator();
+ }
+ return sPageInstance;
+ }
+
+ public void initialize(TextView view) {
+ super.initialize((Spannable) view.getIterableTextForAccessibility(), view.getLayout());
+ mView = view;
+ }
+
+ @Override
+ public int[] following(int offset) {
+ final int textLegth = mText.length();
+ if (textLegth <= 0) {
+ return null;
+ }
+ if (offset >= mText.length()) {
+ return null;
+ }
+ if (!mView.getGlobalVisibleRect(mTempRect)) {
+ return null;
+ }
+
+ final int currentLine = mLayout.getLineForOffset(offset);
+ final int currentLineTop = mLayout.getLineTop(currentLine);
+ final int pageHeight = mTempRect.height() - mView.getTotalPaddingTop()
+ - mView.getTotalPaddingBottom();
+
+ final int nextPageStartLine;
+ final int nextPageEndLine;
+ if (offset < 0) {
+ nextPageStartLine = currentLine;
+ final int nextPageEndY = currentLineTop + pageHeight;
+ nextPageEndLine = mLayout.getLineForVertical(nextPageEndY);
+ } else {
+ final int nextPageStartY = currentLineTop + pageHeight;
+ nextPageStartLine = mLayout.getLineForVertical(nextPageStartY) + 1;
+ if (mLayout.getLineTop(nextPageStartLine) <= nextPageStartY) {
+ return null;
+ }
+ final int nextPageEndY = nextPageStartY + pageHeight;
+ nextPageEndLine = mLayout.getLineForVertical(nextPageEndY);
+ }
+
+ final int start = getLineEdgeIndex(nextPageStartLine, DIRECTION_START);
+ final int end = getLineEdgeIndex(nextPageEndLine, DIRECTION_END) + 1;
+
+ return getRange(start, end);
+ }
+
+ @Override
+ public int[] preceding(int offset) {
+ final int textLegth = mText.length();
+ if (textLegth <= 0) {
+ return null;
+ }
+ if (offset <= 0) {
+ return null;
+ }
+ if (!mView.getGlobalVisibleRect(mTempRect)) {
+ return null;
+ }
+
+ final int currentLine = mLayout.getLineForOffset(offset);
+ final int currentLineTop = mLayout.getLineTop(currentLine);
+ final int pageHeight = mTempRect.height() - mView.getTotalPaddingTop()
+ - mView.getTotalPaddingBottom();
+
+ final int previousPageStartLine;
+ final int previousPageEndLine;
+ if (offset > mText.length()) {
+ final int prevousPageStartY = mLayout.getHeight() - pageHeight;
+ if (prevousPageStartY < 0) {
+ return null;
+ }
+ previousPageStartLine = mLayout.getLineForVertical(prevousPageStartY);
+ previousPageEndLine = mLayout.getLineCount() - 1;
+ } else {
+ final int prevousPageStartY;
+ if (offset == mText.length()) {
+ prevousPageStartY = mLayout.getHeight() - 2 * pageHeight;
+ } else {
+ prevousPageStartY = currentLineTop - 2 * pageHeight;
+ }
+ if (prevousPageStartY < 0) {
+ return null;
+ }
+ previousPageStartLine = mLayout.getLineForVertical(prevousPageStartY);
+ final int previousPageEndY = prevousPageStartY + pageHeight;
+ previousPageEndLine = mLayout.getLineForVertical(previousPageEndY) - 1;
+ }
+
+ final int start = getLineEdgeIndex(previousPageStartLine, DIRECTION_START);
+ final int end = getLineEdgeIndex(previousPageEndLine, DIRECTION_END) + 1;
+
+ return getRange(start, end);
+ }
+ }
+}
diff --git a/core/java/android/widget/ActivityChooserModel.java b/core/java/android/widget/ActivityChooserModel.java
index c53b5f6..c6104bc 100644
--- a/core/java/android/widget/ActivityChooserModel.java
+++ b/core/java/android/widget/ActivityChooserModel.java
@@ -23,7 +23,6 @@
import android.database.DataSetObservable;
import android.database.DataSetObserver;
import android.os.AsyncTask;
-import android.os.Handler;
import android.text.TextUtils;
import android.util.Log;
import android.util.Xml;
@@ -42,10 +41,8 @@
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
-import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
-import java.util.Set;
/**
* <p>
@@ -239,7 +236,7 @@
/**
* List of activities that can handle the current intent.
*/
- private final List<ActivityResolveInfo> mActivites = new ArrayList<ActivityResolveInfo>();
+ private final List<ActivityResolveInfo> mActivities = new ArrayList<ActivityResolveInfo>();
/**
* List with historical choice records.
@@ -278,18 +275,18 @@
/**
* Flag whether choice history can be read. In general many clients can
- * share the same data model and {@link #readHistoricalData()} may be called
+ * share the same data model and {@link #readHistoricalDataIfNeeded()} may be called
* by arbitrary of them any number of times. Therefore, this class guarantees
* that the very first read succeeds and subsequent reads can be performed
- * only after a call to {@link #persistHistoricalData()} followed by change
+ * only after a call to {@link #persistHistoricalDataIfNeeded()} followed by change
* of the share records.
*/
private boolean mCanReadHistoricalData = true;
/**
* Flag whether the choice history was read. This is used to enforce that
- * before calling {@link #persistHistoricalData()} a call to
- * {@link #persistHistoricalData()} has been made. This aims to avoid a
+ * before calling {@link #persistHistoricalDataIfNeeded()} a call to
+ * {@link #persistHistoricalDataIfNeeded()} has been made. This aims to avoid a
* scenario in which a choice history file exits, it is not read yet and
* it is overwritten. Note that always all historical records are read in
* full and the file is rewritten. This is necessary since we need to
@@ -299,16 +296,16 @@
/**
* Flag whether the choice records have changed. In general many clients can
- * share the same data model and {@link #persistHistoricalData()} may be called
+ * share the same data model and {@link #persistHistoricalDataIfNeeded()} may be called
* by arbitrary of them any number of times. Therefore, this class guarantees
* that choice history will be persisted only if it has changed.
*/
private boolean mHistoricalRecordsChanged = true;
/**
- * Hander for scheduling work on client tread.
+ * Flag whether to reload the activities for the current intent.
*/
- private final Handler mHandler = new Handler();
+ private boolean mReloadActivities = false;
/**
* Policy for controlling how the model handles chosen activities.
@@ -346,7 +343,6 @@
dataModel = new ActivityChooserModel(context, historyFileName);
sDataModelRegistry.put(historyFileName, dataModel);
}
- dataModel.readHistoricalData();
return dataModel;
}
}
@@ -383,7 +379,8 @@
return;
}
mIntent = intent;
- loadActivitiesLocked();
+ mReloadActivities = true;
+ ensureConsistentState();
}
}
@@ -407,7 +404,8 @@
*/
public int getActivityCount() {
synchronized (mInstanceLock) {
- return mActivites.size();
+ ensureConsistentState();
+ return mActivities.size();
}
}
@@ -421,7 +419,8 @@
*/
public ResolveInfo getActivity(int index) {
synchronized (mInstanceLock) {
- return mActivites.get(index).resolveInfo;
+ ensureConsistentState();
+ return mActivities.get(index).resolveInfo;
}
}
@@ -433,15 +432,18 @@
* @return The index if found, -1 otherwise.
*/
public int getActivityIndex(ResolveInfo activity) {
- List<ActivityResolveInfo> activities = mActivites;
- final int activityCount = activities.size();
- for (int i = 0; i < activityCount; i++) {
- ActivityResolveInfo currentActivity = activities.get(i);
- if (currentActivity.resolveInfo == activity) {
- return i;
+ synchronized (mInstanceLock) {
+ ensureConsistentState();
+ List<ActivityResolveInfo> activities = mActivities;
+ final int activityCount = activities.size();
+ for (int i = 0; i < activityCount; i++) {
+ ActivityResolveInfo currentActivity = activities.get(i);
+ if (currentActivity.resolveInfo == activity) {
+ return i;
+ }
}
+ return INVALID_INDEX;
}
- return INVALID_INDEX;
}
/**
@@ -462,30 +464,34 @@
* @see OnChooseActivityListener
*/
public Intent chooseActivity(int index) {
- ActivityResolveInfo chosenActivity = mActivites.get(index);
+ synchronized (mInstanceLock) {
+ ensureConsistentState();
- ComponentName chosenName = new ComponentName(
- chosenActivity.resolveInfo.activityInfo.packageName,
- chosenActivity.resolveInfo.activityInfo.name);
+ ActivityResolveInfo chosenActivity = mActivities.get(index);
- Intent choiceIntent = new Intent(mIntent);
- choiceIntent.setComponent(chosenName);
+ ComponentName chosenName = new ComponentName(
+ chosenActivity.resolveInfo.activityInfo.packageName,
+ chosenActivity.resolveInfo.activityInfo.name);
- if (mActivityChoserModelPolicy != null) {
- // Do not allow the policy to change the intent.
- Intent choiceIntentCopy = new Intent(choiceIntent);
- final boolean handled = mActivityChoserModelPolicy.onChooseActivity(this,
- choiceIntentCopy);
- if (handled) {
- return null;
+ Intent choiceIntent = new Intent(mIntent);
+ choiceIntent.setComponent(chosenName);
+
+ if (mActivityChoserModelPolicy != null) {
+ // Do not allow the policy to change the intent.
+ Intent choiceIntentCopy = new Intent(choiceIntent);
+ final boolean handled = mActivityChoserModelPolicy.onChooseActivity(this,
+ choiceIntentCopy);
+ if (handled) {
+ return null;
+ }
}
+
+ HistoricalRecord historicalRecord = new HistoricalRecord(chosenName,
+ System.currentTimeMillis(), DEFAULT_HISTORICAL_RECORD_WEIGHT);
+ addHisoricalRecord(historicalRecord);
+
+ return choiceIntent;
}
-
- HistoricalRecord historicalRecord = new HistoricalRecord(chosenName,
- System.currentTimeMillis(), DEFAULT_HISTORICAL_RECORD_WEIGHT);
- addHisoricalRecord(historicalRecord);
-
- return choiceIntent;
}
/**
@@ -494,7 +500,9 @@
* @param listener The listener.
*/
public void setOnChooseActivityListener(OnChooseActivityListener listener) {
- mActivityChoserModelPolicy = listener;
+ synchronized (mInstanceLock) {
+ mActivityChoserModelPolicy = listener;
+ }
}
/**
@@ -508,8 +516,9 @@
*/
public ResolveInfo getDefaultActivity() {
synchronized (mInstanceLock) {
- if (!mActivites.isEmpty()) {
- return mActivites.get(0).resolveInfo;
+ ensureConsistentState();
+ if (!mActivities.isEmpty()) {
+ return mActivities.get(0).resolveInfo;
}
}
return null;
@@ -526,72 +535,50 @@
* @param index The index of the activity to set as default.
*/
public void setDefaultActivity(int index) {
- ActivityResolveInfo newDefaultActivity = mActivites.get(index);
- ActivityResolveInfo oldDefaultActivity = mActivites.get(0);
-
- final float weight;
- if (oldDefaultActivity != null) {
- // Add a record with weight enough to boost the chosen at the top.
- weight = oldDefaultActivity.weight - newDefaultActivity.weight
- + DEFAULT_ACTIVITY_INFLATION;
- } else {
- weight = DEFAULT_HISTORICAL_RECORD_WEIGHT;
- }
-
- ComponentName defaultName = new ComponentName(
- newDefaultActivity.resolveInfo.activityInfo.packageName,
- newDefaultActivity.resolveInfo.activityInfo.name);
- HistoricalRecord historicalRecord = new HistoricalRecord(defaultName,
- System.currentTimeMillis(), weight);
- addHisoricalRecord(historicalRecord);
- }
-
- /**
- * Reads the history data from the backing file if the latter
- * was provided. Calling this method more than once before a call
- * to {@link #persistHistoricalData()} has been made has no effect.
- * <p>
- * <strong>Note:</strong> Historical data is read asynchronously and
- * as soon as the reading is completed any registered
- * {@link DataSetObserver}s will be notified. Also no historical
- * data is read until this method is invoked.
- * <p>
- */
- private void readHistoricalData() {
synchronized (mInstanceLock) {
- if (!mCanReadHistoricalData || !mHistoricalRecordsChanged) {
- return;
+ ensureConsistentState();
+
+ ActivityResolveInfo newDefaultActivity = mActivities.get(index);
+ ActivityResolveInfo oldDefaultActivity = mActivities.get(0);
+
+ final float weight;
+ if (oldDefaultActivity != null) {
+ // Add a record with weight enough to boost the chosen at the top.
+ weight = oldDefaultActivity.weight - newDefaultActivity.weight
+ + DEFAULT_ACTIVITY_INFLATION;
+ } else {
+ weight = DEFAULT_HISTORICAL_RECORD_WEIGHT;
}
- mCanReadHistoricalData = false;
- mReadShareHistoryCalled = true;
- if (!TextUtils.isEmpty(mHistoryFileName)) {
- AsyncTask.SERIAL_EXECUTOR.execute(new HistoryLoader());
- }
+
+ ComponentName defaultName = new ComponentName(
+ newDefaultActivity.resolveInfo.activityInfo.packageName,
+ newDefaultActivity.resolveInfo.activityInfo.name);
+ HistoricalRecord historicalRecord = new HistoricalRecord(defaultName,
+ System.currentTimeMillis(), weight);
+ addHisoricalRecord(historicalRecord);
}
}
/**
* Persists the history data to the backing file if the latter
- * was provided. Calling this method before a call to {@link #readHistoricalData()}
+ * was provided. Calling this method before a call to {@link #readHistoricalDataIfNeeded()}
* throws an exception. Calling this method more than one without choosing an
* activity has not effect.
*
* @throws IllegalStateException If this method is called before a call to
- * {@link #readHistoricalData()}.
+ * {@link #readHistoricalDataIfNeeded()}.
*/
- private void persistHistoricalData() {
- synchronized (mInstanceLock) {
- if (!mReadShareHistoryCalled) {
- throw new IllegalStateException("No preceding call to #readHistoricalData");
- }
- if (!mHistoricalRecordsChanged) {
- return;
- }
- mHistoricalRecordsChanged = false;
- mCanReadHistoricalData = true;
- if (!TextUtils.isEmpty(mHistoryFileName)) {
- AsyncTask.SERIAL_EXECUTOR.execute(new HistoryPersister());
- }
+ private void persistHistoricalDataIfNeeded() {
+ if (!mReadShareHistoryCalled) {
+ throw new IllegalStateException("No preceding call to #readHistoricalData");
+ }
+ if (!mHistoricalRecordsChanged) {
+ return;
+ }
+ mHistoricalRecordsChanged = false;
+ if (!TextUtils.isEmpty(mHistoryFileName)) {
+ new PersistHistoryAsyncTask().executeOnExecutor(AsyncTask.SERIAL_EXECUTOR,
+ new ArrayList<HistoricalRecord>(mHistoricalRecords), mHistoryFileName);
}
}
@@ -608,21 +595,7 @@
return;
}
mActivitySorter = activitySorter;
- sortActivities();
- }
- }
-
- /**
- * Sorts the activities based on history and an intent. If
- * a sorter is not specified this a default implementation is used.
- *
- * @see #setActivitySorter(ActivitySorter)
- */
- private void sortActivities() {
- synchronized (mInstanceLock) {
- if (mActivitySorter != null && !mActivites.isEmpty()) {
- mActivitySorter.sort(mIntent, mActivites,
- Collections.unmodifiableList(mHistoricalRecords));
+ if (sortActivitiesIfNeeded()) {
notifyChanged();
}
}
@@ -647,8 +620,10 @@
return;
}
mHistoryMaxSize = historyMaxSize;
- pruneExcessiveHistoricalRecordsLocked();
- sortActivities();
+ pruneExcessiveHistoricalRecordsIfNeeded();
+ if (sortActivitiesIfNeeded()) {
+ notifyChanged();
+ }
}
}
@@ -670,6 +645,7 @@
*/
public int getHistorySize() {
synchronized (mInstanceLock) {
+ ensureConsistentState();
return mHistoricalRecords.size();
}
}
@@ -681,36 +657,107 @@
}
/**
+ * Ensures the model is in a consistent state which is the
+ * activities for the current intent have been loaded, the
+ * most recent history has been read, and the activities
+ * are sorted.
+ */
+ private void ensureConsistentState() {
+ boolean stateChanged = loadActivitiesIfNeeded();
+ stateChanged |= readHistoricalDataIfNeeded();
+ pruneExcessiveHistoricalRecordsIfNeeded();
+ if (stateChanged) {
+ sortActivitiesIfNeeded();
+ notifyChanged();
+ }
+ }
+
+ /**
+ * Sorts the activities if necessary which is if there is a
+ * sorter, there are some activities to sort, and there is some
+ * historical data.
+ *
+ * @return Whether sorting was performed.
+ */
+ private boolean sortActivitiesIfNeeded() {
+ if (mActivitySorter != null && mIntent != null
+ && !mActivities.isEmpty() && !mHistoricalRecords.isEmpty()) {
+ mActivitySorter.sort(mIntent, mActivities,
+ Collections.unmodifiableList(mHistoricalRecords));
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Loads the activities for the current intent if needed which is
+ * if they are not already loaded for the current intent.
+ *
+ * @return Whether loading was performed.
+ */
+ private boolean loadActivitiesIfNeeded() {
+ if (mReloadActivities && mIntent != null) {
+ mReloadActivities = false;
+ mActivities.clear();
+ List<ResolveInfo> resolveInfos = mContext.getPackageManager()
+ .queryIntentActivities(mIntent, 0);
+ final int resolveInfoCount = resolveInfos.size();
+ for (int i = 0; i < resolveInfoCount; i++) {
+ ResolveInfo resolveInfo = resolveInfos.get(i);
+ mActivities.add(new ActivityResolveInfo(resolveInfo));
+ }
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Reads the historical data if necessary which is it has
+ * changed, there is a history file, and there is not persist
+ * in progress.
+ *
+ * @return Whether reading was performed.
+ */
+ private boolean readHistoricalDataIfNeeded() {
+ if (mCanReadHistoricalData && mHistoricalRecordsChanged &&
+ !TextUtils.isEmpty(mHistoryFileName)) {
+ mCanReadHistoricalData = false;
+ mReadShareHistoryCalled = true;
+ readHistoricalDataImpl();
+ return true;
+ }
+ return false;
+ }
+
+ /**
* Adds a historical record.
*
* @param historicalRecord The record to add.
* @return True if the record was added.
*/
private boolean addHisoricalRecord(HistoricalRecord historicalRecord) {
- synchronized (mInstanceLock) {
- final boolean added = mHistoricalRecords.add(historicalRecord);
- if (added) {
- mHistoricalRecordsChanged = true;
- pruneExcessiveHistoricalRecordsLocked();
- persistHistoricalData();
- sortActivities();
- }
- return added;
+ final boolean added = mHistoricalRecords.add(historicalRecord);
+ if (added) {
+ mHistoricalRecordsChanged = true;
+ pruneExcessiveHistoricalRecordsIfNeeded();
+ persistHistoricalDataIfNeeded();
+ sortActivitiesIfNeeded();
+ notifyChanged();
}
+ return added;
}
/**
- * Prunes older excessive records to guarantee {@link #mHistoryMaxSize}.
+ * Prunes older excessive records to guarantee maxHistorySize.
*/
- private void pruneExcessiveHistoricalRecordsLocked() {
- List<HistoricalRecord> choiceRecords = mHistoricalRecords;
- final int pruneCount = choiceRecords.size() - mHistoryMaxSize;
+ private void pruneExcessiveHistoricalRecordsIfNeeded() {
+ final int pruneCount = mHistoricalRecords.size() - mHistoryMaxSize;
if (pruneCount <= 0) {
return;
}
mHistoricalRecordsChanged = true;
for (int i = 0; i < pruneCount; i++) {
- HistoricalRecord prunedRecord = choiceRecords.remove(0);
+ HistoricalRecord prunedRecord = mHistoricalRecords.remove(0);
if (DEBUG) {
Log.i(LOG_TAG, "Pruned: " + prunedRecord);
}
@@ -718,46 +765,13 @@
}
/**
- * Loads the activities.
- */
- private void loadActivitiesLocked() {
- mActivites.clear();
- if (mIntent != null) {
- List<ResolveInfo> resolveInfos =
- mContext.getPackageManager().queryIntentActivities(mIntent, 0);
- final int resolveInfoCount = resolveInfos.size();
- for (int i = 0; i < resolveInfoCount; i++) {
- ResolveInfo resolveInfo = resolveInfos.get(i);
- mActivites.add(new ActivityResolveInfo(resolveInfo));
- }
- sortActivities();
- } else {
- notifyChanged();
- }
- }
-
- /**
- * Prunes historical records for a package that goes away.
+ * Gets whether the given observer is already registered.
*
- * @param packageName The name of the package that goes away.
+ * @param observer The observer.
+ * @return True if already registered.
*/
- private void pruneHistoricalRecordsForPackageLocked(String packageName) {
- boolean recordsRemoved = false;
-
- List<HistoricalRecord> historicalRecords = mHistoricalRecords;
- for (int i = 0; i < historicalRecords.size(); i++) {
- HistoricalRecord historicalRecord = historicalRecords.get(i);
- String recordPackageName = historicalRecord.activity.getPackageName();
- if (recordPackageName.equals(packageName)) {
- historicalRecords.remove(historicalRecord);
- recordsRemoved = true;
- }
- }
-
- if (recordsRemoved) {
- mHistoricalRecordsChanged = true;
- sortActivities();
- }
+ public boolean isRegisteredObserver(DataSetObserver observer) {
+ return mObservers.contains(observer);
}
/**
@@ -964,112 +978,72 @@
/**
* Command for reading the historical records from a file off the UI thread.
*/
- private final class HistoryLoader implements Runnable {
-
- public void run() {
- FileInputStream fis = null;
- try {
- fis = mContext.openFileInput(mHistoryFileName);
- } catch (FileNotFoundException fnfe) {
- if (DEBUG) {
- Log.i(LOG_TAG, "Could not open historical records file: " + mHistoryFileName);
- }
- return;
+ private void readHistoricalDataImpl() {
+ FileInputStream fis = null;
+ try {
+ fis = mContext.openFileInput(mHistoryFileName);
+ } catch (FileNotFoundException fnfe) {
+ if (DEBUG) {
+ Log.i(LOG_TAG, "Could not open historical records file: " + mHistoryFileName);
}
- try {
- XmlPullParser parser = Xml.newPullParser();
- parser.setInput(fis, null);
+ return;
+ }
+ try {
+ XmlPullParser parser = Xml.newPullParser();
+ parser.setInput(fis, null);
- int type = XmlPullParser.START_DOCUMENT;
- while (type != XmlPullParser.END_DOCUMENT && type != XmlPullParser.START_TAG) {
- type = parser.next();
+ int type = XmlPullParser.START_DOCUMENT;
+ while (type != XmlPullParser.END_DOCUMENT && type != XmlPullParser.START_TAG) {
+ type = parser.next();
+ }
+
+ if (!TAG_HISTORICAL_RECORDS.equals(parser.getName())) {
+ throw new XmlPullParserException("Share records file does not start with "
+ + TAG_HISTORICAL_RECORDS + " tag.");
+ }
+
+ List<HistoricalRecord> historicalRecords = mHistoricalRecords;
+ historicalRecords.clear();
+
+ while (true) {
+ type = parser.next();
+ if (type == XmlPullParser.END_DOCUMENT) {
+ break;
+ }
+ if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) {
+ continue;
+ }
+ String nodeName = parser.getName();
+ if (!TAG_HISTORICAL_RECORD.equals(nodeName)) {
+ throw new XmlPullParserException("Share records file not well-formed.");
}
- if (!TAG_HISTORICAL_RECORDS.equals(parser.getName())) {
- throw new XmlPullParserException("Share records file does not start with "
- + TAG_HISTORICAL_RECORDS + " tag.");
- }
-
- List<HistoricalRecord> readRecords = new ArrayList<HistoricalRecord>();
-
- while (true) {
- type = parser.next();
- if (type == XmlPullParser.END_DOCUMENT) {
- break;
- }
- if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) {
- continue;
- }
- String nodeName = parser.getName();
- if (!TAG_HISTORICAL_RECORD.equals(nodeName)) {
- throw new XmlPullParserException("Share records file not well-formed.");
- }
-
- String activity = parser.getAttributeValue(null, ATTRIBUTE_ACTIVITY);
- final long time =
- Long.parseLong(parser.getAttributeValue(null, ATTRIBUTE_TIME));
- final float weight =
- Float.parseFloat(parser.getAttributeValue(null, ATTRIBUTE_WEIGHT));
-
- HistoricalRecord readRecord = new HistoricalRecord(activity, time,
- weight);
- readRecords.add(readRecord);
-
- if (DEBUG) {
- Log.i(LOG_TAG, "Read " + readRecord.toString());
- }
- }
+ String activity = parser.getAttributeValue(null, ATTRIBUTE_ACTIVITY);
+ final long time =
+ Long.parseLong(parser.getAttributeValue(null, ATTRIBUTE_TIME));
+ final float weight =
+ Float.parseFloat(parser.getAttributeValue(null, ATTRIBUTE_WEIGHT));
+ HistoricalRecord readRecord = new HistoricalRecord(activity, time, weight);
+ historicalRecords.add(readRecord);
if (DEBUG) {
- Log.i(LOG_TAG, "Read " + readRecords.size() + " historical records.");
+ Log.i(LOG_TAG, "Read " + readRecord.toString());
}
+ }
- synchronized (mInstanceLock) {
- Set<HistoricalRecord> uniqueShareRecords =
- new LinkedHashSet<HistoricalRecord>(readRecords);
-
- // Make sure no duplicates. Example: Read a file with
- // one record, add one record, persist the two records,
- // add a record, read the persisted records - the
- // read two records should not be added again.
- List<HistoricalRecord> historicalRecords = mHistoricalRecords;
- final int historicalRecordsCount = historicalRecords.size();
- for (int i = historicalRecordsCount - 1; i >= 0; i--) {
- HistoricalRecord historicalRecord = historicalRecords.get(i);
- uniqueShareRecords.add(historicalRecord);
- }
-
- if (historicalRecords.size() == uniqueShareRecords.size()) {
- return;
- }
-
- // Make sure the oldest records go to the end.
- historicalRecords.clear();
- historicalRecords.addAll(uniqueShareRecords);
-
- mHistoricalRecordsChanged = true;
-
- // Do this on the client thread since the client may be on the UI
- // thread, wait for data changes which happen during sorting, and
- // perform UI modification based on the data change.
- mHandler.post(new Runnable() {
- public void run() {
- pruneExcessiveHistoricalRecordsLocked();
- sortActivities();
- }
- });
- }
- } catch (XmlPullParserException xppe) {
- Log.e(LOG_TAG, "Error reading historical recrod file: " + mHistoryFileName, xppe);
- } catch (IOException ioe) {
- Log.e(LOG_TAG, "Error reading historical recrod file: " + mHistoryFileName, ioe);
- } finally {
- if (fis != null) {
- try {
- fis.close();
- } catch (IOException ioe) {
- /* ignore */
- }
+ if (DEBUG) {
+ Log.i(LOG_TAG, "Read " + historicalRecords.size() + " historical records.");
+ }
+ } catch (XmlPullParserException xppe) {
+ Log.e(LOG_TAG, "Error reading historical recrod file: " + mHistoryFileName, xppe);
+ } catch (IOException ioe) {
+ Log.e(LOG_TAG, "Error reading historical recrod file: " + mHistoryFileName, ioe);
+ } finally {
+ if (fis != null) {
+ try {
+ fis.close();
+ } catch (IOException ioe) {
+ /* ignore */
}
}
}
@@ -1078,21 +1052,21 @@
/**
* Command for persisting the historical records to a file off the UI thread.
*/
- private final class HistoryPersister implements Runnable {
+ private final class PersistHistoryAsyncTask extends AsyncTask<Object, Void, Void> {
- public void run() {
+ @Override
+ @SuppressWarnings("unchecked")
+ public Void doInBackground(Object... args) {
+ List<HistoricalRecord> historicalRecords = (List<HistoricalRecord>) args[0];
+ String hostoryFileName = (String) args[1];
+
FileOutputStream fos = null;
- List<HistoricalRecord> records = null;
-
- synchronized (mInstanceLock) {
- records = new ArrayList<HistoricalRecord>(mHistoricalRecords);
- }
try {
- fos = mContext.openFileOutput(mHistoryFileName, Context.MODE_PRIVATE);
+ fos = mContext.openFileOutput(hostoryFileName, Context.MODE_PRIVATE);
} catch (FileNotFoundException fnfe) {
- Log.e(LOG_TAG, "Error writing historical recrod file: " + mHistoryFileName, fnfe);
- return;
+ Log.e(LOG_TAG, "Error writing historical recrod file: " + hostoryFileName, fnfe);
+ return null;
}
XmlSerializer serializer = Xml.newSerializer();
@@ -1102,11 +1076,12 @@
serializer.startDocument("UTF-8", true);
serializer.startTag(null, TAG_HISTORICAL_RECORDS);
- final int recordCount = records.size();
+ final int recordCount = historicalRecords.size();
for (int i = 0; i < recordCount; i++) {
- HistoricalRecord record = records.remove(0);
+ HistoricalRecord record = historicalRecords.remove(0);
serializer.startTag(null, TAG_HISTORICAL_RECORD);
- serializer.attribute(null, ATTRIBUTE_ACTIVITY, record.activity.flattenToString());
+ serializer.attribute(null, ATTRIBUTE_ACTIVITY,
+ record.activity.flattenToString());
serializer.attribute(null, ATTRIBUTE_TIME, String.valueOf(record.time));
serializer.attribute(null, ATTRIBUTE_WEIGHT, String.valueOf(record.weight));
serializer.endTag(null, TAG_HISTORICAL_RECORD);
@@ -1128,6 +1103,7 @@
} catch (IOException ioe) {
Log.e(LOG_TAG, "Error writing historical recrod file: " + mHistoryFileName, ioe);
} finally {
+ mCanReadHistoricalData = true;
if (fos != null) {
try {
fos.close();
@@ -1136,6 +1112,7 @@
}
}
}
+ return null;
}
}
@@ -1145,33 +1122,8 @@
private final class DataModelPackageMonitor extends PackageMonitor {
@Override
- public void onPackageAdded(String packageName, int uid) {
- synchronized (mInstanceLock) {
- loadActivitiesLocked();
- }
- }
-
- @Override
- public void onPackageAppeared(String packageName, int reason) {
- synchronized (mInstanceLock) {
- loadActivitiesLocked();
- }
- }
-
- @Override
- public void onPackageRemoved(String packageName, int uid) {
- synchronized (mInstanceLock) {
- pruneHistoricalRecordsForPackageLocked(packageName);
- loadActivitiesLocked();
- }
- }
-
- @Override
- public void onPackageDisappeared(String packageName, int reason) {
- synchronized (mInstanceLock) {
- pruneHistoricalRecordsForPackageLocked(packageName);
- loadActivitiesLocked();
- }
+ public void onSomePackagesChanged() {
+ mReloadActivities = true;
}
}
}
diff --git a/core/java/android/widget/ActivityChooserView.java b/core/java/android/widget/ActivityChooserView.java
index be6b4e2..0c0bb1e 100644
--- a/core/java/android/widget/ActivityChooserView.java
+++ b/core/java/android/widget/ActivityChooserView.java
@@ -20,8 +20,10 @@
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.content.res.Configuration;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.database.DataSetObserver;
@@ -174,6 +176,11 @@
private int mDefaultActionButtonContentDescription;
/**
+ * Whether this view has a default activity affordance.
+ */
+ private boolean mHasDefaultActivity;
+
+ /**
* Create a new instance.
*
* @param context The application environment.
@@ -245,6 +252,8 @@
Resources resources = context.getResources();
mListPopupMaxWidth = Math.max(resources.getDisplayMetrics().widthPixels / 2,
resources.getDimensionPixelSize(com.android.internal.R.dimen.config_prefDialogWidth));
+
+ updateHasDefaultActivity();
}
/**
@@ -258,6 +267,21 @@
}
}
+ @Override
+ protected void onConfigurationChanged(Configuration newConfig) {
+ Configuration oldConfig = mContext.getResources().getConfiguration();
+ final int changed = oldConfig.diff(newConfig);
+ if ((changed & ActivityInfo.CONFIG_SCREEN_SIZE) != 0
+ || (changed & ActivityInfo.CONFIG_ORIENTATION) != 0) {
+ updateHasDefaultActivity();
+ }
+ }
+
+ private void updateHasDefaultActivity() {
+ mHasDefaultActivity = mContext.getResources().getBoolean(
+ R.bool.activity_chooser_view_has_default_activity);
+ }
+
/**
* Sets the background for the button that expands the activity
* overflow list.
@@ -383,7 +407,8 @@
protected void onAttachedToWindow() {
super.onAttachedToWindow();
ActivityChooserModel dataModel = mAdapter.getDataModel();
- if (dataModel != null) {
+ if (dataModel != null
+ && !dataModel.isRegisteredObserver(mModelDataSetOberver)) {
dataModel.registerObserver(mModelDataSetOberver);
}
mIsAttachedToWindow = true;
@@ -393,7 +418,8 @@
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
ActivityChooserModel dataModel = mAdapter.getDataModel();
- if (dataModel != null) {
+ if (dataModel != null
+ && dataModel.isRegisteredObserver(mModelDataSetOberver)) {
dataModel.unregisterObserver(mModelDataSetOberver);
}
ViewTreeObserver viewTreeObserver = getViewTreeObserver();
@@ -496,7 +522,7 @@
// Default activity button.
final int activityCount = mAdapter.getActivityCount();
final int historySize = mAdapter.getHistorySize();
- if (activityCount > 0 && historySize > 0) {
+ if (mHasDefaultActivity && activityCount > 0 && historySize > 0) {
mDefaultActivityButton.setVisibility(VISIBLE);
ResolveInfo activity = mAdapter.getDefaultActivity();
PackageManager packageManager = mContext.getPackageManager();
@@ -512,9 +538,9 @@
}
// Activity chooser content.
if (mDefaultActivityButton.getVisibility() == VISIBLE) {
- mActivityChooserContent.setBackgroundDrawable(mActivityChooserContentBackground);
+ mActivityChooserContent.setBackground(mActivityChooserContentBackground);
} else {
- mActivityChooserContent.setBackgroundDrawable(null);
+ mActivityChooserContent.setBackground(null);
}
}
@@ -577,7 +603,7 @@
// OnLongClickListener#onLongClick
@Override
public boolean onLongClick(View view) {
- if (view == mDefaultActivityButton) {
+ if (mHasDefaultActivity && view == mDefaultActivityButton) {
if (mAdapter.getCount() > 0) {
mIsSelectingDefaultActivity = true;
showPopupUnchecked(mInitialActivityCount);
@@ -630,14 +656,16 @@
public void setDataModel(ActivityChooserModel dataModel) {
ActivityChooserModel oldDataModel = mAdapter.getDataModel();
- if (oldDataModel != null && isShown()) {
+ if (oldDataModel != null) {
oldDataModel.unregisterObserver(mModelDataSetOberver);
}
mDataModel = dataModel;
- if (dataModel != null && isShown()) {
+ if (dataModel != null) {
dataModel.registerObserver(mModelDataSetOberver);
+ notifyDataSetChanged();
+ } else {
+ notifyDataSetInvalidated();
}
- notifyDataSetChanged();
}
@Override
diff --git a/core/java/android/widget/AppSecurityPermissions.java b/core/java/android/widget/AppSecurityPermissions.java
index 5d8bdbb..64f6c07 100755
--- a/core/java/android/widget/AppSecurityPermissions.java
+++ b/core/java/android/widget/AppSecurityPermissions.java
@@ -98,6 +98,20 @@
MyPermissionGroupInfo(PermissionGroupInfo info) {
super(info);
}
+
+ public Drawable loadGroupIcon(PackageManager pm) {
+ if (icon != 0) {
+ return loadIcon(pm);
+ } else {
+ ApplicationInfo appInfo;
+ try {
+ appInfo = pm.getApplicationInfo(packageName, 0);
+ return appInfo.loadIcon(pm);
+ } catch (NameNotFoundException e) {
+ }
+ }
+ return null;
+ }
}
static class MyPermissionInfo extends PermissionInfo {
@@ -155,16 +169,7 @@
PackageManager pm = getContext().getPackageManager();
Drawable icon = null;
if (first) {
- if (grp.icon != 0) {
- icon = grp.loadIcon(pm);
- } else {
- ApplicationInfo appInfo;
- try {
- appInfo = pm.getApplicationInfo(grp.packageName, 0);
- icon = appInfo.loadIcon(pm);
- } catch (NameNotFoundException e) {
- }
- }
+ icon = grp.loadGroupIcon(pm);
}
CharSequence label = perm.mLabel;
if (perm.mNew && newPermPrefix != null) {
@@ -191,10 +196,28 @@
if (mDialog != null) {
mDialog.dismiss();
}
+ PackageManager pm = getContext().getPackageManager();
AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
builder.setTitle(mGroup.mLabel);
- builder.setMessage(mPerm.loadDescription(getContext().getPackageManager()));
+ if (mPerm.descriptionRes != 0) {
+ builder.setMessage(mPerm.loadDescription(pm));
+ } else {
+ CharSequence appName;
+ try {
+ ApplicationInfo app = pm.getApplicationInfo(mPerm.packageName, 0);
+ appName = app.loadLabel(pm);
+ } catch (NameNotFoundException e) {
+ appName = mPerm.packageName;
+ }
+ StringBuilder sbuilder = new StringBuilder(128);
+ sbuilder.append(getContext().getString(
+ R.string.perms_description_app, appName));
+ sbuilder.append("\n\n");
+ sbuilder.append(mPerm.name);
+ builder.setMessage(sbuilder.toString());
+ }
builder.setCancelable(true);
+ builder.setIcon(mGroup.loadGroupIcon(pm));
mDialog = builder.show();
mDialog.setCanceledOnTouchOutside(true);
}
@@ -611,9 +634,26 @@
}
for (MyPermissionGroupInfo pgrp : mPermGroups.values()) {
- pgrp.mLabel = pgrp.loadLabel(mPm);
+ if (pgrp.labelRes != 0 || pgrp.nonLocalizedLabel != null) {
+ pgrp.mLabel = pgrp.loadLabel(mPm);
+ } else {
+ ApplicationInfo app;
+ try {
+ app = mPm.getApplicationInfo(pgrp.packageName, 0);
+ pgrp.mLabel = app.loadLabel(mPm);
+ } catch (NameNotFoundException e) {
+ pgrp.mLabel = pgrp.loadLabel(mPm);
+ }
+ }
mPermGroupsList.add(pgrp);
}
Collections.sort(mPermGroupsList, mPermGroupComparator);
+ if (false) {
+ for (MyPermissionGroupInfo grp : mPermGroupsList) {
+ Log.i("foo", "Group " + grp.name + " personal="
+ + ((grp.flags&PermissionGroupInfo.FLAG_PERSONAL_INFO) != 0)
+ + " priority=" + grp.priority);
+ }
+ }
}
}
diff --git a/core/java/android/widget/SearchView.java b/core/java/android/widget/SearchView.java
index 561326e..521597b 100644
--- a/core/java/android/widget/SearchView.java
+++ b/core/java/android/widget/SearchView.java
@@ -576,6 +576,8 @@
/**
* Returns the default iconified state of the search field.
* @return
+ *
+ * @attr ref android.R.styleable#SearchView_iconifiedByDefault
*/
public boolean isIconfiedByDefault() {
return mIconifiedByDefault;
@@ -696,6 +698,8 @@
* Gets the specified maximum width in pixels, if set. Returns zero if
* no maximum width was specified.
* @return the maximum width of the view
+ *
+ * @attr ref android.R.styleable#SearchView_maxWidth
*/
public int getMaxWidth() {
return mMaxWidth;
diff --git a/core/java/android/widget/ShareActionProvider.java b/core/java/android/widget/ShareActionProvider.java
index 080b87d..21840ca 100644
--- a/core/java/android/widget/ShareActionProvider.java
+++ b/core/java/android/widget/ShareActionProvider.java
@@ -44,6 +44,7 @@
* <code>
* // In Activity#onCreateOptionsMenu
* public boolean onCreateOptionsMenu(Menu menu) {
+ * getManuInflater().inflate(R.menu.my_menu, menu);
* // Get the menu item.
* MenuItem menuItem = menu.findItem(R.id.my_menu_item);
* // Get the provider and hold onto it to set/change the share intent.
@@ -239,8 +240,25 @@
* <p>
* <strong>Note:</strong> The history file name can be set any time, however
* only the action views created by {@link #onCreateActionView()} after setting
- * the file name will be backed by the provided file.
+ * the file name will be backed by the provided file. Therefore, if you want to
+ * use different history files for sharing specific types of content, every time
+ * you change the history file {@link #setShareHistoryFileName(String)} you must
+ * call {@link android.app.Activity#invalidateOptionsMenu()} to recreate the
+ * action view. You should <strong>not</strong> call
+ * {@link android.app.Activity#invalidateOptionsMenu()} from
+ * {@link android.app.Activity#onCreateOptionsMenu(Menu)}.
* <p>
+ * <code>
+ * private void doShare(Intent intent) {
+ * if (IMAGE.equals(intent.getMimeType())) {
+ * mShareActionProvider.setHistoryFileName(SHARE_IMAGE_HISTORY_FILE_NAME);
+ * } else if (TEXT.equals(intent.getMimeType())) {
+ * mShareActionProvider.setHistoryFileName(SHARE_TEXT_HISTORY_FILE_NAME);
+ * }
+ * mShareActionProvider.setIntent(intent);
+ * invalidateOptionsMenu();
+ * }
+ * <code>
*
* @param shareHistoryFile The share history file name.
*/
diff --git a/core/java/android/widget/SpellChecker.java b/core/java/android/widget/SpellChecker.java
index 98e45fb..e1103dd 100644
--- a/core/java/android/widget/SpellChecker.java
+++ b/core/java/android/widget/SpellChecker.java
@@ -21,10 +21,12 @@
import android.text.Selection;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
+import android.text.TextUtils;
import android.text.method.WordIterator;
import android.text.style.SpellCheckSpan;
import android.text.style.SuggestionSpan;
import android.util.Log;
+import android.util.LruCache;
import android.view.textservice.SentenceSuggestionsInfo;
import android.view.textservice.SpellCheckerSession;
import android.view.textservice.SpellCheckerSession.SpellCheckerSessionListener;
@@ -95,6 +97,10 @@
private Runnable mSpellRunnable;
+ private static final int SUGGESTION_SPAN_CACHE_SIZE = 10;
+ private final LruCache<Long, SuggestionSpan> mSuggestionSpanCache =
+ new LruCache<Long, SuggestionSpan>(SUGGESTION_SPAN_CACHE_SIZE);
+
public SpellChecker(TextView textView) {
mTextView = textView;
@@ -126,6 +132,7 @@
// Restore SpellCheckSpans in pool
for (int i = 0; i < mLength; i++) {
+ // Resets id and progress to invalidate spell check span
mSpellCheckSpans[i].setSpellCheckInProgress(false);
mIds[i] = -1;
}
@@ -133,6 +140,7 @@
// Remove existing misspelled SuggestionSpans
mTextView.removeMisspelledSpans((Editable) mTextView.getText());
+ mSuggestionSpanCache.evictAll();
}
private void setLocale(Locale locale) {
@@ -199,6 +207,7 @@
public void removeSpellCheckSpan(SpellCheckSpan spellCheckSpan) {
for (int i = 0; i < mLength; i++) {
if (mSpellCheckSpans[i] == spellCheckSpan) {
+ // Resets id and progress to invalidate spell check span
mSpellCheckSpans[i].setSpellCheckInProgress(false);
mIds[i] = -1;
return;
@@ -211,6 +220,9 @@
}
public void spellCheck(int start, int end) {
+ if (DBG) {
+ Log.d(TAG, "Start spell-checking: " + start + ", " + end);
+ }
final Locale locale = mTextView.getTextServicesLocale();
final boolean isSessionActive = isSessionActive();
if (mCurrentLocale == null || (!(mCurrentLocale.equals(locale)))) {
@@ -238,6 +250,9 @@
}
}
+ if (DBG) {
+ Log.d(TAG, "new spell parser.");
+ }
// No available parser found in pool, create a new one
SpellParser[] newSpellParsers = new SpellParser[length + 1];
System.arraycopy(mSpellParsers, 0, newSpellParsers, 0, length);
@@ -260,13 +275,22 @@
for (int i = 0; i < mLength; i++) {
final SpellCheckSpan spellCheckSpan = mSpellCheckSpans[i];
- if (spellCheckSpan.isSpellCheckInProgress()) continue;
+ if (mIds[i] < 0 || spellCheckSpan.isSpellCheckInProgress()) continue;
final int start = editable.getSpanStart(spellCheckSpan);
final int end = editable.getSpanEnd(spellCheckSpan);
// Do not check this word if the user is currently editing it
- if (start >= 0 && end > start && (selectionEnd < start || selectionStart > end)) {
+ final boolean isEditing;
+ if (mIsSentenceSpellCheckSupported) {
+ // Allow the overlap of the cursor and the first boundary of the spell check span
+ // no to skip the spell check of the following word because the
+ // following word will never be spell-checked even if the user finishes composing
+ isEditing = selectionEnd <= start || selectionStart > end;
+ } else {
+ isEditing = selectionEnd < start || selectionStart > end;
+ }
+ if (start >= 0 && end > start && isEditing) {
final String word = (editable instanceof SpannableStringBuilder) ?
((SpannableStringBuilder) editable).substring(start, end) :
editable.subSequence(start, end).toString();
@@ -372,6 +396,9 @@
}
private void scheduleNewSpellCheck() {
+ if (DBG) {
+ Log.i(TAG, "schedule new spell check.");
+ }
if (mSpellRunnable == null) {
mSpellRunnable = new Runnable() {
@Override
@@ -423,6 +450,20 @@
SuggestionSpan suggestionSpan = new SuggestionSpan(mTextView.getContext(), suggestions,
SuggestionSpan.FLAG_EASY_CORRECT | SuggestionSpan.FLAG_MISSPELLED);
+ // TODO: Remove mIsSentenceSpellCheckSupported by extracting an interface
+ // to share the logic of word level spell checker and sentence level spell checker
+ if (mIsSentenceSpellCheckSupported) {
+ final long key = TextUtils.packRangeInLong(start, end);
+ final SuggestionSpan tempSuggestionSpan = mSuggestionSpanCache.get(key);
+ if (tempSuggestionSpan != null) {
+ if (DBG) {
+ Log.i(TAG, "Cached span on the same position is cleard. "
+ + editable.subSequence(start, end));
+ }
+ editable.removeSpan(tempSuggestionSpan);
+ }
+ mSuggestionSpanCache.put(key, suggestionSpan);
+ }
editable.setSpan(suggestionSpan, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
mTextView.invalidateRegion(start, end, false /* No cursor involved */);
@@ -447,10 +488,17 @@
}
private void setRangeSpan(Editable editable, int start, int end) {
+ if (DBG) {
+ Log.d(TAG, "set next range span: " + start + ", " + end);
+ }
editable.setSpan(mRange, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
private void removeRangeSpan(Editable editable) {
+ if (DBG) {
+ Log.d(TAG, "Remove range span." + editable.getSpanStart(editable)
+ + editable.getSpanEnd(editable));
+ }
editable.removeSpan(mRange);
}
@@ -484,6 +532,9 @@
wordEnd = mWordIterator.getEnd(wordStart);
}
if (wordEnd == BreakIterator.DONE) {
+ if (DBG) {
+ Log.i(TAG, "No more spell check.");
+ }
removeRangeSpan(editable);
return;
}
@@ -499,47 +550,72 @@
boolean scheduleOtherSpellCheck = false;
if (mIsSentenceSpellCheckSupported) {
- int regionEnd;
if (wordIteratorWindowEnd < end) {
+ if (DBG) {
+ Log.i(TAG, "schedule other spell check.");
+ }
// Several batches needed on that region. Cut after last previous word
- regionEnd = mWordIterator.preceding(wordIteratorWindowEnd);
scheduleOtherSpellCheck = true;
- } else {
- regionEnd = mWordIterator.preceding(end);
}
- boolean correct = regionEnd != BreakIterator.DONE;
+ int spellCheckEnd = mWordIterator.preceding(wordIteratorWindowEnd);
+ boolean correct = spellCheckEnd != BreakIterator.DONE;
if (correct) {
- regionEnd = mWordIterator.getEnd(regionEnd);
- correct = regionEnd != BreakIterator.DONE;
+ spellCheckEnd = mWordIterator.getEnd(spellCheckEnd);
+ correct = spellCheckEnd != BreakIterator.DONE;
}
if (!correct) {
- editable.removeSpan(mRange);
+ if (DBG) {
+ Log.i(TAG, "Incorrect range span.");
+ }
+ removeRangeSpan(editable);
return;
}
- // Stop spell checking when there are no characters in the range.
- if (wordEnd < start) {
- return;
- }
- // TODO: Find the start position of the sentence.
- final int spellCheckStart = wordStart;
- if (regionEnd <= spellCheckStart) {
- return;
- }
- final int selectionStart = Selection.getSelectionStart(editable);
- final int selectionEnd = Selection.getSelectionEnd(editable);
- if (DBG) {
- Log.d(TAG, "addSpellCheckSpan: "
- + editable.subSequence(spellCheckStart, regionEnd)
- + ", regionEnd = " + regionEnd + ", spellCheckStart = "
- + spellCheckStart + ", sel start = " + selectionStart + ", sel end ="
- + selectionEnd);
- }
- // Do not check this word if the user is currently editing it
- if (spellCheckStart >= 0 && regionEnd > spellCheckStart
- && (selectionEnd < spellCheckStart || selectionStart > regionEnd)) {
- addSpellCheckSpan(editable, spellCheckStart, regionEnd);
- }
- wordStart = regionEnd;
+ do {
+ // TODO: Find the start position of the sentence.
+ int spellCheckStart = wordStart;
+ boolean createSpellCheckSpan = true;
+ // Cancel or merge overlapped spell check spans
+ for (int i = 0; i < mLength; ++i) {
+ final SpellCheckSpan spellCheckSpan = mSpellCheckSpans[i];
+ if (mIds[i] < 0 || spellCheckSpan.isSpellCheckInProgress()) {
+ continue;
+ }
+ final int spanStart = editable.getSpanStart(spellCheckSpan);
+ final int spanEnd = editable.getSpanEnd(spellCheckSpan);
+ if (spanEnd < spellCheckStart || spellCheckEnd < spanStart) {
+ // No need to merge
+ continue;
+ }
+ if (spanStart <= spellCheckStart && spellCheckEnd <= spanEnd) {
+ // There is a completely overlapped spell check span
+ // skip this span
+ createSpellCheckSpan = false;
+ if (DBG) {
+ Log.i(TAG, "The range is overrapped. Skip spell check.");
+ }
+ break;
+ }
+ removeSpellCheckSpan(spellCheckSpan);
+ spellCheckStart = Math.min(spanStart, spellCheckStart);
+ spellCheckEnd = Math.max(spanEnd, spellCheckEnd);
+ }
+
+ if (DBG) {
+ Log.d(TAG, "addSpellCheckSpan: "
+ + ", End = " + spellCheckEnd + ", Start = " + spellCheckStart
+ + ", next = " + scheduleOtherSpellCheck + "\n"
+ + editable.subSequence(spellCheckStart, spellCheckEnd));
+ }
+
+ // Stop spell checking when there are no characters in the range.
+ if (spellCheckEnd < start) {
+ break;
+ }
+ if (createSpellCheckSpan) {
+ addSpellCheckSpan(editable, spellCheckStart, spellCheckEnd);
+ }
+ } while (false);
+ wordStart = spellCheckEnd;
} else {
while (wordStart <= end) {
if (wordEnd >= start && wordEnd > wordStart) {
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index 8c81343..f2334aea 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -26,7 +26,6 @@
import android.content.res.TypedArray;
import android.content.res.XmlResourceParser;
import android.graphics.Canvas;
-import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Rect;
@@ -91,6 +90,7 @@
import android.util.FloatMath;
import android.util.Log;
import android.util.TypedValue;
+import android.view.AccessibilityIterators.TextSegmentIterator;
import android.view.ActionMode;
import android.view.DragEvent;
import android.view.Gravity;
@@ -7712,6 +7712,17 @@
if (!isPassword) {
info.setText(getTextForAccessibility());
}
+
+ if (TextUtils.isEmpty(getContentDescription())
+ && !TextUtils.isEmpty(mText)) {
+ info.addAction(AccessibilityNodeInfo.ACTION_NEXT_AT_MOVEMENT_GRANULARITY);
+ info.addAction(AccessibilityNodeInfo.ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY);
+ info.setMovementGranularities(AccessibilityNodeInfo.MOVEMENT_GRANULARITY_CHARACTER
+ | AccessibilityNodeInfo.MOVEMENT_GRANULARITY_WORD
+ | AccessibilityNodeInfo.MOVEMENT_GRANULARITY_LINE
+ | AccessibilityNodeInfo.MOVEMENT_GRANULARITY_PARAGRAPH
+ | AccessibilityNodeInfo.MOVEMENT_GRANULARITY_PAGE);
+ }
}
@Override
@@ -7726,12 +7737,13 @@
}
/**
- * Gets the text reported for accessibility purposes. It is the
- * text if not empty or the hint.
+ * Gets the text reported for accessibility purposes.
*
* @return The accessibility text.
+ *
+ * @hide
*/
- private CharSequence getTextForAccessibility() {
+ public CharSequence getTextForAccessibility() {
CharSequence text = getText();
if (TextUtils.isEmpty(text)) {
text = getHint();
@@ -8287,6 +8299,79 @@
}
/**
+ * @hide
+ */
+ @Override
+ public CharSequence getIterableTextForAccessibility() {
+ if (getContentDescription() == null) {
+ if (!(mText instanceof Spannable)) {
+ setText(mText, BufferType.SPANNABLE);
+ }
+ return mText;
+ }
+ return super.getIterableTextForAccessibility();
+ }
+
+ /**
+ * @hide
+ */
+ @Override
+ public TextSegmentIterator getIteratorForGranularity(int granularity) {
+ switch (granularity) {
+ case AccessibilityNodeInfo.MOVEMENT_GRANULARITY_LINE: {
+ Spannable text = (Spannable) getIterableTextForAccessibility();
+ if (!TextUtils.isEmpty(text) && getLayout() != null) {
+ AccessibilityIterators.LineTextSegmentIterator iterator =
+ AccessibilityIterators.LineTextSegmentIterator.getInstance();
+ iterator.initialize(text, getLayout());
+ return iterator;
+ }
+ } break;
+ case AccessibilityNodeInfo.MOVEMENT_GRANULARITY_PAGE: {
+ Spannable text = (Spannable) getIterableTextForAccessibility();
+ if (!TextUtils.isEmpty(text) && getLayout() != null) {
+ AccessibilityIterators.PageTextSegmentIterator iterator =
+ AccessibilityIterators.PageTextSegmentIterator.getInstance();
+ iterator.initialize(this);
+ return iterator;
+ }
+ } break;
+ }
+ return super.getIteratorForGranularity(granularity);
+ }
+
+ /**
+ * @hide
+ */
+ @Override
+ public int getAccessibilityCursorPosition() {
+ if (TextUtils.isEmpty(getContentDescription())) {
+ return getSelectionEnd();
+ } else {
+ return super.getAccessibilityCursorPosition();
+ }
+ }
+
+ /**
+ * @hide
+ */
+ @Override
+ public void setAccessibilityCursorPosition(int index) {
+ if (getAccessibilityCursorPosition() == index) {
+ return;
+ }
+ if (TextUtils.isEmpty(getContentDescription())) {
+ if (index >= 0) {
+ Selection.setSelection((Spannable) mText, index);
+ } else {
+ Selection.removeSelection((Spannable) mText);
+ }
+ } else {
+ super.setAccessibilityCursorPosition(index);
+ }
+ }
+
+ /**
* User interface state that is stored by TextView for implementing
* {@link View#onSaveInstanceState}.
*/
diff --git a/core/java/com/android/internal/app/IMediaContainerService.aidl b/core/java/com/android/internal/app/IMediaContainerService.aidl
index 727c094..c9f7a58 100755
--- a/core/java/com/android/internal/app/IMediaContainerService.aidl
+++ b/core/java/com/android/internal/app/IMediaContainerService.aidl
@@ -18,6 +18,7 @@
import android.net.Uri;
import android.os.ParcelFileDescriptor;
+import android.content.pm.ContainerEncryptionParams;
import android.content.pm.PackageInfoLite;
import android.content.res.ObbInfo;
@@ -25,9 +26,9 @@
String copyResourceToContainer(in Uri packageURI, String containerId, String key,
String resFileName, String publicResFileName, boolean isExternal,
boolean isForwardLocked);
- int copyResource(in Uri packageURI,
- in ParcelFileDescriptor outStream);
- PackageInfoLite getMinimalPackageInfo(in Uri fileUri, in int flags, in long threshold);
+ int copyResource(in Uri packageURI, in ContainerEncryptionParams encryptionParams,
+ in ParcelFileDescriptor outStream);
+ PackageInfoLite getMinimalPackageInfo(in String packagePath, in int flags, in long threshold);
boolean checkInternalFreeStorage(in Uri fileUri, boolean isForwardLocked, in long threshold);
boolean checkExternalFreeStorage(in Uri fileUri, boolean isForwardLocked);
ObbInfo getObbInfo(in String filename);
diff --git a/core/java/com/android/internal/app/ResolverActivity.java b/core/java/com/android/internal/app/ResolverActivity.java
index 51bbdf1..614f73f 100644
--- a/core/java/com/android/internal/app/ResolverActivity.java
+++ b/core/java/com/android/internal/app/ResolverActivity.java
@@ -19,15 +19,17 @@
import com.android.internal.R;
import com.android.internal.content.PackageMonitor;
+import android.app.ActivityManager;
import android.content.ComponentName;
import android.content.Context;
-import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.ActivityInfo;
import android.content.pm.LabeledIntent;
import android.content.pm.PackageManager;
+import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.ResolveInfo;
+import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Bundle;
@@ -38,8 +40,8 @@
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
-import android.widget.CheckBox;
-import android.widget.CompoundButton;
+import android.widget.Button;
+import android.widget.GridView;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
@@ -56,12 +58,19 @@
* which there is more than one matching activity, allowing the user to decide
* which to go to. It is not normally used directly by application developers.
*/
-public class ResolverActivity extends AlertActivity implements
- DialogInterface.OnClickListener, CheckBox.OnCheckedChangeListener {
+public class ResolverActivity extends AlertActivity implements AdapterView.OnItemClickListener {
+ private static final String TAG = "ResolverActivity";
+
private ResolveListAdapter mAdapter;
- private CheckBox mAlwaysCheck;
- private TextView mClearDefaultHint;
private PackageManager mPm;
+ private boolean mAlwaysUseOption;
+ private boolean mShowExtended;
+ private GridView mGrid;
+ private Button mAlwaysButton;
+ private Button mOnceButton;
+ private int mIconDpi;
+ private int mIconSize;
+ private int mMaxColumns;
private boolean mRegistered;
private final PackageMonitor mPackageMonitor = new PackageMonitor() {
@@ -91,33 +100,38 @@
protected void onCreate(Bundle savedInstanceState, Intent intent,
CharSequence title, Intent[] initialIntents, List<ResolveInfo> rList,
boolean alwaysUseOption) {
+ setTheme(R.style.Theme_DeviceDefault_Light_Dialog_Alert);
super.onCreate(savedInstanceState);
mPm = getPackageManager();
+ mAlwaysUseOption = alwaysUseOption;
+ mMaxColumns = getResources().getInteger(R.integer.config_maxResolverActivityColumns);
intent.setComponent(null);
AlertController.AlertParams ap = mAlertParams;
ap.mTitle = title;
- ap.mOnClickListener = this;
mPackageMonitor.register(this, getMainLooper(), false);
mRegistered = true;
- if (alwaysUseOption) {
- LayoutInflater inflater = (LayoutInflater) getSystemService(
- Context.LAYOUT_INFLATER_SERVICE);
- ap.mView = inflater.inflate(R.layout.always_use_checkbox, null);
- mAlwaysCheck = (CheckBox)ap.mView.findViewById(com.android.internal.R.id.alwaysUse);
- mAlwaysCheck.setText(R.string.alwaysUse);
- mAlwaysCheck.setOnCheckedChangeListener(this);
- mClearDefaultHint = (TextView)ap.mView.findViewById(
- com.android.internal.R.id.clearDefaultHint);
- mClearDefaultHint.setVisibility(View.GONE);
- }
+ final ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
+ mIconDpi = am.getLauncherLargeIconDensity();
+ mIconSize = am.getLauncherLargeIconSize();
+
mAdapter = new ResolveListAdapter(this, intent, initialIntents, rList);
int count = mAdapter.getCount();
if (count > 1) {
- ap.mAdapter = mAdapter;
+ ap.mView = getLayoutInflater().inflate(R.layout.resolver_grid, null);
+ mGrid = (GridView) ap.mView.findViewById(R.id.resolver_grid);
+ mGrid.setAdapter(mAdapter);
+ mGrid.setOnItemClickListener(this);
+ mGrid.setOnItemLongClickListener(new ItemLongClickListener());
+
+ if (alwaysUseOption) {
+ mGrid.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
+ }
+
+ resizeGrid();
} else if (count == 1) {
startActivity(mAdapter.intentForPosition(0));
mPackageMonitor.unregister();
@@ -125,17 +139,57 @@
finish();
return;
} else {
- ap.mMessage = getResources().getText(com.android.internal.R.string.noApplications);
+ ap.mMessage = getResources().getText(R.string.noApplications);
}
setupAlert();
- ListView lv = mAlert.getListView();
- if (lv != null) {
- lv.setOnItemLongClickListener(new ItemLongClickListener());
+ if (alwaysUseOption) {
+ final ViewGroup buttonLayout = (ViewGroup) findViewById(R.id.button_bar);
+ buttonLayout.setVisibility(View.VISIBLE);
+ mAlwaysButton = (Button) buttonLayout.findViewById(R.id.button_always);
+ mOnceButton = (Button) buttonLayout.findViewById(R.id.button_once);
}
}
+ void resizeGrid() {
+ final int itemCount = mAdapter.getCount();
+ mGrid.setNumColumns(Math.min(itemCount, mMaxColumns));
+ }
+
+ Drawable getIcon(Resources res, int resId) {
+ Drawable result;
+ try {
+ result = res.getDrawableForDensity(resId, mIconDpi);
+ } catch (Resources.NotFoundException e) {
+ result = null;
+ }
+
+ return result;
+ }
+
+ Drawable loadIconForResolveInfo(ResolveInfo ri) {
+ Drawable dr;
+ try {
+ if (ri.resolvePackageName != null && ri.icon != 0) {
+ dr = getIcon(mPm.getResourcesForApplication(ri.resolvePackageName), ri.icon);
+ if (dr != null) {
+ return dr;
+ }
+ }
+ final int iconRes = ri.getIconResource();
+ if (iconRes != 0) {
+ dr = getIcon(mPm.getResourcesForApplication(ri.activityInfo.packageName), iconRes);
+ if (dr != null) {
+ return dr;
+ }
+ }
+ } catch (NameNotFoundException e) {
+ Log.e(TAG, "Couldn't find resources for package", e);
+ }
+ return ri.loadIcon(mPm);
+ }
+
@Override
protected void onRestart() {
super.onRestart();
@@ -155,11 +209,45 @@
}
}
- public void onClick(DialogInterface dialog, int which) {
+ @Override
+ protected void onRestoreInstanceState(Bundle savedInstanceState) {
+ super.onRestoreInstanceState(savedInstanceState);
+ if (mAlwaysUseOption) {
+ final int checkedPos = mGrid.getCheckedItemPosition();
+ final boolean enabled = checkedPos != GridView.INVALID_POSITION;
+ mAlwaysButton.setEnabled(enabled);
+ mOnceButton.setEnabled(enabled);
+ if (enabled) {
+ mGrid.setSelection(checkedPos);
+ }
+ }
+ }
+
+ @Override
+ public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
+ if (mAlwaysUseOption) {
+ final int checkedPos = mGrid.getCheckedItemPosition();
+ final boolean enabled = checkedPos != GridView.INVALID_POSITION;
+ mAlwaysButton.setEnabled(enabled);
+ mOnceButton.setEnabled(enabled);
+ if (enabled) {
+ mGrid.smoothScrollToPosition(checkedPos);
+ }
+ } else {
+ startSelected(position, false);
+ }
+ }
+
+ public void onButtonClick(View v) {
+ final int id = v.getId();
+ startSelected(mGrid.getCheckedItemPosition(), id == R.id.button_always);
+ dismiss();
+ }
+
+ void startSelected(int which, boolean always) {
ResolveInfo ri = mAdapter.resolveInfoForPosition(which);
Intent intent = mAdapter.intentForPosition(which);
- boolean alwaysCheck = (mAlwaysCheck != null && mAlwaysCheck.isChecked());
- onIntentSelected(ri, intent, alwaysCheck);
+ onIntentSelected(ri, intent, always);
finish();
}
@@ -249,6 +337,12 @@
}
}
+ void showAppDetails(ResolveInfo ri) {
+ Intent in = new Intent().setAction("android.settings.APPLICATION_DETAILS_SETTINGS")
+ .setData(Uri.fromParts("package", ri.activityInfo.packageName, null));
+ startActivity(in);
+ }
+
private final class DisplayResolveInfo {
ResolveInfo ri;
CharSequence displayLabel;
@@ -285,12 +379,18 @@
}
public void handlePackagesChanged() {
+ final int oldItemCount = getCount();
rebuildList();
notifyDataSetChanged();
if (mList.size() <= 0) {
// We no longer have any items... just finish the activity.
finish();
}
+
+ final int newItemCount = getCount();
+ if (newItemCount != oldItemCount) {
+ resizeGrid();
+ }
}
private void rebuildList() {
@@ -299,7 +399,7 @@
} else {
mCurrentResolveList = mPm.queryIntentActivities(
mIntent, PackageManager.MATCH_DEFAULT_ONLY
- | (mAlwaysCheck != null ? PackageManager.GET_RESOLVED_FILTER : 0));
+ | (mAlwaysUseOption ? PackageManager.GET_RESOLVED_FILTER : 0));
}
int N;
if ((mCurrentResolveList != null) && ((N = mCurrentResolveList.size()) > 0)) {
@@ -363,6 +463,7 @@
r0 = mCurrentResolveList.get(0);
int start = 0;
CharSequence r0Label = r0.loadLabel(mPm);
+ mShowExtended = false;
for (int i = 1; i < N; i++) {
if (r0Label == null) {
r0Label = r0.activityInfo.packageName;
@@ -393,6 +494,7 @@
// No duplicate labels. Use label for entry at start
mList.add(new DisplayResolveInfo(ro, roLabel, null, null));
} else {
+ mShowExtended = true;
boolean usePkg = false;
CharSequence startApp = ro.activityInfo.applicationInfo.loadLabel(mPm);
if (startApp == null) {
@@ -473,6 +575,11 @@
if (convertView == null) {
view = mInflater.inflate(
com.android.internal.R.layout.resolve_list_item, parent, false);
+
+ // Fix the icon size even if we have different sized resources
+ ImageView icon = (ImageView)view.findViewById(R.id.icon);
+ ViewGroup.LayoutParams lp = (ViewGroup.LayoutParams) icon.getLayoutParams();
+ lp.width = lp.height = mIconSize;
} else {
view = convertView;
}
@@ -485,37 +592,25 @@
TextView text2 = (TextView)view.findViewById(com.android.internal.R.id.text2);
ImageView icon = (ImageView)view.findViewById(R.id.icon);
text.setText(info.displayLabel);
- if (info.extendedInfo != null) {
+ if (mShowExtended) {
text2.setVisibility(View.VISIBLE);
text2.setText(info.extendedInfo);
} else {
text2.setVisibility(View.GONE);
}
if (info.displayIcon == null) {
- info.displayIcon = info.ri.loadIcon(mPm);
+ info.displayIcon = loadIconForResolveInfo(info.ri);
}
icon.setImageDrawable(info.displayIcon);
}
}
- public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
- if (mClearDefaultHint == null) return;
-
- if(isChecked) {
- mClearDefaultHint.setVisibility(View.VISIBLE);
- } else {
- mClearDefaultHint.setVisibility(View.GONE);
- }
- }
-
class ItemLongClickListener implements AdapterView.OnItemLongClickListener {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
ResolveInfo ri = mAdapter.resolveInfoForPosition(position);
- Intent in = new Intent().setAction("android.settings.APPLICATION_DETAILS_SETTINGS")
- .setData(Uri.fromParts("package", ri.activityInfo.packageName, null));
- startActivity(in);
+ showAppDetails(ri);
return true;
}
diff --git a/core/java/com/android/internal/view/menu/ActionMenuItemView.java b/core/java/com/android/internal/view/menu/ActionMenuItemView.java
index d5c2018..449194b 100644
--- a/core/java/com/android/internal/view/menu/ActionMenuItemView.java
+++ b/core/java/com/android/internal/view/menu/ActionMenuItemView.java
@@ -70,8 +70,13 @@
setOnClickListener(this);
setOnLongClickListener(this);
- // Save the inflated padding for later, we'll need it.
- mSavedPaddingLeft = getPaddingLeft();
+ mSavedPaddingLeft = -1;
+ }
+
+ @Override
+ public void setPadding(int l, int t, int r, int b) {
+ mSavedPaddingLeft = l;
+ super.setPadding(l, t, r, b);
}
public MenuItemImpl getItemData() {
@@ -217,8 +222,9 @@
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
final boolean textVisible = hasText();
- if (textVisible) {
- setPadding(mSavedPaddingLeft, getPaddingTop(), getPaddingRight(), getPaddingBottom());
+ if (textVisible && mSavedPaddingLeft >= 0) {
+ super.setPadding(mSavedPaddingLeft, getPaddingTop(),
+ getPaddingRight(), getPaddingBottom());
}
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
@@ -240,7 +246,7 @@
// a little coercion. Pad in to center the icon after we've measured.
final int w = getMeasuredWidth();
final int dw = mIcon.getIntrinsicWidth();
- setPadding((w - dw) / 2, getPaddingTop(), getPaddingRight(), getPaddingBottom());
+ super.setPadding((w - dw) / 2, getPaddingTop(), getPaddingRight(), getPaddingBottom());
}
}
}
diff --git a/core/java/com/android/internal/view/menu/ActionMenuView.java b/core/java/com/android/internal/view/menu/ActionMenuView.java
index af67d55..f54575b 100644
--- a/core/java/com/android/internal/view/menu/ActionMenuView.java
+++ b/core/java/com/android/internal/view/menu/ActionMenuView.java
@@ -17,6 +17,7 @@
import android.content.Context;
import android.content.res.Configuration;
+import android.content.res.TypedArray;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.View;
@@ -25,6 +26,8 @@
import android.view.accessibility.AccessibilityEvent;
import android.widget.LinearLayout;
+import com.android.internal.R;
+
/**
* @hide
*/
@@ -43,6 +46,7 @@
private int mMinCellSize;
private int mGeneratedItemPadding;
private int mMeasuredExtraWidth;
+ private int mMaxItemHeight;
public ActionMenuView(Context context) {
this(context, null);
@@ -54,6 +58,11 @@
final float density = context.getResources().getDisplayMetrics().density;
mMinCellSize = (int) (MIN_CELL_SIZE * density);
mGeneratedItemPadding = (int) (GENERATED_ITEM_PADDING * density);
+
+ TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ActionBar,
+ R.attr.actionBarStyle, 0);
+ mMaxItemHeight = a.getDimensionPixelSize(R.styleable.ActionBar_height, 0);
+ a.recycle();
}
public void setPresenter(ActionMenuPresenter presenter) {
@@ -116,6 +125,11 @@
final int widthPadding = getPaddingLeft() + getPaddingRight();
final int heightPadding = getPaddingTop() + getPaddingBottom();
+ final int itemHeightSpec = heightMode == MeasureSpec.EXACTLY
+ ? MeasureSpec.makeMeasureSpec(heightSize - heightPadding, MeasureSpec.EXACTLY)
+ : MeasureSpec.makeMeasureSpec(
+ Math.min(mMaxItemHeight, heightSize - heightPadding), MeasureSpec.AT_MOST);
+
widthSize -= widthPadding;
// Divide the view into cells.
@@ -167,7 +181,7 @@
final int cellsAvailable = lp.isOverflowButton ? 1 : cellsRemaining;
final int cellsUsed = measureChildForCells(child, cellSize, cellsAvailable,
- heightMeasureSpec, heightPadding);
+ itemHeightSpec, heightPadding);
maxCellsUsed = Math.max(maxCellsUsed, cellsUsed);
if (lp.expandable) expandableItemCount++;
@@ -298,7 +312,6 @@
// Remeasure any items that have had extra space allocated to them.
if (needsExpansion) {
- int heightSpec = MeasureSpec.makeMeasureSpec(heightSize - heightPadding, heightMode);
for (int i = 0; i < childCount; i++) {
final View child = getChildAt(i);
final LayoutParams lp = (LayoutParams) child.getLayoutParams();
@@ -306,7 +319,8 @@
if (!lp.expanded) continue;
final int width = lp.cellsUsed * cellSize + lp.extraPixels;
- child.measure(MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY), heightSpec);
+ child.measure(MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY),
+ itemHeightSpec);
}
}
diff --git a/core/java/com/android/internal/widget/multiwaveview/MultiWaveView.java b/core/java/com/android/internal/widget/multiwaveview/MultiWaveView.java
index 624dea8..a74ecd3 100644
--- a/core/java/com/android/internal/widget/multiwaveview/MultiWaveView.java
+++ b/core/java/com/android/internal/widget/multiwaveview/MultiWaveView.java
@@ -32,6 +32,7 @@
import android.util.AttributeSet;
import android.util.Log;
import android.util.TypedValue;
+import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
import android.view.accessibility.AccessibilityEvent;
@@ -99,8 +100,11 @@
private float mTapRadius;
private float mWaveCenterX;
private float mWaveCenterY;
- private float mVerticalOffset;
+ private int mMaxTargetHeight;
+ private int mMaxTargetWidth;
private float mHorizontalOffset;
+ private float mVerticalOffset;
+
private float mOuterRadius = 0.0f;
private float mHitRadius = 0.0f;
private float mSnapMargin = 0.0f;
@@ -142,6 +146,9 @@
private int mTargetDescriptionsResourceId;
private int mDirectionDescriptionsResourceId;
private boolean mAlwaysTrackFinger;
+ private int mHorizontalInset;
+ private int mVerticalInset;
+ private int mGravity = Gravity.TOP;
public MultiWaveView(Context context) {
this(context, null);
@@ -153,10 +160,9 @@
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.MultiWaveView);
mOuterRadius = a.getDimension(R.styleable.MultiWaveView_outerRadius, mOuterRadius);
- mHorizontalOffset = a.getDimension(R.styleable.MultiWaveView_horizontalOffset,
- mHorizontalOffset);
- mVerticalOffset = a.getDimension(R.styleable.MultiWaveView_verticalOffset,
- mVerticalOffset);
+// mHorizontalOffset = a.getDimension(R.styleable.MultiWaveView_horizontalOffset,
+// mHorizontalOffset);
+// mVerticalOffset = a.getDimension(R.styleable.MultiWaveView_verticalOffset, mVerticalOffset);
mHitRadius = a.getDimension(R.styleable.MultiWaveView_hitRadius, mHitRadius);
mSnapMargin = a.getDimension(R.styleable.MultiWaveView_snapMargin, mSnapMargin);
mVibrationDuration = a.getInt(R.styleable.MultiWaveView_vibrationDuration,
@@ -169,6 +175,7 @@
mOuterRing = new TargetDrawable(res,
a.peekValue(R.styleable.MultiWaveView_waveDrawable).resourceId);
mAlwaysTrackFinger = a.getBoolean(R.styleable.MultiWaveView_alwaysTrackFinger, false);
+ mGravity = a.getInt(R.styleable.MultiWaveView_gravity, Gravity.TOP);
// Read chevron animation drawables
final int chevrons[] = { R.styleable.MultiWaveView_leftChevronDrawable,
@@ -231,16 +238,16 @@
@Override
protected int getSuggestedMinimumWidth() {
- // View should be large enough to contain the background + target drawable on either edge
- return mOuterRing.getWidth()
- + (mTargetDrawables.size() > 0 ? (mTargetDrawables.get(0).getWidth()/2) : 0);
+ // View should be large enough to contain the background + handle and
+ // target drawable on either edge.
+ return mOuterRing.getWidth() + mMaxTargetWidth;
}
@Override
protected int getSuggestedMinimumHeight() {
- // View should be large enough to contain the unlock ring + target drawable on either edge
- return mOuterRing.getHeight()
- + (mTargetDrawables.size() > 0 ? (mTargetDrawables.get(0).getHeight()/2) : 0);
+ // View should be large enough to contain the unlock ring + target and
+ // target drawable on either edge
+ return mOuterRing.getHeight() + mMaxTargetHeight;
}
private int resolveMeasured(int measureSpec, int desired)
@@ -265,9 +272,10 @@
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
final int minimumWidth = getSuggestedMinimumWidth();
final int minimumHeight = getSuggestedMinimumHeight();
- int viewWidth = resolveMeasured(widthMeasureSpec, minimumWidth);
- int viewHeight = resolveMeasured(heightMeasureSpec, minimumHeight);
- setMeasuredDimension(viewWidth, viewHeight);
+ int computedWidth = resolveMeasured(widthMeasureSpec, minimumWidth);
+ int computedHeight = resolveMeasured(heightMeasureSpec, minimumHeight);
+ setupGravity((computedWidth - minimumWidth), (computedHeight - minimumHeight));
+ setMeasuredDimension(computedWidth, computedHeight);
}
private void switchToState(int state, float x, float y) {
@@ -521,14 +529,25 @@
TypedArray array = res.obtainTypedArray(resourceId);
int count = array.length();
ArrayList<TargetDrawable> targetDrawables = new ArrayList<TargetDrawable>(count);
+ int maxWidth = mHandleDrawable.getWidth();
+ int maxHeight = mHandleDrawable.getHeight();
for (int i = 0; i < count; i++) {
TypedValue value = array.peekValue(i);
- targetDrawables.add(new TargetDrawable(res, value != null ? value.resourceId : 0));
+ TargetDrawable target= new TargetDrawable(res, value != null ? value.resourceId : 0);
+ targetDrawables.add(target);
+ maxWidth = Math.max(maxWidth, target.getWidth());
+ maxHeight = Math.max(maxHeight, target.getHeight());
}
- array.recycle();
mTargetResourceId = resourceId;
mTargetDrawables = targetDrawables;
- updateTargetPositions();
+ if (mMaxTargetWidth != maxWidth || mMaxTargetHeight != maxHeight) {
+ mMaxTargetWidth = maxWidth;
+ mMaxTargetHeight = maxHeight;
+ requestLayout(); // required to resize layout and call updateTargetPositions()
+ } else {
+ updateTargetPositions();
+ }
+ array.recycle();
}
/**
@@ -638,23 +657,27 @@
boolean handled = false;
switch (action) {
case MotionEvent.ACTION_DOWN:
+ if (DEBUG) Log.v(TAG, "*** DOWN ***");
handleDown(event);
handled = true;
break;
case MotionEvent.ACTION_MOVE:
+ if (DEBUG) Log.v(TAG, "*** MOVE ***");
handleMove(event);
handled = true;
break;
case MotionEvent.ACTION_UP:
+ if (DEBUG) Log.v(TAG, "*** UP ***");
handleMove(event);
handleUp(event);
handled = true;
break;
case MotionEvent.ACTION_CANCEL:
- handleMove(event);
+ if (DEBUG) Log.v(TAG, "*** CANCEL ***");
+ // handleMove(event);
handleCancel(event);
handled = true;
break;
@@ -795,6 +818,11 @@
}
mGrabbedState = newState;
if (mOnTriggerListener != null) {
+ if (newState == OnTriggerListener.NO_HANDLE) {
+ mOnTriggerListener.onReleased(this, OnTriggerListener.CENTER_HANDLE);
+ } else {
+ mOnTriggerListener.onGrabbed(this, OnTriggerListener.CENTER_HANDLE);
+ }
mOnTriggerListener.onGrabbedStateChange(this, mGrabbedState);
}
}
@@ -832,13 +860,45 @@
moveHandleTo(centerX, centerY, false);
}
+ private void setupGravity(int dx, int dy) {
+ final int layoutDirection = getResolvedLayoutDirection();
+ final int absoluteGravity = Gravity.getAbsoluteGravity(mGravity, layoutDirection);
+
+ switch (absoluteGravity & Gravity.HORIZONTAL_GRAVITY_MASK) {
+ case Gravity.LEFT:
+ mHorizontalInset = 0;
+ break;
+ case Gravity.RIGHT:
+ mHorizontalInset = dx;
+ break;
+ case Gravity.CENTER_HORIZONTAL:
+ default:
+ mHorizontalInset = dx / 2;
+ break;
+ }
+ switch (absoluteGravity & Gravity.VERTICAL_GRAVITY_MASK) {
+ case Gravity.TOP:
+ mVerticalInset = 0;
+ break;
+ case Gravity.BOTTOM:
+ mVerticalInset = dy;
+ break;
+ case Gravity.CENTER_VERTICAL:
+ default:
+ mVerticalInset = dy / 2;
+ break;
+ }
+ }
+
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
final int width = right - left;
final int height = bottom - top;
- float newWaveCenterX = mHorizontalOffset + Math.max(width, mOuterRing.getWidth() ) / 2;
- float newWaveCenterY = mVerticalOffset + Math.max(height, mOuterRing.getHeight()) / 2;
+ float newWaveCenterX = mHorizontalOffset + mHorizontalInset
+ + Math.max(width, mMaxTargetWidth + mOuterRing.getWidth()) / 2;
+ float newWaveCenterY = mVerticalOffset + mVerticalInset
+ + Math.max(height, + mMaxTargetHeight + mOuterRing.getHeight()) / 2;
if (newWaveCenterX != mWaveCenterX || newWaveCenterY != mWaveCenterY) {
if (mWaveCenterX == 0 && mWaveCenterY == 0) {
performInitialLayout(newWaveCenterX, newWaveCenterY);
@@ -848,9 +908,8 @@
mOuterRing.setX(mWaveCenterX);
mOuterRing.setY(Math.max(mWaveCenterY, mWaveCenterY));
-
- updateTargetPositions();
}
+ updateTargetPositions();
if (DEBUG) dump();
}
diff --git a/core/jni/Android.mk b/core/jni/Android.mk
index 523b2d5..cd0959b 100644
--- a/core/jni/Android.mk
+++ b/core/jni/Android.mk
@@ -218,6 +218,7 @@
libusbhost \
libharfbuzz \
libz \
+ libsuspend \
ifeq ($(USE_OPENGL_RENDERER),true)
LOCAL_SHARED_LIBRARIES += libhwui
diff --git a/core/jni/android/graphics/BitmapFactory.cpp b/core/jni/android/graphics/BitmapFactory.cpp
index 47ed2c1..3a6c5b0 100644
--- a/core/jni/android/graphics/BitmapFactory.cpp
+++ b/core/jni/android/graphics/BitmapFactory.cpp
@@ -360,6 +360,9 @@
// already have a pixelref installed.
pr = bitmap->pixelRef();
}
+ if (pr == NULL) {
+ return nullObjectReturn("Got null SkPixelRef");
+ }
if (!isMutable) {
// promise we will never change our pixels (great for sharing and pictures)
diff --git a/core/jni/android/graphics/Canvas.cpp b/core/jni/android/graphics/Canvas.cpp
index ef6af74..6b74705 100644
--- a/core/jni/android/graphics/Canvas.cpp
+++ b/core/jni/android/graphics/Canvas.cpp
@@ -69,7 +69,11 @@
SkImageRef_GlobalPool::SetRAMUsed(0);
SkGraphics::PurgeFontCache();
}
-
+
+ static void freeTextLayoutCaches(JNIEnv* env, jobject) {
+ TextLayoutEngine::getInstance().purgeCaches();
+ }
+
static jboolean isOpaque(JNIEnv* env, jobject jcanvas) {
NPE_CHECK_RETURN_ZERO(env, jcanvas);
SkCanvas* canvas = GraphicsJNI::getNativeCanvas(env, jcanvas);
@@ -986,7 +990,9 @@
(void*) SkCanvasGlue::drawTextOnPath__StringPathFFPaint},
{"native_drawPicture", "(II)V", (void*) SkCanvasGlue::drawPicture},
- {"freeCaches", "()V", (void*) SkCanvasGlue::freeCaches}
+ {"freeCaches", "()V", (void*) SkCanvasGlue::freeCaches},
+
+ {"freeTextLayoutCaches", "()V", (void*) SkCanvasGlue::freeTextLayoutCaches}
};
///////////////////////////////////////////////////////////////////////////////
diff --git a/core/jni/android/graphics/TextLayoutCache.cpp b/core/jni/android/graphics/TextLayoutCache.cpp
index 2c38893..673c38d 100644
--- a/core/jni/android/graphics/TextLayoutCache.cpp
+++ b/core/jni/android/graphics/TextLayoutCache.cpp
@@ -34,8 +34,9 @@
#define TYPE_FACE_HEBREW_REGULAR "/system/fonts/DroidSansHebrew-Regular.ttf"
#define TYPE_FACE_HEBREW_BOLD "/system/fonts/DroidSansHebrew-Bold.ttf"
#define TYPEFACE_BENGALI "/system/fonts/Lohit-Bengali.ttf"
-#define TYPEFACE_DEVANAGARI "/system/fonts/Lohit-Devanagari.ttf"
-#define TYPEFACE_TAMIL "/system/fonts/Lohit-Tamil.ttf"
+#define TYPEFACE_DEVANAGARI_REGULAR "/system/fonts/DroidSansDevanagari-Regular.ttf"
+#define TYPEFACE_TAMIL_REGULAR "/system/fonts/DroidSansTamil-Regular.ttf"
+#define TYPEFACE_TAMIL_BOLD "/system/fonts/DroidSansTamil-Bold.ttf"
#define TYPEFACE_THAI "/system/fonts/DroidSansThai.ttf"
ANDROID_SINGLETON_STATIC_INSTANCE(TextLayoutEngine);
@@ -337,8 +338,9 @@
mHebrewBoldTypeface = NULL;
mBengaliTypeface = NULL;
mThaiTypeface = NULL;
- mDevanagariTypeface = NULL;
- mTamilTypeface = NULL;
+ mDevanagariRegularTypeface = NULL;
+ mTamilRegularTypeface = NULL;
+ mTamilBoldTypeface = NULL;
mFontRec.klass = &harfbuzzSkiaClass;
mFontRec.userData = 0;
@@ -364,8 +366,9 @@
SkSafeUnref(mHebrewBoldTypeface);
SkSafeUnref(mBengaliTypeface);
SkSafeUnref(mThaiTypeface);
- SkSafeUnref(mDevanagariTypeface);
- SkSafeUnref(mTamilTypeface);
+ SkSafeUnref(mDevanagariRegularTypeface);
+ SkSafeUnref(mTamilRegularTypeface);
+ SkSafeUnref(mTamilBoldTypeface);
deleteShaperItemGlyphArrays();
}
@@ -801,17 +804,38 @@
break;
case HB_Script_Devanagari:
- typeface = getCachedTypeface(&mDevanagariTypeface, TYPEFACE_DEVANAGARI);
+ typeface = getCachedTypeface(&mDevanagariRegularTypeface, TYPEFACE_DEVANAGARI_REGULAR);
#if DEBUG_GLYPHS
- ALOGD("Using Devanagari Typeface");
+ ALOGD("Using Devanagari Regular Typeface");
#endif
break;
case HB_Script_Tamil:
- typeface = getCachedTypeface(&mTamilTypeface, TYPEFACE_TAMIL);
+ if (typeface) {
+ switch (typeface->style()) {
+ case SkTypeface::kBold:
+ case SkTypeface::kBoldItalic:
+ typeface = getCachedTypeface(&mTamilBoldTypeface, TYPEFACE_TAMIL_BOLD);
#if DEBUG_GLYPHS
- ALOGD("Using Tamil Typeface");
+ ALOGD("Using Tamil Bold Typeface");
#endif
+ break;
+
+ case SkTypeface::kNormal:
+ case SkTypeface::kItalic:
+ default:
+ typeface = getCachedTypeface(&mTamilRegularTypeface, TYPEFACE_TAMIL_REGULAR);
+#if DEBUG_GLYPHS
+ ALOGD("Using Tamil Regular Typeface");
+#endif
+ break;
+ }
+ } else {
+ typeface = getCachedTypeface(&mTamilRegularTypeface, TYPEFACE_TAMIL_REGULAR);
+#if DEBUG_GLYPHS
+ ALOGD("Using Tamil Regular Typeface");
+#endif
+ }
break;
default:
@@ -991,4 +1015,11 @@
return value;
}
+void TextLayoutEngine::purgeCaches() {
+#if USE_TEXT_LAYOUT_CACHE
+ mTextLayoutCache->clear();
+#endif
+}
+
+
} // namespace android
diff --git a/core/jni/android/graphics/TextLayoutCache.h b/core/jni/android/graphics/TextLayoutCache.h
index 7d7caac..027e888 100644
--- a/core/jni/android/graphics/TextLayoutCache.h
+++ b/core/jni/android/graphics/TextLayoutCache.h
@@ -194,8 +194,9 @@
SkTypeface* mHebrewBoldTypeface;
SkTypeface* mBengaliTypeface;
SkTypeface* mThaiTypeface;
- SkTypeface* mDevanagariTypeface;
- SkTypeface* mTamilTypeface;
+ SkTypeface* mDevanagariRegularTypeface;
+ SkTypeface* mTamilRegularTypeface;
+ SkTypeface* mTamilBoldTypeface;
/**
* Cache of Harfbuzz faces
@@ -309,6 +310,9 @@
sp<TextLayoutValue> getValue(const SkPaint* paint, const jchar* text, jint start,
jint count, jint contextCount, jint dirFlags);
+
+ void purgeCaches();
+
private:
TextLayoutCache* mTextLayoutCache;
TextLayoutShaper* mShaper;
diff --git a/core/jni/android_hardware_SensorManager.cpp b/core/jni/android_hardware_SensorManager.cpp
index eddd838..3c1b9c8 100644
--- a/core/jni/android_hardware_SensorManager.cpp
+++ b/core/jni/android_hardware_SensorManager.cpp
@@ -130,10 +130,13 @@
res = queue->waitForEvent();
if (res != NO_ERROR)
return -1;
+ // here we're guaranteed to have an event
res = queue->read(&event, 1);
+ ALOGE_IF(res==0, "sensors_data_poll: nothing to read after waitForEvent()");
}
- if (res < 0)
+ if (res <= 0) {
return -1;
+ }
jint accuracy = event.vector.status;
env->SetFloatArrayRegion(values, 0, 3, event.vector.v);
diff --git a/core/jni/android_os_Power.cpp b/core/jni/android_os_Power.cpp
index 48845f6..a201d8b 100644
--- a/core/jni/android_os_Power.cpp
+++ b/core/jni/android_os_Power.cpp
@@ -24,6 +24,7 @@
#include <hardware/power.h>
#include <hardware_legacy/power.h>
#include <cutils/android_reboot.h>
+#include <suspend/autosuspend.h>
static struct power_module *sPowerModule;
@@ -70,8 +71,14 @@
static int
setScreenState(JNIEnv *env, jobject clazz, jboolean on)
{
- if (sPowerModule)
- sPowerModule->setInteractive(sPowerModule, on);
+ if (on) {
+ autosuspend_disable();
+ sPowerModule->setInteractive(sPowerModule, true);
+ } else {
+ sPowerModule->setInteractive(sPowerModule, false);
+ autosuspend_enable();
+ }
+
return 0;
}
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index bd1f574..dbc60f9 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -155,9 +155,10 @@
receiving or reading an MMS. -->
<permission-group android:name="android.permission-group.MESSAGES"
android:label="@string/permgrouplab_messages"
+ android:icon="@drawable/perm_group_messages"
android:description="@string/permgroupdesc_messages"
android:permissionGroupFlags="personalInfo"
- android:priority="2"/>
+ android:priority="360"/>
<!-- Allows an application to send SMS messages. -->
<permission android:name="android.permission.SEND_SMS"
@@ -250,9 +251,10 @@
<permission-group android:name="android.permission-group.SOCIAL_INFO"
android:label="@string/permgrouplab_socialInfo"
+ android:icon="@drawable/perm_group_social_info"
android:description="@string/permgroupdesc_socialInfo"
android:permissionGroupFlags="personalInfo"
- android:priority="6" />
+ android:priority="320" />
<!-- Allows an application to read the user's contacts data. -->
<permission android:name="android.permission.READ_CONTACTS"
@@ -310,9 +312,10 @@
distinct permissions). -->
<permission-group android:name="android.permission-group.PERSONAL_INFO"
android:label="@string/permgrouplab_personalInfo"
+ android:icon="@drawable/perm_group_personal_info"
android:description="@string/permgroupdesc_personalInfo"
android:permissionGroupFlags="personalInfo"
- android:priority="7" />
+ android:priority="310" />
<!-- Allows an application to read the user's personal profile data. -->
<permission android:name="android.permission.READ_PROFILE"
@@ -338,9 +341,10 @@
calendar to create / view events.-->
<permission-group android:name="android.permission-group.CALENDAR"
android:label="@string/permgrouplab_calendar"
+ android:icon="@drawable/perm_group_calendar"
android:description="@string/permgroupdesc_calendar"
android:permissionGroupFlags="personalInfo"
- android:priority="9" />
+ android:priority="290" />
<!-- Allows an application to read the user's calendar data. -->
<permission android:name="android.permission.READ_CALENDAR"
@@ -366,9 +370,10 @@
calendar to create / view events.-->
<permission-group android:name="android.permission-group.USER_DICTIONARY"
android:label="@string/permgrouplab_dictionary"
+ android:icon="@drawable/perm_group_user_dictionary"
android:description="@string/permgroupdesc_dictionary"
android:permissionGroupFlags="personalInfo"
- android:priority="20" />
+ android:priority="170" />
<!-- Allows an application to read the user dictionary. This should
really only be required by an IME, or a dictionary editor like
@@ -379,9 +384,18 @@
android:label="@string/permlab_readDictionary"
android:description="@string/permdesc_readDictionary" />
+ <!-- Used for permissions that provide access to the user
+ calendar to create / view events.-->
+ <permission-group android:name="android.permission-group.WRITE_USER_DICTIONARY"
+ android:label="@string/permgrouplab_writeDictionary"
+ android:icon="@drawable/perm_group_user_dictionary_write"
+ android:description="@string/permgroupdesc_writeDictionary"
+ android:permissionGroupFlags="personalInfo"
+ android:priority="160" />
+
<!-- Allows an application to write to the user dictionary. -->
<permission android:name="android.permission.WRITE_USER_DICTIONARY"
- android:permissionGroup="android.permission-group.USER_DICTIONARY"
+ android:permissionGroup="android.permission-group.WRITE_USER_DICTIONARY"
android:protectionLevel="normal"
android:label="@string/permlab_writeDictionary"
android:description="@string/permdesc_writeDictionary" />
@@ -395,9 +409,10 @@
bookmarks and browser history.-->
<permission-group android:name="android.permission-group.BOOKMARKS"
android:label="@string/permgrouplab_bookmarks"
+ android:icon="@drawable/perm_group_bookmarks"
android:description="@string/permgroupdesc_bookmarks"
android:permissionGroupFlags="personalInfo"
- android:priority="8" />
+ android:priority="300" />
<!-- Allows an application to read (but not write) the user's
browsing history and bookmarks. -->
@@ -423,9 +438,10 @@
<!-- Used for permissions that provide access to the user voicemail box. -->
<permission-group android:name="android.permission-group.DEVICE_ALARMS"
android:label="@string/permgrouplab_deviceAlarms"
+ android:icon="@drawable/perm_group_device_alarms"
android:description="@string/permgroupdesc_deviceAlarms"
android:permissionGroupFlags="personalInfo"
- android:priority="16"/>
+ android:priority="210" />
<!-- Allows an application to broadcast an Intent to set an alarm for the
user. -->
@@ -443,9 +459,10 @@
<!-- Used for permissions that provide access to the user voicemail box. -->
<permission-group android:name="android.permission-group.VOICEMAIL"
android:label="@string/permgrouplab_voicemail"
+ android:icon="@drawable/perm_group_voicemail"
android:description="@string/permgroupdesc_voicemail"
android:permissionGroupFlags="personalInfo"
- android:priority="10" />
+ android:priority="280" />
<!-- Allows an application to add voicemails into the system. -->
<permission android:name="com.android.voicemail.permission.ADD_VOICEMAIL"
@@ -463,9 +480,10 @@
location. -->
<permission-group android:name="android.permission-group.LOCATION"
android:label="@string/permgrouplab_location"
+ android:icon="@drawable/perm_group_location"
android:description="@string/permgroupdesc_location"
android:permissionGroupFlags="personalInfo"
- android:priority="5" />
+ android:priority="330" />
<!-- Allows an application to access fine (e.g., GPS) location -->
<permission android:name="android.permission.ACCESS_FINE_LOCATION"
@@ -512,8 +530,9 @@
or other related network operations. -->
<permission-group android:name="android.permission-group.NETWORK"
android:label="@string/permgrouplab_network"
+ android:icon="@drawable/perm_group_network"
android:description="@string/permgroupdesc_network"
- android:priority="11" />
+ android:priority="270" />
<!-- Allows applications to open network sockets. -->
<permission android:name="android.permission.INTERNET"
@@ -562,28 +581,36 @@
<!-- ======================================= -->
<eat-comment />
- <!-- Used for permissions that provide access to network services that
- are for peripherals and other nearby devices. These networks
- generally do not provide IP based networking or internet access.-->
- <permission-group android:name="android.permission-group.SHORTRANGE_NETWORK"
- android:label="@string/permgrouplab_shortRangeNetwork"
- android:description="@string/permgroupdesc_shortRangeNetwork"
- android:priority="12" />
+ <!-- Used for permissions that provide access to other devices through Bluetooth.-->
+ <permission-group android:name="android.permission-group.BLUETOOTH_NETWORK"
+ android:label="@string/permgrouplab_bluetoothNetwork"
+ android:icon="@drawable/perm_group_bluetooth"
+ android:description="@string/permgroupdesc_bluetoothNetwork"
+ android:priority="260" />
<!-- Allows applications to connect to paired bluetooth devices -->
<permission android:name="android.permission.BLUETOOTH"
- android:permissionGroup="android.permission-group.SHORTRANGE_NETWORK"
+ android:permissionGroup="android.permission-group.BLUETOOTH_NETWORK"
android:protectionLevel="dangerous"
android:description="@string/permdesc_bluetooth"
android:label="@string/permlab_bluetooth" />
<!-- Allows applications to discover and pair bluetooth devices -->
<permission android:name="android.permission.BLUETOOTH_ADMIN"
- android:permissionGroup="android.permission-group.SHORTRANGE_NETWORK"
+ android:permissionGroup="android.permission-group.BLUETOOTH_NETWORK"
android:protectionLevel="dangerous"
android:description="@string/permdesc_bluetoothAdmin"
android:label="@string/permlab_bluetoothAdmin" />
+ <!-- Used for permissions that provide access to network services that
+ are for peripherals and other nearby devices. These networks
+ generally do not provide IP based networking or internet access.-->
+ <permission-group android:name="android.permission-group.SHORTRANGE_NETWORK"
+ android:label="@string/permgrouplab_shortrangeNetwork"
+ android:icon="@drawable/perm_group_shortrange_network"
+ android:description="@string/permgroupdesc_shortrangeNetwork"
+ android:priority="250" />
+
<!-- Allows applications to perform I/O operations over NFC -->
<permission android:name="android.permission.NFC"
android:permissionGroup="android.permission-group.SHORTRANGE_NETWORK"
@@ -607,9 +634,10 @@
by the Account Manager. -->
<permission-group android:name="android.permission-group.ACCOUNTS"
android:label="@string/permgrouplab_accounts"
+ android:icon="@drawable/perm_group_accounts"
android:description="@string/permgroupdesc_accounts"
android:permissionGroupFlags="personalInfo"
- android:priority="17" />
+ android:priority="200" />
<!-- Allows access to the list of accounts in the Accounts Service -->
<permission android:name="android.permission.GET_ACCOUNTS"
@@ -659,8 +687,9 @@
<permission-group android:name="android.permission-group.AFFECTS_BATTERY"
android:label="@string/permgrouplab_affectsBattery"
+ android:icon="@drawable/perm_group_affects_battery"
android:description="@string/permgroupdesc_affectsBattery"
- android:priority="19" />
+ android:priority="180" />
<!-- Allows applications to enter Wi-Fi Multicast mode -->
<permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE"
@@ -699,8 +728,9 @@
the device. -->
<permission-group android:name="android.permission-group.AUDIO_SETTINGS"
android:label="@string/permgrouplab_audioSettings"
+ android:icon="@drawable/perm_group_audio_settings"
android:description="@string/permgroupdesc_audioSettings"
- android:priority="25" />
+ android:priority="130" />
<!-- Allows an application to modify global audio settings -->
<permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"
@@ -719,7 +749,7 @@
<permission-group android:name="android.permission-group.HARDWARE_CONTROLS"
android:label="@string/permgrouplab_hardwareControls"
android:description="@string/permgroupdesc_hardwareControls"
- android:priority="26"/>
+ android:priority="260"/>
<!-- Allows an application to manage preferences and permissions for USB devices
@hide -->
@@ -766,9 +796,10 @@
but are in a separate (more visible) permission group. -->
<permission-group android:name="android.permission-group.MICROPHONE"
android:label="@string/permgrouplab_microphone"
+ android:icon="@drawable/perm_group_microphone"
android:description="@string/permgroupdesc_microphone"
android:permissionGroupFlags="personalInfo"
- android:priority="4" />
+ android:priority="340" />
<!-- Allows an application to record audio -->
<permission android:name="android.permission.RECORD_AUDIO"
@@ -786,9 +817,10 @@
camera or capturing images/video from the device. -->
<permission-group android:name="android.permission-group.CAMERA"
android:label="@string/permgrouplab_camera"
+ android:icon="@drawable/perm_group_camera"
android:description="@string/permgroupdesc_camera"
android:permissionGroupFlags="personalInfo"
- android:priority="3" />
+ android:priority="350" />
<!-- Required to be able to access the camera device.
<p>This will automatically enforce the <a
@@ -813,9 +845,10 @@
and modifying the phone state. -->
<permission-group android:name="android.permission-group.PHONE_CALLS"
android:label="@string/permgrouplab_phoneCalls"
+ android:icon="@drawable/perm_group_phone_calls"
android:description="@string/permgroupdesc_phoneCalls"
android:permissionGroupFlags="personalInfo"
- android:priority="1" />
+ android:priority="370" />
<!-- Allows an application to monitor, modify, or abort outgoing
calls. -->
@@ -870,9 +903,10 @@
<!-- Group of permissions that are related to SD card access. -->
<permission-group android:name="android.permission-group.STORAGE"
android:label="@string/permgrouplab_storage"
+ android:icon="@drawable/perm_group_storage"
android:description="@string/permgroupdesc_storage"
android:permissionGroupFlags="personalInfo"
- android:priority="13" />
+ android:priority="240" />
<!-- Allows an application to read from external storage -->
<permission android:name="android.permission.READ_EXTERNAL_STORAGE"
@@ -904,8 +938,10 @@
<!-- Group of permissions that are related to the screenlock. -->
<permission-group android:name="android.permission-group.SCREENLOCK"
android:label="@string/permgrouplab_storage"
+ android:icon="@drawable/perm_group_screenlock"
android:permissionGroupFlags="personalInfo"
- android:description="@string/permgroupdesc_storage" />
+ android:description="@string/permgroupdesc_storage"
+ android:priority="230" />
<!-- Allows applications to disable the keyguard -->
<permission android:name="android.permission.DISABLE_KEYGUARD"
@@ -924,7 +960,9 @@
running apps, or killing background processes. -->
<permission-group android:name="android.permission-group.APP_INFO"
android:label="@string/permgrouplab_appInfo"
- android:description="@string/permgroupdesc_appInfo" />
+ android:icon="@drawable/perm_group_app_info"
+ android:description="@string/permgroupdesc_appInfo"
+ android:priority="220" />
<!-- Allows an application to get information about the currently
or recently running tasks. -->
@@ -990,8 +1028,9 @@
another application displays UI to the user. -->
<permission-group android:name="android.permission-group.DISPLAY"
android:label="@string/permgrouplab_display"
+ android:icon="@drawable/perm_group_display"
android:description="@string/permgroupdesc_display"
- android:priority="18"/>
+ android:priority="190"/>
<!-- Allows an application to open windows using the type
{@link android.view.WindowManager.LayoutParams#TYPE_SYSTEM_ALERT},
@@ -1013,8 +1052,9 @@
another application displays UI to the user. -->
<permission-group android:name="android.permission-group.WALLPAPER"
android:label="@string/permgrouplab_wallpaper"
+ android:icon="@drawable/perm_group_wallpaper"
android:description="@string/permgroupdesc_wallpaper"
- android:priority="22" />
+ android:priority="150" />
<!-- Allows applications to set the wallpaper -->
<permission android:name="android.permission.SET_WALLPAPER"
@@ -1038,8 +1078,9 @@
<!-- Group of permissions that are related to system clock. -->
<permission-group android:name="android.permission-group.SYSTEM_CLOCK"
android:label="@string/permgrouplab_systemClock"
+ android:icon="@drawable/perm_group_system_clock"
android:description="@string/permgroupdesc_systemClock"
- android:priority="23" />
+ android:priority="140" />
<!-- Allows applications to set the system time -->
<permission android:name="android.permission.SET_TIME"
@@ -1061,7 +1102,9 @@
<!-- Used for permissions that change the status bar -->
<permission-group android:name="android.permission-group.STATUS_BAR"
android:label="@string/permgrouplab_statusBar"
- android:description="@string/permgroupdesc_statusBar" />
+ android:icon="@drawable/perm_group_status_bar"
+ android:description="@string/permgroupdesc_statusBar"
+ android:priority="110" />
<!-- Allows an application to expand or collapse the status bar. -->
<permission android:name="android.permission.EXPAND_STATUS_BAR"
@@ -1078,8 +1121,9 @@
related information. -->
<permission-group android:name="android.permission-group.SYNC_SETTINGS"
android:label="@string/permgrouplab_syncSettings"
+ android:icon="@drawable/perm_group_sync_settings"
android:description="@string/permgroupdesc_syncSettings"
- android:priority="29" />
+ android:priority="120" />
<!-- Allows applications to read the sync settings -->
<permission android:name="android.permission.READ_SYNC_SETTINGS"
@@ -1116,8 +1160,9 @@
such as writing the global system settings. -->
<permission-group android:name="android.permission-group.SYSTEM_TOOLS"
android:label="@string/permgrouplab_systemTools"
+ android:icon="@drawable/perm_group_system_tools"
android:description="@string/permgroupdesc_systemTools"
- android:priority="30" />
+ android:priority="100" />
<!-- @hide Change the screen compatibility mode of applications -->
<permission android:name="android.permission.SET_SCREEN_COMPATIBILITY"
@@ -1345,7 +1390,7 @@
<permission-group android:name="android.permission-group.DEVELOPMENT_TOOLS"
android:label="@string/permgrouplab_developmentTools"
android:description="@string/permgroupdesc_developmentTools"
- android:priority="31" />
+ android:priority="310" />
<!-- Allows an application to read or write the secure system settings. -->
<permission android:name="android.permission.WRITE_SECURE_SETTINGS"
@@ -1549,7 +1594,8 @@
android:protectionLevel="signature" />
<!-- Allows low-level access to setting the keyboard layout.
- Not for use by normal applications. -->
+ Not for use by normal applications.
+ @hide -->
<permission android:name="android.permission.SET_KEYBOARD_LAYOUT"
android:label="@string/permlab_setKeyboardLayout"
android:description="@string/permdesc_setKeyboardLayout"
diff --git a/core/res/res/drawable-hdpi/perm_group_accounts.png b/core/res/res/drawable-hdpi/perm_group_accounts.png
new file mode 100644
index 0000000..db59ab0
--- /dev/null
+++ b/core/res/res/drawable-hdpi/perm_group_accounts.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_affects_battery.png b/core/res/res/drawable-hdpi/perm_group_affects_battery.png
new file mode 100644
index 0000000..8ca8154
--- /dev/null
+++ b/core/res/res/drawable-hdpi/perm_group_affects_battery.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_app_info.png b/core/res/res/drawable-hdpi/perm_group_app_info.png
new file mode 100644
index 0000000..b03e2f3
--- /dev/null
+++ b/core/res/res/drawable-hdpi/perm_group_app_info.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_audio_settings.png b/core/res/res/drawable-hdpi/perm_group_audio_settings.png
new file mode 100644
index 0000000..4e652a8
--- /dev/null
+++ b/core/res/res/drawable-hdpi/perm_group_audio_settings.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_bluetooth.png b/core/res/res/drawable-hdpi/perm_group_bluetooth.png
new file mode 100644
index 0000000..0f28454
--- /dev/null
+++ b/core/res/res/drawable-hdpi/perm_group_bluetooth.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_bookmarks.png b/core/res/res/drawable-hdpi/perm_group_bookmarks.png
new file mode 100644
index 0000000..06f63445
--- /dev/null
+++ b/core/res/res/drawable-hdpi/perm_group_bookmarks.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_calendar.png b/core/res/res/drawable-hdpi/perm_group_calendar.png
new file mode 100644
index 0000000..c0a4dfd
--- /dev/null
+++ b/core/res/res/drawable-hdpi/perm_group_calendar.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_camera.png b/core/res/res/drawable-hdpi/perm_group_camera.png
new file mode 100644
index 0000000..cbc07b0
--- /dev/null
+++ b/core/res/res/drawable-hdpi/perm_group_camera.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_device_alarms.png b/core/res/res/drawable-hdpi/perm_group_device_alarms.png
new file mode 100644
index 0000000..d44b9de
--- /dev/null
+++ b/core/res/res/drawable-hdpi/perm_group_device_alarms.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_display.png b/core/res/res/drawable-hdpi/perm_group_display.png
new file mode 100644
index 0000000..e8afece
--- /dev/null
+++ b/core/res/res/drawable-hdpi/perm_group_display.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_location.png b/core/res/res/drawable-hdpi/perm_group_location.png
new file mode 100644
index 0000000..dc2f8ef
--- /dev/null
+++ b/core/res/res/drawable-hdpi/perm_group_location.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_messages.png b/core/res/res/drawable-hdpi/perm_group_messages.png
new file mode 100644
index 0000000..680c178
--- /dev/null
+++ b/core/res/res/drawable-hdpi/perm_group_messages.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_microphone.png b/core/res/res/drawable-hdpi/perm_group_microphone.png
new file mode 100644
index 0000000..a73a945
--- /dev/null
+++ b/core/res/res/drawable-hdpi/perm_group_microphone.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_network.png b/core/res/res/drawable-hdpi/perm_group_network.png
new file mode 100644
index 0000000..c750e2aa
--- /dev/null
+++ b/core/res/res/drawable-hdpi/perm_group_network.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_personal_info.png b/core/res/res/drawable-hdpi/perm_group_personal_info.png
new file mode 100644
index 0000000..130e7ad
--- /dev/null
+++ b/core/res/res/drawable-hdpi/perm_group_personal_info.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_phone_calls.png b/core/res/res/drawable-hdpi/perm_group_phone_calls.png
new file mode 100644
index 0000000..577855b
--- /dev/null
+++ b/core/res/res/drawable-hdpi/perm_group_phone_calls.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_screenlock.png b/core/res/res/drawable-hdpi/perm_group_screenlock.png
new file mode 100644
index 0000000..9c5143d
--- /dev/null
+++ b/core/res/res/drawable-hdpi/perm_group_screenlock.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_shortrange_network.png b/core/res/res/drawable-hdpi/perm_group_shortrange_network.png
new file mode 100644
index 0000000..554a4e4
--- /dev/null
+++ b/core/res/res/drawable-hdpi/perm_group_shortrange_network.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_social_info.png b/core/res/res/drawable-hdpi/perm_group_social_info.png
new file mode 100644
index 0000000..134990b
--- /dev/null
+++ b/core/res/res/drawable-hdpi/perm_group_social_info.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_status_bar.png b/core/res/res/drawable-hdpi/perm_group_status_bar.png
new file mode 100644
index 0000000..bda963b
--- /dev/null
+++ b/core/res/res/drawable-hdpi/perm_group_status_bar.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_storage.png b/core/res/res/drawable-hdpi/perm_group_storage.png
new file mode 100644
index 0000000..e6b3965
--- /dev/null
+++ b/core/res/res/drawable-hdpi/perm_group_storage.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_sync_settings.png b/core/res/res/drawable-hdpi/perm_group_sync_settings.png
new file mode 100644
index 0000000..be70866
--- /dev/null
+++ b/core/res/res/drawable-hdpi/perm_group_sync_settings.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_system_clock.png b/core/res/res/drawable-hdpi/perm_group_system_clock.png
new file mode 100644
index 0000000..75794c3
--- /dev/null
+++ b/core/res/res/drawable-hdpi/perm_group_system_clock.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_system_tools.png b/core/res/res/drawable-hdpi/perm_group_system_tools.png
new file mode 100644
index 0000000..3fd4385
--- /dev/null
+++ b/core/res/res/drawable-hdpi/perm_group_system_tools.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_user_dictionary.png b/core/res/res/drawable-hdpi/perm_group_user_dictionary.png
new file mode 100644
index 0000000..98a0894
--- /dev/null
+++ b/core/res/res/drawable-hdpi/perm_group_user_dictionary.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_user_dictionary_write.png b/core/res/res/drawable-hdpi/perm_group_user_dictionary_write.png
new file mode 100644
index 0000000..784ea0f
--- /dev/null
+++ b/core/res/res/drawable-hdpi/perm_group_user_dictionary_write.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_voicemail.png b/core/res/res/drawable-hdpi/perm_group_voicemail.png
new file mode 100644
index 0000000..b08b153
--- /dev/null
+++ b/core/res/res/drawable-hdpi/perm_group_voicemail.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_wallpaper.png b/core/res/res/drawable-hdpi/perm_group_wallpaper.png
new file mode 100644
index 0000000..cf073a4
--- /dev/null
+++ b/core/res/res/drawable-hdpi/perm_group_wallpaper.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_accounts.png b/core/res/res/drawable-mdpi/perm_group_accounts.png
new file mode 100644
index 0000000..3dd4043
--- /dev/null
+++ b/core/res/res/drawable-mdpi/perm_group_accounts.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_affects_battery.png b/core/res/res/drawable-mdpi/perm_group_affects_battery.png
new file mode 100644
index 0000000..7291916
--- /dev/null
+++ b/core/res/res/drawable-mdpi/perm_group_affects_battery.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_app_info.png b/core/res/res/drawable-mdpi/perm_group_app_info.png
new file mode 100644
index 0000000..8ba65bd
--- /dev/null
+++ b/core/res/res/drawable-mdpi/perm_group_app_info.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_audio_settings.png b/core/res/res/drawable-mdpi/perm_group_audio_settings.png
new file mode 100644
index 0000000..f2f461b
--- /dev/null
+++ b/core/res/res/drawable-mdpi/perm_group_audio_settings.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_bluetooth.png b/core/res/res/drawable-mdpi/perm_group_bluetooth.png
new file mode 100644
index 0000000..6db6fde
--- /dev/null
+++ b/core/res/res/drawable-mdpi/perm_group_bluetooth.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_bookmarks.png b/core/res/res/drawable-mdpi/perm_group_bookmarks.png
new file mode 100644
index 0000000..f908e14
--- /dev/null
+++ b/core/res/res/drawable-mdpi/perm_group_bookmarks.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_calendar.png b/core/res/res/drawable-mdpi/perm_group_calendar.png
new file mode 100644
index 0000000..5905973
--- /dev/null
+++ b/core/res/res/drawable-mdpi/perm_group_calendar.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_camera.png b/core/res/res/drawable-mdpi/perm_group_camera.png
new file mode 100644
index 0000000..be1c9e6
--- /dev/null
+++ b/core/res/res/drawable-mdpi/perm_group_camera.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_device_alarms.png b/core/res/res/drawable-mdpi/perm_group_device_alarms.png
new file mode 100644
index 0000000..48d6d6a
--- /dev/null
+++ b/core/res/res/drawable-mdpi/perm_group_device_alarms.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_display.png b/core/res/res/drawable-mdpi/perm_group_display.png
new file mode 100644
index 0000000..e10609c
--- /dev/null
+++ b/core/res/res/drawable-mdpi/perm_group_display.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_location.png b/core/res/res/drawable-mdpi/perm_group_location.png
new file mode 100644
index 0000000..e79ec25
--- /dev/null
+++ b/core/res/res/drawable-mdpi/perm_group_location.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_messages.png b/core/res/res/drawable-mdpi/perm_group_messages.png
new file mode 100644
index 0000000..dfb3ba7
--- /dev/null
+++ b/core/res/res/drawable-mdpi/perm_group_messages.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_microphone.png b/core/res/res/drawable-mdpi/perm_group_microphone.png
new file mode 100644
index 0000000..9bab315
--- /dev/null
+++ b/core/res/res/drawable-mdpi/perm_group_microphone.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_network.png b/core/res/res/drawable-mdpi/perm_group_network.png
new file mode 100644
index 0000000..f2798a7
--- /dev/null
+++ b/core/res/res/drawable-mdpi/perm_group_network.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_personal_info.png b/core/res/res/drawable-mdpi/perm_group_personal_info.png
new file mode 100644
index 0000000..6233a82
--- /dev/null
+++ b/core/res/res/drawable-mdpi/perm_group_personal_info.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_phone_calls.png b/core/res/res/drawable-mdpi/perm_group_phone_calls.png
new file mode 100644
index 0000000..ff3ffd5
--- /dev/null
+++ b/core/res/res/drawable-mdpi/perm_group_phone_calls.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_screenlock.png b/core/res/res/drawable-mdpi/perm_group_screenlock.png
new file mode 100644
index 0000000..abfe6e4
--- /dev/null
+++ b/core/res/res/drawable-mdpi/perm_group_screenlock.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_shortrange_network.png b/core/res/res/drawable-mdpi/perm_group_shortrange_network.png
new file mode 100644
index 0000000..5d73375
--- /dev/null
+++ b/core/res/res/drawable-mdpi/perm_group_shortrange_network.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_social_info.png b/core/res/res/drawable-mdpi/perm_group_social_info.png
new file mode 100644
index 0000000..c862f9e
--- /dev/null
+++ b/core/res/res/drawable-mdpi/perm_group_social_info.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_status_bar.png b/core/res/res/drawable-mdpi/perm_group_status_bar.png
new file mode 100644
index 0000000..4158fa6
--- /dev/null
+++ b/core/res/res/drawable-mdpi/perm_group_status_bar.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_storage.png b/core/res/res/drawable-mdpi/perm_group_storage.png
new file mode 100644
index 0000000..3dcfb22
--- /dev/null
+++ b/core/res/res/drawable-mdpi/perm_group_storage.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_sync_settings.png b/core/res/res/drawable-mdpi/perm_group_sync_settings.png
new file mode 100644
index 0000000..5a0e5ff
--- /dev/null
+++ b/core/res/res/drawable-mdpi/perm_group_sync_settings.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_system_clock.png b/core/res/res/drawable-mdpi/perm_group_system_clock.png
new file mode 100644
index 0000000..e4d5743
--- /dev/null
+++ b/core/res/res/drawable-mdpi/perm_group_system_clock.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_system_tools.png b/core/res/res/drawable-mdpi/perm_group_system_tools.png
new file mode 100644
index 0000000..fc7337d
--- /dev/null
+++ b/core/res/res/drawable-mdpi/perm_group_system_tools.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_user_dictionary.png b/core/res/res/drawable-mdpi/perm_group_user_dictionary.png
new file mode 100644
index 0000000..92864ba
--- /dev/null
+++ b/core/res/res/drawable-mdpi/perm_group_user_dictionary.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_user_dictionary_write.png b/core/res/res/drawable-mdpi/perm_group_user_dictionary_write.png
new file mode 100644
index 0000000..9f48713
--- /dev/null
+++ b/core/res/res/drawable-mdpi/perm_group_user_dictionary_write.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_voicemail.png b/core/res/res/drawable-mdpi/perm_group_voicemail.png
new file mode 100644
index 0000000..a34d689
--- /dev/null
+++ b/core/res/res/drawable-mdpi/perm_group_voicemail.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_wallpaper.png b/core/res/res/drawable-mdpi/perm_group_wallpaper.png
new file mode 100644
index 0000000..b990e7f
--- /dev/null
+++ b/core/res/res/drawable-mdpi/perm_group_wallpaper.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_accounts.png b/core/res/res/drawable-xhdpi/perm_group_accounts.png
new file mode 100644
index 0000000..74cd33b
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/perm_group_accounts.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_affects_battery.png b/core/res/res/drawable-xhdpi/perm_group_affects_battery.png
new file mode 100644
index 0000000..d4a9bb5d
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/perm_group_affects_battery.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_app_info.png b/core/res/res/drawable-xhdpi/perm_group_app_info.png
new file mode 100644
index 0000000..46089e5
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/perm_group_app_info.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_audio_settings.png b/core/res/res/drawable-xhdpi/perm_group_audio_settings.png
new file mode 100644
index 0000000..2f7cbc3
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/perm_group_audio_settings.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_bluetooth.png b/core/res/res/drawable-xhdpi/perm_group_bluetooth.png
new file mode 100644
index 0000000..6bbde52
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/perm_group_bluetooth.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_bookmarks.png b/core/res/res/drawable-xhdpi/perm_group_bookmarks.png
new file mode 100644
index 0000000..1277d03
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/perm_group_bookmarks.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_calendar.png b/core/res/res/drawable-xhdpi/perm_group_calendar.png
new file mode 100644
index 0000000..3c7f2d3
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/perm_group_calendar.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_camera.png b/core/res/res/drawable-xhdpi/perm_group_camera.png
new file mode 100644
index 0000000..a454554
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/perm_group_camera.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_device_alarms.png b/core/res/res/drawable-xhdpi/perm_group_device_alarms.png
new file mode 100644
index 0000000..1bb151c
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/perm_group_device_alarms.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_display.png b/core/res/res/drawable-xhdpi/perm_group_display.png
new file mode 100644
index 0000000..9e36cf8
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/perm_group_display.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_location.png b/core/res/res/drawable-xhdpi/perm_group_location.png
new file mode 100644
index 0000000..4c49521
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/perm_group_location.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_messages.png b/core/res/res/drawable-xhdpi/perm_group_messages.png
new file mode 100644
index 0000000..f046d46
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/perm_group_messages.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_microphone.png b/core/res/res/drawable-xhdpi/perm_group_microphone.png
new file mode 100644
index 0000000..bdb66e2
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/perm_group_microphone.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_network.png b/core/res/res/drawable-xhdpi/perm_group_network.png
new file mode 100644
index 0000000..fe1adad
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/perm_group_network.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_personal_info.png b/core/res/res/drawable-xhdpi/perm_group_personal_info.png
new file mode 100644
index 0000000..1ae418f
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/perm_group_personal_info.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_phone_calls.png b/core/res/res/drawable-xhdpi/perm_group_phone_calls.png
new file mode 100644
index 0000000..288e15c
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/perm_group_phone_calls.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_screenlock.png b/core/res/res/drawable-xhdpi/perm_group_screenlock.png
new file mode 100644
index 0000000..bf3ec34
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/perm_group_screenlock.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_shortrange_network.png b/core/res/res/drawable-xhdpi/perm_group_shortrange_network.png
new file mode 100644
index 0000000..5e1e240
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/perm_group_shortrange_network.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_social_info.png b/core/res/res/drawable-xhdpi/perm_group_social_info.png
new file mode 100644
index 0000000..2111a83
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/perm_group_social_info.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_status_bar.png b/core/res/res/drawable-xhdpi/perm_group_status_bar.png
new file mode 100644
index 0000000..ce65380
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/perm_group_status_bar.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_storage.png b/core/res/res/drawable-xhdpi/perm_group_storage.png
new file mode 100644
index 0000000..4cd5c9b
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/perm_group_storage.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_sync_settings.png b/core/res/res/drawable-xhdpi/perm_group_sync_settings.png
new file mode 100644
index 0000000..24eb579
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/perm_group_sync_settings.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_system_clock.png b/core/res/res/drawable-xhdpi/perm_group_system_clock.png
new file mode 100644
index 0000000..36d1294
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/perm_group_system_clock.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_system_tools.png b/core/res/res/drawable-xhdpi/perm_group_system_tools.png
new file mode 100644
index 0000000..7b6cdd8
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/perm_group_system_tools.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_user_dictionary.png b/core/res/res/drawable-xhdpi/perm_group_user_dictionary.png
new file mode 100644
index 0000000..c0106bb
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/perm_group_user_dictionary.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_user_dictionary_write.png b/core/res/res/drawable-xhdpi/perm_group_user_dictionary_write.png
new file mode 100644
index 0000000..36bb395
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/perm_group_user_dictionary_write.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_voicemail.png b/core/res/res/drawable-xhdpi/perm_group_voicemail.png
new file mode 100644
index 0000000..eb17a63
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/perm_group_voicemail.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_wallpaper.png b/core/res/res/drawable-xhdpi/perm_group_wallpaper.png
new file mode 100644
index 0000000..be4663c
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/perm_group_wallpaper.png
Binary files differ
diff --git a/core/res/res/layout-sw600dp/keyguard_screen_sim_pin_portrait.xml b/core/res/res/layout-sw600dp/keyguard_screen_sim_pin_portrait.xml
index d8bea56..1be4462 100644
--- a/core/res/res/layout-sw600dp/keyguard_screen_sim_pin_portrait.xml
+++ b/core/res/res/layout-sw600dp/keyguard_screen_sim_pin_portrait.xml
@@ -57,12 +57,13 @@
android:background="@android:drawable/edit_text">
<!-- displays dots as user enters pin -->
- <TextView android:id="@+id/pinDisplay"
+ <EditText android:id="@+id/pinDisplay"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1"
android:maxLines="1"
android:textAppearance="?android:attr/textAppearanceLargeInverse"
+ android:textColor="@android:color/primary_text_holo_light"
android:textStyle="bold"
android:inputType="textPassword"
/>
diff --git a/core/res/res/layout-sw600dp/keyguard_screen_tab_unlock.xml b/core/res/res/layout-sw600dp/keyguard_screen_tab_unlock.xml
index 73dadb4..66cf98d 100644
--- a/core/res/res/layout-sw600dp/keyguard_screen_tab_unlock.xml
+++ b/core/res/res/layout-sw600dp/keyguard_screen_tab_unlock.xml
@@ -85,10 +85,10 @@
<com.android.internal.widget.multiwaveview.MultiWaveView
android:id="@+id/unlock_widget"
android:orientation="horizontal"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_alignParentBottom="true"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
android:layout_gravity="center"
+ android:gravity="center"
android:targetDrawables="@array/lockscreen_targets_with_camera"
android:targetDescriptions="@array/lockscreen_target_descriptions_with_camera"
@@ -99,8 +99,6 @@
android:snapMargin="@dimen/multiwaveview_snap_margin"
android:hitRadius="@dimen/multiwaveview_hit_radius"
android:rightChevronDrawable="@drawable/ic_lockscreen_chevron_right"
- android:horizontalOffset="0dip"
- android:verticalOffset="60dip"
android:feedbackCount="3"
android:vibrationDuration="20"
/>
diff --git a/core/res/res/layout-sw600dp/keyguard_screen_tab_unlock_land.xml b/core/res/res/layout-sw600dp/keyguard_screen_tab_unlock_land.xml
index 10b1ace..65b442b 100644
--- a/core/res/res/layout-sw600dp/keyguard_screen_tab_unlock_land.xml
+++ b/core/res/res/layout-sw600dp/keyguard_screen_tab_unlock_land.xml
@@ -84,10 +84,11 @@
<com.android.internal.widget.multiwaveview.MultiWaveView
android:id="@+id/unlock_widget"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
android:layout_rowSpan="7"
android:layout_gravity="center_vertical|center_horizontal"
+ android:gravity="center"
android:targetDrawables="@array/lockscreen_targets_with_camera"
android:targetDescriptions="@array/lockscreen_target_descriptions_with_camera"
@@ -100,8 +101,6 @@
android:rightChevronDrawable="@drawable/ic_lockscreen_chevron_right"
android:feedbackCount="3"
android:vibrationDuration="20"
- android:horizontalOffset="0dip"
- android:verticalOffset="0dip"
/>
<!-- emergency call button shown when sim is PUKd and tab_selector is hidden -->
diff --git a/core/res/res/layout/app_permission_item.xml b/core/res/res/layout/app_permission_item.xml
index 9b8c5ae..c448bd1 100644
--- a/core/res/res/layout/app_permission_item.xml
+++ b/core/res/res/layout/app_permission_item.xml
@@ -42,6 +42,7 @@
<TextView
android:id="@+id/perm_name"
android:textAppearance="?android:attr/textAppearanceSmall"
+ android:textSize="16sp"
android:layout_marginLeft="8dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
diff --git a/core/res/res/layout/keyguard_screen_sim_pin_portrait.xml b/core/res/res/layout/keyguard_screen_sim_pin_portrait.xml
index 6e8a645..9ca351c 100644
--- a/core/res/res/layout/keyguard_screen_sim_pin_portrait.xml
+++ b/core/res/res/layout/keyguard_screen_sim_pin_portrait.xml
@@ -57,12 +57,13 @@
android:background="@android:drawable/edit_text">
<!-- displays dots as user enters pin -->
- <TextView android:id="@+id/pinDisplay"
+ <EditText android:id="@+id/pinDisplay"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1"
android:maxLines="1"
android:textAppearance="?android:attr/textAppearanceLargeInverse"
+ android:textColor="@android:color/primary_text_holo_light"
android:textStyle="bold"
android:inputType="textPassword"
/>
diff --git a/core/res/res/layout/keyguard_screen_sim_puk_landscape.xml b/core/res/res/layout/keyguard_screen_sim_puk_landscape.xml
index 722dc26..56e6426 100644
--- a/core/res/res/layout/keyguard_screen_sim_puk_landscape.xml
+++ b/core/res/res/layout/keyguard_screen_sim_puk_landscape.xml
@@ -122,14 +122,16 @@
android:background="@android:drawable/edit_text">
<!-- displays dots as user enters new pin -->
- <TextView android:id="@+id/pinDisplay"
+ <EditText android:id="@+id/pinDisplay"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1"
android:maxLines="1"
android:textAppearance="?android:attr/textAppearanceLargeInverse"
+ android:textColor="@android:color/primary_text_holo_light"
android:textStyle="bold"
android:inputType="textPassword"
+ android:hint="@android:string/keyguard_password_enter_pin_prompt"
/>
<ImageButton android:id="@+id/pinDel"
diff --git a/core/res/res/layout/keyguard_screen_tab_unlock.xml b/core/res/res/layout/keyguard_screen_tab_unlock.xml
index 0ec8f75..3fd3023 100644
--- a/core/res/res/layout/keyguard_screen_tab_unlock.xml
+++ b/core/res/res/layout/keyguard_screen_tab_unlock.xml
@@ -129,6 +129,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentBottom="true"
+ android:gravity="top"
android:targetDrawables="@array/lockscreen_targets_with_camera"
android:targetDescriptions="@array/lockscreen_target_descriptions_with_camera"
@@ -139,8 +140,6 @@
android:snapMargin="@dimen/multiwaveview_snap_margin"
android:hitRadius="@dimen/multiwaveview_hit_radius"
android:rightChevronDrawable="@drawable/ic_lockscreen_chevron_right"
- android:horizontalOffset="0dip"
- android:verticalOffset="60dip"
android:feedbackCount="3"
android:vibrationDuration="20"
/>
diff --git a/core/res/res/layout/keyguard_screen_tab_unlock_land.xml b/core/res/res/layout/keyguard_screen_tab_unlock_land.xml
index 294f91e..cd03c10 100644
--- a/core/res/res/layout/keyguard_screen_tab_unlock_land.xml
+++ b/core/res/res/layout/keyguard_screen_tab_unlock_land.xml
@@ -131,9 +131,10 @@
<!-- Column 2 -->
<com.android.internal.widget.multiwaveview.MultiWaveView
android:id="@+id/unlock_widget"
- android:layout_width="200dip"
+ android:layout_width="302dip"
android:layout_height="match_parent"
android:layout_rowSpan="7"
+ android:gravity="center"
android:targetDrawables="@array/lockscreen_targets_with_camera"
android:targetDescriptions="@array/lockscreen_target_descriptions_with_camera"
@@ -146,8 +147,6 @@
android:topChevronDrawable="@drawable/ic_lockscreen_chevron_up"
android:feedbackCount="3"
android:vibrationDuration="20"
- android:horizontalOffset="0dip"
- android:verticalOffset="0dip"
/>
<!-- Music transport control -->
diff --git a/core/res/res/layout/notification_template_big_base.xml b/core/res/res/layout/notification_template_big_base.xml
index 097d15d..f8b24e2 100644
--- a/core/res/res/layout/notification_template_big_base.xml
+++ b/core/res/res/layout/notification_template_big_base.xml
@@ -43,99 +43,106 @@
android:gravity="center_vertical"
>
<LinearLayout
- android:id="@+id/line1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:orientation="horizontal"
+ android:minHeight="@dimen/notification_large_icon_height"
+ android:orientation="vertical"
>
- <TextView android:id="@+id/title"
- android:textAppearance="@style/TextAppearance.StatusBar.EventContent.Title"
+ <LinearLayout
+ android:id="@+id/line1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ >
+ <TextView android:id="@+id/title"
+ android:textAppearance="@style/TextAppearance.StatusBar.EventContent.Title"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:singleLine="true"
+ android:ellipsize="marquee"
+ android:fadingEdge="horizontal"
+ android:layout_weight="1"
+ />
+ <ViewStub android:id="@+id/time"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:layout_weight="0"
+ android:visibility="gone"
+ android:layout="@layout/notification_template_part_time"
+ />
+ <ViewStub android:id="@+id/chronometer"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:layout_weight="0"
+ android:visibility="gone"
+ android:layout="@layout/notification_template_part_chronometer"
+ />
+ </LinearLayout>
+ <TextView android:id="@+id/text2"
+ android:textAppearance="@style/TextAppearance.StatusBar.EventContent.Line2"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="-2dp"
+ android:layout_marginBottom="-2dp"
android:singleLine="true"
- android:ellipsize="marquee"
android:fadingEdge="horizontal"
- android:layout_weight="1"
- />
- <ViewStub android:id="@+id/time"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:layout_weight="0"
+ android:ellipsize="marquee"
android:visibility="gone"
- android:layout="@layout/notification_template_part_time"
/>
- <ViewStub android:id="@+id/chronometer"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:layout_weight="0"
- android:visibility="gone"
- android:layout="@layout/notification_template_part_chronometer"
- />
- </LinearLayout>
- <TextView android:id="@+id/text2"
- android:textAppearance="@style/TextAppearance.StatusBar.EventContent.Line2"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginTop="-2dp"
- android:layout_marginBottom="-2dp"
- android:singleLine="true"
- android:fadingEdge="horizontal"
- android:ellipsize="marquee"
- android:visibility="gone"
- />
- <TextView android:id="@+id/big_text"
- android:textAppearance="@style/TextAppearance.StatusBar.EventContent"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:singleLine="false"
- android:visibility="gone"
- />
- <LinearLayout
- android:id="@+id/line3"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- >
- <TextView android:id="@+id/text"
+ <TextView android:id="@+id/big_text"
android:textAppearance="@style/TextAppearance.StatusBar.EventContent"
- android:layout_width="0dp"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_weight="1"
- android:layout_gravity="center"
- android:singleLine="true"
- android:ellipsize="marquee"
- android:fadingEdge="horizontal"
- />
- <TextView android:id="@+id/info"
- android:textAppearance="@style/TextAppearance.StatusBar.EventContent.Info"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:layout_weight="0"
- android:singleLine="true"
- android:gravity="center"
- android:paddingLeft="8dp"
- />
- <ImageView android:id="@+id/right_icon"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:layout_weight="0"
- android:scaleType="center"
- android:paddingLeft="8dp"
+ android:singleLine="false"
android:visibility="gone"
- android:drawableAlpha="180"
+ />
+ <LinearLayout
+ android:id="@+id/line3"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ >
+ <TextView android:id="@+id/text"
+ android:textAppearance="@style/TextAppearance.StatusBar.EventContent"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:layout_gravity="center"
+ android:singleLine="true"
+ android:ellipsize="marquee"
+ android:fadingEdge="horizontal"
+ />
+ <TextView android:id="@+id/info"
+ android:textAppearance="@style/TextAppearance.StatusBar.EventContent.Info"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:layout_weight="0"
+ android:singleLine="true"
+ android:gravity="center"
+ android:paddingLeft="8dp"
+ />
+ <ImageView android:id="@+id/right_icon"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:layout_weight="0"
+ android:scaleType="center"
+ android:paddingLeft="8dp"
+ android:visibility="gone"
+ android:drawableAlpha="180"
+ />
+ </LinearLayout>
+ <ProgressBar
+ android:id="@android:id/progress"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:visibility="gone"
+ style="?android:attr/progressBarStyleHorizontal"
/>
</LinearLayout>
- <ProgressBar
- android:id="@android:id/progress"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:visibility="gone"
- style="?android:attr/progressBarStyleHorizontal"
- />
<LinearLayout
android:id="@+id/actions"
android:layout_width="match_parent"
diff --git a/core/res/res/layout/resolve_list_item.xml b/core/res/res/layout/resolve_list_item.xml
index c0404be..abeb7ba 100644
--- a/core/res/res/layout/resolve_list_item.xml
+++ b/core/res/res/layout/resolve_list_item.xml
@@ -18,39 +18,40 @@
*/
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:gravity="center_vertical"
- android:orientation="horizontal"
- android:minHeight="?android:attr/listPreferredItemHeight"
- android:layout_height="wrap_content"
- android:layout_width="match_parent"
- android:paddingLeft="16dip"
- android:paddingRight="16dip">
+ android:gravity="center"
+ android:orientation="vertical"
+ android:layout_height="wrap_content"
+ android:layout_width="match_parent"
+ android:background="?android:attr/activatedBackgroundIndicator"
+ android:padding="16dp">
- <!-- Activity icon when presenting dialog -->
+ <!-- Extended activity info to distinguish between duplicate activity names -->
+ <TextView android:id="@android:id/text2"
+ android:textAppearance="?android:attr/textAppearance"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:gravity="center"
+ android:minLines="2"
+ android:maxLines="2"
+ android:paddingLeft="4dip"
+ android:paddingRight="4dip" />
+
+ <!-- Activity icon when presenting dialog
+ Size will be filled in by ResolverActivity -->
<ImageView android:id="@+id/icon"
- android:layout_width="@android:dimen/app_icon_size"
- android:layout_height="@android:dimen/app_icon_size"
- android:scaleType="fitCenter" />
+ android:layout_width="0dp"
+ android:layout_height="0dp"
+ android:scaleType="fitCenter" />
- <LinearLayout
- android:orientation="vertical"
- android:gravity="center_vertical"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content" >
- <!-- Activity name -->
- <TextView android:id="@android:id/text1"
- android:textAppearance="?android:attr/textAppearanceListItemSmall"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:maxLines="2"
- android:paddingLeft="16dip" />
- <!-- Extended activity info to distinguish between duplicate activity names -->
- <TextView android:id="@android:id/text2"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:maxLines="2"
- android:paddingLeft="16dip" />
- </LinearLayout>
+ <!-- Activity name -->
+ <TextView android:id="@android:id/text1"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:gravity="center"
+ android:minLines="2"
+ android:maxLines="2"
+ android:paddingLeft="4dip"
+ android:paddingRight="4dip" />
</LinearLayout>
diff --git a/core/res/res/layout/resolver_grid.xml b/core/res/res/layout/resolver_grid.xml
new file mode 100644
index 0000000..4a0e84a
--- /dev/null
+++ b/core/res/res/layout/resolver_grid.xml
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+* Copyright 2012, 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.
+*/
+-->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical"
+ android:divider="?android:attr/dividerHorizontal"
+ android:showDividers="middle"
+ android:dividerPadding="0dip">
+ <FrameLayout android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_weight="1">
+ <GridView
+ android:layout_gravity="center"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:id="@+id/resolver_grid"
+ android:numColumns="4"
+ android:columnWidth="128dp"
+ android:padding="16dp"
+ android:clipToPadding="false"
+ android:scrollbarStyle="outsideOverlay" />
+ </FrameLayout>
+ <LinearLayout
+ android:id="@+id/button_bar"
+ android:visibility="gone"
+ style="?android:attr/buttonBarStyle"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:layoutDirection="locale"
+ android:measureWithLargestChild="true">
+ <Button android:id="@+id/button_always"
+ android:layout_width="wrap_content"
+ android:layout_gravity="right"
+ android:layout_weight="1"
+ android:maxLines="2"
+ android:minHeight="@dimen/alert_dialog_button_bar_height"
+ style="?android:attr/buttonBarButtonStyle"
+ android:textSize="14sp"
+ android:layout_height="wrap_content"
+ android:enabled="false"
+ android:text="@string/activity_resolver_use_always"
+ android:onClick="onButtonClick" />
+ <Button android:id="@+id/button_once"
+ android:layout_width="wrap_content"
+ android:layout_gravity="left"
+ android:layout_weight="1"
+ android:maxLines="2"
+ style="?android:attr/buttonBarButtonStyle"
+ android:textSize="14sp"
+ android:minHeight="@dimen/alert_dialog_button_bar_height"
+ android:layout_height="wrap_content"
+ android:enabled="false"
+ android:text="@string/activity_resolver_use_once"
+ android:onClick="onButtonClick" />
+ </LinearLayout>
+</LinearLayout>
\ No newline at end of file
diff --git a/core/res/res/values-af/strings.xml b/core/res/res/values-af/strings.xml
index 3eeffe4..7fa95c9 100644
--- a/core/res/res/values-af/strings.xml
+++ b/core/res/res/values-af/strings.xml
@@ -178,9 +178,13 @@
<string name="permgroupdesc_location" msgid="5704679763124170100">"Monitor jou fisiese ligging."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Netwerkkommunikasie"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Kry toegang tot verskeie netwerkfunksies."</string>
- <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <!-- no translation found for permgrouplab_bluetoothNetwork (1585403544162128109) -->
<skip />
- <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <!-- no translation found for permgroupdesc_bluetoothNetwork (5625288577164282391) -->
+ <skip />
+ <!-- no translation found for permgrouplab_shortrangeNetwork (130808676377486118) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) -->
<skip />
<!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
<skip />
@@ -194,9 +198,13 @@
<skip />
<!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
<skip />
- <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
+ <!-- no translation found for permgrouplab_dictionary (4148597128843641379) -->
<skip />
- <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
+ <!-- no translation found for permgroupdesc_dictionary (7921166355964764490) -->
+ <skip />
+ <!-- no translation found for permgrouplab_writeDictionary (8090237702432576788) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) -->
<skip />
<!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
<skip />
@@ -592,7 +600,8 @@
<string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Laat die program toe om die USB-berging se inhoud te lees, wat foto\'s en media kan insluit."</string>
<string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Laat die program toe om die SD-kaart se inhoud te lees, wat foto\'s en media kan insluit."</string>
<string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"verander of vee die inhoud van jou USB-berging uit"</string>
- <string name="permlab_sdcardWrite" product="default" msgid="9084476432661578751">"verander of vee die inhoud van jou SD-kaart uit"</string>
+ <!-- no translation found for permlab_sdcardWrite (8805693630050458763) -->
+ <skip />
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Laat die program toe om die USB-geheue te skryf."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Laat die program toe om na die SD-kaart te skryf."</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"verander/vee uit interne mediabergingsinhoud"</string>
@@ -1112,11 +1121,10 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Stel datum"</string>
<string name="date_time_set" msgid="5777075614321087758">"Stel"</string>
<string name="date_time_done" msgid="2507683751759308828">"Klaar"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"Verstek"</string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"NUUT: "</font></string>
+ <!-- no translation found for perms_description_app (5139836143293299417) -->
+ <skip />
<string name="no_permissions" msgid="7283357728219338112">"Geen toestemmings benodig nie"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Versteek"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Wys alle"</b></string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"USB-geheue"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB gekoppel"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Jy het via USB aan jou rekenaar gekoppel. Raak die knoppie hier onder as jy lêers tussen jou rekenaar en jou Android se USB-geheue wil kopieer."</string>
@@ -1345,4 +1353,8 @@
<string name="sending" msgid="3245653681008218030">"Stuur tans…"</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Begin webblaaier?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Aanvaar oproep?"</string>
+ <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <skip />
+ <!-- no translation found for activity_resolver_use_once (405646673463328329) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml
index fc47c6b..42c88ae 100644
--- a/core/res/res/values-am/strings.xml
+++ b/core/res/res/values-am/strings.xml
@@ -168,76 +168,55 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"መልዕክቶችዎ"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"ኤስ ኤም ኤስህን፣ ኢሜይልህን እና ሌላ መልዕክቶችህን አንብብና ፃፍ።"</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"የግል መረጃዎ"</string>
- <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
- <skip />
- <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
- <skip />
- <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
- <skip />
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"በእውቂያ ካርድህ ላይ ወደተከማቸ የአንተ መረጃ ቀጥተኛ መዳረሻ።"</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"ማህበራዊ መረጃህ"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"ወደ የእውቂያዎችህና የማህበራዊ ግንኙነቶችህ መረጃ ቀጥተኛ መዳረሻ።"</string>
<string name="permgrouplab_location" msgid="635149742436692049">"ስፍራዎ"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"ያለህበትን አካባቢ ተቆጣጠር።"</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"የአውታረ መረብ ግኑኙነት"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"የተለያዩ የአውታረ መረብ ባህሪያትን ድረስ።"</string>
- <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <!-- no translation found for permgrouplab_bluetoothNetwork (1585403544162128109) -->
<skip />
- <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <!-- no translation found for permgroupdesc_bluetoothNetwork (5625288577164282391) -->
<skip />
- <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <!-- no translation found for permgrouplab_shortrangeNetwork (130808676377486118) -->
<skip />
- <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) -->
<skip />
- <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"የድምጽ ቅንብሮች"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"የድምጽ ቅንብሮችን ቀይር።"</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"ባትሪ ላይ ተፅዕኖ ያሳርፋል"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"ባትሪ ቶሎ ሊጨርሱ የሚችሉ ባህርያትን ተጠቀም።"</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"ቀን መቁጠሪያ"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"ወደ ቀን መቁጠሪያና ክስተቶች ቀጥተኛ መዳረሻ።"</string>
+ <!-- no translation found for permgrouplab_dictionary (4148597128843641379) -->
<skip />
- <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <!-- no translation found for permgroupdesc_dictionary (7921166355964764490) -->
<skip />
- <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <!-- no translation found for permgrouplab_writeDictionary (8090237702432576788) -->
<skip />
- <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) -->
<skip />
- <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
- <skip />
- <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
- <skip />
- <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
- <skip />
- <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
- <skip />
- <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
- <skip />
- <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
- <skip />
- <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
- <skip />
- <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
- <skip />
- <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
- <skip />
- <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
- <skip />
- <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
- <skip />
- <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
- <skip />
- <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
- <skip />
- <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
- <skip />
- <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
- <skip />
- <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
- <skip />
- <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
- <skip />
- <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
- <skip />
- <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
- <skip />
- <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
- <skip />
- <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
- <skip />
- <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
- <skip />
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"ዕልባቶች እና ታሪክ"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"ወደ ዕልባቶችና የአሳሽ ታሪክ ቀጥተኛ መዳረሻ።"</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"ማንቂያ"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"የማንቂያ ሰዓቱን አዘጋጅ።"</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"የድምፅ ፖስታ"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"ወደ የድምጽ ፖስታ ቀጥተኛ መዳረሻ።"</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"ማይክሮፎን"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"ድምጽ ለመቅረጽ ወደ ማይክሮፎኑ ቀጥተኛ መዳረሻ።"</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"ካሜራ"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"ለምስል ወይም ቪዲዮ ለመቅረጽ ቀጥተና መዳረሻ ለካሜራ።"</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"የመተግበሪያዎችህ መረጃ"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"በመሣሪያህ ላይ ያሉ የሌሎች መተግበሪያዎች ባህሪዎች ላይ ተፅዕኖ የማሳረፍ ችሎታ።"</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"ልጣፍ"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"የመሣሪያው ልጣፍ ቅንብሮቹን ቀይር።"</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"ሰዓት"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"የመሣሪያውን ሰዓት ወይም የሰዓት ሰቁን ቀይር።"</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"የሁኔታ አሞሌ"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"የመሣሪያ ሁኔታ አሞሌ ቅንብሮቹን ቀይር።"</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"የማመሳሰል ቅንብሮች"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"ወደ የማመሳሰል ቅንብሮች መዳረሻ።"</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"መለያዎችዎ"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">" ለተገኙት መለያዎች ድረስ"</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"የሃርድዌር ቁጥጥሮች"</string>
@@ -248,10 +227,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"የስርዓቱ ዝቅተኛ-ደረጃ ድረስ እና ጠብቅ"</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"የግንባታ መሣሪያዎች"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"ባህሪያት ለመተግበሪያ ገንቢዎች ብቻ ያስፈልጋሉ።"</string>
- <!-- no translation found for permgrouplab_display (4279909676036402636) -->
- <skip />
- <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
- <skip />
+ <string name="permgrouplab_display" msgid="4279909676036402636">"የሌላ መተግበሪያ ተጠቃሚ በይነገጽ"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"የሌሎች መተግበሪያዎች ተጠቃሚ በይነገጽ ተግብር።"</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"ማከማቻ"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"የUSB ማከማቻ ድረስ።"</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"SD ካርድ ድረስ"</string>
@@ -592,7 +569,8 @@
<string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"መተግበሪያው የUSB ማከማቻ ይዘቶችን እንዲያነብ ይፈቅዳል፣ ይህም ፎቶዎችና ሚዲያ ሊያካትት ይችላል።"</string>
<string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"መተግበሪያው የSD ካርድ ይዘቶችን እንዲያነብ ይፈቅዳል፣ ይህም ፎቶዎችና ሚዲያ ሊያካትት ይችላል።"</string>
<string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"የUSB ማከማቻህን ይዘቶች ቀይር ወይም ሰርዝ"</string>
- <string name="permlab_sdcardWrite" product="default" msgid="9084476432661578751">"የSD ካርድህን ይዘቶች ቀይር ወይም ሰርዝ"</string>
+ <!-- no translation found for permlab_sdcardWrite (8805693630050458763) -->
+ <skip />
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"ወደ USB ማህደረ ትውስታው ለመፃፍ ለመተግበሪያው ይፈቅዳሉ፡፡"</string>
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"መተግበሪያውን ወደ SD ካርድ ለመፃፍ ይፈቅዳል።"</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"የውስጥ ማህደረ መረጃ ማከማቻ ይዘቶችን ቀይር/ሰርዝ"</string>
@@ -770,8 +748,7 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"በስልክ ውስጥ ምንም SIM ካርድ የለም።"</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"ሲም ካርድ አስገባ፡፡"</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"SIM ካርዱ ጠፍቷል ወይም መነበብ አይችልም።እባክህ SIM ካርድ አስገባ።"</string>
- <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
- <skip />
+ <string name="lockscreen_permanent_disabled_sim_message_short" msgid="5096149665138916184">"የማይሰራ ሲም ካርድ።"</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"SIM ካርድህ በቋሚነት ቦዝኗል።"\n" ለሌላ SIM ካርድ የገመድ አልባ አገልግሎት አቅራቢህ ጋር ተገናኝ።"</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"የቀድሞ ዝርዝር አዝራር"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"ቀጣይ ዝርዝር አዝራር"</string>
@@ -1112,11 +1089,10 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"ውሂብ አዘጋጅ"</string>
<string name="date_time_set" msgid="5777075614321087758">"አዘጋጅ"</string>
<string name="date_time_done" msgid="2507683751759308828">"ተጠናቋል"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"ነባሪ"</string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"አዲስ፦ "</font></string>
+ <!-- no translation found for perms_description_app (5139836143293299417) -->
+ <skip />
<string name="no_permissions" msgid="7283357728219338112">"ምንም ፍቃዶች አይጠየቁም"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"ደብቅ "</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"ሁሉንም አሳይ"</b></string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"USB ብዙ ማከማቻ"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB ተያይዟል"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"ከኮምፒዩተርህ ጋር በUSB በኩል አገናኝተሃል። በኮምፒዩተርህ እና በAndroid SD ማከማቻህ መካከል ፋይሎች ለመቅዳት ከፈለግህ ከዚህ በታች ያለውን አዝራር ንካ።"</string>
@@ -1345,4 +1321,8 @@
<string name="sending" msgid="3245653681008218030">"በመላክ ላይ…"</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"ማሰሺያን አስነሳ?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"ጥሪ ተቀበል?"</string>
+ <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <skip />
+ <!-- no translation found for activity_resolver_use_once (405646673463328329) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml
index 8c2e361c..35123de 100644
--- a/core/res/res/values-ar/strings.xml
+++ b/core/res/res/values-ar/strings.xml
@@ -168,76 +168,55 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"رسائلك"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"قراءة وكتابة الرسائل القصيرة SMS والرسائل الإلكترونية والرسائل الأخرى."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"معلوماتك الشخصية"</string>
- <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
- <skip />
- <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
- <skip />
- <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
- <skip />
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"الدخول المباشر إلى معلومات عنك، تم تخزينها في بطاقة الاتصال."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"المعلومات الاجتماعية"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"الدخول المباشر إلى معلومات عن جهات الاتصال والاتصالات الاجتماعية."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"موقعك"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"يمكنك مراقبة موقعك الفعلي."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"اتصال الشبكة"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"يمكنك الدخول إلى ميزات متعددة عبر الشبكة."</string>
- <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <!-- no translation found for permgrouplab_bluetoothNetwork (1585403544162128109) -->
<skip />
- <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <!-- no translation found for permgroupdesc_bluetoothNetwork (5625288577164282391) -->
<skip />
- <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <!-- no translation found for permgrouplab_shortrangeNetwork (130808676377486118) -->
<skip />
- <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) -->
<skip />
- <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"إعدادات الصوت"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"تغيير إعدادات الصوت"</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"التأثير على البطارية"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"استخدم الميزات التي يمكن أن تؤدي إلى نفاد طاقة البطارية بسرعة."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"التقويم"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"الدخول المباشر إلى التقويم والأحداث."</string>
+ <!-- no translation found for permgrouplab_dictionary (4148597128843641379) -->
<skip />
- <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <!-- no translation found for permgroupdesc_dictionary (7921166355964764490) -->
<skip />
- <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <!-- no translation found for permgrouplab_writeDictionary (8090237702432576788) -->
<skip />
- <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) -->
<skip />
- <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
- <skip />
- <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
- <skip />
- <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
- <skip />
- <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
- <skip />
- <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
- <skip />
- <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
- <skip />
- <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
- <skip />
- <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
- <skip />
- <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
- <skip />
- <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
- <skip />
- <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
- <skip />
- <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
- <skip />
- <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
- <skip />
- <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
- <skip />
- <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
- <skip />
- <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
- <skip />
- <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
- <skip />
- <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
- <skip />
- <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
- <skip />
- <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
- <skip />
- <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
- <skip />
- <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
- <skip />
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"الإشارات المرجعية والسجل"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"الدخول المباشر إلى الإشارات المرجعية وسجل المتصفح."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"المنبه"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"تعيين المنبه."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"البريد الصوتي"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"الدخول المباشر إلى البريد الصوتي."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"الميكروفون"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"الدخول المباشر إلى الميكروفون لتسجيل الصوت."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"الكاميرا"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"الدخول المباشر إلى الكاميرا لالتقاط صورة أو تصوير مقطع فيديو."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"معلومات التطبيقات"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"القدرة على التأثير في سلوك التطبيقات الأخرى بجهازك."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"الخلفية"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"تغيير إعدادات خلفية الجهاز."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"الساعة"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"تغيير وقت الجهاز أو المنطقة الزمنية."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"شريط الحالة"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"تغيير إعدادات شريط حالة الجهاز."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"إعدادات المزامنة"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"الدخول إلى إعدادات المزامنة."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"حساباتك"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"الوصول إلى الحسابات المتاحة."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"عناصر التحكم بالأجهزة"</string>
@@ -248,10 +227,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"دخول المستوى الأقل والتحكم بالنظام."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"أدوات التطوير"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"الميزات مطلوبة لمطوّري التطبيقات فقط."</string>
- <!-- no translation found for permgrouplab_display (4279909676036402636) -->
- <skip />
- <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
- <skip />
+ <string name="permgrouplab_display" msgid="4279909676036402636">"واجهة مستخدم تطبيقات أخرى"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"التأثير على واجهة المستخدم بالتطبيقات الأخرى."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"التخزين"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"الدخول إلى وحدة تخزين USB."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"الدخول إلى بطاقة SD."</string>
@@ -592,7 +569,8 @@
<string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"يسمح للتطبيق بقراءة محتويات وحدة تخزين USB، والتي قد تتضمن صورًا ووسائط."</string>
<string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"يسمح للتطبيق بقراءة محتويات بطاقة SD، والتي قد تتضمن صورًا ووسائط."</string>
<string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"تعديل محتويات وحدة تخزين USB أو حذفها"</string>
- <string name="permlab_sdcardWrite" product="default" msgid="9084476432661578751">"تعديل محتويات بطاقة SD أو حذفها"</string>
+ <!-- no translation found for permlab_sdcardWrite (8805693630050458763) -->
+ <skip />
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"للسماح للتطبيق بالكتابة إلى وحدة تخزين USB."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"للسماح للتطبيق بالكتابة إلى بطاقة SD."</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"تعديل/حذف محتويات وحدة تخزين الوسائط الداخلية"</string>
@@ -770,8 +748,7 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"ليس هناك بطاقة SIM في الهاتف."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"أدخل بطاقة SIM."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"بطاقة SIM مفقودة أو غير قابلة للقراءة. أدخل بطاقة SIM."</string>
- <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
- <skip />
+ <string name="lockscreen_permanent_disabled_sim_message_short" msgid="5096149665138916184">"بطاقة SIM غير قابلة للاستخدام."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"تم تعطيل بطاقة SIM بشكل دائم."\n" اتصل بمقدم خدمة اللاسلكي للحصول على بطاقة SIM أخرى."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"زر المقطع الصوتي السابق"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"زر المقطع الصوتي التالي"</string>
@@ -1112,11 +1089,10 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"تعيين التاريخ"</string>
<string name="date_time_set" msgid="5777075614321087758">"تعيين"</string>
<string name="date_time_done" msgid="2507683751759308828">"تم"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"افتراضي"</string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"جديد: "</font></string>
+ <!-- no translation found for perms_description_app (5139836143293299417) -->
+ <skip />
<string name="no_permissions" msgid="7283357728219338112">"لا أذونات مطلوبة"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"إخفاء"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"عرض الكل"</b></string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"تخزين USB كبير السعة"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB متصل"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"لقد اتصلت بجهاز الكمبيوتر من خلال USB. المس الزر أدناه إذا كنت تريد نسخ الملفات بين جهاز الكمبيوتر ووحدة تخزين USB في Android."</string>
@@ -1345,4 +1321,8 @@
<string name="sending" msgid="3245653681008218030">"جارٍ الإرسال..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"تشغيل المتصفح؟"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"هل تريد قبول المكالمة؟"</string>
+ <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <skip />
+ <!-- no translation found for activity_resolver_use_once (405646673463328329) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-be/strings.xml b/core/res/res/values-be/strings.xml
index 1a4d0d5..bc50211 100644
--- a/core/res/res/values-be/strings.xml
+++ b/core/res/res/values-be/strings.xml
@@ -168,76 +168,55 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Вашыя паведамленні"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Счытваць і запісваць вашы SMS-паведамленні, паведамленні электроннай пошты і іншыя паведамленні."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Вашая персанальная інфармацыя"</string>
- <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
- <skip />
- <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
- <skip />
- <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
- <skip />
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Прамы доступ да інфармацыі пра вас, якая захоўваецца на вашай кантактнай карце."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Ваша сацыяльная інфармацыя"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Прамы доступ да інфармацыі аб вашых кантактах і сацыяльных сувязях."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Ваша месцазнаходжанне"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Кантраляваць сваё фізічнае месцазнаходжанне."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Сеткавая сувязь"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Доступ да розных функцый сеткі."</string>
- <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <!-- no translation found for permgrouplab_bluetoothNetwork (1585403544162128109) -->
<skip />
- <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <!-- no translation found for permgroupdesc_bluetoothNetwork (5625288577164282391) -->
<skip />
- <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <!-- no translation found for permgrouplab_shortrangeNetwork (130808676377486118) -->
<skip />
- <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) -->
<skip />
- <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Налады гуку"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Змена налад гуку."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Уплывае на батарэю"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Выкарыстоўвайць магчымасці, якія могуць хутка разрадзіць батарэю."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Каляндар"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Прамы доступ да календара і мерапрыемстваў."</string>
+ <!-- no translation found for permgrouplab_dictionary (4148597128843641379) -->
<skip />
- <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <!-- no translation found for permgroupdesc_dictionary (7921166355964764490) -->
<skip />
- <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <!-- no translation found for permgrouplab_writeDictionary (8090237702432576788) -->
<skip />
- <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) -->
<skip />
- <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
- <skip />
- <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
- <skip />
- <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
- <skip />
- <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
- <skip />
- <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
- <skip />
- <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
- <skip />
- <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
- <skip />
- <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
- <skip />
- <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
- <skip />
- <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
- <skip />
- <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
- <skip />
- <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
- <skip />
- <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
- <skip />
- <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
- <skip />
- <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
- <skip />
- <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
- <skip />
- <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
- <skip />
- <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
- <skip />
- <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
- <skip />
- <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
- <skip />
- <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
- <skip />
- <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
- <skip />
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Закладкі і гісторыя"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Прамы доступ да закладак і гісторыі браўзера."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Будзільнік"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Усталяваць будзільнік."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Галасавая пошта"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Прамы доступ да галасавой пошты."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Мікрафон"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Прамы доступ да мікрафону для запісу гуку."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Камера"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Прамы доступ да камеры, каб зрабіць здымак ці зняць відэа."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Інфармацыя аб вашых прыкладаннях"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Магчымасць уплываць на паводзіны іншых прыкладанняў на вашай прыладзе."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Шпалеры"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Змяніць налады шпалер прылады."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Гадзіннік"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Змяніць час або часавы пояс прылады."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Радок стану"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Змяніць налады прылады ў радку стану."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Налады сінхранізацыі"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Доступ да налад сінхранізацыі."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Вашыя ўліковыя запісы"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Доступ да дзеючых уліковых запісаў."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Кіраванне апаратным забеспячэннем"</string>
@@ -248,10 +227,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Ніжні ўзровень доступу і кіравання сістэмай."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Сродкі распрацоўкі"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Функцыi, патрэбныя толькі для распрацоўшчыкаў прыкладанняў."</string>
- <!-- no translation found for permgrouplab_display (4279909676036402636) -->
- <skip />
- <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
- <skip />
+ <string name="permgrouplab_display" msgid="4279909676036402636">"Карыстальніцкі інтэрфейс іншага прыкладання"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Уплыў карыстальніцкіх інтэрфейсаў іншых прыкладанняў."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Сховішча"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Атрымаць доступ да USB-назапашвальнiка."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Доступ да SD-карты."</string>
@@ -592,7 +569,8 @@
<string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Дазваляе прыкладанням чытаць змесціва USB-назапашвальніка, які можа змяшчаць фатаграфіі і мультымедыйныя файлы."</string>
<string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Дазваляе прыкладанням чытаць змесціва карты памяці SD-карты, якая можа ўключаць фатаграфіі і мультымедыйныя файлы."</string>
<string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"зм. або выд. змес. USB-назап."</string>
- <string name="permlab_sdcardWrite" product="default" msgid="9084476432661578751">"змена або выдаленне змесціва SD-карты"</string>
+ <!-- no translation found for permlab_sdcardWrite (8805693630050458763) -->
+ <skip />
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Дазваляе прыкладаням выконваць запіс ва USB-назапашвальнік."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Дазваляе прыкладанням запісваць на SD-карту."</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"змяніць/выдаліць унутраныя носьбіты змесціва"</string>
@@ -770,8 +748,7 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"У тэлефоне няма SIM-карты."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Усталюйце SIM-карту."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"SIM-карта адсутнічае ці не чытаецца. Устаўце SIM-карту."</string>
- <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
- <skip />
+ <string name="lockscreen_permanent_disabled_sim_message_short" msgid="5096149665138916184">"SIM-карту немагчыма выкарыстоўваць"</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"Ваша SIM-карта была адключана назаўсёды."\n" Звяжыцеся з аператарам бесправадной сувязі, каб атрымаць іншую SIM-карту."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Кнопка папярэдняй кампазiцыi"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Кнопка наступнай кампазiцыi"</string>
@@ -1112,11 +1089,10 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Усталяваць дату"</string>
<string name="date_time_set" msgid="5777075614321087758">"Задаць"</string>
<string name="date_time_done" msgid="2507683751759308828">"Гатова"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"Па змаўчанні"</string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"НОВАЕ: "</font></string>
+ <!-- no translation found for perms_description_app (5139836143293299417) -->
+ <skip />
<string name="no_permissions" msgid="7283357728219338112">"Дазволу не патрабуецца"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Не паказваць"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Паказаць усе"</b></string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"Унiверсальны USB-назапашвальнік"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB падлучаны"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Вы падлучаны да камп\'ютара праз USB. Націсніце на кнопку ніжэй, калі жадаеце капіраваць файлы з камп\'ютара на USB-назапашвальнік прылады Android і наадварот."</string>
@@ -1345,4 +1321,8 @@
<string name="sending" msgid="3245653681008218030">"Адпраўка..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Запусцiць браўзер?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Прыняць выклік?"</string>
+ <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <skip />
+ <!-- no translation found for activity_resolver_use_once (405646673463328329) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml
index 0ab08d4..90462b3 100644
--- a/core/res/res/values-bg/strings.xml
+++ b/core/res/res/values-bg/strings.xml
@@ -168,76 +168,55 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Вашите съобщения"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Четене и запис на вашите SMS, имейли и други съобщения."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Вашите лични данни"</string>
- <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
- <skip />
- <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
- <skip />
- <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
- <skip />
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Осъществяване на директен достъп до информация за вас, съхранявана в картата ви с данни за контакт."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Социалната ви информация"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Осъществяване на директен достъп до информация за контактите и социалните ви връзки."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Местоположение"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Наблюдавайте физическото си местоположение."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Мрежова комуникация"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Осъществявайте достъп до различни мрежови функции."</string>
- <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <!-- no translation found for permgrouplab_bluetoothNetwork (1585403544162128109) -->
<skip />
- <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <!-- no translation found for permgroupdesc_bluetoothNetwork (5625288577164282391) -->
<skip />
- <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <!-- no translation found for permgrouplab_shortrangeNetwork (130808676377486118) -->
<skip />
- <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) -->
<skip />
- <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Настройки за звука"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Промяна на настройките за звукa."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Оказване на влияние върху батерията"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Използване на функции, които могат бързо да изразходят батерията."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Календар"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Осъществяване на директен достъп до календара и събитията."</string>
+ <!-- no translation found for permgrouplab_dictionary (4148597128843641379) -->
<skip />
- <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <!-- no translation found for permgroupdesc_dictionary (7921166355964764490) -->
<skip />
- <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <!-- no translation found for permgrouplab_writeDictionary (8090237702432576788) -->
<skip />
- <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) -->
<skip />
- <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
- <skip />
- <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
- <skip />
- <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
- <skip />
- <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
- <skip />
- <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
- <skip />
- <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
- <skip />
- <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
- <skip />
- <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
- <skip />
- <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
- <skip />
- <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
- <skip />
- <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
- <skip />
- <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
- <skip />
- <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
- <skip />
- <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
- <skip />
- <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
- <skip />
- <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
- <skip />
- <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
- <skip />
- <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
- <skip />
- <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
- <skip />
- <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
- <skip />
- <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
- <skip />
- <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
- <skip />
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Отметки и история"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Осъществяване на директен достъп до отметките и историята на браузъра."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Будилник"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Навиване на будилника."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Гласова поща"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Осъществяване на директен достъп до гласовата поща."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Микрофон"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Осъществяване на директен достъп до микрофона с цел записване на звук."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Камера"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Осъществяване на директен достъп до камерата с цел заснемане на снимки или видеоклипове."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Информация за приложенията ви"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Възможност за оказване на влияние върху поведението на други приложения на устройството ви."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Тапет"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Промяна на настройките за тапет на устройството."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Часовник"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Промяна на часа или на часовата зона на устройството."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Лента на състоянието"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Промяна на настройките за лентата на състоянието на устройството."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Настройки за синхронизиране"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Осъществяване на достъп до настройките за синхронизиране."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Вашите профили"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Достъп до наличните профили."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Контрол върху хардуера"</string>
@@ -248,10 +227,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Достъп и контрол на системата на ниско ниво."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Инструменти за програмиране"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Функции, необходими само за програмисти на приложения."</string>
- <!-- no translation found for permgrouplab_display (4279909676036402636) -->
- <skip />
- <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
- <skip />
+ <string name="permgrouplab_display" msgid="4279909676036402636">"Други потребителски интерфейси на приложения"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Оказване на влияниe върху потребителския интерфейс на други приложения."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Съхранение"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Достъп до USB хранилището."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Достъп до SD картата."</string>
@@ -592,7 +569,8 @@
<string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Разр. на прилож. да чете съдърж. от USB хран., което може да вкл. снимки и мултимедия."</string>
<string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Разрешава на приложението да чете съдържание от SD картата, което може да включва снимки и мултимедия."</string>
<string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"промяна или изтрив. на съдърж. от USB хран. ви"</string>
- <string name="permlab_sdcardWrite" product="default" msgid="9084476432661578751">"промяна или изтриване на съдържанието от SD картата ви"</string>
+ <!-- no translation found for permlab_sdcardWrite (8805693630050458763) -->
+ <skip />
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Разрешава на приложението да записва в USB."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Разрешава на приложението да записва върху SD картата."</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"пром./изтр. на съдърж. на вътр. мултим. хранил."</string>
@@ -770,8 +748,7 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"В телефона няма SIM карта."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Поставете SIM карта."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"SIM картата липсва или е нечетлива. Поставете SIM карта."</string>
- <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
- <skip />
+ <string name="lockscreen_permanent_disabled_sim_message_short" msgid="5096149665138916184">"Неизползваема SIM карта."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"SIM картата ви е деактивирана за постоянно."\n"Свържете се с оператора на безжичната си връзка, за да получите друга."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Бутон за предишния запис"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Бутон за следващия запис"</string>
@@ -1112,11 +1089,10 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Задаване на дата"</string>
<string name="date_time_set" msgid="5777075614321087758">"Задаване"</string>
<string name="date_time_done" msgid="2507683751759308828">"Готово"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"По подразбиране"</string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"НОВО: "</font></string>
+ <!-- no translation found for perms_description_app (5139836143293299417) -->
+ <skip />
<string name="no_permissions" msgid="7283357728219338112">"Не се изискват разрешения"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Скриване"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Показване на всички"</b></string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"Масово USB хранилище"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"Връзка през USB"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Свързахте се с компютъра си през USB. Докоснете долния бутон, ако искате да копирате файлове между компютъра и USB хранилището си от Android."</string>
@@ -1345,4 +1321,8 @@
<string name="sending" msgid="3245653681008218030">"Изпраща се..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Да се стартира ли браузърът?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Да се приеме ли обаждането?"</string>
+ <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <skip />
+ <!-- no translation found for activity_resolver_use_once (405646673463328329) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml
index c9d7fe0..69d982b 100644
--- a/core/res/res/values-ca/strings.xml
+++ b/core/res/res/values-ca/strings.xml
@@ -175,16 +175,28 @@
<string name="permgroupdesc_location" msgid="5704679763124170100">"Supervisa la teva ubicació física."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Comunicació de xarxa"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Accedeix a diverses funcions de xarxa."</string>
- <string name="permgrouplab_shortRangeNetwork" msgid="4504840216096355984">"Bluetooth i NFC"</string>
- <string name="permgroupdesc_shortRangeNetwork" msgid="8821013030346680806">"Accés a xarxes i dispositius Bluetooth o NFC."</string>
+ <!-- no translation found for permgrouplab_bluetoothNetwork (1585403544162128109) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_bluetoothNetwork (5625288577164282391) -->
+ <skip />
+ <!-- no translation found for permgrouplab_shortrangeNetwork (130808676377486118) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) -->
+ <skip />
<string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Configuració d\'àudio"</string>
<string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Canviar la configuració de l\'àudio."</string>
<string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Afectar la bateria"</string>
<string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Fer servir funcions que poden consumir bateria ràpidament."</string>
<string name="permgrouplab_calendar" msgid="5863508437783683902">"Calendari"</string>
<string name="permgroupdesc_calendar" msgid="5777534316982184416">"Accés directe a calendaris i a esdeveniments."</string>
- <string name="permgrouplab_dictionary" msgid="8114410334955871144">"Diccionari de l\'usuari"</string>
- <string name="permgroupdesc_dictionary" msgid="40926483968949978">"Accés directe al diccionari de l\'usuari."</string>
+ <!-- no translation found for permgrouplab_dictionary (4148597128843641379) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_dictionary (7921166355964764490) -->
+ <skip />
+ <!-- no translation found for permgrouplab_writeDictionary (8090237702432576788) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) -->
+ <skip />
<string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Marcadors i historial"</string>
<string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Accés directe a l\'historial de marcadors i de navegació."</string>
<string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Alarma"</string>
@@ -192,7 +204,7 @@
<string name="permgrouplab_voicemail" msgid="4162237145027592133">"Bústia de veu"</string>
<string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Accés directe a la bústia de veu."</string>
<string name="permgrouplab_microphone" msgid="171539900250043464">"Micròfon"</string>
- <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Accés directe al micròfon per enregistrar l\'àudio."</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Accés directe al micròfon per enregistrar àudio."</string>
<string name="permgrouplab_camera" msgid="4820372495894586615">"Càmera"</string>
<string name="permgroupdesc_camera" msgid="2933667372289567714">"Accés directe a la càmera per a la captura d\'imatges o de vídeos."</string>
<string name="permgrouplab_appInfo" msgid="8028789762634147725">"Informació de les aplicacions"</string>
@@ -557,7 +569,8 @@
<string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Permet que l\'aplicació llegeixi el contingut de l\'emmagatzematge USB, incloses les fotos i els fitxers multimèdia."</string>
<string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Permet que l\'aplicació llegeixi el contingut de la targeta SD, incloses les fotos i els fitxers multimèdia."</string>
<string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"modificació o supressió del contingut de l\'emmagatzematge USB"</string>
- <string name="permlab_sdcardWrite" product="default" msgid="9084476432661578751">"modificació o supressió del contingut de la targeta SD"</string>
+ <!-- no translation found for permlab_sdcardWrite (8805693630050458763) -->
+ <skip />
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Permet que l\'aplicació escrigui a l\'emmagatzematge USB."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Permet a l\'aplicació escriure a la targeta SD."</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"Canvia/esborra emmagatz. intern"</string>
@@ -1076,11 +1089,10 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Establiment de data"</string>
<string name="date_time_set" msgid="5777075614321087758">"Defineix"</string>
<string name="date_time_done" msgid="2507683751759308828">"Fet"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"Predeterminat"</string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"NOU: "</font></string>
+ <!-- no translation found for perms_description_app (5139836143293299417) -->
+ <skip />
<string name="no_permissions" msgid="7283357728219338112">"No cal cap permís"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Amaga"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Mostra\'ls tots"</b></string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"Emmagatzematge massiu USB"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB connectat"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"T\'has connectat a l\'equip mitjançant USB. Toca el botó següent si vols copiar els fitxers entre l\'equip i l\'emmagatzematge USB d\'Android."</string>
@@ -1309,4 +1321,8 @@
<string name="sending" msgid="3245653681008218030">"S\'està enviant…"</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Vols iniciar el navegador?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Vols acceptar la trucada?"</string>
+ <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <skip />
+ <!-- no translation found for activity_resolver_use_once (405646673463328329) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml
index 6faf0fe..c77a21a 100644
--- a/core/res/res/values-cs/strings.xml
+++ b/core/res/res/values-cs/strings.xml
@@ -168,76 +168,55 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Vaše zprávy"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Čtení a zápis zpráv SMS, e-mailů a dalších zpráv."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Vaše osobní informace"</string>
- <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
- <skip />
- <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
- <skip />
- <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
- <skip />
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Přímý přístup k informacím o vás uložených na vaší vizitce"</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Informace o vašich kontaktech a sociálních sítích"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Přímý přístup k informacím o vašich kontaktech a sociálních propojeních"</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Vaše poloha"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Sledovat vaši fyzickou polohu."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Síťová komunikace"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Přístup k různým funkcím sítě."</string>
- <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <!-- no translation found for permgrouplab_bluetoothNetwork (1585403544162128109) -->
<skip />
- <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <!-- no translation found for permgroupdesc_bluetoothNetwork (5625288577164282391) -->
<skip />
- <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <!-- no translation found for permgrouplab_shortrangeNetwork (130808676377486118) -->
<skip />
- <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) -->
<skip />
- <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Nastavení zvuku"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Změna nastavení zvuku"</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Vliv na baterii"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Používání funkcí, které mohou rychle vyčerpat baterii"</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Kalendář"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Přímý přístup ke kalendáři a událostem"</string>
+ <!-- no translation found for permgrouplab_dictionary (4148597128843641379) -->
<skip />
- <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <!-- no translation found for permgroupdesc_dictionary (7921166355964764490) -->
<skip />
- <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <!-- no translation found for permgrouplab_writeDictionary (8090237702432576788) -->
<skip />
- <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) -->
<skip />
- <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
- <skip />
- <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
- <skip />
- <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
- <skip />
- <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
- <skip />
- <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
- <skip />
- <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
- <skip />
- <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
- <skip />
- <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
- <skip />
- <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
- <skip />
- <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
- <skip />
- <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
- <skip />
- <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
- <skip />
- <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
- <skip />
- <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
- <skip />
- <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
- <skip />
- <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
- <skip />
- <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
- <skip />
- <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
- <skip />
- <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
- <skip />
- <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
- <skip />
- <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
- <skip />
- <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
- <skip />
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Záložky a historie"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Přímý přístup k záložkám a historii prohlížení"</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Budík"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Nastavení budíku"</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Hlasová schránka"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Přímý přístup do hlasové schránky"</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Mikrofon"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Přímý přístup k mikrofonu a možnost nahrávání zvuku"</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Fotoaparát"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Přímý přístup k fotoaparátu a možnost pořizování fotografií a videí"</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Informace o vašich aplikacích"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Možnost ovlivnit chování dalších aplikací v zařízení"</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Tapeta"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Změna nastavení tapety zařízení"</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Hodiny"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Změna času nebo časového pásma zařízení"</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Stavový řádek"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Změna nastavení stavového řádku zařízení"</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Synchronizace"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Přístup k nastavení synchronizace"</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Vaše účty"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Přístup k dostupným účtům."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Řízení hardwaru"</string>
@@ -248,10 +227,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Nízkoúrovňový přístup a kontrola nad systémem."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Nástroje pro vývojáře"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Funkce pouze pro vývojáře aplikací."</string>
- <!-- no translation found for permgrouplab_display (4279909676036402636) -->
- <skip />
- <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
- <skip />
+ <string name="permgrouplab_display" msgid="4279909676036402636">"Uživatelské rozhraní dalších aplikací"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Vliv na uživatelské rozhraní dalších aplikací"</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Úložiště"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Přístup do úložiště USB."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Přístup ke kartě SD."</string>
@@ -592,7 +569,8 @@
<string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Umožňuje aplikaci číst obsah úložiště USB, který může zahrnovat fotografie a média."</string>
<string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Umožňuje aplikaci číst obsah karty SD, který může zahrnovat fotografie a média."</string>
<string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"úprava nebo smazání obsahu v úložišti USB"</string>
- <string name="permlab_sdcardWrite" product="default" msgid="9084476432661578751">"úprava nebo smazání obsahu na kartě SD"</string>
+ <!-- no translation found for permlab_sdcardWrite (8805693630050458763) -->
+ <skip />
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Umožňuje aplikaci zapisovat do úložiště USB."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Umožňuje aplikaci zapisovat na kartu SD."</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"Upravit/smazat interní úlož."</string>
@@ -770,8 +748,7 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"V telefonu není žádná SIM karta."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Vložte SIM kartu."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"SIM karta chybí nebo je nečitelná. Vložte SIM kartu."</string>
- <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
- <skip />
+ <string name="lockscreen_permanent_disabled_sim_message_short" msgid="5096149665138916184">"Nepoužitelná karta SIM."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"Vaše SIM karta byla natrvalo zablokována."\n" Požádejte svého poskytovatele bezdrátových služeb o další SIM kartu."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Tlačítko Předchozí stopa"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Tlačítko Další stopa"</string>
@@ -1112,11 +1089,10 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Nastavení data"</string>
<string name="date_time_set" msgid="5777075614321087758">"Nastavit"</string>
<string name="date_time_done" msgid="2507683751759308828">"Hotovo"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"Výchozí"</string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"NOVÉ: "</font></string>
+ <!-- no translation found for perms_description_app (5139836143293299417) -->
+ <skip />
<string name="no_permissions" msgid="7283357728219338112">"Nejsou vyžadována žádná oprávnění"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Skrýt"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Zobrazit vše"</b></string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"Velkokapacitní paměťové zařízení USB"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB připojeno"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Připojili jste se k počítači pomocí rozhraní USB. Chcete-li kopírovat soubory z počítače do úložiště USB v zařízení Android či obráceně, klepněte na tlačítko níže."</string>
@@ -1345,4 +1321,8 @@
<string name="sending" msgid="3245653681008218030">"Odesílání..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Spustit prohlížeč?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Přijmout hovor?"</string>
+ <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <skip />
+ <!-- no translation found for activity_resolver_use_once (405646673463328329) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml
index 9570ef9..5a5cda3 100644
--- a/core/res/res/values-da/strings.xml
+++ b/core/res/res/values-da/strings.xml
@@ -175,16 +175,28 @@
<string name="permgroupdesc_location" msgid="5704679763124170100">"Overvåg din fysiske placering."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Netværkskommunikation"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Få adgang til forskellige netværksfunktioner."</string>
- <string name="permgrouplab_shortRangeNetwork" msgid="4504840216096355984">"Bluetooth og NFC"</string>
- <string name="permgroupdesc_shortRangeNetwork" msgid="8821013030346680806">"Adgang til Bluetooth- eller NFC-netværk og -enheder."</string>
+ <!-- no translation found for permgrouplab_bluetoothNetwork (1585403544162128109) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_bluetoothNetwork (5625288577164282391) -->
+ <skip />
+ <!-- no translation found for permgrouplab_shortrangeNetwork (130808676377486118) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) -->
+ <skip />
<string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Lydindstillinger"</string>
<string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Skifte lydindstillinger."</string>
<string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Påvirker batteriet"</string>
<string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Bruge funktioner, der hurtigt kan dræne batteriet."</string>
<string name="permgrouplab_calendar" msgid="5863508437783683902">"Kalender"</string>
<string name="permgroupdesc_calendar" msgid="5777534316982184416">"Direkte adgang til kalender og begivenheder."</string>
- <string name="permgrouplab_dictionary" msgid="8114410334955871144">"Brugerordbog"</string>
- <string name="permgroupdesc_dictionary" msgid="40926483968949978">"Direkte adgang til brugerordbogen."</string>
+ <!-- no translation found for permgrouplab_dictionary (4148597128843641379) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_dictionary (7921166355964764490) -->
+ <skip />
+ <!-- no translation found for permgrouplab_writeDictionary (8090237702432576788) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) -->
+ <skip />
<string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Bogmærker og historik"</string>
<string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Direkte adgang til bogmærker og browserhistorik."</string>
<string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Alarm"</string>
@@ -557,7 +569,8 @@
<string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Tillader, at appen læser USB-lagerets indhold, herunder billeder og mediefiler."</string>
<string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Tillader, at appen læser SD-kortets indhold, som kan omfatte billeder og mediefiler."</string>
<string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"ændre eller slette indhold på USB-lager"</string>
- <string name="permlab_sdcardWrite" product="default" msgid="9084476432661578751">"ændre eller slette indholdet på dit SD-kort"</string>
+ <!-- no translation found for permlab_sdcardWrite (8805693630050458763) -->
+ <skip />
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Lader appen skrive til USB."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Tillader, at appen kan skrive til SD-kortet."</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"Rediger/slet internt medielagringsindhold"</string>
@@ -1076,11 +1089,10 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Angiv dato"</string>
<string name="date_time_set" msgid="5777075614321087758">"Angiv"</string>
<string name="date_time_done" msgid="2507683751759308828">"Udført"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"Standard"</string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"NYHED! "</font></string>
+ <!-- no translation found for perms_description_app (5139836143293299417) -->
+ <skip />
<string name="no_permissions" msgid="7283357728219338112">"Der kræves ingen tilladelser"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Skjul"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Vis alle"</b></string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"USB-masselager"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB er tilsluttet"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Du har fået forbindelse til din computer via USB. Tryk på knappen nedenfor, hvis du vil kopiere filer mellem din computer og din Androids USB-lager."</string>
@@ -1309,4 +1321,8 @@
<string name="sending" msgid="3245653681008218030">"Sender..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Vil du starte browseren?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Vil du besvare opkaldet?"</string>
+ <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <skip />
+ <!-- no translation found for activity_resolver_use_once (405646673463328329) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml
index d843a64..398313b 100644
--- a/core/res/res/values-de/strings.xml
+++ b/core/res/res/values-de/strings.xml
@@ -168,76 +168,55 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Ihre Nachrichten"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"SMS, E-Mails und andere Nachrichten lesen und schreiben"</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Ihre persönlichen Informationen"</string>
- <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
- <skip />
- <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
- <skip />
- <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
- <skip />
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Direkter Zugriff auf Informationen über Sie, die in Ihrer Kontaktkarte gespeichert sind"</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Ihre sozialen Informationen"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Direkter Zugriff auf Informationen über Ihre Kontakte und sozialen Verbindungen"</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Ihren Standort"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Ihren physischen Standort überwachen"</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Netzkommunikation"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Zugriff auf verschiedene Netzwerkfunktionen"</string>
- <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <!-- no translation found for permgrouplab_bluetoothNetwork (1585403544162128109) -->
<skip />
- <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <!-- no translation found for permgroupdesc_bluetoothNetwork (5625288577164282391) -->
<skip />
- <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <!-- no translation found for permgrouplab_shortrangeNetwork (130808676377486118) -->
<skip />
- <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) -->
<skip />
- <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Audioeinstellungen"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Audioeinstellungen ändern"</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Wirkt sich auf den Akku aus"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Funktionen nutzen, die den Akku schnell entladen"</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Kalender"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Direkter Zugriff auf Kalender und Termine"</string>
+ <!-- no translation found for permgrouplab_dictionary (4148597128843641379) -->
<skip />
- <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <!-- no translation found for permgroupdesc_dictionary (7921166355964764490) -->
<skip />
- <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <!-- no translation found for permgrouplab_writeDictionary (8090237702432576788) -->
<skip />
- <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) -->
<skip />
- <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
- <skip />
- <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
- <skip />
- <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
- <skip />
- <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
- <skip />
- <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
- <skip />
- <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
- <skip />
- <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
- <skip />
- <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
- <skip />
- <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
- <skip />
- <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
- <skip />
- <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
- <skip />
- <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
- <skip />
- <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
- <skip />
- <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
- <skip />
- <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
- <skip />
- <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
- <skip />
- <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
- <skip />
- <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
- <skip />
- <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
- <skip />
- <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
- <skip />
- <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
- <skip />
- <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
- <skip />
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Lesezeichen und Verlauf"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Direkter Zugriff auf Lesezeichen und Browserverlauf"</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Wecker"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Wecker stellen"</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Mailbox"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Direkter Zugriff auf Mailbox"</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Mikrofon"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Direkter Zugriff auf das Mikrofon zur Audioaufnahme"</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Kamera"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Direkter Zugriff auf Kamera für Bild- oder Videoaufnahmen"</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Informationen zu Ihren Apps"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Einflussnahme auf das Verhalten anderer Apps auf Ihrem Gerät"</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Hintergrund"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Hintergrundeinstellungen des Geräts ändern"</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Uhr"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Uhrzeit oder Zeitzone des Geräts ändern"</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Statusleiste"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Einstellungen in der Statusleiste des Geräts ändern"</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Synchronisierungseinstellungen"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Zugriff auf Synchronisierungseinstellungen"</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Ihre Konten"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Zugriff auf verfügbare Konten"</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Hardware-Steuerelemente"</string>
@@ -248,10 +227,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Zugriff und Steuerung des Systems auf niedrigerer Ebene."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Entwickler-Tools"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Funktionen nur für App-Entwickler vorgesehen"</string>
- <!-- no translation found for permgrouplab_display (4279909676036402636) -->
- <skip />
- <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
- <skip />
+ <string name="permgrouplab_display" msgid="4279909676036402636">"Benutzeroberfläche anderer Apps"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Benutzeroberfläche anderer Apps beeinflussen"</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Speicher"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Zugriff auf USB-Speicher"</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Zugriff auf SD-Karte"</string>
@@ -592,7 +569,8 @@
<string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Ermöglicht der App, die Inhalte des USB-Speichers einschließlich Fotos und Medien, zu lesen"</string>
<string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Ermöglicht der App, die Inhalte der SD-Karte einschließlich Fotos und Medien, zu lesen"</string>
<string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"USB-Speicherinhalte ändern oder löschen"</string>
- <string name="permlab_sdcardWrite" product="default" msgid="9084476432661578751">"SD-Karteninhalte ändern oder löschen"</string>
+ <!-- no translation found for permlab_sdcardWrite (8805693630050458763) -->
+ <skip />
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Ermöglicht der App, in den USB-Speicher zu schreiben"</string>
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Ermöglicht der App, auf die SD-Karte zu schreiben"</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"Intern. Mediensp. änd./löschen"</string>
@@ -770,8 +748,7 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"Keine SIM-Karte im Telefon"</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Legen Sie eine SIM-Karte ein."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"SIM-Karte fehlt oder ist nicht lesbar. Bitte legen Sie eine SIM-Karte ein."</string>
- <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
- <skip />
+ <string name="lockscreen_permanent_disabled_sim_message_short" msgid="5096149665138916184">"SIM-Karte unbrauchbar"</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"Ihre SIM-Karte wurde dauerhaft deaktiviert."\n" Wenden Sie sich an Ihren Mobilfunkanbieter, um eine andere SIM-Karte zu erhalten."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Schaltfläche für vorherigen Track"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Schaltfläche für nächsten Track"</string>
@@ -1112,11 +1089,10 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Datum festlegen"</string>
<string name="date_time_set" msgid="5777075614321087758">"Speichern"</string>
<string name="date_time_done" msgid="2507683751759308828">"Fertig"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"Standard"</string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"Neu: "</font></string>
+ <!-- no translation found for perms_description_app (5139836143293299417) -->
+ <skip />
<string name="no_permissions" msgid="7283357728219338112">"Keine Berechtigungen erforderlich"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Ausblenden"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Alle anzeigen"</b></string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"USB-Massenspeicher"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB-Verbindung"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Sie haben eine USB-Verbindung mit Ihrem Computer hergestellt. Berühren Sie die Schaltfläche unten, wenn Sie Dateien von Ihrem Computer in den USB-Speicher Ihres Android-Geräts und umgekehrt kopieren möchten."</string>
@@ -1345,4 +1321,8 @@
<string name="sending" msgid="3245653681008218030">"Wird gesendet..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Browser starten?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Anruf annehmen?"</string>
+ <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <skip />
+ <!-- no translation found for activity_resolver_use_once (405646673463328329) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml
index 1f44b1b..05dcf69 100644
--- a/core/res/res/values-el/strings.xml
+++ b/core/res/res/values-el/strings.xml
@@ -175,16 +175,28 @@
<string name="permgroupdesc_location" msgid="5704679763124170100">"Παρακολούθηση της φυσικής τοποθεσίας σας."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Επικοινωνία δικτύου"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Πρόσβαση σε διάφορες λειτουργίες δικτύου."</string>
- <string name="permgrouplab_shortRangeNetwork" msgid="4504840216096355984">"Bluetooth και NFC"</string>
- <string name="permgroupdesc_shortRangeNetwork" msgid="8821013030346680806">"Πρόσβαση δικτύων και συσκευών Bluetooth ή NFC."</string>
+ <!-- no translation found for permgrouplab_bluetoothNetwork (1585403544162128109) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_bluetoothNetwork (5625288577164282391) -->
+ <skip />
+ <!-- no translation found for permgrouplab_shortrangeNetwork (130808676377486118) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) -->
+ <skip />
<string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Ρυθμίσεις ήχου"</string>
<string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Αλλαγή ρυθμίσεων ήχου."</string>
<string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Επηρεάζει την μπαταρία"</string>
<string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Χρήση λειτουργιών που μπορούν να εξαντλήσουν γρήγορα την μπαταρία."</string>
<string name="permgrouplab_calendar" msgid="5863508437783683902">"Ημερολόγιο"</string>
<string name="permgroupdesc_calendar" msgid="5777534316982184416">"Άμεση πρόσβαση σε ημερολόγιο και συμβάντα."</string>
- <string name="permgrouplab_dictionary" msgid="8114410334955871144">"Λεξικό χρήστη"</string>
- <string name="permgroupdesc_dictionary" msgid="40926483968949978">"Άμεση πρόσβαση στο λεξικό χρήστη."</string>
+ <!-- no translation found for permgrouplab_dictionary (4148597128843641379) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_dictionary (7921166355964764490) -->
+ <skip />
+ <!-- no translation found for permgrouplab_writeDictionary (8090237702432576788) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) -->
+ <skip />
<string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Σελιδοδείκτες και ιστορικό"</string>
<string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Άμεση πρόσβαση σε σελιδοδείκτες και ιστορικού προγράμματος περιήγησης."</string>
<string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Ξυπνητήρι"</string>
@@ -557,7 +569,8 @@
<string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Επιτρ. η ανάγν. περ. αποθ. χώρ. USB, με φωτ. και μέσα"</string>
<string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Επιτρέπει στην εφαρμογή την ανάγνωση του περιεχομένου της κάρτας SD, το οποίο μπορεί να περιλαμβάνει φωτογραφίες και μέσα."</string>
<string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"τροπ. ή διαγρ. περιεχ. αποθ. χώρ. USB"</string>
- <string name="permlab_sdcardWrite" product="default" msgid="9084476432661578751">"τροποποίηση ή διαγραφή του περιεχομένου της κάρτας SD"</string>
+ <!-- no translation found for permlab_sdcardWrite (8805693630050458763) -->
+ <skip />
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Επιτρέπει στην εφαρμογή την εγγραφή στον αποθηκευτικό χώρο USB."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Επιτρέπει στην εφαρμογή την εγγραφή στην κάρτα SD."</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"τροπ./διαγ. περ. απ. εσ. μνήμ."</string>
@@ -1076,11 +1089,10 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Ορισμός ημερομηνίας"</string>
<string name="date_time_set" msgid="5777075614321087758">"Ορισμός"</string>
<string name="date_time_done" msgid="2507683751759308828">"Τέλος"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"Προεπιλεγμένο"</string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"ΝΕΟ: "</font></string>
+ <!-- no translation found for perms_description_app (5139836143293299417) -->
+ <skip />
<string name="no_permissions" msgid="7283357728219338112">"Δεν απαιτούνται άδειες"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Απόκρυψη"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Εμφάνιση όλων"</b></string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"Μαζική αποθήκευση USB"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"Το USB είναι συνδεδεμένο"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Συνδεθήκατε στον υπολογιστή σας μέσω USB. Αγγίξτε το παρακάτω κουμπί, αν θέλετε να κάνετε αντιγραφή αρχείων μεταξύ του υπολογιστή και του χώρου αποθήκευσης USB του Android."</string>
@@ -1309,4 +1321,8 @@
<string name="sending" msgid="3245653681008218030">"Γίνεται αποστολή…"</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Εκκίνηση προγράμματος περιήγησης;"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Αποδοχή κλήσης;"</string>
+ <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <skip />
+ <!-- no translation found for activity_resolver_use_once (405646673463328329) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml
index 16b2607..4af21ed 100644
--- a/core/res/res/values-en-rGB/strings.xml
+++ b/core/res/res/values-en-rGB/strings.xml
@@ -175,16 +175,28 @@
<string name="permgroupdesc_location" msgid="5704679763124170100">"Monitor your physical location."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Network communication"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Access various network features."</string>
- <string name="permgrouplab_shortRangeNetwork" msgid="4504840216096355984">"Bluetooth and NFC"</string>
- <string name="permgroupdesc_shortRangeNetwork" msgid="8821013030346680806">"Access Bluetooth or NFC networks and devices."</string>
+ <!-- no translation found for permgrouplab_bluetoothNetwork (1585403544162128109) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_bluetoothNetwork (5625288577164282391) -->
+ <skip />
+ <!-- no translation found for permgrouplab_shortrangeNetwork (130808676377486118) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) -->
+ <skip />
<string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Audio Settings"</string>
<string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Change audio settings."</string>
<string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Affects Battery"</string>
<string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Use features that can quickly drain battery."</string>
<string name="permgrouplab_calendar" msgid="5863508437783683902">"Calendar"</string>
<string name="permgroupdesc_calendar" msgid="5777534316982184416">"Direct access to calendar and events."</string>
- <string name="permgrouplab_dictionary" msgid="8114410334955871144">"User Dictionary"</string>
- <string name="permgroupdesc_dictionary" msgid="40926483968949978">"Direct access to the user dictionary."</string>
+ <!-- no translation found for permgrouplab_dictionary (4148597128843641379) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_dictionary (7921166355964764490) -->
+ <skip />
+ <!-- no translation found for permgrouplab_writeDictionary (8090237702432576788) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) -->
+ <skip />
<string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Bookmarks and History"</string>
<string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Direct access to bookmarks and browser history."</string>
<string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Alarm"</string>
@@ -557,7 +569,8 @@
<string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Allows the app to read contents of USB storage, which may include photos and media."</string>
<string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Allows the app to read contents of SD card, which may include photos and media."</string>
<string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"modify or delete the contents of your USB storage"</string>
- <string name="permlab_sdcardWrite" product="default" msgid="9084476432661578751">"modify or delete the contents of your SD card"</string>
+ <!-- no translation found for permlab_sdcardWrite (8805693630050458763) -->
+ <skip />
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Allows the app to write to the USB storage."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Allows the app to write to the SD card."</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"modify/delete internal media storage contents"</string>
@@ -1076,11 +1089,10 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Set date"</string>
<string name="date_time_set" msgid="5777075614321087758">"Set"</string>
<string name="date_time_done" msgid="2507683751759308828">"Done"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"Default"</string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"NEW: "</font></string>
+ <!-- no translation found for perms_description_app (5139836143293299417) -->
+ <skip />
<string name="no_permissions" msgid="7283357728219338112">"No permission required"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Hide"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Show all"</b></string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"USB mass storage"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB connected"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"You\'ve connected to your computer via USB. Touch the button below if you want to copy files between your computer and your Android\'s USB storage."</string>
@@ -1309,4 +1321,8 @@
<string name="sending" msgid="3245653681008218030">"Sending…"</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Launch Browser?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Accept call?"</string>
+ <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <skip />
+ <!-- no translation found for activity_resolver_use_once (405646673463328329) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml
index edea70e..a3eb0f9 100644
--- a/core/res/res/values-es-rUS/strings.xml
+++ b/core/res/res/values-es-rUS/strings.xml
@@ -168,76 +168,55 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Tus mensajes"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Lee y escribe tus SMS, mensajes de correo y otros mensajes."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Tu información personal"</string>
- <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
- <skip />
- <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
- <skip />
- <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
- <skip />
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Acceso directo a tu información, almacenada en tu tarjeta de contacto"</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Tu información social"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Acceso directo a información sobre tus contactos y conexiones sociales"</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Tu ubicación"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Controlar tu ubicación física"</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Comunicación de red"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Acceder a distintas funciones de red"</string>
- <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <!-- no translation found for permgrouplab_bluetoothNetwork (1585403544162128109) -->
<skip />
- <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <!-- no translation found for permgroupdesc_bluetoothNetwork (5625288577164282391) -->
<skip />
- <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <!-- no translation found for permgrouplab_shortrangeNetwork (130808676377486118) -->
<skip />
- <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) -->
<skip />
- <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Configuración de audio"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Cambiar la configuración de audio"</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Afecta la batería."</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Uso de las características que se pueden agotar rápidamente la batería"</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Calendario"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Acceso directo a calendario y eventos"</string>
+ <!-- no translation found for permgrouplab_dictionary (4148597128843641379) -->
<skip />
- <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <!-- no translation found for permgroupdesc_dictionary (7921166355964764490) -->
<skip />
- <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <!-- no translation found for permgrouplab_writeDictionary (8090237702432576788) -->
<skip />
- <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) -->
<skip />
- <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
- <skip />
- <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
- <skip />
- <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
- <skip />
- <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
- <skip />
- <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
- <skip />
- <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
- <skip />
- <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
- <skip />
- <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
- <skip />
- <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
- <skip />
- <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
- <skip />
- <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
- <skip />
- <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
- <skip />
- <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
- <skip />
- <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
- <skip />
- <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
- <skip />
- <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
- <skip />
- <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
- <skip />
- <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
- <skip />
- <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
- <skip />
- <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
- <skip />
- <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
- <skip />
- <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
- <skip />
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Marcadores e historial"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Acceso directo a marcadores e historial del navegador"</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Alarma"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Ajusta el despertador."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Correo de voz"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Acceso directo al correo de voz"</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Micrófono"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Acceso directo a micrófono para grabar audio"</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Cámara"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Acceso directo a cámara para imagen o captura de vídeo"</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Información de tus aplicaciones"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Capacidad para influir en el comportamiento de otras aplicaciones en el dispositivo"</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Fondo de pantalla"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Cambiar la configuración de fondo de pantalla del dispositivo"</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Reloj"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Cambiar la hora del dispositivo o la zona horaria"</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Barra de estado"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Cambiar la configuración de la barra de estado del dispositivo"</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Configuración de sincronización"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Acceso a los ajustes de sincronización"</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Tus cuentas"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Acceder a las cuentas disponibles."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Controles de hardware"</string>
@@ -248,10 +227,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Acceso y control de nivel más bajo del sistema."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Herramientas de desarrollo"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Funciones únicamente necesarias para los programadores de aplicaciones."</string>
- <!-- no translation found for permgrouplab_display (4279909676036402636) -->
- <skip />
- <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
- <skip />
+ <string name="permgrouplab_display" msgid="4279909676036402636">"Interfaz de usuario de otra aplicación"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Influir la interfaz de usuario de otras aplicaciones"</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Espacio de almacenamiento"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Acceder al almacenamiento USB."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Acceder a la tarjeta SD."</string>
@@ -592,7 +569,8 @@
<string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Permite leer contenido USB."</string>
<string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Permite que la aplicación lea el contenido de la tarjeta SD que puede incluir fotos y archivos multimedia."</string>
<string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"modificar/borrar contenido USB"</string>
- <string name="permlab_sdcardWrite" product="default" msgid="9084476432661578751">"modificar o borrar el contenido de tu tarjeta SD"</string>
+ <!-- no translation found for permlab_sdcardWrite (8805693630050458763) -->
+ <skip />
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Permite que la aplicación escriba en el almacenamiento USB."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Admite que la aplicación escriba en la tarjeta SD."</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"modificar/eliminar los contenidos del almacenamientos de medios internos"</string>
@@ -770,8 +748,7 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"No hay tarjeta SIM en el dispositivo."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Inserta una tarjeta SIM."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"Falta la tarjeta SIM o no se puede leer. Introduce una tarjeta SIM."</string>
- <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
- <skip />
+ <string name="lockscreen_permanent_disabled_sim_message_short" msgid="5096149665138916184">"Tarjeta SIM inutilizable"</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"Tu tarjeta SIM se ha inhabilitado de forma permanente."\n" Ponte en contacto con tu proveedor de servicios inalámbricos para obtener otra tarjeta SIM."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Botón para pista anterior"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Botón para pista siguiente"</string>
@@ -1112,11 +1089,10 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Configurar fecha"</string>
<string name="date_time_set" msgid="5777075614321087758">"Establecer"</string>
<string name="date_time_done" msgid="2507683751759308828">"Listo"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"Predeterminado"</string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"NUEVO: "</font></string>
+ <!-- no translation found for perms_description_app (5139836143293299417) -->
+ <skip />
<string name="no_permissions" msgid="7283357728219338112">"No se requieren permisos"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Ocultar"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Mostrar todos"</b></string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"Almacenamiento USB masivo"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"Conectado al USB"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Has conectado el dispositivo a la computadora por USB. Toca el siguiente botón si quieres copiar archivos entre tu computadora y el almacenamiento USB de tu Android."</string>
@@ -1345,4 +1321,8 @@
<string name="sending" msgid="3245653681008218030">"Enviando..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"¿Deseas iniciar el navegador?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"¿Aceptar la llamada?"</string>
+ <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <skip />
+ <!-- no translation found for activity_resolver_use_once (405646673463328329) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml
index 653671d..fd28787 100644
--- a/core/res/res/values-es/strings.xml
+++ b/core/res/res/values-es/strings.xml
@@ -168,76 +168,55 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Tus mensajes"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Leer y escribir SMS, correos electrónicos y otros mensajes"</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Tu información personal"</string>
- <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
- <skip />
- <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
- <skip />
- <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
- <skip />
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Acceder directamente a tu información personal almacenada en la tarjeta de contacto"</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Tu información social"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Acceder directamente a la información de tus contactos y tus conexiones sociales"</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Tu ubicación"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Controlar tu ubicación física"</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Comunicación de red"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Acceder a distintas funciones de red"</string>
- <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <!-- no translation found for permgrouplab_bluetoothNetwork (1585403544162128109) -->
<skip />
- <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <!-- no translation found for permgroupdesc_bluetoothNetwork (5625288577164282391) -->
<skip />
- <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <!-- no translation found for permgrouplab_shortrangeNetwork (130808676377486118) -->
<skip />
- <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) -->
<skip />
- <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Ajustes de audio"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Modificar ajustes de audio"</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Afectar a la batería"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Usar funciones que agotan la batería rápidamente"</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Calendario"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Acceder directamente al calendario y a los eventos"</string>
+ <!-- no translation found for permgrouplab_dictionary (4148597128843641379) -->
<skip />
- <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <!-- no translation found for permgroupdesc_dictionary (7921166355964764490) -->
<skip />
- <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <!-- no translation found for permgrouplab_writeDictionary (8090237702432576788) -->
<skip />
- <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) -->
<skip />
- <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
- <skip />
- <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
- <skip />
- <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
- <skip />
- <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
- <skip />
- <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
- <skip />
- <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
- <skip />
- <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
- <skip />
- <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
- <skip />
- <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
- <skip />
- <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
- <skip />
- <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
- <skip />
- <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
- <skip />
- <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
- <skip />
- <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
- <skip />
- <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
- <skip />
- <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
- <skip />
- <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
- <skip />
- <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
- <skip />
- <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
- <skip />
- <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
- <skip />
- <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
- <skip />
- <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
- <skip />
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Marcadores e historial"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Acceder directamente a los marcadores y al historial del navegador"</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Alarma"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Establecer alarmas"</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Buzón de voz"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Acceder directamente al buzón de voz"</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Micrófono"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Acceder directamente al micrófono para grabar audio"</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Cámara"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Acceder directamente a la cámara para hacer fotos o grabar vídeos"</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Información de tus aplicaciones"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Posibilidad de influir en el funcionamiento de otras aplicaciones del dispositivo"</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Fondo de pantalla"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Cambiar la configuración del fondo de pantalla del dispositivo"</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Reloj"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Cambiar la zona horaria o la hora del dispositivo"</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Barra de estado"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Cambiar la configuración de la barra de estado del dispositivo"</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Ajustes de sincronización"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Acceder a los ajustes de sincronización"</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Tus cuentas"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Acceder a las cuentas disponibles"</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Controles de hardware"</string>
@@ -248,10 +227,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Acceso de nivel inferior y control del sistema"</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Herramientas de desarrollo"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Funciones necesarias solo para desarrolladores de aplicaciones"</string>
- <!-- no translation found for permgrouplab_display (4279909676036402636) -->
- <skip />
- <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
- <skip />
+ <string name="permgrouplab_display" msgid="4279909676036402636">"Interfaz de usuario de otras aplicaciones"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Influir en la interfaz de usuario de otras aplicaciones"</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Almacenamiento"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Acceso a almacenamiento USB"</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Acceder a la tarjeta SD"</string>
@@ -592,7 +569,8 @@
<string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Permite que la aplicación lea el contenido del almacenamiento USB que puede incluir fotos y archivos multimedia."</string>
<string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Permite que la aplicación lea el contenido de la tarjeta SD que puede incluir fotos y archivos multimedia."</string>
<string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"editar o borrar contenido de USB"</string>
- <string name="permlab_sdcardWrite" product="default" msgid="9084476432661578751">"modificar o eliminar el contenido de la tarjeta SD"</string>
+ <!-- no translation found for permlab_sdcardWrite (8805693630050458763) -->
+ <skip />
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Permite escribir en el almacenamiento USB."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Permite que la aplicación escriba en la tarjeta SD."</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"modificar o eliminar el contenido del almacenamiento de medios interno"</string>
@@ -770,8 +748,7 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"No se ha insertado ninguna tarjeta SIM en el teléfono."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Inserta una tarjeta SIM."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"Falta la tarjeta SIM o no se puede leer. Introduce una tarjeta SIM."</string>
- <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
- <skip />
+ <string name="lockscreen_permanent_disabled_sim_message_short" msgid="5096149665138916184">"Tarjeta SIM inutilizable"</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"Tu tarjeta SIM se ha inhabilitado permanentemente."\n" Para obtener otra tarjeta SIM, ponte en contacto con tu proveedor de servicios de telefonía."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Botón de canción anterior"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Botón de siguiente canción"</string>
@@ -1112,11 +1089,10 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Establecer fecha"</string>
<string name="date_time_set" msgid="5777075614321087758">"Establecer"</string>
<string name="date_time_done" msgid="2507683751759308828">"Listo"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"Predeterminado"</string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"NUEVO:"</font></string>
+ <!-- no translation found for perms_description_app (5139836143293299417) -->
+ <skip />
<string name="no_permissions" msgid="7283357728219338112">"No es necesario ningún permiso"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Ocultar"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Mostrar todos"</b></string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"Almacenamiento USB masivo"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"Conexión por USB"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Has conectado el dispositivo al ordenador por USB. Toca el siguiente botón si quieres copiar archivos entre el ordenador y el almacenamiento USB del dispositivo."</string>
@@ -1345,4 +1321,8 @@
<string name="sending" msgid="3245653681008218030">"Enviando..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"¿Iniciar el navegador?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"¿Aceptar la llamada?"</string>
+ <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <skip />
+ <!-- no translation found for activity_resolver_use_once (405646673463328329) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-et/strings.xml b/core/res/res/values-et/strings.xml
index d944b68..82e76e0 100644
--- a/core/res/res/values-et/strings.xml
+++ b/core/res/res/values-et/strings.xml
@@ -168,76 +168,55 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Teie sõnumid"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Teie SMS-, meili- ja muude sõnumite lugemine ja kirjutamine."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Teie isiklikud andmed"</string>
- <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
- <skip />
- <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
- <skip />
- <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
- <skip />
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Otsene juurdepääs teie kohta käivale teabele, mis on salvestatud teie kontaktikaardile."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Teie sotsiaalne teave"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Otsene juurdepääs teie kontaktide teabele ja sotsiaalsetele sidemetele."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Teie asukoht"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Jälgige oma füüsilist asukohta."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Võrgusuhtlus"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Juurdepääs erinevatele võrgufunktsioonidele."</string>
- <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <!-- no translation found for permgrouplab_bluetoothNetwork (1585403544162128109) -->
<skip />
- <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <!-- no translation found for permgroupdesc_bluetoothNetwork (5625288577164282391) -->
<skip />
- <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <!-- no translation found for permgrouplab_shortrangeNetwork (130808676377486118) -->
<skip />
- <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) -->
<skip />
- <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Heliseaded"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Heliseadete muutmine."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Aku mõjutamine"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Funktsioonide, mis võivad aku kiiresti tühjendada, kasutamine."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Kalender"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Otsene juurdepääs kalendrile ja sündmustele."</string>
+ <!-- no translation found for permgrouplab_dictionary (4148597128843641379) -->
<skip />
- <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <!-- no translation found for permgroupdesc_dictionary (7921166355964764490) -->
<skip />
- <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <!-- no translation found for permgrouplab_writeDictionary (8090237702432576788) -->
<skip />
- <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) -->
<skip />
- <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
- <skip />
- <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
- <skip />
- <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
- <skip />
- <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
- <skip />
- <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
- <skip />
- <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
- <skip />
- <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
- <skip />
- <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
- <skip />
- <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
- <skip />
- <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
- <skip />
- <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
- <skip />
- <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
- <skip />
- <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
- <skip />
- <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
- <skip />
- <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
- <skip />
- <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
- <skip />
- <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
- <skip />
- <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
- <skip />
- <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
- <skip />
- <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
- <skip />
- <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
- <skip />
- <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
- <skip />
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Järjehoidjad ja ajalugu"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Otsene juurdepääs järjehoidjatele ja brauseri ajaloole."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Alarm"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Äratuskella seadmine."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Kõnepost"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Otsene juurdepääs kõnepostile."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Mikrofon"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Otsene juurdepääs mikrofonile heli salvestamiseks."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Kaamera"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Otsene juurdepääs kaamerale fotode või videote jäädvustamiseks."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Teie rakenduste teave"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Võime mõjutada teiste seadmes olevate rakenduste käitumist."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Taustapilt"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Seadme taustapildi seadete muutmine."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Kell"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Seadme aja või ajavööndi muutmine."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Olekuriba"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Seadme olekuriba seadete muutmine."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Sünkroonimisseaded"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Juurdepääs sünkroonimisseadetele."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Teie kontod"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Juurdepääs saadaolevatele kontodele."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Riistvara juhtelemendid"</string>
@@ -248,10 +227,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Süsteemi madalama taseme juurdepääs ja juhtimine."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Arendustööriistad"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Funktsioonid on vajalikud ainult rakenduste arendajatele."</string>
- <!-- no translation found for permgrouplab_display (4279909676036402636) -->
- <skip />
- <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
- <skip />
+ <string name="permgrouplab_display" msgid="4279909676036402636">"Muu rakenduse kasutajaliides"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Teiste rakenduste kasutajaliidese mõjutamine."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Mäluruum"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Juurdepääs USB-mäluseadmele."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Juurdepääs SD-kaardile."</string>
@@ -592,7 +569,8 @@
<string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Võim. lugeda USB-ruumi sisu."</string>
<string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Võimaldab rakendusel lugeda SD-kaardi sisu, mis võib sisaldada fotosid ja meediume."</string>
<string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"muutke, kustut. USB-ruumi sisu"</string>
- <string name="permlab_sdcardWrite" product="default" msgid="9084476432661578751">"muutke või kustutage oma SD-kaardi sisu"</string>
+ <!-- no translation found for permlab_sdcardWrite (8805693630050458763) -->
+ <skip />
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Võimaldab rakendusel kirjutada USB-mäluseadmele."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Võimaldab rakendusel kirjutada SD-kaardile."</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"sisemälu sisu muutm./kustut."</string>
@@ -770,8 +748,7 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"Telefonis pole SIM-kaarti."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Sisestage SIM-kaart."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"SIM-kaart puudub või on loetamatu. Sisestage SIM-kaart."</string>
- <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
- <skip />
+ <string name="lockscreen_permanent_disabled_sim_message_short" msgid="5096149665138916184">"Kasutamiskõlbmatu SIM-kaart."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"SIM-kaart on jäädavalt keelatud."\n" Teise SIM-kaardi saamiseks võtke ühendust oma traadita side teenusepakkujaga."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Eelmise loo nupp"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Nupp Järgmine rada"</string>
@@ -1112,11 +1089,10 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Kuupäeva määramine"</string>
<string name="date_time_set" msgid="5777075614321087758">"Määra"</string>
<string name="date_time_done" msgid="2507683751759308828">"Valmis"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"Vaikimisi"</string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"UUS: "</font></string>
+ <!-- no translation found for perms_description_app (5139836143293299417) -->
+ <skip />
<string name="no_permissions" msgid="7283357728219338112">"Lube pole vaja"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Peida"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Näita kõiki"</b></string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"USB-massmälu"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB ühendatud"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Teil on arvutiga ühendus USB kaudu. Puudutage allolevat nuppu, kui soovite faile arvuti ja Androidi USB-salvestusruumi vahel kopeerida."</string>
@@ -1345,4 +1321,8 @@
<string name="sending" msgid="3245653681008218030">"Saatmine ..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Kas käivitada brauser?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Kas vastata kõnele?"</string>
+ <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <skip />
+ <!-- no translation found for activity_resolver_use_once (405646673463328329) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml
index c7a8be7d..1c0ef97 100644
--- a/core/res/res/values-fa/strings.xml
+++ b/core/res/res/values-fa/strings.xml
@@ -178,9 +178,13 @@
<string name="permgroupdesc_location" msgid="5704679763124170100">"بر موقعیت مکانی فیزیکی خود نظارت داشته باشید."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"ارتباط شبکه"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"به ویژگیهای مختلف شبکه دسترسی داشته باشید."</string>
- <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <!-- no translation found for permgrouplab_bluetoothNetwork (1585403544162128109) -->
<skip />
- <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <!-- no translation found for permgroupdesc_bluetoothNetwork (5625288577164282391) -->
+ <skip />
+ <!-- no translation found for permgrouplab_shortrangeNetwork (130808676377486118) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) -->
<skip />
<!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
<skip />
@@ -194,9 +198,13 @@
<skip />
<!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
<skip />
- <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
+ <!-- no translation found for permgrouplab_dictionary (4148597128843641379) -->
<skip />
- <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
+ <!-- no translation found for permgroupdesc_dictionary (7921166355964764490) -->
+ <skip />
+ <!-- no translation found for permgrouplab_writeDictionary (8090237702432576788) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) -->
<skip />
<!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
<skip />
@@ -566,7 +574,7 @@
<string name="permdesc_accessWimaxState" msgid="5914958077555177749">"به برنامه اجازه میدهد اطلاعات وضعیت WiMAX را مشاهده کند."</string>
<string name="permlab_changeWimaxState" msgid="2405042267131496579">"تغییر وضعیت WiMAX"</string>
<string name="permdesc_changeWimaxState" msgid="3328853825006455912">"به برنامه امکان میدهد تا به شبکه WiMAX متصل شده یا از آن قطع اتصال کند."</string>
- <string name="permlab_bluetooth" msgid="6127769336339276828">"مرتبطسازی با دستگاههای بلوتوث"</string>
+ <string name="permlab_bluetooth" msgid="6127769336339276828">"مرتبط سازی با دستگاههای بلوتوث"</string>
<string name="permdesc_bluetooth" product="tablet" msgid="7007851048416363446">"به برنامه اجازه میدهد تا پیکربندی رایانه لوحی بلوتوث محلی را مشاهده کند و اتصال با دستگاههای جفت شده را برقرار کرده و بپذیرد."</string>
<string name="permdesc_bluetooth" product="default" msgid="31846362767164948">"به برنامه اجازه میدهد تا پیکربندی تلفن بلوتوث محلی را مشاهده کند، و اتصالات دستگاههای جفت شده را برقرار کرده و بپذیرد."</string>
<string name="permlab_nfc" msgid="4423351274757876953">"کنترل ارتباط راه نزدیک"</string>
@@ -592,7 +600,8 @@
<string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"به برنامه امکان میدهد محتویات حافظه USB را بخواند که ممکن است حاوی عکس و رسانه باشد."</string>
<string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"به برنامه اجازه میدهد محتویات کارت SD را بخواند که ممکن است حاوی عکس و رسانه باشد."</string>
<string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"اصلاح یا حذف محتویات حافظه USB شما"</string>
- <string name="permlab_sdcardWrite" product="default" msgid="9084476432661578751">"اصلاح یا حذف محتویات کارت SD شما"</string>
+ <!-- no translation found for permlab_sdcardWrite (8805693630050458763) -->
+ <skip />
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"به برنامه اجازه میدهد تا در حافظه USB بنویسد."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"به برنامه اجازه میدهد تا در کارت SD بنویسد."</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"تغییر/حذف محتواهای حافظه رسانه داخلی"</string>
@@ -1112,11 +1121,10 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"تاریخ تنظیم"</string>
<string name="date_time_set" msgid="5777075614321087758">"تنظیم"</string>
<string name="date_time_done" msgid="2507683751759308828">"انجام شد"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"پیش فرض"</string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"جدید: "</font></string>
+ <!-- no translation found for perms_description_app (5139836143293299417) -->
+ <skip />
<string name="no_permissions" msgid="7283357728219338112">"مجوزی لازم نیست"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"پنهان کردن"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"نمایش همه"</b></string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"حافظه انبوه USB"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB متصل شد"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"شما از طریق USB به رایانه خود متصل شدهاید. اگر میخواهید فایلها را بین رایانه خود و حافظه USB در Android کپی کنید، دکمه زیر را لمس کنید."</string>
@@ -1345,4 +1353,8 @@
<string name="sending" msgid="3245653681008218030">"درحال ارسال..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"مرورگر راهاندازی شود؟"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"تماس را میپذیرید؟"</string>
+ <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <skip />
+ <!-- no translation found for activity_resolver_use_once (405646673463328329) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml
index 3e27cbd..ac72b4e 100644
--- a/core/res/res/values-fi/strings.xml
+++ b/core/res/res/values-fi/strings.xml
@@ -168,76 +168,55 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Omat viestit"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Tekstiviestien, sähköpostin ja muiden viestien lukeminen ja kirjoittaminen."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Henkilötietosi"</string>
- <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
- <skip />
- <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
- <skip />
- <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
- <skip />
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Yhteystietokorttiisi tallennettujen tietojesi käyttöoikeus."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Sosiaaliset tietosi"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Kontaktiesi ja internet-kontaktiesi tietojen käyttöoikeus."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Oma sijainti"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Tarkkaile fyysistä sijaintiasi."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Verkkoviestintä"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Käyttää useita verkon ominaisuuksia."</string>
- <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <!-- no translation found for permgrouplab_bluetoothNetwork (1585403544162128109) -->
<skip />
- <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <!-- no translation found for permgroupdesc_bluetoothNetwork (5625288577164282391) -->
<skip />
- <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <!-- no translation found for permgrouplab_shortrangeNetwork (130808676377486118) -->
<skip />
- <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) -->
<skip />
- <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Ääniasetukset"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Muuta ääniasetuksia."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Vaikuttaa akun kestoon"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Käytä ominaisuuksia, jotka voivat tyhjentää akun nopeasti."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Kalenteri"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Kalenterin ja tapahtumien käyttöoikeus."</string>
+ <!-- no translation found for permgrouplab_dictionary (4148597128843641379) -->
<skip />
- <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <!-- no translation found for permgroupdesc_dictionary (7921166355964764490) -->
<skip />
- <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <!-- no translation found for permgrouplab_writeDictionary (8090237702432576788) -->
<skip />
- <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) -->
<skip />
- <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
- <skip />
- <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
- <skip />
- <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
- <skip />
- <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
- <skip />
- <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
- <skip />
- <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
- <skip />
- <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
- <skip />
- <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
- <skip />
- <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
- <skip />
- <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
- <skip />
- <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
- <skip />
- <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
- <skip />
- <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
- <skip />
- <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
- <skip />
- <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
- <skip />
- <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
- <skip />
- <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
- <skip />
- <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
- <skip />
- <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
- <skip />
- <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
- <skip />
- <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
- <skip />
- <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
- <skip />
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Kirjanmerkit ja historia"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Kirjanmerkkien ja selaimen historian käyttöoikeus."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Herätys"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Aseta herätysaika."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Vastaaja"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Vastaajan käyttöoikeus."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Mikrofoni"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Äänen tallentamiseen käytettävän mikrofonin käyttöoikeus."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Kamera"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Kuvien tai videon tallentamiseen käytettävän kameran käyttöoikeus."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Sovelluksiesi tiedot"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Mahdollisuus vaikuttaa muiden laitteen sovelluksien käytökseen."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Taustakuva"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Muuta laitteen taustakuvan asetuksia."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Kello"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Muuta laitteen aikaa tai aikavyöhykettä."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Tilapalkki"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Muuta laitteen tilarivin asetuksia."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Synkronointiasetukset"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Synkronointiasetuksien käyttöoikeus."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Omat tilit"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Käytä saatavilla olevia tilejä."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Laitteiston hallinta"</string>
@@ -248,10 +227,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Alemman tason käyttöoikeus ja järjestelmän hallintaoikeus."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Kehittäjätyökalut"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Vain sovelluskehittäjien tarvitsemat ominaisuudet."</string>
- <!-- no translation found for permgrouplab_display (4279909676036402636) -->
- <skip />
- <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
- <skip />
+ <string name="permgrouplab_display" msgid="4279909676036402636">"Muiden sovelluksien käyttöliittymät"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Vaikuta muiden sovelluksien käyttöliittymään."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Tallennustila"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Käytä USB-tallennustilaa."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Käytä SD-korttia."</string>
@@ -592,7 +569,8 @@
<string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Lue USB-muistin sisältöä (kuvia ja mediaa)."</string>
<string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Antaa sovelluksen lukea SD-kortin sisältöä. Kortti voi sisältää valokuvia ja muuta mediaa."</string>
<string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"muokkaa tai poista USB:n sis."</string>
- <string name="permlab_sdcardWrite" product="default" msgid="9084476432661578751">"muokkaa tai poista SD-kortin sisältöä"</string>
+ <!-- no translation found for permlab_sdcardWrite (8805693630050458763) -->
+ <skip />
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Antaa sovelluksen kirjoittaa USB-tallennustilaan."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Antaa sovelluksen kirjoittaa SD-kortille."</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"muokkaa/poista sisäisen säilytystilan sisältöä"</string>
@@ -770,8 +748,7 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"Puhelimessa ei ole SIM-korttia."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Aseta SIM-kortti."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"SIM-korttia ei löydy tai ei voi lukea. Kytke SIM-kortti."</string>
- <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
- <skip />
+ <string name="lockscreen_permanent_disabled_sim_message_short" msgid="5096149665138916184">"SIM-kortti ei kelpaa."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"SIM-kortti on poistettu pysyvästi käytöstä."\n" Ota yhteyttä operaattoriisi ja hanki uusi SIM-kortti."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Edellinen kappale -painike"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Seuraava kappale -painike"</string>
@@ -1112,11 +1089,10 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Aseta päivämäärä"</string>
<string name="date_time_set" msgid="5777075614321087758">"Aseta"</string>
<string name="date_time_done" msgid="2507683751759308828">"Valmis"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"Oletus"</string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"UUTTA: "</font></string>
+ <!-- no translation found for perms_description_app (5139836143293299417) -->
+ <skip />
<string name="no_permissions" msgid="7283357728219338112">"Lupia ei tarvita"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Piilota"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Näytä kaikki"</b></string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"USB-massamuisti"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB yhdistetty"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Olet yhdistänyt laitteesi tietokoneeseen USB-kaapelin kautta. Kosketa alla olevaa painiketta, jos haluat kopioida tiedostoja tietokoneesi ja Androidin USB-tallennustilan välillä."</string>
@@ -1345,4 +1321,8 @@
<string name="sending" msgid="3245653681008218030">"Lähetetään…"</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Käynnistetäänkö selain?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Vastataanko puheluun?"</string>
+ <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <skip />
+ <!-- no translation found for activity_resolver_use_once (405646673463328329) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml
index 6b8a2fd..1622284 100644
--- a/core/res/res/values-fr/strings.xml
+++ b/core/res/res/values-fr/strings.xml
@@ -168,76 +168,55 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Vos messages"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Permet de lire et de rédiger vos SMS, e-mails et autres messages."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Vos informations personnelles"</string>
- <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
- <skip />
- <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
- <skip />
- <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
- <skip />
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Accès direct aux informations vous concernant enregistrées dans la fiche de contact"</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Vos informations sur les réseaux sociaux"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Accès direct aux informations sur vos contacts et vos amis sur les réseaux sociaux"</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Votre position"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Déterminer votre position géographique"</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Communications réseau"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Accéder à différentes fonctionnalités du réseau"</string>
- <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <!-- no translation found for permgrouplab_bluetoothNetwork (1585403544162128109) -->
<skip />
- <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <!-- no translation found for permgroupdesc_bluetoothNetwork (5625288577164282391) -->
<skip />
- <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <!-- no translation found for permgrouplab_shortrangeNetwork (130808676377486118) -->
<skip />
- <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) -->
<skip />
- <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Paramètres audio"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Modification des paramètres audio"</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Affecte la batterie"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Utilisation de fonctionnalités qui peuvent épuiser rapidement la batterie"</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Agenda"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Accès direct à l\'agenda et aux événements"</string>
+ <!-- no translation found for permgrouplab_dictionary (4148597128843641379) -->
<skip />
- <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <!-- no translation found for permgroupdesc_dictionary (7921166355964764490) -->
<skip />
- <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <!-- no translation found for permgrouplab_writeDictionary (8090237702432576788) -->
<skip />
- <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) -->
<skip />
- <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
- <skip />
- <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
- <skip />
- <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
- <skip />
- <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
- <skip />
- <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
- <skip />
- <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
- <skip />
- <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
- <skip />
- <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
- <skip />
- <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
- <skip />
- <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
- <skip />
- <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
- <skip />
- <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
- <skip />
- <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
- <skip />
- <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
- <skip />
- <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
- <skip />
- <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
- <skip />
- <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
- <skip />
- <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
- <skip />
- <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
- <skip />
- <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
- <skip />
- <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
- <skip />
- <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
- <skip />
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Favoris et historique"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Accès direct aux favoris et à l\'historique du navigateur"</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Alarme"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Réglage du réveil"</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Messagerie vocale"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Accès direct à la messagerie vocale"</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Microphone"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Accès direct au microphone pour enregistrer du contenu audio"</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Appareil photo"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Accès direct à la caméra pour la capture d\'images ou de vidéos"</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Informations relatives à vos applications"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Possibilité de modifier le comportement des autres applications sur votre appareil"</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Fond d\'écran"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Modification des paramètres du fond d\'écran de l\'appareil"</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Horloge"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Modification de l\'heure ou du fuseau horaire de l\'appareil"</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Barre d\'état"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Modification des paramètres de la barre d\'état de l\'appareil"</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Paramètres de synchronisation"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Accès aux paramètres de synchronisation"</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Vos comptes"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Accéder aux comptes disponibles"</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Commandes du matériel"</string>
@@ -248,10 +227,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Accès et contrôle de faible niveau du système."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Outils de développement"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Ces fonctionnalités sont destinées uniquement aux développeurs d\'applications."</string>
- <!-- no translation found for permgrouplab_display (4279909676036402636) -->
- <skip />
- <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
- <skip />
+ <string name="permgrouplab_display" msgid="4279909676036402636">"Interface utilisateur d\'une autre application"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Effet sur l\'interface utilisateur d\'autres applications"</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Stockage"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Accéder à la mémoire de stockage USB"</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Accéder à la carte SD"</string>
@@ -425,9 +402,9 @@
<string name="permdesc_readProfile" product="default" msgid="94520753797630679">"Permet à l\'application de lire les informations de profil stockées sur votre appareil, telles que votre nom et vos coordonnées, ou d\'en ajouter. D\'autres applications peuvent alors vous identifier et envoyer vos informations de profil à des tiers."</string>
<string name="permlab_writeProfile" msgid="907793628777397643">"modifier votre fiche de contact"</string>
<string name="permdesc_writeProfile" product="default" msgid="4637366723793045603">"Permet à l\'application de modifier les informations de profil stockées sur votre appareil, telles que votre nom et vos coordonnées, ou d\'en ajouter. D\'autres applications peuvent alors vous identifier et envoyer vos informations de profil à des tiers."</string>
- <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"lire flux des réseaux sociaux"</string>
+ <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"lire votre flux de réseau social"</string>
<string name="permdesc_readSocialStream" product="default" msgid="3419050808547335320">"Permet à l\'application d\'accéder aux mises à jour de vos amis sur les réseaux sociaux et de les synchroniser. Des applications malveillantes peuvent exploiter cette fonctionnalité pour accéder à des communications privées entre vous et vos amis sur ces réseaux."</string>
- <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"Mettre à jour sur vos flux"</string>
+ <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"écrire sur votre flux social"</string>
<string name="permdesc_writeSocialStream" product="default" msgid="3496277176955721451">"Permet à l\'application d\'afficher les mises à jour de vos amis sur les réseaux sociaux. Des applications malveillantes peuvent exploiter cette fonctionnalité en se faisant passer pour un ami et vous inciter à révéler des mots de passe ou autres informations confidentielles."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"consulter les événements d\'agenda ainsi que les informations confidentielles"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="2338414551004122687">"Permet à l\'application de lire tous les événements de calendrier stockés sur votre tablette, y compris ceux de vos amis et de vos collègues. Des applications malveillantes peuvent exploiter cette fonctionnalité pour extraire des informations personnelles de ces calendriers à l\'insu du propriétaire."</string>
@@ -440,17 +417,17 @@
<string name="permdesc_accessLocationExtraCommands" msgid="6737736970602176133">"Permet à l\'application d\'accéder à des commandes supplémentaires du fournisseur de localisation. Des applications malveillantes peuvent exploiter cette fonctionnalité pour interférer avec le bon fonctionnement du GPS ou de toute autre source de positionnement."</string>
<string name="permlab_installLocationProvider" msgid="6578101199825193873">"autoriser l\'installation d\'un fournisseur de services de localisation"</string>
<string name="permdesc_installLocationProvider" msgid="1742577679350078373">"Permet de créer des sources de positionnement fictives à des fins de test. Des applications malveillantes peuvent exploiter cette fonctionnalité pour remplacer la position géographique et/ou l\'état renvoyés par des sources de localisation réelles, telles que le GPS ou le fournisseur d\'accès réseau, ou pour surveiller et transmettre votre position géographique à une source externe."</string>
- <string name="permlab_accessFineLocation" msgid="8116127007541369477">"Localisation précise (GPS)"</string>
+ <string name="permlab_accessFineLocation" msgid="8116127007541369477">"procéder à une localisation précise (GPS)"</string>
<string name="permdesc_accessFineLocation" product="tablet" msgid="5326423948268164934">"Permet d\'accéder à des sources de positionnement précises telles que le système GPS de la tablette, lorsque ces services sont disponibles. Des applications malveillantes peuvent exploiter cette fonctionnalité pour déterminer votre position, ce qui peut entraîner une consommation accrue de la batterie."</string>
<string name="permdesc_accessFineLocation" product="default" msgid="7130267914433890869">"Permet d\'accéder à des sources de positionnement précises telles que le système GPS du téléphone, lorsque ces services sont disponibles. Des applications malveillantes peuvent exploiter cette fonctionnalité pour déterminer votre position, ce qui peut entraîner une consommation accrue de la batterie."</string>
- <string name="permlab_accessCoarseLocation" msgid="4642255009181975828">"Position géo. approximative (selon le réseau)"</string>
+ <string name="permlab_accessCoarseLocation" msgid="4642255009181975828">"procéder à une géolocalisation approximative (selon le réseau)"</string>
<string name="permdesc_accessCoarseLocation" product="tablet" msgid="5460726396318105483">"Permet d\'accéder à des sources de positionnement approximatives, telles que des bases de données de réseaux mobiles, pour déterminer la position géographique de la tablette lorsque celle-ci est disponible. Des applications malveillantes peuvent exploiter cette fonctionnalité pour déterminer votre position approximative."</string>
<string name="permdesc_accessCoarseLocation" product="default" msgid="8900795778057579522">"Permet d\'accéder à des sources de positionnement approximatives, telles que des bases de données de réseaux mobiles, pour déterminer la position géographique du téléphone lorsque celle-ci est disponible. Des applications malveillantes peuvent exploiter cette fonctionnalité pour déterminer votre position approximative."</string>
<string name="permlab_accessSurfaceFlinger" msgid="2363969641792388947">"Accès à SurfaceFlinger"</string>
<string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Permet à l\'application d\'utiliser les fonctionnalités de bas niveau de SurfaceFlinger."</string>
<string name="permlab_readFrameBuffer" msgid="6690504248178498136">"Lecture de la mémoire tampon graphique"</string>
<string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Permet à l\'application de lire le contenu de la mémoire tampon graphique."</string>
- <string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"Modification de vos paramètres audio"</string>
+ <string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"modifier vos paramètres audio"</string>
<string name="permdesc_modifyAudioSettings" msgid="7343951185408396919">"Permet à l\'application de modifier les paramètres audio généraux, tels que le volume et le routage audio."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"Enregistrement de fichier audio"</string>
<string name="permdesc_recordAudio" msgid="2387462233976248635">"Permet à l\'application d\'accéder au chemin de l\'enregistrement audio."</string>
@@ -482,7 +459,7 @@
<string name="permdesc_asec_rename" msgid="1794757588472127675">"Permet à l\'application de renommer la mémoire de stockage interne."</string>
<string name="permlab_vibrate" msgid="7696427026057705834">"contrôler le vibreur"</string>
<string name="permdesc_vibrate" msgid="6284989245902300945">"Permet à l\'application de contrôler le vibreur."</string>
- <string name="permlab_flashlight" msgid="2155920810121984215">"Contrôle de la lampe de poche"</string>
+ <string name="permlab_flashlight" msgid="2155920810121984215">"contrôler la lampe de poche"</string>
<string name="permdesc_flashlight" msgid="6522284794568368310">"Permet à l\'application de contrôler la lampe de poche."</string>
<string name="permlab_manageUsb" msgid="1113453430645402723">"gérer les préférences et les autorisations des périphériques USB"</string>
<string name="permdesc_manageUsb" msgid="7776155430218239833">"Permet à l\'application de gérer les préférences et les autorisations des périphériques USB."</string>
@@ -518,7 +495,7 @@
<string name="permlab_factoryTest" msgid="3715225492696416187">"Exécution en mode Test d\'usine"</string>
<string name="permdesc_factoryTest" product="tablet" msgid="3952059318359653091">"Permet d\'exécuter une application en mode test fabricant de faible niveau, autorisant ainsi l\'accès complet à la tablette. Cette fonctionnalité est uniquement disponible lorsque la tablette est en mode test fabricant."</string>
<string name="permdesc_factoryTest" product="default" msgid="8136644990319244802">"Permet d\'exécuter une application en mode test fabricant de faible niveau en autorisant ainsi l\'accès au téléphone. Cette fonctionnalité est uniquement disponible lorsque le téléphone est en mode test fabricant."</string>
- <string name="permlab_setWallpaper" msgid="6627192333373465143">"Configuration du fond d\'écran"</string>
+ <string name="permlab_setWallpaper" msgid="6627192333373465143">"configurer le fond d\'écran"</string>
<string name="permdesc_setWallpaper" msgid="7373447920977624745">"Permet à l\'application de définir le fond d\'écran du système."</string>
<string name="permlab_setWallpaperHints" msgid="3278608165977736538">"modifier la taille du fond d\'écran"</string>
<string name="permdesc_setWallpaperHints" msgid="8235784384223730091">"Permet à l\'application de définir les bulles d\'aide concernant la taille du fond d\'écran du système."</string>
@@ -543,7 +520,7 @@
<string name="permdesc_useCredentials" msgid="7984227147403346422">"Permet à l\'application de demander des jetons d\'authentification."</string>
<string name="permlab_accessNetworkState" msgid="4951027964348974773">"afficher les connexions réseau"</string>
<string name="permdesc_accessNetworkState" msgid="479772796952547198">"Permet à l\'application d\'afficher l\'état de tous les réseaux."</string>
- <string name="permlab_createNetworkSockets" msgid="9121633680349549585">"Accès Internet complet"</string>
+ <string name="permlab_createNetworkSockets" msgid="9121633680349549585">"bénéficier d\'un accès Internet complet"</string>
<string name="permdesc_createNetworkSockets" msgid="5963922297444265950">"Permet à l\'application de créer des connecteurs réseau."</string>
<string name="permlab_writeApnSettings" msgid="505660159675751896">"changer/intercepter les paramètres et le trafic du réseau"</string>
<string name="permdesc_writeApnSettings" msgid="5333798886412714193">"Permet à l\'application de modifier les paramètres réseau, ainsi que d\'intercepter et de surveiller tout le trafic réseau ayant pour but de modifier le proxy et le port d\'un APN, par exemple. Des applications malveillantes peuvent exploiter cette fonctionnalité pour surveiller, rediriger ou modifier les paquets réseau à votre insu."</string>
@@ -573,15 +550,15 @@
<string name="permdesc_nfc" msgid="7120611819401789907">"Permet à l\'application de communiquer avec des tags, des cartes et des lecteurs compatibles avec la technologie NFC (communication en champ proche)."</string>
<string name="permlab_disableKeyguard" msgid="3598496301486439258">"désactiver le verrouillage de l\'écran"</string>
<string name="permdesc_disableKeyguard" msgid="6231611286892232626">"Permet à l\'application de désactiver le verrouillage des touches et toute sécurité par mot de passe associée. Par exemple, votre téléphone désactive le verrouillage du clavier lorsque vous recevez un appel, puis le réactive lorsque vous raccrochez."</string>
- <string name="permlab_readSyncSettings" msgid="6201810008230503052">"Lecture des paramètres de synchronisation"</string>
+ <string name="permlab_readSyncSettings" msgid="6201810008230503052">"lire les paramètres de synchronisation"</string>
<string name="permdesc_readSyncSettings" msgid="5464056785274229278">"Permet à l\'application de lire les paramètres de synchronisation, tels que l\'activation de la synchronisation pour l\'application Contacts."</string>
<string name="permlab_writeSyncSettings" msgid="5408694875793945314">"activer/désactiver la synchronisation"</string>
<string name="permdesc_writeSyncSettings" msgid="1466056564502117130">"Permet à l\'application de modifier les paramètres de synchronisation, tels que l\'activation de la synchronisation pour l\'application Contacts."</string>
<string name="permlab_readSyncStats" msgid="7396577451360202448">"Lecture des statistiques de synchronisation"</string>
<string name="permdesc_readSyncStats" msgid="3801971839939951678">"Permet à l\'application de lire les statistiques de synchronisation, par exemple l\'historique des synchronisations effectuées."</string>
- <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"Lecture des flux auxquels vous êtes abonné"</string>
+ <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"lire les flux auxquels vous êtes abonné"</string>
<string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Permet à l\'application d\'obtenir des informations sur les flux en cours de synchronisation."</string>
- <string name="permlab_subscribedFeedsWrite" msgid="9015246325408209296">"Écriture des flux auxquels vous êtes abonné"</string>
+ <string name="permlab_subscribedFeedsWrite" msgid="9015246325408209296">"écrire les flux auxquels vous êtes abonné"</string>
<string name="permdesc_subscribedFeedsWrite" msgid="6928930188826089413">"Permet à l\'application de modifier les flux en cours de synchronisation. Des applications malveillantes peuvent exploiter cette fonctionnalité pour modifier vos flux synchronisés."</string>
<string name="permlab_readDictionary" msgid="4107101525746035718">"voir les termes ajoutés au dictionnaire"</string>
<string name="permdesc_readDictionary" msgid="8977815988329283705">"Permet à l\'application de lire tous les mots, noms et expressions privés que l\'utilisateur a pu enregistrer dans son dictionnaire personnel."</string>
@@ -592,7 +569,8 @@
<string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Permet à l\'appli de lire le contenu de la mémoire USB (photos, fichiers multimédias, etc.)."</string>
<string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Permet à l\'application de lire le contenu d\'une carte SD, qui peut inclure des photos et des fichiers multimédias."</string>
<string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"modifier ou supprimer le contenu de la mémoire USB"</string>
- <string name="permlab_sdcardWrite" product="default" msgid="9084476432661578751">"modifier ou supprimer le contenu de la carte SD"</string>
+ <!-- no translation found for permlab_sdcardWrite (8805693630050458763) -->
+ <skip />
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Permet à l\'application de modifier le contenu de la mémoire de stockage USB."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Permet à l\'application de modifier le contenu de la carte SD."</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"Modifier/Supprimer contenu mémoire interne"</string>
@@ -770,8 +748,7 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"Aucune carte SIM n\'est insérée dans le téléphone."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Insérez une carte SIM."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"Carte SIM absente ou illisible. Insérez une carte SIM."</string>
- <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
- <skip />
+ <string name="lockscreen_permanent_disabled_sim_message_short" msgid="5096149665138916184">"Carte SIM inutilisable."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"Votre carte SIM a été définitivement désactivée."\n" Veuillez contacter votre opérateur de téléphonie mobile pour en obtenir une autre."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Bouton du titre précédent"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Bouton du titre suivant"</string>
@@ -1112,11 +1089,10 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Définir la date"</string>
<string name="date_time_set" msgid="5777075614321087758">"Définir"</string>
<string name="date_time_done" msgid="2507683751759308828">"OK"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"Par défaut"</string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"NOUVEAU"</font>" :"</string>
+ <!-- no translation found for perms_description_app (5139836143293299417) -->
+ <skip />
<string name="no_permissions" msgid="7283357728219338112">"Aucune autorisation requise"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Masquer"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Tout afficher"</b></string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"Mémoire de stockage de masse USB"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"Connecté par USB"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Vous êtes connecté à votre ordinateur via un câble USB. Appuyez sur le bouton ci-dessous pour copier des fichiers de votre ordinateur vers la mémoire de stockage USB de votre appareil Android, ou inversement."</string>
@@ -1345,4 +1321,8 @@
<string name="sending" msgid="3245653681008218030">"Envoi en cours…"</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Lancer le navigateur ?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Prendre l\'appel ?"</string>
+ <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <skip />
+ <!-- no translation found for activity_resolver_use_once (405646673463328329) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-h720dp/dimens.xml b/core/res/res/values-h720dp/dimens.xml
index 5a9c777..f726a98 100644
--- a/core/res/res/values-h720dp/dimens.xml
+++ b/core/res/res/values-h720dp/dimens.xml
@@ -19,12 +19,4 @@
<resources>
<!-- Dialog button bar height -->
<dimen name="alert_dialog_button_bar_height">54dip</dimen>
- <!-- Preference fragment padding, bottom -->
- <dimen name="preference_fragment_padding_bottom">16dp</dimen>
-
- <dimen name="preference_screen_header_padding_side">0dip</dimen>
-
- <integer name="preference_screen_header_scrollbarStyle">0x0</integer> <!-- insideOverlay -->
- <integer name="preference_fragment_scrollbarStyle">0x02000000</integer> <!-- outsideOverlay -->
-
</resources>
diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml
index 1afc3cd..ea6447f 100644
--- a/core/res/res/values-hi/strings.xml
+++ b/core/res/res/values-hi/strings.xml
@@ -168,76 +168,55 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"आपके संदेश"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"अपने SMS, ईमेल, और अन्य संदेशों को पढ़ें और लिखें."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"आपकी निजी जानकारी"</string>
- <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
- <skip />
- <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
- <skip />
- <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
- <skip />
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"अपने संपर्क कार्ड में संग्रहीत, अपनी जानकारी पर सीधी पहुंच."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"आपकी सामाजिक जानकारी"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"अपने संपर्कों और सामाजिक कनेक्शन के बारे में जानकारी पर सीधी पहुंच."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"आपका स्थान"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"अपने भौतिक स्थान पर नज़र रखें."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"नेटवर्क संचार"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"विभिन्न नेटवर्क सुविधाओं पर पहुंचें."</string>
- <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <!-- no translation found for permgrouplab_bluetoothNetwork (1585403544162128109) -->
<skip />
- <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <!-- no translation found for permgroupdesc_bluetoothNetwork (5625288577164282391) -->
<skip />
- <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <!-- no translation found for permgrouplab_shortrangeNetwork (130808676377486118) -->
<skip />
- <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) -->
<skip />
- <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"ऑडियो सेटिंग"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"ऑडियो सेटिंग बदलें."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"बैटरी प्रभावित होती है"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"उन सुविधाओं का उपयोग करें जो बैटरी की खपत तेज़ी से कर सकती हैं."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"कैलेंडर"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"कैलेंडर और ईवेंट पर सीधी पहुंच."</string>
+ <!-- no translation found for permgrouplab_dictionary (4148597128843641379) -->
<skip />
- <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <!-- no translation found for permgroupdesc_dictionary (7921166355964764490) -->
<skip />
- <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <!-- no translation found for permgrouplab_writeDictionary (8090237702432576788) -->
<skip />
- <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) -->
<skip />
- <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
- <skip />
- <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
- <skip />
- <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
- <skip />
- <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
- <skip />
- <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
- <skip />
- <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
- <skip />
- <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
- <skip />
- <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
- <skip />
- <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
- <skip />
- <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
- <skip />
- <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
- <skip />
- <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
- <skip />
- <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
- <skip />
- <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
- <skip />
- <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
- <skip />
- <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
- <skip />
- <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
- <skip />
- <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
- <skip />
- <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
- <skip />
- <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
- <skip />
- <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
- <skip />
- <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
- <skip />
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"बुकमार्क और इतिहास"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"बुकमार्क और ब्राउज़र इतिहास पर सीधी पहुंच."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"अलार्म"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"अलार्म घड़ी सेट करें."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"ध्वनिमेल"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"ध्वनिमेल पर सीधी पहुंच."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"माइक्रोफ़ोन"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"ऑडियो रिकॉर्ड करने के लिए माइक्रोफ़ोन पर सीधी पहुंच."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"कैमरा"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"छवि या वीडियो कैप्चर के लिए कैमरे पर सीधी पहुंच."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"आपके एप्लिकेशन की जानकारी"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"अपने उपकरण पर अन्य एप्लिकेशन के व्यवहार को प्रभावित करने की क्षमता."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"वॉलपेपर"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"उपकरण की वॉलपेपर सेटिंग बदलें."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"घड़ी"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"उपकरण का समय या समय क्षेत्र बदलें."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"स्थिति बार"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"उपकरण के स्थिति बार की सेटिंग बदलें."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"समन्वयन सेटिंग"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"समन्वयन सेटिंग पर पहुंचें."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"आपके खाते"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"उपलब्ध खातों में पहुंचें."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"हार्डवेयर नियंत्रण"</string>
@@ -248,10 +227,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"सिस्टम का निम्न-स्तर पहुंच और नियंत्रण."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"डेवलपमेंट टूल"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"सुविधाएं जो केवल एप्लिकेशन डेवलपर के लिए आवश्यक हैं."</string>
- <!-- no translation found for permgrouplab_display (4279909676036402636) -->
- <skip />
- <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
- <skip />
+ <string name="permgrouplab_display" msgid="4279909676036402636">"अन्य एप्लिकेशन UI"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"अन्य एप्लिकेशन के UI को प्रभावित करें."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"संग्रहण"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"USB संग्रहण में पहुंचें."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"SD कार्ड में पहुंचें."</string>
@@ -592,7 +569,8 @@
<string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"एप्लि. को USB संग्रहण की सामग्री पढ़ने देता है, जिसमें फ़ोटो व मीडिया हो सकते हैं."</string>
<string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"एप्लिकेशन को SD कार्ड की सामग्री पढ़ने देता है, जिसमें फ़ोटो और मीडिया हो सकते हैं."</string>
<string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"अपने USB संग्रहण की सामग्री संशोधित करें या हटाएं"</string>
- <string name="permlab_sdcardWrite" product="default" msgid="9084476432661578751">"अपने SD कार्ड की सामग्री संशोधित करें या हटाएं"</string>
+ <!-- no translation found for permlab_sdcardWrite (8805693630050458763) -->
+ <skip />
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"एप्लि. को USB संग्रहण में लिखने देता है."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"एप्लिकेशन को SD कार्ड पर लिखने देता है."</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"आंतरिक मीडिया संग्रहण सामग्रियों को संशोधित करें/हटाएं"</string>
@@ -770,8 +748,7 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"फ़ोन में कोई सिम कार्ड नहीं है."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"कोई सिमकार्ड डालें."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"सिम कार्ड गुम है या पढ़ने योग्य नहीं है. कोई सिम कार्ड डालें."</string>
- <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
- <skip />
+ <string name="lockscreen_permanent_disabled_sim_message_short" msgid="5096149665138916184">"अनुपयोगी SIM कार्ड."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"आपका सिम कार्ड स्थायी रूप से अक्षम कर दिया गया है."\n" दूसरे SIM कार्ड के लिए अपने वायरलेस सेवा प्रदाता से संपर्क करें."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"पिछला ट्रैक बटन"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"अगला ट्रैक बटन"</string>
@@ -1112,11 +1089,10 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"दिनांक सेट करें"</string>
<string name="date_time_set" msgid="5777075614321087758">"सेट करें"</string>
<string name="date_time_done" msgid="2507683751759308828">"पूर्ण"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"डिफ़ॉल्ट"</string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"नया: "</font></string>
+ <!-- no translation found for perms_description_app (5139836143293299417) -->
+ <skip />
<string name="no_permissions" msgid="7283357728219338112">"किसी अनुमति की आवश्यकता नहीं है"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"छुपाएं"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"सभी दिखाएं"</b></string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"USB विशाल संग्रहण"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB कनेक्ट किया गया"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"आप USB द्वारा अपने कंप्यूटर से कनेक्ट हो चुके हैं. यदि आप अपने कंप्यूटर और Android के USB संग्रहण के बीच फ़ाइलों की प्रतिलिपि बनाना चाहते हैं तो नीचे दिया गया बटन स्पर्श करें."</string>
@@ -1345,4 +1321,8 @@
<string name="sending" msgid="3245653681008218030">"भेजा जा रहा है…"</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"ब्राउज़र लॉन्च करें?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"कॉल स्वीकार करें?"</string>
+ <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <skip />
+ <!-- no translation found for activity_resolver_use_once (405646673463328329) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml
index fafb31c..b1c95aa 100644
--- a/core/res/res/values-hr/strings.xml
+++ b/core/res/res/values-hr/strings.xml
@@ -168,76 +168,55 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Vaše poruke"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Čitajte i pišite SMS-ove, poruke e-pošte i ostale poruke."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Vaši osobni podaci"</string>
- <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
- <skip />
- <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
- <skip />
- <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
- <skip />
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Izravan pristup informacijama o vama koje su pohranjene na vašoj posjetnici."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Informacije o vašoj društvenoj aktivnosti"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Izravan pristup informacijama o kontaktima i društvenim vezama."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Vaša lokacija"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Pratite svoju fizičku lokaciju."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Mrežna komunikacija"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Pristupajte raznim značajkama mreže."</string>
- <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <!-- no translation found for permgrouplab_bluetoothNetwork (1585403544162128109) -->
<skip />
- <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <!-- no translation found for permgroupdesc_bluetoothNetwork (5625288577164282391) -->
<skip />
- <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <!-- no translation found for permgrouplab_shortrangeNetwork (130808676377486118) -->
<skip />
- <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) -->
<skip />
- <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Postavke zvuka"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Promjena postavki zvuka."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Utječe na bateriju"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Upotreba značajki koje brzo prazne bateriju."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Kalendar"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Izravan pristup kalendaru i događajima."</string>
+ <!-- no translation found for permgrouplab_dictionary (4148597128843641379) -->
<skip />
- <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <!-- no translation found for permgroupdesc_dictionary (7921166355964764490) -->
<skip />
- <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <!-- no translation found for permgrouplab_writeDictionary (8090237702432576788) -->
<skip />
- <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) -->
<skip />
- <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
- <skip />
- <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
- <skip />
- <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
- <skip />
- <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
- <skip />
- <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
- <skip />
- <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
- <skip />
- <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
- <skip />
- <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
- <skip />
- <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
- <skip />
- <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
- <skip />
- <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
- <skip />
- <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
- <skip />
- <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
- <skip />
- <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
- <skip />
- <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
- <skip />
- <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
- <skip />
- <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
- <skip />
- <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
- <skip />
- <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
- <skip />
- <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
- <skip />
- <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
- <skip />
- <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
- <skip />
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Oznake i povijest"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Izravan pristup oznakama i povijest preglednika."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Alarm"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Postavljanje alarma na budilici."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Govorna pošta"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Izravan pristup govornoj pošti."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Mikrofon"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Izravan pristup mikrofonu za snimanje zvuka."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Fotoaparat"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Izravan pristup fotoaparatu za slikanje ili snimanje videozapisa."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Informacije o vašoj aplikaciji"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Sposobnost da utječu na postupanje drugih aplikacija na vašem uređaju."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Pozadinska slika"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Promjena postavki pozadinske slike na uređaju."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Sat"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Promjena vremena ili vremenske zone uređaja."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Traka statusa"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Promijenite postavke statusne trake uređaja."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Postavke sinkronizacije"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Pristup postavkama sinkronizacije."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Vaši računi"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Pristup dostupnim računima."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Hardverske kontrole"</string>
@@ -248,10 +227,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Niskorazinski pristup i nadzor nad sustavom."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Razvojni alati"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Značajke potrebne samo za razvojne programere aplikacija."</string>
- <!-- no translation found for permgrouplab_display (4279909676036402636) -->
- <skip />
- <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
- <skip />
+ <string name="permgrouplab_display" msgid="4279909676036402636">"Korisničko sučelje druge aplikacije"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Utjecaj na korisničko sučelje drugih aplikacija."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Prostor za pohranu"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Pristupi memoriji USB."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Pristup SD kartici."</string>
@@ -592,7 +569,8 @@
<string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Omogućuje aplikaciji čitanje sadržaja USB pohrane, koji mogu uključivati fotografije i medije."</string>
<string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Omogućuje aplikaciji čitanje sadržaja SD kartice, koji mogu uključivati fotografije i medije."</string>
<string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"izmjena/brisanje sadrž. USB-a"</string>
- <string name="permlab_sdcardWrite" product="default" msgid="9084476432661578751">"izmjena ili brisanje sadržaja SD kartice"</string>
+ <!-- no translation found for permlab_sdcardWrite (8805693630050458763) -->
+ <skip />
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Dopušta pisanje u USB pohranu."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Aplikaciji omogućuje pisanje na SD karticu."</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"izmijeni/izbriši sadržaj pohranjen na internim medijima"</string>
@@ -770,8 +748,7 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"U telefonu nema SIM kartice."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Umetnite SIM karticu."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"SIM kartica nedostaje ili nije čitljiva. Umetnite SIM karticu."</string>
- <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
- <skip />
+ <string name="lockscreen_permanent_disabled_sim_message_short" msgid="5096149665138916184">"Neupotrebljiva SIM kartica."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"Vaša SIM kartica trajno je onemogućena."\n" Obratite se svom pružatelju bežičnih usluga da biste dobili drugu SIM karticu."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Gumb Prethodni zapis"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Gumb Sljedeći zapis"</string>
@@ -1112,11 +1089,10 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Postavi datum"</string>
<string name="date_time_set" msgid="5777075614321087758">"Postavi"</string>
<string name="date_time_done" msgid="2507683751759308828">"Gotovo"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"Zadano"</string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"NOVO: "</font></string>
+ <!-- no translation found for perms_description_app (5139836143293299417) -->
+ <skip />
<string name="no_permissions" msgid="7283357728219338112">"Nije potrebno dopuštenje"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Sakrij"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Pokaži sve"</b></string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"USB masovna pohrana"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB povezan"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Povezali ste se s računalom putem USB-a. Dodirnite gumb u nastavku ako želite kopirati datoteke između računala i USB pohrane uređaja Android."</string>
@@ -1345,4 +1321,8 @@
<string name="sending" msgid="3245653681008218030">"Slanje..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Pokrenuti preglednik?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Prihvatiti poziv?"</string>
+ <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <skip />
+ <!-- no translation found for activity_resolver_use_once (405646673463328329) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml
index 4a36a8a..89aedcc 100644
--- a/core/res/res/values-hu/strings.xml
+++ b/core/res/res/values-hu/strings.xml
@@ -168,76 +168,55 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Saját üzenetek"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"SMS-ek, e-mailek és egyéb üzenetek olvasása és írása."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Az Ön személyes adatai"</string>
- <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
- <skip />
- <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
- <skip />
- <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
- <skip />
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Közvetlen hozzáférés a névjegykártyán tárolt információkhoz"</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Az Ön közösségi adatai"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Közvetlen hozzáférés a névjegyekre és közösségi kapcsolatokra vonatkozó információkhoz"</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Tartózkodási hely"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Tartózkodási hely figyelése."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Hálózati kommunikáció"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Hozzáférés különböző hálózati funkciókhoz."</string>
- <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <!-- no translation found for permgrouplab_bluetoothNetwork (1585403544162128109) -->
<skip />
- <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <!-- no translation found for permgroupdesc_bluetoothNetwork (5625288577164282391) -->
<skip />
- <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <!-- no translation found for permgrouplab_shortrangeNetwork (130808676377486118) -->
<skip />
- <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) -->
<skip />
- <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Hangbeállítások"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Hangbeállítások módosítása"</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Hozzáférés az akkumulátor teljesítményéhez"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Olyan funkciók használata, amelyek gyorsan lemerítik az akkumulátort."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Naptár"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Közvetlen hozzáférés a naptárhoz és az eseményekhez"</string>
+ <!-- no translation found for permgrouplab_dictionary (4148597128843641379) -->
<skip />
- <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <!-- no translation found for permgroupdesc_dictionary (7921166355964764490) -->
<skip />
- <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <!-- no translation found for permgrouplab_writeDictionary (8090237702432576788) -->
<skip />
- <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) -->
<skip />
- <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
- <skip />
- <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
- <skip />
- <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
- <skip />
- <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
- <skip />
- <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
- <skip />
- <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
- <skip />
- <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
- <skip />
- <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
- <skip />
- <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
- <skip />
- <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
- <skip />
- <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
- <skip />
- <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
- <skip />
- <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
- <skip />
- <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
- <skip />
- <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
- <skip />
- <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
- <skip />
- <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
- <skip />
- <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
- <skip />
- <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
- <skip />
- <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
- <skip />
- <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
- <skip />
- <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
- <skip />
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Könyvjelzők és előzmények"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Közvetlen hozzáférés a könyvjelzőkhöz és a böngészési előzményekhez"</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Ébresztő"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Ébresztőóra beállítása"</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Hangposta"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Közvetlen hozzáférés a hangpostához"</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Mikrofon"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Közvetlen hozzáférés a mikrofonhoz hangrögzítés céljából"</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Fényképezőgép"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Közvetlen hozzáférés a fényképezőgéphez kép vagy videó rögzítése céljából"</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Az Ön alkalmazásainak információi"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Képes az eszközön a többi alkalmazás viselkedését befolyásolni."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Háttérkép"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Az eszköz háttérkép-beállításainak módosítása"</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Óra"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Az eszközön jelzett idő vagy időzóna módosítása"</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Állapotsor"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Az eszköz állapotsor-beállításainak módosítása"</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Szinkronizálási beállítások"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Hozzáférés a szinkronizálási beállításokhoz"</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Az Ön fiókjai"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Hozzáférés az elérhető fiókokhoz."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Hardver vezérlése"</string>
@@ -248,10 +227,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Alacsony szintű hozzáférés és a rendszer vezérlése."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Fejlesztői eszközök"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Csak az alkalmazásfejlesztők számára fontos funkciók."</string>
- <!-- no translation found for permgrouplab_display (4279909676036402636) -->
- <skip />
- <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
- <skip />
+ <string name="permgrouplab_display" msgid="4279909676036402636">"Egyéb alkalmazások kezelőfelülete"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Hozzáférés más alkalmazások kezelőfelületéhez"</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Tárhely"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Az USB-tár elérése."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Az SD-kártya elérése."</string>
@@ -592,7 +569,8 @@
<string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Lehetővé teszi az alkalmazás számára az USB-háttértár tartalmának olvasását, beleértve a fényképeket és a médiafájlokat."</string>
<string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Lehetővé teszi az alkalmazás számára az SD-kártya tartalmának olvasását, beleértve a fényképeket és a médiafájlokat."</string>
<string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"USB-tár törlése/módosítása"</string>
- <string name="permlab_sdcardWrite" product="default" msgid="9084476432661578751">"SD-kártya tartalmának módosítása vagy törlése"</string>
+ <!-- no translation found for permlab_sdcardWrite (8805693630050458763) -->
+ <skip />
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Az alkalmazás USB-tárra írhat."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Lehetővé teszi az alkalmazás számára, hogy írjon az SD-kártyára."</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"belső tár tartalmának módosítása/törlése"</string>
@@ -770,8 +748,7 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"Nincs SIM-kártya a telefonban."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Helyezzen be egy SIM kártyát."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"A SIM kártya hiányzik vagy nem olvasható. Helyezzen be egy SIM kártyát."</string>
- <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
- <skip />
+ <string name="lockscreen_permanent_disabled_sim_message_short" msgid="5096149665138916184">"A SIM kártya nem használható."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"SIM kártyája véglegesen letiltva."\n" Forduljon a vezeték nélküli szolgáltatójához másik SIM kártya beszerzése érdekében."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Előző szám gomb"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Következő szám gomb"</string>
@@ -1112,11 +1089,10 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Dátum beállítása"</string>
<string name="date_time_set" msgid="5777075614321087758">"Beállítás"</string>
<string name="date_time_done" msgid="2507683751759308828">"Kész"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"Alapértelmezett"</string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"ÚJ: "</font></string>
+ <!-- no translation found for perms_description_app (5139836143293299417) -->
+ <skip />
<string name="no_permissions" msgid="7283357728219338112">"Nincs szükség engedélyre"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Elrejtés"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Az összes megjelenítése"</b></string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"USB-háttértár"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB-eszköz csatlakoztatva"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"USB-kapcsolaton keresztül csatlakozott a számítógéphez. Érintse meg a lenti gombot, ha fájlokat szeretne másolni a számítógép és az Android USB-tára között."</string>
@@ -1345,4 +1321,8 @@
<string name="sending" msgid="3245653681008218030">"Küldés…"</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Böngésző indítása?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Fogadja a hívást?"</string>
+ <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <skip />
+ <!-- no translation found for activity_resolver_use_once (405646673463328329) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml
index 658bd2f..7dc51e4 100644
--- a/core/res/res/values-in/strings.xml
+++ b/core/res/res/values-in/strings.xml
@@ -178,9 +178,13 @@
<string name="permgroupdesc_location" msgid="5704679763124170100">"Memonitor lokasi fisik Anda."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Komunikasi jaringan"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Mengakses berbagai fitur jaringan."</string>
- <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <!-- no translation found for permgrouplab_bluetoothNetwork (1585403544162128109) -->
<skip />
- <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <!-- no translation found for permgroupdesc_bluetoothNetwork (5625288577164282391) -->
+ <skip />
+ <!-- no translation found for permgrouplab_shortrangeNetwork (130808676377486118) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) -->
<skip />
<!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
<skip />
@@ -194,9 +198,13 @@
<skip />
<!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
<skip />
- <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
+ <!-- no translation found for permgrouplab_dictionary (4148597128843641379) -->
<skip />
- <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
+ <!-- no translation found for permgroupdesc_dictionary (7921166355964764490) -->
+ <skip />
+ <!-- no translation found for permgrouplab_writeDictionary (8090237702432576788) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) -->
<skip />
<!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
<skip />
@@ -592,7 +600,8 @@
<string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Izinkan aplikasi membaca konten penyimpanan USB, yang mungkin mencakup foto dan media."</string>
<string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Izinkan aplikasi membaca konten kartu SD, yang mungkin mencakup foto dan media."</string>
<string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"ubah/hapus konten pympanan USB"</string>
- <string name="permlab_sdcardWrite" product="default" msgid="9084476432661578751">"ubah atau hapus konten kartu SD Anda"</string>
+ <!-- no translation found for permlab_sdcardWrite (8805693630050458763) -->
+ <skip />
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Mengizinkan apl menulis ke penyimpanan USB."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Memungkinkan apl menulis ke kartu SD."</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"ubah/hapus konten penyimpanan media internal"</string>
@@ -1112,11 +1121,10 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Setel tanggal"</string>
<string name="date_time_set" msgid="5777075614321087758">"Setel"</string>
<string name="date_time_done" msgid="2507683751759308828">"Selesai"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"Default"</string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"BARU: "</font></string>
+ <!-- no translation found for perms_description_app (5139836143293299417) -->
+ <skip />
<string name="no_permissions" msgid="7283357728219338112">"Tidak perlu izin"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Sembunyikan"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Tampilkan semua"</b></string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"Penyimpanan massal USB"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB terhubung"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Anda telah tersambung ke komputer melalui USB. Sentuh tombol di bawah jika Anda ingin menyalin file antara komputer dan penyimpanan USB Android Anda."</string>
@@ -1345,4 +1353,8 @@
<string name="sending" msgid="3245653681008218030">"Mengirim..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Luncurkan Browser?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Terima panggilan?"</string>
+ <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <skip />
+ <!-- no translation found for activity_resolver_use_once (405646673463328329) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml
index 8a4a54c..ce93389 100644
--- a/core/res/res/values-it/strings.xml
+++ b/core/res/res/values-it/strings.xml
@@ -168,76 +168,55 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"I tuoi messaggi"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Consentono di leggere e scrivere SMS, email e altri messaggi."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Informazioni personali"</string>
- <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
- <skip />
- <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
- <skip />
- <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
- <skip />
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Accesso diretto alle informazioni su di te memorizzate nella tua scheda di contatto."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Tue informazioni sociali"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Accesso diretto alle informazioni sui tuoi contatti e sulle tue connessioni sociali."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"La tua posizione"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Monitoraggio della posizione fisica dell\'utente."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Comunicazione di rete"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Accesso a varie funzioni di rete."</string>
- <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <!-- no translation found for permgrouplab_bluetoothNetwork (1585403544162128109) -->
<skip />
- <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <!-- no translation found for permgroupdesc_bluetoothNetwork (5625288577164282391) -->
<skip />
- <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <!-- no translation found for permgrouplab_shortrangeNetwork (130808676377486118) -->
<skip />
- <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) -->
<skip />
- <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Impostazioni audio"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Modifica delle impostazioni audio."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Influenza sulla batteria"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Uso di funzioni che possono consumare rapidamente la batteria."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Calendario"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Accesso diretto al calendario e agli eventi."</string>
+ <!-- no translation found for permgrouplab_dictionary (4148597128843641379) -->
<skip />
- <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <!-- no translation found for permgroupdesc_dictionary (7921166355964764490) -->
<skip />
- <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <!-- no translation found for permgrouplab_writeDictionary (8090237702432576788) -->
<skip />
- <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) -->
<skip />
- <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
- <skip />
- <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
- <skip />
- <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
- <skip />
- <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
- <skip />
- <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
- <skip />
- <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
- <skip />
- <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
- <skip />
- <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
- <skip />
- <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
- <skip />
- <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
- <skip />
- <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
- <skip />
- <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
- <skip />
- <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
- <skip />
- <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
- <skip />
- <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
- <skip />
- <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
- <skip />
- <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
- <skip />
- <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
- <skip />
- <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
- <skip />
- <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
- <skip />
- <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
- <skip />
- <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
- <skip />
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Segnalibri e cronologia"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Accesso diretto ai segnalibri e alla cronologia del browser."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Sveglia"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Impostazione della sveglia."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Segreteria"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Accesso diretto alla segreteria."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Microfono"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Accesso diretto al microfono per registrare audio."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Fotocamera"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Accesso diretto alla fotocamera per acquisizione di immagini o video."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Informazioni sulle tue applicazioni"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Possibilità di influenzare il comportamento di altre applicazioni sul dispositivo."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Sfondo"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Modifica delle impostazioni dello sfondo del dispositivo."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Orologio"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Modifica della data e dell\'ora o del fuso orario del dispositivo."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Barra di stato"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Modifica delle impostazioni della barra di stato del dispositivo."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Impostazioni di sincronizzazione"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Accesso alle impostazioni di sincronizzazione."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"I tuoi account"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Accedere agli account disponibili."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Controlli hardware"</string>
@@ -248,10 +227,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Accesso al sistema e controllo di livello inferiore."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Strumenti di sviluppo"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Funzionalità necessarie soltanto agli sviluppatori di applicazioni."</string>
- <!-- no translation found for permgrouplab_display (4279909676036402636) -->
- <skip />
- <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
- <skip />
+ <string name="permgrouplab_display" msgid="4279909676036402636">"Interfaccia utente di altre applicazioni"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Influenza sull\'interfaccia utente di altre applicazioni."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Archiviazione"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Accesso all\'archivio USB."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Accesso alla scheda SD."</string>
@@ -592,7 +569,8 @@
<string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Consente all\'applicazione di leggere i contenuti dell\'archivio USB, che possono includere foto e contenuti multimediali."</string>
<string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Consente all\'applicazione di leggere i contenuti della scheda SD, che possono includere foto e contenuti multimediali."</string>
<string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"mod./elimin. cont. archivio USB"</string>
- <string name="permlab_sdcardWrite" product="default" msgid="9084476432661578751">"modifica o eliminazione contenuti scheda SD"</string>
+ <!-- no translation found for permlab_sdcardWrite (8805693630050458763) -->
+ <skip />
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Consente all\'applicazione di scrivere nell\'archivio USB."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Consente all\'applicazione di scrivere sulla scheda SD."</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"modifica/eliminaz. contenuti archivio media int."</string>
@@ -770,8 +748,7 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"Nessuna SIM presente nel telefono."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Inserisci una scheda SIM."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"Scheda SIM mancante o non leggibile. Inserisci una scheda SIM."</string>
- <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
- <skip />
+ <string name="lockscreen_permanent_disabled_sim_message_short" msgid="5096149665138916184">"Scheda SIM inutilizzabile."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"La scheda SIM è stata disattivata definitivamente."\n" Contatta il fornitore del tuo servizio wireless per ricevere un\'altra scheda SIM."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Pulsante traccia precedente"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Pulsante traccia successiva"</string>
@@ -1112,11 +1089,10 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Imposta data"</string>
<string name="date_time_set" msgid="5777075614321087758">"Imposta"</string>
<string name="date_time_done" msgid="2507683751759308828">"Fine"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"Predefinito"</string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"NUOVA: "</font></string>
+ <!-- no translation found for perms_description_app (5139836143293299417) -->
+ <skip />
<string name="no_permissions" msgid="7283357728219338112">"Nessuna autorizzazione richiesta"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Nascondi"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Mostra tutto"</b></string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"Archivio di massa USB"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB collegata"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Ti sei collegato al computer tramite USB. Tocca il pulsante in basso se desideri copiare file tra il computer e l\'archivio USB di Android."</string>
@@ -1345,4 +1321,8 @@
<string name="sending" msgid="3245653681008218030">"Invio..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Avviare l\'applicazione Browser?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Accettare la chiamata?"</string>
+ <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <skip />
+ <!-- no translation found for activity_resolver_use_once (405646673463328329) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml
index 08a95d4..020686e 100644
--- a/core/res/res/values-iw/strings.xml
+++ b/core/res/res/values-iw/strings.xml
@@ -168,76 +168,55 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"ההודעות שלך"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"קריאה וכתיבה בהודעות ה-SMS, הדוא\"ל והודעות אחרות שלך."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"המידע האישי שלך"</string>
- <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
- <skip />
- <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
- <skip />
- <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
- <skip />
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"גישה ישירה למידע עליך, המאוחסן בכרטיס איש הקשר שלך."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"מידע על הקשרים החברתיים שלך"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"גישה ישירה למידע על אנשי קשר וקשרים חברתיים שלך."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"המיקום שלך"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"עקוב אחר המיקום הפיזי שלך."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"תקשורת רשת"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"הרשאת גישה לתכונות רשת שונות."</string>
- <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <!-- no translation found for permgrouplab_bluetoothNetwork (1585403544162128109) -->
<skip />
- <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <!-- no translation found for permgroupdesc_bluetoothNetwork (5625288577164282391) -->
<skip />
- <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <!-- no translation found for permgrouplab_shortrangeNetwork (130808676377486118) -->
<skip />
- <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) -->
<skip />
- <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"הגדרות אודיו"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"שינוי הגדרות האודיו."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"השפעה על הסוללה"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"שימוש בתכונות שיכולות לרוקן את הסוללה במהירות."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"לוח שנה"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"גישה ישירה ללוח השנה ולאירועים."</string>
+ <!-- no translation found for permgrouplab_dictionary (4148597128843641379) -->
<skip />
- <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <!-- no translation found for permgroupdesc_dictionary (7921166355964764490) -->
<skip />
- <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <!-- no translation found for permgrouplab_writeDictionary (8090237702432576788) -->
<skip />
- <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) -->
<skip />
- <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
- <skip />
- <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
- <skip />
- <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
- <skip />
- <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
- <skip />
- <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
- <skip />
- <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
- <skip />
- <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
- <skip />
- <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
- <skip />
- <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
- <skip />
- <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
- <skip />
- <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
- <skip />
- <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
- <skip />
- <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
- <skip />
- <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
- <skip />
- <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
- <skip />
- <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
- <skip />
- <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
- <skip />
- <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
- <skip />
- <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
- <skip />
- <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
- <skip />
- <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
- <skip />
- <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
- <skip />
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"סימניות והיסטוריה"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"גישה ישירה אל סימניות והיסטוריית דפדפן."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"שעון מעורר"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"הגדרת השעון המעורר."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"דואר קולי"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"גישה ישירה לדואר הקולי."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"מיקרופון"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"גישה ישירה אל המיקרופון להקלטת אודיו."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"מצלמה"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"גישה ישירה למצלמה לצילום תמונות או וידאו."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"מידע על היישומים שלך"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"יכולת להשפיע על התנהגותם של יישומים אחרים במכשיר."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"טפט"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"שינוי הגדרות הטפט של המכשיר."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"שעון"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"שינוי השעה או אזור הזמן של המכשיר."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"שורת המצב"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"שינוי הגדרות שורת המצב של המכשיר."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"הגדרות סנכרון"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"גישה להגדרות הסנכרון."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"החשבונות שלך"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"גישה לכל החשבונות הזמינים."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"בקרת חומרה"</string>
@@ -248,10 +227,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"גישה ושליטה במערכת ברמה נמוכה."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"כלי פיתוח"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"תכונות הדרושות למפתחי יישומים בלבד."</string>
- <!-- no translation found for permgrouplab_display (4279909676036402636) -->
- <skip />
- <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
- <skip />
+ <string name="permgrouplab_display" msgid="4279909676036402636">"ממשק המשתמש של יישום אחר"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"השפעה על ממשק המשתמש של יישומים אחרים."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"אחסון"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"גישה לאמצעי אחסון מסוג USB."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"גש לכרטיס SD."</string>
@@ -592,7 +569,8 @@
<string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"הרשאה זו מאפשרת ליישום לקרוא את התוכן של אחסון USB, העשוי לכלול תמונות ומדיה."</string>
<string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"הרשאה זו מאפשרת ליישום לקרוא תוכן של כרטיס SD, העשוי לכלול תמונות ומדיה."</string>
<string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"שינוי או מחיקה של תוכן אחסון ה-USB שלך"</string>
- <string name="permlab_sdcardWrite" product="default" msgid="9084476432661578751">"שינוי או מחיקה של תוכן כרטיס ה-SD שלך"</string>
+ <!-- no translation found for permlab_sdcardWrite (8805693630050458763) -->
+ <skip />
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"מאפשר ליישום לכתוב להתקן האחסון מסוג USB."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"מאפשר ליישום לכתוב לכרטיס ה-SD."</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"שנה/מחק תוכן של אחסון מדיה פנימי"</string>
@@ -770,8 +748,7 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"אין כרטיס SIM בטלפון."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"הכנס כרטיס SIM."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"כרטיס ה-SIM חסר או שלא ניתן לקרוא אותו. הכנס כרטיס SIM."</string>
- <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
- <skip />
+ <string name="lockscreen_permanent_disabled_sim_message_short" msgid="5096149665138916184">"לא ניתן להשתמש בכרטיס SIM זה."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"כרטיס ה-SIM שלך הושבת לצמיתות."\n"פנה לספק השירות האלחוטי שלך לקבלת כרטיס SIM אחר."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"לחצן הרצועה הקודמת"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"לחצן הרצועה הבאה"</string>
@@ -1112,11 +1089,10 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"הגדר תאריך"</string>
<string name="date_time_set" msgid="5777075614321087758">"הגדר"</string>
<string name="date_time_done" msgid="2507683751759308828">"בוצע"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"ברירת מחדל"</string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"חדש: "</font></string>
+ <!-- no translation found for perms_description_app (5139836143293299417) -->
+ <skip />
<string name="no_permissions" msgid="7283357728219338112">"לא דרושים אישורים"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"הסתר"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"הצג הכל"</b></string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"אמצעי מסוג USB לאחסון בנפח גדול"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB מחובר"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"התחברת למחשב באמצעות USB. גע בלחצן שבהמשך אם ברצונך להעתיק קבצים בין המחשב לאחסון ה-USB של מכשיר ה-Android שלך."</string>
@@ -1345,4 +1321,8 @@
<string name="sending" msgid="3245653681008218030">"שולח…"</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"להפעיל את הדפדפן?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"האם לקבל את השיחה?"</string>
+ <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <skip />
+ <!-- no translation found for activity_resolver_use_once (405646673463328329) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml
index 2c87d05..b45d6cb 100644
--- a/core/res/res/values-ja/strings.xml
+++ b/core/res/res/values-ja/strings.xml
@@ -168,76 +168,55 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"送受信したメッセージ"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"SMS、メールなどのメッセージを読み書きします。"</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"個人情報"</string>
- <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
- <skip />
- <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
- <skip />
- <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
- <skip />
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"連絡先カードに保存されている個人情報に直接アクセスします。"</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"ソーシャル情報"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"連絡先とソーシャルコネクションに関する情報に直接アクセスします。"</string>
<string name="permgrouplab_location" msgid="635149742436692049">"現在地"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"現在地を追跡します。"</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"ネットワーク通信"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"さまざまなネットワーク機能にアクセスします。"</string>
- <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <!-- no translation found for permgrouplab_bluetoothNetwork (1585403544162128109) -->
<skip />
- <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <!-- no translation found for permgroupdesc_bluetoothNetwork (5625288577164282391) -->
<skip />
- <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <!-- no translation found for permgrouplab_shortrangeNetwork (130808676377486118) -->
<skip />
- <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) -->
<skip />
- <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"音声設定"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"音声設定を変更します。"</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"電池への影響"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"短時間で電池を消費する機能を使用します。"</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"カレンダー"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"カレンダーと予定に直接アクセスします。"</string>
+ <!-- no translation found for permgrouplab_dictionary (4148597128843641379) -->
<skip />
- <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <!-- no translation found for permgroupdesc_dictionary (7921166355964764490) -->
<skip />
- <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <!-- no translation found for permgrouplab_writeDictionary (8090237702432576788) -->
<skip />
- <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) -->
<skip />
- <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
- <skip />
- <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
- <skip />
- <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
- <skip />
- <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
- <skip />
- <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
- <skip />
- <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
- <skip />
- <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
- <skip />
- <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
- <skip />
- <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
- <skip />
- <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
- <skip />
- <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
- <skip />
- <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
- <skip />
- <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
- <skip />
- <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
- <skip />
- <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
- <skip />
- <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
- <skip />
- <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
- <skip />
- <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
- <skip />
- <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
- <skip />
- <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
- <skip />
- <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
- <skip />
- <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
- <skip />
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"ブックマークと履歴"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"ブックマークとブラウザの履歴に直接アクセスします。"</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"アラーム"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"アラームを設定します。"</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"ボイスメール"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"ボイスメールに直接アクセスします。"</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"マイク"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"マイクに直接アクセスして音声を記録します。"</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"カメラ"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"カメラに直接アクセスして画像または動画を撮影します。"</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"アプリ情報"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"端末上の他のアプリの動作に影響を及ぼします。"</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"壁紙"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"端末の壁紙設定を変更します。"</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"時刻"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"端末の時刻またはタイムゾーンを変更します。"</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"ステータスバー"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"端末のステータスバー設定を変更します。"</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"同期設定"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"同期設定にアクセスします。"</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"アカウント"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"利用可能なアカウントにアクセスします。"</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"ハードウェアの制御"</string>
@@ -248,10 +227,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"システムの低レベルのアクセスと制御"</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"開発ツール"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"アプリのデベロッパーにのみ必要な機能です。"</string>
- <!-- no translation found for permgrouplab_display (4279909676036402636) -->
- <skip />
- <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
- <skip />
+ <string name="permgrouplab_display" msgid="4279909676036402636">"他のアプリのUI"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"他のアプリのUIに影響を及ぼします。"</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"ストレージ"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"USBストレージへのアクセス"</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"SDカードにアクセスします。"</string>
@@ -592,7 +569,8 @@
<string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"USBストレージ(写真やメディアなど)の読み取りをアプリに許可します。"</string>
<string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"SDカードのコンテンツ(写真やメディアなど)の読み取りをアプリに許可します。"</string>
<string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"USBストレージのコンテンツの変更または削除"</string>
- <string name="permlab_sdcardWrite" product="default" msgid="9084476432661578751">"SDカードのコンテンツの変更または削除"</string>
+ <!-- no translation found for permlab_sdcardWrite (8805693630050458763) -->
+ <skip />
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"USBストレージへの書き込みをアプリに許可します。"</string>
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"SDカードへの書き込みをアプリに許可します。"</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"内部メディアストレージの内容の変更/削除"</string>
@@ -770,8 +748,7 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"SIMカードが挿入されていません"</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"SIMカードを挿入してください。"</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"SIMカードが見つからないか読み取れません。SIMカードを挿入してください。"</string>
- <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
- <skip />
+ <string name="lockscreen_permanent_disabled_sim_message_short" msgid="5096149665138916184">"SIMカードは使用できません。"</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"お使いのSIMカードは永久に無効となっています。"\n"ワイヤレスサービスプロバイダに問い合わせて新しいSIMカードを入手してください。"</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"前のトラックボタン"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"次のトラックボタン"</string>
@@ -1112,11 +1089,10 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"日付設定"</string>
<string name="date_time_set" msgid="5777075614321087758">"設定"</string>
<string name="date_time_done" msgid="2507683751759308828">"完了"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"端末既定"</string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"NEW: "</font></string>
+ <!-- no translation found for perms_description_app (5139836143293299417) -->
+ <skip />
<string name="no_permissions" msgid="7283357728219338112">"権限の許可は必要ありません"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"隠す"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"すべて表示"</b></string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"USBマスストレージ"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB接続"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"USBでパソコンに接続しています。パソコンとAndroidのUSBストレージ間でファイルをコピーするには下のボタンをタップします。"</string>
@@ -1345,4 +1321,8 @@
<string name="sending" msgid="3245653681008218030">"送信中..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"ブラウザを起動しますか?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"通話を受けますか?"</string>
+ <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <skip />
+ <!-- no translation found for activity_resolver_use_once (405646673463328329) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml
index 12a44fe..adafd25 100644
--- a/core/res/res/values-ko/strings.xml
+++ b/core/res/res/values-ko/strings.xml
@@ -168,76 +168,55 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"메시지"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"SMS, 이메일 및 기타 메시지를 읽고 씁니다."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"개인정보"</string>
- <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
- <skip />
- <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
- <skip />
- <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
- <skip />
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"연락처 카드에 저장된 내 개인 정보에 직접 액세스합니다."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"소셜 정보"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"내 연락처 및 소셜 친구의 개인 정보에 직접 액세스합니다."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"위치"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"실제 위치 모니터링"</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"네트워크 통신"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"다양한 네트워크 기능에 액세스할 수 있도록 합니다."</string>
- <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <!-- no translation found for permgrouplab_bluetoothNetwork (1585403544162128109) -->
<skip />
- <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <!-- no translation found for permgroupdesc_bluetoothNetwork (5625288577164282391) -->
<skip />
- <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <!-- no translation found for permgrouplab_shortrangeNetwork (130808676377486118) -->
<skip />
- <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) -->
<skip />
- <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"오디오 설정"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"오디오 설정을 변경합니다."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"배터리에 영향"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"배터리를 빨리 소모시킬 수 있는 기능을 사용합니다."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"캘린더"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"캘린더 및 일정에 직접 액세스합니다."</string>
+ <!-- no translation found for permgrouplab_dictionary (4148597128843641379) -->
<skip />
- <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <!-- no translation found for permgroupdesc_dictionary (7921166355964764490) -->
<skip />
- <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <!-- no translation found for permgrouplab_writeDictionary (8090237702432576788) -->
<skip />
- <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) -->
<skip />
- <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
- <skip />
- <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
- <skip />
- <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
- <skip />
- <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
- <skip />
- <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
- <skip />
- <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
- <skip />
- <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
- <skip />
- <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
- <skip />
- <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
- <skip />
- <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
- <skip />
- <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
- <skip />
- <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
- <skip />
- <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
- <skip />
- <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
- <skip />
- <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
- <skip />
- <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
- <skip />
- <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
- <skip />
- <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
- <skip />
- <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
- <skip />
- <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
- <skip />
- <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
- <skip />
- <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
- <skip />
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"북마크 및 기록"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"북마크 및 브라우저 기록에 직접 액세스합니다."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"알람"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"알람 시계를 설정합니다."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"음성사서함"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"음성사서함에 직접 액세스합니다."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"마이크"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"오디오를 녹음하기 위해 마이크에 직접 액세스합니다."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"카메라"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"이미지 및 동영상을 캡처하기 위해 카메라에 직접 액세스합니다."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"애플리케이션 정보"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"기기의 다른 애플리케이션의 작동에 영향을 줄 수 있습니다."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"배경화면"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"기기 배경화면 설정을 변경합니다."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"시계"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"기기 시간 및 시간대를 변경합니다."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"상태 표시줄"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"기기 상태 표시줄 설정을 변경합니다."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"동기화 설정"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"동기화 설정에 액세스합니다."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"계정"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"사용 가능한 계정에 액세스합니다."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"하드웨어 제어"</string>
@@ -248,10 +227,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"시스템을 하위 수준에서 액세스하고 제어합니다."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"개발 도구"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"앱 개발자에게만 필요한 기능입니다."</string>
- <!-- no translation found for permgrouplab_display (4279909676036402636) -->
- <skip />
- <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
- <skip />
+ <string name="permgrouplab_display" msgid="4279909676036402636">"다른 애플리케이션 UI"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"다른 애플리케이션의 UI에 영향을 줍니다."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"저장"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"USB 저장소에 액세스합니다."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"SD 카드에 액세스합니다."</string>
@@ -592,7 +569,8 @@
<string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"앱이 사진과 미디어를 포함하고 있을 수 있는 USB 저장소의 콘텐츠를 읽도록 허용합니다."</string>
<string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"앱이 사진과 미디어를 포함하고 있을 수 있는 SD 카드의 콘텐츠를 읽도록 허용합니다."</string>
<string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"USB 저장소의 콘텐츠 수정 또는 삭제"</string>
- <string name="permlab_sdcardWrite" product="default" msgid="9084476432661578751">"SD 카드의 콘텐츠 수정 또는 삭제"</string>
+ <!-- no translation found for permlab_sdcardWrite (8805693630050458763) -->
+ <skip />
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"앱이 USB 저장소에 쓸 수 있도록 허용합니다."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"앱이 SD 카드에 쓸 수 있도록 허용합니다."</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"내부 미디어 저장소 콘텐츠 수정/삭제"</string>
@@ -770,8 +748,7 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"휴대전화에 SIM 카드가 없습니다."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"SIM 카드를 삽입하세요."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"SIM 카드가 없거나 읽을 수 없습니다. SIM 카드를 삽입하세요."</string>
- <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
- <skip />
+ <string name="lockscreen_permanent_disabled_sim_message_short" msgid="5096149665138916184">"사용할 수 없는 SIM 카드입니다."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"SIM 카드 사용이 영구적으로 사용중지되었습니다."\n"다른 SIM 카드를 사용하려면 무선 서비스 제공업체에 문의하시기 바랍니다."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"이전 트랙 버튼"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"다음 트랙 버튼"</string>
@@ -847,9 +824,9 @@
<string name="autofill_parish" msgid="8202206105468820057">"군"</string>
<string name="autofill_area" msgid="3547409050889952423">"구역"</string>
<string name="autofill_emirate" msgid="2893880978835698818">"에미리트"</string>
- <string name="permlab_readHistoryBookmarks" msgid="3775265775405106983">"웹 북마크 및 내역 읽기"</string>
+ <string name="permlab_readHistoryBookmarks" msgid="3775265775405106983">"웹 북마크 및 기록 읽기"</string>
<string name="permdesc_readHistoryBookmarks" msgid="4577476392604595921">"앱이 브라우저로 방문한 모든 URL과 브라우저의 모든 북마크를 읽을 수 있도록 허용합니다."</string>
- <string name="permlab_writeHistoryBookmarks" msgid="3714785165273314490">"웹 북마크 및 내역 쓰기"</string>
+ <string name="permlab_writeHistoryBookmarks" msgid="3714785165273314490">"웹 북마크 및 기록 쓰기"</string>
<string name="permdesc_writeHistoryBookmarks" product="tablet" msgid="1757103804824209530">"앱이 태블릿에 저장된 브라우저 기록 또는 북마크를 수정할 수 있도록 허용합니다. 이 경우 악성 앱이 브라우저의 데이터를 지우거나 수정할 수 있습니다."</string>
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="6693764355720719197">"앱이 휴대전화에 저장된 브라우저 기록 또는 북마크를 수정할 수 있도록 허용합니다. 이 경우 악성 앱이 브라우저의 데이터를 지우거나 수정할 수 있습니다."</string>
<string name="permlab_setAlarm" msgid="1379294556362091814">"알람 설정"</string>
@@ -1112,11 +1089,10 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"날짜 설정"</string>
<string name="date_time_set" msgid="5777075614321087758">"설정"</string>
<string name="date_time_done" msgid="2507683751759308828">"완료"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"기본값"</string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"신규: "</font></string>
+ <!-- no translation found for perms_description_app (5139836143293299417) -->
+ <skip />
<string name="no_permissions" msgid="7283357728219338112">"권한 필요 없음"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"숨기기"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"모두 표시"</b></string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"USB 대용량 저장소"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB 연결됨"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"USB를 통해 컴퓨터에 연결했습니다. 컴퓨터와 Android의 USB 저장소 간에 파일을 복사하려면 아래의 버튼을 터치하세요."</string>
@@ -1345,4 +1321,8 @@
<string name="sending" msgid="3245653681008218030">"전송 중..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"브라우저를 실행하시겠습니까?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"통화를 수락하시겠습니까?"</string>
+ <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <skip />
+ <!-- no translation found for activity_resolver_use_once (405646673463328329) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-large/dimens.xml b/core/res/res/values-large/dimens.xml
index 864675a..8cd614d 100644
--- a/core/res/res/values-large/dimens.xml
+++ b/core/res/res/values-large/dimens.xml
@@ -24,10 +24,6 @@
<!-- keyboardHeight = key_height*4 + key_bottom_gap*3 -->
<dimen name="password_keyboard_height">48.0mm</dimen>
- <!-- The width that is used when creating thumbnails of applications. -->
- <dimen name="thumbnail_width">230dp</dimen>
- <!-- The height that is used when creating thumbnails of applications. -->
- <dimen name="thumbnail_height">135dp</dimen>
<!-- Minimum width of the search view text entry area. -->
<dimen name="search_view_text_min_width">192dip</dimen>
diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml
index c3d83e8..1819172 100644
--- a/core/res/res/values-lt/strings.xml
+++ b/core/res/res/values-lt/strings.xml
@@ -168,76 +168,55 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Jūsų pranešimai"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Skaitykite ir rašykite SMS, el. laiškus ir kitus pranešimus."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Asmeninė informacija"</string>
- <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
- <skip />
- <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
- <skip />
- <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
- <skip />
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Tiesioginė prieiga prie informacijos, saugomos kontaktinėje kortelėje."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Socialinė informacija"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Tiesioginė prieiga prie kontaktų ir socialinių ryšių informacijos."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Jūsų vieta"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Stebėti fizinę vietą."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Tinklo ryšys"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Pasiekti įvairias tinklo funkcijas."</string>
- <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <!-- no translation found for permgrouplab_bluetoothNetwork (1585403544162128109) -->
<skip />
- <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <!-- no translation found for permgroupdesc_bluetoothNetwork (5625288577164282391) -->
<skip />
- <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <!-- no translation found for permgrouplab_shortrangeNetwork (130808676377486118) -->
<skip />
- <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) -->
<skip />
- <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Garso nustatymai"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Keisti garso nustatymus."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Paveikia akumuliatorių"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Naudoti funkcijas, galinčias greitai iškrauti akumuliatorių."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Kalendorius"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Tiesioginė prieiga prie kalendoriaus ir įvykių."</string>
+ <!-- no translation found for permgrouplab_dictionary (4148597128843641379) -->
<skip />
- <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <!-- no translation found for permgroupdesc_dictionary (7921166355964764490) -->
<skip />
- <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <!-- no translation found for permgrouplab_writeDictionary (8090237702432576788) -->
<skip />
- <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) -->
<skip />
- <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
- <skip />
- <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
- <skip />
- <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
- <skip />
- <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
- <skip />
- <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
- <skip />
- <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
- <skip />
- <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
- <skip />
- <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
- <skip />
- <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
- <skip />
- <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
- <skip />
- <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
- <skip />
- <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
- <skip />
- <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
- <skip />
- <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
- <skip />
- <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
- <skip />
- <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
- <skip />
- <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
- <skip />
- <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
- <skip />
- <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
- <skip />
- <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
- <skip />
- <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
- <skip />
- <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
- <skip />
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Žymės ir istorija"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Tiesioginė prieiga prie žymių ir naršyklės istorijos."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Signalas"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Nustatyti žadintuvo signalą."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Balso paštas"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Tiesioginė prieiga prie balso pašto."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Mikrofonas"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Tiesioginė prieiga prie mikrofono, kad būtų galima įrašyti garsą."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Fotoaparatas"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Tiesioginė prieiga prie fotoaparato, kad būtų galima fotografuoti vaizdus arba įrašyti vaizdo įrašus."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Programų informacija"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Galimybė paveikti kitų įrenginio programų veikimą."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Ekrano fonas"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Keisti įrenginio ekrano fono nustatymus."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Laikrodis"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Keisti įrenginio laiką arba laiko juostą."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Būsenos juosta"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Keisti įrenginio būsenos juostos nustatymus."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Sinchronizavimo nustatymai"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Prieiga prie sinchronizavimo nustatymų."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Jūsų paskyros"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Pasiekite galimas paskyras."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Aparatinės įrangos valdikliai"</string>
@@ -248,10 +227,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Žemesnio lygio prieiga prie sistemos ir jos valdymas."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Kūrėjo įrankiai"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Funkcijos reikalingos tik programos kūrėjams."</string>
- <!-- no translation found for permgrouplab_display (4279909676036402636) -->
- <skip />
- <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
- <skip />
+ <string name="permgrouplab_display" msgid="4279909676036402636">"Kitų programų naudotojo sąsaja"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Paveikti kitų programų naudotojo sąsają."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Saugykla"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Pasiekti USB atmintinę."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Pasiekite SD kortelę."</string>
@@ -592,7 +569,8 @@
<string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Programai leidžiama skaityti USB atminties turinį, kurį gali sudaryti nuotraukos ir medija."</string>
<string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Programai leidžiama skaityti SD kortelės turinį, kurį gali sudaryti nuotraukos ir medija."</string>
<string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"keisti / trinti USB atm. turinį"</string>
- <string name="permlab_sdcardWrite" product="default" msgid="9084476432661578751">"keisti arba trinti SD kortelės turinį"</string>
+ <!-- no translation found for permlab_sdcardWrite (8805693630050458763) -->
+ <skip />
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Leidž. progr. raš. į USB atm."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Leidžiama programai rašyti į SD kortelę."</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"keisti / ištr. vid. med. atm. tur."</string>
@@ -770,8 +748,7 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"Telefone nėra SIM kortelės."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Įdėkite SIM kortelę."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"Trūksta SIM kortelės arba ji neskaitoma. Įdėkite SIM kortelę."</string>
- <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
- <skip />
+ <string name="lockscreen_permanent_disabled_sim_message_short" msgid="5096149665138916184">"Negalima naudoti SIM kortelės."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"SIM kortelė visam laikui neleidžiama."\n" Jei norite gauti kitą SIM kortelę, susisiekite su belaidžio ryšio paslaugos teikėju."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Ankstesnio takelio mygtukas"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Kito takelio mygtukas"</string>
@@ -1112,11 +1089,10 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Nustatyti datą"</string>
<string name="date_time_set" msgid="5777075614321087758">"Nustatyti"</string>
<string name="date_time_done" msgid="2507683751759308828">"Baigta"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"Numatytasis"</string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"NAUJAS: "</font></string>
+ <!-- no translation found for perms_description_app (5139836143293299417) -->
+ <skip />
<string name="no_permissions" msgid="7283357728219338112">"Nereikia leidimų"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Slėpti"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Rodyti viską"</b></string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"USB didelės talpos atmintis"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB prijungtas"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Prisijungėte prie kompiuterio per USB. Jei norite kopijuoti failus iš kompiuterio į „Android“ USB atmintį ir atvirkščiai, palieskite toliau pateiktą mygtuką."</string>
@@ -1345,4 +1321,8 @@
<string name="sending" msgid="3245653681008218030">"Siunčiama…"</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Paleisti naršyklę?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Priimti skambutį?"</string>
+ <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <skip />
+ <!-- no translation found for activity_resolver_use_once (405646673463328329) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml
index 50aa109..8231db1 100644
--- a/core/res/res/values-lv/strings.xml
+++ b/core/res/res/values-lv/strings.xml
@@ -168,76 +168,55 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Jūsu ziņojumi"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Lasiet un rakstiet īsziņas, e-pasta un citus ziņojumus."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Personas informācija"</string>
- <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
- <skip />
- <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
- <skip />
- <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
- <skip />
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Tieša piekļuve jūsu vizītkartē saglabātajai informācijai par jums."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Jūsu sociālo tīklu informācija"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Tieša piekļuve informācijai par jūsu kontaktpersonām un sociālajiem savienojumiem."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Jūsu atrašanās vieta"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Pārrauga jūsu fizisko atrašanās vietu."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Tīkla sakari"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Piekļūst dažādām tīkla funkcijām."</string>
- <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <!-- no translation found for permgrouplab_bluetoothNetwork (1585403544162128109) -->
<skip />
- <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <!-- no translation found for permgroupdesc_bluetoothNetwork (5625288577164282391) -->
<skip />
- <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <!-- no translation found for permgrouplab_shortrangeNetwork (130808676377486118) -->
<skip />
- <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) -->
<skip />
- <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Audio iestatījumi"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Audio iestatījumu maiņa."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Ietekme uz akumulatora darbību"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Tādu funkciju izmantošana, kas patērē daudz akumulatora enerģijas."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Kalendārs"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Tieša piekļuve kalendāram un pasākumiem."</string>
+ <!-- no translation found for permgrouplab_dictionary (4148597128843641379) -->
<skip />
- <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <!-- no translation found for permgroupdesc_dictionary (7921166355964764490) -->
<skip />
- <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <!-- no translation found for permgrouplab_writeDictionary (8090237702432576788) -->
<skip />
- <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) -->
<skip />
- <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
- <skip />
- <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
- <skip />
- <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
- <skip />
- <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
- <skip />
- <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
- <skip />
- <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
- <skip />
- <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
- <skip />
- <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
- <skip />
- <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
- <skip />
- <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
- <skip />
- <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
- <skip />
- <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
- <skip />
- <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
- <skip />
- <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
- <skip />
- <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
- <skip />
- <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
- <skip />
- <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
- <skip />
- <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
- <skip />
- <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
- <skip />
- <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
- <skip />
- <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
- <skip />
- <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
- <skip />
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Grāmatzīmes un vēsture"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Tieša piekļuve grāmatzīmēm un pārlūkprogrammas vēsturei."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Signāls"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Modinātājpulksteņa iestatīšana."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Balss pasts"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Tieša piekļuve balss pastam."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Mikrofons"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Tieša piekļuve mikrofonam, lai ierakstītu audio."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Kamera"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Tieša piekļuve kamerai, lai uzņemtu attēlus vai videoklipus."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Informācija par jūsu lietojumprogrammām"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Spēja ietekmēt citu ierīcē esošo lietojumprogrammu darbību."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Fona tapete"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Ierīces fona tapetes iestatījumu maiņa."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Pulkstenis"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Ierīces laika vai laika joslas maiņa."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Statusa josla"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Ierīces statusa joslas iestatījumu maiņa."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Sinhronizācijas iestatījumi"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Pieeja sinhronizācijas iestatījumiem."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Jūsu konti"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Piekļūstiet pieejamajiem kontiem."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Aparatūras vadīklas"</string>
@@ -248,10 +227,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Sistēmas apakšējā līmeņa piekļuve un vadība."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Izstrādes rīki"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Tikai lietotņu izstrādātājiem nepieciešamās funkcijas."</string>
- <!-- no translation found for permgrouplab_display (4279909676036402636) -->
- <skip />
- <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
- <skip />
+ <string name="permgrouplab_display" msgid="4279909676036402636">"Citu lietojumprogrammu lietotāja saskarnes"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Ietekme uz citu lietojumprogrammu lietotāja saskarni."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Krātuve"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Piekļūst USB krātuvei."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Piekļūstiet SD kartei."</string>
@@ -592,7 +569,8 @@
<string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Ļauj lasīt USB: foto un multiv."</string>
<string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Ļauj lietotnei lasīt SD kartes saturu, kurā var būt fotoattēli un multivide."</string>
<string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"mainīt vai dzēst USB atm. sat."</string>
- <string name="permlab_sdcardWrite" product="default" msgid="9084476432661578751">"mainīt vai dzēst SD kartes saturu"</string>
+ <!-- no translation found for permlab_sdcardWrite (8805693630050458763) -->
+ <skip />
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Ļauj lietotnei rakstīt USB atmiņā."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Ļauj lietotnei rakstīt SD kartē."</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"pārv./dz.datu n.iekš.atm.sat."</string>
@@ -770,8 +748,7 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"Tālrunī nav SIM kartes."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Ievietojiet SIM karti."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"Nav SIM kartes, vai arī to nevar nolasīt. Ievietojiet SIM karti."</string>
- <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
- <skip />
+ <string name="lockscreen_permanent_disabled_sim_message_short" msgid="5096149665138916184">"Nelietojama SIM karte."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"Jūsu SIM karte ir neatgriezeniski atspējota."\n"Sazinieties ar savu bezvadu pakalpojumu sniedzēju, lai iegūtu citu SIM karti."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Iepriekšējā ieraksta poga"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Nākamā ieraksta poga"</string>
@@ -1112,11 +1089,10 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Datuma iestatīšana"</string>
<string name="date_time_set" msgid="5777075614321087758">"Iestatīt"</string>
<string name="date_time_done" msgid="2507683751759308828">"Gatavs"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"Noklusējums"</string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"JAUNA: "</font></string>
+ <!-- no translation found for perms_description_app (5139836143293299417) -->
+ <skip />
<string name="no_permissions" msgid="7283357728219338112">"Atļaujas nav nepieciešamas."</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Slēpt"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Rādīt visu"</b></string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"USB lielapjoma atmiņa"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB ir pievienots."</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Ir izveidots savienojums ar datoru, izmantojot USB. Pieskarieties tālāk esošajai pogai, ja vēlaties kopēt failus no datora Android USB atmiņā vai otrādi."</string>
@@ -1345,4 +1321,8 @@
<string name="sending" msgid="3245653681008218030">"Notiek sūtīšana…"</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Vai palaist pārlūkprogrammu?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Vai atbildēt uz zvanu?"</string>
+ <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <skip />
+ <!-- no translation found for activity_resolver_use_once (405646673463328329) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-ms/strings.xml b/core/res/res/values-ms/strings.xml
index 8d3de4b..0bc4262 100644
--- a/core/res/res/values-ms/strings.xml
+++ b/core/res/res/values-ms/strings.xml
@@ -178,9 +178,13 @@
<string name="permgroupdesc_location" msgid="5704679763124170100">"Pantau lokasi fizikal anda."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Komunikasi rangkaian"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Akses pelbagai ciri rangkaian."</string>
- <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <!-- no translation found for permgrouplab_bluetoothNetwork (1585403544162128109) -->
<skip />
- <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <!-- no translation found for permgroupdesc_bluetoothNetwork (5625288577164282391) -->
+ <skip />
+ <!-- no translation found for permgrouplab_shortrangeNetwork (130808676377486118) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) -->
<skip />
<!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
<skip />
@@ -194,9 +198,13 @@
<skip />
<!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
<skip />
- <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
+ <!-- no translation found for permgrouplab_dictionary (4148597128843641379) -->
<skip />
- <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
+ <!-- no translation found for permgroupdesc_dictionary (7921166355964764490) -->
+ <skip />
+ <!-- no translation found for permgrouplab_writeDictionary (8090237702432576788) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) -->
<skip />
<!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
<skip />
@@ -592,7 +600,8 @@
<string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Membolehkan apl membaca kandungan storan USB, yang mungkin termasuk foto dan media."</string>
<string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Membolehkan apl membaca kandungan kad SD, yang mungkin termasuk foto dan media."</string>
<string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"ubah suai atau padam kandungan storan USB anda"</string>
- <string name="permlab_sdcardWrite" product="default" msgid="9084476432661578751">"ubah suai atau padam kandungan kad SD anda"</string>
+ <!-- no translation found for permlab_sdcardWrite (8805693630050458763) -->
+ <skip />
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Membenarkan apl menulis ke storan USB."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Membenarkan apl menulis ke kad SD."</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"ubh suai/pdm kdg strn mdia dlm"</string>
@@ -1112,11 +1121,10 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Tetapkan tarikh"</string>
<string name="date_time_set" msgid="5777075614321087758">"Tetapkan"</string>
<string name="date_time_done" msgid="2507683751759308828">"Selesai"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"Lalai"</string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"BAHARU: "</font></string>
+ <!-- no translation found for perms_description_app (5139836143293299417) -->
+ <skip />
<string name="no_permissions" msgid="7283357728219338112">"Tiada kebenaran diperlukan"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Sembunyikan"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Tunjukkan semua"</b></string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"Storan massa USB"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"sambungan USB"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Anda bersambung ke komputer melalui USB. Sentuh butang di bawah jika anda mahu menyalin fail antara komputer dan storan USB Android anda."</string>
@@ -1345,4 +1353,8 @@
<string name="sending" msgid="3245653681008218030">"Menghantar…"</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Lancarkan Penyemak Imbas?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Terima panggilan?"</string>
+ <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <skip />
+ <!-- no translation found for activity_resolver_use_once (405646673463328329) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml
index 66cc3f8..3427829 100644
--- a/core/res/res/values-nb/strings.xml
+++ b/core/res/res/values-nb/strings.xml
@@ -168,76 +168,55 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Meldinger"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Tillatelse til å lese og skrive SMS-ene dine, e-post og andre meldinger."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Personlig informasjon"</string>
- <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
- <skip />
- <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
- <skip />
- <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
- <skip />
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Direkte tilgang til informasjonen om deg, som er lagret på kontaktkortet ditt."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Den sosiale informasjonen din"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Direkte tilgang til informasjon om kontaktene og de sosiale forbindelsene dine."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Din posisjon"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Overvåking av telefonens fysiske posisjon."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Nettverkstilgang"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Tilgang til ulike nettverksfunksjoner."</string>
- <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <!-- no translation found for permgrouplab_bluetoothNetwork (1585403544162128109) -->
<skip />
- <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <!-- no translation found for permgroupdesc_bluetoothNetwork (5625288577164282391) -->
<skip />
- <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <!-- no translation found for permgrouplab_shortrangeNetwork (130808676377486118) -->
<skip />
- <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) -->
<skip />
- <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Lydinnstillingene"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Endre lydinnstillingene."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Påvirker batteriet"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Bruke funksjoner som kan tappe batteriet fortere."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Kalenderen"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Direkte tilgang til kalenderen og aktiviteter."</string>
+ <!-- no translation found for permgrouplab_dictionary (4148597128843641379) -->
<skip />
- <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <!-- no translation found for permgroupdesc_dictionary (7921166355964764490) -->
<skip />
- <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <!-- no translation found for permgrouplab_writeDictionary (8090237702432576788) -->
<skip />
- <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) -->
<skip />
- <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
- <skip />
- <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
- <skip />
- <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
- <skip />
- <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
- <skip />
- <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
- <skip />
- <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
- <skip />
- <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
- <skip />
- <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
- <skip />
- <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
- <skip />
- <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
- <skip />
- <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
- <skip />
- <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
- <skip />
- <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
- <skip />
- <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
- <skip />
- <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
- <skip />
- <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
- <skip />
- <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
- <skip />
- <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
- <skip />
- <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
- <skip />
- <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
- <skip />
- <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
- <skip />
- <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
- <skip />
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Bokmerkene og loggen"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Direkte tilgang til bokmerker og nettleserloggen."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Alarmen"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Stille vekkerklokken."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Talepostkassen"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Direkte tilgang til talepostkassen."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Mikrofonen"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Direkte tilgang til mikrofonen for å ta opp lyd."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Kameraet"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Direkte tilgang til kamera for bilde- eller videoopptak."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Appinformasjonen din"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Ha muligheten til å påvirke andre apper på enheten din."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Bakgrunnen"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Endre enhetens bakgrunnsinnstillinger."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Klokken"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Endre klokken eller tidssonen på enheten."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Statusfelt"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Endre innstillingene for enhetens statusfelt."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Synkroniseringsinnsttillingene"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Tilgang til synkroniseringsinnstillingene."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Google-kontoer"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Tilgang til tilgjengelige Google-kontoer."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Maskinvarekontroll"</string>
@@ -248,10 +227,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Lavnivå tilgang og kontroll over systemet."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Utviklingsverktøy"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Funksjoner som bare apputviklere trenger."</string>
- <!-- no translation found for permgrouplab_display (4279909676036402636) -->
- <skip />
- <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
- <skip />
+ <string name="permgrouplab_display" msgid="4279909676036402636">"Brukergrensesnittet til andre apper"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Påvirke brukergrensesnittet i andre apper."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Lagring"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Tilgang til USB-lagring."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Tilgang til minnekortet."</string>
@@ -592,7 +569,8 @@
<string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Tillater at appen leser innholdet i USB-lagring, som kan inneholde bilder og medier."</string>
<string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Tillater at appen leser innholdet i SD-kort, som kan inneholde bilder og medier."</string>
<string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"endrer eller sletter innholdet i USB-lagringen"</string>
- <string name="permlab_sdcardWrite" product="default" msgid="9084476432661578751">"endrer eller sletter innholdet i SD-kortet"</string>
+ <!-- no translation found for permlab_sdcardWrite (8805693630050458763) -->
+ <skip />
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Gir appen tillatelse til å skrive til USB-lagringen."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Lar appen skrive til SD-kortet."</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"endre eller slette innhold på interne medier"</string>
@@ -770,8 +748,7 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"Ikke noe SIM-kort i telefonen."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Sett inn et SIM-kort."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"SIM-kort mangler eller er uleselig. Sett inn et SIM-kort."</string>
- <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
- <skip />
+ <string name="lockscreen_permanent_disabled_sim_message_short" msgid="5096149665138916184">"Ubrukelige SIM-kort."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"SIM-kortet er deaktivert permanent."\n"Ta kontakt med leverandøren av trådløstjenesten for å få et nytt SIM-kort."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Knapp for forrige sang"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Knapp for neste sang"</string>
@@ -1112,11 +1089,10 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Angi dato"</string>
<string name="date_time_set" msgid="5777075614321087758">"Lagre"</string>
<string name="date_time_done" msgid="2507683751759308828">"Ferdig"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"Standard"</string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"NYTT: "</font></string>
+ <!-- no translation found for perms_description_app (5139836143293299417) -->
+ <skip />
<string name="no_permissions" msgid="7283357728219338112">"Trenger ingen rettigheter"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Skjul"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Vis alle"</b></string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"USB-masselagring"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB koblet til"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Du har koblet deg til datamaskinen via USB. Trykk på knappen nedenfor hvis du vil kopiere filer mellom datamaskinen og Android-telefonens USB-lagring."</string>
@@ -1345,4 +1321,8 @@
<string name="sending" msgid="3245653681008218030">"Sender …"</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Vil du starte nettleseren?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Vil du besvare anropet?"</string>
+ <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <skip />
+ <!-- no translation found for activity_resolver_use_once (405646673463328329) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml
index b744ad5..ef85ec4 100644
--- a/core/res/res/values-nl/strings.xml
+++ b/core/res/res/values-nl/strings.xml
@@ -175,16 +175,28 @@
<string name="permgroupdesc_location" msgid="5704679763124170100">"Uw fysieke locatie bijhouden."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Netwerkcommunicatie"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Toegang tot verschillende netwerkfuncties."</string>
- <string name="permgrouplab_shortRangeNetwork" msgid="4504840216096355984">"Bluetooth en NFC"</string>
- <string name="permgroupdesc_shortRangeNetwork" msgid="8821013030346680806">"Toegang krijgen tot Bluetooth of NFC-netwerken en -apparaten."</string>
+ <!-- no translation found for permgrouplab_bluetoothNetwork (1585403544162128109) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_bluetoothNetwork (5625288577164282391) -->
+ <skip />
+ <!-- no translation found for permgrouplab_shortrangeNetwork (130808676377486118) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) -->
+ <skip />
<string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Audio-instellingen"</string>
<string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Audio-instellingen wijzigen."</string>
<string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"De accu beïnvloeden"</string>
<string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Functies gebruiken waardoor de accu snel leeg kan raken."</string>
<string name="permgrouplab_calendar" msgid="5863508437783683902">"Agenda"</string>
<string name="permgroupdesc_calendar" msgid="5777534316982184416">"Rechtstreeks toegang krijgen tot agenda en afspraken."</string>
- <string name="permgrouplab_dictionary" msgid="8114410334955871144">"Gebruikerswoordenboek"</string>
- <string name="permgroupdesc_dictionary" msgid="40926483968949978">"Rechtstreeks toegang krijgen tot het gebruikerswoordenboek."</string>
+ <!-- no translation found for permgrouplab_dictionary (4148597128843641379) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_dictionary (7921166355964764490) -->
+ <skip />
+ <!-- no translation found for permgrouplab_writeDictionary (8090237702432576788) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) -->
+ <skip />
<string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Bladwijzers en geschiedenis"</string>
<string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Rechtstreeks toegang krijgen tot bladwijzers en browsergeschiedenis."</string>
<string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Alarm"</string>
@@ -557,7 +569,8 @@
<string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Toestaan dat de app inhoud in de USB-opslag, waaronder foto\'s en media, leest."</string>
<string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Toestaan dat de app inhoud op de SD-kaart, waaronder foto\'s en media, leest."</string>
<string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"de inhoud van uw USB-opslag aanpassen of verwijderen"</string>
- <string name="permlab_sdcardWrite" product="default" msgid="9084476432661578751">"de inhoud van uw SD-kaart aanpassen of verwijderen"</string>
+ <!-- no translation found for permlab_sdcardWrite (8805693630050458763) -->
+ <skip />
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Hiermee kan de app schrijven naar de USB-opslag."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Hiermee kan de app schrijven naar de SD-kaart."</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"inh. mediaopsl. wijz./verw."</string>
@@ -1076,11 +1089,10 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Datum instellen"</string>
<string name="date_time_set" msgid="5777075614321087758">"Instellen"</string>
<string name="date_time_done" msgid="2507683751759308828">"Gereed"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"Standaard"</string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"NIEUW: "</font></string>
+ <!-- no translation found for perms_description_app (5139836143293299417) -->
+ <skip />
<string name="no_permissions" msgid="7283357728219338112">"Geen machtigingen vereist"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Verbergen"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Alles weergeven"</b></string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"USB-massaopslag"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB-verbinding"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"U heeft uw telefoon via USB op uw computer aangesloten. Raak de knop hieronder aan als u bestanden tussen uw computer en de USB-opslag van uw Android wilt kopiëren."</string>
@@ -1309,4 +1321,8 @@
<string name="sending" msgid="3245653681008218030">"Verzenden..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Browser starten?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Oproep accepteren?"</string>
+ <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <skip />
+ <!-- no translation found for activity_resolver_use_once (405646673463328329) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml
index f18cb33..022b8c5 100644
--- a/core/res/res/values-pl/strings.xml
+++ b/core/res/res/values-pl/strings.xml
@@ -178,9 +178,13 @@
<string name="permgroupdesc_location" msgid="5704679763124170100">"Monitorowanie fizycznej lokalizacji"</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Połączenia sieciowe"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Uzyskiwanie dostępu do różnych funkcji sieciowych"</string>
- <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <!-- no translation found for permgrouplab_bluetoothNetwork (1585403544162128109) -->
<skip />
- <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <!-- no translation found for permgroupdesc_bluetoothNetwork (5625288577164282391) -->
+ <skip />
+ <!-- no translation found for permgrouplab_shortrangeNetwork (130808676377486118) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) -->
<skip />
<!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
<skip />
@@ -194,9 +198,13 @@
<skip />
<!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
<skip />
- <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
+ <!-- no translation found for permgrouplab_dictionary (4148597128843641379) -->
<skip />
- <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
+ <!-- no translation found for permgroupdesc_dictionary (7921166355964764490) -->
+ <skip />
+ <!-- no translation found for permgrouplab_writeDictionary (8090237702432576788) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) -->
<skip />
<!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
<skip />
@@ -592,7 +600,8 @@
<string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Zezwala aplikacji na odczytywanie zawartości pamięci USB, która może obejmować zdjęcia i multimedia."</string>
<string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Zezwala aplikacji na odczytywanie zawartości karty SD, która może obejmować zdjęcia i multimedia."</string>
<string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"modyfikowanie i usuwanie zawartości pamięci USB"</string>
- <string name="permlab_sdcardWrite" product="default" msgid="9084476432661578751">"modyfikowanie i usuwanie zawartości karty SD"</string>
+ <!-- no translation found for permlab_sdcardWrite (8805693630050458763) -->
+ <skip />
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Pozwala aplikacji na zapis w pamięci USB."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Pozwala aplikacji na zapis na karcie SD."</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"modyfikowanie/usuwanie zawartości pamięci wew."</string>
@@ -1112,11 +1121,10 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Ustaw datę"</string>
<string name="date_time_set" msgid="5777075614321087758">"Ustaw"</string>
<string name="date_time_done" msgid="2507683751759308828">"Gotowe"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"Domyślne"</string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"NOWE: "</font></string>
+ <!-- no translation found for perms_description_app (5139836143293299417) -->
+ <skip />
<string name="no_permissions" msgid="7283357728219338112">"Nie są wymagane żadne uprawnienia"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Ukryj"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Pokaż wszystko"</b></string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"Pamięć masowa USB"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"Połączenie przez USB"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Nawiązano połączenie z komputerem przez USB. Jeśli chcesz skopiować pliki między komputerem a nośnikiem USB systemu Android, dotknij poniższego przycisku."</string>
@@ -1345,4 +1353,8 @@
<string name="sending" msgid="3245653681008218030">"Wysyłanie..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Uruchomić przeglądarkę?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Odebrać połączenie?"</string>
+ <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <skip />
+ <!-- no translation found for activity_resolver_use_once (405646673463328329) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml
index c010240..e785c7c 100644
--- a/core/res/res/values-pt-rPT/strings.xml
+++ b/core/res/res/values-pt-rPT/strings.xml
@@ -168,76 +168,55 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"As suas mensagens"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Ler e escrever SMS, e-mail e outras mensagens."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Os seus dados pessoais"</string>
- <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
- <skip />
- <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
- <skip />
- <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
- <skip />
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Acesso direto às suas informações, armazenadas no seu cartão de contacto."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"As suas informações sociais"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Acesso direto às informações sobre os seus contactos e ligações sociais."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"A sua localização"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Monitorizar a sua localização física."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Comunicação de rede"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Aceder a várias funcionalidades de rede."</string>
- <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <!-- no translation found for permgrouplab_bluetoothNetwork (1585403544162128109) -->
<skip />
- <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <!-- no translation found for permgroupdesc_bluetoothNetwork (5625288577164282391) -->
<skip />
- <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <!-- no translation found for permgrouplab_shortrangeNetwork (130808676377486118) -->
<skip />
- <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) -->
<skip />
- <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Definições de Áudio"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Alterar as definições de áudio."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Afetar a Bateria"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Utilizar funcionalidades que podem descarregar rapidamente a bateria."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Calendário"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Acesso direto ao calendário e eventos."</string>
+ <!-- no translation found for permgrouplab_dictionary (4148597128843641379) -->
<skip />
- <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <!-- no translation found for permgroupdesc_dictionary (7921166355964764490) -->
<skip />
- <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <!-- no translation found for permgrouplab_writeDictionary (8090237702432576788) -->
<skip />
- <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) -->
<skip />
- <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
- <skip />
- <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
- <skip />
- <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
- <skip />
- <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
- <skip />
- <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
- <skip />
- <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
- <skip />
- <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
- <skip />
- <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
- <skip />
- <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
- <skip />
- <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
- <skip />
- <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
- <skip />
- <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
- <skip />
- <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
- <skip />
- <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
- <skip />
- <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
- <skip />
- <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
- <skip />
- <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
- <skip />
- <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
- <skip />
- <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
- <skip />
- <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
- <skip />
- <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
- <skip />
- <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
- <skip />
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Marcadores e Histórico"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Acesso direto aos marcadores e histórico do navegador."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Alarme"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Definir o despertador."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Correio de voz"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Acesso direto ao correio de voz."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Microfone"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Acesso direto ao microfone para gravar áudio."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Câmara"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Acesso direto à câmara para captura de imagens ou vídeos."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"As informações das suas aplicações"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Capacidade de afetar o comportamento de outras aplicações no seu dispositivo."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Imagem de fundo"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Alterar as definições de imagem de fundo do dispositivo."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Relógio"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Alterar a hora ou o fuso horário do dispositivo."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Barra de Estado"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Alterar as definições da barra de estado do dispositivo."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Definições de Sincronização"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Acesso às definições de sincronização."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"As suas contas"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Aceda às contas disponíveis."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Controlos de hardware"</string>
@@ -248,10 +227,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Acesso e controlo de nível inferior do sistema."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Ferramentas de desenvolvimento"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Funcionalidades apenas necessárias para programadores de aplicações."</string>
- <!-- no translation found for permgrouplab_display (4279909676036402636) -->
- <skip />
- <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
- <skip />
+ <string name="permgrouplab_display" msgid="4279909676036402636">"IU de Outras Aplicações"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Afetar a IU de outras aplicações."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Armazenamento"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Aceder ao armazenamento USB."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Aceder ao cartão SD."</string>
@@ -590,9 +567,10 @@
<string name="permlab_sdcardRead" product="nosdcard" msgid="367275095159405468">"ler os conteúdos da memória USB"</string>
<string name="permlab_sdcardRead" product="default" msgid="2188156462934977940">"ler os conteúdos do cartão SD"</string>
<string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Permitir que aplic. leia cont. da mem. USB, que poderão incluir fotogr. e multimédia."</string>
- <string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Permite que a aplicação leia os conteúdos do cartão SD, que poderão incluir fotografias e elementos multimédia."</string>
+ <string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Permite que a aplicação leia os conteúdos do cartão SD que poderão incluir fotografias e elementos multimédia."</string>
<string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"modificar ou eliminar os conteúdos da memória USB"</string>
- <string name="permlab_sdcardWrite" product="default" msgid="9084476432661578751">"modificar ou eliminar os conteúdos do cartão SD"</string>
+ <!-- no translation found for permlab_sdcardWrite (8805693630050458763) -->
+ <skip />
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Permite que a aplicação escreva na unidade de armazenamento USB."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Permite que a aplicação escreva no cartão SD."</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"modif./elim. armaz. interno"</string>
@@ -770,8 +748,7 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"Nenhum cartão SIM no telefone."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Insira um cartão SIM."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"O cartão SIM está em falta ou não é legível. Introduza um cartão SIM."</string>
- <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
- <skip />
+ <string name="lockscreen_permanent_disabled_sim_message_short" msgid="5096149665138916184">"Cartão SIM inutilizável."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"O cartão SIM foi desativado definitivamente. "\n" Contacte o seu fornecedor de serviços de rede sem fios para obter outro cartão SIM."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Botão Faixa anterior"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Botão Faixa seguinte"</string>
@@ -1112,11 +1089,10 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Definir data"</string>
<string name="date_time_set" msgid="5777075614321087758">"Definir"</string>
<string name="date_time_done" msgid="2507683751759308828">"Concluído"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"Predefinido"</string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"NOVA: "</font></string>
+ <!-- no translation found for perms_description_app (5139836143293299417) -->
+ <skip />
<string name="no_permissions" msgid="7283357728219338112">"Não são necessárias permissões"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Ocultar"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Mostrar tudo"</b></string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"Armazenamento em massa USB"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"Ligado através de USB"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Ligou ao computador através de USB. Toque no botão abaixo se pretender copiar ficheiros entre o computador e a memória de armazenamento USB do Android."</string>
@@ -1345,4 +1321,8 @@
<string name="sending" msgid="3245653681008218030">"A enviar..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Iniciar Navegador?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Aceitar chamada?"</string>
+ <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <skip />
+ <!-- no translation found for activity_resolver_use_once (405646673463328329) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml
index 423eb91..c7b6746 100644
--- a/core/res/res/values-pt/strings.xml
+++ b/core/res/res/values-pt/strings.xml
@@ -168,76 +168,55 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Suas mensagens"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Ler e gravar mensagens SMS, e-mails e outras mensagens."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Suas informações pessoais"</string>
- <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
- <skip />
- <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
- <skip />
- <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
- <skip />
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Acesso direto a informações sobre você, armazenadas em seu cartão de contato."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Suas informações sociais"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Acesso direto às informações de seus contatos e conexões sociais."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Seu local"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Monitore seu local físico."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Comunicação da rede"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Acesse diversos recursos de rede."</string>
- <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <!-- no translation found for permgrouplab_bluetoothNetwork (1585403544162128109) -->
<skip />
- <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <!-- no translation found for permgroupdesc_bluetoothNetwork (5625288577164282391) -->
<skip />
- <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <!-- no translation found for permgrouplab_shortrangeNetwork (130808676377486118) -->
<skip />
- <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) -->
<skip />
- <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Configurações de áudio"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Alterar as configurações de áudio."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Afeta a bateria"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Usar recursos que podem descarregar a bateria rapidamente."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Agenda"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Acesso direto ao calendário e eventos."</string>
+ <!-- no translation found for permgrouplab_dictionary (4148597128843641379) -->
<skip />
- <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <!-- no translation found for permgroupdesc_dictionary (7921166355964764490) -->
<skip />
- <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <!-- no translation found for permgrouplab_writeDictionary (8090237702432576788) -->
<skip />
- <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) -->
<skip />
- <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
- <skip />
- <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
- <skip />
- <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
- <skip />
- <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
- <skip />
- <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
- <skip />
- <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
- <skip />
- <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
- <skip />
- <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
- <skip />
- <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
- <skip />
- <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
- <skip />
- <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
- <skip />
- <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
- <skip />
- <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
- <skip />
- <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
- <skip />
- <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
- <skip />
- <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
- <skip />
- <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
- <skip />
- <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
- <skip />
- <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
- <skip />
- <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
- <skip />
- <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
- <skip />
- <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
- <skip />
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Favoritos e histórico"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Acesso direto aos favoritos e histórico do navegador."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Alarme"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Configurar o despertador."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Correio de voz"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Acesso direto ao correio de voz."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Microfone"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Acesso direto ao microfone para gravação de áudio."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Câmera"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Acesso direto à câmera para captura de imagens ou vídeo."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Informações sobre seus aplicativos"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Capacidade de afetar o comportamento de outros aplicativos no dispositivo."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Plano de fundo"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Alterar as configurações de papel de parede do dispositivo."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Relógio"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Alterar a hora ou fuso horário no dispositivo."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Barra de status"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Alterar as configurações da barra de status do dispositivo."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Configurações de sincronização"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Acesso às configurações de sincronização."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Suas contas"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Acessar as contas disponíveis."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Controles de hardware"</string>
@@ -248,10 +227,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Acesso de nível inferior e controle do sistema."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Ferramentas de desenvolvimento"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Recursos necessários apenas para desenvolvedores de aplicativos."</string>
- <!-- no translation found for permgrouplab_display (4279909676036402636) -->
- <skip />
- <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
- <skip />
+ <string name="permgrouplab_display" msgid="4279909676036402636">"Interface de outro aplicativo"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Afetar a interface do usuário de outros aplicativos."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Armazenamento"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Acessa o armazenamento USB."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Acessar o cartão SD."</string>
@@ -592,7 +569,8 @@
<string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Perm apl leia cont arm USB, incl fotos e mídia."</string>
<string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Permite que o aplicativo leia o conteúdo do cartão SD, o qual pode incluir fotos e mídia."</string>
<string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"modif ou excl cont. armaz USB"</string>
- <string name="permlab_sdcardWrite" product="default" msgid="9084476432661578751">"modificar ou excluir conteúdo do cartão SD"</string>
+ <!-- no translation found for permlab_sdcardWrite (8805693630050458763) -->
+ <skip />
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Permite gravar no armaz. USB."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Permite que o aplicativo grave em seu cartão SD."</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"modificar/excluir conteúdos de armazenamento de mídia internos"</string>
@@ -770,8 +748,7 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"Não há um cartão SIM no telefone."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Insera um cartão SIM."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"O cartão SIM não foi inserido ou não é possível lê-lo. Insira um cartão SIM."</string>
- <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
- <skip />
+ <string name="lockscreen_permanent_disabled_sim_message_short" msgid="5096149665138916184">"Cartão SIM inutilizável."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"O cartão SIM foi desativado permanentemente."\n"Entre em contato com seu provedor de serviços sem fio para obter outro cartão SIM."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Botão \"Faixa anterior\""</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Botão \"Próxima faixa\""</string>
@@ -1112,11 +1089,10 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Definir data"</string>
<string name="date_time_set" msgid="5777075614321087758">"Definir"</string>
<string name="date_time_done" msgid="2507683751759308828">"Concluído"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"Padrão"</string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"NOVO: "</font></string>
+ <!-- no translation found for perms_description_app (5139836143293299417) -->
+ <skip />
<string name="no_permissions" msgid="7283357728219338112">"Nenhuma permissão necessária"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Ocultar"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Mostrar todas"</b></string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"Armazenamento USB em massa"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"Conectado por USB"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Você se conectou ao computador via USB. Toque no botão abaixo se quiser copiar arquivos entre o computador e o armazenamento USB de seu Android."</string>
@@ -1345,4 +1321,8 @@
<string name="sending" msgid="3245653681008218030">"Enviando..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Abrir Navegador?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Aceitar chamada?"</string>
+ <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <skip />
+ <!-- no translation found for activity_resolver_use_once (405646673463328329) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-rm/strings.xml b/core/res/res/values-rm/strings.xml
index f6177ba..3ca7f9c 100644
--- a/core/res/res/values-rm/strings.xml
+++ b/core/res/res/values-rm/strings.xml
@@ -221,9 +221,13 @@
<string name="permgrouplab_network" msgid="5808983377727109831">"Communicaziun rait"</string>
<!-- no translation found for permgroupdesc_network (4478299413241861987) -->
<skip />
- <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <!-- no translation found for permgrouplab_bluetoothNetwork (1585403544162128109) -->
<skip />
- <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <!-- no translation found for permgroupdesc_bluetoothNetwork (5625288577164282391) -->
+ <skip />
+ <!-- no translation found for permgrouplab_shortrangeNetwork (130808676377486118) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) -->
<skip />
<!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
<skip />
@@ -237,9 +241,13 @@
<skip />
<!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
<skip />
- <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
+ <!-- no translation found for permgrouplab_dictionary (4148597128843641379) -->
<skip />
- <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
+ <!-- no translation found for permgroupdesc_dictionary (7921166355964764490) -->
+ <skip />
+ <!-- no translation found for permgrouplab_writeDictionary (8090237702432576788) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) -->
<skip />
<!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
<skip />
@@ -909,7 +917,7 @@
<skip />
<!-- no translation found for permlab_sdcardWrite (8485979062254666748) -->
<skip />
- <!-- no translation found for permlab_sdcardWrite (9084476432661578751) -->
+ <!-- no translation found for permlab_sdcardWrite (8805693630050458763) -->
<skip />
<!-- no translation found for permdesc_sdcardWrite (6175406299445710888) -->
<skip />
@@ -1657,12 +1665,11 @@
<string name="date_time_set" msgid="5777075614321087758">"Definir"</string>
<!-- no translation found for date_time_done (2507683751759308828) -->
<skip />
- <string name="default_permission_group" msgid="2690160991405646128">"Standard"</string>
<!-- no translation found for perms_new_perm_prefix (8257740710754301407) -->
<skip />
+ <!-- no translation found for perms_description_app (5139836143293299417) -->
+ <skip />
<string name="no_permissions" msgid="7283357728219338112">"Naginas permissiuns obligatoricas"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Zuppentar"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Mussar tut"</b></string>
<!-- no translation found for usb_storage_activity_title (4465055157209648641) -->
<skip />
<string name="usb_storage_title" msgid="5901459041398751495">"Connectà cun agid d\'in cabel USB"</string>
@@ -2062,4 +2069,8 @@
<skip />
<!-- no translation found for SetupCallDefault (5834948469253758575) -->
<skip />
+ <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <skip />
+ <!-- no translation found for activity_resolver_use_once (405646673463328329) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml
index 602236d..963b676 100644
--- a/core/res/res/values-ro/strings.xml
+++ b/core/res/res/values-ro/strings.xml
@@ -168,76 +168,55 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Mesajele dvs."</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Citire şi scriere mesaje SMS, e-mailuri şi alte mesaje."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Informaţiile dvs. personale"</string>
- <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
- <skip />
- <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
- <skip />
- <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
- <skip />
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Acces direct la informaţii despre dvs., stocate pe cartea de vizită."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Informaţiile dvs. sociale"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Acces direct la informaţii despre persoanele de contact şi conexiunile dvs. sociale."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Locaţia dvs."</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Monitorizează locaţia dvs. fizică."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Comunicare în reţea"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Accesează diferite funcţii ale reţelei."</string>
- <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <!-- no translation found for permgrouplab_bluetoothNetwork (1585403544162128109) -->
<skip />
- <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <!-- no translation found for permgroupdesc_bluetoothNetwork (5625288577164282391) -->
<skip />
- <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <!-- no translation found for permgrouplab_shortrangeNetwork (130808676377486118) -->
<skip />
- <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) -->
<skip />
- <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Setările audio"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Modifică setările audio."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Capacitatea de a afecta bateria"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Utilizează funcţii care pot consuma rapid bateria."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Calendarul"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Acces direct la calendar şi la evenimente."</string>
+ <!-- no translation found for permgrouplab_dictionary (4148597128843641379) -->
<skip />
- <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <!-- no translation found for permgroupdesc_dictionary (7921166355964764490) -->
<skip />
- <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <!-- no translation found for permgrouplab_writeDictionary (8090237702432576788) -->
<skip />
- <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) -->
<skip />
- <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
- <skip />
- <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
- <skip />
- <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
- <skip />
- <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
- <skip />
- <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
- <skip />
- <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
- <skip />
- <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
- <skip />
- <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
- <skip />
- <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
- <skip />
- <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
- <skip />
- <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
- <skip />
- <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
- <skip />
- <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
- <skip />
- <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
- <skip />
- <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
- <skip />
- <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
- <skip />
- <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
- <skip />
- <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
- <skip />
- <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
- <skip />
- <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
- <skip />
- <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
- <skip />
- <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
- <skip />
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Marcajele şi Istoricul"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Acces direct la marcaje şi la istoricul navigării."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Alarma"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Setează ceasul cu alarmă."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Mesageria vocală"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Acces direct la mesageria vocală."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Microfonul"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Acces direct la microfon pentru înregistrări audio."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Camera foto"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Acces direct la camera foto pentru a realiza fotografii şi videoclipuri."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Informaţiile despre aplicaţiile dvs."</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Capacitatea de a influenţa comportamentul altor aplicaţii de pe dispozitiv."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Imaginea de fundal"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Modifică setările pentru imaginea de fundal a dispozitivului."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Ceasul"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Modifică ora sau fusul orar ale dispozitivului."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Bara de stare"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Modifică setările pentru bara de stare a dispozitivului."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Setările de sincronizare"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Acces la setările de sincronizare."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Conturile dvs."</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Accesează conturile disponibile."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Controale hardware"</string>
@@ -248,10 +227,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Acces şi control de nivel redus ale sistemului."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Instrumente de dezvoltare"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Funcţii necesare doar pentru dezvoltatorii de aplicaţii."</string>
- <!-- no translation found for permgrouplab_display (4279909676036402636) -->
- <skip />
- <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
- <skip />
+ <string name="permgrouplab_display" msgid="4279909676036402636">"Interfaţa de utilizare a altor aplicaţii"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Influenţează interfaţa de utilizare a altor aplicaţii."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Stocare"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Accesează stocarea USB."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Accesează cardul SD."</string>
@@ -592,7 +569,8 @@
<string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Permite aplic. să citească conţin. stoc. USB, care poate include fotogr. şi media."</string>
<string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Permite aplicaţiei să citească conţinutul cardului SD, care poate include fotografii şi conţinut media."</string>
<string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"modifică sau şterge conţinutul stocării USB"</string>
- <string name="permlab_sdcardWrite" product="default" msgid="9084476432661578751">"modifică sau şterge conţinutul cardului SD"</string>
+ <!-- no translation found for permlab_sdcardWrite (8805693630050458763) -->
+ <skip />
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Permite scriere în stoc. USB."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Permite aplicaţiei să scrie pe cardul SD."</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"modif./şterg. conţinutul media stocat intern"</string>
@@ -770,8 +748,7 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"Telefonul nu are card SIM."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Introduceţi un card SIM."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"Cardul SIM lipseşte sau nu poate fi citit. Introduceţi un card SIM."</string>
- <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
- <skip />
+ <string name="lockscreen_permanent_disabled_sim_message_short" msgid="5096149665138916184">"Card SIM inutilizabil."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"Cardul dvs. SIM este dezactivat definitiv."\n" Contactaţi furnizorul de servicii wireless pentru a obţine un alt card SIM."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Butonul Melodia anterioară"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Butonul Melodia următoare"</string>
@@ -1112,11 +1089,10 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Setaţi data"</string>
<string name="date_time_set" msgid="5777075614321087758">"Setaţi"</string>
<string name="date_time_done" msgid="2507683751759308828">"Terminat"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"Prestabilit"</string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"NOU: "</font></string>
+ <!-- no translation found for perms_description_app (5139836143293299417) -->
+ <skip />
<string name="no_permissions" msgid="7283357728219338112">"Nu se solicită nicio permisiune"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Ascundeţi"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Afişaţi-le pe toate"</b></string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"Stocare masivă USB"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB conectat"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"V-aţi conectat la computer prin USB. Atingeţi butonul de mai jos dacă doriţi să copiaţi fişiere de pe computer pe stocarea USB Android sau invers."</string>
@@ -1345,4 +1321,8 @@
<string name="sending" msgid="3245653681008218030">"Se trimite..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Lansaţi browserul?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Acceptaţi apelul?"</string>
+ <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <skip />
+ <!-- no translation found for activity_resolver_use_once (405646673463328329) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml
index b9e8e77..04163ee 100644
--- a/core/res/res/values-ru/strings.xml
+++ b/core/res/res/values-ru/strings.xml
@@ -168,76 +168,55 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Сообщения"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Чтение и запись SMS, электронных писем и других сообщений."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Личная информация"</string>
- <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
- <skip />
- <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
- <skip />
- <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
- <skip />
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Прямой доступ к моим контактным данным."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Информация о моих социальных контактах"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Прямой доступ к информации о моих контактах и социальных связях."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Ваше местоположение"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Приложение сможет отслеживать ваше местоположение."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Сетевой обмен данными"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Приложение сможет получать доступ к различным сетевым функциям."</string>
- <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <!-- no translation found for permgrouplab_bluetoothNetwork (1585403544162128109) -->
<skip />
- <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <!-- no translation found for permgroupdesc_bluetoothNetwork (5625288577164282391) -->
<skip />
- <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <!-- no translation found for permgrouplab_shortrangeNetwork (130808676377486118) -->
<skip />
- <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) -->
<skip />
- <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Настройки звука"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Изменение настроек звука."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Воздействие на батарею"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Использование функций, приводящих к быстрой разрядке батареи."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Календарь"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Прямой доступ к календарю и мероприятиям."</string>
+ <!-- no translation found for permgrouplab_dictionary (4148597128843641379) -->
<skip />
- <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <!-- no translation found for permgroupdesc_dictionary (7921166355964764490) -->
<skip />
- <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <!-- no translation found for permgrouplab_writeDictionary (8090237702432576788) -->
<skip />
- <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) -->
<skip />
- <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
- <skip />
- <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
- <skip />
- <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
- <skip />
- <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
- <skip />
- <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
- <skip />
- <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
- <skip />
- <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
- <skip />
- <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
- <skip />
- <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
- <skip />
- <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
- <skip />
- <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
- <skip />
- <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
- <skip />
- <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
- <skip />
- <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
- <skip />
- <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
- <skip />
- <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
- <skip />
- <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
- <skip />
- <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
- <skip />
- <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
- <skip />
- <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
- <skip />
- <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
- <skip />
- <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
- <skip />
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Закладки и история"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Прямой доступ к закладкам и истории браузера."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Будильник"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Настройка будильника."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Голосовая почта"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Прямой доступ к голосовой почте."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Микрофон"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Прямой доступ к микрофону для записи звука."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Камера"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Прямой доступ к камере для фото- и видеосъемки."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Информация о приложениях"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Возможность влиять на поведение других приложений на устройстве."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Обои"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Изменение настроек обоев на устройстве."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Часы"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Изменение времени или часового пояса на устройстве."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Строка состояния"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Изменение настроек строки состояния для устройства."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Настройки синхронизации"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Доступ к настройкам синхронизации."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Ваши аккаунты"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Доступ к имеющимся аккаунтам."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Управление оборудованием"</string>
@@ -248,10 +227,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Доступ нижнего уровня и управление системой."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Инструменты разработки"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Функции, предназначенные для разработчиков приложений."</string>
- <!-- no translation found for permgrouplab_display (4279909676036402636) -->
- <skip />
- <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
- <skip />
+ <string name="permgrouplab_display" msgid="4279909676036402636">"Интерфейс других приложений"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Воздействие на интерфейс других приложений."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Память"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Доступ к USB-накопителю."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Доступ к SD-карте."</string>
@@ -592,7 +569,8 @@
<string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Приложение сможет считывать содержимое USB-накопителя, включая фото и файлы мультимедиа."</string>
<string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Приложение сможет считывать содержимое SD-карты, включая фото и файлы мультимедиа."</string>
<string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"Изменение или удаление содержимого USB-накопителя"</string>
- <string name="permlab_sdcardWrite" product="default" msgid="9084476432661578751">"Изменение или удаление содержимого SD-карты"</string>
+ <!-- no translation found for permlab_sdcardWrite (8805693630050458763) -->
+ <skip />
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Приложение сможет записывать данные на USB-накопитель."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Приложение сможет записывать данные на SD-карту."</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"изм./удал. данных мультимедиа"</string>
@@ -770,8 +748,7 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"SIM-карта не установлена."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Вставьте SIM-карту."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"SIM-карта отсутствует или недоступна. Вставьте SIM-карту."</string>
- <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
- <skip />
+ <string name="lockscreen_permanent_disabled_sim_message_short" msgid="5096149665138916184">"SIM-карта непригодна к использованию."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"SIM-карта окончательно заблокирована."\n"Чтобы получить новую, обратитесь к своему оператору."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Кнопка перехода к предыдущему треку"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Кнопка перехода к следующему треку"</string>
@@ -1112,11 +1089,10 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Настройка даты"</string>
<string name="date_time_set" msgid="5777075614321087758">"Установить"</string>
<string name="date_time_done" msgid="2507683751759308828">"Готово"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"По умолчанию"</string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"НОВОЕ: "</font></string>
+ <!-- no translation found for perms_description_app (5139836143293299417) -->
+ <skip />
<string name="no_permissions" msgid="7283357728219338112">"Не требуется разрешений"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Скрыть"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Показать все"</b></string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"Запоминающее устройство USB"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB-подключение установлено"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Устройство подключено к компьютеру через USB-порт. Нажмите кнопку ниже, чтобы скопировать файлы с компьютера на USB-накопитель Android-устройства."</string>
@@ -1345,4 +1321,8 @@
<string name="sending" msgid="3245653681008218030">"Отправка..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Запустить браузер?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Ответить?"</string>
+ <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <skip />
+ <!-- no translation found for activity_resolver_use_once (405646673463328329) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml
index 005988c..fff419d 100644
--- a/core/res/res/values-sk/strings.xml
+++ b/core/res/res/values-sk/strings.xml
@@ -168,76 +168,55 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Vaše správy"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Čítanie a písanie správ SMS, e-mailov a ďalších správ."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Vaše osobné informácie"</string>
- <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
- <skip />
- <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
- <skip />
- <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
- <skip />
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Priamy prístup k informáciám o vás uložených na vašej karte kontaktu."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Vaše sociálne informácie"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Priamy prístup k informáciám o vašich kontaktoch a sociálnych prepojeniach."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Vaša poloha"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Sledovanie vašej fyzickej polohy."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Sieťová komunikácia"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Prístup k rôznym funkciám siete."</string>
- <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <!-- no translation found for permgrouplab_bluetoothNetwork (1585403544162128109) -->
<skip />
- <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <!-- no translation found for permgroupdesc_bluetoothNetwork (5625288577164282391) -->
<skip />
- <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <!-- no translation found for permgrouplab_shortrangeNetwork (130808676377486118) -->
<skip />
- <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) -->
<skip />
- <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Nastavenia zvuku"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Zmena nastavení zvuku."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Má vplyv na batériu"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Používanie funkcií, ktoré môžu rýchlo vyčerpať batériu."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Kalendár"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Priamy prístup ku kalendáru a udalostiam."</string>
+ <!-- no translation found for permgrouplab_dictionary (4148597128843641379) -->
<skip />
- <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <!-- no translation found for permgroupdesc_dictionary (7921166355964764490) -->
<skip />
- <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <!-- no translation found for permgrouplab_writeDictionary (8090237702432576788) -->
<skip />
- <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) -->
<skip />
- <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
- <skip />
- <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
- <skip />
- <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
- <skip />
- <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
- <skip />
- <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
- <skip />
- <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
- <skip />
- <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
- <skip />
- <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
- <skip />
- <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
- <skip />
- <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
- <skip />
- <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
- <skip />
- <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
- <skip />
- <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
- <skip />
- <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
- <skip />
- <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
- <skip />
- <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
- <skip />
- <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
- <skip />
- <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
- <skip />
- <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
- <skip />
- <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
- <skip />
- <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
- <skip />
- <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
- <skip />
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Záložky a história"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Priamy prístup k záložkám a histórii prehliadača."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Budík"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Nastavenie budíka."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Hlasová schránka"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Priamy prístup do hlasovej schránky."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Mikrofón"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Priamy prístup k mikrofónu na záznam zvuku."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Fotoaparát"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Priamy prístup k fotoaparátu na nasnímanie fotografií alebo natočenie videí."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Informácie o vašich aplikáciách"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Schopnosť ovplyvniť správanie ďalších aplikácií na vašom zariadení."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Tapeta"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Zmena nastavení tapety zariadenia."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Hodiny"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Zmena času a časového pásma zariadenia."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Stavový riadok"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Zmena nastavení stavového riadka zariadenia."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Nastavenia synchronizácie"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Prístup do nastavení synchronizácie."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Vaše účty"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Prístup k dostupným účtom."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Ovládanie hardvéru"</string>
@@ -248,10 +227,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Nízkoúrovňový prístup a ovládanie systému."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Nástroje pre vývoj"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Funkcie len pre vývojárov aplikácií."</string>
- <!-- no translation found for permgrouplab_display (4279909676036402636) -->
- <skip />
- <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
- <skip />
+ <string name="permgrouplab_display" msgid="4279909676036402636">"Používateľské rozhranie iných aplikácií"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Vplyv na používateľské rozhranie ďalších aplikácií."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Ukladací priestor"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Prístup do ukl. priestoru USB."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Prístup na kartu SD."</string>
@@ -592,7 +569,8 @@
<string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Umožňuje aplikácii čítať obsah úložiska USB, ktorý môže obsahovať fotografie a mediálne údaje."</string>
<string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Umožňuje aplikácii čítať obsah karty SD, ktorý môže zahrnovať fotografie a mediálne údaje."</string>
<string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"upraviť alebo odstrániť obsah úložiska USB"</string>
- <string name="permlab_sdcardWrite" product="default" msgid="9084476432661578751">"upraviť alebo odstrániť obsah karty SD"</string>
+ <!-- no translation found for permlab_sdcardWrite (8805693630050458763) -->
+ <skip />
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Umožňuje aplikácii zápis do ukladacieho priestoru USB."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Umožňuje aplikácii zápis na kartu SD."</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"úprava alebo odstránenie obsahu interného ukladacieho priestoru média"</string>
@@ -770,8 +748,7 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"V telefóne nie je žiadna karta SIM."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Vložte kartu SIM."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"Karta SIM chýba alebo sa z nej nedá čítať. Vložte kartu SIM."</string>
- <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
- <skip />
+ <string name="lockscreen_permanent_disabled_sim_message_short" msgid="5096149665138916184">"Karta SIM je nepoužiteľná."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"Vaša karta SIM bola natrvalo zakázaná."\n"Ak chcete získať inú kartu SIM, kontaktujte svojho operátora."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Tlačidlo Predchádzajúca stopa"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Tlačidlo Ďalšia stopa"</string>
@@ -1112,11 +1089,10 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Nastaviť dátum"</string>
<string name="date_time_set" msgid="5777075614321087758">"Nastaviť"</string>
<string name="date_time_done" msgid="2507683751759308828">"Hotovo"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"Predvolené"</string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"NOVINKA: "</font></string>
+ <!-- no translation found for perms_description_app (5139836143293299417) -->
+ <skip />
<string name="no_permissions" msgid="7283357728219338112">"Nevyžadujú sa žiadne oprávnenia."</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Skryť"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Zobraziť všetky"</b></string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"Veľkokapacitné úložisko USB"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"Zariadenie USB pripojené"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Zariadenie ste pripojili k počítaču pomocou portu USB. Ak chcete kopírovať súbory z počítača do ukladacieho priestoru USB v zariadení so systémom Android alebo naopak, dotknite sa tlačidla nižšie."</string>
@@ -1345,4 +1321,8 @@
<string name="sending" msgid="3245653681008218030">"Odosielanie..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Spustiť prehliadač?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Prijať hovor?"</string>
+ <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <skip />
+ <!-- no translation found for activity_resolver_use_once (405646673463328329) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml
index 693cdc3..df0ddea 100644
--- a/core/res/res/values-sl/strings.xml
+++ b/core/res/res/values-sl/strings.xml
@@ -168,76 +168,55 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Vaša sporočila"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Pisanje in branje SMS-ov, e-pošte in drugih sporočil."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Osebni podatki"</string>
- <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
- <skip />
- <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
- <skip />
- <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
- <skip />
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Neposreden dostop do podatkov o vas, shranjenih v vizitki."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Podatki v družabnih omrežjih"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Neposreden dostop do podatkov o stikih in družabnih povezav."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Vaša lokacija"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Spremljanje fizične lokacije."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Omrežna komunikacija"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Dostop do različnih funkcij omrežja."</string>
- <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <!-- no translation found for permgrouplab_bluetoothNetwork (1585403544162128109) -->
<skip />
- <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <!-- no translation found for permgroupdesc_bluetoothNetwork (5625288577164282391) -->
<skip />
- <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <!-- no translation found for permgrouplab_shortrangeNetwork (130808676377486118) -->
<skip />
- <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) -->
<skip />
- <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Nastavitve zvoka"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Spreminjanje nastavitev zvoka."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Vpliv na baterijo"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Uporaba funkcij, ki lahko hitro izpraznijo baterijo."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Google Koledar"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Neposreden dostop do koledarja in dogodkov."</string>
+ <!-- no translation found for permgrouplab_dictionary (4148597128843641379) -->
<skip />
- <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <!-- no translation found for permgroupdesc_dictionary (7921166355964764490) -->
<skip />
- <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <!-- no translation found for permgrouplab_writeDictionary (8090237702432576788) -->
<skip />
- <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) -->
<skip />
- <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
- <skip />
- <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
- <skip />
- <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
- <skip />
- <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
- <skip />
- <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
- <skip />
- <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
- <skip />
- <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
- <skip />
- <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
- <skip />
- <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
- <skip />
- <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
- <skip />
- <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
- <skip />
- <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
- <skip />
- <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
- <skip />
- <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
- <skip />
- <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
- <skip />
- <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
- <skip />
- <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
- <skip />
- <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
- <skip />
- <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
- <skip />
- <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
- <skip />
- <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
- <skip />
- <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
- <skip />
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Zaznamki in zgodovina"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Neposreden dostop do zaznamkov in zgodovine brskalnika."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Alarm"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Nastavitev budilke."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Odzivnik"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Neposreden dostop do odzivnika."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Mikrofon"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Neposreden dostop do mikrofona za snemanje zvoka."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Fotoaparat"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Neposreden dostop do fotoaparata za fotografiranje ali snemanje videoposnetkov."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Podatki o vaših aplikacijah"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Zmožnost vpliva na delovanje drugih aplikacij v napravi."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Slika za ozadje"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Spreminjanje nastavitev slike za ozadje."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Ura"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Sprememba časa ali časovnega pasu naprave."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Vrstica stanja"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Spreminjanje nastavitev vrstice stanja naprave."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Nastavitve sinhronizacije"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Dostop do sinhronizacijskih nastavitev."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Vaši računi"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Dostop do razpoložljivih računov."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Kontrolniki strojne opreme"</string>
@@ -248,10 +227,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Dostop nižje ravni in nadzor sistema."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Razvojna orodja"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Funkcije, ki jih potrebujejo le razvijalci programa."</string>
- <!-- no translation found for permgrouplab_display (4279909676036402636) -->
- <skip />
- <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
- <skip />
+ <string name="permgrouplab_display" msgid="4279909676036402636">"Uporabniški vmesnik druge aplikacije"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Vpliv na uporabniški vmesnik drugih aplikacij."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Prostor za shranjevanje"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Dostop do pomnilnika USB."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Dostop do kartice SD."</string>
@@ -592,7 +569,8 @@
<string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Apl. om. br. USB s fot. in pr."</string>
<string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Omogoča, da aplikacija bere vsebino kartice SD, ki lahko vključuje fotografije in predstavnost."</string>
<string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"spr. ali bris. vseb. pomn. USB"</string>
- <string name="permlab_sdcardWrite" product="default" msgid="9084476432661578751">"spreminjanje ali brisanje vsebine kartice SD"</string>
+ <!-- no translation found for permlab_sdcardWrite (8805693630050458763) -->
+ <skip />
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Programu omogoča zapisovanje v pomnilnik USB."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Programu omogoča pisanje na kartico SD."</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"spreminjanje/brisanje vsebine notranje shrambe nosilca podatkov"</string>
@@ -770,8 +748,7 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"V telefonu ni kartice SIM."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Vstavite kartico SIM."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"Ni kartice SIM ali je ni mogoče prebrati. Vstavite kartico SIM."</string>
- <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
- <skip />
+ <string name="lockscreen_permanent_disabled_sim_message_short" msgid="5096149665138916184">"Neuporabna kartica SIM."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"Kartica SIM je trajno onemogočena."\n" Če želite dobiti drugo kartico SIM, se obrnite na ponudnika brezžičnih storitev."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Gumb za prejšnjo skladbo"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Gumb za naslednjo skladbo"</string>
@@ -1112,11 +1089,10 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Nastavi datum"</string>
<string name="date_time_set" msgid="5777075614321087758">"Nastavi"</string>
<string name="date_time_done" msgid="2507683751759308828">"Končano"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"Privzeto"</string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"NOVO: "</font></string>
+ <!-- no translation found for perms_description_app (5139836143293299417) -->
+ <skip />
<string name="no_permissions" msgid="7283357728219338112">"Ni zahtevanih dovoljenj"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Skrij"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Pokaži vse"</b></string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"Masovni pomnilnik USB"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"Povezava USB je vzpostavljena"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Z računalnikom ste vzpostavili povezavo z USB-jem. Dotaknite se spodnjega gumba, če želite kopirati datoteke med računalnikom in pomnilnikom USB v Androidu."</string>
@@ -1345,4 +1321,8 @@
<string name="sending" msgid="3245653681008218030">"Pošiljanje ..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Ali želite odpreti brskalnik?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Ali želite sprejeti klic?"</string>
+ <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <skip />
+ <!-- no translation found for activity_resolver_use_once (405646673463328329) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml
index 0bef1e3..5573607 100644
--- a/core/res/res/values-sr/strings.xml
+++ b/core/res/res/values-sr/strings.xml
@@ -168,76 +168,55 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Поруке"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Читање и писање SMS порука, порука е-поште и осталих порука."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Личне информације"</string>
- <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
- <skip />
- <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
- <skip />
- <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
- <skip />
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Директан приступ информацијама о вама, ускладиштеним на контакт картици."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Информације са друштвених мрежа"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Директан приступ информацијама о контактима и друштвеним везама."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Локација"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Надгледајте своју физичку локацију."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Комуникација преко мреже"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Приступајте разним функцијама мреже."</string>
- <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <!-- no translation found for permgrouplab_bluetoothNetwork (1585403544162128109) -->
<skip />
- <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <!-- no translation found for permgroupdesc_bluetoothNetwork (5625288577164282391) -->
<skip />
- <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <!-- no translation found for permgrouplab_shortrangeNetwork (130808676377486118) -->
<skip />
- <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) -->
<skip />
- <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Аудио подешавања"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Промена аудио подешавања."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Утицај на батерију"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Коришћење функција које могу брзо да истроше батерију."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Календар"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Директан приступ календару и догађајима."</string>
+ <!-- no translation found for permgrouplab_dictionary (4148597128843641379) -->
<skip />
- <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <!-- no translation found for permgroupdesc_dictionary (7921166355964764490) -->
<skip />
- <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <!-- no translation found for permgrouplab_writeDictionary (8090237702432576788) -->
<skip />
- <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) -->
<skip />
- <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
- <skip />
- <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
- <skip />
- <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
- <skip />
- <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
- <skip />
- <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
- <skip />
- <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
- <skip />
- <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
- <skip />
- <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
- <skip />
- <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
- <skip />
- <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
- <skip />
- <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
- <skip />
- <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
- <skip />
- <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
- <skip />
- <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
- <skip />
- <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
- <skip />
- <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
- <skip />
- <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
- <skip />
- <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
- <skip />
- <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
- <skip />
- <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
- <skip />
- <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
- <skip />
- <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
- <skip />
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Обележивачи и историја"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Директан приступ обележивачима и историји прегледача."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Аларм"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Подешавање будилника."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Говорна пошта"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Директан приступ говорној пошти."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Микрофон"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Директан приступ микрофону за снимање звука."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Камера"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Директан приступ камери за снимање слика или видео снимака."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Информације о апликацијама"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Способност да се утиче на понашање других апликација на уређају."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Позадина"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Промена подешавања позадине уређаја."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Сат"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Промена времена или временске зоне уређаја."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Статусна трака"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Промена подешавања статусне траке уређаја."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Подешавања синхронизације"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Приступ подешавањима синхронизације."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Налози"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Приступ доступним налозима."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Контроле хардвера"</string>
@@ -248,10 +227,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Нижи нивои приступа и контроле система."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Алатке за програмирање"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Функције потребне само програмерима апликација."</string>
- <!-- no translation found for permgrouplab_display (4279909676036402636) -->
- <skip />
- <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
- <skip />
+ <string name="permgrouplab_display" msgid="4279909676036402636">"Кориснички интерфејс других апликација"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Утицај на кориснички интерфејс других апликација."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Складиште"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Приступите USB меморији."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Приступ SD картици."</string>
@@ -589,10 +566,11 @@
<string name="permdesc_writeDictionary" msgid="8185385716255065291">"Дозвољава апликацији да уписује нове речи у кориснички речник."</string>
<string name="permlab_sdcardRead" product="nosdcard" msgid="367275095159405468">"читање садржаја USB меморије"</string>
<string name="permlab_sdcardRead" product="default" msgid="2188156462934977940">"читање садржаја SD картице"</string>
- <string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Дозвољава апликацији читање садржаја USB меморије, што могу да буду слике и медији."</string>
- <string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Дозвољава апликацији да чита садржај SD картице, који може да обухвата слике и медијуме."</string>
+ <string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Дозвољава апликацији читање садржаја USB меморије, што могу да буду слике и медиа датотеке."</string>
+ <string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Дозвољава апликацији да чита садржај SD картице, који може да обухвата слике и медиа датотеке."</string>
<string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"измена или брисање садржаја USB меморије"</string>
- <string name="permlab_sdcardWrite" product="default" msgid="9084476432661578751">"измена или брисање садржаја SD картице"</string>
+ <!-- no translation found for permlab_sdcardWrite (8805693630050458763) -->
+ <skip />
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Дозвољава апликацији да уписује податке на USB меморију."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Дозвољава апликацији да уписује податке на SD картицу."</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"измена/брисање интерне меморије медија"</string>
@@ -770,8 +748,7 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"У телефон није уметнута SIM картица."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Уметните SIM картицу."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"SIM недостаје или не може да се прочита. Уметните SIM картицу."</string>
- <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
- <skip />
+ <string name="lockscreen_permanent_disabled_sim_message_short" msgid="5096149665138916184">"SIM картица је неупотребљива."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"SIM картица је трајно онемогућена."\n" Обратите се добављачу услуге бежичне мреже да бисте добили другу SIM картицу."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Дугме за претходну песму"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Дугме за следећу песму"</string>
@@ -1112,11 +1089,10 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Подешавање датума"</string>
<string name="date_time_set" msgid="5777075614321087758">"Подеси"</string>
<string name="date_time_done" msgid="2507683751759308828">"Готово"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"Подразумевано"</string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"НОВО: "</font></string>
+ <!-- no translation found for perms_description_app (5139836143293299417) -->
+ <skip />
<string name="no_permissions" msgid="7283357728219338112">"Није потребна ниједна дозвола"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Сакриј"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Прикажи све"</b></string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"USB великог капацитета"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB је повезан"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Повезали сте рачунар преко USB-а. Додирните дугме испод ако желите да копирате датотеке са рачунара у Android USB меморију и обрнуто."</string>
@@ -1345,4 +1321,8 @@
<string name="sending" msgid="3245653681008218030">"Слање..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Желите ли да покренете прегледач?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Желите ли да прихватите позив?"</string>
+ <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <skip />
+ <!-- no translation found for activity_resolver_use_once (405646673463328329) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml
index 7f2b2c9..5bce25a 100644
--- a/core/res/res/values-sv/strings.xml
+++ b/core/res/res/values-sv/strings.xml
@@ -168,76 +168,55 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Dina meddelanden"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Läsa och skriva SMS, e-post och andra meddelanden."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Dina personliga uppgifter"</string>
- <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
- <skip />
- <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
- <skip />
- <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
- <skip />
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Direktåtkomst till information om dig som lagras på ditt kontaktkort."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Dina sociala uppgifter"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Direktåtkomst till information om dina kontakter och sociala kontakter."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Din plats"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Övervaka din fysiska plats."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Nätverkskommunikation"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Åtkomst till olika nätverksfunktioner."</string>
- <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <!-- no translation found for permgrouplab_bluetoothNetwork (1585403544162128109) -->
<skip />
- <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <!-- no translation found for permgroupdesc_bluetoothNetwork (5625288577164282391) -->
<skip />
- <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <!-- no translation found for permgrouplab_shortrangeNetwork (130808676377486118) -->
<skip />
- <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) -->
<skip />
- <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Ljudinställningar"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Ändra ljudinställningar."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Påverkar batteriet"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Använda funktioner som gör att batteriet tar slut snabbt."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Kalender"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Direktåtkomst till kalender och händelser."</string>
+ <!-- no translation found for permgrouplab_dictionary (4148597128843641379) -->
<skip />
- <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <!-- no translation found for permgroupdesc_dictionary (7921166355964764490) -->
<skip />
- <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <!-- no translation found for permgrouplab_writeDictionary (8090237702432576788) -->
<skip />
- <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) -->
<skip />
- <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
- <skip />
- <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
- <skip />
- <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
- <skip />
- <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
- <skip />
- <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
- <skip />
- <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
- <skip />
- <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
- <skip />
- <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
- <skip />
- <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
- <skip />
- <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
- <skip />
- <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
- <skip />
- <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
- <skip />
- <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
- <skip />
- <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
- <skip />
- <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
- <skip />
- <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
- <skip />
- <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
- <skip />
- <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
- <skip />
- <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
- <skip />
- <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
- <skip />
- <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
- <skip />
- <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
- <skip />
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Bokmärken och historik"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Direktåtkomst till bokmärken och webbläsarhistorik."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Larm"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Ställa alarmet."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Röstmeddelanden"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Direktåtkomst till röstbrevlådan."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Mikrofon"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Direktåtkomst till mikrofonen för att spela in ljud."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Kamera"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Direktåtkomst till kamera för att ta bilder eller spela in video."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Information i dina appar"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Kan påverka beteendet hos andra appar på enheten."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Bakgrund"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Ändra inställningarna för enhetens bakgrund."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Klocka"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Ändra tid eller tidszon i enheten."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Statusfält"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Ändra inställningarna för enhetens statusfält."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Synkroniseringsinställningar"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Åtkomst till synkroniseringsinställningarna."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Dina konton"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Få åtkomst till tillgängliga konton."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Kontroller för maskinvara"</string>
@@ -248,10 +227,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Åtkomst och kontroll av systemet på lägre nivå."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Utvecklingsverktyg"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Funktioner som endast behövs för apputvecklare."</string>
- <!-- no translation found for permgrouplab_display (4279909676036402636) -->
- <skip />
- <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
- <skip />
+ <string name="permgrouplab_display" msgid="4279909676036402636">"Gränssnitt i annan app"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Påverka gränssnittet i andra appar."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Lagring"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Få åtkomst till USB-enheten."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Få åtkomst till SD-kortet."</string>
@@ -592,7 +569,8 @@
<string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Tillåter att innehållet läses."</string>
<string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Tillåter att appen läser SD-kortets innehåll, inklusive eventuella bilder och media."</string>
<string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"ändra eller ta bort innehållet"</string>
- <string name="permlab_sdcardWrite" product="default" msgid="9084476432661578751">"ändra eller ta bort innehållet på SD-kortet"</string>
+ <!-- no translation found for permlab_sdcardWrite (8805693630050458763) -->
+ <skip />
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Gör att app skriver till USB."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Tillåter att appen skriver till SD-kortet."</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"ändra/ta bort innehåll"</string>
@@ -770,8 +748,7 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"Inget SIM-kort i telefonen."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Sätt i ett SIM-kort."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"SIM-kort saknas eller kan inte läsas. Sätt i ett SIM-kort."</string>
- <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
- <skip />
+ <string name="lockscreen_permanent_disabled_sim_message_short" msgid="5096149665138916184">"Oanvändbart SIM-kort."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"SIM-kortet har inaktiverats permanent."\n" Beställ ett nytt SIM-kort från din operatör."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Knapp för föregående spår"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Knapp för nästa spår"</string>
@@ -1112,11 +1089,10 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Ange datum"</string>
<string name="date_time_set" msgid="5777075614321087758">"Ställ in"</string>
<string name="date_time_done" msgid="2507683751759308828">"Klar"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"Standardinställning"</string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"NY: "</font></string>
+ <!-- no translation found for perms_description_app (5139836143293299417) -->
+ <skip />
<string name="no_permissions" msgid="7283357728219338112">"Inga behörigheter krävs"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Dölj"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Visa alla"</b></string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"USB-masslagring"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB-ansluten"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Du har anslutit enheten till datorn via USB. Tryck på knappen nedan om du vill kopiera filer mellan datorn och Android-enhetens USB-lagringsenhet."</string>
@@ -1345,4 +1321,8 @@
<string name="sending" msgid="3245653681008218030">"Skickar ..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Vill du öppna webbläsaren?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Vill du ta emot samtal?"</string>
+ <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <skip />
+ <!-- no translation found for activity_resolver_use_once (405646673463328329) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml
index 3ce4cd2..05732dc 100644
--- a/core/res/res/values-sw/strings.xml
+++ b/core/res/res/values-sw/strings.xml
@@ -168,76 +168,55 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Ujumbe wako"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Soma na kuandika SMS, barua pepe, na jumbe zako zingine."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Maelezo yako ya kibinafsi"</string>
- <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
- <skip />
- <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
- <skip />
- <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
- <skip />
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Kufikia moja kwa moja taarifa kukuhusu, iliyoakibishwa kwenye kadi yako ya anwani."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Taarifa yako ya kijamii"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Kufikia moja kwa moja taarifa kuhusu anwani zako na miunganisho ya kijamii."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Mahali pako"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Fuatilia eneo lako halisi."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Mawasiliano ya mtandao"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Fikia vipengele mbalimbali vya mtandao."</string>
- <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <!-- no translation found for permgrouplab_bluetoothNetwork (1585403544162128109) -->
<skip />
- <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <!-- no translation found for permgroupdesc_bluetoothNetwork (5625288577164282391) -->
<skip />
- <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <!-- no translation found for permgrouplab_shortrangeNetwork (130808676377486118) -->
<skip />
- <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) -->
<skip />
- <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Mipangilio ya Sauti"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Badilisha mipangilio ya sauti."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Huathiri Betri"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Tumia vipengele vinaweza kumaliza betri haraka."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Kalenda"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Kufikia moja kwa moja kalenda na matukio."</string>
+ <!-- no translation found for permgrouplab_dictionary (4148597128843641379) -->
<skip />
- <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <!-- no translation found for permgroupdesc_dictionary (7921166355964764490) -->
<skip />
- <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <!-- no translation found for permgrouplab_writeDictionary (8090237702432576788) -->
<skip />
- <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) -->
<skip />
- <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
- <skip />
- <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
- <skip />
- <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
- <skip />
- <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
- <skip />
- <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
- <skip />
- <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
- <skip />
- <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
- <skip />
- <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
- <skip />
- <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
- <skip />
- <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
- <skip />
- <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
- <skip />
- <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
- <skip />
- <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
- <skip />
- <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
- <skip />
- <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
- <skip />
- <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
- <skip />
- <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
- <skip />
- <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
- <skip />
- <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
- <skip />
- <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
- <skip />
- <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
- <skip />
- <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
- <skip />
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Vialamisho na Historia"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Kufikia moja kwa moja vialamisho na historia ya kivinjari"</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Kengele"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Weka saa ya kengele."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Barua ya sauti"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Fikia barua ya sauti moja kwa moja."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Kipokea sauti"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Kufikia moja kwa moja kipokea sauti ili kurekodi sauti."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Kamera"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Kufikia moja kwa moja kamera ya kunasa taswira au video."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Taarifa ya programu zako"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Uwezo wa kuathiri tabia ya programu nyingine kwenye kifaa chako."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Taswira"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Badilisha mipangilio taswira ya kifaa."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Saa"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Badilisha muda wa kifaa au ukanda wa saa."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Hali Upau"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Badilisha mipangilio ya upau wa hali ya kifaa."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Mipangilio ya Upatanishi"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Kufikia mipangilio ya upatanishi."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Akaunti zako"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Fikia akaunti zinazopatikana."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Vidhibiti vya maunzi"</string>
@@ -248,10 +227,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Ufikiaji wa kiwango cha chini na udhibiti wa mfumo."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Zana za utengenezaji"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Vipengee vinahitajika tu na wasinidi wa programu."</string>
- <!-- no translation found for permgrouplab_display (4279909676036402636) -->
- <skip />
- <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
- <skip />
+ <string name="permgrouplab_display" msgid="4279909676036402636">"Programu Nyingine ya UI"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Ruhusu UI ya programu nyungine."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Hifadhi"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Fikia hifadhi ya USB."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Fikia kadi ya SD."</string>
@@ -263,9 +240,9 @@
<string name="permdesc_expandStatusBar" msgid="6917549437129401132">"Inaruhusu programu kupanua au kukunja upau wa hali."</string>
<string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"panga upya simu zinazotoka"</string>
<string name="permdesc_processOutgoingCalls" msgid="1152111671618301044">"Inaruhusu programu kuchakata simu zinazotoka na kubadilisha nambari itakayopigwa. Programu hasidi zinaweza kufuatilia, kuelekeza kwingine, au kuzuia simu zinazotoka."</string>
- <string name="permlab_receiveSms" msgid="8673471768947895082">"pokea jumbe za matini (SMS)"</string>
+ <string name="permlab_receiveSms" msgid="8673471768947895082">"pokea jumbe za maandishi (SMS)"</string>
<string name="permdesc_receiveSms" msgid="8107887121893611793">"Inaruhusu programu kupokea na kuchakata jumbe za SMS. Programu hasidi zinaweza kufuatilia jumbe zako au kuzifuta bila kukuonyesha."</string>
- <string name="permlab_receiveMms" msgid="1821317344668257098">"pokea jumbe za matini (MMS)"</string>
+ <string name="permlab_receiveMms" msgid="1821317344668257098">"pokea jumbe za maandishi (MMS)"</string>
<string name="permdesc_receiveMms" msgid="1424805308566612086">"Inaruhusu programu kupokea na kuchakata jumbe za MMS. Programu hasidi zinaweza kufuatilia jumbe zako au kuzifuta bila kukuonyesha."</string>
<string name="permlab_receiveEmergencyBroadcast" msgid="1803477660846288089">"Pokea matangazo ya dharura"</string>
<string name="permdesc_receiveEmergencyBroadcast" msgid="848524070262431974">"Inaruhusu programu kupokea na kuchakata jumbe za dharura. Ruhusa hii inapatikana tu kwa programu za mfumo."</string>
@@ -275,13 +252,13 @@
<string name="permdesc_sendSms" msgid="906546667507626156">"Inaruhusu programu kutuma jumbe za SMS. Programu hasidi zinaweza kukugharimu fedha kwa kutuma jumbe bila uthibitisho wako."</string>
<string name="permlab_sendSmsNoConfirmation" msgid="4781483105951730228">"Tuma ujumbe wa SMS bila ya thibitisho"</string>
<string name="permdesc_sendSmsNoConfirmation" msgid="3437759207020400204">"Huruhusu programu kutuma jumbe wa SMS. Programu hasidi huenda zikakugharimu pesa kwa kutuma jumbe bila uthibitisho wako."</string>
- <string name="permlab_readSms" msgid="8745086572213270480">"soma jumbe zako za matini (SMS au MMS)"</string>
+ <string name="permlab_readSms" msgid="8745086572213270480">"soma jumbe zako za maandishi (SMS au MMS)"</string>
<string name="permdesc_readSms" product="tablet" msgid="2341692916884515613">"Inaruhusu programu kusoma jumbe za SMS zilizohifadhiwa kwenye kompyuta kibao au SIM kadi yako. Programu hasidi zinaweza kusoma jumbe zako za siri."</string>
<string name="permdesc_readSms" product="default" msgid="5653850482025875493">"Inaruhusu programu kusoma jumbe za SMS zilizohifadiwa kwenye simu ya au SIM kadi. Programu hasidi zinaweza kusoma jumbe zako za siri."</string>
- <string name="permlab_writeSms" msgid="3216950472636214774">"Hariri jumbe zako za matini (SMS au MMS)"</string>
+ <string name="permlab_writeSms" msgid="3216950472636214774">"Hariri jumbe zako za maandishi (SMS au MMS)"</string>
<string name="permdesc_writeSms" product="tablet" msgid="5160413947794501538">"Inaruhusu programu kuandikia jumbe za SMS zinazohifadhiwa kwenye kompyuta yako kibao au SIM kadi. Programu hasidi zinaweza kufuta jumbe zako."</string>
<string name="permdesc_writeSms" product="default" msgid="7268668709052328567">"Inaruhusu programu kuandika jumbe za SMS zinazohifadhiwa kwenye simu yako au SIM kadi. programu hasidi zinaweza kufuta ujumbe zako."</string>
- <string name="permlab_receiveWapPush" msgid="5991398711936590410">"pokea jumbe za matini (WAP)"</string>
+ <string name="permlab_receiveWapPush" msgid="5991398711936590410">"pokea jumbe za maandishi (WAP)"</string>
<string name="permdesc_receiveWapPush" msgid="7983455145335316872">"Inaruhusu programu kupokea na kuchakata jumbe za WAP. Programu hasidi zinaweza kufuatilia jumbe zako au kuzifuta bila kukuonyesha."</string>
<string name="permlab_getTasks" msgid="6466095396623933906">"rudisha programu zinazoendeshwa"</string>
<string name="permdesc_getTasks" msgid="6608159250520381359">"Inaruhusu programu kupata taarifa kuhusu kazi zinazoendelea sasa na hivi karibuni. Programu hasidi zinaweza kugundua taarifa ya kibinafsi kuhusu programu zingine."</string>
@@ -537,7 +514,7 @@
<string name="permdesc_getAccounts" product="default" msgid="2735689364629830348">"Inaruhusu programu kupata orodha ya akaunti zinazojulikana na simu."</string>
<string name="permlab_authenticateAccounts" msgid="5265908481172736933">"unda akaunti na weka manenosiri"</string>
<string name="permdesc_authenticateAccounts" msgid="5472124296908977260">"Inaruhusu programu kutumia uwezo wa uthibitishaji akaunti wa KidhibitiAkaunti, pamoja na kuunda akaunti na kupata na kuweka nywila zao."</string>
- <string name="permlab_manageAccounts" msgid="4983126304757177305">"ongeza au ondoa akaunti"</string>
+ <string name="permlab_manageAccounts" msgid="4983126304757177305">"ongeza au uondoe akaunti"</string>
<string name="permdesc_manageAccounts" msgid="8698295625488292506">"Inaruhusu programu kutekeleza shughuli kama vile kuongeza na kutoa akaunti, na kufuta manenosiri yazo."</string>
<string name="permlab_useCredentials" msgid="235481396163877642">"tumia akaunti kwenye kifaa"</string>
<string name="permdesc_useCredentials" msgid="7984227147403346422">"Inaruhusu programu kuomba shuhuda za uthibitisho."</string>
@@ -571,7 +548,7 @@
<string name="permdesc_bluetooth" product="default" msgid="31846362767164948">"Inaruhusu programu kuangalia usanidi wa simu ya karibu ya Bluetooth, na kufanya na kukubali miunganisho na vifaa vilivyolinganishwa."</string>
<string name="permlab_nfc" msgid="4423351274757876953">"dhibiti Mawasiliano Karibu na Uga"</string>
<string name="permdesc_nfc" msgid="7120611819401789907">"Inaruhusu programu kuwasiliana na lebo, kadi na wasomaji wa Near Field Communication (NFC)."</string>
- <string name="permlab_disableKeyguard" msgid="3598496301486439258">"lemaza kufuli lako la skrini"</string>
+ <string name="permlab_disableKeyguard" msgid="3598496301486439258">"lemaza kufuli la skrini yako"</string>
<string name="permdesc_disableKeyguard" msgid="6231611286892232626">"Inaruhusu programu kulemaza kifunga kitufe na usalama wowote unaohusishwa na nenosiri. Mfano halisi wa hii ni simu kulemaza kifunga kitufe wakati wa kupokea simu inayoingia, kisha kuwezesha upya kifunga kitufe simu inapomalizika."</string>
<string name="permlab_readSyncSettings" msgid="6201810008230503052">"soma mipangilio ya usawazishaji"</string>
<string name="permdesc_readSyncSettings" msgid="5464056785274229278">"Inaruhusu programu kusoma mipangilio ya ulandanishi, kama vile ikiwa ulandanishi imewezeshwa kwa programu ya Watu."</string>
@@ -583,16 +560,17 @@
<string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Inaruhusu programu kupata maelezo kuhusu mlisho iliyolandanishwa kwa sasa."</string>
<string name="permlab_subscribedFeedsWrite" msgid="9015246325408209296">"andika milisho ya kujiunga"</string>
<string name="permdesc_subscribedFeedsWrite" msgid="6928930188826089413">"Inaruhusu programu kurekebisha milisho yako iliyolandanishwa kwa sasa. Programu hasidi zinaweza kubadilisha milisho yako iliyolandanishwa."</string>
- <string name="permlab_readDictionary" msgid="4107101525746035718">"soma sheria ulizoongeza kwenye kamusi"</string>
+ <string name="permlab_readDictionary" msgid="4107101525746035718">"soma maneno uliyoongeza kwenye kamusi"</string>
<string name="permdesc_readDictionary" msgid="8977815988329283705">"Inaruhusu programu kusoma maneno, majina na vifungu vyovyote vya kibinafsi, ambavyo huenda mtumiaji amehifadhi katika kamusi ya mtumiaji."</string>
<string name="permlab_writeDictionary" msgid="2296383164914812772">"andika kwa kamusi iliyobainishwa na mtumiaji"</string>
<string name="permdesc_writeDictionary" msgid="8185385716255065291">"Inaruhusu programu kuandika maneno mapya katika kamusi ya mtumiaji."</string>
<string name="permlab_sdcardRead" product="nosdcard" msgid="367275095159405468">"soma maudhui ya hifadhi yako ya USB"</string>
<string name="permlab_sdcardRead" product="default" msgid="2188156462934977940">"soma maudhui ya kadi yako ya SD"</string>
<string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Huruhusu programu kusoma maudhui ya hifadhi ya USB, ambayo huenda ikajumuisha picha na midia."</string>
- <string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Huruhusu programu kusoma maudhui ya kadi ya SD, ambayo huenda ikajumuisha picha na midia."</string>
- <string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"rekebisha au futa maudhui ya hifadhi yako ya USB"</string>
- <string name="permlab_sdcardWrite" product="default" msgid="9084476432661578751">"rekebisha au futa maudhui ya kadi yako ya SD"</string>
+ <string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Huruhusu programu kusoma maudhui ya kadi ya SD, ambayo huenda yakajumuisha picha na midia."</string>
+ <string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"rekebisha au ufute maudhui ya hifadhi yako ya USB"</string>
+ <!-- no translation found for permlab_sdcardWrite (8805693630050458763) -->
+ <skip />
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Inaruhusu programu kuandikia hifadhi ya USB."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Inaruhusu programu kuandikia kadi ya SD."</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"badilisha/futa maudhui ya hifadhi ya media ya ndani."</string>
@@ -770,8 +748,7 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"Hakuna SIM kadi kwenye simu."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Ingiza SIM kadi."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"Kadi ya SIM haiko au haisomeki. Tafadhali ingiza SIM kadi."</string>
- <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
- <skip />
+ <string name="lockscreen_permanent_disabled_sim_message_short" msgid="5096149665138916184">"Kadi ya SIM isiyotumika."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"SIM kadi yako imelemezwa kabisa."\n" Wasiliana na mtoa huduma wako wa pasi waya ili upate SIM kadi nyingine."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Kitufe cha awali cha wimbo"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Kitufe cha wimbo unaofuata"</string>
@@ -847,7 +824,7 @@
<string name="autofill_parish" msgid="8202206105468820057">"Mtaa"</string>
<string name="autofill_area" msgid="3547409050889952423">"Eneo"</string>
<string name="autofill_emirate" msgid="2893880978835698818">"Emirate"</string>
- <string name="permlab_readHistoryBookmarks" msgid="3775265775405106983">"soma alamisho na historia ya Wavuti yako"</string>
+ <string name="permlab_readHistoryBookmarks" msgid="3775265775405106983">"soma alamisho na historia ya Wavuti wako"</string>
<string name="permdesc_readHistoryBookmarks" msgid="4577476392604595921">"Inaruhusu programu kusoma URL zote ambazo Kivinjari kimetembelea, na alamisho zote za Kivinjari."</string>
<string name="permlab_writeHistoryBookmarks" msgid="3714785165273314490">"andika alamisho na historia ya wavuti"</string>
<string name="permdesc_writeHistoryBookmarks" product="tablet" msgid="1757103804824209530">"Inaruhusu programu kurekebisha historia ya Kivinjari au alamisho zilizohifadhiwa katika kompyuta yako kibao. Programu hasidi zinaweza kutumia hii kufuta au kurekebisha data ya Kivinjari chako."</string>
@@ -1112,11 +1089,10 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Weka tarehe"</string>
<string name="date_time_set" msgid="5777075614321087758">"Weka"</string>
<string name="date_time_done" msgid="2507683751759308828">"Imekamilika"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"Chaguo-msingi"</string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">" MPYA: "</font></string>
+ <!-- no translation found for perms_description_app (5139836143293299417) -->
+ <skip />
<string name="no_permissions" msgid="7283357728219338112">"Hakuna vibali vinavyohitajika"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Ficha"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Onyesha zote"</b></string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"Hifadhi kubwa ya USB"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB imeunganishwa"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Umeunganisha kwenye kompyuta yako kupitia USB. Gusa kitufe hapa chini kama unataka kunakili faili kati ya kompyuta yako na hifadhi yako ya USB ya Android."</string>
@@ -1345,4 +1321,8 @@
<string name="sending" msgid="3245653681008218030">"Inatuma…"</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Zindua Kivinjari?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Kubali simu?"</string>
+ <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <skip />
+ <!-- no translation found for activity_resolver_use_once (405646673463328329) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-sw600dp-land/arrays.xml b/core/res/res/values-sw600dp-land/arrays.xml
index 6304bc0..6a09cf8 100644
--- a/core/res/res/values-sw600dp-land/arrays.xml
+++ b/core/res/res/values-sw600dp-land/arrays.xml
@@ -57,14 +57,14 @@
<array name="lockscreen_targets_with_camera">
<item>@drawable/ic_lockscreen_unlock</item>
- <item>@null</item>
+ <item>@drawable/ic_lockscreen_search</item>
<item>@drawable/ic_lockscreen_camera</item>
<item>@null</item>
</array>
<array name="lockscreen_target_descriptions_with_camera">
<item>@string/description_target_unlock</item>
- <item>@null</item>
+ <item>@string/description_target_search</item>
<item>@string/description_target_camera</item>
<item>@null</item>
</array>
diff --git a/core/res/res/values-sw600dp-w1024dp/dimens.xml b/core/res/res/values-sw600dp-w1024dp/dimens.xml
deleted file mode 100644
index 4d6a4da..0000000
--- a/core/res/res/values-sw600dp-w1024dp/dimens.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2011 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>
- <!-- Increase size (used to be 0 for dual pane -->
- <!-- Preference activity side margins -->
- <dimen name="preference_screen_side_margin">48dp</dimen>
- <!-- Preference activity side margins negative-->
- <dimen name="preference_screen_side_margin_negative">-52dp</dimen>
-</resources>
diff --git a/tools/localize/testdata/res/values-zz-rZZ/strings.xml b/core/res/res/values-sw600dp-w960dp/dimens.xml
similarity index 71%
rename from tools/localize/testdata/res/values-zz-rZZ/strings.xml
rename to core/res/res/values-sw600dp-w960dp/dimens.xml
index c2a783d..724904e 100644
--- a/tools/localize/testdata/res/values-zz-rZZ/strings.xml
+++ b/core/res/res/values-sw600dp-w960dp/dimens.xml
@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2007 The Android Open Source Project
+<!-- Copyright (C) 2011 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.
@@ -14,9 +14,8 @@
limitations under the License.
-->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="changed_in_xx">AAAA</string>
- <string name="previously_translated">CCC</string>
+<resources>
+ <dimen name="preference_screen_header_padding_side">48dp</dimen>
+ <!-- Preference fragment padding, sides -->
+ <dimen name="preference_fragment_padding_side">48dp</dimen>
</resources>
-
-
diff --git a/core/res/res/values-sw600dp/bools.xml b/core/res/res/values-sw600dp/bools.xml
index 92b6171..b8db31f 100644
--- a/core/res/res/values-sw600dp/bools.xml
+++ b/core/res/res/values-sw600dp/bools.xml
@@ -15,6 +15,5 @@
-->
<resources>
- <bool name="preferences_prefer_dual_pane">true</bool>
<bool name="target_honeycomb_needs_options_menu">false</bool>
</resources>
diff --git a/core/res/res/values-sw600dp/config.xml b/core/res/res/values-sw600dp/config.xml
index 7fa7658..b54e9d1 100644
--- a/core/res/res/values-sw600dp/config.xml
+++ b/core/res/res/values-sw600dp/config.xml
@@ -35,5 +35,10 @@
<!-- If true, the screen can be rotated via the accelerometer in all 4
rotations as the default behavior. -->
<bool name="config_allowAllRotations">true</bool>
+
+ <!-- Maximum number of grid columns permitted in the ResolverActivity
+ used for picking activities to handle an intent. -->
+ <integer name="config_maxResolverActivityColumns">3</integer>
+
</resources>
diff --git a/core/res/res/values-sw600dp/dimens.xml b/core/res/res/values-sw600dp/dimens.xml
index f8f865e..61136e3 100644
--- a/core/res/res/values-sw600dp/dimens.xml
+++ b/core/res/res/values-sw600dp/dimens.xml
@@ -47,12 +47,6 @@
<!-- Size of status line font in LockScreen. -->
<dimen name="keyguard_pattern_unlock_status_line_font_size">14sp</dimen>
- <!-- Preference activity, vertical padding for the header list -->
- <dimen name="preference_screen_header_vertical_padding">32dp</dimen>
- <dimen name="preference_screen_side_margin">0dp</dimen>
- <!-- Compensate for double margin : preference_screen_side_margin + 4 (frame background shadow) = -preference_screen_side_margin_negative -->
- <dimen name="preference_screen_side_margin_negative">-4dp</dimen>
-
<!-- Default padding to apply to AppWidgetHostViews containing widgets targeting API level 14 and up. -->
<dimen name="default_app_widget_padding_left">12dp</dimen>
<dimen name="default_app_widget_padding_top">4dp</dimen>
@@ -78,5 +72,9 @@
<!-- Height of the bottom navigation bar in portrait; on sw600dp devices
this is a bit taller -->
<dimen name="navigation_bar_height_portrait">56dp</dimen>
+
+ <!-- Preference fragment padding, sides -->
+ <dimen name="preference_fragment_padding_side">24dp</dimen>
+ <dimen name="preference_screen_header_padding_side">24dip</dimen>
</resources>
diff --git a/core/res/res/values-sw600dp/styles.xml b/core/res/res/values-sw600dp/styles.xml
index f9e95b7..7dea9b8 100644
--- a/core/res/res/values-sw600dp/styles.xml
+++ b/core/res/res/values-sw600dp/styles.xml
@@ -25,12 +25,4 @@
<item name="android:measureWithLargestChild">true</item>
<item name="android:tabLayout">@android:layout/tab_indicator_holo</item>
</style>
-
- <style name="PreferencePanel">
- <item name="android:layout_marginLeft">@dimen/preference_screen_side_margin</item>
- <item name="android:layout_marginRight">@dimen/preference_screen_side_margin</item>
- <item name="android:layout_marginTop">@dimen/preference_screen_top_margin</item>
- <item name="android:layout_marginBottom">@dimen/preference_screen_bottom_margin</item>
- <item name="android:background">?attr/detailsElementBackground</item>
- </style>
</resources>
diff --git a/core/res/res/values-sw600dp-w1280dp/dimens.xml b/core/res/res/values-sw720dp-w1280dp/dimens.xml
similarity index 100%
rename from core/res/res/values-sw600dp-w1280dp/dimens.xml
rename to core/res/res/values-sw720dp-w1280dp/dimens.xml
diff --git a/tools/localize/testdata/merge_xx_old.xml b/core/res/res/values-sw720dp/bools.xml
similarity index 72%
rename from tools/localize/testdata/merge_xx_old.xml
rename to core/res/res/values-sw720dp/bools.xml
index 9d3a7d8..7d5813f 100644
--- a/tools/localize/testdata/merge_xx_old.xml
+++ b/core/res/res/values-sw720dp/bools.xml
@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2007 The Android Open Source Project
+<!-- Copyright (C) 2012 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.
@@ -14,8 +14,6 @@
limitations under the License.
-->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="changed_in_xx">aaa</string>
- <string name="previously_translated">CCC</string>
+<resources>
+ <bool name="preferences_prefer_dual_pane">true</bool>
</resources>
-
diff --git a/tools/localize/testdata/merge_xx_old.xml b/core/res/res/values-sw720dp/config.xml
similarity index 69%
copy from tools/localize/testdata/merge_xx_old.xml
copy to core/res/res/values-sw720dp/config.xml
index 9d3a7d8..9792835 100644
--- a/tools/localize/testdata/merge_xx_old.xml
+++ b/core/res/res/values-sw720dp/config.xml
@@ -1,21 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2007 The Android Open Source Project
+<!-- Copyright (C) 2012 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>
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="changed_in_xx">aaa</string>
- <string name="previously_translated">CCC</string>
+ <!-- Maximum number of grid columns permitted in the ResolverActivity
+ used for picking activities to handle an intent. -->
+ <integer name="config_maxResolverActivityColumns">4</integer>
+
</resources>
-
diff --git a/core/res/res/values-sw720dp/dimens.xml b/core/res/res/values-sw720dp/dimens.xml
index bbbfaae..34c7ea3 100644
--- a/core/res/res/values-sw720dp/dimens.xml
+++ b/core/res/res/values-sw720dp/dimens.xml
@@ -34,6 +34,36 @@
(the screen is in landscape). This may be either a fraction or a dimension.-->
<item type="dimen" name="dialog_fixed_height_minor">90%</item>
+ <!-- The width that is used when creating thumbnails of applications. -->
+ <dimen name="thumbnail_width">230dp</dimen>
+ <!-- The height that is used when creating thumbnails of applications. -->
+ <dimen name="thumbnail_height">135dp</dimen>
+
+ <!-- Preference activity, vertical padding for the header list -->
+ <dimen name="preference_screen_header_vertical_padding">32dp</dimen>
+ <dimen name="preference_screen_side_margin">0dp</dimen>
+ <!-- Compensate for double margin : preference_screen_side_margin + 4 (frame background shadow) = -preference_screen_side_margin_negative -->
+ <dimen name="preference_screen_side_margin_negative">-4dp</dimen>
+
+ <!-- Preference fragment padding, bottom -->
+ <dimen name="preference_fragment_padding_bottom">16dp</dimen>
+ <dimen name="preference_screen_header_padding_side">0dip</dimen>
+ <integer name="preference_screen_header_scrollbarStyle">0x0</integer> <!-- insideOverlay -->
+
+ <!-- Preference fragment padding, sides -->
+ <dimen name="preference_fragment_padding_side">32dp</dimen>
+ <!-- Padding to the left of the preference panel breadcrumb -->
+ <dimen name="preference_breadcrumb_paddingLeft">32dp</dimen>
+ <!-- Padding to the right of the preference panel breadcrumb -->
+ <dimen name="preference_breadcrumb_paddingRight">32dp</dimen>
+ <!-- Weight of the left pane in a multi-pane preference layout. -->
+ <integer name="preferences_left_pane_weight">1</integer>
+ <!-- Weight of the right pane in a multi-pane preference layout. So the split is 1:2 -->
+ <integer name="preferences_right_pane_weight">2</integer>
+ <!-- Minimum space to allocate to the left of a preference item for an icon.
+ This helps in aligning titles when some items have icons and some don't. When space is
+ at a premium, we don't pre-allocate any space. -->
+ <dimen name="preference_icon_minWidth">56dp</dimen>
</resources>
diff --git a/core/res/res/values-sw720dp/styles.xml b/core/res/res/values-sw720dp/styles.xml
new file mode 100644
index 0000000..640e898
--- /dev/null
+++ b/core/res/res/values-sw720dp/styles.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2012 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>
+ <style name="PreferencePanel">
+ <item name="android:layout_marginLeft">@dimen/preference_screen_side_margin</item>
+ <item name="android:layout_marginRight">@dimen/preference_screen_side_margin</item>
+ <item name="android:layout_marginTop">@dimen/preference_screen_top_margin</item>
+ <item name="android:layout_marginBottom">@dimen/preference_screen_bottom_margin</item>
+ <item name="android:background">?attr/detailsElementBackground</item>
+ </style>
+</resources>
diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml
index 48b8bc5..c47a3ac 100644
--- a/core/res/res/values-th/strings.xml
+++ b/core/res/res/values-th/strings.xml
@@ -168,76 +168,55 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"ข้อความของคุณ"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"อ่านและเขียน SMS อีเมล และข้อความอื่นๆ ของคุณ"</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"ข้อมูลส่วนบุคคลของคุณ"</string>
- <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
- <skip />
- <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
- <skip />
- <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
- <skip />
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"เข้าถึงข้อมูลเกี่ยวกับคุณซึ่งจัดเก็บไว้ในบัตรผู้ติดต่อของคุณได้โดยตรง"</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"ข้อมูลทางสังคมของคุณ"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"เข้าถึงข้อมูลเกี่ยวกับผู้ติดต่อและเครือข่ายสังคมของคุณโดยตรง"</string>
<string name="permgrouplab_location" msgid="635149742436692049">"ตำแหน่งของคุณ"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"ตรวจดูตำแหน่งทางกายภาพของคุณ"</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"การสื่อสารของเครือข่าย"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"เข้าถึงคุณลักษณะเครือข่ายต่างๆ"</string>
- <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <!-- no translation found for permgrouplab_bluetoothNetwork (1585403544162128109) -->
<skip />
- <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <!-- no translation found for permgroupdesc_bluetoothNetwork (5625288577164282391) -->
<skip />
- <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <!-- no translation found for permgrouplab_shortrangeNetwork (130808676377486118) -->
<skip />
- <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) -->
<skip />
- <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"การตั้งค่าเสียง"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"เปลี่ยนการตั้งค่าเสียง"</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"มีผลต่อแบตเตอรี่"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"ใช้คุณลักษณะที่ทำให้พลังงานแบตเตอรี่ลดลงอย่างรวดเร็ว"</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"ปฏิทิน"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"เข้าถึงปฏิทินและกิจกรรมโดยตรง"</string>
+ <!-- no translation found for permgrouplab_dictionary (4148597128843641379) -->
<skip />
- <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <!-- no translation found for permgroupdesc_dictionary (7921166355964764490) -->
<skip />
- <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <!-- no translation found for permgrouplab_writeDictionary (8090237702432576788) -->
<skip />
- <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) -->
<skip />
- <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
- <skip />
- <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
- <skip />
- <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
- <skip />
- <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
- <skip />
- <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
- <skip />
- <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
- <skip />
- <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
- <skip />
- <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
- <skip />
- <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
- <skip />
- <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
- <skip />
- <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
- <skip />
- <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
- <skip />
- <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
- <skip />
- <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
- <skip />
- <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
- <skip />
- <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
- <skip />
- <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
- <skip />
- <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
- <skip />
- <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
- <skip />
- <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
- <skip />
- <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
- <skip />
- <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
- <skip />
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"บุ๊กมาร์กและประวัติ"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"เข้าถึงบุ๊กมาร์กและประวัติของเบราว์เซอร์โดยตรง"</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"เตือน"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"ตั้งนาฬิกาปลุก"</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"ข้อความเสียง"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"เข้าถึงข้อความเสียงโดยตรง"</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"ไมโครโฟน"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"เข้าถึงไมโครโฟนเพื่อบันทึกเสียงโดยตรง"</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"กล้องถ่ายรูป"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"เข้าถึงกล้องถ่ายรูปเพื่อดูภาพและวิดีโอที่ถ่ายไว้โดยตรง"</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"ข้อมูลแอปพลิเคชันของคุณ"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"สามารถส่งผลต่อการทำงานของแอปพลิเคชันอื่นในอุปกรณ์ของคุณ"</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"วอลเปเปอร์"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"เปลี่ยนการตั้งค่าวอลเปเปอร์ของอุปกรณ์"</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"นาฬิกา"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"เปลี่ยนเวลาหรือเขตเวลาของอุปกรณ์"</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"แถบสถานะ"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"เปลี่ยนการตั้งค่าแถบสถานะของอุปกรณ์"</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"การตั้งค่าการซิงค์"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"เข้าถึงการตั้งค่าการซิงค์"</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"บัญชีของคุณ"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"เข้าถึงบัญชีที่ใช้งานได้"</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"การควบคุมฮาร์ดแวร์"</string>
@@ -248,10 +227,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"การเข้าถึงและควบคุมของระบบในระดับต่ำ"</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"เครื่องมือในการพัฒนา"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"คุณลักษณะที่จำเป็นสำหรับนักพัฒนาแอปพลิเคชันเท่านั้น"</string>
- <!-- no translation found for permgrouplab_display (4279909676036402636) -->
- <skip />
- <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
- <skip />
+ <string name="permgrouplab_display" msgid="4279909676036402636">"UI แอปพลิเคชันอื่นๆ"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"ส่งผลต่อ UI ของแอปพลิเคชันอื่น"</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"พื้นที่เก็บข้อมูล"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"เข้าถึงที่เก็บข้อมูล USB"</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"เข้าถึงการ์ด SD"</string>
@@ -592,7 +569,8 @@
<string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"อนุญาตให้แอปอ่านเนื้อหาในที่จัดเก็บข้อมูล USB ซึ่งอาจรวมไปถึงรูปภาพและสื่อ"</string>
<string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"อนุญาตให้แอปอ่านเนื้อหาในการ์ด SD ซึ่งอาจรวมไปถึงรูปภาพและสื่อ"</string>
<string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"แก้ไขหรือลบเนื้อหาใน USB"</string>
- <string name="permlab_sdcardWrite" product="default" msgid="9084476432661578751">"แก้ไขหรือลบเนื้อหาในการ์ด SD ของคุณ"</string>
+ <!-- no translation found for permlab_sdcardWrite (8805693630050458763) -->
+ <skip />
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"อนุญาตให้แอปฯ เขียนลงใน USB"</string>
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"อนุญาตให้แอปพลิเคชันเขียนลงบนการ์ด SD"</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"แก้/ลบเนื้อหาข้อมูลสื่อภายใน"</string>
@@ -770,8 +748,7 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"ไม่มีซิมการ์ดในโทรศัพท์"</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"ใส่ซิมการ์ด"</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"ไม่มีซิมการ์ดหรือไม่สามารถอ่านได้ โปรดใส่ซิมการ์ด"</string>
- <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
- <skip />
+ <string name="lockscreen_permanent_disabled_sim_message_short" msgid="5096149665138916184">"ซิมการ์ดใช้ไม่ได้"</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"ซิมการ์ดของคุณถูกปิดใช้งานอย่างถาวร"\n"ติดต่อผู้ให้บริการไร้สายของคุณเพื่อรับซิมการ์ดอีกอันหนึ่ง"</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"ปุ่มแทร็กก่อนหน้า"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"ปุ่มแทร็กถัดไป"</string>
@@ -1112,11 +1089,10 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"ตั้งวันที่"</string>
<string name="date_time_set" msgid="5777075614321087758">"ตั้งค่า"</string>
<string name="date_time_done" msgid="2507683751759308828">"เสร็จสิ้น"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"เริ่มต้น"</string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"ใหม่: "</font></string>
+ <!-- no translation found for perms_description_app (5139836143293299417) -->
+ <skip />
<string name="no_permissions" msgid="7283357728219338112">"ไม่ต้องการการอนุญาต"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"ซ่อน"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"แสดงทั้งหมด"</b></string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"ที่จัดเก็บข้อมูลจำนวนมากแบบ USB"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"เชื่อมต่อ USB แล้ว"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"คุณได้เชื่อมต่อกับคอมพิวเตอร์ผ่าน USB แล้ว แตะปุ่มด้านล่างหากคุณต้องการคัดลอกไฟล์ระหว่างคอมพิวเตอร์กับที่จัดเก็บข้อมูล USB ของแอนดรอยด์"</string>
@@ -1345,4 +1321,8 @@
<string name="sending" msgid="3245653681008218030">"กำลังส่ง…"</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"เปิดเบราว์เซอร์หรือไม่"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"รับสายหรือไม่"</string>
+ <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <skip />
+ <!-- no translation found for activity_resolver_use_once (405646673463328329) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml
index 6c67aad..006fa63 100644
--- a/core/res/res/values-tl/strings.xml
+++ b/core/res/res/values-tl/strings.xml
@@ -168,76 +168,55 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Iyong mga mensahe"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Basahin at isulat ang iyong SMS, e-mail, at iba pang mga mensahe."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Iyong personal na impormasyon"</string>
- <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
- <skip />
- <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
- <skip />
- <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
- <skip />
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Direktang access sa impormasyon tungkol sa iyo, na naka-imbak sa iyong contact card."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Ang iyong social na impormasyon"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Direktang access sa impormasyon tungkol sa iyong mga contact at social na koneksyon."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Iyong lokasyon"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Subaybayan ang iyong pisikal na lokasyon."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Pakikipag-ugnay sa network"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Mag-access ng iba\'t ibang mga tampok ng network."</string>
- <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <!-- no translation found for permgrouplab_bluetoothNetwork (1585403544162128109) -->
<skip />
- <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <!-- no translation found for permgroupdesc_bluetoothNetwork (5625288577164282391) -->
<skip />
- <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <!-- no translation found for permgrouplab_shortrangeNetwork (130808676377486118) -->
<skip />
- <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) -->
<skip />
- <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Mga Setting ng Audio"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Baguhin ang mga setting ng audio."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Naaapektuhan ang Baterya"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Gumamit ng mga tampok na mabilisang uubos ng baterya."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Kalendaryo"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Direktang access sa kalendaryo at mga kaganapan."</string>
+ <!-- no translation found for permgrouplab_dictionary (4148597128843641379) -->
<skip />
- <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <!-- no translation found for permgroupdesc_dictionary (7921166355964764490) -->
<skip />
- <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <!-- no translation found for permgrouplab_writeDictionary (8090237702432576788) -->
<skip />
- <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) -->
<skip />
- <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
- <skip />
- <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
- <skip />
- <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
- <skip />
- <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
- <skip />
- <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
- <skip />
- <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
- <skip />
- <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
- <skip />
- <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
- <skip />
- <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
- <skip />
- <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
- <skip />
- <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
- <skip />
- <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
- <skip />
- <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
- <skip />
- <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
- <skip />
- <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
- <skip />
- <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
- <skip />
- <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
- <skip />
- <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
- <skip />
- <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
- <skip />
- <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
- <skip />
- <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
- <skip />
- <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
- <skip />
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Mga Bookmark at Kasaysayan"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Direktang access sa mga bookmark at kasaysayan ng browser."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Alarm"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Itakda ang alarm clock."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Voicemail"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Direktang access sa voicemail."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Mikropono"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Direktang access sa mikropono upang mag-record ng audio."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Camera"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Direktang access sa camera para sa pagkuha ng larawan o video."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Ang impormasyon ng iyong mga application"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Kakayahang maapektuhan ang pag-uugali ng iba pang mga application sa iyong device."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Wallpaper"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Baguhin ang mga setting ng wallpaper ng device."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Orasan"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Baguhin ang oras o timezone ng device."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Status Bar"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Baguhin ang mga setting ng status bar ng device"</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Mga Setting ng Pag-sync"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Access sa mga setting ng pag-sync."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Iyong mga account"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"I-access ang mga available na account."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Mga kontrol ng hardware"</string>
@@ -248,10 +227,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Mas mababang antas na access at kontrol ng system."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Mga tool na pang-develop"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Kinakailangan lamang ang mga tampok para sa mga developer ng app."</string>
- <!-- no translation found for permgrouplab_display (4279909676036402636) -->
- <skip />
- <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
- <skip />
+ <string name="permgrouplab_display" msgid="4279909676036402636">"Iba pang UI ng Application"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Apektuhan ang UI ng iba pang mga application."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Imbakan"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"I-access ang imbakan na USB."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"I-access ang SD card."</string>
@@ -592,7 +569,8 @@
<string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Bigay-daan app basahin nilalaman ng USB storage, maaaring may mga larawan at media."</string>
<string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Binibigyang-daan aang app na basahin ang mga nilalaman ng SD card, na maaaring may mga larawan at media."</string>
<string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"bago tanggal laman USB storage"</string>
- <string name="permlab_sdcardWrite" product="default" msgid="9084476432661578751">"baguhin o tanggalin ang mga nilalaman ng iyong SD card"</string>
+ <!-- no translation found for permlab_sdcardWrite (8805693630050458763) -->
+ <skip />
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Pinapayagan ang app na magsulat sa USB storage."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Pinapayagan ang app na magsulat sa SD card."</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"baguhin/tanggalin ang mga nilalaman ng panloob na imbakan ng media"</string>
@@ -770,8 +748,7 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"Walang SIM card sa telepono."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Maglagay ng isang SIM card."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"Nawawala o hindi nababasa ang SIM card. Maglagay ng isang SIM card."</string>
- <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
- <skip />
+ <string name="lockscreen_permanent_disabled_sim_message_short" msgid="5096149665138916184">"Hindi nagagamit na SIM card."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"Ang iyong SIM card ay permanenteng hindi pinagana."\n" Makipag-ugnay sa iyong wireless service provider para sa isa pang SIM card."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Button na nakaraang track"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Button na Susunod na track"</string>
@@ -1112,11 +1089,10 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Itakda ang petsa"</string>
<string name="date_time_set" msgid="5777075614321087758">"Itakda"</string>
<string name="date_time_done" msgid="2507683751759308828">"Tapos na"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"Default"</string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"BAGO: "</font></string>
+ <!-- no translation found for perms_description_app (5139836143293299417) -->
+ <skip />
<string name="no_permissions" msgid="7283357728219338112">"Walang mga kinakailangang pahintulot"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Itago"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Ipakita lahat"</b></string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"USB mass storage"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"Nakakonekta ang USB"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Kumonekta ka sa iyong computer sa pamamagitan ng USB. Pindutin ang button sa ibaba kung gusto mong kumopya ng mga file sa pagitan ng iyong computer at USB storage ng iyong Android."</string>
@@ -1345,4 +1321,8 @@
<string name="sending" msgid="3245653681008218030">"Ipinapadala..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Ilunsad ang Browser?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Tanggapin ang tawag?"</string>
+ <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <skip />
+ <!-- no translation found for activity_resolver_use_once (405646673463328329) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml
index 833c143..c13c520 100644
--- a/core/res/res/values-tr/strings.xml
+++ b/core/res/res/values-tr/strings.xml
@@ -168,76 +168,55 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Mesajlarınız"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"SMS mesajlarınızı, e-posta iletilerinizi ve diğer mesajlarınızı okuyup yazma."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Kişisel bilgileriniz"</string>
- <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
- <skip />
- <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
- <skip />
- <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
- <skip />
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Sizinle ilgili, kişi kartınızda kayıtlı bilgilere doğrudan erişim."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Sosyal bilgileriniz"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Kişileriniz ve sosyal bağlantılarınızla ilgili bilgilere doğrudan erişim."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Konumunuz"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Fiziksel konumunuzu izleme."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Ağ iletişimi"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Çeşitli ağ özelliklerine erişme."</string>
- <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <!-- no translation found for permgrouplab_bluetoothNetwork (1585403544162128109) -->
<skip />
- <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <!-- no translation found for permgroupdesc_bluetoothNetwork (5625288577164282391) -->
<skip />
- <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <!-- no translation found for permgrouplab_shortrangeNetwork (130808676377486118) -->
<skip />
- <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) -->
<skip />
- <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Ses Ayarları"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Ses ayarlarını değiştirme."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Pili Etkileyenler"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Pili çok çabuk tüketebilen özellikleri kullanma."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Takvim"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Takvime ve etkinliklere doğrudan erişim."</string>
+ <!-- no translation found for permgrouplab_dictionary (4148597128843641379) -->
<skip />
- <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <!-- no translation found for permgroupdesc_dictionary (7921166355964764490) -->
<skip />
- <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <!-- no translation found for permgrouplab_writeDictionary (8090237702432576788) -->
<skip />
- <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) -->
<skip />
- <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
- <skip />
- <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
- <skip />
- <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
- <skip />
- <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
- <skip />
- <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
- <skip />
- <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
- <skip />
- <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
- <skip />
- <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
- <skip />
- <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
- <skip />
- <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
- <skip />
- <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
- <skip />
- <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
- <skip />
- <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
- <skip />
- <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
- <skip />
- <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
- <skip />
- <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
- <skip />
- <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
- <skip />
- <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
- <skip />
- <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
- <skip />
- <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
- <skip />
- <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
- <skip />
- <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
- <skip />
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Yer İşaretleri ve Geçmiş"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Yer işaretlerine ve tarayıcı geçmişine doğrudan erişim."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Alarm"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Alarm saatini ayarlama."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Sesli mesaj"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Sesli mesaja doğrudan erişim."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Mikrofon"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Ses kaydetmek için mikrofona doğrudan erişim."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Kamera"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Resim ve video kaydı için kameraya doğrudan erişim."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Uygulama bilgileriniz"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Cihazınızdaki diğer uygulamaların davranışlarını etkileyebilme."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Duvar Kağıdı"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Cihazın duvar kâğıdı ayarlarını değiştirme."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Saat"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Cihazın saatini ve saat dilimini değiştirme."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Durum Çubuğu"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Cihaz durumunun çubuk ayarlarını değiştirme."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Senkronizasyon Ayarları"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Senkronizasyon ayarlarına erişme."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Hesaplarınız"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Kullanılabilir hesaplara erişin."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Donanım denetimleri"</string>
@@ -248,10 +227,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Sisteme alt düzey erişim ve denetimi."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Geliştirme araçları"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Yalnızca uygulama geliştiriciler için gerekli özellikler."</string>
- <!-- no translation found for permgrouplab_display (4279909676036402636) -->
- <skip />
- <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
- <skip />
+ <string name="permgrouplab_display" msgid="4279909676036402636">"Diğer Uygulamaların Kullanıcı Arayüzü"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Diğer uygulamaların kullanıcı arayüzünü etkileme."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Depolama"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Payl depolama birimine erişin."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"SD karta erişin."</string>
@@ -592,7 +569,8 @@
<string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Uygulamaya USB depolamanın içeriğini okuma izni verir. Bu izin fotoğrafları ve medyayı da içerebilir."</string>
<string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Uygulamaya SD kartın içeriğini okuma izni verir. Bu izin fotoğrafları ve medyayı da içerebilir."</string>
<string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"USB depolamamın içeriğini değiştir veya sil"</string>
- <string name="permlab_sdcardWrite" product="default" msgid="9084476432661578751">"SD kartımın içeriğini değiştir veya sil"</string>
+ <!-- no translation found for permlab_sdcardWrite (8805693630050458763) -->
+ <skip />
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Uygulamaya USB depolama birimine yazma izni verir."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Uygulamaya, SD karta yazma izni verir."</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"dahili medya depolama birimi içeriğini değiştir/sil"</string>
@@ -770,8 +748,7 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"Telefonda SIM kart yok."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"SIM kartı takın."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"SIM kart yok veya okunamıyor. Bir SIM kart takın."</string>
- <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
- <skip />
+ <string name="lockscreen_permanent_disabled_sim_message_short" msgid="5096149665138916184">"Kullanılamayan SIM kartı"</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"SIM kartınız kalıcı olarak devre dışı bırakıldı."\n" Başka bir SIM kart için kablosuz servis sağlayıcınıza başvurun."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Önceki parça düğmesi"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Sonraki parça düğmesi"</string>
@@ -1112,11 +1089,10 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Tarihi ayarla"</string>
<string name="date_time_set" msgid="5777075614321087758">"Ayarla"</string>
<string name="date_time_done" msgid="2507683751759308828">"Tamamlandı"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"Varsayılan"</string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"YENİ: "</font></string>
+ <!-- no translation found for perms_description_app (5139836143293299417) -->
+ <skip />
<string name="no_permissions" msgid="7283357728219338112">"İzin gerektirmez"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Gizle"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Tümünü göster"</b></string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"USB yığın depolama"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB bağlandı"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Cihazınızı USB ile bilgisayarınıza bağladınız. Bilgisayarınız ile Android\'inizin USB depolama birimi arasında dosya kopyalamak istiyorsanız aşağıdaki düğmeye dokunun."</string>
@@ -1345,4 +1321,8 @@
<string name="sending" msgid="3245653681008218030">"Gönderiliyor…"</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Tarayıcı Başlatılsın mı?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Çağrı kabul edilsin mi?"</string>
+ <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <skip />
+ <!-- no translation found for activity_resolver_use_once (405646673463328329) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml
index 76aa65a..0ad2da2 100644
--- a/core/res/res/values-uk/strings.xml
+++ b/core/res/res/values-uk/strings.xml
@@ -168,76 +168,55 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Ваші повідомл."</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Читати та писати в SMS, електронні листи й інші повідомлення."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Ваша особиста інформація"</string>
- <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
- <skip />
- <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
- <skip />
- <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
- <skip />
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Безпосередній доступ до інформації про вас, збереженої на вашій картці контакта."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Соціальна інформація"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Безпосередній доступ до інформації про ваші контакти та соціальні зв’язки."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Ваше місцезнаходження"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Відстежувати ваше фізичне місцезнаходження."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Підключення до мережі"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Отримувати доступ до різних функцій мережі."</string>
- <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <!-- no translation found for permgrouplab_bluetoothNetwork (1585403544162128109) -->
<skip />
- <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <!-- no translation found for permgroupdesc_bluetoothNetwork (5625288577164282391) -->
<skip />
- <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <!-- no translation found for permgrouplab_shortrangeNetwork (130808676377486118) -->
<skip />
- <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) -->
<skip />
- <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Налаштування звуку"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Зміна налаштувань звуку."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Заряд акумулятора"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Використання функцій, які швидко зменшують заряд акумулятора."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Календар"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Безпосередній доступ до календаря та подій."</string>
+ <!-- no translation found for permgrouplab_dictionary (4148597128843641379) -->
<skip />
- <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <!-- no translation found for permgroupdesc_dictionary (7921166355964764490) -->
<skip />
- <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <!-- no translation found for permgrouplab_writeDictionary (8090237702432576788) -->
<skip />
- <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) -->
<skip />
- <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
- <skip />
- <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
- <skip />
- <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
- <skip />
- <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
- <skip />
- <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
- <skip />
- <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
- <skip />
- <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
- <skip />
- <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
- <skip />
- <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
- <skip />
- <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
- <skip />
- <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
- <skip />
- <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
- <skip />
- <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
- <skip />
- <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
- <skip />
- <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
- <skip />
- <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
- <skip />
- <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
- <skip />
- <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
- <skip />
- <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
- <skip />
- <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
- <skip />
- <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
- <skip />
- <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
- <skip />
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Закладки й історія"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Безпосередній доступ до закладок та історії веб-переглядача."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Сигнал"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Налаштування сигналу будильника."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Голосова пошта"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Безпосередній доступ до голосової пошти."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Мікрофон"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Безпосередній доступ до мікрофона для запису звуку."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Камера"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Безпосередній доступ до камери для здійснення фото- чи відеозйомки."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Інформація про програми"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Здатність впливати на роботу інших програм на пристрої."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Фоновий малюнок"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Зміна налаштувань фонового малюнка пристрою."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Годинник"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Зміна часу чи часового поясу пристрою."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Рядок стану"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Зміна налаштувань рядка стану пристрою."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Налаштування синхронізації"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Доступ до налаштувань синхронізації."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Ваші облікові записи"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Доступ до доступних обл. записів."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Керув. апар. забезп."</string>
@@ -248,10 +227,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Контроль і доступ до системи на нижчому рівні."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Інструм. розробника"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Функції, потрібні лише для розробників програм."</string>
- <!-- no translation found for permgrouplab_display (4279909676036402636) -->
- <skip />
- <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
- <skip />
+ <string name="permgrouplab_display" msgid="4279909676036402636">"Інтерфейс іншої програми"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Вплив на інтерфейс інших програм."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Зберігання"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Отрим. доступу до носія USB."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Доступ до карти SD."</string>
@@ -592,7 +569,8 @@
<string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Дозволяє програмі читати вміст носія USB, що може включати фотографії й медіа-файли."</string>
<string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Дозволяє програмі читати вміст карти SD, що може включати фотографії й медіа-файли."</string>
<string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"змінювати чи видаляти вміст USB"</string>
- <string name="permlab_sdcardWrite" product="default" msgid="9084476432661578751">"змінювати чи видаляти зміст карти SD"</string>
+ <!-- no translation found for permlab_sdcardWrite (8805693630050458763) -->
+ <skip />
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Дозволяє програмі писати на носій USB"</string>
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Дозволяє програмі записувати на карту SD."</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"змінювати/видаляти вміст внутр. сховища даних"</string>
@@ -770,8 +748,7 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"У тел. немає SIM-карти."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Вставте SIM-карту."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"SIM-карта відсутня або недоступна для читання. Вставте SIM-карту."</string>
- <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
- <skip />
+ <string name="lockscreen_permanent_disabled_sim_message_short" msgid="5096149665138916184">"Непридатна SIM-карта."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"Вашу SIM-карту вимкнено назавжди."\n" Зверніться до свого постачальника послуг бездротового зв’язку, щоб отримати іншу SIM-карту."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Кнопка \"Попередня доріжка\""</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Кнопка \"Наступна доріжка\""</string>
@@ -1112,11 +1089,10 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Установити дату"</string>
<string name="date_time_set" msgid="5777075614321087758">"Застосувати"</string>
<string name="date_time_done" msgid="2507683751759308828">"Готово"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"За умовч."</string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"НОВИЙ: "</font></string>
+ <!-- no translation found for perms_description_app (5139836143293299417) -->
+ <skip />
<string name="no_permissions" msgid="7283357728219338112">"Дозвіл не потрібний"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Сховати"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Показ. всі"</b></string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"USB великої ємності"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"Підкл. через USB"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Ви під’єдналися до комп’ютера за допомогою USB. Торкніться кнопки нижче, якщо потрібно скопіювати файли з комп’ютера на носій USB вашого пристрою Android або навпаки."</string>
@@ -1345,4 +1321,8 @@
<string name="sending" msgid="3245653681008218030">"Надсилання…"</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Запустити веб-переглядач?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Прийняти виклик?"</string>
+ <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <skip />
+ <!-- no translation found for activity_resolver_use_once (405646673463328329) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml
index feb1543..192c1dc 100644
--- a/core/res/res/values-vi/strings.xml
+++ b/core/res/res/values-vi/strings.xml
@@ -168,76 +168,55 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Tin nhắn của bạn"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Đọc và soạn SMS, email và các tin nhắn khác của bạn."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Thông tin cá nhân của bạn"</string>
- <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
- <skip />
- <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
- <skip />
- <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
- <skip />
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Truy cập trực tiếp vào thông tin về bạn, được lưu trữ trên thẻ liên hệ của bạn."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Thông tin xã hội của bạn"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Truy cập trực tiếp vào thông tin về các địa chỉ liên hệ và các kết nối xã hội của bạn."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Vị trí của bạn"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Giám sát vị trí thực của bạn."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Kết nối mạng"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Truy cập các tính năng mạng khác nhau."</string>
- <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <!-- no translation found for permgrouplab_bluetoothNetwork (1585403544162128109) -->
<skip />
- <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <!-- no translation found for permgroupdesc_bluetoothNetwork (5625288577164282391) -->
<skip />
- <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <!-- no translation found for permgrouplab_shortrangeNetwork (130808676377486118) -->
<skip />
- <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) -->
<skip />
- <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Cài đặt âm thanh"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Thay đổi cài đặt âm thanh."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Ảnh hưởng tới pin"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Sử dụng các tính năng có thể làm nhanh hết pin."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Lịch"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Truy cập trực tiếp vào lịch và sự kiện."</string>
+ <!-- no translation found for permgrouplab_dictionary (4148597128843641379) -->
<skip />
- <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <!-- no translation found for permgroupdesc_dictionary (7921166355964764490) -->
<skip />
- <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <!-- no translation found for permgrouplab_writeDictionary (8090237702432576788) -->
<skip />
- <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) -->
<skip />
- <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
- <skip />
- <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
- <skip />
- <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
- <skip />
- <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
- <skip />
- <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
- <skip />
- <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
- <skip />
- <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
- <skip />
- <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
- <skip />
- <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
- <skip />
- <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
- <skip />
- <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
- <skip />
- <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
- <skip />
- <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
- <skip />
- <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
- <skip />
- <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
- <skip />
- <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
- <skip />
- <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
- <skip />
- <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
- <skip />
- <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
- <skip />
- <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
- <skip />
- <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
- <skip />
- <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
- <skip />
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Dấu trang và lịch sử"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Truy cập trực tiếp vào dấu trang và lịch sử trình duyệt."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Báo thức"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Đặt đồng hồ báo thức."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Thư thoại"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Truy cập trực tiếp vào thư thoại."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Micrô"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Truy cập trực tiếp vào micrô để ghi âm."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Máy ảnh"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Truy cập trực tiếp vào máy ảnh để chụp ảnh hoặc quay video."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Thông tin về các ứng dụng của bạn"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Khả năng ảnh hưởng tới hoạt động của các ứng dụng khác trên thiết bị của bạn."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Hình nền"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Thay đổi cài đặt hình nền của thiết bị."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Đồng hồ"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Thay đổi giờ hoặc múi giờ của thiết bị."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Thanh trạng thái"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Thay đổi cài đặt thanh trạng thái của thiết bị."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Cài đặt đồng bộ hóa"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Truy cập vào cài đặt đồng bộ hóa."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Tài khoản của bạn"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Truy cập các tài khoản khả dụng."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Kiểm soát phần cứng"</string>
@@ -248,10 +227,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Quyền truy cập và quyền kiểm soát hệ thống cấp thấp hơn."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Công cụ phát triển"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Các tính năng chỉ cần cho nhà phát triển ứng dụng."</string>
- <!-- no translation found for permgrouplab_display (4279909676036402636) -->
- <skip />
- <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
- <skip />
+ <string name="permgrouplab_display" msgid="4279909676036402636">"Giao diện người dùng của ứng dụng khác"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Ảnh hưởng tới giao diện người dùng của các ứng dụng khác."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Dung lượng"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Truy cập bộ nhớ USB."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Truy cập thẻ SD."</string>
@@ -592,7 +569,8 @@
<string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Cho phép ứng dụng đọc nội dung của bộ lưu trữ USB, bộ lưu trữ này có thể bao gồm ảnh và đa phương tiện."</string>
<string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Cho phép ứng dụng đọc nội dung của thẻ SD, thẻ này có thể bao gồm ảnh và đa phương tiện."</string>
<string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"sửa đổi hoặc xóa nội dung của bộ lưu trữ USB của bạn"</string>
- <string name="permlab_sdcardWrite" product="default" msgid="9084476432661578751">"sửa đổi hoặc xóa nội dung của thẻ SD của bạn"</string>
+ <!-- no translation found for permlab_sdcardWrite (8805693630050458763) -->
+ <skip />
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Cho phép ứng dụng ghi vào bộ lưu trữ USB."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Cho phép ứng dụng ghi vào thẻ SD."</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"sửa đổi/xóa nội dung trên bộ nhớ phương tiện cục bộ"</string>
@@ -770,8 +748,7 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"Không có thẻ SIM nào trong điện thoại."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Hãy lắp thẻ SIM."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"Thẻ SIM bị thiếu hoặc không thể đọc được. Vui lòng lắp thẻ SIM."</string>
- <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
- <skip />
+ <string name="lockscreen_permanent_disabled_sim_message_short" msgid="5096149665138916184">"Thẻ SIM không sử dụng được."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"Thẻ SIM của bạn đã bị vô hiệu hóa vĩnh viễn ."\n" Hãy liên hệ với nhà cung cấp dịch vụ không dây của bạn để lấy thẻ SIM khác."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Nút bài hát trước"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Nút bài hát tiếp theo"</string>
@@ -1112,11 +1089,10 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Đặt ngày"</string>
<string name="date_time_set" msgid="5777075614321087758">"Đặt"</string>
<string name="date_time_done" msgid="2507683751759308828">"Xong"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"Mặc định"</string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"MỚI: "</font></string>
+ <!-- no translation found for perms_description_app (5139836143293299417) -->
+ <skip />
<string name="no_permissions" msgid="7283357728219338112">"Không yêu cầu quyền"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Ẩn"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Hiển thị tất cả"</b></string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"Bộ nhớ dung lượng lớn USB"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB đã kết nối"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Bạn đã kết nối với máy tính của mình qua USB. Hãy chạm vào nút bên dưới nếu bạn muốn sao chép các tệp giữa máy tính và bộ lưu trữ USB của Android của bạn."</string>
@@ -1345,4 +1321,8 @@
<string name="sending" msgid="3245653681008218030">"Đang gửi…"</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Khởi chạy trình duyệt?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Chấp nhận cuộc gọi?"</string>
+ <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <skip />
+ <!-- no translation found for activity_resolver_use_once (405646673463328329) -->
+ <skip />
</resources>
diff --git a/tools/localize/testdata/merge_xx_old.xml b/core/res/res/values-w500dp/bools.xml
similarity index 72%
copy from tools/localize/testdata/merge_xx_old.xml
copy to core/res/res/values-w500dp/bools.xml
index 9d3a7d8..f53fd39 100644
--- a/tools/localize/testdata/merge_xx_old.xml
+++ b/core/res/res/values-w500dp/bools.xml
@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2007 The Android Open Source Project
+<!-- Copyright (C) 2012 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.
@@ -14,8 +14,6 @@
limitations under the License.
-->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="changed_in_xx">aaa</string>
- <string name="previously_translated">CCC</string>
-</resources>
-
+<resources>
+ <bool name="activity_chooser_view_has_default_activity">true</bool>
+</resources>
\ No newline at end of file
diff --git a/core/res/res/values-w720dp/dimens.xml b/core/res/res/values-w720dp/dimens.xml
deleted file mode 100644
index a37f588..0000000
--- a/core/res/res/values-w720dp/dimens.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2011 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>
- <!-- Preference fragment padding, sides -->
- <dimen name="preference_fragment_padding_side">32dp</dimen>
- <!-- Padding to the left of the preference panel breadcrumb -->
- <dimen name="preference_breadcrumb_paddingLeft">32dp</dimen>
- <!-- Padding to the right of the preference panel breadcrumb -->
- <dimen name="preference_breadcrumb_paddingRight">32dp</dimen>
- <!-- Weight of the left pane in a multi-pane preference layout. -->
- <integer name="preferences_left_pane_weight">1</integer>
- <!-- Weight of the right pane in a multi-pane preference layout. So the split is 1:2 -->
- <integer name="preferences_right_pane_weight">2</integer>
- <!-- Minimum space to allocate to the left of a preference item for an icon.
- This helps in aligning titles when some items have icons and some don't. When space is
- at a premium, we don't pre-allocate any space. -->
- <dimen name="preference_icon_minWidth">56dp</dimen>
-
- <dimen name="preference_screen_header_padding_side">0dip</dimen>
-
- <integer name="preference_screen_header_scrollbarStyle">0x0</integer> <!-- insideOverlay -->
- <integer name="preference_fragment_scrollbarStyle">0x02000000</integer> <!-- outsideOverlay -->
-</resources>
diff --git a/core/res/res/values-xlarge/dimens.xml b/core/res/res/values-xlarge/dimens.xml
index c15770d..29cea26 100644
--- a/core/res/res/values-xlarge/dimens.xml
+++ b/core/res/res/values-xlarge/dimens.xml
@@ -25,10 +25,6 @@
<!-- keyboardHeight = key_height*4 + key_bottom_gap*3 -->
<dimen name="password_keyboard_height">48.0mm</dimen>
- <!-- The width that is used when creating thumbnails of applications. -->
- <dimen name="thumbnail_width">230dp</dimen>
- <!-- The height that is used when creating thumbnails of applications. -->
- <dimen name="thumbnail_height">135dp</dimen>
<!-- Minimum width of the search view text entry area. -->
<dimen name="search_view_text_min_width">192dip</dimen>
diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml
index 09fab1f..d61d513 100644
--- a/core/res/res/values-zh-rCN/strings.xml
+++ b/core/res/res/values-zh-rCN/strings.xml
@@ -178,9 +178,13 @@
<string name="permgroupdesc_location" msgid="5704679763124170100">"监视您的实际位置。"</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"网络通信"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"使用各种网络功能。"</string>
- <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <!-- no translation found for permgrouplab_bluetoothNetwork (1585403544162128109) -->
<skip />
- <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <!-- no translation found for permgroupdesc_bluetoothNetwork (5625288577164282391) -->
+ <skip />
+ <!-- no translation found for permgrouplab_shortrangeNetwork (130808676377486118) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) -->
<skip />
<!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
<skip />
@@ -194,9 +198,13 @@
<skip />
<!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
<skip />
- <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
+ <!-- no translation found for permgrouplab_dictionary (4148597128843641379) -->
<skip />
- <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
+ <!-- no translation found for permgroupdesc_dictionary (7921166355964764490) -->
+ <skip />
+ <!-- no translation found for permgrouplab_writeDictionary (8090237702432576788) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) -->
<skip />
<!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
<skip />
@@ -261,7 +269,7 @@
<string name="permdesc_statusBarService" msgid="716113660795976060">"允许以状态栏形式显示应用。"</string>
<string name="permlab_expandStatusBar" msgid="1148198785937489264">"展开/收拢状态栏"</string>
<string name="permdesc_expandStatusBar" msgid="6917549437129401132">"允许应用展开或折叠状态栏。"</string>
- <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"重新部署外拨电话"</string>
+ <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"重新设置外拨电话的路径"</string>
<string name="permdesc_processOutgoingCalls" msgid="1152111671618301044">"允许应用处理外拨通话并更改要拨打的号码。恶意应用可能会监视、重定向或阻止外拨通话。"</string>
<string name="permlab_receiveSms" msgid="8673471768947895082">"接收文字讯息(短信)"</string>
<string name="permdesc_receiveSms" msgid="8107887121893611793">"允许应用接收和处理短信。恶意应用可能会监视您的短信,或删除短信而不向您显示。"</string>
@@ -335,7 +343,7 @@
<string name="permdesc_confirm_full_backup" msgid="1748762171637699562">"允许应用启动完整备份确认用户界面。不用于任何应用。"</string>
<string name="permlab_internalSystemWindow" msgid="2148563628140193231">"显示未授权的窗口"</string>
<string name="permdesc_internalSystemWindow" msgid="7458387759461466397">"允许该应用创建供内部系统用户界面使用的窗口。普通应用不应使用此权限。"</string>
- <string name="permlab_systemAlertWindow" msgid="3543347980839518613">"覆盖其他应用"</string>
+ <string name="permlab_systemAlertWindow" msgid="3543347980839518613">"在其他应用之上显示内容"</string>
<string name="permdesc_systemAlertWindow" msgid="8507863469978066409">"允许应用显示系统警告窗口。恶意应用可能会控制整个屏幕。"</string>
<string name="permlab_setAnimationScale" msgid="2805103241153907174">"修改全局动画速度"</string>
<string name="permdesc_setAnimationScale" msgid="7690063428924343571">"允许该应用随时更改全局动画速度(加快或减慢)。"</string>
@@ -575,7 +583,7 @@
<string name="permdesc_disableKeyguard" msgid="6231611286892232626">"允许应用停用键锁和任何关联的密码安全设置。例如,在手机上接听电话时停用键锁,在通话结束后重新启用键锁。"</string>
<string name="permlab_readSyncSettings" msgid="6201810008230503052">"读取同步设置"</string>
<string name="permdesc_readSyncSettings" msgid="5464056785274229278">"允许应用读取同步设置,例如是否对“联系人”应用启用同步功能。"</string>
- <string name="permlab_writeSyncSettings" msgid="5408694875793945314">"启用/停用同步"</string>
+ <string name="permlab_writeSyncSettings" msgid="5408694875793945314">"启用和停用同步"</string>
<string name="permdesc_writeSyncSettings" msgid="1466056564502117130">"允许应用修改同步设置,例如是否对“联系人”应用启用同步功能。"</string>
<string name="permlab_readSyncStats" msgid="7396577451360202448">"读取同步统计信息"</string>
<string name="permdesc_readSyncStats" msgid="3801971839939951678">"允许应用读取同步统计信息;例如,已发生的同步历史记录。"</string>
@@ -583,7 +591,7 @@
<string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"允许应用获取有关当前同步的 Feed 的详情。"</string>
<string name="permlab_subscribedFeedsWrite" msgid="9015246325408209296">"写入订阅的供稿"</string>
<string name="permdesc_subscribedFeedsWrite" msgid="6928930188826089413">"允许应用修改您当前同步的 Feed。恶意应用可能会更改您的同步 Feed。"</string>
- <string name="permlab_readDictionary" msgid="4107101525746035718">"读取您已添加到该字典的字词"</string>
+ <string name="permlab_readDictionary" msgid="4107101525746035718">"读取您添加到字典的字词"</string>
<string name="permdesc_readDictionary" msgid="8977815988329283705">"允许应用读取用户可能在用户词典中已存储的任意私有字词、名称和短语。"</string>
<string name="permlab_writeDictionary" msgid="2296383164914812772">"写入用户定义的词典"</string>
<string name="permdesc_writeDictionary" msgid="8185385716255065291">"允许应用向用户词典中写入新词。"</string>
@@ -592,7 +600,8 @@
<string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"允许该应用读取 USB 存储设备中的内容,其中可能包括照片和媒体。"</string>
<string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"允许该应用读取 SD 卡中的内容,其中可能包括照片和媒体。"</string>
<string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"修改或删除您的 USB 存储设备中的内容"</string>
- <string name="permlab_sdcardWrite" product="default" msgid="9084476432661578751">"修改或删除您的 SD 卡中的内容"</string>
+ <!-- no translation found for permlab_sdcardWrite (8805693630050458763) -->
+ <skip />
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"允许应用写入 USB 存储设备。"</string>
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"允许应用写入 SD 卡。"</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"修改/删除内部媒体存储设备的内容"</string>
@@ -1112,11 +1121,10 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"设置日期"</string>
<string name="date_time_set" msgid="5777075614321087758">"设置"</string>
<string name="date_time_done" msgid="2507683751759308828">"完成"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"默认"</string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"新增:"</font></string>
+ <!-- no translation found for perms_description_app (5139836143293299417) -->
+ <skip />
<string name="no_permissions" msgid="7283357728219338112">"不需要任何权限"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"隐藏"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"全部显示"</b></string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"USB 大容量存储设备"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB 已连接"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"您已通过 USB 连接至计算机。如果您要在计算机与 Android 设备的 USB 存储设备之间复制文件,请触摸下面的按钮。"</string>
@@ -1345,4 +1353,8 @@
<string name="sending" msgid="3245653681008218030">"正在发送..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"要启动浏览器吗?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"要接听电话吗?"</string>
+ <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <skip />
+ <!-- no translation found for activity_resolver_use_once (405646673463328329) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml
index 322b8bf..28d7cab 100644
--- a/core/res/res/values-zh-rTW/strings.xml
+++ b/core/res/res/values-zh-rTW/strings.xml
@@ -168,76 +168,55 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"您的簡訊"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"讀取及寫入您的簡訊、電子郵件和其他訊息。"</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"您的個人資訊"</string>
- <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
- <skip />
- <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
- <skip />
- <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
- <skip />
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"直接存取您儲存在聯絡人卡片中的個人資訊。"</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"您的社交資訊"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"直接存取您的聯絡人資訊與社交網站資訊。"</string>
<string name="permgrouplab_location" msgid="635149742436692049">"您的位置"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"監控您的實際位置。"</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"網路通訊"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"存取各種網路功能。"</string>
- <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <!-- no translation found for permgrouplab_bluetoothNetwork (1585403544162128109) -->
<skip />
- <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <!-- no translation found for permgroupdesc_bluetoothNetwork (5625288577164282391) -->
<skip />
- <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <!-- no translation found for permgrouplab_shortrangeNetwork (130808676377486118) -->
<skip />
- <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) -->
<skip />
- <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"音效設定"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"變更音訊設定。"</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"影響電力"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"使用可能大量耗電的功能。"</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"日曆"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"直接存取日曆和活動。"</string>
+ <!-- no translation found for permgrouplab_dictionary (4148597128843641379) -->
<skip />
- <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <!-- no translation found for permgroupdesc_dictionary (7921166355964764490) -->
<skip />
- <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <!-- no translation found for permgrouplab_writeDictionary (8090237702432576788) -->
<skip />
- <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) -->
<skip />
- <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
- <skip />
- <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
- <skip />
- <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
- <skip />
- <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
- <skip />
- <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
- <skip />
- <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
- <skip />
- <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
- <skip />
- <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
- <skip />
- <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
- <skip />
- <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
- <skip />
- <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
- <skip />
- <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
- <skip />
- <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
- <skip />
- <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
- <skip />
- <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
- <skip />
- <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
- <skip />
- <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
- <skip />
- <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
- <skip />
- <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
- <skip />
- <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
- <skip />
- <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
- <skip />
- <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
- <skip />
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"書籤與紀錄"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"直接存取書籤和瀏覽器紀錄。"</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"鬧鐘"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"設定鬧鐘。"</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"語音信箱"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"直接存取語音信箱。"</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"麥克風"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"直接使用麥克風錄音。"</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"相機"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"直接使用相機拍照或錄影。"</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"您的應用程式資訊"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"影響裝置上其他應用程式的行為。"</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"桌布"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"變更裝置桌布設定。"</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"時鐘"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"變更裝置時間或時區。"</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"狀態列"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"變更裝置狀態列設定。"</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"同步處理設定"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"存取同步處理設定。"</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"您的帳戶"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"存取可用帳戶。"</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"硬體控制"</string>
@@ -248,10 +227,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"系統低階存取與控制。"</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"開發工具"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"只有應用程式開發人員需要使用的功能。"</string>
- <!-- no translation found for permgrouplab_display (4279909676036402636) -->
- <skip />
- <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
- <skip />
+ <string name="permgrouplab_display" msgid="4279909676036402636">"其他應用程式使用者介面"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"影響其他應用程式的使用者介面。"</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"儲存"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"存取 USB 儲存裝置。"</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"存取 SD 卡。"</string>
@@ -592,7 +569,8 @@
<string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"允許應用程式讀取 USB 儲存裝置的內容 (可能含有相片和媒體)。"</string>
<string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"允許應用程式讀取 SD 卡的內容 (可能含有相片和媒體)。"</string>
<string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"修改或刪除 USB 儲存裝置的內容"</string>
- <string name="permlab_sdcardWrite" product="default" msgid="9084476432661578751">"修改或刪除 SD 卡的內容"</string>
+ <!-- no translation found for permlab_sdcardWrite (8805693630050458763) -->
+ <skip />
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"允許應用程式寫入 USB 儲存裝置。"</string>
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"允許應用程式寫入 SD 卡。"</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"修改/刪除內部媒體儲存裝置內容"</string>
@@ -770,8 +748,7 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"手機未插入 SIM 卡。"</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"插入 SIM 卡。"</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"找不到或無法讀取 SIM 卡。請插入 SIM 卡。"</string>
- <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
- <skip />
+ <string name="lockscreen_permanent_disabled_sim_message_short" msgid="5096149665138916184">"SIM 卡無法使用。"</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"您的 SIM 卡已遭永久停用。"\n"請與您的無線網路服務供應商聯絡,以取得其他 SIM 卡。"</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"[上一首曲目] 按鈕"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"[下一首曲目] 按鈕"</string>
@@ -1112,11 +1089,10 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"日期設定"</string>
<string name="date_time_set" msgid="5777075614321087758">"設定"</string>
<string name="date_time_done" msgid="2507683751759308828">"完成"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"預設值"</string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"新增:"</font></string>
+ <!-- no translation found for perms_description_app (5139836143293299417) -->
+ <skip />
<string name="no_permissions" msgid="7283357728219338112">"無須許可"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>" 隱藏"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"顯示全部"</b></string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"USB 大量儲存裝置"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB 已連接"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"您已透過 USB 與電腦建立連線。如要在電腦和 Android 的 USB 儲存裝置之間複製檔案,請輕觸下方按鈕。"</string>
@@ -1345,4 +1321,8 @@
<string name="sending" msgid="3245653681008218030">"傳送中..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"啟動「瀏覽器」嗎?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"接聽電話嗎?"</string>
+ <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <skip />
+ <!-- no translation found for activity_resolver_use_once (405646673463328329) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml
index 63a95ea..8010962 100644
--- a/core/res/res/values-zu/strings.xml
+++ b/core/res/res/values-zu/strings.xml
@@ -168,76 +168,55 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Imiyalezo yakho"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Funda futhi ubhale i-SMS yakho, i-imeyili, kanye neminye imiyalezo."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Ukwaziswa kwakho komuntu siqu"</string>
- <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
- <skip />
- <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
- <skip />
- <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
- <skip />
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Ukufinyelela okuqondile kulwazi mayelana nawe, kulondolozwe ekhadini loxhumana naye."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Ulwazi lakho lomphakathi"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Ukufinyelela okuqondile kulwazi mayelana noxhumana nabo bomphakathi."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Indawo yakho"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Gada indawo yakho yokuhlala"</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Uxhumano lwenethiwekhi"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Finyelela kokuqukethwe inethiwekhi okuhlukahlukee."</string>
- <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <!-- no translation found for permgrouplab_bluetoothNetwork (1585403544162128109) -->
<skip />
- <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <!-- no translation found for permgroupdesc_bluetoothNetwork (5625288577164282391) -->
<skip />
- <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <!-- no translation found for permgrouplab_shortrangeNetwork (130808676377486118) -->
<skip />
- <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) -->
<skip />
- <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Izilungiselelo zomsindo"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Shintsha izilungiselelo zomsindo."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Ithinta ibhethri"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Sebenzisa izici ezingakhipha ngokushesha ibhethri."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Ikhalenda"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Ukufinyelela okuqondile kukhalenda nezehlakalo."</string>
+ <!-- no translation found for permgrouplab_dictionary (4148597128843641379) -->
<skip />
- <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <!-- no translation found for permgroupdesc_dictionary (7921166355964764490) -->
<skip />
- <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <!-- no translation found for permgrouplab_writeDictionary (8090237702432576788) -->
<skip />
- <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) -->
<skip />
- <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
- <skip />
- <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
- <skip />
- <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
- <skip />
- <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
- <skip />
- <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
- <skip />
- <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
- <skip />
- <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
- <skip />
- <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
- <skip />
- <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
- <skip />
- <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
- <skip />
- <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
- <skip />
- <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
- <skip />
- <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
- <skip />
- <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
- <skip />
- <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
- <skip />
- <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
- <skip />
- <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
- <skip />
- <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
- <skip />
- <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
- <skip />
- <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
- <skip />
- <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
- <skip />
- <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
- <skip />
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Amabhukhimakhi nomlando"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Ukufinyelela okuqondile kumlando wamabhukimakhi nesiphequluli."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"I-alamu"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Setha i-alamu."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"I-voicemail"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Ukufinyelela okuqondile ku-voicemail."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"I-Microphone"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Ukufinyelela okuqondile ku-microphone ukuze uqophe umsindo."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Ikhamela"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Ukufinyelela okuqondile kukhamera ekuthwebuleni isithombe noma ividiyo."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Ulwazi lezinhlelo zakho zokusebenza"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Amandla okuthinta ukuziphatha kwezinhlelo zokusebenza kudivayisi yakho."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Isithombe sangemuva"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Shintsha izilungiselelo ze-wallpaper yedivayisi."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Iwashi"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Shintsha isikhathi sedivayisi noma izoni yesikhathi."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Ibha yesimo"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Shintsha izilungiselelo zebha yesimo yedivayisi."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Vumelanisa izilungiselelo"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Ukufinyela kuzilungiselelo zokuvumelanisa."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Ama-akhawunti akho"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Finyelela kuma-akhawunti atholakalayo"</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Izilawuli zezingxenyekazi zekhompyutha"</string>
@@ -248,10 +227,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Ukufinyelela kwezinga eliphansi nokulawula uhlelo."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Amathuluzi okuthuthukisa"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Okuqukethwe okudingakela abasunguli bensiza kuphela."</string>
- <!-- no translation found for permgrouplab_display (4279909676036402636) -->
- <skip />
- <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
- <skip />
+ <string name="permgrouplab_display" msgid="4279909676036402636">"Enye i-UI yohlelo lokusebenza"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Kuthinta i-UI yezinye izinhlelo zokusebenza."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Isitoreji"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Finyelela kwisitoreji se-USB."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Finyelela ikhadi le-SD."</string>
@@ -592,7 +569,8 @@
<string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Ivumela uhlelo lokusebenza ukuthi lufunde okuqukethwe kwi-USB, okungabandakanya izithombe kanye nezingosi yezindaba."</string>
<string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Ivumela uhlelo lokusebenza ukuthi lufunde okuqukethwe ikhadi le-SD, okungabandakanya izithombe kanye nengosi yezindaba."</string>
<string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"guqula noma ususe okuqukethwe kwakho okugciniwe okufinyeleleka nge-USB"</string>
- <string name="permlab_sdcardWrite" product="default" msgid="9084476432661578751">"guqula noma ususe okuqukethwe ekhadini lakho le-SD"</string>
+ <!-- no translation found for permlab_sdcardWrite (8805693630050458763) -->
+ <skip />
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Ivumela insiza ukuthi ibhalele ekulondolozweni kwe-USB."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Ivumela insiza ukuthi ibhalele ekhadini le-SD."</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"guqula/susa okuqukethwe kwisitoreji semidiya yangaphakathi"</string>
@@ -770,8 +748,7 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"Alikho ikhadi le-SIM efonini."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Faka ikhadi le-SIM."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"Ikhadi le-SIM alitholakali noma alifundeki. Sicela ufake ikhadi le-SIM."</string>
- <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
- <skip />
+ <string name="lockscreen_permanent_disabled_sim_message_short" msgid="5096149665138916184">"Ikhadi le-SIM elingasetshenzisiwe."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"I-SIM khadi ykho isiyenziwe ukuthi ingasebenzi unomphela."\n" Xhumana nomhlinzeki wakho wokuxhumana okungenazintambo ukuze uthole enye i-SIM khadi."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Inkinombo yengoma yangaphambilini"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Inkinobho yengoma elandelayo"</string>
@@ -1112,11 +1089,10 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Setha idethi"</string>
<string name="date_time_set" msgid="5777075614321087758">"Hlela"</string>
<string name="date_time_done" msgid="2507683751759308828">"Kwenziwe"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"Okuzenzakalelayo"</string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"OKUSHA: "</font></string>
+ <!-- no translation found for perms_description_app (5139836143293299417) -->
+ <skip />
<string name="no_permissions" msgid="7283357728219338112">"Ayikho imvume edingekayo"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Fihla "</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Bonisa konke"</b></string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"Isitoreji Esikhulu se-USB"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"I-USB ixhunyiwe"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Uxhumeke kwikhompyutha yakho nge-USB. Thinta inkinobho engenzansi uma ufuna ukukopisha amafayela phakathi kwekhompyutha yakho nokugcina nge-Android USB yakho."</string>
@@ -1345,4 +1321,8 @@
<string name="sending" msgid="3245653681008218030">"Iyathumela..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Qala Isiphequluli?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Amukela ucingo?"</string>
+ <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <skip />
+ <!-- no translation found for activity_resolver_use_once (405646673463328329) -->
+ <skip />
</resources>
diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml
index 9fa666e..484de0d 100755
--- a/core/res/res/values/attrs.xml
+++ b/core/res/res/values/attrs.xml
@@ -3107,7 +3107,7 @@
<attr name="singleLine" format="boolean" />
<!-- Specifies whether the widget is enabled. The interpretation of the enabled state varies by subclass.
For example, a non-enabled EditText prevents the user from editing the contained text, and
- a non-enabled Button prevents the user from tapping the button.
+ a non-enabled Button prevents the user from tapping the button.
The appearance of enabled and non-enabled widgets may differ, if the drawables referenced
from evaluating state_enabled differ. -->
<attr name="enabled" format="boolean" />
@@ -5378,12 +5378,17 @@
<!-- Number of waves/chevrons to show in animation. -->
<attr name="feedbackCount" format="integer" />
- <!-- Used to shift center of pattern vertically. -->
+ <!-- {@deprecated Not used by the framework. Use android:gravity instead}
+ Used to shift center of pattern vertically. -->
<attr name="verticalOffset" format="dimension" />
- <!-- Used to shift center of pattern horizontally. -->
+ <!-- {@deprecated Not used by the framework. Use android:gravity instead}
+ Used to shift center of pattern horizontally. -->
<attr name="horizontalOffset" format="dimension" />
+ <!-- How the items in this layout should be positioned -->
+ <attr name="gravity" />
+
<!-- Used when the handle shouldn't wait to be hit before following the finger -->
<attr name="alwaysTrackFinger" format="boolean" />
</declare-styleable>
diff --git a/core/res/res/values/bools.xml b/core/res/res/values/bools.xml
index f9762b1..6910ebe 100644
--- a/core/res/res/values/bools.xml
+++ b/core/res/res/values/bools.xml
@@ -22,4 +22,5 @@
<bool name="show_ongoing_ime_switcher">true</bool>
<bool name="action_bar_expanded_action_views_exclusive">true</bool>
<bool name="target_honeycomb_needs_options_menu">true</bool>
+ <bool name="activity_chooser_view_has_default_activity">false</bool>
</resources>
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index 229f518..5fa7b7e 100755
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -846,6 +846,10 @@
movement threshold where scrolling should begin. -->
<dimen name="config_viewConfigurationTouchSlop">8dp</dimen>
+ <!-- Maximum number of grid columns permitted in the ResolverActivity
+ used for picking activities to handle an intent. -->
+ <integer name="config_maxResolverActivityColumns">2</integer>
+
<!-- Array of OEM specific USB mode override config.
OEM can override a certain USB mode depending on ro.bootmode.
Specify an array of below items to set override rule.
diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml
index f06e30f..98c19cf 100644
--- a/core/res/res/values/public.xml
+++ b/core/res/res/values/public.xml
@@ -462,7 +462,6 @@
<java-symbol type="string" name="db_default_sync_mode" />
<java-symbol type="string" name="db_wal_sync_mode" />
<java-symbol type="string" name="decline" />
- <java-symbol type="string" name="default_permission_group" />
<java-symbol type="string" name="default_text_encoding" />
<java-symbol type="string" name="description_target_unlock_tablet" />
<java-symbol type="string" name="double_tap_toast" />
@@ -652,10 +651,8 @@
<java-symbol type="string" name="orgTypeOther" />
<java-symbol type="string" name="orgTypeWork" />
<java-symbol type="string" name="passwordIncorrect" />
- <java-symbol type="string" name="permissions_format" />
+ <java-symbol type="string" name="perms_description_app" />
<java-symbol type="string" name="perms_new_perm_prefix" />
- <java-symbol type="string" name="perms_hide" />
- <java-symbol type="string" name="perms_show_all" />
<java-symbol type="string" name="petabyteShort" />
<java-symbol type="string" name="phoneTypeAssistant" />
<java-symbol type="string" name="phoneTypeCallback" />
@@ -1376,6 +1373,7 @@
<java-symbol type="bool" name="config_wifi_dual_band_support" />
<java-symbol type="bool" name="config_wimaxEnabled" />
<java-symbol type="bool" name="show_ongoing_ime_switcher" />
+ <java-symbol type="bool" name="activity_chooser_view_has_default_activity" />
<java-symbol type="color" name="config_defaultNotificationColor" />
<java-symbol type="drawable" name="ic_notification_ime_default" />
<java-symbol type="drawable" name="stat_notify_car_mode" />
@@ -1510,6 +1508,12 @@
<java-symbol type="bool" name="config_enableDreams" />
<java-symbol type="string" name="config_defaultDreamComponent" />
+ <java-symbol type="layout" name="resolver_grid" />
+ <java-symbol type="id" name="resolver_grid" />
+ <java-symbol type="id" name="button_once" />
+ <java-symbol type="id" name="button_always" />
+ <java-symbol type="integer" name="config_maxResolverActivityColumns" />
+
<!-- From SystemUI -->
<java-symbol type="anim" name="push_down_in" />
<java-symbol type="anim" name="push_down_out" />
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index 3250507..687a00b 100755
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -408,16 +408,21 @@
<string name="permgroupdesc_network">Access various network features.</string>
<!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
- <string name="permgrouplab_shortRangeNetwork">Bluetooth and NFC</string>
+ <string name="permgrouplab_bluetoothNetwork">Bluetooth</string>
<!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
- <string name="permgroupdesc_shortRangeNetwork">Access Bluetooth or NFC networks and devices.</string>
+ <string name="permgroupdesc_bluetoothNetwork">Access devices and networks through Bluetooth.</string>
- <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgrouplab_shortrangeNetwork">Short-range Networks</string>
+ <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgroupdesc_shortrangeNetwork">Access devices through short-range networks such as NFC.</string>
+
+ <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
<string name="permgrouplab_audioSettings">Audio Settings</string>
<!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
<string name="permgroupdesc_audioSettings">Change audio settings.</string>
- <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
<string name="permgrouplab_affectsBattery">Affects Battery</string>
<!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
<string name="permgroupdesc_affectsBattery">Use features that can quickly drain battery.</string>
@@ -428,9 +433,14 @@
<string name="permgroupdesc_calendar">Direct access to calendar and events.</string>
<!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
- <string name="permgrouplab_dictionary">User Dictionary</string>
+ <string name="permgrouplab_dictionary">Read User Dictionary</string>
<!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
- <string name="permgroupdesc_dictionary">Direct access to the user dictionary.</string>
+ <string name="permgroupdesc_dictionary">Read words in user dictionary.</string>
+
+ <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgrouplab_writeDictionary">Write User Dictionary</string>
+ <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgroupdesc_writeDictionary">Add words to the user dictionary.</string>
<!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
<string name="permgrouplab_bookmarks">Bookmarks and History</string>
@@ -1597,7 +1607,7 @@
<!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. [CHAR LIMIT=30] -->
<string name="permlab_sdcardWrite" product="nosdcard">modify or delete the contents of your USB storage</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_sdcardWrite" product="default">modify or delete the contens of your SD card</string>
+ <string name="permlab_sdcardWrite" product="default">modify or delete the contents of your SD card</string>
<!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. [CHAR LIMIT=30] -->
<string name="permdesc_sdcardWrite" product="nosdcard">Allows the app to write to the USB storage.</string>
<!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
@@ -2976,18 +2986,12 @@
<string name="date_time_done">Done</string>
<!-- Security Permissions strings-->
- <!-- The default permission group for any permissions that have not explicitly set a group. -->
- <string name="default_permission_group">Default</string>
- <!-- Do not translate. -->
- <string name="permissions_format"><xliff:g id="perm_line1">%1$s</xliff:g>, <xliff:g id="perm_line2">%2$s</xliff:g></string>
<!-- Text that is placed at the front of a permission name that is being added to an app [CHAR LIMIT=NONE] -->
<string name="perms_new_perm_prefix"><font size="12" fgcolor="#ff900000">NEW: </font></string>
+ <!-- Text that is placed at the front of a permission name that is being added to an app [CHAR LIMIT=NONE] -->
+ <string name="perms_description_app">Provided by <xliff:g id="app_name">%1$s</xliff:g>.</string>
<!-- Shown for an application when it doesn't require any permission grants. -->
<string name="no_permissions">No permissions required</string>
- <!-- When installing an application, the less-dangerous permissions are hidden. If the user showed those, this is the text to hide them again. -->
- <string name="perms_hide"><b>Hide</b></string>
- <!-- When installing an application, the less-dangerous permissions are hidden. This is the text to show those. -->
- <string name="perms_show_all"><b>Show all</b></string>
<!-- USB storage dialog strings -->
<!-- This is the title for the activity's window. -->
@@ -3556,4 +3560,12 @@
<!-- STK setup Call -->
<string name="SetupCallDefault">Accept call?</string>
+ <!-- Title for a button to choose the currently selected activity
+ as the default in the activity resolver. [CHAR LIMIT=25] -->
+ <string name="activity_resolver_use_always">Always</string>
+
+ <!-- Title for a button to choose the currently selected activity
+ from the activity resolver to use just this once. [CHAR LIMIT=25] -->
+ <string name="activity_resolver_use_once">Just Once</string>
+
</resources>
diff --git a/core/tests/coretests/src/android/content/SyncStorageEngineTest.java b/core/tests/coretests/src/android/content/SyncStorageEngineTest.java
index 96f313a..2add623 100644
--- a/core/tests/coretests/src/android/content/SyncStorageEngineTest.java
+++ b/core/tests/coretests/src/android/content/SyncStorageEngineTest.java
@@ -20,7 +20,6 @@
import android.accounts.Account;
import android.os.Bundle;
-import android.os.Debug;
import android.test.AndroidTestCase;
import android.test.RenamingDelegatingContext;
import android.test.mock.MockContentResolver;
@@ -57,7 +56,8 @@
long time0 = 1000;
long historyId = engine.insertStartSyncEvent(
- account, 0, authority, time0, SyncStorageEngine.SOURCE_LOCAL);
+ account, 0, authority, time0, SyncStorageEngine.SOURCE_LOCAL,
+ false /* initialization */);
long time1 = time0 + SyncStorageEngine.MILLIS_IN_4WEEKS * 2;
engine.stopSyncEvent(historyId, time1 - time0, "yay", 0, 0);
}
diff --git a/core/tests/coretests/src/android/content/pm/ContainerEncryptionParamsTest.java b/core/tests/coretests/src/android/content/pm/ContainerEncryptionParamsTest.java
new file mode 100644
index 0000000..7deaa9a
--- /dev/null
+++ b/core/tests/coretests/src/android/content/pm/ContainerEncryptionParamsTest.java
@@ -0,0 +1,370 @@
+/*
+ * Copyright (C) 2012 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.content.pm;
+
+import android.os.Parcel;
+import android.test.AndroidTestCase;
+
+import java.util.Arrays;
+
+import javax.crypto.SecretKey;
+import javax.crypto.spec.IvParameterSpec;
+import javax.crypto.spec.SecretKeySpec;
+
+public class ContainerEncryptionParamsTest extends AndroidTestCase {
+ private static final String ENC_ALGORITHM = "AES/CBC/PKCS7Padding";
+
+ private static final byte[] IV_BYTES = "FOOBAR".getBytes();
+
+ private static final IvParameterSpec ENC_PARAMS = new IvParameterSpec(IV_BYTES);
+
+ private static final byte[] ENC_KEY_BYTES = "abcd1234wxyz7890".getBytes();
+
+ private static final SecretKey ENC_KEY = new SecretKeySpec(ENC_KEY_BYTES, "RAW");
+
+ private static final String MAC_ALGORITHM = "HMAC-SHA1";
+
+ private static final byte[] MAC_KEY_BYTES = "4wxyzabcd1237890".getBytes();
+
+ private static final SecretKey MAC_KEY = new SecretKeySpec(MAC_KEY_BYTES, "RAW");
+
+ private static final byte[] MAC_TAG = "faketag".getBytes();
+
+ private static final int AUTHENTICATED_START = 5;
+
+ private static final int ENCRYPTED_START = 11;
+
+ private static final int DATA_END = 19;
+
+ public void testParcel() throws Exception {
+ ContainerEncryptionParams expected = new ContainerEncryptionParams(ENC_ALGORITHM,
+ ENC_PARAMS, ENC_KEY, MAC_ALGORITHM, null, MAC_KEY, MAC_TAG, AUTHENTICATED_START,
+ ENCRYPTED_START, DATA_END);
+
+ Parcel parcel = Parcel.obtain();
+ expected.writeToParcel(parcel, 0);
+ parcel.setDataPosition(0);
+
+ ContainerEncryptionParams actual = ContainerEncryptionParams.CREATOR
+ .createFromParcel(parcel);
+
+ assertEquals(ENC_ALGORITHM, actual.getEncryptionAlgorithm());
+
+ if (!(actual.getEncryptionSpec() instanceof IvParameterSpec)) {
+ fail("encryption parameters should be IvParameterSpec");
+ } else {
+ IvParameterSpec actualParams = (IvParameterSpec) actual.getEncryptionSpec();
+ assertTrue(Arrays.equals(IV_BYTES, actualParams.getIV()));
+ }
+
+ assertEquals(ENC_KEY, actual.getEncryptionKey());
+
+ assertEquals(MAC_ALGORITHM, actual.getMacAlgorithm());
+
+ assertNull(actual.getMacSpec());
+
+ assertEquals(MAC_KEY, actual.getMacKey());
+
+ assertTrue(Arrays.equals(MAC_TAG, actual.getMacTag()));
+
+ assertEquals(AUTHENTICATED_START, actual.getAuthenticatedDataStart());
+
+ assertEquals(ENCRYPTED_START, actual.getEncryptedDataStart());
+
+ assertEquals(DATA_END, actual.getDataEnd());
+ }
+
+ public void testEquals_Success() throws Exception {
+ ContainerEncryptionParams params1 = new ContainerEncryptionParams(ENC_ALGORITHM,
+ ENC_PARAMS, ENC_KEY, MAC_ALGORITHM, null, MAC_KEY, MAC_TAG, AUTHENTICATED_START,
+ ENCRYPTED_START, DATA_END);
+
+ ContainerEncryptionParams params2 = new ContainerEncryptionParams(
+ new String(ENC_ALGORITHM), new IvParameterSpec(IV_BYTES.clone()),
+ new SecretKeySpec(ENC_KEY_BYTES.clone(), "RAW"), new String(MAC_ALGORITHM), null,
+ new SecretKeySpec(MAC_KEY_BYTES.clone(), "RAW"), MAC_TAG, AUTHENTICATED_START,
+ ENCRYPTED_START, DATA_END);
+
+ assertEquals(params1, params2);
+ }
+
+ public void testEquals_EncAlgo_Failure() throws Exception {
+ ContainerEncryptionParams params1 = new ContainerEncryptionParams(ENC_ALGORITHM,
+ ENC_PARAMS, ENC_KEY, MAC_ALGORITHM, null, MAC_KEY, MAC_TAG, AUTHENTICATED_START,
+ ENCRYPTED_START, DATA_END);
+
+ ContainerEncryptionParams params2 = new ContainerEncryptionParams(new String(
+ "AES-256/CBC/PKCS7Padding"), new IvParameterSpec(IV_BYTES.clone()),
+ new SecretKeySpec(ENC_KEY_BYTES.clone(), "RAW"), new String(MAC_ALGORITHM), null,
+ new SecretKeySpec(MAC_KEY_BYTES.clone(), "RAW"), MAC_TAG, AUTHENTICATED_START,
+ ENCRYPTED_START, DATA_END);
+
+ assertFalse(params1.equals(params2));
+ }
+
+ public void testEquals_EncParams_Failure() throws Exception {
+ ContainerEncryptionParams params1 = new ContainerEncryptionParams(ENC_ALGORITHM,
+ ENC_PARAMS, ENC_KEY, MAC_ALGORITHM, null, MAC_KEY, MAC_TAG, AUTHENTICATED_START,
+ ENCRYPTED_START, DATA_END);
+
+ ContainerEncryptionParams params2 = new ContainerEncryptionParams(
+ new String(ENC_ALGORITHM), new IvParameterSpec("BLAHBLAH".getBytes()),
+ new SecretKeySpec(ENC_KEY_BYTES.clone(), "RAW"), new String(MAC_ALGORITHM), null,
+ new SecretKeySpec(MAC_KEY_BYTES.clone(), "RAW"), MAC_TAG, AUTHENTICATED_START,
+ ENCRYPTED_START, DATA_END);
+
+ assertFalse(params1.equals(params2));
+ }
+
+ public void testEquals_EncKey_Failure() throws Exception {
+ ContainerEncryptionParams params1 = new ContainerEncryptionParams(ENC_ALGORITHM,
+ ENC_PARAMS, ENC_KEY, MAC_ALGORITHM, null, MAC_KEY, MAC_TAG, AUTHENTICATED_START,
+ ENCRYPTED_START, DATA_END);
+
+ ContainerEncryptionParams params2 = new ContainerEncryptionParams(
+ new String(ENC_ALGORITHM), new IvParameterSpec(IV_BYTES.clone()),
+ new SecretKeySpec("BLAHBLAH".getBytes(), "RAW"), new String(MAC_ALGORITHM), null,
+ new SecretKeySpec(MAC_KEY_BYTES.clone(), "RAW"), MAC_TAG, AUTHENTICATED_START,
+ ENCRYPTED_START, DATA_END);
+
+ assertFalse(params1.equals(params2));
+ }
+
+ public void testEquals_MacAlgo_Failure() throws Exception {
+ ContainerEncryptionParams params1 = new ContainerEncryptionParams(ENC_ALGORITHM,
+ ENC_PARAMS, ENC_KEY, MAC_ALGORITHM, null, MAC_KEY, MAC_TAG, AUTHENTICATED_START,
+ ENCRYPTED_START, DATA_END);
+
+ ContainerEncryptionParams params2 = new ContainerEncryptionParams(
+ new String(ENC_ALGORITHM), new IvParameterSpec(IV_BYTES.clone()),
+ new SecretKeySpec(ENC_KEY_BYTES.clone(), "RAW"), "BLAHBLAH", null,
+ new SecretKeySpec(MAC_KEY_BYTES.clone(), "RAW"), MAC_TAG, AUTHENTICATED_START,
+ ENCRYPTED_START, DATA_END);
+
+ assertFalse(params1.equals(params2));
+ }
+
+ public void testEquals_MacKey_Failure() throws Exception {
+ ContainerEncryptionParams params1 = new ContainerEncryptionParams(ENC_ALGORITHM,
+ ENC_PARAMS, ENC_KEY, MAC_ALGORITHM, null, MAC_KEY, MAC_TAG, AUTHENTICATED_START,
+ ENCRYPTED_START, DATA_END);
+
+ ContainerEncryptionParams params2 = new ContainerEncryptionParams(
+ new String(ENC_ALGORITHM), new IvParameterSpec(IV_BYTES.clone()),
+ new SecretKeySpec(ENC_KEY_BYTES.clone(), "RAW"), new String(MAC_ALGORITHM), null,
+ new SecretKeySpec("FAKE_MAC_KEY".getBytes(), "RAW"), MAC_TAG, AUTHENTICATED_START,
+ ENCRYPTED_START, DATA_END);
+
+ assertFalse(params1.equals(params2));
+ }
+
+ public void testEquals_MacTag_Failure() throws Exception {
+ ContainerEncryptionParams params1 = new ContainerEncryptionParams(ENC_ALGORITHM,
+ ENC_PARAMS, ENC_KEY, MAC_ALGORITHM, null, MAC_KEY, MAC_TAG, AUTHENTICATED_START,
+ ENCRYPTED_START, DATA_END);
+
+ ContainerEncryptionParams params2 = new ContainerEncryptionParams(
+ new String(ENC_ALGORITHM), new IvParameterSpec(IV_BYTES.clone()),
+ new SecretKeySpec(ENC_KEY_BYTES.clone(), "RAW"), new String(MAC_ALGORITHM), null,
+ new SecretKeySpec(MAC_KEY_BYTES.clone(), "RAW"), "broken".getBytes(),
+ AUTHENTICATED_START, ENCRYPTED_START, DATA_END);
+
+ assertFalse(params1.equals(params2));
+ }
+
+ public void testEquals_AuthenticatedStart_Failure() throws Exception {
+ ContainerEncryptionParams params1 = new ContainerEncryptionParams(ENC_ALGORITHM,
+ ENC_PARAMS, ENC_KEY, MAC_ALGORITHM, null, MAC_KEY, MAC_TAG, AUTHENTICATED_START,
+ ENCRYPTED_START, DATA_END);
+
+ ContainerEncryptionParams params2 = new ContainerEncryptionParams(
+ new String(ENC_ALGORITHM), new IvParameterSpec(IV_BYTES.clone()),
+ new SecretKeySpec(ENC_KEY_BYTES.clone(), "RAW"), new String(MAC_ALGORITHM), null,
+ new SecretKeySpec(MAC_KEY_BYTES.clone(), "RAW"), MAC_TAG, AUTHENTICATED_START - 1,
+ ENCRYPTED_START, DATA_END);
+
+ assertFalse(params1.equals(params2));
+ }
+
+ public void testEquals_EncryptedStart_Failure() throws Exception {
+ ContainerEncryptionParams params1 = new ContainerEncryptionParams(ENC_ALGORITHM,
+ ENC_PARAMS, ENC_KEY, MAC_ALGORITHM, null, MAC_KEY, MAC_TAG, AUTHENTICATED_START,
+ ENCRYPTED_START, DATA_END);
+
+ ContainerEncryptionParams params2 = new ContainerEncryptionParams(
+ new String(ENC_ALGORITHM), new IvParameterSpec(IV_BYTES.clone()),
+ new SecretKeySpec(ENC_KEY_BYTES.clone(), "RAW"), new String(MAC_ALGORITHM), null,
+ new SecretKeySpec(MAC_KEY_BYTES.clone(), "RAW"), MAC_TAG, AUTHENTICATED_START,
+ ENCRYPTED_START - 1, DATA_END);
+
+ assertFalse(params1.equals(params2));
+ }
+
+ public void testEquals_DataEnd_Failure() throws Exception {
+ ContainerEncryptionParams params1 = new ContainerEncryptionParams(ENC_ALGORITHM,
+ ENC_PARAMS, ENC_KEY, MAC_ALGORITHM, null, MAC_KEY, MAC_TAG, AUTHENTICATED_START,
+ ENCRYPTED_START, DATA_END);
+
+ ContainerEncryptionParams params2 = new ContainerEncryptionParams(
+ new String(ENC_ALGORITHM), new IvParameterSpec(IV_BYTES.clone()),
+ new SecretKeySpec(ENC_KEY_BYTES.clone(), "RAW"), new String(MAC_ALGORITHM), null,
+ new SecretKeySpec(MAC_KEY_BYTES.clone(), "RAW"), MAC_TAG, AUTHENTICATED_START,
+ ENCRYPTED_START, DATA_END + 1);
+
+ assertFalse(params1.equals(params2));
+ }
+
+ public void testHashCode_Success() throws Exception {
+ ContainerEncryptionParams params1 = new ContainerEncryptionParams(ENC_ALGORITHM,
+ ENC_PARAMS, ENC_KEY, MAC_ALGORITHM, null, MAC_KEY, MAC_TAG, AUTHENTICATED_START,
+ ENCRYPTED_START, DATA_END);
+
+ ContainerEncryptionParams params2 = new ContainerEncryptionParams(
+ new String(ENC_ALGORITHM), new IvParameterSpec(IV_BYTES.clone()),
+ new SecretKeySpec(ENC_KEY_BYTES.clone(), "RAW"), new String(MAC_ALGORITHM), null,
+ new SecretKeySpec(MAC_KEY_BYTES.clone(), "RAW"), MAC_TAG, AUTHENTICATED_START,
+ ENCRYPTED_START, DATA_END);
+
+ assertEquals(params1.hashCode(), params2.hashCode());
+ }
+
+ public void testHashCode_EncAlgo_Failure() throws Exception {
+ ContainerEncryptionParams params1 = new ContainerEncryptionParams(ENC_ALGORITHM,
+ ENC_PARAMS, ENC_KEY, MAC_ALGORITHM, null, MAC_KEY, MAC_TAG, AUTHENTICATED_START,
+ ENCRYPTED_START, DATA_END);
+
+ ContainerEncryptionParams params2 = new ContainerEncryptionParams(new String(
+ "AES-256/CBC/PKCS7Padding"), new IvParameterSpec(IV_BYTES.clone()),
+ new SecretKeySpec(ENC_KEY_BYTES.clone(), "RAW"), new String(MAC_ALGORITHM), null,
+ new SecretKeySpec(MAC_KEY_BYTES.clone(), "RAW"), MAC_TAG, AUTHENTICATED_START,
+ ENCRYPTED_START, DATA_END);
+
+ assertFalse(params1.hashCode() == params2.hashCode());
+ }
+
+ public void testHashCode_EncParams_Failure() throws Exception {
+ ContainerEncryptionParams params1 = new ContainerEncryptionParams(ENC_ALGORITHM,
+ ENC_PARAMS, ENC_KEY, MAC_ALGORITHM, null, MAC_KEY, MAC_TAG, AUTHENTICATED_START,
+ ENCRYPTED_START, DATA_END);
+
+ ContainerEncryptionParams params2 = new ContainerEncryptionParams(
+ new String(ENC_ALGORITHM), new IvParameterSpec("BLAHBLAH".getBytes()),
+ new SecretKeySpec(ENC_KEY_BYTES.clone(), "RAW"), new String(MAC_ALGORITHM), null,
+ new SecretKeySpec(MAC_KEY_BYTES.clone(), "RAW"), MAC_TAG, AUTHENTICATED_START,
+ ENCRYPTED_START, DATA_END);
+
+ assertFalse(params1.hashCode() == params2.hashCode());
+ }
+
+ public void testHashCode_EncKey_Failure() throws Exception {
+ ContainerEncryptionParams params1 = new ContainerEncryptionParams(ENC_ALGORITHM,
+ ENC_PARAMS, ENC_KEY, MAC_ALGORITHM, null, MAC_KEY, MAC_TAG, AUTHENTICATED_START,
+ ENCRYPTED_START, DATA_END);
+
+ ContainerEncryptionParams params2 = new ContainerEncryptionParams(
+ new String(ENC_ALGORITHM), new IvParameterSpec(IV_BYTES.clone()),
+ new SecretKeySpec("BLAHBLAH".getBytes(), "RAW"), new String(MAC_ALGORITHM), null,
+ new SecretKeySpec(MAC_KEY_BYTES.clone(), "RAW"), MAC_TAG, AUTHENTICATED_START,
+ ENCRYPTED_START, DATA_END);
+
+ assertFalse(params1.hashCode() == params2.hashCode());
+ }
+
+ public void testHashCode_MacAlgo_Failure() throws Exception {
+ ContainerEncryptionParams params1 = new ContainerEncryptionParams(ENC_ALGORITHM,
+ ENC_PARAMS, ENC_KEY, MAC_ALGORITHM, null, MAC_KEY, MAC_TAG, AUTHENTICATED_START,
+ ENCRYPTED_START, DATA_END);
+
+ ContainerEncryptionParams params2 = new ContainerEncryptionParams(
+ new String(ENC_ALGORITHM), new IvParameterSpec(IV_BYTES.clone()),
+ new SecretKeySpec(ENC_KEY_BYTES.clone(), "RAW"), "BLAHBLAH", null,
+ new SecretKeySpec(MAC_KEY_BYTES.clone(), "RAW"), MAC_TAG, AUTHENTICATED_START,
+ ENCRYPTED_START, DATA_END);
+
+ assertFalse(params1.hashCode() == params2.hashCode());
+ }
+
+ public void testHashCode_MacKey_Failure() throws Exception {
+ ContainerEncryptionParams params1 = new ContainerEncryptionParams(ENC_ALGORITHM,
+ ENC_PARAMS, ENC_KEY, MAC_ALGORITHM, null, MAC_KEY, MAC_TAG, AUTHENTICATED_START,
+ ENCRYPTED_START, DATA_END);
+
+ ContainerEncryptionParams params2 = new ContainerEncryptionParams(
+ new String(ENC_ALGORITHM), new IvParameterSpec(IV_BYTES.clone()),
+ new SecretKeySpec(ENC_KEY_BYTES.clone(), "RAW"), new String(MAC_ALGORITHM), null,
+ new SecretKeySpec("FAKE_MAC_KEY".getBytes(), "RAW"), MAC_TAG, AUTHENTICATED_START,
+ ENCRYPTED_START, DATA_END);
+
+ assertFalse(params1.hashCode() == params2.hashCode());
+ }
+
+ public void testHashCode_MacTag_Failure() throws Exception {
+ ContainerEncryptionParams params1 = new ContainerEncryptionParams(ENC_ALGORITHM,
+ ENC_PARAMS, ENC_KEY, MAC_ALGORITHM, null, MAC_KEY, MAC_TAG, AUTHENTICATED_START,
+ ENCRYPTED_START, DATA_END);
+
+ ContainerEncryptionParams params2 = new ContainerEncryptionParams(
+ new String(ENC_ALGORITHM), new IvParameterSpec(IV_BYTES.clone()),
+ new SecretKeySpec(ENC_KEY_BYTES.clone(), "RAW"), new String(MAC_ALGORITHM), null,
+ new SecretKeySpec(MAC_KEY_BYTES.clone(), "RAW"), "broken".getBytes(),
+ AUTHENTICATED_START, ENCRYPTED_START, DATA_END);
+
+ assertFalse(params1.hashCode() == params2.hashCode());
+ }
+
+ public void testHashCode_AuthenticatedStart_Failure() throws Exception {
+ ContainerEncryptionParams params1 = new ContainerEncryptionParams(ENC_ALGORITHM,
+ ENC_PARAMS, ENC_KEY, MAC_ALGORITHM, null, MAC_KEY, MAC_TAG, AUTHENTICATED_START,
+ ENCRYPTED_START, DATA_END);
+
+ ContainerEncryptionParams params2 = new ContainerEncryptionParams(
+ new String(ENC_ALGORITHM), new IvParameterSpec(IV_BYTES.clone()),
+ new SecretKeySpec(ENC_KEY_BYTES.clone(), "RAW"), new String(MAC_ALGORITHM), null,
+ new SecretKeySpec(MAC_KEY_BYTES.clone(), "RAW"), MAC_TAG, AUTHENTICATED_START - 1,
+ ENCRYPTED_START, DATA_END);
+
+ assertFalse(params1.hashCode() == params2.hashCode());
+ }
+
+ public void testHashCode_EncryptedStart_Failure() throws Exception {
+ ContainerEncryptionParams params1 = new ContainerEncryptionParams(ENC_ALGORITHM,
+ ENC_PARAMS, ENC_KEY, MAC_ALGORITHM, null, MAC_KEY, MAC_TAG, AUTHENTICATED_START,
+ ENCRYPTED_START, DATA_END);
+
+ ContainerEncryptionParams params2 = new ContainerEncryptionParams(
+ new String(ENC_ALGORITHM), new IvParameterSpec(IV_BYTES.clone()),
+ new SecretKeySpec(ENC_KEY_BYTES.clone(), "RAW"), new String(MAC_ALGORITHM), null,
+ new SecretKeySpec(MAC_KEY_BYTES.clone(), "RAW"), MAC_TAG, AUTHENTICATED_START,
+ ENCRYPTED_START - 1, DATA_END);
+
+ assertFalse(params1.hashCode() == params2.hashCode());
+ }
+
+ public void testHashCode_DataEnd_Failure() throws Exception {
+ ContainerEncryptionParams params1 = new ContainerEncryptionParams(ENC_ALGORITHM,
+ ENC_PARAMS, ENC_KEY, MAC_ALGORITHM, null, MAC_KEY, MAC_TAG, AUTHENTICATED_START,
+ ENCRYPTED_START, DATA_END);
+
+ ContainerEncryptionParams params2 = new ContainerEncryptionParams(
+ new String(ENC_ALGORITHM), new IvParameterSpec(IV_BYTES.clone()),
+ new SecretKeySpec(ENC_KEY_BYTES.clone(), "RAW"), new String(MAC_ALGORITHM), null,
+ new SecretKeySpec(MAC_KEY_BYTES.clone(), "RAW"), MAC_TAG, AUTHENTICATED_START,
+ ENCRYPTED_START, DATA_END + 1);
+
+ assertFalse(params1.hashCode() == params2.hashCode());
+ }
+}
diff --git a/core/tests/coretests/src/android/content/pm/LimitedLengthInputStreamTest.java b/core/tests/coretests/src/android/content/pm/LimitedLengthInputStreamTest.java
new file mode 100644
index 0000000..0a0152b
--- /dev/null
+++ b/core/tests/coretests/src/android/content/pm/LimitedLengthInputStreamTest.java
@@ -0,0 +1,186 @@
+/*
+ * Copyright (C) 2012 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.content.pm;
+
+import android.test.AndroidTestCase;
+import android.test.suitebuilder.annotation.MediumTest;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Arrays;
+
+public class LimitedLengthInputStreamTest extends AndroidTestCase {
+ private final byte[] TEST_STRING1 = "This is a test".getBytes();
+
+ private InputStream mTestStream1;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ mTestStream1 = new ByteArrayInputStream(TEST_STRING1);
+ }
+
+ @MediumTest
+ public void testConstructor_NegativeOffset_Failure() throws Exception {
+ try {
+ InputStream is = new LimitedLengthInputStream(mTestStream1, -1, TEST_STRING1.length);
+ fail("Should throw IOException on negative index");
+ } catch (IOException e) {
+ // success
+ }
+ }
+
+ @MediumTest
+ public void testConstructor_NegativeLength_Failure() throws Exception {
+ try {
+ InputStream is = new LimitedLengthInputStream(mTestStream1, 0, -1);
+ fail("Should throw IOException on negative length");
+ } catch (IOException e) {
+ // success
+ }
+ }
+
+ @MediumTest
+ public void testConstructor_NullInputStream_Failure() throws Exception {
+ try {
+ InputStream is = new LimitedLengthInputStream(null, 0, 1);
+ fail("Should throw IOException on null input stream");
+ } catch (IOException e) {
+ // success
+ }
+ }
+
+ private void checkReadBytesWithOffsetAndLength_WithString1(int offset, int length)
+ throws Exception {
+ byte[] temp = new byte[TEST_STRING1.length];
+ byte[] expected = new byte[length];
+ byte[] actual = new byte[length];
+
+ System.arraycopy(TEST_STRING1, offset, expected, 0, length);
+
+ InputStream is = new LimitedLengthInputStream(mTestStream1, offset, length);
+ assertEquals(length, is.read(temp, 0, temp.length));
+
+ System.arraycopy(temp, 0, actual, 0, length);
+ assertTrue(Arrays.equals(expected, actual));
+
+ assertEquals(-1, is.read(temp, 0, temp.length));
+ }
+
+ @MediumTest
+ public void testReadBytesWithOffsetAndLength_ZeroOffset_PartialLength_Success()
+ throws Exception {
+ checkReadBytesWithOffsetAndLength_WithString1(0, 2);
+ }
+
+ @MediumTest
+ public void testReadBytesWithOffsetAndLength_NonZeroOffset_PartialLength_Success()
+ throws Exception {
+ checkReadBytesWithOffsetAndLength_WithString1(3, 2);
+ }
+
+ @MediumTest
+ public void testReadBytesWithOffsetAndLength_ZeroOffset_FullLength_Success() throws Exception {
+ checkReadBytesWithOffsetAndLength_WithString1(0, TEST_STRING1.length);
+ }
+
+ @MediumTest
+ public void testReadBytesWithOffsetAndLength_NonZeroOffset_FullLength_Success()
+ throws Exception {
+ checkReadBytesWithOffsetAndLength_WithString1(3, TEST_STRING1.length - 3);
+ }
+
+ @MediumTest
+ public void testReadBytesWithOffsetAndLength_ZeroOffset_PastEnd_Success() throws Exception {
+ byte[] temp = new byte[TEST_STRING1.length + 10];
+ InputStream is = new LimitedLengthInputStream(mTestStream1, 0, TEST_STRING1.length + 10);
+ assertEquals(TEST_STRING1.length, is.read(temp, 0, TEST_STRING1.length + 10));
+
+ byte[] actual = new byte[TEST_STRING1.length];
+ System.arraycopy(temp, 0, actual, 0, actual.length);
+ assertTrue(Arrays.equals(TEST_STRING1, actual));
+ }
+
+ private void checkReadBytes_WithString1(int offset, int length) throws Exception {
+ byte[] temp = new byte[TEST_STRING1.length];
+ byte[] expected = new byte[length];
+ byte[] actual = new byte[length];
+
+ System.arraycopy(TEST_STRING1, offset, expected, 0, length);
+
+ InputStream is = new LimitedLengthInputStream(mTestStream1, offset, length);
+ assertEquals(length, is.read(temp));
+
+ System.arraycopy(temp, 0, actual, 0, length);
+ assertTrue(Arrays.equals(expected, actual));
+
+ assertEquals(-1, is.read(temp));
+ }
+
+ @MediumTest
+ public void testReadBytes_ZeroOffset_PartialLength_Success() throws Exception {
+ checkReadBytesWithOffsetAndLength_WithString1(0, 2);
+ }
+
+ @MediumTest
+ public void testReadBytes_NonZeroOffset_PartialLength_Success() throws Exception {
+ checkReadBytesWithOffsetAndLength_WithString1(3, 2);
+ }
+
+ @MediumTest
+ public void testReadBytes_ZeroOffset_FullLength_Success() throws Exception {
+ checkReadBytesWithOffsetAndLength_WithString1(0, TEST_STRING1.length);
+ }
+
+ @MediumTest
+ public void testReadBytes_NonZeroOffset_FullLength_Success() throws Exception {
+ checkReadBytesWithOffsetAndLength_WithString1(3, TEST_STRING1.length - 3);
+ }
+
+ private void checkSingleByteRead_WithString1(int offset, int length) throws Exception {
+ InputStream is = new LimitedLengthInputStream(mTestStream1, offset, length);
+
+ for (int i = 0; i < length; i++) {
+ assertEquals(TEST_STRING1[offset + i], is.read());
+ }
+
+ assertEquals(-1, is.read());
+ }
+
+ @MediumTest
+ public void testSingleByteRead_ZeroOffset_PartialLength_Success() throws Exception {
+ checkSingleByteRead_WithString1(0, 2);
+ }
+
+ @MediumTest
+ public void testSingleByteRead_NonZeroOffset_PartialLength_Success() throws Exception {
+ checkSingleByteRead_WithString1(3, 2);
+ }
+
+ @MediumTest
+ public void testSingleByteRead_ZeroOffset_FullLength_Success() throws Exception {
+ checkSingleByteRead_WithString1(0, TEST_STRING1.length);
+ }
+
+ @MediumTest
+ public void testSingleByteRead_NonZeroOffset_FullLength_Success() throws Exception {
+ checkSingleByteRead_WithString1(3, TEST_STRING1.length - 3);
+ }
+
+}
diff --git a/core/tests/coretests/src/android/content/pm/MacAuthenticatedInputStreamTest.java b/core/tests/coretests/src/android/content/pm/MacAuthenticatedInputStreamTest.java
new file mode 100644
index 0000000..948e722
--- /dev/null
+++ b/core/tests/coretests/src/android/content/pm/MacAuthenticatedInputStreamTest.java
@@ -0,0 +1,120 @@
+/*
+ * Copyright (C) 2012 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.content.pm;
+
+import android.test.AndroidTestCase;
+
+import java.io.ByteArrayInputStream;
+import java.util.Arrays;
+
+import javax.crypto.Mac;
+import javax.crypto.SecretKey;
+import javax.crypto.spec.SecretKeySpec;
+
+import libcore.io.Streams;
+
+public class MacAuthenticatedInputStreamTest extends AndroidTestCase {
+
+ private static final SecretKey HMAC_KEY_1 = new SecretKeySpec("test_key_1".getBytes(), "HMAC");
+
+ private static final byte[] TEST_STRING_1 = "Hello, World!".getBytes();
+
+ /**
+ * Generated with:
+ *
+ * echo -n 'Hello, World!' | openssl dgst -hmac 'test_key_1' -binary -sha1 | recode ..//x1 |
+ * sed 's/0x/(byte) 0x/g'
+ */
+ private static final byte[] TEST_STRING_1_MAC = {
+ (byte) 0x29, (byte) 0xB1, (byte) 0x87, (byte) 0x6B, (byte) 0xFE, (byte) 0x83,
+ (byte) 0x96, (byte) 0x51, (byte) 0x61, (byte) 0x02, (byte) 0xAF, (byte) 0x7B,
+ (byte) 0xBA, (byte) 0x05, (byte) 0xE6, (byte) 0xA4, (byte) 0xAB, (byte) 0x36,
+ (byte) 0x18, (byte) 0x02
+ };
+
+ /**
+ * Same as TEST_STRING_1_MAC but with the first byte as 0x28 instead of
+ * 0x29.
+ */
+ private static final byte[] TEST_STRING_1_MAC_BROKEN = {
+ (byte) 0x28, (byte) 0xB1, (byte) 0x87, (byte) 0x6B, (byte) 0xFE, (byte) 0x83,
+ (byte) 0x96, (byte) 0x51, (byte) 0x61, (byte) 0x02, (byte) 0xAF, (byte) 0x7B,
+ (byte) 0xBA, (byte) 0x05, (byte) 0xE6, (byte) 0xA4, (byte) 0xAB, (byte) 0x36,
+ (byte) 0x18, (byte) 0x02
+ };
+
+ private ByteArrayInputStream mTestStream1;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ mTestStream1 = new ByteArrayInputStream(TEST_STRING_1);
+ }
+
+ public void testString1Authenticate_Success() throws Exception {
+ Mac mac = Mac.getInstance("HMAC-SHA1");
+ mac.init(HMAC_KEY_1);
+
+ MacAuthenticatedInputStream is = new MacAuthenticatedInputStream(mTestStream1, mac);
+
+ assertTrue(Arrays.equals(TEST_STRING_1, Streams.readFully(is)));
+
+ assertTrue(is.isTagEqual(TEST_STRING_1_MAC));
+ }
+
+ public void testString1Authenticate_WrongTag_Failure() throws Exception {
+ Mac mac = Mac.getInstance("HMAC-SHA1");
+ mac.init(HMAC_KEY_1);
+
+ MacAuthenticatedInputStream is = new MacAuthenticatedInputStream(mTestStream1, mac);
+
+ assertTrue(Arrays.equals(TEST_STRING_1, Streams.readFully(is)));
+
+ assertFalse(is.isTagEqual(TEST_STRING_1_MAC_BROKEN));
+ }
+
+ public void testString1Authenticate_NullTag_Failure() throws Exception {
+ Mac mac = Mac.getInstance("HMAC-SHA1");
+ mac.init(HMAC_KEY_1);
+
+ MacAuthenticatedInputStream is = new MacAuthenticatedInputStream(mTestStream1, mac);
+
+ assertTrue(Arrays.equals(TEST_STRING_1, Streams.readFully(is)));
+
+ assertFalse(is.isTagEqual(null));
+ }
+
+ public void testString1Authenticate_ReadSingleByte_Success() throws Exception {
+ Mac mac = Mac.getInstance("HMAC-SHA1");
+ mac.init(HMAC_KEY_1);
+
+ MacAuthenticatedInputStream is = new MacAuthenticatedInputStream(mTestStream1, mac);
+
+ int numRead = 0;
+ while (is.read() != -1) {
+ numRead++;
+
+ if (numRead > TEST_STRING_1.length) {
+ fail("read too many bytes");
+ }
+ }
+ assertEquals(TEST_STRING_1.length, numRead);
+
+ assertTrue(is.isTagEqual(TEST_STRING_1_MAC));
+ }
+}
diff --git a/data/fonts/Android.mk b/data/fonts/Android.mk
index 8ad15b6..13f2480 100644
--- a/data/fonts/Android.mk
+++ b/data/fonts/Android.mk
@@ -65,6 +65,22 @@
include $(BUILD_PREBUILT)
include $(CLEAR_VARS)
+LOCAL_MODULE := DroidSansTamil-Regular.ttf
+LOCAL_SRC_FILES := $(LOCAL_MODULE)
+LOCAL_MODULE_CLASS := ETC
+LOCAL_MODULE_TAGS := optional
+LOCAL_MODULE_PATH := $(TARGET_OUT)/fonts
+include $(BUILD_PREBUILT)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := DroidSansTamil-Bold.ttf
+LOCAL_SRC_FILES := $(LOCAL_MODULE)
+LOCAL_MODULE_CLASS := ETC
+LOCAL_MODULE_TAGS := optional
+LOCAL_MODULE_PATH := $(TARGET_OUT)/fonts
+include $(BUILD_PREBUILT)
+
+include $(CLEAR_VARS)
LOCAL_MODULE := MTLmr3m.ttf
LOCAL_SRC_FILES := $(LOCAL_MODULE)
LOCAL_MODULE_CLASS := ETC
@@ -85,6 +101,8 @@
DroidSans.ttf \
DroidSans-Bold.ttf \
DroidSansEthiopic-Regular.ttf \
+ DroidSansTamil-Regular.ttf \
+ DroidSansTamil-Bold.ttf \
MTLmr3m.ttf \
fallback_fonts-ja.xml
endif # SMALLER_FONT_FOOTPRINT
@@ -126,6 +144,7 @@
Roboto-BoldItalic.ttf \
DroidNaskh-Regular.ttf \
DroidNaskh-Regular-SystemUI.ttf \
+ DroidSansDevanagari-Regular.ttf \
DroidSansHebrew-Regular.ttf \
DroidSansHebrew-Bold.ttf \
DroidSansThai.ttf \
diff --git a/data/fonts/DroidSansDevanagari-Regular.ttf b/data/fonts/DroidSansDevanagari-Regular.ttf
new file mode 100644
index 0000000..45e15e6a
--- /dev/null
+++ b/data/fonts/DroidSansDevanagari-Regular.ttf
Binary files differ
diff --git a/data/fonts/DroidSansTamil-Bold.ttf b/data/fonts/DroidSansTamil-Bold.ttf
new file mode 100644
index 0000000..8ad0085
--- /dev/null
+++ b/data/fonts/DroidSansTamil-Bold.ttf
Binary files differ
diff --git a/data/fonts/DroidSansTamil-Regular.ttf b/data/fonts/DroidSansTamil-Regular.ttf
new file mode 100644
index 0000000..4b8f536
--- /dev/null
+++ b/data/fonts/DroidSansTamil-Regular.ttf
Binary files differ
diff --git a/data/fonts/fallback_fonts-ja.xml b/data/fonts/fallback_fonts-ja.xml
index a182e31..be53d1d 100644
--- a/data/fonts/fallback_fonts-ja.xml
+++ b/data/fonts/fallback_fonts-ja.xml
@@ -65,7 +65,7 @@
</family>
<family>
<fileset>
- <file>Lohit-Devanagari.ttf</file>
+ <file>DroidSansDevanagari-Regular.ttf</file>
</fileset>
</family>
<family>
@@ -75,7 +75,8 @@
</family>
<family>
<fileset>
- <file>Lohit-Tamil.ttf</file>
+ <file>DroidSansTamil-Regular.ttf</file>
+ <file>DroidSansTamil-Bold.ttf</file>
</fileset>
</family>
<family>
diff --git a/data/fonts/fallback_fonts.xml b/data/fonts/fallback_fonts.xml
index 69d223e..80fffa9 100644
--- a/data/fonts/fallback_fonts.xml
+++ b/data/fonts/fallback_fonts.xml
@@ -65,7 +65,7 @@
</family>
<family>
<fileset>
- <file>Lohit-Devanagari.ttf</file>
+ <file>DroidSansDevanagari-Regular.ttf</file>
</fileset>
</family>
<family>
@@ -75,7 +75,8 @@
</family>
<family>
<fileset>
- <file>Lohit-Tamil.ttf</file>
+ <file>DroidSansTamil-Regular.ttf</file>
+ <file>DroidSansTamil-Bold.ttf</file>
</fileset>
</family>
<family>
diff --git a/data/fonts/fonts.mk b/data/fonts/fonts.mk
index 0eec616..7a84df6 100644
--- a/data/fonts/fonts.mk
+++ b/data/fonts/fonts.mk
@@ -26,6 +26,7 @@
Roboto-BoldItalic.ttf \
DroidNaskh-Regular.ttf \
DroidNaskh-Regular-SystemUI.ttf \
+ DroidSansDevanagari-Regular.ttf \
DroidSansHebrew-Regular.ttf \
DroidSansHebrew-Bold.ttf \
DroidSansThai.ttf \
diff --git a/drm/java/android/drm/DrmManagerClient.java b/drm/java/android/drm/DrmManagerClient.java
index 482ab0a..4b51994 100755
--- a/drm/java/android/drm/DrmManagerClient.java
+++ b/drm/java/android/drm/DrmManagerClient.java
@@ -242,6 +242,7 @@
public DrmManagerClient(Context context) {
mContext = context;
mReleased = false;
+ createEventThreads();
// save the unique id
mUniqueId = _initialize();
@@ -283,21 +284,6 @@
_release(mUniqueId);
}
-
- private void createListeners() {
- if (mEventHandler == null && mInfoHandler == null) {
- mInfoThread = new HandlerThread("DrmManagerClient.InfoHandler");
- mInfoThread.start();
- mInfoHandler = new InfoHandler(mInfoThread.getLooper());
-
- mEventThread = new HandlerThread("DrmManagerClient.EventHandler");
- mEventThread.start();
- mEventHandler = new EventHandler(mEventThread.getLooper());
- _setListeners(mUniqueId, new WeakReference<DrmManagerClient>(this));
- }
- }
-
-
/**
* Registers an {@link DrmManagerClient.OnInfoListener} callback, which is invoked when the
* DRM framework sends status or warning information during registration or rights acquisition.
@@ -878,5 +864,21 @@
private native DrmConvertedStatus _closeConvertSession(int uniqueId, int convertId);
private native DrmSupportInfo[] _getAllSupportInfo(int uniqueId);
+
+ private void createEventThreads() {
+ if (mEventHandler == null && mInfoHandler == null) {
+ mInfoThread = new HandlerThread("DrmManagerClient.InfoHandler");
+ mInfoThread.start();
+ mInfoHandler = new InfoHandler(mInfoThread.getLooper());
+
+ mEventThread = new HandlerThread("DrmManagerClient.EventHandler");
+ mEventThread.start();
+ mEventHandler = new EventHandler(mEventThread.getLooper());
+ }
+ }
+
+ private void createListeners() {
+ _setListeners(mUniqueId, new WeakReference<DrmManagerClient>(this));
+ }
}
diff --git a/graphics/java/android/graphics/Canvas.java b/graphics/java/android/graphics/Canvas.java
index 7e92973..3949afd 100644
--- a/graphics/java/android/graphics/Canvas.java
+++ b/graphics/java/android/graphics/Canvas.java
@@ -1617,6 +1617,13 @@
*/
public static native void freeCaches();
+ /**
+ * Free up text layout caches
+ *
+ * @hide
+ */
+ public static native void freeTextLayoutCaches();
+
private static native int initRaster(int nativeBitmapOrZero);
private static native void native_setBitmap(int nativeCanvas, int bitmap);
private static native int native_saveLayer(int nativeCanvas, RectF bounds,
diff --git a/libs/hwui/DisplayListRenderer.h b/libs/hwui/DisplayListRenderer.h
index 4edefd5..5ce770d 100644
--- a/libs/hwui/DisplayListRenderer.h
+++ b/libs/hwui/DisplayListRenderer.h
@@ -255,7 +255,7 @@
if (scaleY != mScaleY) {
mScaleY = scaleY;
mMatrixDirty = true;
- if (ALMOST_EQUAL(mScaleX, 1) && ALMOST_EQUAL(mScaleY, 1)) {
+ if (mScaleX == 1.0f && mScaleY == 1.0f) {
mMatrixFlags &= ~SCALE;
} else {
mMatrixFlags |= SCALE;
diff --git a/libs/hwui/Matrix.cpp b/libs/hwui/Matrix.cpp
index a8f937d..7348f4d 100644
--- a/libs/hwui/Matrix.cpp
+++ b/libs/hwui/Matrix.cpp
@@ -56,16 +56,13 @@
}
bool Matrix4::changesBounds() {
- return !(ALMOST_EQUAL(data[0], 1.0f) && ALMOST_EQUAL(data[1], 0.0f) &&
- ALMOST_EQUAL(data[2], 0.0f) && ALMOST_EQUAL(data[4], 0.0f) &&
- ALMOST_EQUAL(data[5], 1.0f) && ALMOST_EQUAL(data[6], 0.0f) &&
- ALMOST_EQUAL(data[8], 0.0f) && ALMOST_EQUAL(data[9], 0.0f) &&
- ALMOST_EQUAL(data[10], 1.0f));
+ return !(data[0] == 1.0f && data[1] == 0.0f && data[2] == 0.0f && data[4] == 0.0f &&
+ data[5] == 1.0f && data[6] == 0.0f && data[8] == 0.0f && data[9] == 0.0f &&
+ data[10] == 1.0f);
}
bool Matrix4::isPureTranslate() {
- return mSimpleMatrix &&
- ALMOST_EQUAL(data[kScaleX], 1.0f) && ALMOST_EQUAL(data[kScaleY], 1.0f);
+ return mSimpleMatrix && data[kScaleX] == 1.0f && data[kScaleY] == 1.0f;
}
bool Matrix4::isSimple() {
diff --git a/media/java/android/media/Ringtone.java b/media/java/android/media/Ringtone.java
index 57139d2..23f7b55 100644
--- a/media/java/android/media/Ringtone.java
+++ b/media/java/android/media/Ringtone.java
@@ -128,13 +128,16 @@
actualTitle);
}
} else {
-
- if (DrmStore.AUTHORITY.equals(authority)) {
- cursor = res.query(uri, DRM_COLUMNS, null, null, null);
- } else if (MediaStore.AUTHORITY.equals(authority)) {
- cursor = res.query(uri, MEDIA_COLUMNS, null, null, null);
+ try {
+ if (DrmStore.AUTHORITY.equals(authority)) {
+ cursor = res.query(uri, DRM_COLUMNS, null, null, null);
+ } else if (MediaStore.AUTHORITY.equals(authority)) {
+ cursor = res.query(uri, MEDIA_COLUMNS, null, null, null);
+ }
+ } catch (SecurityException e) {
+ // missing cursor is handled below
}
-
+
try {
if (cursor != null && cursor.getCount() == 1) {
cursor.moveToFirst();
@@ -188,12 +191,12 @@
} catch (SecurityException e) {
destroyLocalPlayer();
if (!mAllowRemote) {
- throw new IllegalStateException("Remote playback not allowed", e);
+ Log.w(TAG, "Remote playback not allowed: " + e);
}
} catch (IOException e) {
destroyLocalPlayer();
if (!mAllowRemote) {
- throw new IllegalStateException("Remote playback not allowed", e);
+ Log.w(TAG, "Remote playback not allowed: " + e);
}
}
@@ -228,7 +231,7 @@
Log.w(TAG, "Problem playing ringtone: " + e);
}
} else {
- throw new IllegalStateException("Neither local nor remote playback available");
+ Log.w(TAG, "Neither local nor remote playback available");
}
}
@@ -271,7 +274,8 @@
return false;
}
} else {
- throw new IllegalStateException("Neither local nor remote playback available");
+ Log.w(TAG, "Neither local nor remote playback available");
+ return false;
}
}
diff --git a/packages/DefaultContainerService/src/com/android/defcontainer/DefaultContainerService.java b/packages/DefaultContainerService/src/com/android/defcontainer/DefaultContainerService.java
index c709e40..17e5f4e 100644
--- a/packages/DefaultContainerService/src/com/android/defcontainer/DefaultContainerService.java
+++ b/packages/DefaultContainerService/src/com/android/defcontainer/DefaultContainerService.java
@@ -22,7 +22,10 @@
import android.app.IntentService;
import android.content.Intent;
+import android.content.pm.MacAuthenticatedInputStream;
+import android.content.pm.ContainerEncryptionParams;
import android.content.pm.IPackageManager;
+import android.content.pm.LimitedLengthInputStream;
import android.content.pm.PackageInfo;
import android.content.pm.PackageInfoLite;
import android.content.pm.PackageManager;
@@ -49,9 +52,21 @@
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
+import java.security.DigestException;
+import java.security.GeneralSecurityException;
+import java.security.InvalidAlgorithmParameterException;
+import java.security.InvalidKeyException;
+import java.security.NoSuchAlgorithmException;
+
+import javax.crypto.Cipher;
+import javax.crypto.CipherInputStream;
+import javax.crypto.Mac;
+import javax.crypto.NoSuchPaddingException;
import libcore.io.ErrnoException;
+import libcore.io.IoUtils;
import libcore.io.Libcore;
+import libcore.io.Streams;
import libcore.io.StructStatFs;
/*
@@ -68,7 +83,7 @@
private static final String LIB_DIR_NAME = "lib";
private IMediaContainerService.Stub mBinder = new IMediaContainerService.Stub() {
- /*
+ /**
* Creates a new container and copies resource there.
* @param paackageURI the uri of resource to be copied. Can be either
* a content uri or a file uri
@@ -92,15 +107,19 @@
isExternal, isForwardLocked);
}
- /*
+ /**
* Copy specified resource to output stream
+ *
* @param packageURI the uri of resource to be copied. Should be a file
- * uri
+ * uri
+ * @param encryptionParams parameters describing the encryption used for
+ * this file
* @param outStream Remote file descriptor to be used for copying
- * @return returns status code according to those in {@link
- * PackageManager}
+ * @return returns status code according to those in
+ * {@link PackageManager}
*/
- public int copyResource(final Uri packageURI, ParcelFileDescriptor outStream) {
+ public int copyResource(final Uri packageURI, ContainerEncryptionParams encryptionParams,
+ ParcelFileDescriptor outStream) {
if (packageURI == null || outStream == null) {
return PackageManager.INSTALL_FAILED_INVALID_URI;
}
@@ -109,7 +128,7 @@
= new ParcelFileDescriptor.AutoCloseOutputStream(outStream);
try {
- copyFile(packageURI, autoOut);
+ copyFile(packageURI, autoOut, encryptionParams);
return PackageManager.INSTALL_SUCCEEDED;
} catch (FileNotFoundException e) {
Slog.e(TAG, "Could not copy URI " + packageURI.toString() + " FNF: "
@@ -119,10 +138,14 @@
Slog.e(TAG, "Could not copy URI " + packageURI.toString() + " IO: "
+ e.getMessage());
return PackageManager.INSTALL_FAILED_INSUFFICIENT_STORAGE;
+ } catch (DigestException e) {
+ Slog.e(TAG, "Could not copy URI " + packageURI.toString() + " Security: "
+ + e.getMessage());
+ return PackageManager.INSTALL_FAILED_INVALID_APK;
}
}
- /*
+ /**
* Determine the recommended install location for package
* specified by file uri location.
* @param fileUri the uri of resource to be copied. Should be a
@@ -130,28 +153,24 @@
* @return Returns PackageInfoLite object containing
* the package info and recommended app location.
*/
- public PackageInfoLite getMinimalPackageInfo(final Uri fileUri, int flags, long threshold) {
+ public PackageInfoLite getMinimalPackageInfo(final String packagePath, int flags,
+ long threshold) {
PackageInfoLite ret = new PackageInfoLite();
- if (fileUri == null) {
- Slog.i(TAG, "Invalid package uri " + fileUri);
+
+ if (packagePath == null) {
+ Slog.i(TAG, "Invalid package file " + packagePath);
ret.recommendedInstallLocation = PackageHelper.RECOMMEND_FAILED_INVALID_APK;
return ret;
}
- String scheme = fileUri.getScheme();
- if (scheme != null && !scheme.equals("file")) {
- Slog.w(TAG, "Falling back to installing on internal storage only");
- ret.recommendedInstallLocation = PackageHelper.RECOMMEND_INSTALL_INTERNAL;
- return ret;
- }
- String archiveFilePath = fileUri.getPath();
+
DisplayMetrics metrics = new DisplayMetrics();
metrics.setToDefaults();
- PackageParser.PackageLite pkg = PackageParser.parsePackageLite(archiveFilePath, 0);
+ PackageParser.PackageLite pkg = PackageParser.parsePackageLite(packagePath, 0);
if (pkg == null) {
Slog.w(TAG, "Failed to parse package");
- final File apkFile = new File(archiveFilePath);
+ final File apkFile = new File(packagePath);
if (!apkFile.exists()) {
ret.recommendedInstallLocation = PackageHelper.RECOMMEND_FAILED_INVALID_URI;
} else {
@@ -160,12 +179,13 @@
return ret;
}
+
ret.packageName = pkg.packageName;
ret.installLocation = pkg.installLocation;
ret.verifiers = pkg.verifiers;
ret.recommendedInstallLocation = recommendAppInstallLocation(pkg.installLocation,
- archiveFilePath, flags, threshold);
+ packagePath, flags, threshold);
return ret;
}
@@ -392,55 +412,195 @@
}
}
- private static void copyToFile(File srcFile, OutputStream out)
- throws FileNotFoundException, IOException {
- InputStream inputStream = new BufferedInputStream(new FileInputStream(srcFile));
+ private void copyFile(Uri pPackageURI, OutputStream outStream,
+ ContainerEncryptionParams encryptionParams) throws FileNotFoundException, IOException,
+ DigestException {
+ String scheme = pPackageURI.getScheme();
+ InputStream inStream = null;
try {
- copyToFile(inputStream, out);
+ if (scheme == null || scheme.equals("file")) {
+ final InputStream is = new FileInputStream(new File(pPackageURI.getPath()));
+ inStream = new BufferedInputStream(is);
+ } else if (scheme.equals("content")) {
+ final ParcelFileDescriptor fd;
+ try {
+ fd = getContentResolver().openFileDescriptor(pPackageURI, "r");
+ } catch (FileNotFoundException e) {
+ Slog.e(TAG, "Couldn't open file descriptor from download service. "
+ + "Failed with exception " + e);
+ throw e;
+ }
+
+ if (fd == null) {
+ Slog.e(TAG, "Provider returned no file descriptor for " +
+ pPackageURI.toString());
+ throw new FileNotFoundException("provider returned no file descriptor");
+ } else {
+ if (localLOGV) {
+ Slog.i(TAG, "Opened file descriptor from download service.");
+ }
+ inStream = new ParcelFileDescriptor.AutoCloseInputStream(fd);
+ }
+ } else {
+ Slog.e(TAG, "Package URI is not 'file:' or 'content:' - " + pPackageURI);
+ throw new FileNotFoundException("Package URI is not 'file:' or 'content:'");
+ }
+
+ /*
+ * If this resource is encrypted, get the decrypted stream version
+ * of it.
+ */
+ ApkContainer container = new ApkContainer(inStream, encryptionParams);
+
+ try {
+ /*
+ * We copy the source package file to a temp file and then
+ * rename it to the destination file in order to eliminate a
+ * window where the package directory scanner notices the new
+ * package file but it's not completely copied yet.
+ */
+ copyToFile(container.getInputStream(), outStream);
+
+ if (!container.isAuthenticated()) {
+ throw new DigestException();
+ }
+ } catch (GeneralSecurityException e) {
+ throw new DigestException("A problem occured copying the file.");
+ }
} finally {
- try { inputStream.close(); } catch (IOException e) {}
+ IoUtils.closeQuietly(inStream);
}
}
- private void copyFile(Uri pPackageURI, OutputStream outStream) throws FileNotFoundException,
- IOException {
- String scheme = pPackageURI.getScheme();
- if (scheme == null || scheme.equals("file")) {
- final File srcPackageFile = new File(pPackageURI.getPath());
- // We copy the source package file to a temp file and then rename it to the
- // destination file in order to eliminate a window where the package directory
- // scanner notices the new package file but it's not completely copied yet.
- copyToFile(srcPackageFile, outStream);
- } else if (scheme.equals("content")) {
- ParcelFileDescriptor fd = null;
- try {
- fd = getContentResolver().openFileDescriptor(pPackageURI, "r");
- } catch (FileNotFoundException e) {
- Slog.e(TAG, "Couldn't open file descriptor from download service. "
- + "Failed with exception " + e);
- throw e;
- }
+ private static class ApkContainer {
+ private final InputStream mInStream;
- if (fd == null) {
- Slog.e(TAG, "Provider returned no file descriptor for " + pPackageURI.toString());
- throw new FileNotFoundException("provider returned no file descriptor");
+ private MacAuthenticatedInputStream mAuthenticatedStream;
+
+ private byte[] mTag;
+
+ public ApkContainer(InputStream inStream, ContainerEncryptionParams encryptionParams)
+ throws IOException {
+ if (encryptionParams == null) {
+ mInStream = inStream;
} else {
- if (localLOGV) {
- Slog.i(TAG, "Opened file descriptor from download service.");
- }
- ParcelFileDescriptor.AutoCloseInputStream dlStream
- = new ParcelFileDescriptor.AutoCloseInputStream(fd);
-
- // We copy the source package file to a temp file and then rename it to the
- // destination file in order to eliminate a window where the package directory
- // scanner notices the new package file but it's not completely
- // copied
- copyToFile(dlStream, outStream);
+ mInStream = getDecryptedStream(inStream, encryptionParams);
+ mTag = encryptionParams.getMacTag();
}
- } else {
- Slog.e(TAG, "Package URI is not 'file:' or 'content:' - " + pPackageURI);
- throw new FileNotFoundException("Package URI is not 'file:' or 'content:'");
}
+
+ public boolean isAuthenticated() {
+ if (mAuthenticatedStream == null) {
+ return true;
+ }
+
+ return mAuthenticatedStream.isTagEqual(mTag);
+ }
+
+ private Mac getMacInstance(ContainerEncryptionParams encryptionParams) throws IOException {
+ final Mac m;
+ try {
+ final String macAlgo = encryptionParams.getMacAlgorithm();
+
+ if (macAlgo != null) {
+ m = Mac.getInstance(macAlgo);
+ m.init(encryptionParams.getMacKey(), encryptionParams.getMacSpec());
+ } else {
+ m = null;
+ }
+
+ return m;
+ } catch (NoSuchAlgorithmException e) {
+ throw new IOException(e);
+ } catch (InvalidKeyException e) {
+ throw new IOException(e);
+ } catch (InvalidAlgorithmParameterException e) {
+ throw new IOException(e);
+ }
+ }
+
+ public InputStream getInputStream() {
+ return mInStream;
+ }
+
+ private InputStream getDecryptedStream(InputStream inStream,
+ ContainerEncryptionParams encryptionParams) throws IOException {
+ final Cipher c;
+ try {
+ c = Cipher.getInstance(encryptionParams.getEncryptionAlgorithm());
+ c.init(Cipher.DECRYPT_MODE, encryptionParams.getEncryptionKey(),
+ encryptionParams.getEncryptionSpec());
+ } catch (NoSuchAlgorithmException e) {
+ throw new IOException(e);
+ } catch (NoSuchPaddingException e) {
+ throw new IOException(e);
+ } catch (InvalidKeyException e) {
+ throw new IOException(e);
+ } catch (InvalidAlgorithmParameterException e) {
+ throw new IOException(e);
+ }
+
+ final int encStart = encryptionParams.getEncryptedDataStart();
+ final int end = encryptionParams.getDataEnd();
+ if (end < encStart) {
+ throw new IOException("end <= encStart");
+ }
+
+ final Mac mac = getMacInstance(encryptionParams);
+ if (mac != null) {
+ final int macStart = encryptionParams.getAuthenticatedDataStart();
+
+ final int furtherOffset;
+ if (macStart >= 0 && encStart >= 0 && macStart < encStart) {
+ /*
+ * If there is authenticated data at the beginning, read
+ * that into our MAC first.
+ */
+ final int authenticatedLength = encStart - macStart;
+ final byte[] authenticatedData = new byte[authenticatedLength];
+
+ Streams.readFully(inStream, authenticatedData, macStart, authenticatedLength);
+ mac.update(authenticatedData, 0, authenticatedLength);
+
+ furtherOffset = 0;
+ } else {
+ /*
+ * No authenticated data at the beginning. Just skip the
+ * required number of bytes to the beginning of the stream.
+ */
+ if (encStart > 0) {
+ furtherOffset = encStart;
+ } else {
+ furtherOffset = 0;
+ }
+ }
+
+ /*
+ * If there is data at the end of the stream we want to ignore,
+ * wrap this in a LimitedLengthInputStream.
+ */
+ if (furtherOffset >= 0 && end > furtherOffset) {
+ inStream = new LimitedLengthInputStream(inStream, furtherOffset, end - encStart);
+ } else if (furtherOffset > 0) {
+ inStream.skip(furtherOffset);
+ }
+
+ mAuthenticatedStream = new MacAuthenticatedInputStream(inStream, mac);
+
+ inStream = mAuthenticatedStream;
+ } else {
+ if (encStart >= 0) {
+ if (end > encStart) {
+ inStream = new LimitedLengthInputStream(inStream, encStart, end - encStart);
+ } else {
+ inStream.skip(encStart);
+ }
+ }
+ }
+
+ return new CipherInputStream(inStream, c);
+ }
+
}
private static final int PREFER_INTERNAL = 1;
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_notify_clear_normal.png b/packages/SystemUI/res/drawable-hdpi/ic_notify_clear_normal.png
index babddb1..a54761f 100644
--- a/packages/SystemUI/res/drawable-hdpi/ic_notify_clear_normal.png
+++ b/packages/SystemUI/res/drawable-hdpi/ic_notify_clear_normal.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_notify_clear_pressed.png b/packages/SystemUI/res/drawable-hdpi/ic_notify_clear_pressed.png
index 56cd6f9..f3f336c 100644
--- a/packages/SystemUI/res/drawable-hdpi/ic_notify_clear_pressed.png
+++ b/packages/SystemUI/res/drawable-hdpi/ic_notify_clear_pressed.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_notify_quicksettings_normal.png b/packages/SystemUI/res/drawable-hdpi/ic_notify_quicksettings_normal.png
index 23ce001..3ed7418 100644
--- a/packages/SystemUI/res/drawable-hdpi/ic_notify_quicksettings_normal.png
+++ b/packages/SystemUI/res/drawable-hdpi/ic_notify_quicksettings_normal.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_notify_quicksettings_pressed.png b/packages/SystemUI/res/drawable-hdpi/ic_notify_quicksettings_pressed.png
index d0754a39..5e20eea 100644
--- a/packages/SystemUI/res/drawable-hdpi/ic_notify_quicksettings_pressed.png
+++ b/packages/SystemUI/res/drawable-hdpi/ic_notify_quicksettings_pressed.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_notify_rotation_off_normal.png b/packages/SystemUI/res/drawable-hdpi/ic_notify_rotation_off_normal.png
new file mode 100644
index 0000000..4ca1ab8
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_notify_rotation_off_normal.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_notify_rotation_off_pressed.png b/packages/SystemUI/res/drawable-hdpi/ic_notify_rotation_off_pressed.png
new file mode 100644
index 0000000..85a4cd2
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_notify_rotation_off_pressed.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_notify_rotation_on_normal.png b/packages/SystemUI/res/drawable-hdpi/ic_notify_rotation_on_normal.png
new file mode 100644
index 0000000..d0cb087
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_notify_rotation_on_normal.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_notify_rotation_on_pressed.png b/packages/SystemUI/res/drawable-hdpi/ic_notify_rotation_on_pressed.png
new file mode 100644
index 0000000..c1c9e16
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_notify_rotation_on_pressed.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/navbar_search_bg_scrim.9.png b/packages/SystemUI/res/drawable-hdpi/navbar_search_bg_scrim.9.png
new file mode 100644
index 0000000..4c163a2
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/navbar_search_bg_scrim.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_notify_clear_normal.png b/packages/SystemUI/res/drawable-mdpi/ic_notify_clear_normal.png
index bf1bad5..b44b527 100644
--- a/packages/SystemUI/res/drawable-mdpi/ic_notify_clear_normal.png
+++ b/packages/SystemUI/res/drawable-mdpi/ic_notify_clear_normal.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_notify_clear_pressed.png b/packages/SystemUI/res/drawable-mdpi/ic_notify_clear_pressed.png
index 320d92d..94c8165 100644
--- a/packages/SystemUI/res/drawable-mdpi/ic_notify_clear_pressed.png
+++ b/packages/SystemUI/res/drawable-mdpi/ic_notify_clear_pressed.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_notify_quicksettings_normal.png b/packages/SystemUI/res/drawable-mdpi/ic_notify_quicksettings_normal.png
index b58e4dc..44cfc5b 100644
--- a/packages/SystemUI/res/drawable-mdpi/ic_notify_quicksettings_normal.png
+++ b/packages/SystemUI/res/drawable-mdpi/ic_notify_quicksettings_normal.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_notify_quicksettings_pressed.png b/packages/SystemUI/res/drawable-mdpi/ic_notify_quicksettings_pressed.png
index 604eb75..0c3fdcd 100644
--- a/packages/SystemUI/res/drawable-mdpi/ic_notify_quicksettings_pressed.png
+++ b/packages/SystemUI/res/drawable-mdpi/ic_notify_quicksettings_pressed.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_notify_rotation_off_normal.png b/packages/SystemUI/res/drawable-mdpi/ic_notify_rotation_off_normal.png
new file mode 100644
index 0000000..77da014
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_notify_rotation_off_normal.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_notify_rotation_off_pressed.png b/packages/SystemUI/res/drawable-mdpi/ic_notify_rotation_off_pressed.png
new file mode 100644
index 0000000..f132d5c
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_notify_rotation_off_pressed.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_notify_rotation_on_normal.png b/packages/SystemUI/res/drawable-mdpi/ic_notify_rotation_on_normal.png
new file mode 100644
index 0000000..1637209
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_notify_rotation_on_normal.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_notify_rotation_on_pressed.png b/packages/SystemUI/res/drawable-mdpi/ic_notify_rotation_on_pressed.png
new file mode 100644
index 0000000..4d8fbde
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_notify_rotation_on_pressed.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/navbar_search_bg_scrim.9.png b/packages/SystemUI/res/drawable-mdpi/navbar_search_bg_scrim.9.png
new file mode 100644
index 0000000..21c5abd
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/navbar_search_bg_scrim.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_notify_clear_normal.png b/packages/SystemUI/res/drawable-xhdpi/ic_notify_clear_normal.png
index cf9bd8e..870beb4 100644
--- a/packages/SystemUI/res/drawable-xhdpi/ic_notify_clear_normal.png
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_notify_clear_normal.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_notify_clear_pressed.png b/packages/SystemUI/res/drawable-xhdpi/ic_notify_clear_pressed.png
index 8eee4d9..94a4646 100644
--- a/packages/SystemUI/res/drawable-xhdpi/ic_notify_clear_pressed.png
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_notify_clear_pressed.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_notify_quicksettings_normal.png b/packages/SystemUI/res/drawable-xhdpi/ic_notify_quicksettings_normal.png
index 5e67545..80fdb79 100644
--- a/packages/SystemUI/res/drawable-xhdpi/ic_notify_quicksettings_normal.png
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_notify_quicksettings_normal.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_notify_quicksettings_pressed.png b/packages/SystemUI/res/drawable-xhdpi/ic_notify_quicksettings_pressed.png
index e56aeda..ac7c1a7 100644
--- a/packages/SystemUI/res/drawable-xhdpi/ic_notify_quicksettings_pressed.png
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_notify_quicksettings_pressed.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_notify_rotation_off_normal.png b/packages/SystemUI/res/drawable-xhdpi/ic_notify_rotation_off_normal.png
new file mode 100644
index 0000000..cebd6d8
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_notify_rotation_off_normal.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_notify_rotation_off_pressed.png b/packages/SystemUI/res/drawable-xhdpi/ic_notify_rotation_off_pressed.png
new file mode 100644
index 0000000..ef4d9a1
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_notify_rotation_off_pressed.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_notify_rotation_on_normal.png b/packages/SystemUI/res/drawable-xhdpi/ic_notify_rotation_on_normal.png
new file mode 100644
index 0000000..01146aa
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_notify_rotation_on_normal.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_notify_rotation_on_pressed.png b/packages/SystemUI/res/drawable-xhdpi/ic_notify_rotation_on_pressed.png
new file mode 100644
index 0000000..e8f01c5
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_notify_rotation_on_pressed.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/navbar_search_bg_scrim.9.png b/packages/SystemUI/res/drawable-xhdpi/navbar_search_bg_scrim.9.png
new file mode 100644
index 0000000..7874c63
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/navbar_search_bg_scrim.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable/ic_notify_quicksettings.xml b/packages/SystemUI/res/drawable/ic_notify_quicksettings.xml
index b37dc39..d8ea524 100644
--- a/packages/SystemUI/res/drawable/ic_notify_quicksettings.xml
+++ b/packages/SystemUI/res/drawable/ic_notify_quicksettings.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2011 The Android Open Source Project
+<!-- Copyright (C) 2012 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.
@@ -16,6 +16,8 @@
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
- android:drawable="@drawable/ic_notify_quicksettings_pressed" />
- <item android:drawable="@drawable/ic_notify_quicksettings_normal" />
+ android:drawable="@drawable/ic_notify_quicksettings_pressed" />
+ <item
+ android:drawable="@drawable/ic_notify_quicksettings_normal" />
</selector>
+
diff --git a/packages/SystemUI/res/drawable/ic_notify_rotation.xml b/packages/SystemUI/res/drawable/ic_notify_rotation.xml
new file mode 100644
index 0000000..213af80
--- /dev/null
+++ b/packages/SystemUI/res/drawable/ic_notify_rotation.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2012 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.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_checked="true"
+ android:drawable="@drawable/ic_notify_rotation_on_normal" />
+ <item android:state_checked="true" android:state_pressed="true"
+ android:drawable="@drawable/ic_notify_rotation_on_pressed" />
+ <item android:state_pressed="true"
+ android:drawable="@drawable/ic_notify_rotation_off_pressed" />
+ <item
+ android:drawable="@drawable/ic_notify_rotation_off_normal" />
+</selector>
+
diff --git a/packages/SystemUI/res/drawable/navbar_search_bg_scrim.png b/packages/SystemUI/res/drawable/navbar_search_bg_scrim.png
deleted file mode 100644
index d595ed2..0000000
--- a/packages/SystemUI/res/drawable/navbar_search_bg_scrim.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/layout-land/status_bar_search_panel.xml b/packages/SystemUI/res/layout-land/status_bar_search_panel.xml
index 2adee33..5d4d989 100644
--- a/packages/SystemUI/res/layout-land/status_bar_search_panel.xml
+++ b/packages/SystemUI/res/layout-land/status_bar_search_panel.xml
@@ -34,17 +34,18 @@
<RelativeLayout
android:id="@+id/search_panel_container"
- android:layout_width="230dip"
+ android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignParentRight="true">
<com.android.internal.widget.multiwaveview.MultiWaveView
android:id="@+id/multi_wave_view"
android:orientation="vertical"
- android:layout_width="match_parent"
+ android:layout_width="@dimen/navbar_search_panel_height"
android:layout_height="match_parent"
android:layout_alignParentBottom="true"
android:background="@drawable/navbar_search_bg_scrim"
+ android:gravity="left"
prvandroid:targetDrawables="@array/navbar_search_targets"
prvandroid:targetDescriptions="@array/navbar_search_target_descriptions"
@@ -54,8 +55,6 @@
prvandroid:outerRadius="@dimen/navbar_search_target_placement_radius"
prvandroid:snapMargin="@dimen/navbar_search_snap_margin"
prvandroid:hitRadius="@dimen/navbar_search_hit_radius"
- prvandroid:verticalOffset="0dip"
- prvandroid:horizontalOffset="60dip"
prvandroid:feedbackCount="0"
prvandroid:vibrationDuration="0"
prvandroid:alwaysTrackFinger="true"/>
diff --git a/packages/SystemUI/res/layout-port/status_bar_search_panel.xml b/packages/SystemUI/res/layout-port/status_bar_search_panel.xml
index 463fa04..2486b75 100644
--- a/packages/SystemUI/res/layout-port/status_bar_search_panel.xml
+++ b/packages/SystemUI/res/layout-port/status_bar_search_panel.xml
@@ -35,16 +35,17 @@
<RelativeLayout
android:id="@+id/search_panel_container"
android:layout_width="match_parent"
- android:layout_height="230dip"
+ android:layout_height="wrap_content"
android:layout_alignParentBottom="true">
<com.android.internal.widget.multiwaveview.MultiWaveView
android:id="@+id/multi_wave_view"
android:orientation="horizontal"
android:layout_width="match_parent"
- android:layout_height="match_parent"
+ android:layout_height="@dimen/navbar_search_panel_height"
android:layout_alignParentBottom="true"
android:background="@drawable/navbar_search_bg_scrim"
+ android:gravity="top"
prvandroid:targetDrawables="@array/navbar_search_targets"
prvandroid:targetDescriptions="@array/navbar_search_target_descriptions"
@@ -54,8 +55,6 @@
prvandroid:outerRadius="@dimen/navbar_search_target_placement_radius"
prvandroid:snapMargin="@dimen/navbar_search_snap_margin"
prvandroid:hitRadius="@dimen/navbar_search_hit_radius"
- prvandroid:horizontalOffset="0dip"
- prvandroid:verticalOffset="60dip"
prvandroid:feedbackCount="0"
prvandroid:vibrationDuration="0"
prvandroid:alwaysTrackFinger="true"/>
diff --git a/packages/SystemUI/res/layout-sw600dp/status_bar_search_panel.xml b/packages/SystemUI/res/layout-sw600dp/status_bar_search_panel.xml
index 6e33e27..4b2fbc7 100644
--- a/packages/SystemUI/res/layout-sw600dp/status_bar_search_panel.xml
+++ b/packages/SystemUI/res/layout-sw600dp/status_bar_search_panel.xml
@@ -29,23 +29,32 @@
<RelativeLayout
android:id="@+id/search_bg_protect"
android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginBottom="0dip">
+ android:layout_height="wrap_content">
<RelativeLayout
android:id="@+id/search_panel_container"
android:layout_width="wrap_content"
- android:layout_height="230dip"
+ android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
- android:layout_alignParentLeft="true">
+ android:layout_centerHorizontal="true">
+
+ <View
+ android:layout_width="0dip"
+ android:layout_height="0dip"
+ android:layout_alignTop="@id/multi_wave_view"
+ android:layout_alignLeft="@id/multi_wave_view"
+ android:layout_alignRight="@id/multi_wave_view"
+ android:layout_alignBottom="@id/multi_wave_view"
+ android:layout_marginBottom="@dimen/navigation_bar_size"
+ android:background="@drawable/navbar_search_bg_scrim"/>
<com.android.internal.widget.multiwaveview.MultiWaveView
android:id="@+id/multi_wave_view"
android:orientation="horizontal"
android:layout_width="wrap_content"
- android:layout_height="match_parent"
+ android:layout_height="@dimen/navbar_search_panel_height"
android:layout_alignParentBottom="true"
- android:background="@drawable/navbar_search_bg_scrim"
+ android:gravity="top"
prvandroid:targetDrawables="@array/navbar_search_targets"
prvandroid:targetDescriptions="@array/navbar_search_target_descriptions"
@@ -55,8 +64,6 @@
prvandroid:outerRadius="@dimen/navbar_search_target_placement_radius"
prvandroid:snapMargin="@dimen/navbar_search_snap_margin"
prvandroid:hitRadius="@dimen/navbar_search_hit_radius"
- prvandroid:horizontalOffset="0dip"
- prvandroid:verticalOffset="60dip"
prvandroid:feedbackCount="0"
prvandroid:vibrationDuration="0"
prvandroid:alwaysTrackFinger="true"/>
diff --git a/packages/SystemUI/res/layout-sw720dp/status_bar_search_panel.xml b/packages/SystemUI/res/layout-sw720dp/status_bar_search_panel.xml
new file mode 100644
index 0000000..b4872c7
--- /dev/null
+++ b/packages/SystemUI/res/layout-sw720dp/status_bar_search_panel.xml
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/* apps/common/assets/default/default/skins/StatusBar.xml
+**
+** Copyright 2012, 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.
+*/
+-->
+
+<com.android.systemui.SearchPanelView
+ xmlns:prvandroid="http://schemas.android.com/apk/prv/res/android"
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/search_panel_container"
+ android:layout_height="wrap_content"
+ android:layout_width="match_parent"
+ android:paddingBottom="0dip">
+
+ <RelativeLayout
+ android:id="@+id/search_bg_protect"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content">
+
+ <RelativeLayout
+ android:id="@+id/search_panel_container"
+ android:layout_width="wrap_content"
+ android:layout_height="@dimen/navbar_search_panel_height"
+ android:layout_alignParentBottom="true"
+ android:layout_alignParentLeft="true">
+
+ <View
+ android:layout_width="0dip"
+ android:layout_height="0dip"
+ android:layout_alignTop="@id/multi_wave_view"
+ android:layout_alignLeft="@id/multi_wave_view"
+ android:layout_alignRight="@id/multi_wave_view"
+ android:layout_alignBottom="@id/multi_wave_view"
+ android:layout_marginBottom="@dimen/navigation_bar_size"
+ android:background="@drawable/navbar_search_bg_scrim"/>
+
+ <com.android.internal.widget.multiwaveview.MultiWaveView
+ android:id="@+id/multi_wave_view"
+ android:orientation="horizontal"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:layout_alignParentBottom="true"
+
+ prvandroid:targetDrawables="@array/navbar_search_targets"
+ prvandroid:targetDescriptions="@array/navbar_search_target_descriptions"
+ prvandroid:directionDescriptions="@array/navbar_search_direction_descriptions"
+ prvandroid:handleDrawable="@drawable/navbar_search_handle"
+ prvandroid:waveDrawable="@drawable/navbar_search_outerring"
+ prvandroid:outerRadius="@dimen/navbar_search_target_placement_radius"
+ prvandroid:snapMargin="@dimen/navbar_search_snap_margin"
+ prvandroid:hitRadius="@dimen/navbar_search_hit_radius"
+ prvandroid:feedbackCount="0"
+ prvandroid:vibrationDuration="0"
+ prvandroid:alwaysTrackFinger="true"/>
+
+ </RelativeLayout>
+
+ </RelativeLayout>
+
+</com.android.systemui.SearchPanelView>
diff --git a/packages/SystemUI/res/layout/status_bar_expanded.xml b/packages/SystemUI/res/layout/status_bar_expanded.xml
index 1de4ab8..8715a99 100644
--- a/packages/SystemUI/res/layout/status_bar_expanded.xml
+++ b/packages/SystemUI/res/layout/status_bar_expanded.xml
@@ -38,14 +38,25 @@
android:paddingRight="3dp"
android:background="@drawable/notification_header_bg"
>
- <com.android.systemui.statusbar.policy.DateView android:id="@+id/date"
- android:textAppearance="@style/TextAppearance.StatusBar.Date"
+ <com.android.systemui.statusbar.policy.Clock
+ android:id="@+id/clock"
android:layout_width="wrap_content"
- android:layout_height="match_parent"
+ android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
+ android:layout_centerVertical="true"
+ android:layout_marginLeft="8dp"
android:singleLine="true"
- android:gravity="center_vertical|left"
- android:paddingLeft="16dp"
+ android:textAppearance="@style/TextAppearance.StatusBar.Expanded.Clock"
+ />
+
+ <com.android.systemui.statusbar.policy.DateView android:id="@+id/date"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_centerVertical="true"
+ android:layout_toRightOf="@id/clock"
+ android:layout_marginLeft="8dp"
+ android:paddingLeft="8dp"
+ android:textAppearance="@style/TextAppearance.StatusBar.Expanded.Date"
/>
<!--
<com.android.systemui.statusbar.phone.CarrierLabel
@@ -62,22 +73,32 @@
/>
-->
- <ImageView android:id="@+id/settings_button"
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
+ <com.android.systemui.statusbar.RotationToggle android:id="@+id/rotation_lock_button"
+ android:layout_width="32dp"
+ android:layout_height="32dp"
+ android:layout_centerVertical="true"
android:layout_toRightOf="@id/date"
- android:paddingLeft="8dp"
- android:paddingRight="8dp"
+ android:layout_marginLeft="12dp"
+ android:button="@drawable/ic_notify_rotation"
+ android:contentDescription="@string/accessibility_rotation_lock_off"
+ />
+
+ <ImageView android:id="@+id/settings_button"
+ android:layout_width="32dp"
+ android:layout_height="32dp"
+ android:layout_marginLeft="8dp"
+ android:layout_centerVertical="true"
+ android:layout_toRightOf="@id/rotation_lock_button"
android:src="@drawable/ic_notify_quicksettings"
android:contentDescription="@string/accessibility_settings_button"
/>
<ImageView android:id="@+id/clear_all_button"
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
+ android:layout_width="32dp"
+ android:layout_height="32dp"
+ android:layout_marginLeft="8dp"
+ android:layout_centerVertical="true"
android:layout_alignParentRight="true"
- android:paddingLeft="8dp"
- android:paddingRight="8dp"
android:src="@drawable/ic_notify_clear"
android:contentDescription="@string/accessibility_clear_all"
/>
diff --git a/packages/SystemUI/res/values-af/strings.xml b/packages/SystemUI/res/values-af/strings.xml
index a9810d1..47ac16d 100644
--- a/packages/SystemUI/res/values-af/strings.xml
+++ b/packages/SystemUI/res/values-af/strings.xml
@@ -140,4 +140,8 @@
<string name="accessibility_clear_all" msgid="5235938559247164925">"Verwyder alle kennisgewings."</string>
<string name="dreams_dock_launcher" msgid="3541196417659166245">"Aktiveer sluimerskerm"</string>
<string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Programinligting"</string>
+ <!-- no translation found for notifications_off_title (8936620513608443224) -->
+ <skip />
+ <!-- no translation found for notifications_off_text (2529001315769385273) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-am/strings.xml b/packages/SystemUI/res/values-am/strings.xml
index 873dd65..ece78dc 100644
--- a/packages/SystemUI/res/values-am/strings.xml
+++ b/packages/SystemUI/res/values-am/strings.xml
@@ -140,4 +140,8 @@
<string name="accessibility_clear_all" msgid="5235938559247164925">"ሁሉንም ማሳወቂያዎች አጽዳ"</string>
<string name="dreams_dock_launcher" msgid="3541196417659166245">" ገፁማያ ማቆያ አንቃ"</string>
<string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"የመተግበሪያ መረጃ"</string>
+ <!-- no translation found for notifications_off_title (8936620513608443224) -->
+ <skip />
+ <!-- no translation found for notifications_off_text (2529001315769385273) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml
index 9e316ec..c412d58 100644
--- a/packages/SystemUI/res/values-ar/strings.xml
+++ b/packages/SystemUI/res/values-ar/strings.xml
@@ -140,4 +140,8 @@
<string name="accessibility_clear_all" msgid="5235938559247164925">"محو جميع الإشعارات."</string>
<string name="dreams_dock_launcher" msgid="3541196417659166245">"تنشيط شاشة التوقف"</string>
<string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"معلومات التطبيق"</string>
+ <!-- no translation found for notifications_off_title (8936620513608443224) -->
+ <skip />
+ <!-- no translation found for notifications_off_text (2529001315769385273) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-be/strings.xml b/packages/SystemUI/res/values-be/strings.xml
index a07ed56..859df39 100644
--- a/packages/SystemUI/res/values-be/strings.xml
+++ b/packages/SystemUI/res/values-be/strings.xml
@@ -142,4 +142,8 @@
<string name="accessibility_clear_all" msgid="5235938559247164925">"Выдалiць усе апавяшчэннi."</string>
<string name="dreams_dock_launcher" msgid="3541196417659166245">"Актывацыя экраннай застаўкі"</string>
<string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Інфармацыя пра прыкладанне"</string>
+ <!-- no translation found for notifications_off_title (8936620513608443224) -->
+ <skip />
+ <!-- no translation found for notifications_off_text (2529001315769385273) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-bg/strings.xml b/packages/SystemUI/res/values-bg/strings.xml
index 258e001..ae1158d 100644
--- a/packages/SystemUI/res/values-bg/strings.xml
+++ b/packages/SystemUI/res/values-bg/strings.xml
@@ -140,4 +140,8 @@
<string name="accessibility_clear_all" msgid="5235938559247164925">"Изчистване на всички известия."</string>
<string name="dreams_dock_launcher" msgid="3541196417659166245">"Активиране на скрийнсейвъра"</string>
<string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Информация за приложението"</string>
+ <!-- no translation found for notifications_off_title (8936620513608443224) -->
+ <skip />
+ <!-- no translation found for notifications_off_text (2529001315769385273) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml
index 9eec352..8adba08 100644
--- a/packages/SystemUI/res/values-ca/strings.xml
+++ b/packages/SystemUI/res/values-ca/strings.xml
@@ -142,4 +142,8 @@
<string name="accessibility_clear_all" msgid="5235938559247164925">"Esborra totes les notificacions."</string>
<string name="dreams_dock_launcher" msgid="3541196417659166245">"Activa el protector de pantalla"</string>
<string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Informació de l\'aplicació"</string>
+ <!-- no translation found for notifications_off_title (8936620513608443224) -->
+ <skip />
+ <!-- no translation found for notifications_off_text (2529001315769385273) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-cs/strings.xml b/packages/SystemUI/res/values-cs/strings.xml
index 9fd8d35..601869d 100644
--- a/packages/SystemUI/res/values-cs/strings.xml
+++ b/packages/SystemUI/res/values-cs/strings.xml
@@ -142,4 +142,8 @@
<string name="accessibility_clear_all" msgid="5235938559247164925">"Vymazat všechna oznámení."</string>
<string name="dreams_dock_launcher" msgid="3541196417659166245">"Aktivovat spořič obrazovky"</string>
<string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Informace o aplikaci"</string>
+ <!-- no translation found for notifications_off_title (8936620513608443224) -->
+ <skip />
+ <!-- no translation found for notifications_off_text (2529001315769385273) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml
index 4fa113b..32ae3a9 100644
--- a/packages/SystemUI/res/values-da/strings.xml
+++ b/packages/SystemUI/res/values-da/strings.xml
@@ -140,4 +140,8 @@
<string name="accessibility_clear_all" msgid="5235938559247164925">"Ryd alle meddelelser."</string>
<string name="dreams_dock_launcher" msgid="3541196417659166245">"Aktiver pauseskærm"</string>
<string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Oplysninger om appen"</string>
+ <!-- no translation found for notifications_off_title (8936620513608443224) -->
+ <skip />
+ <!-- no translation found for notifications_off_text (2529001315769385273) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-de/strings.xml b/packages/SystemUI/res/values-de/strings.xml
index ac07e9b..a365ce2 100644
--- a/packages/SystemUI/res/values-de/strings.xml
+++ b/packages/SystemUI/res/values-de/strings.xml
@@ -142,4 +142,8 @@
<string name="accessibility_clear_all" msgid="5235938559247164925">"Alle Benachrichtigungen löschen"</string>
<string name="dreams_dock_launcher" msgid="3541196417659166245">"Bildschirmschoner aktivieren"</string>
<string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"App-Details"</string>
+ <!-- no translation found for notifications_off_title (8936620513608443224) -->
+ <skip />
+ <!-- no translation found for notifications_off_text (2529001315769385273) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml
index 351c506..72e8629 100644
--- a/packages/SystemUI/res/values-el/strings.xml
+++ b/packages/SystemUI/res/values-el/strings.xml
@@ -142,4 +142,8 @@
<string name="accessibility_clear_all" msgid="5235938559247164925">"Εκκαθάριση όλων των ειδοποιήσεων."</string>
<string name="dreams_dock_launcher" msgid="3541196417659166245">"Ενεργοποίηση προφύλαξης οθόνης"</string>
<string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Πληροφορίες εφαρμογής"</string>
+ <!-- no translation found for notifications_off_title (8936620513608443224) -->
+ <skip />
+ <!-- no translation found for notifications_off_text (2529001315769385273) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-en-rGB/strings.xml b/packages/SystemUI/res/values-en-rGB/strings.xml
index 118f7e3..9701ab8 100644
--- a/packages/SystemUI/res/values-en-rGB/strings.xml
+++ b/packages/SystemUI/res/values-en-rGB/strings.xml
@@ -140,4 +140,8 @@
<string name="accessibility_clear_all" msgid="5235938559247164925">"Clear all notifications."</string>
<string name="dreams_dock_launcher" msgid="3541196417659166245">"Activate screen saver"</string>
<string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"App info"</string>
+ <!-- no translation found for notifications_off_title (8936620513608443224) -->
+ <skip />
+ <!-- no translation found for notifications_off_text (2529001315769385273) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml
index 7a5b853..3bc4077 100644
--- a/packages/SystemUI/res/values-es-rUS/strings.xml
+++ b/packages/SystemUI/res/values-es-rUS/strings.xml
@@ -142,4 +142,8 @@
<string name="accessibility_clear_all" msgid="5235938559247164925">"Eliminar todas las notificaciones"</string>
<string name="dreams_dock_launcher" msgid="3541196417659166245">"Activar el protector de pantalla"</string>
<string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Información de la aplicación"</string>
+ <!-- no translation found for notifications_off_title (8936620513608443224) -->
+ <skip />
+ <!-- no translation found for notifications_off_text (2529001315769385273) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-es/strings.xml b/packages/SystemUI/res/values-es/strings.xml
index 20a6dee..c6e2604 100644
--- a/packages/SystemUI/res/values-es/strings.xml
+++ b/packages/SystemUI/res/values-es/strings.xml
@@ -140,4 +140,8 @@
<string name="accessibility_clear_all" msgid="5235938559247164925">"Borrar todas las notificaciones"</string>
<string name="dreams_dock_launcher" msgid="3541196417659166245">"Activar salvapantallas"</string>
<string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Información de la aplicación"</string>
+ <!-- no translation found for notifications_off_title (8936620513608443224) -->
+ <skip />
+ <!-- no translation found for notifications_off_text (2529001315769385273) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-et/strings.xml b/packages/SystemUI/res/values-et/strings.xml
index d254792..55ebbad 100644
--- a/packages/SystemUI/res/values-et/strings.xml
+++ b/packages/SystemUI/res/values-et/strings.xml
@@ -140,4 +140,8 @@
<string name="accessibility_clear_all" msgid="5235938559247164925">"Kustuta kõik teatised."</string>
<string name="dreams_dock_launcher" msgid="3541196417659166245">"Aktiveeri ekraanisäästja"</string>
<string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Rakenduse teave"</string>
+ <!-- no translation found for notifications_off_title (8936620513608443224) -->
+ <skip />
+ <!-- no translation found for notifications_off_text (2529001315769385273) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml
index b7ad8d9..c764821 100644
--- a/packages/SystemUI/res/values-fa/strings.xml
+++ b/packages/SystemUI/res/values-fa/strings.xml
@@ -140,4 +140,8 @@
<string name="accessibility_clear_all" msgid="5235938559247164925">"پاک کردن تمام اعلانها"</string>
<string name="dreams_dock_launcher" msgid="3541196417659166245">"فعال کردن محافظ صفحه نمایش"</string>
<string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"اطلاعات برنامه"</string>
+ <!-- no translation found for notifications_off_title (8936620513608443224) -->
+ <skip />
+ <!-- no translation found for notifications_off_text (2529001315769385273) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-fi/strings.xml b/packages/SystemUI/res/values-fi/strings.xml
index 0b904e7..a68675c 100644
--- a/packages/SystemUI/res/values-fi/strings.xml
+++ b/packages/SystemUI/res/values-fi/strings.xml
@@ -140,4 +140,8 @@
<string name="accessibility_clear_all" msgid="5235938559247164925">"Tyhjennä kaikki ilmoitukset."</string>
<string name="dreams_dock_launcher" msgid="3541196417659166245">"Ota näytönsäästäjä käyttöön"</string>
<string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Sovelluksen tiedot"</string>
+ <!-- no translation found for notifications_off_title (8936620513608443224) -->
+ <skip />
+ <!-- no translation found for notifications_off_text (2529001315769385273) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-fr/strings.xml b/packages/SystemUI/res/values-fr/strings.xml
index a73fa12..52df763 100644
--- a/packages/SystemUI/res/values-fr/strings.xml
+++ b/packages/SystemUI/res/values-fr/strings.xml
@@ -142,4 +142,8 @@
<string name="accessibility_clear_all" msgid="5235938559247164925">"Supprimer toutes les notifications"</string>
<string name="dreams_dock_launcher" msgid="3541196417659166245">"Activer l\'économiseur d\'écran"</string>
<string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Informations sur l\'application"</string>
+ <!-- no translation found for notifications_off_title (8936620513608443224) -->
+ <skip />
+ <!-- no translation found for notifications_off_text (2529001315769385273) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-hi/strings.xml b/packages/SystemUI/res/values-hi/strings.xml
index cd98042..9220a49 100644
--- a/packages/SystemUI/res/values-hi/strings.xml
+++ b/packages/SystemUI/res/values-hi/strings.xml
@@ -140,4 +140,8 @@
<string name="accessibility_clear_all" msgid="5235938559247164925">"सभी सूचनाएं साफ़ करें."</string>
<string name="dreams_dock_launcher" msgid="3541196417659166245">"स्क्रीन सेवर सक्रिय करें"</string>
<string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"एप्लिकेशन जानकारी"</string>
+ <!-- no translation found for notifications_off_title (8936620513608443224) -->
+ <skip />
+ <!-- no translation found for notifications_off_text (2529001315769385273) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-hr/strings.xml b/packages/SystemUI/res/values-hr/strings.xml
index e96bac1..2c6c00a 100644
--- a/packages/SystemUI/res/values-hr/strings.xml
+++ b/packages/SystemUI/res/values-hr/strings.xml
@@ -140,4 +140,8 @@
<string name="accessibility_clear_all" msgid="5235938559247164925">"Brisanje svih obavijesti."</string>
<string name="dreams_dock_launcher" msgid="3541196417659166245">"Aktivirajte čuvar zaslona"</string>
<string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Informacije o aplikaciji"</string>
+ <!-- no translation found for notifications_off_title (8936620513608443224) -->
+ <skip />
+ <!-- no translation found for notifications_off_text (2529001315769385273) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-hu/strings.xml b/packages/SystemUI/res/values-hu/strings.xml
index d8af0c3..d1ac63a5 100644
--- a/packages/SystemUI/res/values-hu/strings.xml
+++ b/packages/SystemUI/res/values-hu/strings.xml
@@ -140,4 +140,8 @@
<string name="accessibility_clear_all" msgid="5235938559247164925">"Minden értesítés törlése"</string>
<string name="dreams_dock_launcher" msgid="3541196417659166245">"Képernyővédő aktiválása"</string>
<string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Alkalmazásinformáció"</string>
+ <!-- no translation found for notifications_off_title (8936620513608443224) -->
+ <skip />
+ <!-- no translation found for notifications_off_text (2529001315769385273) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-in/strings.xml b/packages/SystemUI/res/values-in/strings.xml
index 2f566e1..981782d 100644
--- a/packages/SystemUI/res/values-in/strings.xml
+++ b/packages/SystemUI/res/values-in/strings.xml
@@ -140,4 +140,8 @@
<string name="accessibility_clear_all" msgid="5235938559247164925">"Menghapus semua pemberitahuan."</string>
<string name="dreams_dock_launcher" msgid="3541196417659166245">"Aktifkan tirai layar"</string>
<string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Info aplikasi"</string>
+ <!-- no translation found for notifications_off_title (8936620513608443224) -->
+ <skip />
+ <!-- no translation found for notifications_off_text (2529001315769385273) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-it/strings.xml b/packages/SystemUI/res/values-it/strings.xml
index 6072697..cac4e73 100644
--- a/packages/SystemUI/res/values-it/strings.xml
+++ b/packages/SystemUI/res/values-it/strings.xml
@@ -142,4 +142,8 @@
<string name="accessibility_clear_all" msgid="5235938559247164925">"Cancella tutte le notifiche."</string>
<string name="dreams_dock_launcher" msgid="3541196417659166245">"Attiva screensaver"</string>
<string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Informazioni applicazione"</string>
+ <!-- no translation found for notifications_off_title (8936620513608443224) -->
+ <skip />
+ <!-- no translation found for notifications_off_text (2529001315769385273) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-iw/strings.xml b/packages/SystemUI/res/values-iw/strings.xml
index cec71a7..eeca907 100644
--- a/packages/SystemUI/res/values-iw/strings.xml
+++ b/packages/SystemUI/res/values-iw/strings.xml
@@ -140,4 +140,8 @@
<string name="accessibility_clear_all" msgid="5235938559247164925">"נקה את כל ההתראות."</string>
<string name="dreams_dock_launcher" msgid="3541196417659166245">"הפעלת שומר מסך"</string>
<string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"פרטי יישום"</string>
+ <!-- no translation found for notifications_off_title (8936620513608443224) -->
+ <skip />
+ <!-- no translation found for notifications_off_text (2529001315769385273) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-ja/strings.xml b/packages/SystemUI/res/values-ja/strings.xml
index a9aee94..2b1daf8 100644
--- a/packages/SystemUI/res/values-ja/strings.xml
+++ b/packages/SystemUI/res/values-ja/strings.xml
@@ -142,4 +142,8 @@
<string name="accessibility_clear_all" msgid="5235938559247164925">"通知をすべて消去。"</string>
<string name="dreams_dock_launcher" msgid="3541196417659166245">"スクリーンセーバーを有効にする"</string>
<string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"アプリ情報"</string>
+ <!-- no translation found for notifications_off_title (8936620513608443224) -->
+ <skip />
+ <!-- no translation found for notifications_off_text (2529001315769385273) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-ko/strings.xml b/packages/SystemUI/res/values-ko/strings.xml
index ba559a0..4cd5778 100644
--- a/packages/SystemUI/res/values-ko/strings.xml
+++ b/packages/SystemUI/res/values-ko/strings.xml
@@ -140,4 +140,8 @@
<string name="accessibility_clear_all" msgid="5235938559247164925">"모든 알림 지우기"</string>
<string name="dreams_dock_launcher" msgid="3541196417659166245">"스크린 세이버 활성화"</string>
<string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"앱 정보"</string>
+ <!-- no translation found for notifications_off_title (8936620513608443224) -->
+ <skip />
+ <!-- no translation found for notifications_off_text (2529001315769385273) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-lt/strings.xml b/packages/SystemUI/res/values-lt/strings.xml
index 896d53c..54ed00c 100644
--- a/packages/SystemUI/res/values-lt/strings.xml
+++ b/packages/SystemUI/res/values-lt/strings.xml
@@ -140,4 +140,8 @@
<string name="accessibility_clear_all" msgid="5235938559247164925">"Išvalyti visus pranešimus."</string>
<string name="dreams_dock_launcher" msgid="3541196417659166245">"Aktyvinti ekrano užsklandą"</string>
<string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Programos informacija"</string>
+ <!-- no translation found for notifications_off_title (8936620513608443224) -->
+ <skip />
+ <!-- no translation found for notifications_off_text (2529001315769385273) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-lv/strings.xml b/packages/SystemUI/res/values-lv/strings.xml
index 657df8b..afedc72 100644
--- a/packages/SystemUI/res/values-lv/strings.xml
+++ b/packages/SystemUI/res/values-lv/strings.xml
@@ -140,4 +140,8 @@
<string name="accessibility_clear_all" msgid="5235938559247164925">"Notīrīt visus paziņojumus"</string>
<string name="dreams_dock_launcher" msgid="3541196417659166245">"Aktivizēt ekrānsaudzētāju"</string>
<string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Informācija par lietotni"</string>
+ <!-- no translation found for notifications_off_title (8936620513608443224) -->
+ <skip />
+ <!-- no translation found for notifications_off_text (2529001315769385273) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-ms/strings.xml b/packages/SystemUI/res/values-ms/strings.xml
index 6141732..d956d4d 100644
--- a/packages/SystemUI/res/values-ms/strings.xml
+++ b/packages/SystemUI/res/values-ms/strings.xml
@@ -140,4 +140,8 @@
<string name="accessibility_clear_all" msgid="5235938559247164925">"Padamkan semua pemberitahuan."</string>
<string name="dreams_dock_launcher" msgid="3541196417659166245">"Aktifkan gambar skrin"</string>
<string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Maklumat apl"</string>
+ <!-- no translation found for notifications_off_title (8936620513608443224) -->
+ <skip />
+ <!-- no translation found for notifications_off_text (2529001315769385273) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-nb/strings.xml b/packages/SystemUI/res/values-nb/strings.xml
index e6c24a9..aca1f94 100644
--- a/packages/SystemUI/res/values-nb/strings.xml
+++ b/packages/SystemUI/res/values-nb/strings.xml
@@ -140,4 +140,8 @@
<string name="accessibility_clear_all" msgid="5235938559247164925">"Fjern alle varslinger."</string>
<string name="dreams_dock_launcher" msgid="3541196417659166245">"Aktiver skjermbeskytter"</string>
<string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Info om app"</string>
+ <!-- no translation found for notifications_off_title (8936620513608443224) -->
+ <skip />
+ <!-- no translation found for notifications_off_text (2529001315769385273) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml
index ff1c02a..7d50794 100644
--- a/packages/SystemUI/res/values-nl/strings.xml
+++ b/packages/SystemUI/res/values-nl/strings.xml
@@ -140,4 +140,8 @@
<string name="accessibility_clear_all" msgid="5235938559247164925">"Alle meldingen wissen."</string>
<string name="dreams_dock_launcher" msgid="3541196417659166245">"Schermbeveiliging inschakelen"</string>
<string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"App-info"</string>
+ <!-- no translation found for notifications_off_title (8936620513608443224) -->
+ <skip />
+ <!-- no translation found for notifications_off_text (2529001315769385273) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml
index 646993f4..4847e51 100644
--- a/packages/SystemUI/res/values-pl/strings.xml
+++ b/packages/SystemUI/res/values-pl/strings.xml
@@ -140,4 +140,8 @@
<string name="accessibility_clear_all" msgid="5235938559247164925">"Usuń wszystkie powiadomienia."</string>
<string name="dreams_dock_launcher" msgid="3541196417659166245">"Włącz wygaszacz ekranu."</string>
<string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"O aplikacji"</string>
+ <!-- no translation found for notifications_off_title (8936620513608443224) -->
+ <skip />
+ <!-- no translation found for notifications_off_text (2529001315769385273) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-pt-rPT/strings.xml b/packages/SystemUI/res/values-pt-rPT/strings.xml
index 31e6566..1d22d2f 100644
--- a/packages/SystemUI/res/values-pt-rPT/strings.xml
+++ b/packages/SystemUI/res/values-pt-rPT/strings.xml
@@ -140,4 +140,8 @@
<string name="accessibility_clear_all" msgid="5235938559247164925">"Limpar todas as notificações."</string>
<string name="dreams_dock_launcher" msgid="3541196417659166245">"Ativar proteção de ecrã"</string>
<string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Informações da aplicação"</string>
+ <!-- no translation found for notifications_off_title (8936620513608443224) -->
+ <skip />
+ <!-- no translation found for notifications_off_text (2529001315769385273) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml
index 4f1fb95..8b774e6 100644
--- a/packages/SystemUI/res/values-pt/strings.xml
+++ b/packages/SystemUI/res/values-pt/strings.xml
@@ -142,4 +142,8 @@
<string name="accessibility_clear_all" msgid="5235938559247164925">"Limpar todas as notificações."</string>
<string name="dreams_dock_launcher" msgid="3541196417659166245">"Ativar proteção de tela"</string>
<string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Informações do aplicativo"</string>
+ <!-- no translation found for notifications_off_title (8936620513608443224) -->
+ <skip />
+ <!-- no translation found for notifications_off_text (2529001315769385273) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-rm/strings.xml b/packages/SystemUI/res/values-rm/strings.xml
index 917306a..8d3103b 100644
--- a/packages/SystemUI/res/values-rm/strings.xml
+++ b/packages/SystemUI/res/values-rm/strings.xml
@@ -250,4 +250,8 @@
<skip />
<!-- no translation found for status_bar_notification_inspect_item_title (1163547729015390250) -->
<skip />
+ <!-- no translation found for notifications_off_title (8936620513608443224) -->
+ <skip />
+ <!-- no translation found for notifications_off_text (2529001315769385273) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml
index 22bdc7a..714ad2d 100644
--- a/packages/SystemUI/res/values-ro/strings.xml
+++ b/packages/SystemUI/res/values-ro/strings.xml
@@ -140,4 +140,8 @@
<string name="accessibility_clear_all" msgid="5235938559247164925">"Ştergeţi toate notificările."</string>
<string name="dreams_dock_launcher" msgid="3541196417659166245">"Activaţi screensaverul"</string>
<string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Informaţii despre aplicaţie"</string>
+ <!-- no translation found for notifications_off_title (8936620513608443224) -->
+ <skip />
+ <!-- no translation found for notifications_off_text (2529001315769385273) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml
index 0fdbe2b..dcfe560 100644
--- a/packages/SystemUI/res/values-ru/strings.xml
+++ b/packages/SystemUI/res/values-ru/strings.xml
@@ -142,4 +142,8 @@
<string name="accessibility_clear_all" msgid="5235938559247164925">"Удалить все уведомления"</string>
<string name="dreams_dock_launcher" msgid="3541196417659166245">"Активация заставки экрана"</string>
<string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"О приложении"</string>
+ <!-- no translation found for notifications_off_title (8936620513608443224) -->
+ <skip />
+ <!-- no translation found for notifications_off_text (2529001315769385273) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml
index 9b4b6ae..96cd983 100644
--- a/packages/SystemUI/res/values-sk/strings.xml
+++ b/packages/SystemUI/res/values-sk/strings.xml
@@ -142,4 +142,8 @@
<string name="accessibility_clear_all" msgid="5235938559247164925">"Vymazať všetky upozornenia."</string>
<string name="dreams_dock_launcher" msgid="3541196417659166245">"Aktivovať šetrič obrazovky"</string>
<string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Informácie o aplikácii"</string>
+ <!-- no translation found for notifications_off_title (8936620513608443224) -->
+ <skip />
+ <!-- no translation found for notifications_off_text (2529001315769385273) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-sl/strings.xml b/packages/SystemUI/res/values-sl/strings.xml
index 08ab0f5..b8371ab 100644
--- a/packages/SystemUI/res/values-sl/strings.xml
+++ b/packages/SystemUI/res/values-sl/strings.xml
@@ -140,4 +140,8 @@
<string name="accessibility_clear_all" msgid="5235938559247164925">"Izbriši vsa obvestila."</string>
<string name="dreams_dock_launcher" msgid="3541196417659166245">"Vklop ohranjevalnika zaslona"</string>
<string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Podatki o aplikaciji"</string>
+ <!-- no translation found for notifications_off_title (8936620513608443224) -->
+ <skip />
+ <!-- no translation found for notifications_off_text (2529001315769385273) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-sr/strings.xml b/packages/SystemUI/res/values-sr/strings.xml
index 7848059..e29fc0c 100644
--- a/packages/SystemUI/res/values-sr/strings.xml
+++ b/packages/SystemUI/res/values-sr/strings.xml
@@ -140,4 +140,8 @@
<string name="accessibility_clear_all" msgid="5235938559247164925">"Обриши сва обавештења."</string>
<string name="dreams_dock_launcher" msgid="3541196417659166245">"Активирање чувара екрана"</string>
<string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Информације о апликацији"</string>
+ <!-- no translation found for notifications_off_title (8936620513608443224) -->
+ <skip />
+ <!-- no translation found for notifications_off_text (2529001315769385273) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-sv/strings.xml b/packages/SystemUI/res/values-sv/strings.xml
index 01c3eb6..691f89e 100644
--- a/packages/SystemUI/res/values-sv/strings.xml
+++ b/packages/SystemUI/res/values-sv/strings.xml
@@ -140,4 +140,8 @@
<string name="accessibility_clear_all" msgid="5235938559247164925">"Ta bort alla meddelanden."</string>
<string name="dreams_dock_launcher" msgid="3541196417659166245">"Aktivera skärmsläckare"</string>
<string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Info om appen"</string>
+ <!-- no translation found for notifications_off_title (8936620513608443224) -->
+ <skip />
+ <!-- no translation found for notifications_off_text (2529001315769385273) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-sw/strings.xml b/packages/SystemUI/res/values-sw/strings.xml
index 78b7a95..5803f3c 100644
--- a/packages/SystemUI/res/values-sw/strings.xml
+++ b/packages/SystemUI/res/values-sw/strings.xml
@@ -138,4 +138,8 @@
<string name="accessibility_clear_all" msgid="5235938559247164925">"Futa arifa zote."</string>
<string name="dreams_dock_launcher" msgid="3541196417659166245">"Amilisha hifadhi ya skrini"</string>
<string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Taarifa ya programu"</string>
+ <!-- no translation found for notifications_off_title (8936620513608443224) -->
+ <skip />
+ <!-- no translation found for notifications_off_text (2529001315769385273) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-sw600dp/dimens.xml b/packages/SystemUI/res/values-sw600dp/dimens.xml
index 43ae557..50a61b1 100644
--- a/packages/SystemUI/res/values-sw600dp/dimens.xml
+++ b/packages/SystemUI/res/values-sw600dp/dimens.xml
@@ -19,11 +19,21 @@
<!-- The width of the notification panel window -->
<dimen name="notification_panel_width">446dp</dimen>
- <!-- Layout parameters for the notification panel -->
- <dimen name="notification_panel_margin_bottom">192dp</dimen>
+ <!-- Layout parameters for the notification panel -->
+ <dimen name="notification_panel_margin_bottom">192dp</dimen>
<dimen name="notification_panel_margin_left">0dp</dimen>
<!-- Gravity for the notification panel -->
<!-- 0x33 = center_horizontal|top -->
<integer name="notification_panel_layout_gravity">0x31</integer>
+
+ <!-- Default target placement radius for navigation bar search target -->
+ <dimen name="navbar_search_target_placement_radius">182dip</dimen>
+
+ <!-- Diameter of outer shape drawable shown in navbar search-->
+ <dimen name="navbar_search_outerring_diameter">364dp</dimen>
+
+ <!-- Height of search panel including navigation bar height -->
+ <dimen name="navbar_search_panel_height">300dip</dimen>
+
</resources>
diff --git a/packages/SystemUI/res/values-th/strings.xml b/packages/SystemUI/res/values-th/strings.xml
index 6ad380a..2ead831 100644
--- a/packages/SystemUI/res/values-th/strings.xml
+++ b/packages/SystemUI/res/values-th/strings.xml
@@ -140,4 +140,8 @@
<string name="accessibility_clear_all" msgid="5235938559247164925">"ล้างการแจ้งเตือนทั้งหมด"</string>
<string name="dreams_dock_launcher" msgid="3541196417659166245">"เปิดโปรแกรมรักษาหน้าจอ"</string>
<string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"ข้อมูลแอป"</string>
+ <!-- no translation found for notifications_off_title (8936620513608443224) -->
+ <skip />
+ <!-- no translation found for notifications_off_text (2529001315769385273) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-tl/strings.xml b/packages/SystemUI/res/values-tl/strings.xml
index d750207..9729a17 100644
--- a/packages/SystemUI/res/values-tl/strings.xml
+++ b/packages/SystemUI/res/values-tl/strings.xml
@@ -140,4 +140,8 @@
<string name="accessibility_clear_all" msgid="5235938559247164925">"I-clear ang lahat ng notification."</string>
<string name="dreams_dock_launcher" msgid="3541196417659166245">"I-activate ang screen saver"</string>
<string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Impormasyon ng app"</string>
+ <!-- no translation found for notifications_off_title (8936620513608443224) -->
+ <skip />
+ <!-- no translation found for notifications_off_text (2529001315769385273) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-tr/strings.xml b/packages/SystemUI/res/values-tr/strings.xml
index 72cf8d0..7a328b3 100644
--- a/packages/SystemUI/res/values-tr/strings.xml
+++ b/packages/SystemUI/res/values-tr/strings.xml
@@ -140,4 +140,8 @@
<string name="accessibility_clear_all" msgid="5235938559247164925">"Tüm bildirimleri temizle"</string>
<string name="dreams_dock_launcher" msgid="3541196417659166245">"Ekran koruyucuyu etkinleştir"</string>
<string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Uygulama bilgileri"</string>
+ <!-- no translation found for notifications_off_title (8936620513608443224) -->
+ <skip />
+ <!-- no translation found for notifications_off_text (2529001315769385273) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml
index b787dc8..995f21a 100644
--- a/packages/SystemUI/res/values-uk/strings.xml
+++ b/packages/SystemUI/res/values-uk/strings.xml
@@ -140,4 +140,8 @@
<string name="accessibility_clear_all" msgid="5235938559247164925">"Очистити всі сповіщення."</string>
<string name="dreams_dock_launcher" msgid="3541196417659166245">"Активувати заставку"</string>
<string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Інформація про програму"</string>
+ <!-- no translation found for notifications_off_title (8936620513608443224) -->
+ <skip />
+ <!-- no translation found for notifications_off_text (2529001315769385273) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-vi/strings.xml b/packages/SystemUI/res/values-vi/strings.xml
index fea33a4..7c99f6b 100644
--- a/packages/SystemUI/res/values-vi/strings.xml
+++ b/packages/SystemUI/res/values-vi/strings.xml
@@ -140,4 +140,8 @@
<string name="accessibility_clear_all" msgid="5235938559247164925">"Xóa tất cả thông báo."</string>
<string name="dreams_dock_launcher" msgid="3541196417659166245">"Kích hoạt trình bảo vệ màn hình"</string>
<string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Thông tin về ứng dụng"</string>
+ <!-- no translation found for notifications_off_title (8936620513608443224) -->
+ <skip />
+ <!-- no translation found for notifications_off_text (2529001315769385273) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-zh-rCN/strings.xml b/packages/SystemUI/res/values-zh-rCN/strings.xml
index 4c9a27a..c6e29555 100644
--- a/packages/SystemUI/res/values-zh-rCN/strings.xml
+++ b/packages/SystemUI/res/values-zh-rCN/strings.xml
@@ -142,4 +142,8 @@
<string name="accessibility_clear_all" msgid="5235938559247164925">"清除所有通知。"</string>
<string name="dreams_dock_launcher" msgid="3541196417659166245">"激活屏幕保护程序"</string>
<string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"应用信息"</string>
+ <!-- no translation found for notifications_off_title (8936620513608443224) -->
+ <skip />
+ <!-- no translation found for notifications_off_text (2529001315769385273) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-zh-rTW/strings.xml b/packages/SystemUI/res/values-zh-rTW/strings.xml
index 224ae55..ad72466 100644
--- a/packages/SystemUI/res/values-zh-rTW/strings.xml
+++ b/packages/SystemUI/res/values-zh-rTW/strings.xml
@@ -142,4 +142,8 @@
<string name="accessibility_clear_all" msgid="5235938559247164925">"清除所有通知。"</string>
<string name="dreams_dock_launcher" msgid="3541196417659166245">"啟用螢幕保護程式"</string>
<string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"應用程式資訊"</string>
+ <!-- no translation found for notifications_off_title (8936620513608443224) -->
+ <skip />
+ <!-- no translation found for notifications_off_text (2529001315769385273) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-zu/strings.xml b/packages/SystemUI/res/values-zu/strings.xml
index dfebfe7..b2b111d 100644
--- a/packages/SystemUI/res/values-zu/strings.xml
+++ b/packages/SystemUI/res/values-zu/strings.xml
@@ -140,4 +140,8 @@
<string name="accessibility_clear_all" msgid="5235938559247164925">"Susa zonke izaziso."</string>
<string name="dreams_dock_launcher" msgid="3541196417659166245">"Yenza ukuthi iskrini seyiva sisebenze"</string>
<string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Ulwazi lohlelo lokusebenza"</string>
+ <!-- no translation found for notifications_off_title (8936620513608443224) -->
+ <skip />
+ <!-- no translation found for notifications_off_text (2529001315769385273) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values/config.xml b/packages/SystemUI/res/values/config.xml
index 1f22507..5548445 100644
--- a/packages/SystemUI/res/values/config.xml
+++ b/packages/SystemUI/res/values/config.xml
@@ -53,5 +53,8 @@
<!-- When true, show 1/2G networks as 3G. -->
<bool name="config_showMin3G">false</bool>
+
+ <!-- Show rotation lock button in phone-style notification panel. -->
+ <bool name="config_showRotationLock">true</bool>
</resources>
diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml
index e92dbc5..276d74b 100644
--- a/packages/SystemUI/res/values/dimens.xml
+++ b/packages/SystemUI/res/values/dimens.xml
@@ -116,13 +116,19 @@
<dimen name="navbar_search_hit_radius">60dip</dimen>
<!-- Diameter of outer shape drawable shown in navbar search-->
- <dimen name="navbar_search_outerring_diameter">300dip</dimen>
+ <dimen name="navbar_search_outerring_diameter">270dp</dimen>
+
+ <!-- Threshold for swipe-up gesture to activate search dialog -->
+ <dimen name="navbar_search_up_threshhold">20dip</dimen>
+
+ <!-- Height of search panel including navigation bar height -->
+ <dimen name="navbar_search_panel_height">230dip</dimen>
<!-- Height of the draggable handle at the bottom of the phone notification panel -->
<dimen name="close_handle_height">34dp</dimen>
- <!-- Layout parameters for the notification panel -->
- <dimen name="notification_panel_margin_bottom">0dp</dimen>
+ <!-- Layout parameters for the notification panel -->
+ <dimen name="notification_panel_margin_bottom">0dp</dimen>
<dimen name="notification_panel_margin_left">0dp</dimen>
<!-- Gravity for the notification panel -->
diff --git a/packages/SystemUI/res/values/donottranslate.xml b/packages/SystemUI/res/values/donottranslate.xml
index 4ca2116..089a54d 100644
--- a/packages/SystemUI/res/values/donottranslate.xml
+++ b/packages/SystemUI/res/values/donottranslate.xml
@@ -21,6 +21,6 @@
We show both (DOW on one line, then the date) but this can be overridden for locales as
necessary.
-->
- <string name="status_bar_date_formatter">%2$s</string>
+ <string name="status_bar_date_formatter">%1$s\n%2$s</string>
</resources>
diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml
index 236ca6b..1eb353f 100644
--- a/packages/SystemUI/res/values/strings.xml
+++ b/packages/SystemUI/res/values/strings.xml
@@ -369,4 +369,20 @@
<!-- Title shown in notification popup for inspecting the responsible
application -->
<string name="status_bar_notification_inspect_item_title">App info</string>
+
+ <!-- Title for the pseudo-notification shown when notifications are disabled (do-not-disturb
+ mode) -->
+ <string name="notifications_off_title">Notifications off</string>
+
+ <!-- Content text for do-not-disturb mode notification -->
+ <string name="notifications_off_text">Tap here to turn notifications back on.</string>
+
+ <!-- Description of the button in the phone-style notification panel that controls auto-rotation, when auto-rotation is on. [CHAR LIMIT=NONE] -->
+ <string name="accessibility_rotation_lock_off">Screen will rotate automatically.</string>
+
+ <!-- Description of the button in the phone-style notification panel that controls auto-rotation, when auto-rotation is off. [CHAR LIMIT=NONE] -->
+ <string name="accessibility_rotation_lock_on_landscape">Screen is locked in landscape orientation.</string>
+
+ <!-- Description of the button in the phone-style notification panel that controls auto-rotation, when auto-rotation is off. [CHAR LIMIT=NONE] -->
+ <string name="accessibility_rotation_lock_on_portrait">Screen is locked in portrait orientation.</string>
</resources>
diff --git a/packages/SystemUI/res/values/styles.xml b/packages/SystemUI/res/values/styles.xml
index 02411d4..144760e 100644
--- a/packages/SystemUI/res/values/styles.xml
+++ b/packages/SystemUI/res/values/styles.xml
@@ -53,6 +53,21 @@
<item name="android:textColor">@android:color/holo_blue_light</item>
</style>
+ <style name="TextAppearance.StatusBar.Expanded" parent="@*android:style/TextAppearance.StatusBar" />
+
+ <style name="TextAppearance.StatusBar.Expanded.Clock">
+ <item name="android:textSize">32dp</item>
+ <item name="android:textStyle">normal</item>
+ <item name="android:textColor">#ffffff</item>
+ </style>
+
+ <style name="TextAppearance.StatusBar.Expanded.Date">
+ <item name="android:textSize">12dp</item>
+ <item name="android:textStyle">normal</item>
+ <item name="android:textColor">#666666</item>
+ <item name="android:textAllCaps">true</item>
+ </style>
+
<style name="Animation" />
<style name="Animation.ShirtPocketPanel">
diff --git a/packages/SystemUI/src/com/android/systemui/ExpandHelper.java b/packages/SystemUI/src/com/android/systemui/ExpandHelper.java
index 5387bf5..c5928f1 100644
--- a/packages/SystemUI/src/com/android/systemui/ExpandHelper.java
+++ b/packages/SystemUI/src/com/android/systemui/ExpandHelper.java
@@ -41,6 +41,13 @@
private static final long EXPAND_DURATION = 250;
private static final long GLOW_DURATION = 150;
+ // Set to false to disable focus-based gestures (two-finger pull).
+ private static final boolean USE_DRAG = true;
+ // Set to false to disable scale-based gestures (both horizontal and vertical).
+ private static final boolean USE_SPAN = true;
+ // Both gestures types may be active at the same time.
+ // At least one gesture type should be active.
+ // A variant of the screwdriver gesture will emerge from either gesture type.
// amount of overstretch for maximum brightness expressed in U
// 2f: maximum brightness is stretching a 1U to 3U, or a 4U to 6U
@@ -59,6 +66,7 @@
private View mCurrViewBottomGlow;
private float mOldHeight;
private float mNaturalHeight;
+ private float mInitialTouchFocusY;
private float mInitialTouchSpan;
private Callback mCallback;
private ScaleGestureDetector mDetector;
@@ -83,7 +91,7 @@
ViewGroup.LayoutParams lp = mView.getLayoutParams();
lp.height = (int)h;
mView.setLayoutParams(lp);
- mView.requestLayout();
+ mView.requestLayout();
}
public float getHeight() {
int height = mView.getLayoutParams().height;
@@ -94,15 +102,15 @@
}
public int getNaturalHeight(int maximum) {
ViewGroup.LayoutParams lp = mView.getLayoutParams();
- if (DEBUG) Log.v(TAG, "Inspecting a child of type: " + mView.getClass().getName());
+ if (DEBUG) Log.v(TAG, "Inspecting a child of type: " + mView.getClass().getName());
int oldHeight = lp.height;
lp.height = ViewGroup.LayoutParams.WRAP_CONTENT;
mView.setLayoutParams(lp);
mView.measure(
View.MeasureSpec.makeMeasureSpec(mView.getMeasuredWidth(),
- View.MeasureSpec.EXACTLY),
+ View.MeasureSpec.EXACTLY),
View.MeasureSpec.makeMeasureSpec(maximum,
- View.MeasureSpec.AT_MOST));
+ View.MeasureSpec.AT_MOST));
lp.height = oldHeight;
mView.setLayoutParams(lp);
return mView.getMeasuredHeight();
@@ -135,8 +143,9 @@
View v = mCallback.getChildAtPosition(detector.getFocusX(), detector.getFocusY());
// your fingers have to be somewhat close to the bounds of the view in question
- mInitialTouchSpan = Math.abs(detector.getCurrentSpanY());
- if (DEBUG) Log.d(TAG, "got mInitialTouchSpan: " + mInitialTouchSpan);
+ mInitialTouchFocusY = detector.getFocusY();
+ mInitialTouchSpan = Math.abs(detector.getCurrentSpan());
+ if (DEBUG) Log.d(TAG, "got mInitialTouchSpan: (" + mInitialTouchSpan + ")");
mStretching = initScale(v);
return mStretching;
@@ -145,16 +154,25 @@
@Override
public boolean onScale(ScaleGestureDetector detector) {
if (DEBUG) Log.v(TAG, "onscale() on " + mCurrView);
- float h = Math.abs(detector.getCurrentSpanY());
- if (DEBUG) Log.d(TAG, "current span is: " + h);
- h = h + mOldHeight - mInitialTouchSpan;
- float target = h;
+
+ // are we scaling or dragging?
+ float span = Math.abs(detector.getCurrentSpan()) - mInitialTouchSpan;
+ span *= USE_SPAN ? 1f : 0f;
+ float drag = detector.getFocusY() - mInitialTouchFocusY;
+ drag *= USE_DRAG ? 1f : 0f;
+ float pull = Math.abs(drag) + Math.abs(span) + 1f;
+ float hand = drag * Math.abs(drag) / pull + span * Math.abs(span) / pull;
+ if (DEBUG) Log.d(TAG, "current span handle is: " + hand);
+ hand = hand + mOldHeight;
+ float target = hand;
if (DEBUG) Log.d(TAG, "target is: " + target);
- h = h<mSmallSize?mSmallSize:(h>mLargeSize?mLargeSize:h);
- h = h>mNaturalHeight?mNaturalHeight:h;
- if (DEBUG) Log.d(TAG, "scale continues: h=" + h);
- mScaler.setHeight(h);
- float stretch = (float) Math.abs((target - h) / mMaximumStretch);
+ hand = hand < mSmallSize ? mSmallSize : (hand > mLargeSize ? mLargeSize : hand);
+ hand = hand > mNaturalHeight ? mNaturalHeight : hand;
+ if (DEBUG) Log.d(TAG, "scale continues: hand =" + hand);
+ mScaler.setHeight(hand);
+
+ // glow if overscale
+ float stretch = (float) Math.abs((target - hand) / mMaximumStretch);
float strength = 1f / (1f + (float) Math.pow(Math.E, -1 * ((8f * stretch) - 5f)));
if (DEBUG) Log.d(TAG, "stretch: " + stretch + " strength: " + strength);
setGlow(GLOW_BASE + strength * (1f - GLOW_BASE));
@@ -171,7 +189,10 @@
});
}
public void setGlow(float glow) {
- if (!mGlowAnimationSet.isRunning()) {
+ if (!mGlowAnimationSet.isRunning() || glow == 0f) {
+ if (mGlowAnimationSet.isRunning()) {
+ mGlowAnimationSet.cancel();
+ }
if (mCurrViewTopGlow != null && mCurrViewBottomGlow != null) {
if (glow == 0f || mCurrViewTopGlow.getAlpha() == 0f) {
// animate glow in and out
@@ -251,6 +272,7 @@
mScaleAnimation.start();
mStretching = false;
setGlow(0f);
+ if (DEBUG) Log.d(TAG, "scale was finished on view: " + mCurrView);
clearView();
}
@@ -261,12 +283,12 @@
}
private void setView(View v) {
- mCurrView = null;
+ mCurrView = v;
if (v instanceof ViewGroup) {
ViewGroup g = (ViewGroup) v;
mCurrViewTopGlow = g.findViewById(R.id.top_glow);
mCurrViewBottomGlow = g.findViewById(R.id.bottom_glow);
- if (DEBUG) {
+ if (DEBUG) {
String debugLog = "Looking for glows: " +
(mCurrViewTopGlow != null ? "found top " : "didn't find top") +
(mCurrViewBottomGlow != null ? "found bottom " : "didn't find bottom");
diff --git a/packages/SystemUI/src/com/android/systemui/SwipeHelper.java b/packages/SystemUI/src/com/android/systemui/SwipeHelper.java
index 414af89..6584c7d 100644
--- a/packages/SystemUI/src/com/android/systemui/SwipeHelper.java
+++ b/packages/SystemUI/src/com/android/systemui/SwipeHelper.java
@@ -74,6 +74,7 @@
private boolean mLongPressSent;
private View.OnLongClickListener mLongPressListener;
private Runnable mWatchLongPress;
+ private long mLongPressTimeout;
public SwipeHelper(int swipeDirection, Callback callback, float densityScale,
float pagingTouchSlop) {
@@ -83,6 +84,8 @@
mVelocityTracker = VelocityTracker.obtain();
mDensityScale = densityScale;
mPagingTouchSlop = pagingTouchSlop;
+
+ mLongPressTimeout = (long) (ViewConfiguration.getLongPressTimeout() * 1.5f); // extra long-press!
}
public void setLongPressListener(View.OnLongClickListener listener) {
@@ -180,7 +183,7 @@
}
}
- private void removeLongPressCallback() {
+ public void removeLongPressCallback() {
if (mWatchLongPress != null) {
mHandler.removeCallbacks(mWatchLongPress);
}
@@ -214,7 +217,7 @@
}
};
}
- mHandler.postDelayed(mWatchLongPress, ViewConfiguration.getLongPressTimeout());
+ mHandler.postDelayed(mWatchLongPress, mLongPressTimeout);
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
index 7317c5c..f0db2bce 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
@@ -91,6 +91,8 @@
protected RecentsPanelView mRecentsPanel;
protected RecentTasksLoader mRecentTasksLoader;
+ protected PopupMenu mNotificationBlamePopup;
+
// UI-specific methods
/**
@@ -238,9 +240,11 @@
final String packageNameF = (String) v.getTag();
if (packageNameF == null) return false;
if (v.getWindowToken() == null) return false;
- PopupMenu popup = new PopupMenu(mContext, v);
- popup.getMenuInflater().inflate(R.menu.notification_popup_menu, popup.getMenu());
- popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
+ mNotificationBlamePopup = new PopupMenu(mContext, v);
+ mNotificationBlamePopup.getMenuInflater().inflate(
+ R.menu.notification_popup_menu,
+ mNotificationBlamePopup.getMenu());
+ mNotificationBlamePopup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
public boolean onMenuItemClick(MenuItem item) {
if (item.getItemId() == R.id.notification_inspect_item) {
startApplicationDetailsActivity(packageNameF);
@@ -251,13 +255,20 @@
return true;
}
});
- popup.show();
+ mNotificationBlamePopup.show();
return true;
}
};
}
+ public void dismissPopups() {
+ if (mNotificationBlamePopup != null) {
+ mNotificationBlamePopup.dismiss();
+ mNotificationBlamePopup = null;
+ }
+ }
+
public void dismissIntruder() {
// pass
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/DelegateViewHelper.java b/packages/SystemUI/src/com/android/systemui/statusbar/DelegateViewHelper.java
index f725724..e074a80 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/DelegateViewHelper.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/DelegateViewHelper.java
@@ -16,22 +16,28 @@
package com.android.systemui.statusbar;
+import android.util.Slog;
import android.view.MotionEvent;
import android.view.Surface;
-import android.view.VelocityTracker;
import android.view.View;
+import com.android.systemui.R;
+
public class DelegateViewHelper {
- private static final int VELOCITY_THRESHOLD = 1000;
- private VelocityTracker mVelocityTracker;
private View mDelegateView;
private View mSourceView;
private BaseStatusBar mBar;
private int[] mTempPoint = new int[2];
+ private float[] mDownPoint = new float[2];
private int mOrientation;
+ private float mTriggerThreshhold;
public DelegateViewHelper(View sourceView) {
mSourceView = sourceView;
+ if (mSourceView != null) {
+ mTriggerThreshhold = mSourceView.getContext().getResources()
+ .getDimension(R.dimen.navbar_search_up_threshhold);
+ }
}
public void setDelegateView(View view) {
@@ -49,30 +55,25 @@
public boolean onInterceptTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
- mVelocityTracker = VelocityTracker.obtain();
- break;
- case MotionEvent.ACTION_CANCEL:
- case MotionEvent.ACTION_UP:
- mVelocityTracker.recycle();
- mVelocityTracker = null;
+ mDownPoint[0] = event.getX();
+ mDownPoint[1] = event.getY();
break;
}
- if (mVelocityTracker != null) {
- if (mDelegateView != null && mDelegateView.getVisibility() != View.VISIBLE) {
- mVelocityTracker.addMovement(event);
- mVelocityTracker.computeCurrentVelocity(1000);
+ if (mDelegateView != null) {
+ if (mDelegateView.getVisibility() != View.VISIBLE && event.getAction() != MotionEvent.ACTION_CANCEL) {
final boolean isVertical = (mOrientation == Surface.ROTATION_90
|| mOrientation == Surface.ROTATION_270);
- float velocity = isVertical ? - mVelocityTracker.getXVelocity()
- : - mVelocityTracker.getYVelocity();
- if (velocity > VELOCITY_THRESHOLD) {
- if (mDelegateView != null && mDelegateView.getVisibility() != View.VISIBLE) {
+ final int historySize = event.getHistorySize();
+ for (int k = 0; k < historySize + 1; k++) {
+ float x = k < historySize ? event.getHistoricalX(k) : event.getX();
+ float y = k < historySize ? event.getHistoricalY(k) : event.getY();
+ final float distance = isVertical ? (mDownPoint[0] - x) : (mDownPoint[1] - y);
+ if (distance > mTriggerThreshhold) {
mBar.showSearchPanel();
+ break;
}
}
}
- }
- if (mDelegateView != null) {
mSourceView.getLocationOnScreen(mTempPoint);
float deltaX = mTempPoint[0];
float deltaY = mTempPoint[1];
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/RotationToggle.java b/packages/SystemUI/src/com/android/systemui/statusbar/RotationToggle.java
new file mode 100644
index 0000000..c5a7354
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/RotationToggle.java
@@ -0,0 +1,30 @@
+package com.android.systemui.statusbar;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.widget.CompoundButton;
+
+import com.android.systemui.statusbar.policy.AutoRotateController;
+
+public class RotationToggle extends CompoundButton {
+ AutoRotateController mRotater;
+
+ public RotationToggle(Context context) {
+ super(context);
+ mRotater = new AutoRotateController(context, this);
+ setClickable(true);
+ }
+
+ public RotationToggle(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ mRotater = new AutoRotateController(context, this);
+ setClickable(true);
+ }
+
+ public RotationToggle(Context context, AttributeSet attrs, int defStyle) {
+ super(context, attrs, defStyle);
+ mRotater = new AutoRotateController(context, this);
+ setClickable(true);
+ }
+
+}
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 3b00300..f6f41b8 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.view.animation.AccelerateInterpolator;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
+import android.widget.CompoundButton;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
@@ -77,8 +78,10 @@
import com.android.systemui.statusbar.BaseStatusBar;
import com.android.systemui.statusbar.NotificationData;
import com.android.systemui.statusbar.NotificationData.Entry;
+import com.android.systemui.statusbar.RotationToggle;
import com.android.systemui.statusbar.SignalClusterView;
import com.android.systemui.statusbar.StatusBarIconView;
+import com.android.systemui.statusbar.policy.AutoRotateController;
import com.android.systemui.statusbar.policy.BatteryController;
import com.android.systemui.statusbar.policy.DateView;
import com.android.systemui.statusbar.policy.IntruderAlertView;
@@ -169,6 +172,7 @@
// top bar
View mClearButton;
View mSettingsButton;
+ RotationToggle mRotationButton;
// drag bar
CloseDragHandle mCloseView;
@@ -299,6 +303,13 @@
mStatusBarView = (PhoneStatusBarView) mStatusBarWindow.findViewById(R.id.status_bar);
mNotificationPanel = mStatusBarWindow.findViewById(R.id.notification_panel);
+ // don't allow clicks on the panel to pass through to the background where they will cause the panel to close
+ mNotificationPanel.setOnTouchListener(new View.OnTouchListener() {
+ @Override
+ public boolean onTouch(View v, MotionEvent event) {
+ return true;
+ }
+ });
if (ENABLE_INTRUDERS) {
mIntruderAlertView = (IntruderAlertView) View.inflate(context, R.layout.intruder_alert, null);
@@ -344,6 +355,8 @@
mDateView = (DateView)mStatusBarWindow.findViewById(R.id.date);
mSettingsButton = mStatusBarWindow.findViewById(R.id.settings_button);
mSettingsButton.setOnClickListener(mSettingsButtonListener);
+ mRotationButton = (RotationToggle) mStatusBarWindow.findViewById(R.id.rotation_lock_button);
+
mScrollView = (ScrollView)mStatusBarWindow.findViewById(R.id.scroll);
mScrollView.setVerticalScrollBarEnabled(false); // less drawing during pulldowns
@@ -451,7 +464,7 @@
@Override
protected void updateSearchPanel() {
super.updateSearchPanel();
- mSearchPanelView.setStatusBarView(mStatusBarView);
+ mSearchPanelView.setStatusBarView(mNavigationBarView);
mNavigationBarView.setDelegateView(mSearchPanelView);
}
@@ -1247,6 +1260,10 @@
return;
}
mExpanded = false;
+
+ // Close any "App info" popups that might have snuck on-screen
+ dismissPopups();
+
if (mPostCollapseCleanup != null) {
mPostCollapseCleanup.run();
mPostCollapseCleanup = null;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NotificationRowLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NotificationRowLayout.java
index 93803d9..03dfd1c 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NotificationRowLayout.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NotificationRowLayout.java
@@ -32,6 +32,7 @@
import android.view.View;
import android.view.ViewConfiguration;
import android.view.ViewGroup;
+import android.view.inputmethod.InputMethodManager;
import android.widget.LinearLayout;
import com.android.systemui.ExpandHelper;
@@ -108,6 +109,14 @@
mSwipeHelper.setLongPressListener(listener);
}
+ @Override
+ public void onWindowFocusChanged(boolean hasWindowFocus) {
+ super.onWindowFocusChanged(hasWindowFocus);
+ if (!hasWindowFocus) {
+ mSwipeHelper.removeLongPressCallback();
+ }
+ }
+
public void setAnimateBounds(boolean anim) {
mAnimateBounds = anim;
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java
index 6e87dd7..a394596 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java
@@ -67,6 +67,7 @@
import com.android.systemui.recent.RecentTasksLoader;
import com.android.systemui.recent.RecentsPanelView;
import com.android.systemui.statusbar.BaseStatusBar;
+import com.android.systemui.statusbar.DoNotDisturb;
import com.android.systemui.statusbar.NotificationData;
import com.android.systemui.statusbar.SignalClusterView;
import com.android.systemui.statusbar.StatusBarIconView;
@@ -165,6 +166,7 @@
BluetoothController mBluetoothController;
LocationController mLocationController;
NetworkController mNetworkController;
+ DoNotDisturb mDoNotDisturb;
ViewGroup mBarContents;
@@ -520,6 +522,9 @@
// The icons
mLocationController = new LocationController(mContext); // will post a notification
+ // watch the PREF_DO_NOT_DISTURB and convert to appropriate disable() calls
+ mDoNotDisturb = new DoNotDisturb(mContext);
+
mBatteryController = new BatteryController(mContext);
mBatteryController.addIconView((ImageView)sb.findViewById(R.id.battery));
mBluetoothController = new BluetoothController(mContext);
@@ -1072,8 +1077,8 @@
mTicker.halt();
}
}
- if ((diff & (StatusBarManager.DISABLE_RECENT
- | StatusBarManager.DISABLE_BACK
+ if ((diff & (StatusBarManager.DISABLE_RECENT
+ | StatusBarManager.DISABLE_BACK
| StatusBarManager.DISABLE_HOME)) != 0) {
setNavigationVisibility(state);
diff --git a/policy/src/com/android/internal/policy/impl/KeyguardViewManager.java b/policy/src/com/android/internal/policy/impl/KeyguardViewManager.java
index 7100e89..7f432bf 100644
--- a/policy/src/com/android/internal/policy/impl/KeyguardViewManager.java
+++ b/policy/src/com/android/internal/policy/impl/KeyguardViewManager.java
@@ -181,6 +181,7 @@
( View.STATUS_BAR_DISABLE_BACK
| View.STATUS_BAR_DISABLE_HOME
);
+ Log.v(TAG, "KGVM: Set visibility on " + mKeyguardHost + " to " + visFlags);
mKeyguardHost.setSystemUiVisibility(visFlags);
mViewManager.updateViewLayout(mKeyguardHost, mWindowLayoutParams);
diff --git a/policy/src/com/android/internal/policy/impl/LockPatternKeyguardView.java b/policy/src/com/android/internal/policy/impl/LockPatternKeyguardView.java
index 2408d7f..8320b1d 100644
--- a/policy/src/com/android/internal/policy/impl/LockPatternKeyguardView.java
+++ b/policy/src/com/android/internal/policy/impl/LockPatternKeyguardView.java
@@ -717,9 +717,10 @@
@Override
public void onClockVisibilityChanged() {
- int visFlags = getSystemUiVisibility() & ~View.STATUS_BAR_DISABLE_CLOCK;
- setSystemUiVisibility(visFlags
- | (mUpdateMonitor.isClockVisible() ? View.STATUS_BAR_DISABLE_CLOCK : 0));
+ int visFlags = (getSystemUiVisibility() & ~View.STATUS_BAR_DISABLE_CLOCK)
+ | (mUpdateMonitor.isClockVisible() ? View.STATUS_BAR_DISABLE_CLOCK : 0);
+ Log.v(TAG, "Set visibility on " + this + " to " + visFlags);
+ setSystemUiVisibility(visFlags);
}
// We need to stop the biometric unlock when a phone call comes in
diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
index b3ca171..6348d37 100755
--- a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
+++ b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
@@ -553,8 +553,6 @@
resolver.registerContentObserver(Settings.System.getUriFor(
Settings.System.SCREEN_OFF_TIMEOUT), false, this);
resolver.registerContentObserver(Settings.System.getUriFor(
- Settings.System.WINDOW_ORIENTATION_LISTENER_LOG), false, this);
- resolver.registerContentObserver(Settings.System.getUriFor(
Settings.System.POINTER_LOCATION), false, this);
resolver.registerContentObserver(Settings.Secure.getUriFor(
Settings.Secure.DEFAULT_INPUT_METHOD), false, this);
@@ -1098,10 +1096,6 @@
updateOrientationListenerLp();
}
- mOrientationListener.setLogEnabled(
- Settings.System.getInt(resolver,
- Settings.System.WINDOW_ORIENTATION_LISTENER_LOG, 0) != 0);
-
if (mSystemReady) {
int pointerLocation = Settings.System.getInt(resolver,
Settings.System.POINTER_LOCATION, 0);
diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java
index 4b40107..0f8d151 100644
--- a/services/java/com/android/server/am/ActivityManagerService.java
+++ b/services/java/com/android/server/am/ActivityManagerService.java
@@ -13484,7 +13484,7 @@
parentLaunchMode == ActivityInfo.LAUNCH_SINGLE_TASK ||
parentLaunchMode == ActivityInfo.LAUNCH_SINGLE_TOP ||
(destIntentFlags & Intent.FLAG_ACTIVITY_CLEAR_TOP) != 0) {
- parent.deliverNewIntentLocked(srec.app.uid, destIntent);
+ parent.deliverNewIntentLocked(srec.info.applicationInfo.uid, destIntent);
} else {
try {
ActivityInfo aInfo = AppGlobals.getPackageManager().getActivityInfo(
@@ -14508,9 +14508,11 @@
// activities causes more harm than good.
if (curLevel >= ComponentCallbacks2.TRIM_MEMORY_COMPLETE
&& app != mHomeProcess && app != mPreviousProcess) {
+ // Need to do this on its own message because the stack may not
+ // be in a consistent state at this point.
// For these apps we will also finish their activities
// to help them free memory.
- mMainStack.destroyActivitiesLocked(app, false, "trim");
+ mMainStack.scheduleDestroyActivities(app, false, "trim");
}
}
}
@@ -14582,7 +14584,9 @@
}
if (mAlwaysFinishActivities) {
- mMainStack.destroyActivitiesLocked(null, false, "always-finish");
+ // Need to do this on its own message because the stack may not
+ // be in a consistent state at this point.
+ mMainStack.scheduleDestroyActivities(null, false, "always-finish");
}
}
diff --git a/services/java/com/android/server/am/ActivityRecord.java b/services/java/com/android/server/am/ActivityRecord.java
index cce8e7a..97bfd6f 100644
--- a/services/java/com/android/server/am/ActivityRecord.java
+++ b/services/java/com/android/server/am/ActivityRecord.java
@@ -29,6 +29,7 @@
import android.content.res.CompatibilityInfo;
import android.content.res.Configuration;
import android.graphics.Bitmap;
+import android.graphics.Rect;
import android.os.Build;
import android.os.Bundle;
import android.os.IBinder;
@@ -562,12 +563,26 @@
service.mWindowManager.overridePendingAppTransitionScaleUp(
pendingOptions.getStartX(), pendingOptions.getStartY(),
pendingOptions.getStartWidth(), pendingOptions.getStartHeight());
+ if (intent.getSourceBounds() == null) {
+ intent.setSourceBounds(new Rect(pendingOptions.getStartX(),
+ pendingOptions.getStartY(),
+ pendingOptions.getStartX()+pendingOptions.getStartWidth(),
+ pendingOptions.getStartY()+pendingOptions.getStartHeight()));
+ }
break;
case ActivityOptions.ANIM_THUMBNAIL:
service.mWindowManager.overridePendingAppTransitionThumb(
pendingOptions.getThumbnail(),
pendingOptions.getStartX(), pendingOptions.getStartY(),
pendingOptions.getOnAnimationStartListener());
+ if (intent.getSourceBounds() == null) {
+ intent.setSourceBounds(new Rect(pendingOptions.getStartX(),
+ pendingOptions.getStartY(),
+ pendingOptions.getStartX()
+ + pendingOptions.getThumbnail().getWidth(),
+ pendingOptions.getStartY()
+ + pendingOptions.getThumbnail().getHeight()));
+ }
break;
}
pendingOptions = null;
diff --git a/services/java/com/android/server/am/ActivityStack.java b/services/java/com/android/server/am/ActivityStack.java
index 25fae83..1e14f5b 100755
--- a/services/java/com/android/server/am/ActivityStack.java
+++ b/services/java/com/android/server/am/ActivityStack.java
@@ -45,7 +45,6 @@
import android.content.res.Configuration;
import android.content.res.Resources;
import android.graphics.Bitmap;
-import android.net.Uri;
import android.os.Binder;
import android.os.Bundle;
import android.os.Handler;
@@ -289,7 +288,19 @@
static final int RESUME_TOP_ACTIVITY_MSG = ActivityManagerService.FIRST_ACTIVITY_STACK_MSG + 6;
static final int LAUNCH_TICK_MSG = ActivityManagerService.FIRST_ACTIVITY_STACK_MSG + 7;
static final int STOP_TIMEOUT_MSG = ActivityManagerService.FIRST_ACTIVITY_STACK_MSG + 8;
-
+ static final int DESTROY_ACTIVITIES_MSG = ActivityManagerService.FIRST_ACTIVITY_STACK_MSG + 9;
+
+ static class ScheduleDestroyArgs {
+ final ProcessRecord mOwner;
+ final boolean mOomAdj;
+ final String mReason;
+ ScheduleDestroyArgs(ProcessRecord owner, boolean oomAdj, String reason) {
+ mOwner = owner;
+ mOomAdj = oomAdj;
+ mReason = reason;
+ }
+ }
+
final Handler mHandler = new Handler() {
//public Handler() {
// if (localLOGV) Slog.v(TAG, "Handler started!");
@@ -384,6 +395,12 @@
}
}
} break;
+ case DESTROY_ACTIVITIES_MSG: {
+ ScheduleDestroyArgs args = (ScheduleDestroyArgs)msg.obj;
+ synchronized (mService) {
+ destroyActivitiesLocked(args.mOwner, args.mOomAdj, args.mReason);
+ }
+ }
}
}
};
@@ -3821,19 +3838,39 @@
r.connections = null;
}
}
-
+
+ final void scheduleDestroyActivities(ProcessRecord owner, boolean oomAdj, String reason) {
+ Message msg = mHandler.obtainMessage(DESTROY_ACTIVITIES_MSG);
+ msg.obj = new ScheduleDestroyArgs(owner, oomAdj, reason);
+ mHandler.sendMessage(msg);
+ }
+
final void destroyActivitiesLocked(ProcessRecord owner, boolean oomAdj, String reason) {
+ boolean lastIsOpaque = false;
for (int i=mHistory.size()-1; i>=0; i--) {
ActivityRecord r = mHistory.get(i);
+ if (r.finishing) {
+ continue;
+ }
+ if (r.fullscreen) {
+ lastIsOpaque = true;
+ }
if (owner != null && r.app != owner) {
continue;
}
+ if (!lastIsOpaque) {
+ continue;
+ }
// We can destroy this one if we have its icicle saved and
// it is not in the process of pausing/stopping/finishing.
- if (r.app != null && r.haveState && !r.visible && r.stopped && !r.finishing
+ if (r.app != null && r != mResumedActivity && r != mPausingActivity
+ && r.haveState && !r.visible && r.stopped
&& r.state != ActivityState.DESTROYING
&& r.state != ActivityState.DESTROYED) {
- destroyActivityLocked(r, true, oomAdj, "trim");
+ if (DEBUG_SWITCH) Slog.v(TAG, "Destroying " + r + " in state " + r.state
+ + " resumed=" + mResumedActivity
+ + " pausing=" + mPausingActivity);
+ destroyActivityLocked(r, true, oomAdj, reason);
}
}
}
@@ -3847,7 +3884,7 @@
final boolean destroyActivityLocked(ActivityRecord r,
boolean removeFromApp, boolean oomAdj, String reason) {
if (DEBUG_SWITCH) Slog.v(
- TAG, "Removing activity: token=" + r
+ TAG, "Removing activity from " + reason + ": token=" + r
+ ", app=" + (r.app != null ? r.app.processName : "(null)"));
EventLog.writeEvent(EventLogTags.AM_DESTROY_ACTIVITY,
System.identityHashCode(r),
diff --git a/services/java/com/android/server/am/TaskRecord.java b/services/java/com/android/server/am/TaskRecord.java
index e3ebcc61..4b4a89d 100644
--- a/services/java/com/android/server/am/TaskRecord.java
+++ b/services/java/com/android/server/am/TaskRecord.java
@@ -63,9 +63,10 @@
// If this Intent has a selector, we want to clear it for the
// recent task since it is not relevant if the user later wants
// to re-launch the app.
- if (_intent.getSelector() != null) {
+ if (_intent.getSelector() != null || _intent.getSourceBounds() != null) {
_intent = new Intent(_intent);
_intent.setSelector(null);
+ _intent.setSourceBounds(null);
}
}
intent = _intent;
@@ -78,6 +79,7 @@
Intent targetIntent = new Intent(_intent);
targetIntent.setComponent(targetComponent);
targetIntent.setSelector(null);
+ targetIntent.setSourceBounds(null);
intent = targetIntent;
realActivity = targetComponent;
origActivity = _intent.getComponent();
diff --git a/services/java/com/android/server/location/GpsLocationProvider.java b/services/java/com/android/server/location/GpsLocationProvider.java
index 65b9627..ce53499 100755
--- a/services/java/com/android/server/location/GpsLocationProvider.java
+++ b/services/java/com/android/server/location/GpsLocationProvider.java
@@ -192,6 +192,11 @@
// stop trying if we do not receive a fix within 60 seconds
private static final int NO_FIX_TIMEOUT = 60 * 1000;
+ // if the fix interval is below this we leave GPS on,
+ // if above then we cycle the GPS driver.
+ // Typical hot TTTF is ~5 seconds, so 10 seconds seems sane.
+ private static final int GPS_POLLING_THRESHOLD_INTERVAL = 10 * 1000;
+
// true if we are enabled
private volatile boolean mEnabled;
@@ -842,7 +847,18 @@
}
public String getInternalState() {
- return native_get_internal_state();
+ StringBuilder s = new StringBuilder();
+ s.append(" mFixInterval=").append(mFixInterval).append("\n");
+ s.append(" mEngineCapabilities=0x").append(Integer.toHexString(mEngineCapabilities)).append(" (");
+ if (hasCapability(GPS_CAPABILITY_SCHEDULING)) s.append("SCHED ");
+ if (hasCapability(GPS_CAPABILITY_MSB)) s.append("MSB ");
+ if (hasCapability(GPS_CAPABILITY_MSA)) s.append("MSA ");
+ if (hasCapability(GPS_CAPABILITY_SINGLE_SHOT)) s.append("SINGLE_SHOT ");
+ if (hasCapability(GPS_CAPABILITY_ON_DEMAND_TIME)) s.append("ON_DEMAND_TIME ");
+ s.append(")\n");
+
+ s.append(native_get_internal_state());
+ return s.toString();
}
private final class Listener implements IBinder.DeathRecipient {
@@ -1131,7 +1147,8 @@
updateStatus(LocationProvider.AVAILABLE, mSvCount);
}
- if (!hasCapability(GPS_CAPABILITY_SCHEDULING) && mStarted && mFixInterval > 1000) {
+ if (!hasCapability(GPS_CAPABILITY_SCHEDULING) && mStarted &&
+ mFixInterval > GPS_POLLING_THRESHOLD_INTERVAL) {
if (DEBUG) Log.d(TAG, "got fix, hibernating");
hibernate();
}
diff --git a/services/java/com/android/server/net/NetworkStatsService.java b/services/java/com/android/server/net/NetworkStatsService.java
index a9d4b59..1a56b80 100644
--- a/services/java/com/android/server/net/NetworkStatsService.java
+++ b/services/java/com/android/server/net/NetworkStatsService.java
@@ -616,10 +616,12 @@
// persist if beyond new thresholds
final long currentTime = mTime.hasCache() ? mTime.currentTimeMillis()
: System.currentTimeMillis();
- mDevRecorder.maybePersistLocked(currentTime);
- mXtRecorder.maybePersistLocked(currentTime);
- mUidRecorder.maybePersistLocked(currentTime);
- mUidTagRecorder.maybePersistLocked(currentTime);
+ synchronized (mStatsLock) {
+ mDevRecorder.maybePersistLocked(currentTime);
+ mXtRecorder.maybePersistLocked(currentTime);
+ mUidRecorder.maybePersistLocked(currentTime);
+ mUidTagRecorder.maybePersistLocked(currentTime);
+ }
// re-arm global alert
registerGlobalAlert();
diff --git a/services/java/com/android/server/pm/PackageManagerService.java b/services/java/com/android/server/pm/PackageManagerService.java
index b5d0b60..b5567d3 100644
--- a/services/java/com/android/server/pm/PackageManagerService.java
+++ b/services/java/com/android/server/pm/PackageManagerService.java
@@ -53,6 +53,7 @@
import android.content.IntentSender.SendIntentException;
import android.content.pm.ActivityInfo;
import android.content.pm.ApplicationInfo;
+import android.content.pm.ContainerEncryptionParams;
import android.content.pm.FeatureInfo;
import android.content.pm.IPackageDataObserver;
import android.content.pm.IPackageDeleteObserver;
@@ -116,7 +117,6 @@
import java.io.FileReader;
import java.io.FilenameFilter;
import java.io.IOException;
-import java.io.InputStream;
import java.io.PrintWriter;
import java.security.NoSuchAlgorithmException;
import java.security.PublicKey;
@@ -128,7 +128,6 @@
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
-import java.util.Enumeration;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
@@ -136,9 +135,6 @@
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipFile;
-import java.util.zip.ZipOutputStream;
import libcore.io.ErrnoException;
import libcore.io.IoUtils;
@@ -5133,13 +5129,13 @@
final Uri packageURI, final IPackageInstallObserver observer, final int flags,
final String installerPackageName) {
installPackageWithVerification(packageURI, observer, flags, installerPackageName, null,
- null);
+ null, null);
}
@Override
public void installPackageWithVerification(Uri packageURI, IPackageInstallObserver observer,
int flags, String installerPackageName, Uri verificationURI,
- ManifestDigest manifestDigest) {
+ ManifestDigest manifestDigest, ContainerEncryptionParams encryptionParams) {
mContext.enforceCallingOrSelfPermission(android.Manifest.permission.INSTALL_PACKAGES, null);
final int uid = Binder.getCallingUid();
@@ -5157,7 +5153,7 @@
final Message msg = mHandler.obtainMessage(INIT_COPY);
msg.obj = new InstallParams(packageURI, observer, filteredFlags, installerPackageName,
- verificationURI, manifestDigest);
+ verificationURI, manifestDigest, encryptionParams);
mHandler.sendMessage(msg);
}
@@ -5560,22 +5556,27 @@
class InstallParams extends HandlerParams {
final IPackageInstallObserver observer;
int flags;
- final Uri packageURI;
+
+ private final Uri mPackageURI;
final String installerPackageName;
final Uri verificationURI;
final ManifestDigest manifestDigest;
private InstallArgs mArgs;
private int mRet;
+ private File mTempPackage;
+ final ContainerEncryptionParams encryptionParams;
InstallParams(Uri packageURI,
IPackageInstallObserver observer, int flags,
- String installerPackageName, Uri verificationURI, ManifestDigest manifestDigest) {
- this.packageURI = packageURI;
+ String installerPackageName, Uri verificationURI, ManifestDigest manifestDigest,
+ ContainerEncryptionParams encryptionParams) {
+ this.mPackageURI = packageURI;
this.flags = flags;
this.observer = observer;
this.installerPackageName = installerPackageName;
this.verificationURI = verificationURI;
this.manifestDigest = manifestDigest;
+ this.encryptionParams = encryptionParams;
}
private int installLocationPolicy(PackageInfoLite pkgLite, int flags) {
@@ -5655,16 +5656,51 @@
lowThreshold = dsm.getMemoryLowThreshold();
}
- // Remote call to find out default install location
try {
- mContext.grantUriPermission(DEFAULT_CONTAINER_PACKAGE, packageURI,
+ mContext.grantUriPermission(DEFAULT_CONTAINER_PACKAGE, mPackageURI,
Intent.FLAG_GRANT_READ_URI_PERMISSION);
- pkgLite = mContainerService.getMinimalPackageInfo(packageURI, flags,
- lowThreshold);
- } finally {
- mContext.revokeUriPermission(packageURI, Intent.FLAG_GRANT_READ_URI_PERMISSION);
- }
+ final File packageFile;
+ if (encryptionParams != null || !"file".equals(mPackageURI.getScheme())) {
+ ParcelFileDescriptor out = null;
+
+ mTempPackage = createTempPackageFile(mDrmAppPrivateInstallDir);
+ if (mTempPackage != null) {
+ try {
+ out = ParcelFileDescriptor.open(mTempPackage,
+ ParcelFileDescriptor.MODE_READ_WRITE);
+ } catch (FileNotFoundException e) {
+ Slog.e(TAG, "Failed to create temporary file for : " + mPackageURI);
+ }
+
+ // Make a temporary file for decryption.
+ ret = mContainerService
+ .copyResource(mPackageURI, encryptionParams, out);
+
+ packageFile = mTempPackage;
+
+ FileUtils.setPermissions(packageFile.getAbsolutePath(),
+ FileUtils.S_IRUSR | FileUtils.S_IWUSR | FileUtils.S_IROTH,
+ -1, -1);
+ } else {
+ packageFile = null;
+ }
+ } else {
+ packageFile = new File(mPackageURI.getPath());
+ }
+
+ if (packageFile != null) {
+ // Remote call to find out default install location
+ pkgLite = mContainerService.getMinimalPackageInfo(
+ packageFile.getAbsolutePath(), flags, lowThreshold);
+ }
+ } finally {
+ mContext.revokeUriPermission(mPackageURI,
+ Intent.FLAG_GRANT_READ_URI_PERMISSION);
+ }
+ }
+
+ if (ret == PackageManager.INSTALL_SUCCEEDED) {
int loc = pkgLite.recommendedInstallLocation;
if (loc == PackageHelper.RECOMMEND_FAILED_INVALID_LOCATION) {
ret = PackageManager.INSTALL_FAILED_INVALID_INSTALL_LOCATION;
@@ -5708,8 +5744,9 @@
final int requiredUid = mRequiredVerifierPackage == null ? -1
: getPackageUid(mRequiredVerifierPackage, 0);
if (requiredUid != -1 && isVerificationEnabled()) {
- final Intent verification = new Intent(Intent.ACTION_PACKAGE_NEEDS_VERIFICATION);
- verification.setDataAndType(packageURI, PACKAGE_MIME_TYPE);
+ final Intent verification = new Intent(
+ Intent.ACTION_PACKAGE_NEEDS_VERIFICATION);
+ verification.setDataAndType(getPackageUri(), PACKAGE_MIME_TYPE);
verification.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
final List<ResolveInfo> receivers = queryIntentReceivers(verification, null,
@@ -5812,6 +5849,13 @@
if (mArgs != null) {
processPendingInstall(mArgs, mRet);
}
+
+ if (mTempPackage != null) {
+ if (!mTempPackage.delete()) {
+ Slog.w(TAG, "Couldn't delete temporary file: "
+ + mTempPackage.getAbsolutePath());
+ }
+ }
}
@Override
@@ -5823,6 +5867,14 @@
public boolean isForwardLocked() {
return (flags & PackageManager.INSTALL_FORWARD_LOCK) != 0;
}
+
+ public Uri getPackageUri() {
+ if (mTempPackage != null) {
+ return Uri.fromFile(mTempPackage);
+ } else {
+ return mPackageURI;
+ }
+ }
}
/*
@@ -6037,8 +6089,8 @@
boolean created = false;
FileInstallArgs(InstallParams params) {
- super(params.packageURI, params.observer, params.flags, params.installerPackageName,
- params.manifestDigest);
+ super(params.getPackageUri(), params.observer, params.flags,
+ params.installerPackageName, params.manifestDigest);
}
FileInstallArgs(String fullCodePath, String fullResourcePath, String nativeLibraryPath) {
@@ -6128,7 +6180,7 @@
try {
mContext.grantUriPermission(DEFAULT_CONTAINER_PACKAGE, packageURI,
Intent.FLAG_GRANT_READ_URI_PERMISSION);
- ret = imcs.copyResource(packageURI, out);
+ ret = imcs.copyResource(packageURI, null, out);
} finally {
IoUtils.closeQuietly(out);
mContext.revokeUriPermission(packageURI, Intent.FLAG_GRANT_READ_URI_PERMISSION);
@@ -6315,8 +6367,8 @@
String libraryPath;
AsecInstallArgs(InstallParams params) {
- super(params.packageURI, params.observer, params.flags, params.installerPackageName,
- params.manifestDigest);
+ super(params.getPackageUri(), params.observer, params.flags,
+ params.installerPackageName, params.manifestDigest);
}
AsecInstallArgs(String fullCodePath, String fullResourcePath, String nativeLibraryPath,
diff --git a/services/java/com/android/server/wm/BlackFrame.java b/services/java/com/android/server/wm/BlackFrame.java
index c915932..27af313 100644
--- a/services/java/com/android/server/wm/BlackFrame.java
+++ b/services/java/com/android/server/wm/BlackFrame.java
@@ -42,8 +42,17 @@
this.layer = layer;
int w = r-l;
int h = b-t;
- surface = new Surface(session, 0, "BlackSurface",
- -1, w, h, PixelFormat.OPAQUE, Surface.FX_SURFACE_DIM);
+ if (WindowManagerService.DEBUG_SURFACE_TRACE) {
+ surface = new WindowStateAnimator.SurfaceTrace(session, 0, "BlackSurface("
+ + l + ", " + t + ")",
+ -1, w, h, PixelFormat.OPAQUE, Surface.FX_SURFACE_DIM);
+ } else {
+ surface = new Surface(session, 0, "BlackSurface",
+ -1, w, h, PixelFormat.OPAQUE, Surface.FX_SURFACE_DIM);
+ }
+ surface.setAlpha(1);
+ surface.setLayer(layer);
+ surface.show();
if (WindowManagerService.SHOW_TRANSACTIONS ||
WindowManagerService.SHOW_SURFACE_ALLOC) Slog.i(WindowManagerService.TAG,
" BLACK " + surface + ": CREATE layer=" + layer);
@@ -58,8 +67,6 @@
surface.setMatrix(
mTmpFloats[Matrix.MSCALE_X], mTmpFloats[Matrix.MSKEW_Y],
mTmpFloats[Matrix.MSKEW_X], mTmpFloats[Matrix.MSCALE_Y]);
- surface.setAlpha(1.0f);
- surface.setLayer(layer);
if (false) {
Slog.i(WindowManagerService.TAG, "Black Surface @ (" + left + "," + top + "): ("
+ mTmpFloats[Matrix.MTRANS_X] + ","
@@ -159,14 +166,6 @@
}
}
- public void setAlpha(float alpha) {
- for (int i=0; i<mBlackSurfaces.length; i++) {
- if (mBlackSurfaces[i] != null) {
- mBlackSurfaces[i].surface.setAlpha(alpha);
- }
- }
- }
-
public void clearMatrix() {
for (int i=0; i<mBlackSurfaces.length; i++) {
if (mBlackSurfaces[i] != null) {
diff --git a/services/java/com/android/server/wm/DimAnimator.java b/services/java/com/android/server/wm/DimAnimator.java
index f9f9d1a..e8f56c8 100644
--- a/services/java/com/android/server/wm/DimAnimator.java
+++ b/services/java/com/android/server/wm/DimAnimator.java
@@ -68,8 +68,10 @@
* {@link #updateSurface} after all windows are examined.
*/
void updateParameters(final Resources res, final Parameters params, final long currentTime) {
- final int dw = params.mDimWidth;
- final int dh = params.mDimHeight;
+ // Multiply by 1.5 so that rotating a frozen surface that includes this does not expose a
+ // corner.
+ final int dw = (int) (params.mDimWidth * 1.5);
+ final int dh = (int) (params.mDimHeight * 1.5);
final WindowStateAnimator winAnimator = params.mDimWinAnimator;
final float target = params.mDimTarget;
if (!mDimShown) {
@@ -79,7 +81,8 @@
try {
mLastDimWidth = dw;
mLastDimHeight = dh;
- mDimSurface.setPosition(0, 0);
+ // back off position so mDimXXX/4 is before and mDimXXX/4 is after
+ mDimSurface.setPosition(-1 * dw / 6, -1 * dh /6);
mDimSurface.setSize(dw, dh);
mDimSurface.show();
} catch (RuntimeException e) {
@@ -89,6 +92,8 @@
mLastDimWidth = dw;
mLastDimHeight = dh;
mDimSurface.setSize(dw, dh);
+ // back off position so mDimXXX/4 is before and mDimXXX/4 is after
+ mDimSurface.setPosition(-1 * dw / 6, -1 * dh /6);
}
mDimSurface.setLayer(winAnimator.mAnimLayer - WindowManagerService.LAYER_OFFSET_DIM);
diff --git a/services/java/com/android/server/wm/ScreenRotationAnimation.java b/services/java/com/android/server/wm/ScreenRotationAnimation.java
index 13013a8..938db9e 100644
--- a/services/java/com/android/server/wm/ScreenRotationAnimation.java
+++ b/services/java/com/android/server/wm/ScreenRotationAnimation.java
@@ -862,7 +862,6 @@
} else {
mExitFrameFinalMatrix.setConcat(mExitTransformation.getMatrix(), mFrameInitialMatrix);
mExitingBlackFrame.setMatrix(mExitFrameFinalMatrix);
- mExitingBlackFrame.setAlpha(mExitTransformation.getAlpha());
}
}
diff --git a/services/java/com/android/server/wm/WindowStateAnimator.java b/services/java/com/android/server/wm/WindowStateAnimator.java
index 2e38332..4f08d92 100644
--- a/services/java/com/android/server/wm/WindowStateAnimator.java
+++ b/services/java/com/android/server/wm/WindowStateAnimator.java
@@ -951,6 +951,10 @@
mSurface.setSize(width, height);
mAnimator.mPendingLayoutChanges |=
WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER;
+ if ((w.mAttrs.flags & LayoutParams.FLAG_DIM_BEHIND) != 0) {
+ mAnimator.startDimming(this, w.mExiting ? 0 : w.mAttrs.dimAmount,
+ mService.mAppDisplayWidth, mService.mAppDisplayHeight);
+ }
} catch (RuntimeException e) {
// If something goes wrong with the surface (such
// as running out of memory), don't take down the
diff --git a/telephony/java/com/android/internal/telephony/cdma/CdmaLteServiceStateTracker.java b/telephony/java/com/android/internal/telephony/cdma/CdmaLteServiceStateTracker.java
index 297c2ac..0a40c75 100644
--- a/telephony/java/com/android/internal/telephony/cdma/CdmaLteServiceStateTracker.java
+++ b/telephony/java/com/android/internal/telephony/cdma/CdmaLteServiceStateTracker.java
@@ -343,10 +343,16 @@
// new ERI text
if (ss.getState() == ServiceState.STATE_IN_SERVICE) {
eriText = phone.getCdmaEriText();
+ } else if (ss.getState() == ServiceState.STATE_POWER_OFF) {
+ eriText = phone.mIccRecords.getServiceProviderName();
+ if (TextUtils.isEmpty(eriText)) {
+ // Sets operator alpha property by retrieving from
+ // build-time system property
+ eriText = SystemProperties.get("ro.cdma.home.operator.alpha");
+ }
} else {
// Note that ServiceState.STATE_OUT_OF_SERVICE is valid used
- // for
- // mRegistrationState 0,2,3 and 4
+ // for mRegistrationState 0,2,3 and 4
eriText = phone.getContext()
.getText(com.android.internal.R.string.roamingTextSearching).toString();
}
diff --git a/test-runner/src/android/test/mock/MockContentProvider.java b/test-runner/src/android/test/mock/MockContentProvider.java
index a8c388e..1e41416 100644
--- a/test-runner/src/android/test/mock/MockContentProvider.java
+++ b/test-runner/src/android/test/mock/MockContentProvider.java
@@ -21,7 +21,6 @@
import android.content.ContentProviderResult;
import android.content.ContentValues;
import android.content.Context;
-import android.content.ICancellationSignal;
import android.content.IContentProvider;
import android.content.OperationApplicationException;
import android.content.pm.PathPermission;
@@ -31,6 +30,7 @@
import android.net.Uri;
import android.os.Bundle;
import android.os.IBinder;
+import android.os.ICancellationSignal;
import android.os.ParcelFileDescriptor;
import android.os.RemoteException;
diff --git a/test-runner/src/android/test/mock/MockIContentProvider.java b/test-runner/src/android/test/mock/MockIContentProvider.java
index 1aa0448..9fcfc22 100644
--- a/test-runner/src/android/test/mock/MockIContentProvider.java
+++ b/test-runner/src/android/test/mock/MockIContentProvider.java
@@ -21,12 +21,12 @@
import android.content.ContentValues;
import android.content.EntityIterator;
import android.content.IContentProvider;
-import android.content.ICancellationSignal;
import android.content.res.AssetFileDescriptor;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.os.IBinder;
+import android.os.ICancellationSignal;
import android.os.ParcelFileDescriptor;
import android.os.RemoteException;
diff --git a/test-runner/src/android/test/mock/MockPackageManager.java b/test-runner/src/android/test/mock/MockPackageManager.java
index 5610134..86689f3 100644
--- a/test-runner/src/android/test/mock/MockPackageManager.java
+++ b/test-runner/src/android/test/mock/MockPackageManager.java
@@ -22,6 +22,7 @@
import android.content.IntentSender;
import android.content.pm.ActivityInfo;
import android.content.pm.ApplicationInfo;
+import android.content.pm.ContainerEncryptionParams;
import android.content.pm.FeatureInfo;
import android.content.pm.IPackageDataObserver;
import android.content.pm.IPackageDeleteObserver;
@@ -29,6 +30,7 @@
import android.content.pm.IPackageMoveObserver;
import android.content.pm.IPackageStatsObserver;
import android.content.pm.InstrumentationInfo;
+import android.content.pm.ManifestDigest;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PermissionGroupInfo;
@@ -36,16 +38,12 @@
import android.content.pm.ProviderInfo;
import android.content.pm.ResolveInfo;
import android.content.pm.ServiceInfo;
-import android.content.pm.Signature;
import android.content.pm.UserInfo;
-import android.content.pm.ManifestDigest;
import android.content.pm.VerifierDeviceIdentity;
-import android.content.pm.VerifierInfo;
import android.content.res.Resources;
import android.content.res.XmlResourceParser;
import android.graphics.drawable.Drawable;
import android.net.Uri;
-import android.os.RemoteException;
import java.util.List;
@@ -565,7 +563,7 @@
@Override
public void installPackageWithVerification(Uri packageURI, IPackageInstallObserver observer,
int flags, String installerPackageName, Uri verificationURI,
- ManifestDigest manifestDigest) {
+ ManifestDigest manifestDigest, ContainerEncryptionParams encryptionParams) {
throw new UnsupportedOperationException();
}
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContentProvider.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContentProvider.java
index e28866e..f770ccc 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContentProvider.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContentProvider.java
@@ -19,7 +19,6 @@
import android.content.ContentProviderOperation;
import android.content.ContentProviderResult;
import android.content.ContentValues;
-import android.content.ICancellationSignal;
import android.content.IContentProvider;
import android.content.OperationApplicationException;
import android.content.res.AssetFileDescriptor;
@@ -27,6 +26,7 @@
import android.net.Uri;
import android.os.Bundle;
import android.os.IBinder;
+import android.os.ICancellationSignal;
import android.os.ParcelFileDescriptor;
import android.os.RemoteException;
diff --git a/tools/localize/Android.mk b/tools/localize/Android.mk
deleted file mode 100644
index 5ec9feb..0000000
--- a/tools/localize/Android.mk
+++ /dev/null
@@ -1,55 +0,0 @@
-#
-# Copyright 2006 The Android Open Source Project
-#
-# Android Asset Packaging Tool
-#
-
-LOCAL_PATH:= $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := \
- file_utils.cpp \
- localize.cpp \
- merge_res_and_xliff.cpp \
- res_check.cpp \
- xmb.cpp \
- Configuration.cpp \
- Perforce.cpp \
- SourcePos.cpp \
- Values.cpp \
- ValuesFile.cpp \
- XLIFFFile.cpp \
- XMLHandler.cpp
-
-LOCAL_C_INCLUDES := \
- external/expat/lib \
- build/libs/host/include
-
-LOCAL_CFLAGS += -g -O0
-
-LOCAL_STATIC_LIBRARIES := \
- libexpat \
- libhost \
- libutils \
- libcutils
-
-ifeq ($(HOST_OS),linux)
-LOCAL_LDLIBS += -lrt -ldl -lpthread
-endif
-
-
-LOCAL_MODULE := localize
-
-ifeq (a,a)
- LOCAL_CFLAGS += -DLOCALIZE_WITH_TESTS
- LOCAL_SRC_FILES += \
- test.cpp \
- localize_test.cpp \
- merge_res_and_xliff_test.cpp \
- Perforce_test.cpp \
- ValuesFile_test.cpp \
- XLIFFFile_test.cpp \
- XMLHandler_test.cpp
-endif
-
-include $(BUILD_HOST_EXECUTABLE)
diff --git a/tools/localize/Configuration.cpp b/tools/localize/Configuration.cpp
deleted file mode 100644
index 56addbd..0000000
--- a/tools/localize/Configuration.cpp
+++ /dev/null
@@ -1,76 +0,0 @@
-#include "Configuration.h"
-#include <string.h>
-
-int
-Configuration::Compare(const Configuration& that) const
-{
- int n;
-
- n = locale.compare(that.locale);
- if (n != 0) return n;
-
- n = vendor.compare(that.vendor);
- if (n != 0) return n;
-
- n = orientation.compare(that.orientation);
- if (n != 0) return n;
-
- n = density.compare(that.density);
- if (n != 0) return n;
-
- n = touchscreen.compare(that.touchscreen);
- if (n != 0) return n;
-
- n = keyboard.compare(that.keyboard);
- if (n != 0) return n;
-
- n = navigation.compare(that.navigation);
- if (n != 0) return n;
-
- n = screenSize.compare(that.screenSize);
- if (n != 0) return n;
-
- return 0;
-}
-
-string
-Configuration::ToString() const
-{
- string s;
- if (locale.length() > 0) {
- if (s.length() > 0) {
- s += "-";
- }
- s += locale;
- }
- return s;
-}
-
-bool
-split_locale(const string& in, string* language, string* region)
-{
- const int len = in.length();
- if (len == 2) {
- if (isalpha(in[0]) && isalpha(in[1])) {
- *language = in;
- region->clear();
- return true;
- } else {
- return false;
- }
- }
- else if (len == 5) {
- if (isalpha(in[0]) && isalpha(in[1]) && (in[2] == '_' || in[2] == '-')
- && isalpha(in[3]) && isalpha(in[4])) {
- language->assign(in.c_str(), 2);
- region->assign(in.c_str()+3, 2);
- return true;
- } else {
- return false;
- }
- }
- else {
- return false;
- }
-}
-
diff --git a/tools/localize/Configuration.h b/tools/localize/Configuration.h
deleted file mode 100644
index f91bf04..0000000
--- a/tools/localize/Configuration.h
+++ /dev/null
@@ -1,38 +0,0 @@
-#ifndef CONFIGURATION_H
-#define CONFIGURATION_H
-
-#include <string>
-
-using namespace std;
-
-struct Configuration
-{
- string locale;
- string vendor;
- string orientation;
- string density;
- string touchscreen;
- string keyboard;
- string navigation;
- string screenSize;
-
- // Compare two configurations
- int Compare(const Configuration& that) const;
-
- inline bool operator<(const Configuration& that) const { return Compare(that) < 0; }
- inline bool operator<=(const Configuration& that) const { return Compare(that) <= 0; }
- inline bool operator==(const Configuration& that) const { return Compare(that) == 0; }
- inline bool operator!=(const Configuration& that) const { return Compare(that) != 0; }
- inline bool operator>=(const Configuration& that) const { return Compare(that) >= 0; }
- inline bool operator>(const Configuration& that) const { return Compare(that) > 0; }
-
- // Parse a directory name, like "values-en-rUS". Return the first segment in resType.
- bool ParseDiectoryName(const string& dir, string* resType);
-
- string ToString() const;
-};
-
-bool split_locale(const string& in, string* language, string* region);
-
-
-#endif // CONFIGURATION_H
diff --git a/tools/localize/Perforce.cpp b/tools/localize/Perforce.cpp
deleted file mode 100644
index ae11231..0000000
--- a/tools/localize/Perforce.cpp
+++ /dev/null
@@ -1,234 +0,0 @@
-#include "Perforce.h"
-#include "log.h"
-#include <string.h>
-#include <cstdio>
-#include <stdlib.h>
-#include <sstream>
-#include <sys/types.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/wait.h>
-#include <cstdio>
-
-using namespace std;
-
-extern char** environ;
-
-int
-Perforce::RunCommand(const string& cmd, string* result, bool printOnFailure)
-{
- int err;
- int outPipe[2];
- int errPipe[2];
- pid_t pid;
-
- log_printf("Perforce::RunCommand: %s\n", cmd.c_str());
-
- err = pipe(outPipe);
- err |= pipe(errPipe);
- if (err == -1) {
- printf("couldn't create pipe. exiting.\n");
- exit(1);
- return -1;
- }
-
- pid = fork();
- if (pid == -1) {
- printf("couldn't fork. eixiting\n");
- exit(1);
- return -1;
- }
- else if (pid == 0) {
- char const* args[] = {
- "/bin/sh",
- "-c",
- cmd.c_str(),
- NULL
- };
- close(outPipe[0]);
- close(errPipe[0]);
- dup2(outPipe[1], 1);
- dup2(errPipe[1], 2);
- execve(args[0], (char* const*)args, environ);
- // done
- }
-
- close(outPipe[1]);
- close(errPipe[1]);
-
- result->clear();
-
- char buf[1024];
-
- // stdout
- while (true) {
- size_t amt = read(outPipe[0], buf, sizeof(buf));
- result->append(buf, amt);
- if (amt <= 0) {
- break;
- }
- }
-
- // stderr -- the messages are short so it ought to just fit in the buffer
- string error;
- while (true) {
- size_t amt = read(errPipe[0], buf, sizeof(buf));
- error.append(buf, amt);
- if (amt <= 0) {
- break;
- }
- }
-
- close(outPipe[0]);
- close(errPipe[0]);
-
- waitpid(pid, &err, 0);
- if (WIFEXITED(err)) {
- err = WEXITSTATUS(err);
- } else {
- err = -1;
- }
- if (err != 0 && printOnFailure) {
- write(2, error.c_str(), error.length());
- }
- return err;
-}
-
-int
-Perforce::GetResourceFileNames(const string& version, const string& base,
- const vector<string>& apps, vector<string>* results,
- bool printOnFailure)
-{
- int err;
- string text;
- stringstream cmd;
-
- cmd << "p4 files";
-
- const size_t I = apps.size();
- for (size_t i=0; i<I; i++) {
- cmd << " \"" << base << '/' << apps[i] << "/res/values/strings.xml@" << version << '"';
- }
-
- err = RunCommand(cmd.str(), &text, printOnFailure);
-
- const char* str = text.c_str();
- while (*str) {
- const char* lineend = strchr(str, '\n');
- if (lineend == str) {
- str++;
- continue;
- }
- if (lineend-str > 1023) {
- fprintf(stderr, "line too long!\n");
- return 1;
- }
-
- string s(str, lineend-str);
-
- char filename[1024];
- char edit[1024];
- int count = sscanf(str, "%[^#]#%*d - %s change %*d %*[^\n]\n", filename, edit);
-
- if (count == 2 && 0 != strcmp("delete", edit)) {
- results->push_back(string(filename));
- }
-
- str = lineend + 1;
- }
-
- return err;
-}
-
-int
-Perforce::GetFile(const string& file, const string& version, string* result,
- bool printOnFailure)
-{
- stringstream cmd;
- cmd << "p4 print -q \"" << file << '@' << version << '"';
- return RunCommand(cmd.str(), result, printOnFailure);
-}
-
-string
-Perforce::GetCurrentChange(bool printOnFailure)
-{
- int err;
- string text;
-
- err = RunCommand("p4 changes -m 1 \\#have", &text, printOnFailure);
- if (err != 0) {
- return "";
- }
-
- long long n;
- int count = sscanf(text.c_str(), "Change %lld on", &n);
- if (count != 1) {
- return "";
- }
-
- char result[100];
- sprintf(result, "%lld", n);
-
- return string(result);
-}
-
-static int
-do_files(const string& op, const vector<string>& files, bool printOnFailure)
-{
- string text;
- stringstream cmd;
-
- cmd << "p4 " << op;
-
- const size_t I = files.size();
- for (size_t i=0; i<I; i++) {
- cmd << " \"" << files[i] << "\"";
- }
-
- return Perforce::RunCommand(cmd.str(), &text, printOnFailure);
-}
-
-int
-Perforce::EditFiles(const vector<string>& files, bool printOnFailure)
-{
- return do_files("edit", files, printOnFailure);
-}
-
-int
-Perforce::AddFiles(const vector<string>& files, bool printOnFailure)
-{
- return do_files("add", files, printOnFailure);
-}
-
-int
-Perforce::DeleteFiles(const vector<string>& files, bool printOnFailure)
-{
- return do_files("delete", files, printOnFailure);
-}
-
-string
-Perforce::Where(const string& depotPath, bool printOnFailure)
-{
- int err;
- string text;
- string cmd = "p4 where ";
- cmd += depotPath;
-
- err = RunCommand(cmd, &text, printOnFailure);
- if (err != 0) {
- return "";
- }
-
- size_t index = text.find(' ');
- if (index == text.npos) {
- return "";
- }
- index = text.find(' ', index+1)+1;
- if (index == text.npos) {
- return "";
- }
-
- return text.substr(index, text.length()-index-1);
-}
-
diff --git a/tools/localize/Perforce.h b/tools/localize/Perforce.h
deleted file mode 100644
index 522797d..0000000
--- a/tools/localize/Perforce.h
+++ /dev/null
@@ -1,25 +0,0 @@
-#ifndef PERFORCE_H
-#define PERFORCE_H
-
-#include <string>
-#include <vector>
-
-using namespace std;
-
-class Perforce
-{
-public:
- static int RunCommand(const string& cmd, string* result, bool printOnFailure);
- static int GetResourceFileNames(const string& version, const string& base,
- const vector<string>& apps, vector<string>* result,
- bool printOnFailure);
- static int GetFile(const string& file, const string& version, string* result,
- bool printOnFailure);
- static string GetCurrentChange(bool printOnFailure);
- static int EditFiles(const vector<string>& filename, bool printOnFailure);
- static int AddFiles(const vector<string>& files, bool printOnFailure);
- static int DeleteFiles(const vector<string>& files, bool printOnFailure);
- static string Where(const string& depotPath, bool printOnFailure);
-};
-
-#endif // PERFORCE_H
diff --git a/tools/localize/Perforce_test.cpp b/tools/localize/Perforce_test.cpp
deleted file mode 100644
index 142b20e..0000000
--- a/tools/localize/Perforce_test.cpp
+++ /dev/null
@@ -1,62 +0,0 @@
-#include "Perforce.h"
-#include <stdio.h>
-
-static int
-RunCommand_test()
-{
- string result;
- int err = Perforce::RunCommand("p4 help csommands", &result, true);
- printf("err=%d result=[[%s]]\n", err, result.c_str());
- return 0;
-}
-
-static int
-GetResourceFileNames_test()
-{
- vector<string> results;
- vector<string> apps;
- apps.push_back("apps/common");
- apps.push_back("apps/Contacts");
- int err = Perforce::GetResourceFileNames("43019", "//device", apps, &results, true);
- if (err != 0) {
- return err;
- }
- if (results.size() != 2) {
- return 1;
- }
- if (results[0] != "//device/apps/common/res/values/strings.xml") {
- return 1;
- }
- if (results[1] != "//device/apps/Contacts/res/values/strings.xml") {
- return 1;
- }
- if (false) {
- for (size_t i=0; i<results.size(); i++) {
- printf("[%zd] '%s'\n", i, results[i].c_str());
- }
- }
- return 0;
-}
-
-static int
-GetFile_test()
-{
- string result;
- int err = Perforce::GetFile("//device/Makefile", "296", &result, true);
- printf("err=%d result=[[%s]]\n", err, result.c_str());
- return 0;
-}
-
-int
-Perforce_test()
-{
- bool all = false;
- int err = 0;
-
- if (all) err |= RunCommand_test();
- if (all) err |= GetResourceFileNames_test();
- if (all) err |= GetFile_test();
-
- return err;
-}
-
diff --git a/tools/localize/SourcePos.cpp b/tools/localize/SourcePos.cpp
deleted file mode 100644
index 184bfe0a..0000000
--- a/tools/localize/SourcePos.cpp
+++ /dev/null
@@ -1,168 +0,0 @@
-#include "SourcePos.h"
-
-#include <stdarg.h>
-#include <cstdio>
-#include <set>
-#include <cstdio>
-
-using namespace std;
-
-const SourcePos GENERATED_POS("<generated>", -1);
-
-// ErrorPos
-// =============================================================================
-struct ErrorPos
-{
- string file;
- int line;
- string error;
-
- ErrorPos();
- ErrorPos(const ErrorPos& that);
- ErrorPos(const string& file, int line, const string& error);
- ~ErrorPos();
- bool operator<(const ErrorPos& rhs) const;
- bool operator==(const ErrorPos& rhs) const;
- ErrorPos& operator=(const ErrorPos& rhs);
-
- void Print(FILE* to) const;
-};
-
-static set<ErrorPos> g_errors;
-
-ErrorPos::ErrorPos()
-{
-}
-
-ErrorPos::ErrorPos(const ErrorPos& that)
- :file(that.file),
- line(that.line),
- error(that.error)
-{
-}
-
-ErrorPos::ErrorPos(const string& f, int l, const string& e)
- :file(f),
- line(l),
- error(e)
-{
-}
-
-ErrorPos::~ErrorPos()
-{
-}
-
-bool
-ErrorPos::operator<(const ErrorPos& rhs) const
-{
- if (this->file < rhs.file) return true;
- if (this->file == rhs.file) {
- if (this->line < rhs.line) return true;
- if (this->line == rhs.line) {
- if (this->error < rhs.error) return true;
- }
- }
- return false;
-}
-
-bool
-ErrorPos::operator==(const ErrorPos& rhs) const
-{
- return this->file == rhs.file
- && this->line == rhs.line
- && this->error == rhs.error;
-}
-
-ErrorPos&
-ErrorPos::operator=(const ErrorPos& rhs)
-{
- this->file = rhs.file;
- this->line = rhs.line;
- this->error = rhs.error;
- return *this;
-}
-
-void
-ErrorPos::Print(FILE* to) const
-{
- if (this->line >= 0) {
- fprintf(to, "%s:%d: %s\n", this->file.c_str(), this->line, this->error.c_str());
- } else {
- fprintf(to, "%s: %s\n", this->file.c_str(), this->error.c_str());
- }
-}
-
-// SourcePos
-// =============================================================================
-SourcePos::SourcePos(const string& f, int l)
- : file(f), line(l)
-{
-}
-
-SourcePos::SourcePos(const SourcePos& that)
- : file(that.file), line(that.line)
-{
-}
-
-SourcePos::SourcePos()
- : file("???", 0)
-{
-}
-
-SourcePos::~SourcePos()
-{
-}
-
-string
-SourcePos::ToString() const
-{
- char buf[1024];
- if (this->line >= 0) {
- snprintf(buf, sizeof(buf)-1, "%s:%d", this->file.c_str(), this->line);
- } else {
- snprintf(buf, sizeof(buf)-1, "%s:", this->file.c_str());
- }
- buf[sizeof(buf)-1] = '\0';
- return string(buf);
-}
-
-int
-SourcePos::Error(const char* fmt, ...) const
-{
- int retval=0;
- char buf[1024];
- va_list ap;
- va_start(ap, fmt);
- retval = vsnprintf(buf, sizeof(buf), fmt, ap);
- va_end(ap);
- char* p = buf + retval - 1;
- while (p > buf && *p == '\n') {
- *p = '\0';
- p--;
- }
- ErrorPos err(this->file, this->line, string(buf));
- if (g_errors.find(err) == g_errors.end()) {
- err.Print(stderr);
- g_errors.insert(err);
- }
- return retval;
-}
-
-bool
-SourcePos::HasErrors()
-{
- return g_errors.size() > 0;
-}
-
-void
-SourcePos::PrintErrors(FILE* to)
-{
- set<ErrorPos>::const_iterator it;
- for (it=g_errors.begin(); it!=g_errors.end(); it++) {
- it->Print(to);
- }
-}
-
-
-
-
diff --git a/tools/localize/SourcePos.h b/tools/localize/SourcePos.h
deleted file mode 100644
index 5027129..0000000
--- a/tools/localize/SourcePos.h
+++ /dev/null
@@ -1,28 +0,0 @@
-#ifndef SOURCEPOS_H
-#define SOURCEPOS_H
-
-#include <string>
-
-using namespace std;
-
-class SourcePos
-{
-public:
- string file;
- int line;
-
- SourcePos(const string& f, int l);
- SourcePos(const SourcePos& that);
- SourcePos();
- ~SourcePos();
-
- string ToString() const;
- int Error(const char* fmt, ...) const;
-
- static bool HasErrors();
- static void PrintErrors(FILE* to);
-};
-
-extern const SourcePos GENERATED_POS;
-
-#endif // SOURCEPOS_H
diff --git a/tools/localize/Values.cpp b/tools/localize/Values.cpp
deleted file mode 100644
index 8623b97..0000000
--- a/tools/localize/Values.cpp
+++ /dev/null
@@ -1,135 +0,0 @@
-#include "Values.h"
-#include <stdlib.h>
-#include <cstdio>
-
-
-// =====================================================================================
-StringResource::StringResource(const SourcePos& p, const string& f, const Configuration& c,
- const string& i, int ix, XMLNode* v, const int ve, const string& vs,
- const string& cmnt)
- :pos(p),
- file(f),
- config(c),
- id(i),
- index(ix),
- value(v),
- version(ve),
- versionString(vs),
- comment(cmnt)
-{
-}
-
-StringResource::StringResource()
- :pos(),
- file(),
- config(),
- id(),
- index(-1),
- value(NULL),
- version(),
- versionString(),
- comment()
-{
-}
-
-StringResource::StringResource(const StringResource& that)
- :pos(that.pos),
- file(that.file),
- config(that.config),
- id(that.id),
- index(that.index),
- value(that.value),
- version(that.version),
- versionString(that.versionString),
- comment(that.comment)
-{
-}
-
-int
-StringResource::Compare(const StringResource& that) const
-{
- if (file != that.file) {
- return file < that.file ? -1 : 1;
- }
- if (id != that.id) {
- return id < that.id ? -1 : 1;
- }
- if (index != that.index) {
- return index - that.index;
- }
- if (config != that.config) {
- return config < that.config ? -1 : 1;
- }
- if (version != that.version) {
- return version < that.version ? -1 : 1;
- }
- return 0;
-}
-
-string
-StringResource::TypedID() const
-{
- string result;
- if (index < 0) {
- result = "string:";
- } else {
- char n[20];
- sprintf(n, "%d:", index);
- result = "array:";
- result += n;
- }
- result += id;
- return result;
-}
-
-static void
-split(const string& raw, vector<string>*parts)
-{
- size_t index = 0;
- while (true) {
- size_t next = raw.find(':', index);
- if (next != raw.npos) {
- parts->push_back(string(raw, index, next-index));
- index = next + 1;
- } else {
- parts->push_back(string(raw, index));
- break;
- }
- }
-}
-
-bool
-StringResource::ParseTypedID(const string& raw, string* id, int* index)
-{
- vector<string> parts;
- split(raw, &parts);
-
- const size_t N = parts.size();
-
- for (size_t i=0; i<N; i++) {
- if (parts[i].length() == 0) {
- return false;
- }
- }
-
- if (N == 2 && parts[0] == "string") {
- *id = parts[1];
- *index = -1;
- return true;
- }
- else if (N == 3 && parts[0] == "array") {
- char* p;
- int n = (int)strtol(parts[1].c_str(), &p, 0);
- if (*p == '\0') {
- *id = parts[2];
- *index = n;
- return true;
- } else {
- return false;
- }
- }
- else {
- return false;
- }
-}
-
diff --git a/tools/localize/Values.h b/tools/localize/Values.h
deleted file mode 100644
index 0a60b6d..0000000
--- a/tools/localize/Values.h
+++ /dev/null
@@ -1,48 +0,0 @@
-#ifndef VALUES_H
-#define VALUES_H
-
-#include "Configuration.h"
-#include "XMLHandler.h"
-
-#include <string>
-
-using namespace std;
-
-enum {
- CURRENT_VERSION,
- OLD_VERSION
-};
-
-struct StringResource
-{
- StringResource();
- StringResource(const SourcePos& pos, const string& file, const Configuration& config,
- const string& id, int index, XMLNode* value,
- int version, const string& versionString, const string& comment = "");
- StringResource(const StringResource& that);
-
- // Compare two configurations
- int Compare(const StringResource& that) const;
-
- inline bool operator<(const StringResource& that) const { return Compare(that) < 0; }
- inline bool operator<=(const StringResource& that) const { return Compare(that) <= 0; }
- inline bool operator==(const StringResource& that) const { return Compare(that) == 0; }
- inline bool operator!=(const StringResource& that) const { return Compare(that) != 0; }
- inline bool operator>=(const StringResource& that) const { return Compare(that) >= 0; }
- inline bool operator>(const StringResource& that) const { return Compare(that) > 0; }
-
- string TypedID() const;
- static bool ParseTypedID(const string& typed, string* id, int* index);
-
- SourcePos pos;
- string file;
- Configuration config;
- string id;
- int index;
- XMLNode* value;
- int version;
- string versionString;
- string comment;
-};
-
-#endif // VALUES_H
diff --git a/tools/localize/ValuesFile.cpp b/tools/localize/ValuesFile.cpp
deleted file mode 100644
index bd6f494..0000000
--- a/tools/localize/ValuesFile.cpp
+++ /dev/null
@@ -1,266 +0,0 @@
-#include "ValuesFile.h"
-
-#include "XMLHandler.h"
-
-#include <algorithm>
-#include <fcntl.h>
-#include <expat.h>
-#include <unistd.h>
-#include <errno.h>
-
-using namespace std;
-
-const char* const ANDROID_XMLNS = "http://schemas.android.com/apk/res/android";
-const char* const XLIFF_XMLNS = "urn:oasis:names:tc:xliff:document:1.2";
-
-const char *const NS_MAP[] = {
- "android", ANDROID_XMLNS,
- "xliff", XLIFF_XMLNS,
- NULL, NULL
-};
-
-const XMLNamespaceMap ANDROID_NAMESPACES(NS_MAP);
-
-
-// =====================================================================================
-class ArrayHandler : public XMLHandler
-{
-public:
- ArrayHandler(ValuesFile* vf, int version, const string& versionString, const string& id);
-
- virtual int OnStartElement(const SourcePos& pos, const string& ns, const string& name,
- const vector<XMLAttribute>& attrs, XMLHandler** next);
- virtual int OnText(const SourcePos& pos, const string& text);
- virtual int OnComment(const SourcePos& pos, const string& text);
-
-private:
- ValuesFile* m_vf;
- int m_version;
- int m_index;
- string m_versionString;
- string m_id;
- string m_comment;
-};
-
-ArrayHandler::ArrayHandler(ValuesFile* vf, int version, const string& versionString,
- const string& id)
- :m_vf(vf),
- m_version(version),
- m_index(0),
- m_versionString(versionString),
- m_id(id)
-{
-}
-
-int
-ArrayHandler::OnStartElement(const SourcePos& pos, const string& ns, const string& name,
- const vector<XMLAttribute>& attrs, XMLHandler** next)
-{
- if (ns == "" && name == "item") {
- XMLNode* node = XMLNode::NewElement(pos, ns, name, attrs, XMLNode::EXACT);
- m_vf->AddString(StringResource(pos, pos.file, m_vf->GetConfiguration(),
- m_id, m_index, node, m_version, m_versionString,
- trim_string(m_comment)));
- *next = new NodeHandler(node, XMLNode::EXACT);
- m_index++;
- m_comment = "";
- return 0;
- } else {
- pos.Error("invalid <%s> element inside <array>\n", name.c_str());
- return 1;
- }
-}
-
-int
-ArrayHandler::OnText(const SourcePos& pos, const string& text)
-{
- return 0;
-}
-
-int
-ArrayHandler::OnComment(const SourcePos& pos, const string& text)
-{
- m_comment += text;
- return 0;
-}
-
-// =====================================================================================
-class ValuesHandler : public XMLHandler
-{
-public:
- ValuesHandler(ValuesFile* vf, int version, const string& versionString);
-
- virtual int OnStartElement(const SourcePos& pos, const string& ns, const string& name,
- const vector<XMLAttribute>& attrs, XMLHandler** next);
- virtual int OnText(const SourcePos& pos, const string& text);
- virtual int OnComment(const SourcePos& pos, const string& text);
-
-private:
- ValuesFile* m_vf;
- int m_version;
- string m_versionString;
- string m_comment;
-};
-
-ValuesHandler::ValuesHandler(ValuesFile* vf, int version, const string& versionString)
- :m_vf(vf),
- m_version(version),
- m_versionString(versionString)
-{
-}
-
-int
-ValuesHandler::OnStartElement(const SourcePos& pos, const string& ns, const string& name,
- const vector<XMLAttribute>& attrs, XMLHandler** next)
-{
- if (ns == "" && name == "string") {
- string id = XMLAttribute::Find(attrs, "", "name", "");
- XMLNode* node = XMLNode::NewElement(pos, ns, name, attrs, XMLNode::EXACT);
- m_vf->AddString(StringResource(pos, pos.file, m_vf->GetConfiguration(),
- id, -1, node, m_version, m_versionString,
- trim_string(m_comment)));
- *next = new NodeHandler(node, XMLNode::EXACT);
- }
- else if (ns == "" && name == "array") {
- string id = XMLAttribute::Find(attrs, "", "name", "");
- *next = new ArrayHandler(m_vf, m_version, m_versionString, id);
- }
- m_comment = "";
- return 0;
-}
-
-int
-ValuesHandler::OnText(const SourcePos& pos, const string& text)
-{
- return 0;
-}
-
-int
-ValuesHandler::OnComment(const SourcePos& pos, const string& text)
-{
- m_comment += text;
- return 0;
-}
-
-// =====================================================================================
-ValuesFile::ValuesFile(const Configuration& config)
- :m_config(config),
- m_strings(),
- m_arrays()
-{
-}
-
-ValuesFile::~ValuesFile()
-{
-}
-
-ValuesFile*
-ValuesFile::ParseFile(const string& filename, const Configuration& config,
- int version, const string& versionString)
-{
- ValuesFile* result = new ValuesFile(config);
-
- TopElementHandler top("", "resources", new ValuesHandler(result, version, versionString));
- XMLHandler::ParseFile(filename, &top);
-
- return result;
-}
-
-ValuesFile*
-ValuesFile::ParseString(const string& filename, const string& text, const Configuration& config,
- int version, const string& versionString)
-{
- ValuesFile* result = new ValuesFile(config);
-
- TopElementHandler top("", "resources", new ValuesHandler(result, version, versionString));
- XMLHandler::ParseString(filename, text, &top);
-
- return result;
-}
-
-const Configuration&
-ValuesFile::GetConfiguration() const
-{
- return m_config;
-}
-
-void
-ValuesFile::AddString(const StringResource& str)
-{
- if (str.index < 0) {
- m_strings.insert(str);
- } else {
- m_arrays[str.id].insert(str);
- }
-}
-
-set<StringResource>
-ValuesFile::GetStrings() const
-{
- set<StringResource> result = m_strings;
-
- for (map<string,set<StringResource> >::const_iterator it = m_arrays.begin();
- it != m_arrays.end(); it++) {
- result.insert(it->second.begin(), it->second.end());
- }
-
- return result;
-}
-
-XMLNode*
-ValuesFile::ToXMLNode() const
-{
- XMLNode* root;
-
- // <resources>
- {
- vector<XMLAttribute> attrs;
- ANDROID_NAMESPACES.AddToAttributes(&attrs);
- root = XMLNode::NewElement(GENERATED_POS, "", "resources", attrs, XMLNode::PRETTY);
- }
-
- // <array>
- for (map<string,set<StringResource> >::const_iterator it = m_arrays.begin();
- it != m_arrays.end(); it++) {
- vector<XMLAttribute> arrayAttrs;
- arrayAttrs.push_back(XMLAttribute("", "name", it->first));
- const set<StringResource>& items = it->second;
- XMLNode* arrayNode = XMLNode::NewElement(items.begin()->pos, "", "array", arrayAttrs,
- XMLNode::PRETTY);
- root->EditChildren().push_back(arrayNode);
-
- // <item>
- for (set<StringResource>::const_iterator item = items.begin();
- item != items.end(); item++) {
- XMLNode* itemNode = item->value->Clone();
- itemNode->SetName("", "item");
- itemNode->EditAttributes().clear();
- arrayNode->EditChildren().push_back(itemNode);
- }
- }
-
- // <string>
- for (set<StringResource>::const_iterator it=m_strings.begin(); it!=m_strings.end(); it++) {
- const StringResource& str = *it;
- vector<XMLAttribute> attrs;
- XMLNode* strNode = str.value->Clone();
- strNode->SetName("", "string");
- strNode->EditAttributes().clear();
- strNode->EditAttributes().push_back(XMLAttribute("", "name", str.id));
- root->EditChildren().push_back(strNode);
- }
-
- return root;
-}
-
-string
-ValuesFile::ToString() const
-{
- XMLNode* xml = ToXMLNode();
- string s = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
- s += xml->ToString(ANDROID_NAMESPACES);
- delete xml;
- s += '\n';
- return s;
-}
-
diff --git a/tools/localize/ValuesFile.h b/tools/localize/ValuesFile.h
deleted file mode 100644
index 752fd78..0000000
--- a/tools/localize/ValuesFile.h
+++ /dev/null
@@ -1,52 +0,0 @@
-#ifndef VALUES_FILE_H
-#define VALUES_FILE_H
-
-#include "SourcePos.h"
-#include "Configuration.h"
-#include "XMLHandler.h"
-#include "Values.h"
-
-#include <string>
-#include <set>
-
-using namespace std;
-
-extern const XMLNamespaceMap ANDROID_NAMESPACES;
-
-class ValuesFile
-{
-public:
- ValuesFile(const Configuration& config);
-
- static ValuesFile* ParseFile(const string& filename, const Configuration& config,
- int version, const string& versionString);
- static ValuesFile* ParseString(const string& filename, const string& text,
- const Configuration& config,
- int version, const string& versionString);
- ~ValuesFile();
-
- const Configuration& GetConfiguration() const;
-
- void AddString(const StringResource& str);
- set<StringResource> GetStrings() const;
-
- // exports this file as a n XMLNode, you own this object
- XMLNode* ToXMLNode() const;
-
- // writes the ValuesFile out to a string in the canonical format (i.e. writes the contents of
- // ToXMLNode()).
- string ToString() const;
-
-private:
- class ParseState;
- friend class ValuesFile::ParseState;
- friend class StringHandler;
-
- ValuesFile();
-
- Configuration m_config;
- set<StringResource> m_strings;
- map<string,set<StringResource> > m_arrays;
-};
-
-#endif // VALUES_FILE_H
diff --git a/tools/localize/ValuesFile_test.cpp b/tools/localize/ValuesFile_test.cpp
deleted file mode 100644
index 56d2ec2..0000000
--- a/tools/localize/ValuesFile_test.cpp
+++ /dev/null
@@ -1,54 +0,0 @@
-#include "ValuesFile.h"
-#include <stdio.h>
-
-int
-ValuesFile_test()
-{
- int err = 0;
- Configuration config;
- config.locale = "zz_ZZ";
- ValuesFile* vf = ValuesFile::ParseFile("testdata/values/strings.xml", config,
- OLD_VERSION, "1");
-
- const set<StringResource>& strings = vf->GetStrings();
- string canonical = vf->ToString();
-
- if (false) {
- printf("Strings (%zd)\n", strings.size());
- for (set<StringResource>::const_iterator it=strings.begin();
- it!=strings.end(); it++) {
- const StringResource& str = *it;
- printf("%s: '%s'[%d]='%s' (%s) <!-- %s -->\n", str.pos.ToString().c_str(),
- str.id.c_str(), str.index,
- str.value->ContentsToString(ANDROID_NAMESPACES).c_str(),
- str.config.ToString().c_str(), str.comment.c_str());
- }
-
- printf("XML:[[%s]]\n", canonical.c_str());
- }
-
- const char * const EXPECTED =
- "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
- "<resources xmlns:android=\"http://schemas.android.com/apk/res/android\"\n"
- " xmlns:xliff=\"urn:oasis:names:tc:xliff:document:1.2\">\n"
- " <array name=\"emailAddressTypes\">\n"
- " <item>Email</item>\n"
- " <item>Home</item>\n"
- " <item>Work</item>\n"
- " <item>Other\\u2026</item>\n"
- " </array>\n"
- " <string name=\"test1\">Discard</string>\n"
- " <string name=\"test2\">a<b>b<i>c</i></b>d</string>\n"
- " <string name=\"test3\">a<xliff:g a=\"b\" xliff:a=\"asdf\">bBb</xliff:g>C</string>\n"
- "</resources>\n";
-
- if (canonical != EXPECTED) {
- fprintf(stderr, "ValuesFile_test failed\n");
- fprintf(stderr, "canonical=[[%s]]\n", canonical.c_str());
- fprintf(stderr, "EXPECTED=[[%s]]\n", EXPECTED);
- err = 1;
- }
-
- delete vf;
- return err;
-}
diff --git a/tools/localize/XLIFFFile.cpp b/tools/localize/XLIFFFile.cpp
deleted file mode 100644
index 4e217d9..0000000
--- a/tools/localize/XLIFFFile.cpp
+++ /dev/null
@@ -1,610 +0,0 @@
-#include "XLIFFFile.h"
-
-#include <algorithm>
-#include <sys/time.h>
-#include <time.h>
-#include <cstdio>
-
-const char* const XLIFF_XMLNS = "urn:oasis:names:tc:xliff:document:1.2";
-
-const char *const NS_MAP[] = {
- "", XLIFF_XMLNS,
- "xml", XMLNS_XMLNS,
- NULL, NULL
-};
-
-const XMLNamespaceMap XLIFF_NAMESPACES(NS_MAP);
-
-int
-XLIFFFile::File::Compare(const XLIFFFile::File& that) const
-{
- if (filename != that.filename) {
- return filename < that.filename ? -1 : 1;
- }
- return 0;
-}
-
-// =====================================================================================
-XLIFFFile::XLIFFFile()
-{
-}
-
-XLIFFFile::~XLIFFFile()
-{
-}
-
-static XMLNode*
-get_unique_node(const XMLNode* parent, const string& ns, const string& name, bool required)
-{
- size_t count = parent->CountElementsByName(ns, name);
- if (count == 1) {
- return parent->GetElementByNameAt(ns, name, 0);
- } else {
- if (required) {
- SourcePos pos = count == 0
- ? parent->Position()
- : parent->GetElementByNameAt(XLIFF_XMLNS, name, 1)->Position();
- pos.Error("<%s> elements must contain exactly one <%s> element",
- parent->Name().c_str(), name.c_str());
- }
- return NULL;
- }
-}
-
-XLIFFFile*
-XLIFFFile::Parse(const string& filename)
-{
- XLIFFFile* result = new XLIFFFile();
-
- XMLNode* root = NodeHandler::ParseFile(filename, XMLNode::PRETTY);
- if (root == NULL) {
- return NULL;
- }
-
- // <file>
- vector<XMLNode*> files = root->GetElementsByName(XLIFF_XMLNS, "file");
- for (size_t i=0; i<files.size(); i++) {
- XMLNode* file = files[i];
-
- string datatype = file->GetAttribute("", "datatype", "");
- string originalFile = file->GetAttribute("", "original", "");
-
- Configuration sourceConfig;
- sourceConfig.locale = file->GetAttribute("", "source-language", "");
- result->m_sourceConfig = sourceConfig;
-
- Configuration targetConfig;
- targetConfig.locale = file->GetAttribute("", "target-language", "");
- result->m_targetConfig = targetConfig;
-
- result->m_currentVersion = file->GetAttribute("", "build-num", "");
- result->m_oldVersion = "old";
-
- // <body>
- XMLNode* body = get_unique_node(file, XLIFF_XMLNS, "body", true);
- if (body == NULL) continue;
-
- // <trans-unit>
- vector<XMLNode*> transUnits = body->GetElementsByName(XLIFF_XMLNS, "trans-unit");
- for (size_t j=0; j<transUnits.size(); j++) {
- XMLNode* transUnit = transUnits[j];
-
- string rawID = transUnit->GetAttribute("", "id", "");
- if (rawID == "") {
- transUnit->Position().Error("<trans-unit> tag requires an id");
- continue;
- }
- string id;
- int index;
-
- if (!StringResource::ParseTypedID(rawID, &id, &index)) {
- transUnit->Position().Error("<trans-unit> has invalid id '%s'\n", rawID.c_str());
- continue;
- }
-
- // <source>
- XMLNode* source = get_unique_node(transUnit, XLIFF_XMLNS, "source", false);
- if (source != NULL) {
- XMLNode* node = source->Clone();
- node->SetPrettyRecursive(XMLNode::EXACT);
- result->AddStringResource(StringResource(source->Position(), originalFile,
- sourceConfig, id, index, node, CURRENT_VERSION,
- result->m_currentVersion));
- }
-
- // <target>
- XMLNode* target = get_unique_node(transUnit, XLIFF_XMLNS, "target", false);
- if (target != NULL) {
- XMLNode* node = target->Clone();
- node->SetPrettyRecursive(XMLNode::EXACT);
- result->AddStringResource(StringResource(target->Position(), originalFile,
- targetConfig, id, index, node, CURRENT_VERSION,
- result->m_currentVersion));
- }
-
- // <alt-trans>
- XMLNode* altTrans = get_unique_node(transUnit, XLIFF_XMLNS, "alt-trans", false);
- if (altTrans != NULL) {
- // <source>
- XMLNode* altSource = get_unique_node(altTrans, XLIFF_XMLNS, "source", false);
- if (altSource != NULL) {
- XMLNode* node = altSource->Clone();
- node->SetPrettyRecursive(XMLNode::EXACT);
- result->AddStringResource(StringResource(altSource->Position(),
- originalFile, sourceConfig, id, index, node, OLD_VERSION,
- result->m_oldVersion));
- }
-
- // <target>
- XMLNode* altTarget = get_unique_node(altTrans, XLIFF_XMLNS, "target", false);
- if (altTarget != NULL) {
- XMLNode* node = altTarget->Clone();
- node->SetPrettyRecursive(XMLNode::EXACT);
- result->AddStringResource(StringResource(altTarget->Position(),
- originalFile, targetConfig, id, index, node, OLD_VERSION,
- result->m_oldVersion));
- }
- }
- }
- }
- delete root;
- return result;
-}
-
-XLIFFFile*
-XLIFFFile::Create(const Configuration& sourceConfig, const Configuration& targetConfig,
- const string& currentVersion)
-{
- XLIFFFile* result = new XLIFFFile();
- result->m_sourceConfig = sourceConfig;
- result->m_targetConfig = targetConfig;
- result->m_currentVersion = currentVersion;
- return result;
-}
-
-set<string>
-XLIFFFile::Files() const
-{
- set<string> result;
- for (vector<File>::const_iterator f = m_files.begin(); f != m_files.end(); f++) {
- result.insert(f->filename);
- }
- return result;
-}
-
-void
-XLIFFFile::AddStringResource(const StringResource& str)
-{
- string id = str.TypedID();
-
- File* f = NULL;
- const size_t I = m_files.size();
- for (size_t i=0; i<I; i++) {
- if (m_files[i].filename == str.file) {
- f = &m_files[i];
- break;
- }
- }
- if (f == NULL) {
- File file;
- file.filename = str.file;
- m_files.push_back(file);
- f = &m_files[I];
- }
-
- const size_t J = f->transUnits.size();
- TransUnit* g = NULL;
- for (size_t j=0; j<J; j++) {
- if (f->transUnits[j].id == id) {
- g = &f->transUnits[j];
- }
- }
- if (g == NULL) {
- TransUnit group;
- group.id = id;
- f->transUnits.push_back(group);
- g = &f->transUnits[J];
- }
-
- StringResource* res = find_string_res(*g, str);
- if (res == NULL) {
- return ;
- }
- if (res->id != "") {
- str.pos.Error("Duplicate string resource: %s", res->id.c_str());
- res->pos.Error("Previous definition here");
- return ;
- }
- *res = str;
-
- m_strings.insert(str);
-}
-
-void
-XLIFFFile::Filter(bool (*func)(const string&,const TransUnit&,void*), void* cookie)
-{
- const size_t I = m_files.size();
- for (size_t ix=0, i=I-1; ix<I; ix++, i--) {
- File& file = m_files[i];
-
- const size_t J = file.transUnits.size();
- for (size_t jx=0, j=J-1; jx<J; jx++, j--) {
- TransUnit& tu = file.transUnits[j];
-
- bool keep = func(file.filename, tu, cookie);
- if (!keep) {
- if (tu.source.id != "") {
- m_strings.erase(tu.source);
- }
- if (tu.target.id != "") {
- m_strings.erase(tu.target);
- }
- if (tu.altSource.id != "") {
- m_strings.erase(tu.altSource);
- }
- if (tu.altTarget.id != "") {
- m_strings.erase(tu.altTarget);
- }
- file.transUnits.erase(file.transUnits.begin()+j);
- }
- }
- if (file.transUnits.size() == 0) {
- m_files.erase(m_files.begin()+i);
- }
- }
-}
-
-void
-XLIFFFile::Map(void (*func)(const string&,TransUnit*,void*), void* cookie)
-{
- const size_t I = m_files.size();
- for (size_t i=0; i<I; i++) {
- File& file = m_files[i];
-
- const size_t J = file.transUnits.size();
- for (size_t j=0; j<J; j++) {
- func(file.filename, &(file.transUnits[j]), cookie);
- }
- }
-}
-
-TransUnit*
-XLIFFFile::EditTransUnit(const string& filename, const string& id)
-{
- const size_t I = m_files.size();
- for (size_t ix=0, i=I-1; ix<I; ix++, i--) {
- File& file = m_files[i];
- if (file.filename == filename) {
- const size_t J = file.transUnits.size();
- for (size_t jx=0, j=J-1; jx<J; jx++, j--) {
- TransUnit& tu = file.transUnits[j];
- if (tu.id == id) {
- return &tu;
- }
- }
- }
- }
- return NULL;
-}
-
-StringResource*
-XLIFFFile::find_string_res(TransUnit& g, const StringResource& str)
-{
- int index;
- if (str.version == CURRENT_VERSION) {
- index = 0;
- }
- else if (str.version == OLD_VERSION) {
- index = 2;
- }
- else {
- str.pos.Error("Internal Error %s:%d\n", __FILE__, __LINE__);
- return NULL;
- }
- if (str.config == m_sourceConfig) {
- // index += 0;
- }
- else if (str.config == m_targetConfig) {
- index += 1;
- }
- else {
- str.pos.Error("unknown config for string %s: %s", str.id.c_str(),
- str.config.ToString().c_str());
- return NULL;
- }
- switch (index) {
- case 0:
- return &g.source;
- case 1:
- return &g.target;
- case 2:
- return &g.altSource;
- case 3:
- return &g.altTarget;
- }
- str.pos.Error("Internal Error %s:%d\n", __FILE__, __LINE__);
- return NULL;
-}
-
-int
-convert_html_to_xliff(const XMLNode* original, const string& name, XMLNode* addTo, int* phID)
-{
- int err = 0;
- if (original->Type() == XMLNode::TEXT) {
- addTo->EditChildren().push_back(original->Clone());
- return 0;
- } else {
- string ctype;
- if (original->Namespace() == "") {
- if (original->Name() == "b") {
- ctype = "bold";
- }
- else if (original->Name() == "i") {
- ctype = "italic";
- }
- else if (original->Name() == "u") {
- ctype = "underline";
- }
- }
- if (ctype != "") {
- vector<XMLAttribute> attrs;
- attrs.push_back(XMLAttribute(XLIFF_XMLNS, "ctype", ctype));
- XMLNode* copy = XMLNode::NewElement(original->Position(), XLIFF_XMLNS, "g",
- attrs, XMLNode::EXACT);
-
- const vector<XMLNode*>& children = original->Children();
- size_t I = children.size();
- for (size_t i=0; i<I; i++) {
- err |= convert_html_to_xliff(children[i], name, copy, phID);
- }
- return err;
- }
- else {
- if (original->Namespace() == XLIFF_XMLNS) {
- addTo->EditChildren().push_back(original->Clone());
- return 0;
- } else {
- if (original->Namespace() == "") {
- // flatten out the tag into ph tags -- but only if there is no namespace
- // that's still unsupported because propagating the xmlns attribute is hard.
- vector<XMLAttribute> attrs;
- char idStr[30];
- (*phID)++;
- sprintf(idStr, "id-%d", *phID);
- attrs.push_back(XMLAttribute(XLIFF_XMLNS, "id", idStr));
-
- if (original->Children().size() == 0) {
- XMLNode* ph = XMLNode::NewElement(original->Position(), XLIFF_XMLNS,
- "ph", attrs, XMLNode::EXACT);
- ph->EditChildren().push_back(
- XMLNode::NewText(original->Position(),
- original->ToString(XLIFF_NAMESPACES),
- XMLNode::EXACT));
- addTo->EditChildren().push_back(ph);
- } else {
- XMLNode* begin = XMLNode::NewElement(original->Position(), XLIFF_XMLNS,
- "bpt", attrs, XMLNode::EXACT);
- begin->EditChildren().push_back(
- XMLNode::NewText(original->Position(),
- original->OpenTagToString(XLIFF_NAMESPACES, XMLNode::EXACT),
- XMLNode::EXACT));
- XMLNode* end = XMLNode::NewElement(original->Position(), XLIFF_XMLNS,
- "ept", attrs, XMLNode::EXACT);
- string endText = "</";
- endText += original->Name();
- endText += ">";
- end->EditChildren().push_back(XMLNode::NewText(original->Position(),
- endText, XMLNode::EXACT));
-
- addTo->EditChildren().push_back(begin);
-
- const vector<XMLNode*>& children = original->Children();
- size_t I = children.size();
- for (size_t i=0; i<I; i++) {
- err |= convert_html_to_xliff(children[i], name, addTo, phID);
- }
-
- addTo->EditChildren().push_back(end);
- }
- return err;
- } else {
- original->Position().Error("invalid <%s> element in <%s> tag\n",
- original->Name().c_str(), name.c_str());
- return 1;
- }
- }
- }
- }
-}
-
-XMLNode*
-create_string_node(const StringResource& str, const string& name)
-{
- vector<XMLAttribute> attrs;
- attrs.push_back(XMLAttribute(XMLNS_XMLNS, "space", "preserve"));
- XMLNode* node = XMLNode::NewElement(str.pos, XLIFF_XMLNS, name, attrs, XMLNode::EXACT);
-
- const vector<XMLNode*>& children = str.value->Children();
- size_t I = children.size();
- int err = 0;
- for (size_t i=0; i<I; i++) {
- int phID = 0;
- err |= convert_html_to_xliff(children[i], name, node, &phID);
- }
-
- if (err != 0) {
- delete node;
- }
- return node;
-}
-
-static bool
-compare_id(const TransUnit& lhs, const TransUnit& rhs)
-{
- string lid, rid;
- int lindex, rindex;
- StringResource::ParseTypedID(lhs.id, &lid, &lindex);
- StringResource::ParseTypedID(rhs.id, &rid, &rindex);
- if (lid < rid) return true;
- if (lid == rid && lindex < rindex) return true;
- return false;
-}
-
-XMLNode*
-XLIFFFile::ToXMLNode() const
-{
- XMLNode* root;
- size_t N;
-
- // <xliff>
- {
- vector<XMLAttribute> attrs;
- XLIFF_NAMESPACES.AddToAttributes(&attrs);
- attrs.push_back(XMLAttribute(XLIFF_XMLNS, "version", "1.2"));
- root = XMLNode::NewElement(GENERATED_POS, XLIFF_XMLNS, "xliff", attrs, XMLNode::PRETTY);
- }
-
- vector<TransUnit> groups;
-
- // <file>
- vector<File> files = m_files;
- sort(files.begin(), files.end());
- const size_t I = files.size();
- for (size_t i=0; i<I; i++) {
- const File& file = files[i];
-
- vector<XMLAttribute> fileAttrs;
- fileAttrs.push_back(XMLAttribute(XLIFF_XMLNS, "datatype", "x-android-res"));
- fileAttrs.push_back(XMLAttribute(XLIFF_XMLNS, "original", file.filename));
-
- struct timeval tv;
- struct timezone tz;
- gettimeofday(&tv, &tz);
- fileAttrs.push_back(XMLAttribute(XLIFF_XMLNS, "date", trim_string(ctime(&tv.tv_sec))));
-
- fileAttrs.push_back(XMLAttribute(XLIFF_XMLNS, "source-language", m_sourceConfig.locale));
- fileAttrs.push_back(XMLAttribute(XLIFF_XMLNS, "target-language", m_targetConfig.locale));
- fileAttrs.push_back(XMLAttribute(XLIFF_XMLNS, "build-num", m_currentVersion));
-
- XMLNode* fileNode = XMLNode::NewElement(GENERATED_POS, XLIFF_XMLNS, "file", fileAttrs,
- XMLNode::PRETTY);
- root->EditChildren().push_back(fileNode);
-
- // <body>
- XMLNode* bodyNode = XMLNode::NewElement(GENERATED_POS, XLIFF_XMLNS, "body",
- vector<XMLAttribute>(), XMLNode::PRETTY);
- fileNode->EditChildren().push_back(bodyNode);
-
- // <trans-unit>
- vector<TransUnit> transUnits = file.transUnits;
- sort(transUnits.begin(), transUnits.end(), compare_id);
- const size_t J = transUnits.size();
- for (size_t j=0; j<J; j++) {
- const TransUnit& transUnit = transUnits[j];
-
- vector<XMLAttribute> tuAttrs;
-
- // strings start with string:
- tuAttrs.push_back(XMLAttribute(XLIFF_XMLNS, "id", transUnit.id));
- XMLNode* transUnitNode = XMLNode::NewElement(GENERATED_POS, XLIFF_XMLNS, "trans-unit",
- tuAttrs, XMLNode::PRETTY);
- bodyNode->EditChildren().push_back(transUnitNode);
-
- // <extradata>
- if (transUnit.source.comment != "") {
- vector<XMLAttribute> extradataAttrs;
- XMLNode* extraNode = XMLNode::NewElement(GENERATED_POS, XLIFF_XMLNS, "extradata",
- extradataAttrs, XMLNode::EXACT);
- transUnitNode->EditChildren().push_back(extraNode);
- extraNode->EditChildren().push_back(
- XMLNode::NewText(GENERATED_POS, transUnit.source.comment,
- XMLNode::PRETTY));
- }
-
- // <source>
- if (transUnit.source.id != "") {
- transUnitNode->EditChildren().push_back(
- create_string_node(transUnit.source, "source"));
- }
-
- // <target>
- if (transUnit.target.id != "") {
- transUnitNode->EditChildren().push_back(
- create_string_node(transUnit.target, "target"));
- }
-
- // <alt-trans>
- if (transUnit.altSource.id != "" || transUnit.altTarget.id != ""
- || transUnit.rejectComment != "") {
- vector<XMLAttribute> altTransAttrs;
- XMLNode* altTransNode = XMLNode::NewElement(GENERATED_POS, XLIFF_XMLNS, "alt-trans",
- altTransAttrs, XMLNode::PRETTY);
- transUnitNode->EditChildren().push_back(altTransNode);
-
- // <extradata>
- if (transUnit.rejectComment != "") {
- vector<XMLAttribute> extradataAttrs;
- XMLNode* extraNode = XMLNode::NewElement(GENERATED_POS, XLIFF_XMLNS,
- "extradata", extradataAttrs,
- XMLNode::EXACT);
- altTransNode->EditChildren().push_back(extraNode);
- extraNode->EditChildren().push_back(
- XMLNode::NewText(GENERATED_POS, transUnit.rejectComment,
- XMLNode::PRETTY));
- }
-
- // <source>
- if (transUnit.altSource.id != "") {
- altTransNode->EditChildren().push_back(
- create_string_node(transUnit.altSource, "source"));
- }
-
- // <target>
- if (transUnit.altTarget.id != "") {
- altTransNode->EditChildren().push_back(
- create_string_node(transUnit.altTarget, "target"));
- }
- }
-
- }
- }
-
- return root;
-}
-
-
-string
-XLIFFFile::ToString() const
-{
- XMLNode* xml = ToXMLNode();
- string s = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
- s += xml->ToString(XLIFF_NAMESPACES);
- delete xml;
- s += '\n';
- return s;
-}
-
-Stats
-XLIFFFile::GetStats(const string& config) const
-{
- Stats stat;
- stat.config = config;
- stat.files = m_files.size();
- stat.toBeTranslated = 0;
- stat.noComments = 0;
-
- for (vector<File>::const_iterator file=m_files.begin(); file!=m_files.end(); file++) {
- stat.toBeTranslated += file->transUnits.size();
-
- for (vector<TransUnit>::const_iterator tu=file->transUnits.begin();
- tu!=file->transUnits.end(); tu++) {
- if (tu->source.comment == "") {
- stat.noComments++;
- }
- }
- }
-
- stat.totalStrings = stat.toBeTranslated;
-
- return stat;
-}
diff --git a/tools/localize/XLIFFFile.h b/tools/localize/XLIFFFile.h
deleted file mode 100644
index a93d479..0000000
--- a/tools/localize/XLIFFFile.h
+++ /dev/null
@@ -1,98 +0,0 @@
-#ifndef XLIFF_FILE_H
-#define XLIFF_FILE_H
-
-#include "Values.h"
-
-#include "Configuration.h"
-
-#include <set>
-
-using namespace std;
-
-extern const XMLNamespaceMap XLIFF_NAMESPACES;
-
-extern const char*const XLIFF_XMLNS;
-
-struct Stats
-{
- string config;
- size_t files;
- size_t toBeTranslated;
- size_t noComments;
- size_t totalStrings;
-};
-
-struct TransUnit {
- string id;
- StringResource source;
- StringResource target;
- StringResource altSource;
- StringResource altTarget;
- string rejectComment;
-};
-
-class XLIFFFile
-{
-public:
- static XLIFFFile* Parse(const string& filename);
- static XLIFFFile* Create(const Configuration& sourceConfig, const Configuration& targetConfig,
- const string& currentVersion);
- ~XLIFFFile();
-
- inline const Configuration& SourceConfig() const { return m_sourceConfig; }
- inline const Configuration& TargetConfig() const { return m_targetConfig; }
-
- inline const string& CurrentVersion() const { return m_currentVersion; }
- inline const string& OldVersion() const { return m_oldVersion; }
-
- set<string> Files() const;
-
- void AddStringResource(const StringResource& res);
- inline set<StringResource> const& GetStringResources() const { return m_strings; }
- bool FindStringResource(const string& filename, int version, bool source);
-
- void Filter(bool (*func)(const string&,const TransUnit&,void*), void* cookie);
- void Map(void (*func)(const string&,TransUnit*,void*), void* cookie);
-
- TransUnit* EditTransUnit(const string& file, const string& id);
-
- // exports this file as a n XMLNode, you own this object
- XMLNode* ToXMLNode() const;
-
- // writes the ValuesFile out to a string in the canonical format (i.e. writes the contents of
- // ToXMLNode()).
- string ToString() const;
-
- Stats GetStats(const string& config) const;
-
-private:
- struct File {
- int Compare(const File& that) const;
-
- inline bool operator<(const File& that) const { return Compare(that) < 0; }
- inline bool operator<=(const File& that) const { return Compare(that) <= 0; }
- inline bool operator==(const File& that) const { return Compare(that) == 0; }
- inline bool operator!=(const File& that) const { return Compare(that) != 0; }
- inline bool operator>=(const File& that) const { return Compare(that) >= 0; }
- inline bool operator>(const File& that) const { return Compare(that) > 0; }
-
- string filename;
- vector<TransUnit> transUnits;
- };
-
- XLIFFFile();
- StringResource* find_string_res(TransUnit& g, const StringResource& str);
-
- Configuration m_sourceConfig;
- Configuration m_targetConfig;
-
- string m_currentVersion;
- string m_oldVersion;
-
- set<StringResource> m_strings;
- vector<File> m_files;
-};
-
-int convert_html_to_xliff(const XMLNode* original, const string& name, XMLNode* addTo, int* phID);
-
-#endif // XLIFF_FILE_H
diff --git a/tools/localize/XLIFFFile_test.cpp b/tools/localize/XLIFFFile_test.cpp
deleted file mode 100644
index 52ed4c3..0000000
--- a/tools/localize/XLIFFFile_test.cpp
+++ /dev/null
@@ -1,115 +0,0 @@
-#include "XLIFFFile.h"
-#include <stdio.h>
-#include "ValuesFile.h"
-
-XMLNode* create_string_node(const StringResource& str, const string& name);
-
-static int
-Parse_test()
-{
- XLIFFFile* xf = XLIFFFile::Parse("testdata/xliff1.xliff");
- if (xf == NULL) {
- return 1;
- }
-
- set<StringResource> const& strings = xf->GetStringResources();
-
- if (false) {
- for (set<StringResource>::iterator it=strings.begin(); it!=strings.end(); it++) {
- const StringResource& str = *it;
- printf("STRING!!! id=%s index=%d value='%s' pos=%s file=%s version=%d(%s)\n",
- str.id.c_str(), str.index,
- str.value->ContentsToString(ANDROID_NAMESPACES).c_str(),
- str.pos.ToString().c_str(), str.file.c_str(), str.version,
- str.versionString.c_str());
- }
- printf("XML:[[%s]]\n", xf->ToString().c_str());
- }
-
- delete xf;
- return 0;
-}
-
-static XMLNode*
-add_html_tag(XMLNode* addTo, const string& tag)
-{
- vector<XMLAttribute> attrs;
- XMLNode* node = XMLNode::NewElement(GENERATED_POS, "", tag, attrs, XMLNode::EXACT);
- addTo->EditChildren().push_back(node);
- return node;
-}
-
-static int
-create_string_node_test()
-{
- int err = 0;
- StringResource res;
- vector<XMLAttribute> attrs;
- res.value = XMLNode::NewElement(GENERATED_POS, "", "something", attrs, XMLNode::EXACT);
- res.value->EditChildren().push_back(XMLNode::NewText(GENERATED_POS, " begin ", XMLNode::EXACT));
-
- XMLNode* child;
-
- child = add_html_tag(res.value, "b");
- child->EditChildren().push_back(XMLNode::NewText(GENERATED_POS, "b", XMLNode::EXACT));
-
- child = add_html_tag(res.value, "i");
- child->EditChildren().push_back(XMLNode::NewText(GENERATED_POS, "i", XMLNode::EXACT));
-
- child = add_html_tag(child, "b");
- child->EditChildren().push_back(XMLNode::NewText(GENERATED_POS, "b", XMLNode::EXACT));
-
- child = add_html_tag(res.value, "u");
- child->EditChildren().push_back(XMLNode::NewText(GENERATED_POS, "u", XMLNode::EXACT));
-
-
- res.value->EditChildren().push_back(XMLNode::NewText(GENERATED_POS, " end ", XMLNode::EXACT));
-
- XMLNode* xliff = create_string_node(res, "blah");
-
- string oldString = res.value->ToString(XLIFF_NAMESPACES);
- string newString = xliff->ToString(XLIFF_NAMESPACES);
-
- if (false) {
- printf("OLD=\"%s\"\n", oldString.c_str());
- printf("NEW=\"%s\"\n", newString.c_str());
- }
-
- const char* const EXPECTED_OLD
- = "<something> begin <b>b</b><i>i<b>b</b></i><u>u</u> end </something>";
- if (oldString != EXPECTED_OLD) {
- fprintf(stderr, "oldString mismatch:\n");
- fprintf(stderr, " expected='%s'\n", EXPECTED_OLD);
- fprintf(stderr, " actual='%s'\n", oldString.c_str());
- err |= 1;
- }
-
- const char* const EXPECTED_NEW
- = "<blah xml:space=\"preserve\"> begin <g ctype=\"bold\">b</g>"
- "<g ctype=\"italic\">i<g ctype=\"bold\">b</g></g><g ctype=\"underline\">u</g>"
- " end </blah>";
- if (newString != EXPECTED_NEW) {
- fprintf(stderr, "newString mismatch:\n");
- fprintf(stderr, " expected='%s'\n", EXPECTED_NEW);
- fprintf(stderr, " actual='%s'\n", newString.c_str());
- err |= 1;
- }
-
- if (err != 0) {
- fprintf(stderr, "create_string_node_test failed\n");
- }
- return err;
-}
-
-int
-XLIFFFile_test()
-{
- bool all = true;
- int err = 0;
-
- if (all) err |= Parse_test();
- if (all) err |= create_string_node_test();
-
- return err;
-}
-
diff --git a/tools/localize/XMLHandler.cpp b/tools/localize/XMLHandler.cpp
deleted file mode 100644
index 3fab211..0000000
--- a/tools/localize/XMLHandler.cpp
+++ /dev/null
@@ -1,793 +0,0 @@
-#include "XMLHandler.h"
-
-#include <algorithm>
-#include <expat.h>
-#include <stdio.h>
-#include <string.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <errno.h>
-
-#define NS_SEPARATOR 1
-#define MORE_INDENT " "
-
-static string
-xml_text_escape(const string& s)
-{
- string result;
- const size_t N = s.length();
- for (size_t i=0; i<N; i++) {
- char c = s[i];
- switch (c) {
- case '<':
- result += "<";
- break;
- case '>':
- result += ">";
- break;
- case '&':
- result += "&";
- break;
- default:
- result += c;
- break;
- }
- }
- return result;
-}
-
-static string
-xml_attr_escape(const string& s)
-{
- string result;
- const size_t N = s.length();
- for (size_t i=0; i<N; i++) {
- char c = s[i];
- switch (c) {
- case '\"':
- result += """;
- break;
- default:
- result += c;
- break;
- }
- }
- return result;
-}
-
-XMLNamespaceMap::XMLNamespaceMap()
-{
-}
-
-XMLNamespaceMap::XMLNamespaceMap(char const*const* nspaces)
-
-{
- while (*nspaces) {
- m_map[nspaces[1]] = nspaces[0];
- nspaces += 2;
- }
-}
-
-string
-XMLNamespaceMap::Get(const string& ns) const
-{
- if (ns == "xml") {
- return ns;
- }
- map<string,string>::const_iterator it = m_map.find(ns);
- if (it == m_map.end()) {
- return "";
- } else {
- return it->second;
- }
-}
-
-string
-XMLNamespaceMap::GetPrefix(const string& ns) const
-{
- if (ns == "") {
- return "";
- }
- map<string,string>::const_iterator it = m_map.find(ns);
- if (it != m_map.end()) {
- if (it->second == "") {
- return "";
- } else {
- return it->second + ":";
- }
- } else {
- return ":"; // invalid
- }
-}
-
-void
-XMLNamespaceMap::AddToAttributes(vector<XMLAttribute>* attrs) const
-{
- map<string,string>::const_iterator it;
- for (it=m_map.begin(); it!=m_map.end(); it++) {
- if (it->second == "xml") {
- continue;
- }
- XMLAttribute attr;
- if (it->second == "") {
- attr.name = "xmlns";
- } else {
- attr.name = "xmlns:";
- attr.name += it->second;
- }
- attr.value = it->first;
- attrs->push_back(attr);
- }
-}
-
-XMLAttribute::XMLAttribute()
-{
-}
-
-XMLAttribute::XMLAttribute(const XMLAttribute& that)
- :ns(that.ns),
- name(that.name),
- value(that.value)
-{
-}
-
-XMLAttribute::XMLAttribute(string n, string na, string v)
- :ns(n),
- name(na),
- value(v)
-{
-}
-
-XMLAttribute::~XMLAttribute()
-{
-}
-
-int
-XMLAttribute::Compare(const XMLAttribute& that) const
-{
- if (ns != that.ns) {
- return ns < that.ns ? -1 : 1;
- }
- if (name != that.name) {
- return name < that.name ? -1 : 1;
- }
- return 0;
-}
-
-string
-XMLAttribute::Find(const vector<XMLAttribute>& list, const string& ns, const string& name,
- const string& def)
-{
- const size_t N = list.size();
- for (size_t i=0; i<N; i++) {
- const XMLAttribute& attr = list[i];
- if (attr.ns == ns && attr.name == name) {
- return attr.value;
- }
- }
- return def;
-}
-
-struct xml_handler_data {
- vector<XMLHandler*> stack;
- XML_Parser parser;
- vector<vector<XMLAttribute>*> attributes;
- string filename;
-};
-
-XMLNode::XMLNode()
-{
-}
-
-XMLNode::~XMLNode()
-{
-// for_each(m_children.begin(), m_children.end(), delete_object<XMLNode>);
-}
-
-XMLNode*
-XMLNode::Clone() const
-{
- switch (m_type) {
- case ELEMENT: {
- XMLNode* e = XMLNode::NewElement(m_pos, m_ns, m_name, m_attrs, m_pretty);
- const size_t N = m_children.size();
- for (size_t i=0; i<N; i++) {
- e->m_children.push_back(m_children[i]->Clone());
- }
- return e;
- }
- case TEXT: {
- return XMLNode::NewText(m_pos, m_text, m_pretty);
- }
- default:
- return NULL;
- }
-}
-
-XMLNode*
-XMLNode::NewElement(const SourcePos& pos, const string& ns, const string& name,
- const vector<XMLAttribute>& attrs, int pretty)
-{
- XMLNode* node = new XMLNode();
- node->m_type = ELEMENT;
- node->m_pretty = pretty;
- node->m_pos = pos;
- node->m_ns = ns;
- node->m_name = name;
- node->m_attrs = attrs;
- return node;
-}
-
-XMLNode*
-XMLNode::NewText(const SourcePos& pos, const string& text, int pretty)
-{
- XMLNode* node = new XMLNode();
- node->m_type = TEXT;
- node->m_pretty = pretty;
- node->m_pos = pos;
- node->m_text = text;
- return node;
-}
-
-void
-XMLNode::SetPrettyRecursive(int value)
-{
- m_pretty = value;
- const size_t N = m_children.size();
- for (size_t i=0; i<N; i++) {
- m_children[i]->SetPrettyRecursive(value);
- }
-}
-
-string
-XMLNode::ContentsToString(const XMLNamespaceMap& nspaces) const
-{
- return contents_to_string(nspaces, "");
-}
-
-string
-XMLNode::ToString(const XMLNamespaceMap& nspaces) const
-{
- return to_string(nspaces, "");
-}
-
-string
-XMLNode::OpenTagToString(const XMLNamespaceMap& nspaces, int pretty) const
-{
- return open_tag_to_string(nspaces, "", pretty);
-}
-
-string
-XMLNode::contents_to_string(const XMLNamespaceMap& nspaces, const string& indent) const
-{
- string result;
- const size_t N = m_children.size();
- for (size_t i=0; i<N; i++) {
- const XMLNode* child = m_children[i];
- switch (child->Type()) {
- case ELEMENT:
- if (m_pretty == PRETTY) {
- result += '\n';
- result += indent;
- }
- case TEXT:
- result += child->to_string(nspaces, indent);
- break;
- }
- }
- return result;
-}
-
-string
-trim_string(const string& str)
-{
- const char* p = str.c_str();
- while (*p && isspace(*p)) {
- p++;
- }
- const char* q = str.c_str() + str.length() - 1;
- while (q > p && isspace(*q)) {
- q--;
- }
- q++;
- return string(p, q-p);
-}
-
-string
-XMLNode::open_tag_to_string(const XMLNamespaceMap& nspaces, const string& indent, int pretty) const
-{
- if (m_type != ELEMENT) {
- return "";
- }
- string result = "<";
- result += nspaces.GetPrefix(m_ns);
- result += m_name;
-
- vector<XMLAttribute> attrs = m_attrs;
-
- sort(attrs.begin(), attrs.end());
-
- const size_t N = attrs.size();
- for (size_t i=0; i<N; i++) {
- const XMLAttribute& attr = attrs[i];
- if (i == 0 || m_pretty == EXACT || pretty == EXACT) {
- result += ' ';
- }
- else {
- result += "\n";
- result += indent;
- result += MORE_INDENT;
- result += MORE_INDENT;
- }
- result += nspaces.GetPrefix(attr.ns);
- result += attr.name;
- result += "=\"";
- result += xml_attr_escape(attr.value);
- result += '\"';
- }
-
- if (m_children.size() > 0) {
- result += '>';
- } else {
- result += " />";
- }
- return result;
-}
-
-string
-XMLNode::to_string(const XMLNamespaceMap& nspaces, const string& indent) const
-{
- switch (m_type)
- {
- case TEXT: {
- if (m_pretty == EXACT) {
- return xml_text_escape(m_text);
- } else {
- return xml_text_escape(trim_string(m_text));
- }
- }
- case ELEMENT: {
- string result = open_tag_to_string(nspaces, indent, PRETTY);
-
- if (m_children.size() > 0) {
- result += contents_to_string(nspaces, indent + MORE_INDENT);
-
- if (m_pretty == PRETTY && m_children.size() > 0) {
- result += '\n';
- result += indent;
- }
-
- result += "</";
- result += nspaces.GetPrefix(m_ns);
- result += m_name;
- result += '>';
- }
- return result;
- }
- default:
- return "";
- }
-}
-
-string
-XMLNode::CollapseTextContents() const
-{
- if (m_type == TEXT) {
- return m_text;
- }
- else if (m_type == ELEMENT) {
- string result;
-
- const size_t N=m_children.size();
- for (size_t i=0; i<N; i++) {
- result += m_children[i]->CollapseTextContents();
- }
-
- return result;
- }
- else {
- return "";
- }
-}
-
-vector<XMLNode*>
-XMLNode::GetElementsByName(const string& ns, const string& name) const
-{
- vector<XMLNode*> result;
- const size_t N=m_children.size();
- for (size_t i=0; i<N; i++) {
- XMLNode* child = m_children[i];
- if (child->m_type == ELEMENT && child->m_ns == ns && child->m_name == name) {
- result.push_back(child);
- }
- }
- return result;
-}
-
-XMLNode*
-XMLNode::GetElementByNameAt(const string& ns, const string& name, size_t index) const
-{
- vector<XMLNode*> result;
- const size_t N=m_children.size();
- for (size_t i=0; i<N; i++) {
- XMLNode* child = m_children[i];
- if (child->m_type == ELEMENT && child->m_ns == ns && child->m_name == name) {
- if (index == 0) {
- return child;
- } else {
- index--;
- }
- }
- }
- return NULL;
-}
-
-size_t
-XMLNode::CountElementsByName(const string& ns, const string& name) const
-{
- size_t result = 0;
- const size_t N=m_children.size();
- for (size_t i=0; i<N; i++) {
- XMLNode* child = m_children[i];
- if (child->m_type == ELEMENT && child->m_ns == ns && child->m_name == name) {
- result++;
- }
- }
- return result;
-}
-
-string
-XMLNode::GetAttribute(const string& ns, const string& name, const string& def) const
-{
- return XMLAttribute::Find(m_attrs, ns, name, def);
-}
-
-static void
-parse_namespace(const char* data, string* ns, string* name)
-{
- const char* p = strchr(data, NS_SEPARATOR);
- if (p != NULL) {
- ns->assign(data, p-data);
- name->assign(p+1);
- } else {
- ns->assign("");
- name->assign(data);
- }
-}
-
-static void
-convert_attrs(const char** in, vector<XMLAttribute>* out)
-{
- while (*in) {
- XMLAttribute attr;
- parse_namespace(in[0], &attr.ns, &attr.name);
- attr.value = in[1];
- out->push_back(attr);
- in += 2;
- }
-}
-
-static bool
-list_contains(const vector<XMLHandler*>& stack, XMLHandler* handler)
-{
- const size_t N = stack.size();
- for (size_t i=0; i<N; i++) {
- if (stack[i] == handler) {
- return true;
- }
- }
- return false;
-}
-
-static void XMLCALL
-start_element_handler(void *userData, const char *name, const char **attrs)
-{
- xml_handler_data* data = (xml_handler_data*)userData;
-
- XMLHandler* handler = data->stack[data->stack.size()-1];
-
- SourcePos pos(data->filename, (int)XML_GetCurrentLineNumber(data->parser));
- string nsString;
- string nameString;
- XMLHandler* next = handler;
- vector<XMLAttribute> attributes;
-
- parse_namespace(name, &nsString, &nameString);
- convert_attrs(attrs, &attributes);
-
- handler->OnStartElement(pos, nsString, nameString, attributes, &next);
-
- if (next == NULL) {
- next = handler;
- }
-
- if (next != handler) {
- next->elementPos = pos;
- next->elementNamespace = nsString;
- next->elementName = nameString;
- next->elementAttributes = attributes;
- }
-
- data->stack.push_back(next);
-}
-
-static void XMLCALL
-end_element_handler(void *userData, const char *name)
-{
- xml_handler_data* data = (xml_handler_data*)userData;
-
- XMLHandler* handler = data->stack[data->stack.size()-1];
- data->stack.pop_back();
-
- SourcePos pos(data->filename, (int)XML_GetCurrentLineNumber(data->parser));
-
- if (!list_contains(data->stack, handler)) {
- handler->OnDone(pos);
- if (data->stack.size() > 1) {
- // not top one
- delete handler;
- }
- }
-
- handler = data->stack[data->stack.size()-1];
-
- string nsString;
- string nameString;
-
- parse_namespace(name, &nsString, &nameString);
-
- handler->OnEndElement(pos, nsString, nameString);
-}
-
-static void XMLCALL
-text_handler(void *userData, const XML_Char *s, int len)
-{
- xml_handler_data* data = (xml_handler_data*)userData;
- XMLHandler* handler = data->stack[data->stack.size()-1];
- SourcePos pos(data->filename, (int)XML_GetCurrentLineNumber(data->parser));
- handler->OnText(pos, string(s, len));
-}
-
-static void XMLCALL
-comment_handler(void *userData, const char *comment)
-{
- xml_handler_data* data = (xml_handler_data*)userData;
- XMLHandler* handler = data->stack[data->stack.size()-1];
- SourcePos pos(data->filename, (int)XML_GetCurrentLineNumber(data->parser));
- handler->OnComment(pos, string(comment));
-}
-
-bool
-XMLHandler::ParseFile(const string& filename, XMLHandler* handler)
-{
- char buf[16384];
- int fd = open(filename.c_str(), O_RDONLY);
- if (fd < 0) {
- SourcePos(filename, -1).Error("Unable to open file for read: %s", strerror(errno));
- return false;
- }
-
- XML_Parser parser = XML_ParserCreateNS(NULL, NS_SEPARATOR);
- xml_handler_data state;
- state.stack.push_back(handler);
- state.parser = parser;
- state.filename = filename;
-
- XML_SetUserData(parser, &state);
- XML_SetElementHandler(parser, start_element_handler, end_element_handler);
- XML_SetCharacterDataHandler(parser, text_handler);
- XML_SetCommentHandler(parser, comment_handler);
-
- ssize_t len;
- bool done;
- do {
- len = read(fd, buf, sizeof(buf));
- done = len < (ssize_t)sizeof(buf);
- if (len < 0) {
- SourcePos(filename, -1).Error("Error reading file: %s\n", strerror(errno));
- close(fd);
- return false;
- }
- if (XML_Parse(parser, buf, len, done) == XML_STATUS_ERROR) {
- SourcePos(filename, (int)XML_GetCurrentLineNumber(parser)).Error(
- "Error parsing XML: %s\n", XML_ErrorString(XML_GetErrorCode(parser)));
- close(fd);
- return false;
- }
- } while (!done);
-
- XML_ParserFree(parser);
-
- close(fd);
-
- return true;
-}
-
-bool
-XMLHandler::ParseString(const string& filename, const string& text, XMLHandler* handler)
-{
- XML_Parser parser = XML_ParserCreateNS(NULL, NS_SEPARATOR);
- xml_handler_data state;
- state.stack.push_back(handler);
- state.parser = parser;
- state.filename = filename;
-
- XML_SetUserData(parser, &state);
- XML_SetElementHandler(parser, start_element_handler, end_element_handler);
- XML_SetCharacterDataHandler(parser, text_handler);
- XML_SetCommentHandler(parser, comment_handler);
-
- if (XML_Parse(parser, text.c_str(), text.size(), true) == XML_STATUS_ERROR) {
- SourcePos(filename, (int)XML_GetCurrentLineNumber(parser)).Error(
- "Error parsing XML: %s\n", XML_ErrorString(XML_GetErrorCode(parser)));
- return false;
- }
-
- XML_ParserFree(parser);
-
- return true;
-}
-
-XMLHandler::XMLHandler()
-{
-}
-
-XMLHandler::~XMLHandler()
-{
-}
-
-int
-XMLHandler::OnStartElement(const SourcePos& pos, const string& ns, const string& name,
- const vector<XMLAttribute>& attrs, XMLHandler** next)
-{
- return 0;
-}
-
-int
-XMLHandler::OnEndElement(const SourcePos& pos, const string& ns, const string& name)
-{
- return 0;
-}
-
-int
-XMLHandler::OnText(const SourcePos& pos, const string& text)
-{
- return 0;
-}
-
-int
-XMLHandler::OnComment(const SourcePos& pos, const string& text)
-{
- return 0;
-}
-
-int
-XMLHandler::OnDone(const SourcePos& pos)
-{
- return 0;
-}
-
-TopElementHandler::TopElementHandler(const string& ns, const string& name, XMLHandler* next)
- :m_ns(ns),
- m_name(name),
- m_next(next)
-{
-}
-
-int
-TopElementHandler::OnStartElement(const SourcePos& pos, const string& ns, const string& name,
- const vector<XMLAttribute>& attrs, XMLHandler** next)
-{
- *next = m_next;
- return 0;
-}
-
-int
-TopElementHandler::OnEndElement(const SourcePos& pos, const string& ns, const string& name)
-{
- return 0;
-}
-
-int
-TopElementHandler::OnText(const SourcePos& pos, const string& text)
-{
- return 0;
-}
-
-int
-TopElementHandler::OnDone(const SourcePos& pos)
-{
- return 0;
-}
-
-
-NodeHandler::NodeHandler(XMLNode* root, int pretty)
- :m_root(root),
- m_pretty(pretty)
-{
- if (root != NULL) {
- m_nodes.push_back(root);
- }
-}
-
-NodeHandler::~NodeHandler()
-{
-}
-
-int
-NodeHandler::OnStartElement(const SourcePos& pos, const string& ns, const string& name,
- const vector<XMLAttribute>& attrs, XMLHandler** next)
-{
- int pretty;
- if (XMLAttribute::Find(attrs, XMLNS_XMLNS, "space", "") == "preserve") {
- pretty = XMLNode::EXACT;
- } else {
- if (m_root == NULL) {
- pretty = m_pretty;
- } else {
- pretty = m_nodes[m_nodes.size()-1]->Pretty();
- }
- }
- XMLNode* n = XMLNode::NewElement(pos, ns, name, attrs, pretty);
- if (m_root == NULL) {
- m_root = n;
- } else {
- m_nodes[m_nodes.size()-1]->EditChildren().push_back(n);
- }
- m_nodes.push_back(n);
- return 0;
-}
-
-int
-NodeHandler::OnEndElement(const SourcePos& pos, const string& ns, const string& name)
-{
- m_nodes.pop_back();
- return 0;
-}
-
-int
-NodeHandler::OnText(const SourcePos& pos, const string& text)
-{
- if (m_root == NULL) {
- return 1;
- }
- XMLNode* n = XMLNode::NewText(pos, text, m_nodes[m_nodes.size()-1]->Pretty());
- m_nodes[m_nodes.size()-1]->EditChildren().push_back(n);
- return 0;
-}
-
-int
-NodeHandler::OnComment(const SourcePos& pos, const string& text)
-{
- return 0;
-}
-
-int
-NodeHandler::OnDone(const SourcePos& pos)
-{
- return 0;
-}
-
-XMLNode*
-NodeHandler::ParseFile(const string& filename, int pretty)
-{
- NodeHandler handler(NULL, pretty);
- if (!XMLHandler::ParseFile(filename, &handler)) {
- fprintf(stderr, "error parsing file: %s\n", filename.c_str());
- return NULL;
- }
- return handler.Root();
-}
-
-XMLNode*
-NodeHandler::ParseString(const string& filename, const string& text, int pretty)
-{
- NodeHandler handler(NULL, pretty);
- if (!XMLHandler::ParseString(filename, text, &handler)) {
- fprintf(stderr, "error parsing file: %s\n", filename.c_str());
- return NULL;
- }
- return handler.Root();
-}
-
-
diff --git a/tools/localize/XMLHandler.h b/tools/localize/XMLHandler.h
deleted file mode 100644
index 324385f..0000000
--- a/tools/localize/XMLHandler.h
+++ /dev/null
@@ -1,198 +0,0 @@
-#ifndef XML_H
-#define XML_H
-
-#include "SourcePos.h"
-
-#include <algorithm>
-#include <string>
-#include <vector>
-#include <map>
-
-#define XMLNS_XMLNS "http://www.w3.org/XML/1998/namespace"
-
-using namespace std;
-
-string trim_string(const string& str);
-
-struct XMLAttribute
-{
- string ns;
- string name;
- string value;
-
- XMLAttribute();
- XMLAttribute(const XMLAttribute& that);
- XMLAttribute(string ns, string name, string value);
- ~XMLAttribute();
-
- int Compare(const XMLAttribute& that) const;
-
- inline bool operator<(const XMLAttribute& that) const { return Compare(that) < 0; }
- inline bool operator<=(const XMLAttribute& that) const { return Compare(that) <= 0; }
- inline bool operator==(const XMLAttribute& that) const { return Compare(that) == 0; }
- inline bool operator!=(const XMLAttribute& that) const { return Compare(that) != 0; }
- inline bool operator>=(const XMLAttribute& that) const { return Compare(that) >= 0; }
- inline bool operator>(const XMLAttribute& that) const { return Compare(that) > 0; }
-
- static string Find(const vector<XMLAttribute>& list,
- const string& ns, const string& name, const string& def);
-};
-
-class XMLNamespaceMap
-{
-public:
- XMLNamespaceMap();
- XMLNamespaceMap(char const*const* nspaces);
- string Get(const string& ns) const;
- string GetPrefix(const string& ns) const;
- void AddToAttributes(vector<XMLAttribute>* attrs) const;
-private:
- map<string,string> m_map;
-};
-
-struct XMLNode
-{
-public:
- enum {
- EXACT = 0,
- PRETTY = 1
- };
-
- enum {
- ELEMENT = 0,
- TEXT = 1
- };
-
- static XMLNode* NewElement(const SourcePos& pos, const string& ns, const string& name,
- const vector<XMLAttribute>& attrs, int pretty);
- static XMLNode* NewText(const SourcePos& pos, const string& text, int pretty);
-
- ~XMLNode();
-
- // a deep copy
- XMLNode* Clone() const;
-
- inline int Type() const { return m_type; }
- inline int Pretty() const { return m_pretty; }
- void SetPrettyRecursive(int value);
- string ContentsToString(const XMLNamespaceMap& nspaces) const;
- string ToString(const XMLNamespaceMap& nspaces) const;
- string OpenTagToString(const XMLNamespaceMap& nspaces, int pretty) const;
-
- string CollapseTextContents() const;
-
- inline const SourcePos& Position() const { return m_pos; }
-
- // element
- inline string Namespace() const { return m_ns; }
- inline string Name() const { return m_name; }
- inline void SetName(const string& ns, const string& n) { m_ns = ns; m_name = n; }
- inline const vector<XMLAttribute>& Attributes() const { return m_attrs; }
- inline vector<XMLAttribute>& EditAttributes() { return m_attrs; }
- inline const vector<XMLNode*>& Children() const { return m_children; }
- inline vector<XMLNode*>& EditChildren() { return m_children; }
- vector<XMLNode*> GetElementsByName(const string& ns, const string& name) const;
- XMLNode* GetElementByNameAt(const string& ns, const string& name, size_t index) const;
- size_t CountElementsByName(const string& ns, const string& name) const;
- string GetAttribute(const string& ns, const string& name, const string& def) const;
-
- // text
- inline string Text() const { return m_text; }
-
-private:
- XMLNode();
- XMLNode(const XMLNode&);
-
- string contents_to_string(const XMLNamespaceMap& nspaces, const string& indent) const;
- string to_string(const XMLNamespaceMap& nspaces, const string& indent) const;
- string open_tag_to_string(const XMLNamespaceMap& nspaces, const string& indent,
- int pretty) const;
-
- int m_type;
- int m_pretty;
- SourcePos m_pos;
-
- // element
- string m_ns;
- string m_name;
- vector<XMLAttribute> m_attrs;
- vector<XMLNode*> m_children;
-
- // text
- string m_text;
-};
-
-class XMLHandler
-{
-public:
- // information about the element that started us
- SourcePos elementPos;
- string elementNamespace;
- string elementName;
- vector<XMLAttribute> elementAttributes;
-
- XMLHandler();
- virtual ~XMLHandler();
-
- XMLHandler* parent;
-
- virtual int OnStartElement(const SourcePos& pos, const string& ns, const string& name,
- const vector<XMLAttribute>& attrs, XMLHandler** next);
- virtual int OnEndElement(const SourcePos& pos, const string& ns, const string& name);
- virtual int OnText(const SourcePos& pos, const string& text);
- virtual int OnComment(const SourcePos& pos, const string& text);
- virtual int OnDone(const SourcePos& pos);
-
- static bool ParseFile(const string& filename, XMLHandler* handler);
- static bool ParseString(const string& filename, const string& text, XMLHandler* handler);
-};
-
-class TopElementHandler : public XMLHandler
-{
-public:
- TopElementHandler(const string& ns, const string& name, XMLHandler* next);
-
- virtual int OnStartElement(const SourcePos& pos, const string& ns, const string& name,
- const vector<XMLAttribute>& attrs, XMLHandler** next);
- virtual int OnEndElement(const SourcePos& pos, const string& ns, const string& name);
- virtual int OnText(const SourcePos& pos, const string& text);
- virtual int OnDone(const SourcePos& endPos);
-
-private:
- string m_ns;
- string m_name;
- XMLHandler* m_next;
-};
-
-class NodeHandler : public XMLHandler
-{
-public:
- // after it's done, you own everything created and added to root
- NodeHandler(XMLNode* root, int pretty);
- ~NodeHandler();
-
- virtual int OnStartElement(const SourcePos& pos, const string& ns, const string& name,
- const vector<XMLAttribute>& attrs, XMLHandler** next);
- virtual int OnEndElement(const SourcePos& pos, const string& ns, const string& name);
- virtual int OnText(const SourcePos& pos, const string& text);
- virtual int OnComment(const SourcePos& pos, const string& text);
- virtual int OnDone(const SourcePos& endPos);
-
- inline XMLNode* Root() const { return m_root; }
-
- static XMLNode* ParseFile(const string& filename, int pretty);
- static XMLNode* ParseString(const string& filename, const string& text, int pretty);
-
-private:
- XMLNode* m_root;
- int m_pretty;
- vector<XMLNode*> m_nodes;
-};
-
-template <class T>
-static void delete_object(T* obj)
-{
- delete obj;
-}
-
-#endif // XML_H
diff --git a/tools/localize/XMLHandler_test.cpp b/tools/localize/XMLHandler_test.cpp
deleted file mode 100644
index 1c81c0c..0000000
--- a/tools/localize/XMLHandler_test.cpp
+++ /dev/null
@@ -1,133 +0,0 @@
-#include "XMLHandler.h"
-#include <stdio.h>
-#include <unistd.h>
-#include <fcntl.h>
-
-const char *const NS_MAP[] = {
- "xml", XMLNS_XMLNS,
- NULL, NULL
-};
-
-const XMLNamespaceMap NO_NAMESPACES(NS_MAP);
-
-char const*const EXPECTED_EXACT =
- "<ASDF>\n"
- " <a id=\"system\" old-cl=\"1\" new-cl=\"43019\">\n"
- " <app dir=\"apps/common\" />\n"
- " </a>\n"
- " <a id=\"samples\" old-cl=\"1\" new-cl=\"43019\">asdf\n"
- " <app dir=\"samples/NotePad\" />\n"
- " <app dir=\"samples/LunarLander\" />\n"
- " <something>a<b>,</b>b </something>\n"
- " <exact xml:space=\"preserve\">a<b>,</b>b </exact>\n"
- " </a>\n"
- "</ASDF>\n";
-
-char const*const EXPECTED_PRETTY =
- "<ASDF>\n"
- " <a id=\"system\"\n"
- " old-cl=\"1\"\n"
- " new-cl=\"43019\">\n"
- " <app dir=\"apps/common\" />\n"
- " </a>\n"
- " <a id=\"samples\"\n"
- " old-cl=\"1\"\n"
- " new-cl=\"43019\">asdf\n"
- " <app dir=\"samples/NotePad\" />\n"
- " <app dir=\"samples/LunarLander\" />\n"
- " <something>a\n"
- " <b>,\n"
- " </b>b \n"
- " </something>\n"
- " <exact xml:space=\"preserve\">a<b>,</b>b </exact>\n"
- " </a>\n"
- "</ASDF>\n";
-
-static string
-read_file(const string& filename)
-{
- char buf[1024];
- int fd = open(filename.c_str(), O_RDONLY);
- if (fd < 0) {
- return "";
- }
- string result;
- while (true) {
- ssize_t len = read(fd, buf, sizeof(buf)-1);
- buf[len] = '\0';
- if (len <= 0) {
- break;
- }
- result.append(buf, len);
- }
- close(fd);
- return result;
-}
-
-static int
-ParseFile_EXACT_test()
-{
- XMLNode* root = NodeHandler::ParseFile("testdata/xml.xml", XMLNode::EXACT);
- if (root == NULL) {
- return 1;
- }
- string result = root->ToString(NO_NAMESPACES);
- delete root;
- //printf("[[%s]]\n", result.c_str());
- return result == EXPECTED_EXACT;
-}
-
-static int
-ParseFile_PRETTY_test()
-{
- XMLNode* root = NodeHandler::ParseFile("testdata/xml.xml", XMLNode::PRETTY);
- if (root == NULL) {
- return 1;
- }
- string result = root->ToString(NO_NAMESPACES);
- delete root;
- //printf("[[%s]]\n", result.c_str());
- return result == EXPECTED_PRETTY;
-}
-
-static int
-ParseString_EXACT_test()
-{
- string text = read_file("testdata/xml.xml");
- XMLNode* root = NodeHandler::ParseString("testdata/xml.xml", text, XMLNode::EXACT);
- if (root == NULL) {
- return 1;
- }
- string result = root->ToString(NO_NAMESPACES);
- delete root;
- //printf("[[%s]]\n", result.c_str());
- return result == EXPECTED_EXACT;
-}
-
-static int
-ParseString_PRETTY_test()
-{
- string text = read_file("testdata/xml.xml");
- XMLNode* root = NodeHandler::ParseString("testdata/xml.xml", text, XMLNode::PRETTY);
- if (root == NULL) {
- return 1;
- }
- string result = root->ToString(NO_NAMESPACES);
- delete root;
- //printf("[[%s]]\n", result.c_str());
- return result == EXPECTED_PRETTY;
-}
-
-int
-XMLHandler_test()
-{
- int err = 0;
- bool all = true;
-
- if (all) err |= ParseFile_EXACT_test();
- if (all) err |= ParseFile_PRETTY_test();
- if (all) err |= ParseString_EXACT_test();
- if (all) err |= ParseString_PRETTY_test();
-
- return err;
-}
diff --git a/tools/localize/XMLNode.h b/tools/localize/XMLNode.h
deleted file mode 100644
index bfb9f55..0000000
--- a/tools/localize/XMLNode.h
+++ /dev/null
@@ -1,19 +0,0 @@
-#ifndef XMLNODE_H
-#define XMLNODE_H
-
-#include <string>
-
-using namespace std;
-
-struct XMLAttribute
-{
- string ns;
- string name;
- string value;
-
- static string Find(const vector<XMLAttribute>& list,
- const string& ns, const string& name, const string& def);
-};
-
-
-#endif // XMLNODE_H
diff --git a/tools/localize/file_utils.cpp b/tools/localize/file_utils.cpp
deleted file mode 100644
index 775ce2f..0000000
--- a/tools/localize/file_utils.cpp
+++ /dev/null
@@ -1,181 +0,0 @@
-#include <string.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include "file_utils.h"
-#include "Perforce.h"
-#include <utils/String8.h>
-#include <sys/fcntl.h>
-#include <sys/stat.h>
-#include <errno.h>
-#include <string.h>
-#include <stdlib.h>
-#include <cstdio>
-#include "log.h"
-
-using namespace android;
-using namespace std;
-
-static string
-parent_dir(const string& path)
-{
- return string(String8(path.c_str()).getPathDir().string());
-}
-
-static int
-mkdirs(const char* last)
-{
- String8 dest;
- const char* s = last-1;
- int err;
- do {
- s++;
- if (s > last && (*s == '.' || *s == 0)) {
- String8 part(last, s-last);
- dest.appendPath(part);
-#ifdef HAVE_MS_C_RUNTIME
- err = _mkdir(dest.string());
-#else
- err = mkdir(dest.string(), S_IRUSR|S_IWUSR|S_IXUSR|S_IRGRP|S_IXGRP);
-#endif
- if (err != 0) {
- return err;
- }
- last = s+1;
- }
- } while (*s);
- return 0;
-}
-
-string
-translated_file_name(const string& file, const string& locale)
-{
- const char* str = file.c_str();
- const char* p = str + file.length();
- const char* rest = NULL;
- const char* values = p;
-
- while (p > str) {
- p--;
- if (*p == '/') {
- rest = values;
- values = p;
- if (0 == strncmp("values", values+1, rest-values-1)) {
- break;
- }
- }
- }
- values++;
-
- string result(str, values-str);
- result.append(values, rest-values);
-
- string language, region;
- if (locale == "") {
- language = "";
- region = "";
- }
- else if (!split_locale(locale, &language, ®ion)) {
- return "";
- }
-
- if (language != "") {
- result += '-';
- result += language;
- }
- if (region != "") {
- result += "-r";
- result += region;
- }
-
- result += rest;
-
- return result;
-}
-
-ValuesFile*
-get_values_file(const string& filename, const Configuration& configuration,
- int version, const string& versionString, bool printOnFailure)
-{
- int err;
- string text;
-
- log_printf("get_values_file filename=%s\n", filename.c_str());
- err = Perforce::GetFile(filename, versionString, &text, printOnFailure);
- if (err != 0 || text == "") {
- return NULL;
- }
-
- ValuesFile* result = ValuesFile::ParseString(filename, text, configuration, version,
- versionString);
- if (result == NULL) {
- fprintf(stderr, "unable to parse file: %s\n", filename.c_str());
- exit(1);
- }
- return result;
-}
-
-ValuesFile*
-get_local_values_file(const string& filename, const Configuration& configuration,
- int version, const string& versionString, bool printOnFailure)
-{
- int err;
- string text;
- char buf[2049];
- int fd;
- ssize_t amt;
-
- fd = open(filename.c_str(), O_RDONLY);
- if (fd == -1) {
- fprintf(stderr, "unable to open file: %s\n", filename.c_str());
- return NULL;
- }
-
- while ((amt = read(fd, buf, sizeof(buf)-1)) > 0) {
- text.append(buf, amt);
- }
-
- close(fd);
-
- if (text == "") {
- return NULL;
- }
-
- ValuesFile* result = ValuesFile::ParseString(filename, text, configuration, version,
- versionString);
- if (result == NULL) {
- fprintf(stderr, "unable to parse file: %s\n", filename.c_str());
- exit(1);
- }
- return result;
-}
-
-void
-print_file_status(size_t j, size_t J, const string& message)
-{
- printf("\r%s file %zd of %zd...", message.c_str(), j, J);
- fflush(stdout);
-}
-
-int
-write_to_file(const string& filename, const string& text)
-{
- mkdirs(parent_dir(filename).c_str());
- int fd = open(filename.c_str(), O_RDWR | O_CREAT | O_TRUNC, 0666);
- if (fd < 0) {
- fprintf(stderr, "unable to open file for write (%s): %s\n", strerror(errno),
- filename.c_str());
- return -1;
- }
-
- ssize_t amt = write(fd, text.c_str(), text.length());
-
- close(fd);
-
- if (amt < 0) {
- return amt;
- }
- return amt == (ssize_t)text.length() ? 0 : -1;
-}
-
-
diff --git a/tools/localize/file_utils.h b/tools/localize/file_utils.h
deleted file mode 100644
index 7706587..0000000
--- a/tools/localize/file_utils.h
+++ /dev/null
@@ -1,22 +0,0 @@
-#ifndef FILE_UTILS_H
-#define FILE_UTILS_H
-
-#include "ValuesFile.h"
-#include "Configuration.h"
-#include <string>
-#include <cstdio>
-
-using namespace std;
-
-string translated_file_name(const string& file, const string& locale);
-
-ValuesFile* get_values_file(const string& filename, const Configuration& configuration,
- int version, const string& versionString, bool printOnFailure);
-ValuesFile* get_local_values_file(const string& filename, const Configuration& configuration,
- int version, const string& versionString, bool printOnFailure);
-
-void print_file_status(size_t j, size_t J, const string& message = "Reading");
-int write_to_file(const string& filename, const string& text);
-
-
-#endif // FILE_UTILS_H
diff --git a/tools/localize/localize.cpp b/tools/localize/localize.cpp
deleted file mode 100644
index 68c03b6..0000000
--- a/tools/localize/localize.cpp
+++ /dev/null
@@ -1,768 +0,0 @@
-#include "SourcePos.h"
-#include "ValuesFile.h"
-#include "XLIFFFile.h"
-#include "Perforce.h"
-#include "merge_res_and_xliff.h"
-#include "localize.h"
-#include "file_utils.h"
-#include "res_check.h"
-#include "xmb.h"
-
-#include <host/pseudolocalize.h>
-
-#include <stdlib.h>
-#include <stdarg.h>
-#include <sstream>
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-
-using namespace std;
-
-FILE* g_logFile = NULL;
-
-int test();
-
-int
-read_settings(const string& filename, map<string,Settings>* result, const string& rootDir)
-{
- XMLNode* root = NodeHandler::ParseFile(filename, XMLNode::PRETTY);
- if (root == NULL) {
- SourcePos(filename, -1).Error("Error reading file.");
- return 1;
- }
-
- // <configuration>
- vector<XMLNode*> configNodes = root->GetElementsByName("", "configuration");
- const size_t I = configNodes.size();
- for (size_t i=0; i<I; i++) {
- const XMLNode* configNode = configNodes[i];
-
- Settings settings;
- settings.id = configNode->GetAttribute("", "id", "");
- if (settings.id == "") {
- configNode->Position().Error("<configuration> needs an id attribute.");
- delete root;
- return 1;
- }
-
- settings.oldVersion = configNode->GetAttribute("", "old-cl", "");
-
- settings.currentVersion = configNode->GetAttribute("", "new-cl", "");
- if (settings.currentVersion == "") {
- configNode->Position().Error("<configuration> needs a new-cl attribute.");
- delete root;
- return 1;
- }
-
- // <app>
- vector<XMLNode*> appNodes = configNode->GetElementsByName("", "app");
-
- const size_t J = appNodes.size();
- for (size_t j=0; j<J; j++) {
- const XMLNode* appNode = appNodes[j];
-
- string dir = appNode->GetAttribute("", "dir", "");
- if (dir == "") {
- appNode->Position().Error("<app> needs a dir attribute.");
- delete root;
- return 1;
- }
-
- settings.apps.push_back(dir);
- }
-
- // <reject>
- vector<XMLNode*> rejectNodes = configNode->GetElementsByName("", "reject");
-
- const size_t K = rejectNodes.size();
- for (size_t k=0; k<K; k++) {
- const XMLNode* rejectNode = rejectNodes[k];
-
- Reject reject;
-
- reject.file = rejectNode->GetAttribute("", "file", "");
- if (reject.file == "") {
- rejectNode->Position().Error("<reject> needs a file attribute.");
- delete root;
- return 1;
- }
- string f = reject.file;
- reject.file = rootDir;
- reject.file += '/';
- reject.file += f;
-
- reject.name = rejectNode->GetAttribute("", "name", "");
- if (reject.name == "") {
- rejectNode->Position().Error("<reject> needs a name attribute.");
- delete root;
- return 1;
- }
-
- reject.comment = trim_string(rejectNode->CollapseTextContents());
-
- settings.reject.push_back(reject);
- }
-
- (*result)[settings.id] = settings;
- }
-
- delete root;
- return 0;
-}
-
-
-static void
-ValuesFile_to_XLIFFFile(const ValuesFile* values, XLIFFFile* xliff, const string& englishFilename)
-{
- const set<StringResource>& strings = values->GetStrings();
- for (set<StringResource>::const_iterator it=strings.begin(); it!=strings.end(); it++) {
- StringResource res = *it;
- res.file = englishFilename;
- xliff->AddStringResource(res);
- }
-}
-
-static bool
-contains_reject(const Settings& settings, const string& file, const TransUnit& tu)
-{
- const string name = tu.id;
- const vector<Reject>& reject = settings.reject;
- const size_t I = reject.size();
- for (size_t i=0; i<I; i++) {
- const Reject& r = reject[i];
- if (r.file == file && r.name == name) {
- return true;
- }
- }
- return false;
-}
-
-/**
- * If it's been rejected, then we keep whatever info we have.
- *
- * Implements this truth table:
- *
- * S AT AS Keep
- * -----------------------
- * 0 0 0 0 (this case can't happen)
- * 0 0 1 0 (it was there, never translated, and removed)
- * 0 1 0 0 (somehow it got translated, but it was removed)
- * 0 1 1 0 (it was removed after having been translated)
- *
- * 1 0 0 1 (it was just added)
- * 1 0 1 1 (it was added, has been changed, but it never got translated)
- * 1 1 0 1 (somehow it got translated, but we don't know based on what)
- * 1 1 1 0/1 (it's in both. 0 if S=AS b/c there's no need to retranslate if they're
- * the same. 1 if S!=AS because S changed, so it should be retranslated)
- *
- * The first four are cases where, whatever happened in the past, the string isn't there
- * now, so it shouldn't be in the XLIFF file.
- *
- * For cases 4 and 5, the string has never been translated, so get it translated.
- *
- * For case 6, it's unclear where the translated version came from, so we're conservative
- * and send it back for them to have another shot at.
- *
- * For case 7, we have some data. We have two choices. We could rely on the translator's
- * translation memory or tools to notice that the strings haven't changed, and populate the
- * <target> field themselves. Or if the string hasn't changed since last time, we can just
- * not even tell them about it. As the project nears the end, it will be convenient to see
- * the xliff files reducing in size, so we pick the latter. Obviously, if the string has
- * changed, then we need to get it retranslated.
- */
-bool
-keep_this_trans_unit(const string& file, const TransUnit& unit, void* cookie)
-{
- const Settings* settings = reinterpret_cast<const Settings*>(cookie);
-
- if (contains_reject(*settings, file, unit)) {
- return true;
- }
-
- if (unit.source.id == "") {
- return false;
- }
- if (unit.altTarget.id == "" || unit.altSource.id == "") {
- return true;
- }
- return unit.source.value->ContentsToString(XLIFF_NAMESPACES)
- != unit.altSource.value->ContentsToString(XLIFF_NAMESPACES);
-}
-
-int
-validate_config(const string& settingsFile, const map<string,Settings>& settings,
- const string& config)
-{
- if (settings.find(config) == settings.end()) {
- SourcePos(settingsFile, -1).Error("settings file does not contain setting: %s\n",
- config.c_str());
- return 1;
- }
- return 0;
-}
-
-int
-validate_configs(const string& settingsFile, const map<string,Settings>& settings,
- const vector<string>& configs)
-{
- int err = 0;
- for (size_t i=0; i<configs.size(); i++) {
- string config = configs[i];
- err |= validate_config(settingsFile, settings, config);
- }
- return err;
-}
-
-int
-select_files(vector<string> *resFiles, const string& config,
- const map<string,Settings>& settings, const string& rootDir)
-{
- int err;
- vector<vector<string> > allResFiles;
- vector<string> configs;
- configs.push_back(config);
- err = select_files(&allResFiles, configs, settings, rootDir);
- if (err == 0) {
- *resFiles = allResFiles[0];
- }
- return err;
-}
-
-int
-select_files(vector<vector<string> > *allResFiles, const vector<string>& configs,
- const map<string,Settings>& settings, const string& rootDir)
-{
- int err;
- printf("Selecting files...");
- fflush(stdout);
-
- for (size_t i=0; i<configs.size(); i++) {
- const string& config = configs[i];
- const Settings& setting = settings.find(config)->second;
-
- vector<string> resFiles;
- err = Perforce::GetResourceFileNames(setting.currentVersion, rootDir,
- setting.apps, &resFiles, true);
- if (err != 0) {
- fprintf(stderr, "error with perforce. bailing\n");
- return err;
- }
-
- allResFiles->push_back(resFiles);
- }
- return 0;
-}
-
-static int
-do_export(const string& settingsFile, const string& rootDir, const string& outDir,
- const string& targetLocale, const vector<string>& configs)
-{
- bool success = true;
- int err;
-
- if (false) {
- printf("settingsFile=%s\n", settingsFile.c_str());
- printf("rootDir=%s\n", rootDir.c_str());
- printf("outDir=%s\n", outDir.c_str());
- for (size_t i=0; i<configs.size(); i++) {
- printf("config[%zd]=%s\n", i, configs[i].c_str());
- }
- }
-
- map<string,Settings> settings;
- err = read_settings(settingsFile, &settings, rootDir);
- if (err != 0) {
- return err;
- }
-
- err = validate_configs(settingsFile, settings, configs);
- if (err != 0) {
- return err;
- }
-
- vector<vector<string> > allResFiles;
- err = select_files(&allResFiles, configs, settings, rootDir);
- if (err != 0) {
- return err;
- }
-
- size_t totalFileCount = 0;
- for (size_t i=0; i<allResFiles.size(); i++) {
- totalFileCount += allResFiles[i].size();
- }
- totalFileCount *= 3; // we try all 3 versions of the file
-
- size_t fileProgress = 0;
- vector<Stats> stats;
- vector<pair<string,XLIFFFile*> > xliffs;
-
- for (size_t i=0; i<configs.size(); i++) {
- const string& config = configs[i];
- const Settings& setting = settings[config];
-
- if (false) {
- fprintf(stderr, "Configuration: %s (%zd of %zd)\n", config.c_str(), i+1,
- configs.size());
- fprintf(stderr, " Old CL: %s\n", setting.oldVersion.c_str());
- fprintf(stderr, " Current CL: %s\n", setting.currentVersion.c_str());
- }
-
- Configuration english;
- english.locale = "en_US";
- Configuration translated;
- translated.locale = targetLocale;
- XLIFFFile* xliff = XLIFFFile::Create(english, translated, setting.currentVersion);
-
- const vector<string>& resFiles = allResFiles[i];
- const size_t J = resFiles.size();
- for (size_t j=0; j<J; j++) {
- string resFile = resFiles[j];
-
- // parse the files into a ValuesFile
- // pull out the strings and add them to the XLIFFFile
-
- // current file
- print_file_status(++fileProgress, totalFileCount);
- ValuesFile* currentFile = get_values_file(resFile, english, CURRENT_VERSION,
- setting.currentVersion, true);
- if (currentFile != NULL) {
- ValuesFile_to_XLIFFFile(currentFile, xliff, resFile);
- //printf("currentFile=[%s]\n", currentFile->ToString().c_str());
- } else {
- fprintf(stderr, "error reading file %s@%s\n", resFile.c_str(),
- setting.currentVersion.c_str());
- success = false;
- }
-
- // old file
- print_file_status(++fileProgress, totalFileCount);
- ValuesFile* oldFile = get_values_file(resFile, english, OLD_VERSION,
- setting.oldVersion, false);
- if (oldFile != NULL) {
- ValuesFile_to_XLIFFFile(oldFile, xliff, resFile);
- //printf("oldFile=[%s]\n", oldFile->ToString().c_str());
- }
-
- // translated version
- // (get the head of the tree for the most recent translation, but it's considered
- // the old one because the "current" one hasn't been made yet, and this goes into
- // the <alt-trans> tag if necessary
- print_file_status(++fileProgress, totalFileCount);
- string transFilename = translated_file_name(resFile, targetLocale);
- ValuesFile* transFile = get_values_file(transFilename, translated, OLD_VERSION,
- setting.currentVersion, false);
- if (transFile != NULL) {
- ValuesFile_to_XLIFFFile(transFile, xliff, resFile);
- }
-
- delete currentFile;
- delete oldFile;
- delete transFile;
- }
-
- Stats beforeFilterStats = xliff->GetStats(config);
-
- // run through the XLIFFFile and strip out TransUnits that have identical
- // old and current source values and are not in the reject list, or just
- // old values and no source values
- xliff->Filter(keep_this_trans_unit, (void*)&setting);
-
- Stats afterFilterStats = xliff->GetStats(config);
- afterFilterStats.totalStrings = beforeFilterStats.totalStrings;
-
- // add the reject comments
- for (vector<Reject>::const_iterator reject = setting.reject.begin();
- reject != setting.reject.end(); reject++) {
- TransUnit* tu = xliff->EditTransUnit(reject->file, reject->name);
- tu->rejectComment = reject->comment;
- }
-
- // config-locale-current_cl.xliff
- stringstream filename;
- if (outDir != "") {
- filename << outDir << '/';
- }
- filename << config << '-' << targetLocale << '-' << setting.currentVersion << ".xliff";
- xliffs.push_back(pair<string,XLIFFFile*>(filename.str(), xliff));
-
- stats.push_back(afterFilterStats);
- }
-
- // today is a good day to die
- if (!success || SourcePos::HasErrors()) {
- return 1;
- }
-
- // write the XLIFF files
- printf("\nWriting %zd file%s...\n", xliffs.size(), xliffs.size() == 1 ? "" : "s");
- for (vector<pair<string,XLIFFFile*> >::iterator it = xliffs.begin(); it != xliffs.end(); it++) {
- const string& filename = it->first;
- XLIFFFile* xliff = it->second;
- string text = xliff->ToString();
- write_to_file(filename, text);
- }
-
- // the stats
- printf("\n"
- " to without total\n"
- " config files translate comments strings\n"
- "-----------------------------------------------------------------------\n");
- Stats totals;
- totals.config = "total";
- totals.files = 0;
- totals.toBeTranslated = 0;
- totals.noComments = 0;
- totals.totalStrings = 0;
- for (vector<Stats>::iterator it=stats.begin(); it!=stats.end(); it++) {
- string cfg = it->config;
- if (cfg.length() > 20) {
- cfg.resize(20);
- }
- printf(" %-20s %-9zd %-9zd %-9zd %-19zd\n", cfg.c_str(), it->files,
- it->toBeTranslated, it->noComments, it->totalStrings);
- totals.files += it->files;
- totals.toBeTranslated += it->toBeTranslated;
- totals.noComments += it->noComments;
- totals.totalStrings += it->totalStrings;
- }
- if (stats.size() > 1) {
- printf("-----------------------------------------------------------------------\n"
- " %-20s %-9zd %-9zd %-9zd %-19zd\n", totals.config.c_str(), totals.files,
- totals.toBeTranslated, totals.noComments, totals.totalStrings);
- }
- printf("\n");
- return 0;
-}
-
-struct PseudolocalizeSettings {
- XLIFFFile* xliff;
- bool expand;
-};
-
-
-string
-pseudolocalize_string(const string& source, const PseudolocalizeSettings* settings)
-{
- return pseudolocalize_string(source);
-}
-
-static XMLNode*
-pseudolocalize_xml_node(const XMLNode* source, const PseudolocalizeSettings* settings)
-{
- if (source->Type() == XMLNode::TEXT) {
- return XMLNode::NewText(source->Position(), pseudolocalize_string(source->Text(), settings),
- source->Pretty());
- } else {
- XMLNode* target;
- if (source->Namespace() == XLIFF_XMLNS && source->Name() == "g") {
- // XXX don't translate these
- target = XMLNode::NewElement(source->Position(), source->Namespace(),
- source->Name(), source->Attributes(), source->Pretty());
- } else {
- target = XMLNode::NewElement(source->Position(), source->Namespace(),
- source->Name(), source->Attributes(), source->Pretty());
- }
-
- const vector<XMLNode*>& children = source->Children();
- const size_t I = children.size();
- for (size_t i=0; i<I; i++) {
- target->EditChildren().push_back(pseudolocalize_xml_node(children[i], settings));
- }
-
- return target;
- }
-}
-
-void
-pseudolocalize_trans_unit(const string&file, TransUnit* unit, void* cookie)
-{
- const PseudolocalizeSettings* settings = (PseudolocalizeSettings*)cookie;
-
- const StringResource& source = unit->source;
- StringResource* target = &unit->target;
- *target = source;
-
- target->config = settings->xliff->TargetConfig();
-
- delete target->value;
- target->value = pseudolocalize_xml_node(source.value, settings);
-}
-
-int
-pseudolocalize_xliff(XLIFFFile* xliff, bool expand)
-{
- PseudolocalizeSettings settings;
-
- settings.xliff = xliff;
- settings.expand = expand;
- xliff->Map(pseudolocalize_trans_unit, &settings);
- return 0;
-}
-
-static int
-do_pseudo(const string& infile, const string& outfile, bool expand)
-{
- int err;
-
- XLIFFFile* xliff = XLIFFFile::Parse(infile);
- if (xliff == NULL) {
- return 1;
- }
-
- pseudolocalize_xliff(xliff, expand);
-
- err = write_to_file(outfile, xliff->ToString());
-
- delete xliff;
-
- return err;
-}
-
-void
-log_printf(const char *fmt, ...)
-{
- int ret;
- va_list ap;
-
- if (g_logFile != NULL) {
- va_start(ap, fmt);
- ret = vfprintf(g_logFile, fmt, ap);
- va_end(ap);
- fflush(g_logFile);
- }
-}
-
-void
-close_log_file()
-{
- if (g_logFile != NULL) {
- fclose(g_logFile);
- }
-}
-
-void
-open_log_file(const char* file)
-{
- g_logFile = fopen(file, "w");
- printf("log file: %s -- %p\n", file, g_logFile);
- atexit(close_log_file);
-}
-
-static int
-usage()
-{
- fprintf(stderr,
- "usage: localize export OPTIONS CONFIGS...\n"
- " REQUIRED OPTIONS\n"
- " --settings SETTINGS The settings file to use. See CONFIGS below.\n"
- " --root TREE_ROOT The location in Perforce of the files. e.g. //device\n"
- " --target LOCALE The target locale. See LOCALES below.\n"
- "\n"
- " OPTIONAL OPTIONS\n"
- " --out DIR Directory to put the output files. Defaults to the\n"
- " current directory if not supplied. Files are\n"
- " named as follows:\n"
- " CONFIG-LOCALE-CURRENT_CL.xliff\n"
- "\n"
- "\n"
- "usage: localize import XLIFF_FILE...\n"
- "\n"
- "Import a translated XLIFF file back into the tree.\n"
- "\n"
- "\n"
- "usage: localize xlb XMB_FILE VALUES_FILES...\n"
- "\n"
- "Read resource files from the tree file and write the corresponding XLB file\n"
- "\n"
- "Supply all of the android resource files (values files) to export after that.\n"
- "\n"
- "\n"
- "\n"
- "CONFIGS\n"
- "\n"
- "LOCALES\n"
- "Locales are specified in the form en_US They will be processed correctly\n"
- "to locate the resouce files in the tree.\n"
- "\n"
- "\n"
- "usage: localize pseudo OPTIONS INFILE [OUTFILE]\n"
- " OPTIONAL OPTIONS\n"
- " --big Pad strings so they get longer.\n"
- "\n"
- "Read INFILE, an XLIFF file, and output a pseudotranslated version of that file. If\n"
- "OUTFILE is specified, the results are written there; otherwise, the results are\n"
- "written back to INFILE.\n"
- "\n"
- "\n"
- "usage: localize rescheck FILES...\n"
- "\n"
- "Reads the base strings and prints warnings about bad resources from the given files.\n"
- "\n");
- return 1;
-}
-
-int
-main(int argc, const char** argv)
-{
- //open_log_file("log.txt");
- //g_logFile = stdout;
-
- if (argc == 2 && 0 == strcmp(argv[1], "--test")) {
- return test();
- }
-
- if (argc < 2) {
- return usage();
- }
-
- int index = 1;
-
- if (0 == strcmp("export", argv[index])) {
- string settingsFile;
- string rootDir;
- string outDir;
- string baseLocale = "en";
- string targetLocale;
- string language, region;
- vector<string> configs;
-
- index++;
- while (index < argc) {
- if (0 == strcmp("--settings", argv[index])) {
- settingsFile = argv[index+1];
- index += 2;
- }
- else if (0 == strcmp("--root", argv[index])) {
- rootDir = argv[index+1];
- index += 2;
- }
- else if (0 == strcmp("--out", argv[index])) {
- outDir = argv[index+1];
- index += 2;
- }
- else if (0 == strcmp("--target", argv[index])) {
- targetLocale = argv[index+1];
- index += 2;
- }
- else if (argv[index][0] == '-') {
- fprintf(stderr, "unknown argument %s\n", argv[index]);
- return usage();
- }
- else {
- break;
- }
- }
- for (; index<argc; index++) {
- configs.push_back(argv[index]);
- }
-
- if (settingsFile == "" || rootDir == "" || configs.size() == 0 || targetLocale == "") {
- return usage();
- }
- if (!split_locale(targetLocale, &language, ®ion)) {
- fprintf(stderr, "illegal --target locale: '%s'\n", targetLocale.c_str());
- return usage();
- }
-
-
- return do_export(settingsFile, rootDir, outDir, targetLocale, configs);
- }
- else if (0 == strcmp("import", argv[index])) {
- vector<string> xliffFilenames;
-
- index++;
- for (; index<argc; index++) {
- xliffFilenames.push_back(argv[index]);
- }
-
- return do_merge(xliffFilenames);
- }
- else if (0 == strcmp("xlb", argv[index])) {
- string outfile;
- vector<string> resFiles;
-
- index++;
- if (argc < index+1) {
- return usage();
- }
-
- outfile = argv[index];
-
- index++;
- for (; index<argc; index++) {
- resFiles.push_back(argv[index]);
- }
-
- return do_xlb_export(outfile, resFiles);
- }
- else if (0 == strcmp("pseudo", argv[index])) {
- string infile;
- string outfile;
- bool big = false;
-
- index++;
- while (index < argc) {
- if (0 == strcmp("--big", argv[index])) {
- big = true;
- index += 1;
- }
- else if (argv[index][0] == '-') {
- fprintf(stderr, "unknown argument %s\n", argv[index]);
- return usage();
- }
- else {
- break;
- }
- }
-
- if (index == argc-1) {
- infile = argv[index];
- outfile = argv[index];
- }
- else if (index == argc-2) {
- infile = argv[index];
- outfile = argv[index+1];
- }
- else {
- fprintf(stderr, "unknown argument %s\n", argv[index]);
- return usage();
- }
-
- return do_pseudo(infile, outfile, big);
- }
- else if (0 == strcmp("rescheck", argv[index])) {
- vector<string> files;
-
- index++;
- while (index < argc) {
- if (argv[index][0] == '-') {
- fprintf(stderr, "unknown argument %s\n", argv[index]);
- return usage();
- }
- else {
- break;
- }
- }
- for (; index<argc; index++) {
- files.push_back(argv[index]);
- }
-
- if (files.size() == 0) {
- return usage();
- }
-
- return do_rescheck(files);
- }
- else {
- return usage();
- }
-
- if (SourcePos::HasErrors()) {
- SourcePos::PrintErrors(stderr);
- return 1;
- }
-
- return 0;
-}
-
diff --git a/tools/localize/localize.h b/tools/localize/localize.h
deleted file mode 100644
index 615d14e..0000000
--- a/tools/localize/localize.h
+++ /dev/null
@@ -1,40 +0,0 @@
-#ifndef LOCALIZE_H
-#define LOCALIZE_H
-
-#include "XLIFFFile.h"
-
-#include <map>
-#include <string>
-
-using namespace std;
-
-struct Reject
-{
- string file;
- string name;
- string comment;
-};
-
-struct Settings
-{
- string id;
- string oldVersion;
- string currentVersion;
- vector<string> apps;
- vector<Reject> reject;
-};
-
-int read_settings(const string& filename, map<string,Settings>* result, const string& rootDir);
-string translated_file_name(const string& file, const string& locale);
-bool keep_this_trans_unit(const string& file, const TransUnit& unit, void* cookie);
-int validate_config(const string& settingsFile, const map<string,Settings>& settings,
- const string& configs);
-int validate_configs(const string& settingsFile, const map<string,Settings>& settings,
- const vector<string>& configs);
-int select_files(vector<string> *resFiles, const string& config,
- const map<string,Settings>& settings, const string& rootDir);
-int select_files(vector<vector<string> > *allResFiles, const vector<string>& configs,
- const map<string,Settings>& settings, const string& rootDir);
-
-
-#endif // LOCALIZE_H
diff --git a/tools/localize/localize_test.cpp b/tools/localize/localize_test.cpp
deleted file mode 100644
index 1d0ac9a..0000000
--- a/tools/localize/localize_test.cpp
+++ /dev/null
@@ -1,221 +0,0 @@
-#include <cstdio>
-#include "XLIFFFile.h"
-#include "ValuesFile.h"
-#include "localize.h"
-#include <stdio.h>
-
-int pseudolocalize_xliff(XLIFFFile* xliff, bool expand);
-
-static int
-test_filename(const string& file, const string& locale, const string& expected)
-{
- string result = translated_file_name(file, locale);
- if (result != expected) {
- fprintf(stderr, "translated_file_name test failed\n");
- fprintf(stderr, " locale='%s'\n", locale.c_str());
- fprintf(stderr, " expected='%s'\n", expected.c_str());
- fprintf(stderr, " result='%s'\n", result.c_str());
- return 1;
- } else {
- if (false) {
- fprintf(stderr, "translated_file_name test passed\n");
- fprintf(stderr, " locale='%s'\n", locale.c_str());
- fprintf(stderr, " expected='%s'\n", expected.c_str());
- fprintf(stderr, " result='%s'\n", result.c_str());
- }
- return 0;
- }
-}
-
-static int
-translated_file_name_test()
-{
- bool all = true;
- int err = 0;
-
- if (all) err |= test_filename("//device/samples/NotePad/res/values/strings.xml", "zz_ZZ",
- "//device/samples/NotePad/res/values-zz-rZZ/strings.xml");
-
- if (all) err |= test_filename("//device/samples/NotePad/res/values/strings.xml", "zz",
- "//device/samples/NotePad/res/values-zz/strings.xml");
-
- if (all) err |= test_filename("//device/samples/NotePad/res/values/strings.xml", "",
- "//device/samples/NotePad/res/values/strings.xml");
-
- return err;
-}
-
-bool
-return_false(const string&, const TransUnit& unit, void* cookie)
-{
- return false;
-}
-
-static int
-delete_trans_units()
-{
- XLIFFFile* xliff = XLIFFFile::Parse("testdata/strip_xliff.xliff");
- if (xliff == NULL) {
- printf("couldn't read file\n");
- return 1;
- }
- if (false) {
- printf("XLIFF was [[%s]]\n", xliff->ToString().c_str());
- }
-
- xliff->Filter(return_false, NULL);
-
- if (false) {
- printf("XLIFF is [[%s]]\n", xliff->ToString().c_str());
-
- set<StringResource> const& strings = xliff->GetStringResources();
- printf("strings.size=%zd\n", strings.size());
- for (set<StringResource>::iterator it=strings.begin(); it!=strings.end(); it++) {
- const StringResource& str = *it;
- printf("STRING!!! id=%s value='%s' pos=%s file=%s version=%d(%s)\n", str.id.c_str(),
- str.value->ContentsToString(ANDROID_NAMESPACES).c_str(),
- str.pos.ToString().c_str(), str.file.c_str(), str.version,
- str.versionString.c_str());
- }
- }
-
- return 0;
-}
-
-static int
-filter_trans_units()
-{
- XLIFFFile* xliff = XLIFFFile::Parse("testdata/strip_xliff.xliff");
- if (xliff == NULL) {
- printf("couldn't read file\n");
- return 1;
- }
-
- if (false) {
- printf("XLIFF was [[%s]]\n", xliff->ToString().c_str());
- }
-
- Settings setting;
- xliff->Filter(keep_this_trans_unit, &setting);
-
- if (false) {
- printf("XLIFF is [[%s]]\n", xliff->ToString().c_str());
-
- set<StringResource> const& strings = xliff->GetStringResources();
- printf("strings.size=%zd\n", strings.size());
- for (set<StringResource>::iterator it=strings.begin(); it!=strings.end(); it++) {
- const StringResource& str = *it;
- printf("STRING!!! id=%s value='%s' pos=%s file=%s version=%d(%s)\n", str.id.c_str(),
- str.value->ContentsToString(ANDROID_NAMESPACES).c_str(),
- str.pos.ToString().c_str(), str.file.c_str(), str.version,
- str.versionString.c_str());
- }
- }
-
- return 0;
-}
-
-static int
-settings_test()
-{
- int err;
- map<string,Settings> settings;
- map<string,Settings>::iterator it;
-
- err = read_settings("testdata/config.xml", &settings, "//asdf");
- if (err != 0) {
- return err;
- }
-
- if (false) {
- for (it=settings.begin(); it!=settings.end(); it++) {
- const Settings& setting = it->second;
- printf("CONFIG:\n");
- printf(" id='%s'\n", setting.id.c_str());
- printf(" oldVersion='%s'\n", setting.oldVersion.c_str());
- printf(" currentVersion='%s'\n", setting.currentVersion.c_str());
- int i=0;
- for (vector<string>::const_iterator app=setting.apps.begin();
- app!=setting.apps.end(); app++) {
- printf(" apps[%02d]='%s'\n", i, app->c_str());
- i++;
- }
- i=0;
- for (vector<Reject>::const_iterator reject=setting.reject.begin();
- reject!=setting.reject.end(); reject++) {
- i++;
- printf(" reject[%02d]=('%s','%s','%s')\n", i, reject->file.c_str(),
- reject->name.c_str(), reject->comment.c_str());
- }
- }
- }
-
- for (it=settings.begin(); it!=settings.end(); it++) {
- const Settings& setting = it->second;
- if (it->first != setting.id) {
- fprintf(stderr, "it->first='%s' setting.id='%s'\n", it->first.c_str(),
- setting.id.c_str());
- err |= 1;
- }
- }
-
-
- return err;
-}
-
-static int
-test_one_pseudo(bool big, const char* expected)
-{
- XLIFFFile* xliff = XLIFFFile::Parse("testdata/pseudo.xliff");
- if (xliff == NULL) {
- printf("couldn't read file\n");
- return 1;
- }
- if (false) {
- printf("XLIFF was [[%s]]\n", xliff->ToString().c_str());
- }
-
- pseudolocalize_xliff(xliff, big);
- string newString = xliff->ToString();
- delete xliff;
-
- if (false) {
- printf("XLIFF is [[%s]]\n", newString.c_str());
- }
-
- if (false && newString != expected) {
- fprintf(stderr, "xliff didn't translate as expected\n");
- fprintf(stderr, "newString=[[%s]]\n", newString.c_str());
- fprintf(stderr, "expected=[[%s]]\n", expected);
- return 1;
- }
-
- return 0;
-}
-
-static int
-pseudolocalize_test()
-{
- int err = 0;
-
- err |= test_one_pseudo(false, "");
- //err |= test_one_pseudo(true, "");
-
- return err;
-}
-
-int
-localize_test()
-{
- bool all = true;
- int err = 0;
-
- if (all) err |= translated_file_name_test();
- if (all) err |= delete_trans_units();
- if (all) err |= filter_trans_units();
- if (all) err |= settings_test();
- if (all) err |= pseudolocalize_test();
-
- return err;
-}
-
diff --git a/tools/localize/log.h b/tools/localize/log.h
deleted file mode 100644
index 4a5fa7f..0000000
--- a/tools/localize/log.h
+++ /dev/null
@@ -1,7 +0,0 @@
-#ifndef LOG_H
-#define LOG_H
-
-void log_printf(const char* fmt, ...);
-
-#endif // LOG_H
-
diff --git a/tools/localize/merge_res_and_xliff.cpp b/tools/localize/merge_res_and_xliff.cpp
deleted file mode 100644
index 1fdaa0e..0000000
--- a/tools/localize/merge_res_and_xliff.cpp
+++ /dev/null
@@ -1,392 +0,0 @@
-#include "merge_res_and_xliff.h"
-
-#include "file_utils.h"
-#include "Perforce.h"
-#include "log.h"
-#include <stdio.h>
-
-static set<StringResource>::const_iterator
-find_id(const set<StringResource>& s, const string& id, int index)
-{
- for (set<StringResource>::const_iterator it = s.begin(); it != s.end(); it++) {
- if (it->id == id && it->index == index) {
- return it;
- }
- }
- return s.end();
-}
-
-static set<StringResource>::const_iterator
-find_in_xliff(const set<StringResource>& s, const string& filename, const string& id, int index,
- int version, const Configuration& config)
-{
- for (set<StringResource>::const_iterator it = s.begin(); it != s.end(); it++) {
- if (it->file == filename && it->id == id && it->index == index && it->version == version
- && it->config == config) {
- return it;
- }
- }
- return s.end();
-}
-
-
-static void
-printit(const set<StringResource>& s, const set<StringResource>::const_iterator& it)
-{
- if (it == s.end()) {
- printf("(none)\n");
- } else {
- printf("id=%s index=%d config=%s file=%s value='%s'\n", it->id.c_str(), it->index,
- it->config.ToString().c_str(), it->file.c_str(),
- it->value->ToString(ANDROID_NAMESPACES).c_str());
- }
-}
-
-StringResource
-convert_resource(const StringResource& s, const string& file, const Configuration& config,
- int version, const string& versionString)
-{
- return StringResource(s.pos, file, config, s.id, s.index, s.value ? s.value->Clone() : NULL,
- version, versionString, s.comment);
-}
-
-static bool
-resource_has_contents(const StringResource& res)
-{
- XMLNode* value = res.value;
- if (value == NULL) {
- return false;
- }
- string contents = value->ContentsToString(ANDROID_NAMESPACES);
- return contents != "";
-}
-
-ValuesFile*
-merge_res_and_xliff(const ValuesFile* en_currentFile,
- const ValuesFile* xx_currentFile, const ValuesFile* xx_oldFile,
- const string& filename, const XLIFFFile* xliffFile)
-{
- bool success = true;
-
- Configuration en_config = xliffFile->SourceConfig();
- Configuration xx_config = xliffFile->TargetConfig();
- string currentVersion = xliffFile->CurrentVersion();
-
- ValuesFile* result = new ValuesFile(xx_config);
-
- set<StringResource> en_cur = en_currentFile->GetStrings();
- set<StringResource> xx_cur = xx_currentFile->GetStrings();
- set<StringResource> xx_old = xx_oldFile->GetStrings();
- set<StringResource> xliff = xliffFile->GetStringResources();
-
- // for each string in en_current
- for (set<StringResource>::const_iterator en_c = en_cur.begin();
- en_c != en_cur.end(); en_c++) {
- set<StringResource>::const_iterator xx_c = find_id(xx_cur, en_c->id, en_c->index);
- set<StringResource>::const_iterator xx_o = find_id(xx_old, en_c->id, en_c->index);
- set<StringResource>::const_iterator xlf = find_in_xliff(xliff, en_c->file, en_c->id,
- en_c->index, CURRENT_VERSION, xx_config);
-
- if (false) {
- printf("\nen_c: "); printit(en_cur, en_c);
- printf("xx_c: "); printit(xx_cur, xx_c);
- printf("xx_o: "); printit(xx_old, xx_o);
- printf("xlf: "); printit(xliff, xlf);
- }
-
- // if it changed between xx_old and xx_current, use xx_current
- // (someone changed it by hand)
- if (xx_o != xx_old.end() && xx_c != xx_cur.end()) {
- string xx_o_value = xx_o->value->ToString(ANDROID_NAMESPACES);
- string xx_c_value = xx_c->value->ToString(ANDROID_NAMESPACES);
- if (xx_o_value != xx_c_value && xx_c_value != "") {
- StringResource r(convert_resource(*xx_c, filename, xx_config,
- CURRENT_VERSION, currentVersion));
- if (resource_has_contents(r)) {
- result->AddString(r);
- }
- continue;
- }
- }
-
- // if it is present in xliff, use that
- // (it just got translated)
- if (xlf != xliff.end() && xlf->value->ToString(ANDROID_NAMESPACES) != "") {
- StringResource r(convert_resource(*xlf, filename, xx_config,
- CURRENT_VERSION, currentVersion));
- if (resource_has_contents(r)) {
- result->AddString(r);
- }
- }
-
- // if it is present in xx_current, use that
- // (it was already translated, and not retranslated)
- // don't filter out empty strings if they were added by hand, the above code just
- // guarantees that this tool never adds an empty one.
- if (xx_c != xx_cur.end()) {
- StringResource r(convert_resource(*xx_c, filename, xx_config,
- CURRENT_VERSION, currentVersion));
- result->AddString(r);
- }
-
- // othwerwise, leave it out. The resource fall-through code will use the English
- // one at runtime, and the xliff export code will pick it up for translation next time.
- }
-
- if (success) {
- return result;
- } else {
- delete result;
- return NULL;
- }
-}
-
-
-struct MergedFile {
- XLIFFFile* xliff;
- string xliffFilename;
- string original;
- string translated;
- ValuesFile* en_current;
- ValuesFile* xx_current;
- ValuesFile* xx_old;
- ValuesFile* xx_new;
- string xx_new_text;
- string xx_new_filename;
- bool new_file;
- bool deleted_file;
-
- MergedFile();
- MergedFile(const MergedFile&);
-};
-
-struct compare_filenames {
- bool operator()(const MergedFile& lhs, const MergedFile& rhs) const
- {
- return lhs.original < rhs.original;
- }
-};
-
-MergedFile::MergedFile()
- :xliff(NULL),
- xliffFilename(),
- original(),
- translated(),
- en_current(NULL),
- xx_current(NULL),
- xx_old(NULL),
- xx_new(NULL),
- xx_new_text(),
- xx_new_filename(),
- new_file(false),
- deleted_file(false)
-{
-}
-
-MergedFile::MergedFile(const MergedFile& that)
- :xliff(that.xliff),
- xliffFilename(that.xliffFilename),
- original(that.original),
- translated(that.translated),
- en_current(that.en_current),
- xx_current(that.xx_current),
- xx_old(that.xx_old),
- xx_new(that.xx_new),
- xx_new_text(that.xx_new_text),
- xx_new_filename(that.xx_new_filename),
- new_file(that.new_file),
- deleted_file(that.deleted_file)
-{
-}
-
-
-typedef set<MergedFile, compare_filenames> MergedFileSet;
-
-int
-do_merge(const vector<string>& xliffFilenames)
-{
- int err = 0;
- MergedFileSet files;
-
- printf("\rPreparing..."); fflush(stdout);
- string currentChange = Perforce::GetCurrentChange(true);
-
- // for each xliff, make a MergedFile record and do a little error checking
- for (vector<string>::const_iterator xliffFilename=xliffFilenames.begin();
- xliffFilename!=xliffFilenames.end(); xliffFilename++) {
- XLIFFFile* xliff = XLIFFFile::Parse(*xliffFilename);
- if (xliff == NULL) {
- fprintf(stderr, "localize import: unable to read file %s\n", xliffFilename->c_str());
- err = 1;
- continue;
- }
-
- set<string> xf = xliff->Files();
- for (set<string>::const_iterator f=xf.begin(); f!=xf.end(); f++) {
- MergedFile mf;
- mf.xliff = xliff;
- mf.xliffFilename = *xliffFilename;
- mf.original = *f;
- mf.translated = translated_file_name(mf.original, xliff->TargetConfig().locale);
- log_printf("mf.translated=%s mf.original=%s locale=%s\n", mf.translated.c_str(),
- mf.original.c_str(), xliff->TargetConfig().locale.c_str());
-
- if (files.find(mf) != files.end()) {
- fprintf(stderr, "%s: duplicate string resources for file %s\n",
- xliffFilename->c_str(), f->c_str());
- fprintf(stderr, "%s: previously defined here.\n",
- files.find(mf)->xliffFilename.c_str());
- err = 1;
- continue;
- }
- files.insert(mf);
- }
- }
-
- size_t deletedFileCount = 0;
- size_t J = files.size() * 3;
- size_t j = 1;
- // Read all of the files from perforce.
- for (MergedFileSet::iterator mf = files.begin(); mf != files.end(); mf++) {
- MergedFile* file = const_cast<MergedFile*>(&(*mf));
- // file->en_current
- print_file_status(j++, J);
- file->en_current = get_values_file(file->original, file->xliff->SourceConfig(),
- CURRENT_VERSION, currentChange, true);
- if (file->en_current == NULL) {
- // deleted file
- file->deleted_file = true;
- deletedFileCount++;
- continue;
- }
-
- // file->xx_current;
- print_file_status(j++, J);
- file->xx_current = get_values_file(file->translated, file->xliff->TargetConfig(),
- CURRENT_VERSION, currentChange, false);
- if (file->xx_current == NULL) {
- file->xx_current = new ValuesFile(file->xliff->TargetConfig());
- file->new_file = true;
- }
-
- // file->xx_old (note that the xliff's current version is our old version, because that
- // was the current version when it was exported)
- print_file_status(j++, J);
- file->xx_old = get_values_file(file->translated, file->xliff->TargetConfig(),
- OLD_VERSION, file->xliff->CurrentVersion(), false);
- if (file->xx_old == NULL) {
- file->xx_old = new ValuesFile(file->xliff->TargetConfig());
- file->new_file = true;
- }
- }
-
- // merge them
- for (MergedFileSet::iterator mf = files.begin(); mf != files.end(); mf++) {
- MergedFile* file = const_cast<MergedFile*>(&(*mf));
- if (file->deleted_file) {
- continue;
- }
- file->xx_new = merge_res_and_xliff(file->en_current, file->xx_current, file->xx_old,
- file->original, file->xliff);
- }
-
- // now is a good time to stop if there was an error
- if (err != 0) {
- return err;
- }
-
- // locate the files
- j = 1;
- for (MergedFileSet::iterator mf = files.begin(); mf != files.end(); mf++) {
- MergedFile* file = const_cast<MergedFile*>(&(*mf));
- print_file_status(j++, J, "Locating");
-
- file->xx_new_filename = Perforce::Where(file->translated, true);
- if (file->xx_new_filename == "") {
- fprintf(stderr, "\nWas not able to determine the location of depot file %s\n",
- file->translated.c_str());
- err = 1;
- }
- }
-
- if (err != 0) {
- return err;
- }
-
- // p4 edit the files
- // only do this if it changed - no need to submit files that haven't changed meaningfully
- vector<string> filesToEdit;
- vector<string> filesToAdd;
- vector<string> filesToDelete;
- for (MergedFileSet::iterator mf = files.begin(); mf != files.end(); mf++) {
- MergedFile* file = const_cast<MergedFile*>(&(*mf));
- if (file->deleted_file) {
- filesToDelete.push_back(file->xx_new_filename);
- continue;
- }
- string xx_current_text = file->xx_current->ToString();
- string xx_new_text = file->xx_new->ToString();
- if (xx_current_text != xx_new_text) {
- if (file->xx_new->GetStrings().size() == 0) {
- file->deleted_file = true;
- filesToDelete.push_back(file->xx_new_filename);
- } else {
- file->xx_new_text = xx_new_text;
- if (file->new_file) {
- filesToAdd.push_back(file->xx_new_filename);
- } else {
- filesToEdit.push_back(file->xx_new_filename);
- }
- }
- }
- }
- if (filesToAdd.size() == 0 && filesToEdit.size() == 0 && deletedFileCount == 0) {
- printf("\nAll of the files are the same. Nothing to change.\n");
- return 0;
- }
- if (filesToEdit.size() > 0) {
- printf("\np4 editing files...\n");
- if (0 != Perforce::EditFiles(filesToEdit, true)) {
- return 1;
- }
- }
-
-
- printf("\n");
-
- for (MergedFileSet::iterator mf = files.begin(); mf != files.end(); mf++) {
- MergedFile* file = const_cast<MergedFile*>(&(*mf));
- if (file->deleted_file) {
- continue;
- }
- if (file->xx_new_text != "" && file->xx_new_filename != "") {
- if (0 != write_to_file(file->xx_new_filename, file->xx_new_text)) {
- err = 1;
- }
- }
- }
-
- if (err != 0) {
- return err;
- }
-
- if (filesToAdd.size() > 0) {
- printf("p4 adding %zd new files...\n", filesToAdd.size());
- err = Perforce::AddFiles(filesToAdd, true);
- }
-
- if (filesToDelete.size() > 0) {
- printf("p4 deleting %zd removed files...\n", filesToDelete.size());
- err = Perforce::DeleteFiles(filesToDelete, true);
- }
-
- if (err != 0) {
- return err;
- }
-
- printf("\n"
- "Theoretically, this merge was successfull. Next you should\n"
- "review the diffs, get a code review, and submit it. Enjoy.\n\n");
- return 0;
-}
-
diff --git a/tools/localize/merge_res_and_xliff.h b/tools/localize/merge_res_and_xliff.h
deleted file mode 100644
index acf2fff..0000000
--- a/tools/localize/merge_res_and_xliff.h
+++ /dev/null
@@ -1,13 +0,0 @@
-#ifndef MERGE_RES_AND_XLIFF_H
-#define MERGE_RES_AND_XLIFF_H
-
-#include "ValuesFile.h"
-#include "XLIFFFile.h"
-
-ValuesFile* merge_res_and_xliff(const ValuesFile* en_current,
- const ValuesFile* xx_current, const ValuesFile* xx_old,
- const string& filename, const XLIFFFile* xliff);
-
-int do_merge(const vector<string>& xliffFilenames);
-
-#endif // MERGE_RES_AND_XLIFF_H
diff --git a/tools/localize/merge_res_and_xliff_test.cpp b/tools/localize/merge_res_and_xliff_test.cpp
deleted file mode 100644
index 6fe2629..0000000
--- a/tools/localize/merge_res_and_xliff_test.cpp
+++ /dev/null
@@ -1,48 +0,0 @@
-#include <cstdio>
-#include "merge_res_and_xliff.h"
-#include <stdio.h>
-
-int
-merge_test()
-{
- Configuration english;
- english.locale = "en_US";
- Configuration translated;
- translated.locale = "zz_ZZ";
-
- ValuesFile* en_current = ValuesFile::ParseFile("testdata/merge_en_current.xml", english,
- CURRENT_VERSION, "3");
- if (en_current == NULL) {
- fprintf(stderr, "merge_test: unable to read testdata/merge_en_current.xml\n");
- return 1;
- }
-
- ValuesFile* xx_current = ValuesFile::ParseFile("testdata/merge_xx_current.xml", translated,
- CURRENT_VERSION, "3");
- if (xx_current == NULL) {
- fprintf(stderr, "merge_test: unable to read testdata/merge_xx_current.xml\n");
- return 1;
- }
- ValuesFile* xx_old = ValuesFile::ParseFile("testdata/merge_xx_old.xml", translated,
- OLD_VERSION, "2");
- if (xx_old == NULL) {
- fprintf(stderr, "merge_test: unable to read testdata/merge_xx_old.xml\n");
- return 1;
- }
-
- XLIFFFile* xliff = XLIFFFile::Parse("testdata/merge.xliff");
-
- ValuesFile* result = merge_res_and_xliff(en_current, xx_current, xx_old,
- "//device/tools/localize/testdata/res/values/strings.xml", xliff);
-
- if (result == NULL) {
- fprintf(stderr, "merge_test: result is NULL\n");
- return 1;
- }
-
- printf("======= RESULT =======\n%s===============\n", result->ToString().c_str());
-
- return 0;
-}
-
-
diff --git a/tools/localize/res_check.cpp b/tools/localize/res_check.cpp
deleted file mode 100644
index 0fab98a..0000000
--- a/tools/localize/res_check.cpp
+++ /dev/null
@@ -1,106 +0,0 @@
-#include "res_check.h"
-#include "localize.h"
-#include "file_utils.h"
-#include "ValuesFile.h"
-
-#include <stdio.h>
-
-static int check_file(const ValuesFile* file);
-static int check_value(const SourcePos& pos, const XMLNode* value);
-static int scan_for_unguarded_format(const SourcePos& pos, const XMLNode* value, int depth = 0);
-
-int
-do_rescheck(const vector<string>& files)
-{
- int err;
-
- Configuration english;
- english.locale = "en_US";
-
- for (size_t i=0; i<files.size(); i++) {
- const string filename = files[i];
- ValuesFile* valuesFile = get_local_values_file(filename, english, CURRENT_VERSION,
- "0", true);
- if (valuesFile != NULL) {
- err |= check_file(valuesFile);
- delete valuesFile;
- } else {
- err |= 1;
- }
- }
-
- return err;
-}
-
-static int
-check_file(const ValuesFile* file)
-{
- int err = 0;
- set<StringResource> strings = file->GetStrings();
- for (set<StringResource>::iterator it=strings.begin(); it!=strings.end(); it++) {
- XMLNode* value = it->value;
- if (value != NULL) {
- err |= check_value(it->pos, value);
- }
- }
- return err;
-}
-
-static bool
-contains_percent(const string& str)
-{
- const size_t len = str.length();
- for (size_t i=0; i<len; i++) {
- char c = str[i];
- if (c == '%') {
- return true;
- }
- }
- return false;
-}
-
-static int
-check_value(const SourcePos& pos, const XMLNode* value)
-{
- int err = 0;
- err |= scan_for_unguarded_format(pos, value);
- return err;
-}
-
-static bool
-is_xliff_block(const string& ns, const string& name)
-{
- if (ns == XLIFF_XMLNS) {
- return name == "g";
- } else {
- return false;
- }
-}
-
-static int
-scan_for_unguarded_format(const SourcePos& pos, const string& string)
-{
- bool containsPercent = contains_percent(string);
- if (containsPercent) {
- pos.Error("unguarded percent: '%s'\n", string.c_str());
- }
- return 0;
-}
-
-static int
-scan_for_unguarded_format(const SourcePos& pos, const XMLNode* value, int depth)
-{
- if (value->Type() == XMLNode::ELEMENT) {
- int err = 0;
- if (depth == 0 || !is_xliff_block(value->Namespace(), value->Name())) {
- const vector<XMLNode*>& children = value->Children();
- for (size_t i=0; i<children.size(); i++) {
- err |= scan_for_unguarded_format(pos, children[i], depth+1);
- }
- }
- return err;
- } else {
- return scan_for_unguarded_format(pos, value->Text());
- }
-}
-
diff --git a/tools/localize/res_check.h b/tools/localize/res_check.h
deleted file mode 100644
index 86e7ce6..0000000
--- a/tools/localize/res_check.h
+++ /dev/null
@@ -1,12 +0,0 @@
-#ifndef RESCHECK_H
-#define RESCHECK_H
-
-#include <map>
-#include <string>
-#include <vector>
-
-using namespace std;
-
-int do_rescheck(const vector<string>& files);
-
-#endif // RESCHECK_H
diff --git a/tools/localize/test.cpp b/tools/localize/test.cpp
deleted file mode 100644
index 5fa2c17..0000000
--- a/tools/localize/test.cpp
+++ /dev/null
@@ -1,31 +0,0 @@
-#include "SourcePos.h"
-#include <stdio.h>
-
-int ValuesFile_test();
-int XLIFFFile_test();
-int XMLHandler_test();
-int Perforce_test();
-int localize_test();
-int merge_test();
-
-int
-test()
-{
- bool all = true;
- int err = 0;
-
- if (all) err |= XMLHandler_test();
- if (all) err |= ValuesFile_test();
- if (all) err |= XLIFFFile_test();
- if (all) err |= Perforce_test();
- if (all) err |= localize_test();
- if (all) err |= merge_test();
-
- if (err != 0) {
- fprintf(stderr, "some tests failed\n");
- } else {
- fprintf(stderr, "all tests passed\n");
- }
-
- return err;
-}
diff --git a/tools/localize/testdata/config.xml b/tools/localize/testdata/config.xml
deleted file mode 100644
index affa140f..0000000
--- a/tools/localize/testdata/config.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<localize-config>
- <configuration id="system"
- old-cl="1"
- new-cl="43019">
- <app dir="apps/common" />
- </configuration>
- <configuration id="samples"
- old-cl="24801"
- new-cl="43019">
- <app dir="samples/NotePad" />
- <reject file="samples/NotePad/res/values/strings.xml" name="string:menu_delete">
- QA says this sounds <b>rude</b>.
- </reject>
- </configuration>
-</localize-config>
diff --git a/tools/localize/testdata/import.xliff b/tools/localize/testdata/import.xliff
deleted file mode 100644
index b99b739..0000000
--- a/tools/localize/testdata/import.xliff
+++ /dev/null
@@ -1,72 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2"
- version="1.2"
- >
- <file datatype="x-android-res"
- original="//device/tools/localize/testdata/res/values/strings.xml"
- product-version="1.0"
- date="08:10:54 12/07/07 PST"
- source-language="en_US"
- product-name="kila"
- target-language="zz_ZZ"
- build-num="44391"
- >
- <body>
- <trans-unit id="string:changed_in_xx">
- <source>aaa</source>
- <target>AAA</target>
- </trans-unit>
- <trans-unit id="string:first_translation">
- <source>bbb</source>
- <target>BBB</target>
- </trans-unit>
- <trans-unit id="string:deleted_string">
- <source>ddd</source>
- <target>DDDD</target>
- </trans-unit>
- <trans-unit id="array:0:growing_array">
- <source>1-One</source>
- <target>1-oNE</target>
- </trans-unit>
- <trans-unit id="array:1:growing_array">
- <source>1-Two</source>
- <target>1-tWO</target>
- </trans-unit>
- <trans-unit id="array:2:growing_array">
- <source>1-Three</source>
- <target>1-tHREE</target>
- </trans-unit>
- <trans-unit id="array:0:shrinking_array">
- <source>2-One</source>
- <target>2-oNE</target>
- </trans-unit>
- <trans-unit id="array:1:shrinking_array">
- <source>2-Two</source>
- <target>2-tWO</target>
- </trans-unit>
- <trans-unit id="array:2:shrinking_array">
- <source>2-Three</source>
- <target>2-tHREE</target>
- </trans-unit>
- <trans-unit id="array:3:shrinking_array">
- <source>2-Four</source>
- <target>2-fOUR</target>
- </trans-unit>
- <trans-unit id="array:0:deleted_array">
- <source>4-One</source>
- <target>4-oNE</target>
- </trans-unit>
- <trans-unit id="array:1:deleted_array">
- <source>4-Two</source>
- <target>4-tWO</target>
- </trans-unit>
- <trans-unit id="array:2:deleted_array">
- <source>4-Three</source>
- <target>4-tHREE</target>
- </trans-unit>
-
- </body>
- </file>
-</xliff>
-
-
diff --git a/tools/localize/testdata/merge.xliff b/tools/localize/testdata/merge.xliff
deleted file mode 100644
index 2b78c45..0000000
--- a/tools/localize/testdata/merge.xliff
+++ /dev/null
@@ -1,72 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2"
- version="1.2"
- >
- <file datatype="x-android-res"
- original="testdata/merge_en_current.xml"
- product-version="1.0"
- date="08:10:54 12/07/07 PST"
- source-language="en-US"
- product-name="kila"
- target-language="zz-ZZ"
- build-num="44391"
- >
- <body>
- <trans-unit id="string:changed_in_xx">
- <source>aaa</source>
- <target>AAA</target>
- </trans-unit>
- <trans-unit id="string:first_translation">
- <source>bbb</source>
- <target>BBB</target>
- </trans-unit>
- <trans-unit id="string:deleted_string">
- <source>ddd</source>
- <target>DDDD</target>
- </trans-unit>
- <trans-unit id="array:0:growing_array">
- <source>1-One</source>
- <target>1-oNE</target>
- </trans-unit>
- <trans-unit id="array:1:growing_array">
- <source>1-Two</source>
- <target>1-tWO</target>
- </trans-unit>
- <trans-unit id="array:2:growing_array">
- <source>1-Three</source>
- <target>1-tHREE</target>
- </trans-unit>
- <trans-unit id="array:0:shrinking_array">
- <source>2-One</source>
- <target>2-oNE</target>
- </trans-unit>
- <trans-unit id="array:1:shrinking_array">
- <source>2-Two</source>
- <target>2-tWO</target>
- </trans-unit>
- <trans-unit id="array:2:shrinking_array">
- <source>2-Three</source>
- <target>2-tHREE</target>
- </trans-unit>
- <trans-unit id="array:3:shrinking_array">
- <source>2-Four</source>
- <target>2-fOUR</target>
- </trans-unit>
- <trans-unit id="array:0:deleted_array">
- <source>4-One</source>
- <target>4-oNE</target>
- </trans-unit>
- <trans-unit id="array:1:deleted_array">
- <source>4-Two</source>
- <target>4-tWO</target>
- </trans-unit>
- <trans-unit id="array:2:deleted_array">
- <source>4-Three</source>
- <target>4-tHREE</target>
- </trans-unit>
-
- </body>
- </file>
-</xliff>
-
-
diff --git a/tools/localize/testdata/merge_en_current.xml b/tools/localize/testdata/merge_en_current.xml
deleted file mode 100644
index 6a11e68..0000000
--- a/tools/localize/testdata/merge_en_current.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 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.
--->
-
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="changed_in_xx">aaa</string>
- <string name="first_translation">bbb</string>
- <string name="previously_translated">ccc</string>
- <string name="new_string">ccc</string>
-
- <string name="formatted_string"><b>bold</b><i>italic<u>italic_underline</u></i><u>underline</u></string>
-
- <array name="growing_array">
- <!-- somebody wrote a comment! -->
- <item>1-One</item>
- <item>1-Two</item>
- <item>1-Three</item>
- <item>1-Four</item>
- </array>
- <array name="shrinking_array">
- <!-- somebody wrote a comment! -->
- <item>2-One</item>
- <item>2-Two</item>
- <item>2-Three</item>
- </array>
- <array name="new_array">
- <!-- somebody wrote a comment! -->
- <item>3-One</item>
- <item>3-Two</item>
- <item>3-Three</item>
- </array>
-</resources>
diff --git a/tools/localize/testdata/merge_en_old.xml b/tools/localize/testdata/merge_en_old.xml
deleted file mode 100644
index 933f98e..0000000
--- a/tools/localize/testdata/merge_en_old.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 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.
--->
-
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="changed_in_xx">aaa</string>
- <string name="first_translation">bbb</string>
- <string name="previously_translated">ccc</string>
- <string name="deleted_string">ddd</string>
-
- <string name="formatted_string"><b>bold</b><i>italic<u>italic_underline</u></i><u>underline</u></string>
-
- <array name="growing_array">
- <!-- somebody wrote a comment! -->
- <item>1-One</item>
- <item>1-Two</item>
- <item>1-Three</item>
- </array>
- <array name="shrinking_array">
- <!-- somebody wrote a comment! -->
- <item>2-One</item>
- <item>2-Two</item>
- <item>2-Three</item>
- <item>2-Four</item>
- </array>
- <array name="deleted_array">
- <!-- somebody wrote a comment! -->
- <item>4-One</item>
- <item>4-Two</item>
- <item>4-Three</item>
- </array>
-</resources>
-
diff --git a/tools/localize/testdata/merge_xx_current.xml b/tools/localize/testdata/merge_xx_current.xml
deleted file mode 100644
index c2a783d..0000000
--- a/tools/localize/testdata/merge_xx_current.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 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.
--->
-
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="changed_in_xx">AAAA</string>
- <string name="previously_translated">CCC</string>
-</resources>
-
-
diff --git a/tools/localize/testdata/pseudo.xliff b/tools/localize/testdata/pseudo.xliff
deleted file mode 100644
index 5b44f86..0000000
--- a/tools/localize/testdata/pseudo.xliff
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2"
- version="1.2"
- >
- <file datatype="x-android-res"
- original="//device/tools/localization/tests/res/values/strings.xml"
- product-version="1.0"
- date="08:10:54 12/07/07 PST"
- source-language="en-US"
- product-name="kila"
- target-language="zz-ZZ"
- build-num="32138"
- >
- <body>
- <trans-unit id="string:complex">
- <source>First <g id="string:complex:0" ctype="underline">underline</g>, <g id="string:complex:1" ctype="italic">italic<g id="string:complex:2" ctype="bold">italicbold</g></g> End </source>
- </trans-unit>
- <trans-unit id="string:complex-quoted">
- <source xml:space="preserve">First <g id="string:complex-quoted:0" ctype="underline">underline</g>, <g id="string:complex-quoted:1" ctype="italic">italic<g id="string:complex-quoted:2" ctype="bold">italicbold</g></g> End</source>
- </trans-unit>
- <trans-unit id="string:simple">
- <source>Simple</source>
- </trans-unit>
- <trans-unit id="array:0:simple">
- <source>Simple</source>
- </trans-unit>
- <trans-unit id="array:1:simple">
- <source>Simple</source>
- </trans-unit>
- <trans-unit id="string:simple-quoted">
- <source xml:space="preserve"> Quote</source>
- <alt-trans>
- <source xml:lang="en" xml:space="preserve"> OLD Quote</source>
- <target xml:lang="xx"> OLD Ờũỡŧę</target>
- </alt-trans>
- </trans-unit>
- </body>
- </file>
-</xliff>
-
diff --git a/tools/localize/testdata/res/values/strings.xml b/tools/localize/testdata/res/values/strings.xml
deleted file mode 100644
index 6a11e68..0000000
--- a/tools/localize/testdata/res/values/strings.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 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.
--->
-
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="changed_in_xx">aaa</string>
- <string name="first_translation">bbb</string>
- <string name="previously_translated">ccc</string>
- <string name="new_string">ccc</string>
-
- <string name="formatted_string"><b>bold</b><i>italic<u>italic_underline</u></i><u>underline</u></string>
-
- <array name="growing_array">
- <!-- somebody wrote a comment! -->
- <item>1-One</item>
- <item>1-Two</item>
- <item>1-Three</item>
- <item>1-Four</item>
- </array>
- <array name="shrinking_array">
- <!-- somebody wrote a comment! -->
- <item>2-One</item>
- <item>2-Two</item>
- <item>2-Three</item>
- </array>
- <array name="new_array">
- <!-- somebody wrote a comment! -->
- <item>3-One</item>
- <item>3-Two</item>
- <item>3-Three</item>
- </array>
-</resources>
diff --git a/tools/localize/testdata/strip_xliff.xliff b/tools/localize/testdata/strip_xliff.xliff
deleted file mode 100644
index 9254cf2..0000000
--- a/tools/localize/testdata/strip_xliff.xliff
+++ /dev/null
@@ -1,70 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2"
- version="1.2"
- >
- <file datatype="x-android-res"
- original="//device/tools/localization/tests/res/values/strings.xml"
- product-version="1.0"
- date="08:10:54 12/07/07 PST"
- source-language="en-US"
- product-name="kila"
- target-language="zz-ZZ"
- build-num="32138"
- >
- <body>
-
- <trans-unit id="string:string-000-0">
- </trans-unit>
- <trans-unit id="string:string-001-0">
- <alt-trans>
- <source xml:lang="en" xml:space="preserve">source</source>
- </alt-trans>
- </trans-unit>
- <trans-unit id="string:string-010-0">
- <alt-trans>
- <target xml:lang="zz" xml:space="preserve">target</target>
- </alt-trans>
- </trans-unit>
- <trans-unit id="string:string-011-0">
- <alt-trans>
- <source xml:lang="en" xml:space="preserve">source</source>
- <target xml:lang="zz" xml:space="preserve">target</target>
- </alt-trans>
- </trans-unit>
-
- <trans-unit id="string:string-100-1">
- <source xml:space="preserve">source</source>
- </trans-unit>
- <trans-unit id="string:string-101-1">
- <source xml:space="preserve">source</source>
- <alt-trans>
- <source xml:lang="en" xml:space="preserve">source</source>
- </alt-trans>
- </trans-unit>
- <trans-unit id="string:string-110-1">
- <source xml:space="preserve">source</source>
- <alt-trans>
- <target xml:lang="zz" xml:space="preserve">target</target>
- </alt-trans>
- </trans-unit>
-
- <trans-unit id="string:string-111-0">
- <source xml:space="preserve">source</source>
- <alt-trans>
- <source xml:lang="en" xml:space="preserve">source</source>
- <target xml:lang="zz" xml:space="preserve">target</target>
- </alt-trans>
- </trans-unit>
- <trans-unit id="string:string-111-1">
- <source xml:space="preserve">source</source>
- <alt-trans>
- <source xml:lang="en" xml:space="preserve">alt-source</source>
- <target xml:lang="zz" xml:space="preserve">target</target>
- </alt-trans>
- </trans-unit>
-
- </body>
- </file>
-</xliff>
-
-
diff --git a/tools/localize/testdata/values/strings.xml b/tools/localize/testdata/values/strings.xml
deleted file mode 100644
index 5e8d43d..0000000
--- a/tools/localize/testdata/values/strings.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 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.
--->
-
-<resources
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="test1">Discard</string>
- <!-- comment -->
- <string name="test2">a<b>b<i>c</i></b>d</string>
- <string name="test3">a<xliff:g a="b" xliff:a="asdf">bBb</xliff:g>C</string>
-
- <!-- Email address types from android.provider.Contacts -->
- <array name="emailAddressTypes">
- <!-- somebody wrote a comment! -->
- <item>Email</item>
- <item>Home</item>
- <item>Work</item>
- <item>Other\u2026</item>
- </array>
-</resources>
diff --git a/tools/localize/testdata/xliff1.xliff b/tools/localize/testdata/xliff1.xliff
deleted file mode 100644
index 55a8d8e..0000000
--- a/tools/localize/testdata/xliff1.xliff
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2"
- version="1.2"
- >
- <file datatype="x-android-res"
- original="//device/tools/localization/tests/res/values/strings.xml"
- product-version="1.0"
- date="08:10:54 12/07/07 PST"
- source-language="en-US"
- product-name="kila"
- target-language="zz-ZZ"
- build-num="32138"
- >
- <body>
- <trans-unit id="string:complex">
- <source>First <g id="string:complex:0" ctype="underline">underline</g>, <g id="string:complex:1" ctype="italic">italic<g id="string:complex:2" ctype="bold">italicbold</g></g> End </source>
- <target>Ḟịṙṩŧ , Ḛŋḋ </target>
- </trans-unit>
- <trans-unit id="string:complex-quoted">
- <source xml:space="preserve">First <g id="string:complex-quoted:0" ctype="underline">underline</g>, <g id="string:complex-quoted:1" ctype="italic">italic<g id="string:complex-quoted:2" ctype="bold">italicbold</g></g> End</source>
- <target>Ḟịṙṩŧ , Ḛŋḋ</target>
- </trans-unit>
- <trans-unit id="string:simple">
- <source>Simple</source>
- <target>Ṩịṃṕļę</target>
- </trans-unit>
- <trans-unit id="array:0:simple">
- <source>Simple</source>
- <target>Ṩịṃṕļę</target>
- </trans-unit>
- <trans-unit id="array:1:simple">
- <source>Simple</source>
- <target>Ṩịṃṕļę</target>
- </trans-unit>
- <trans-unit id="string:simple-quoted">
- <source xml:space="preserve"> Quote</source>
- <target> Ờũỡŧę</target>
- <alt-trans>
- <source xml:lang="en" xml:space="preserve"> OLD Quote</source>
- <target xml:lang="xx"> OLD Ờũỡŧę</target>
- </alt-trans>
- </trans-unit>
- </body>
- </file>
-</xliff>
-
diff --git a/tools/localize/testdata/xml.xml b/tools/localize/testdata/xml.xml
deleted file mode 100644
index ef930d0..0000000
--- a/tools/localize/testdata/xml.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<ASDF>
- <a id="system"
- old-cl="1"
- new-cl="43019">
- <app dir="apps/common" />
- </a>
- <a id="samples"
- old-cl="1"
- new-cl="43019">asdf
- <app dir="samples/NotePad" />
- <app dir="samples/LunarLander" />
- <something>a<b>,</b>b </something>
- <exact xml:space="preserve">a<b>,</b>b </exact>
- </a>
-</ASDF>
-
diff --git a/tools/localize/xmb.cpp b/tools/localize/xmb.cpp
deleted file mode 100644
index d8f6ff0..0000000
--- a/tools/localize/xmb.cpp
+++ /dev/null
@@ -1,182 +0,0 @@
-#include "xmb.h"
-
-#include "file_utils.h"
-#include "localize.h"
-#include "ValuesFile.h"
-#include "XMLHandler.h"
-#include "XLIFFFile.h"
-
-#include <map>
-#include <cstdio>
-
-using namespace std;
-
-const char *const NS_MAP[] = {
- "xml", XMLNS_XMLNS,
- NULL, NULL
-};
-
-set<string> g_tags;
-
-static string
-strip_newlines(const string& str)
-{
- string res;
- const size_t N = str.length();
- for (size_t i=0; i<N; i++) {
- char c = str[i];
- if (c != '\n' && c != '\r') {
- res += c;
- } else {
- res += ' ';
- }
- }
- return res;
-}
-
-static int
-rename_id_attribute(XMLNode* node)
-{
- vector<XMLAttribute>& attrs = node->EditAttributes();
- const size_t I = attrs.size();
- for (size_t i=0; i<I; i++) {
- XMLAttribute attr = attrs[i];
- if (attr.name == "id") {
- attr.name = "name";
- attrs.erase(attrs.begin()+i);
- attrs.push_back(attr);
- return 0;
- }
- }
- return 1;
-}
-
-static int
-convert_xliff_to_ph(XMLNode* node, int* phID)
-{
- int err = 0;
- if (node->Type() == XMLNode::ELEMENT) {
- if (node->Namespace() == XLIFF_XMLNS) {
- g_tags.insert(node->Name());
- node->SetName("", "ph");
-
- err = rename_id_attribute(node);
- if (err != 0) {
- char name[30];
- (*phID)++;
- sprintf(name, "id-%d", *phID);
- node->EditAttributes().push_back(XMLAttribute("", "name", name));
- err = 0;
- }
- }
- vector<XMLNode*>& children = node->EditChildren();
- const size_t I = children.size();
- for (size_t i=0; i<I; i++) {
- err |= convert_xliff_to_ph(children[i], phID);
- }
- }
- return err;
-}
-
-XMLNode*
-resource_to_xmb_msg(const StringResource& res)
-{
- // the msg element
- vector<XMLAttribute> attrs;
- string name = res.pos.file;
- name += ":";
- name += res.TypedID();
- attrs.push_back(XMLAttribute("", "name", name));
- attrs.push_back(XMLAttribute("", "desc", strip_newlines(res.comment)));
- attrs.push_back(XMLAttribute(XMLNS_XMLNS, "space", "preserve"));
- XMLNode* msg = XMLNode::NewElement(res.pos, "", "msg", attrs, XMLNode::EXACT);
-
- // the contents are in xliff/html, convert it to xliff
- int err = 0;
- XMLNode* value = res.value;
- string tag = value->Name();
- int phID = 0;
- for (vector<XMLNode*>::const_iterator it=value->Children().begin();
- it!=value->Children().end(); it++) {
- err |= convert_html_to_xliff(*it, tag, msg, &phID);
- }
-
- if (err != 0) {
- return NULL;
- }
-
- // and then convert that to xmb
- for (vector<XMLNode*>::iterator it=msg->EditChildren().begin();
- it!=msg->EditChildren().end(); it++) {
- err |= convert_xliff_to_ph(*it, &phID);
- }
-
- if (err == 0) {
- return msg;
- } else {
- return NULL;
- }
-}
-
-int
-do_xlb_export(const string& outfile, const vector<string>& resFiles)
-{
- int err = 0;
-
- size_t totalFileCount = resFiles.size();
-
- Configuration english;
- english.locale = "en_US";
-
- set<StringResource> allResources;
-
- const size_t J = resFiles.size();
- for (size_t j=0; j<J; j++) {
- string resFile = resFiles[j];
-
- ValuesFile* valuesFile = get_local_values_file(resFile, english, CURRENT_VERSION, "", true);
- if (valuesFile != NULL) {
- set<StringResource> resources = valuesFile->GetStrings();
- allResources.insert(resources.begin(), resources.end());
- } else {
- fprintf(stderr, "error reading file %s\n", resFile.c_str());
- }
-
- delete valuesFile;
- }
-
- // Construct the XLB xml
- vector<XMLAttribute> attrs;
- attrs.push_back(XMLAttribute("", "locale", "en"));
- XMLNode* localizationbundle = XMLNode::NewElement(GENERATED_POS, "", "localizationbundle",
- attrs, XMLNode::PRETTY);
-
- for (set<StringResource>::iterator it=allResources.begin(); it!=allResources.end(); it++) {
- XMLNode* msg = resource_to_xmb_msg(*it);
- if (msg) {
- localizationbundle->EditChildren().push_back(msg);
- } else {
- err = 1;
- }
- }
-
-#if 0
- for (set<string>::iterator it=g_tags.begin(); it!=g_tags.end(); it++) {
- printf("tag: %s\n", it->c_str());
- }
- printf("err=%d\n", err);
-#endif
- if (err == 0) {
- FILE* f = fopen(outfile.c_str(), "wb");
- if (f == NULL) {
- fprintf(stderr, "can't open outputfile: %s\n", outfile.c_str());
- return 1;
- }
- fprintf(f, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
- fprintf(f, "%s\n", localizationbundle->ToString(NS_MAP).c_str());
- fclose(f);
- }
-
- return err;
-}
-
diff --git a/tools/localize/xmb.h b/tools/localize/xmb.h
deleted file mode 100644
index 96492b1..0000000
--- a/tools/localize/xmb.h
+++ /dev/null
@@ -1,11 +0,0 @@
-#ifndef XMB_H
-#define XMB_H
-
-#include <string>
-#include <vector>
-
-using namespace std;
-
-int do_xlb_export(const string& outFile, const vector<string>& resFiles);
-
-#endif // XMB_H
diff --git a/tools/orientationplot/README.txt b/tools/orientationplot/README.txt
index 0143510..d53f65e 100644
--- a/tools/orientationplot/README.txt
+++ b/tools/orientationplot/README.txt
@@ -16,15 +16,15 @@
The tool works by scaping the debug log output from WindowOrientationListener
for interesting data and then plotting it.
-1. Enable the Window Orientation Listener debugging data log using the
- Development Settings in the Dev Tools application (Development.apk).
-
-2. Plug in the device. Ensure that it is the only device plugged in
+1. Plug in the device. Ensure that it is the only device plugged in
since this script is of very little brain and will get confused otherwise.
-3. Run "orientationplot.py".
+2. Enable the Window Orientation Listener debugging data log.
+ adb shell setprop debug.orientation.log true
+ adb shell stop
+ adb shell start
-4. When finished, remember to disable the debug log output since it is quite verbose!
+3. Run "orientationplot.py".
WHAT IT ALL MEANS
diff --git a/tools/orientationplot/orientationplot.py b/tools/orientationplot/orientationplot.py
index f4e6b45..6fc3922 100755
--- a/tools/orientationplot/orientationplot.py
+++ b/tools/orientationplot/orientationplot.py
@@ -152,6 +152,7 @@
self.time_until_settled = self._make_timeseries()
self.time_until_flat_delay_expired = self._make_timeseries()
self.time_until_swing_delay_expired = self._make_timeseries()
+ self.time_until_acceleration_delay_expired = self._make_timeseries()
self.stability_axes = self._add_timeseries_axes(
6, 'Proposal Stability', 'ms', [-10, 600],
sharex=shared_axis,
@@ -162,6 +163,8 @@
self.stability_axes, 'time until flat delay expired', 'green')
self.time_until_swing_delay_expired_line = self._add_timeseries_line(
self.stability_axes, 'time until swing delay expired', 'blue')
+ self.time_until_acceleration_delay_expired_line = self._add_timeseries_line(
+ self.stability_axes, 'time until acceleration delay expired', 'red')
self._add_timeseries_legend(self.stability_axes)
self.sample_latency = self._make_timeseries()
@@ -253,6 +256,7 @@
self.parse_time_until_settled = None
self.parse_time_until_flat_delay_expired = None
self.parse_time_until_swing_delay_expired = None
+ self.parse_time_until_acceleration_delay_expired = None
self.parse_sample_latency = None
# Update samples.
@@ -303,6 +307,7 @@
self.parse_time_until_settled = self._get_following_number(line, 'timeUntilSettledMS=')
self.parse_time_until_flat_delay_expired = self._get_following_number(line, 'timeUntilFlatDelayExpiredMS=')
self.parse_time_until_swing_delay_expired = self._get_following_number(line, 'timeUntilSwingDelayExpiredMS=')
+ self.parse_time_until_acceleration_delay_expired = self._get_following_number(line, 'timeUntilAccelerationDelayExpiredMS=')
self._append(self.raw_acceleration_x, timeindex, self.parse_raw_acceleration_x)
self._append(self.raw_acceleration_y, timeindex, self.parse_raw_acceleration_y)
@@ -326,6 +331,7 @@
self._append(self.time_until_settled, timeindex, self.parse_time_until_settled)
self._append(self.time_until_flat_delay_expired, timeindex, self.parse_time_until_flat_delay_expired)
self._append(self.time_until_swing_delay_expired, timeindex, self.parse_time_until_swing_delay_expired)
+ self._append(self.time_until_acceleration_delay_expired, timeindex, self.parse_time_until_acceleration_delay_expired)
self._append(self.sample_latency, timeindex, self.parse_sample_latency)
self._reset_parse_state()
@@ -349,6 +355,7 @@
self._scroll(self.time_until_settled, bottom)
self._scroll(self.time_until_flat_delay_expired, bottom)
self._scroll(self.time_until_swing_delay_expired, bottom)
+ self._scroll(self.time_until_acceleration_delay_expired, bottom)
self._scroll(self.sample_latency, bottom)
# Redraw the plots.
@@ -368,6 +375,7 @@
self.time_until_settled_line.set_data(self.time_until_settled)
self.time_until_flat_delay_expired_line.set_data(self.time_until_flat_delay_expired)
self.time_until_swing_delay_expired_line.set_data(self.time_until_swing_delay_expired)
+ self.time_until_acceleration_delay_expired_line.set_data(self.time_until_acceleration_delay_expired)
self.sample_latency_line.set_data(self.sample_latency)
self.fig.canvas.draw_idle()