diff options
566 files changed, 18670 insertions, 5270 deletions
@@ -183,6 +183,9 @@ LOCAL_SRC_FILES += \ core/java/com/android/internal/backup/IObbBackupService.aidl \ core/java/com/android/internal/policy/IFaceLockCallback.aidl \ core/java/com/android/internal/policy/IFaceLockInterface.aidl \ + core/java/com/android/internal/policy/IKeyguardShowCallback.aidl \ + core/java/com/android/internal/policy/IKeyguardExitCallback.aidl \ + core/java/com/android/internal/policy/IKeyguardService.aidl \ core/java/com/android/internal/os/IDropBoxManagerService.aidl \ core/java/com/android/internal/os/IResultReceiver.aidl \ core/java/com/android/internal/statusbar/IStatusBar.aidl \ diff --git a/api/current.txt b/api/current.txt index e001e1a..0db95b8 100644 --- a/api/current.txt +++ b/api/current.txt @@ -624,6 +624,7 @@ package android { field public static final int keyboardLayout = 16843691; // 0x10103ab field public static final int keyboardMode = 16843341; // 0x101024d field public static final int keycode = 16842949; // 0x10100c5 + field public static final int keyset = 16843734; // 0x10103d6 field public static final int killAfterRestore = 16843420; // 0x101029c field public static final int label = 16842753; // 0x1010001 field public static final int labelFor = 16843718; // 0x10103c6 @@ -6108,6 +6109,7 @@ package android.content { field public static final java.lang.String ACTION_USER_INITIALIZE = "android.intent.action.USER_INITIALIZE"; field public static final java.lang.String ACTION_USER_PRESENT = "android.intent.action.USER_PRESENT"; field public static final java.lang.String ACTION_VIEW = "android.intent.action.VIEW"; + field public static final java.lang.String ACTION_VOICE_ASSIST = "android.intent.action.VOICE_ASSIST"; field public static final java.lang.String ACTION_VOICE_COMMAND = "android.intent.action.VOICE_COMMAND"; field public static final deprecated java.lang.String ACTION_WALLPAPER_CHANGED = "android.intent.action.WALLPAPER_CHANGED"; field public static final java.lang.String ACTION_WEB_SEARCH = "android.intent.action.WEB_SEARCH"; @@ -9673,7 +9675,6 @@ package android.graphics.drawable { ctor public ColorDrawable(); ctor public ColorDrawable(int); method public void draw(android.graphics.Canvas); - method public int getAlpha(); method public int getColor(); method public int getOpacity(); method public void setAlpha(int); @@ -9693,6 +9694,7 @@ package android.graphics.drawable { method public static android.graphics.drawable.Drawable createFromXml(android.content.res.Resources, org.xmlpull.v1.XmlPullParser) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException; method public static android.graphics.drawable.Drawable createFromXmlInner(android.content.res.Resources, org.xmlpull.v1.XmlPullParser, android.util.AttributeSet) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException; method public abstract void draw(android.graphics.Canvas); + method public int getAlpha(); method public final android.graphics.Rect getBounds(); method public android.graphics.drawable.Drawable.Callback getCallback(); method public int getChangingConfigurations(); @@ -11306,7 +11308,7 @@ package android.media { method public static float getMaxVolume(); method public static int getMinBufferSize(int, int, int); method public static float getMinVolume(); - method protected int getNativeFrameCount(); + method protected deprecated int getNativeFrameCount(); method public static int getNativeOutputSampleRate(int); method public int getNotificationMarkerPosition(); method public int getPlayState(); @@ -11328,7 +11330,7 @@ package android.media { method public void setPlaybackPositionUpdateListener(android.media.AudioTrack.OnPlaybackPositionUpdateListener, android.os.Handler); method public int setPlaybackRate(int); method public int setPositionNotificationPeriod(int); - method protected void setState(int); + method protected deprecated void setState(int); method public int setStereoVolume(float, float); method public void stop() throws java.lang.IllegalStateException; method public int write(byte[], int, int); @@ -16117,6 +16119,7 @@ package android.os { field public static final int JELLY_BEAN = 16; // 0x10 field public static final int JELLY_BEAN_MR1 = 17; // 0x11 field public static final int JELLY_BEAN_MR2 = 10000; // 0x2710 + field public static final int KEY_LIME_PIE = 10000; // 0x2710 } public final class Bundle implements java.lang.Cloneable android.os.Parcelable { @@ -23073,7 +23076,9 @@ package android.text.method { method public static void clearMetaKeyState(android.text.Editable, int); method public long clearMetaKeyState(long, int); method public static final int getMetaState(java.lang.CharSequence); + method public static final int getMetaState(java.lang.CharSequence, android.view.KeyEvent); method public static final int getMetaState(java.lang.CharSequence, int); + method public static final int getMetaState(java.lang.CharSequence, int, android.view.KeyEvent); method public static final int getMetaState(long); method public static final int getMetaState(long, int); method public static long handleKeyDown(long, int, android.view.KeyEvent); @@ -28976,6 +28981,7 @@ package android.widget { method public int getAlignmentMode(); method public int getColumnCount(); method public int getOrientation(); + method public android.util.Printer getPrinter(); method public int getRowCount(); method public boolean getUseDefaultMargins(); method public boolean isColumnOrderPreserved(); @@ -28985,6 +28991,7 @@ package android.widget { method public void setColumnCount(int); method public void setColumnOrderPreserved(boolean); method public void setOrientation(int); + method public void setPrinter(android.util.Printer); method public void setRowCount(int); method public void setRowOrderPreserved(boolean); method public void setUseDefaultMargins(boolean); diff --git a/cmds/backup/Android.mk b/cmds/backup/Android.mk index 73af0bc..42e5133 100644 --- a/cmds/backup/Android.mk +++ b/cmds/backup/Android.mk @@ -10,6 +10,6 @@ LOCAL_SHARED_LIBRARIES := libcutils libutils libandroidfw LOCAL_MODULE:= btool LOCAL_MODULE_PATH := $(TARGET_OUT_OPTIONAL_EXECUTABLES) -LOCAL_MODULE_TAGS := debug +LOCAL_MODULE_TAGS := optional include $(BUILD_EXECUTABLE) diff --git a/core/java/android/app/ActivityManagerNative.java b/core/java/android/app/ActivityManagerNative.java index aca4f9c..83be92b 100644 --- a/core/java/android/app/ActivityManagerNative.java +++ b/core/java/android/app/ActivityManagerNative.java @@ -609,6 +609,36 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM return true; } + case CREATE_STACK_TRANSACTION: { + data.enforceInterface(IActivityManager.descriptor); + int position = data.readInt(); + int relativeStackId = data.readInt(); + float weight = data.readFloat(); + int res = createStack(position, relativeStackId, weight); + reply.writeNoException(); + reply.writeInt(res); + return true; + } + + case MOVE_TASK_TO_STACK_TRANSACTION: { + data.enforceInterface(IActivityManager.descriptor); + int taskId = data.readInt(); + int stackId = data.readInt(); + boolean toTop = data.readInt() != 0; + moveTaskToStack(taskId, stackId, toTop); + reply.writeNoException(); + return true; + } + + case RESIZE_STACK_TRANSACTION: { + data.enforceInterface(IActivityManager.descriptor); + int stackId = data.readInt(); + float weight = data.readFloat(); + resizeStack(stackId, weight); + reply.writeNoException(); + return true; + } + case GET_TASK_FOR_ACTIVITY_TRANSACTION: { data.enforceInterface(IActivityManager.descriptor); IBinder token = data.readStrongBinder(); @@ -2539,6 +2569,46 @@ class ActivityManagerProxy implements IActivityManager data.recycle(); reply.recycle(); } + @Override + public int createStack(int position, int relativeStackId, float weight) throws RemoteException + { + Parcel data = Parcel.obtain(); + Parcel reply = Parcel.obtain(); + data.writeInt(position); + data.writeInt(relativeStackId); + data.writeFloat(weight); + mRemote.transact(CREATE_STACK_TRANSACTION, data, reply, 0); + reply.readException(); + int res = reply.readInt(); + data.recycle(); + reply.recycle(); + return res; + } + @Override + public void moveTaskToStack(int taskId, int stackId, boolean toTop) throws RemoteException + { + Parcel data = Parcel.obtain(); + Parcel reply = Parcel.obtain(); + data.writeInt(taskId); + data.writeInt(stackId); + data.writeInt(toTop ? 1 : 0); + mRemote.transact(MOVE_TASK_TO_STACK_TRANSACTION, data, reply, 0); + reply.readException(); + data.recycle(); + reply.recycle(); + } + @Override + public void resizeStack(int stackId, float weight) throws RemoteException + { + Parcel data = Parcel.obtain(); + Parcel reply = Parcel.obtain(); + data.writeInt(stackId); + data.writeFloat(weight); + mRemote.transact(RESIZE_STACK_TRANSACTION, data, reply, 0); + reply.readException(); + data.recycle(); + reply.recycle(); + } public int getTaskForActivity(IBinder token, boolean onlyRoot) throws RemoteException { Parcel data = Parcel.obtain(); diff --git a/core/java/android/app/IActivityManager.java b/core/java/android/app/IActivityManager.java index cf4c729..5340f95 100644 --- a/core/java/android/app/IActivityManager.java +++ b/core/java/android/app/IActivityManager.java @@ -16,6 +16,8 @@ package android.app; +import android.app.ActivityManager.RunningTaskInfo; +import android.app.ActivityManager.RunningServiceInfo; import android.content.ComponentName; import android.content.ContentProviderNative; import android.content.IContentProvider; @@ -99,19 +101,22 @@ public interface IActivityManager extends IInterface { public void activityDestroyed(IBinder token) throws RemoteException; public String getCallingPackage(IBinder token) throws RemoteException; public ComponentName getCallingActivity(IBinder token) throws RemoteException; - public List getTasks(int maxNum, int flags, + public List<RunningTaskInfo> getTasks(int maxNum, int flags, IThumbnailReceiver receiver) throws RemoteException; public List<ActivityManager.RecentTaskInfo> getRecentTasks(int maxNum, int flags, int userId) throws RemoteException; public ActivityManager.TaskThumbnails getTaskThumbnails(int taskId) throws RemoteException; public Bitmap getTaskTopThumbnail(int taskId) throws RemoteException; - public List getServices(int maxNum, int flags) throws RemoteException; + public List<RunningServiceInfo> getServices(int maxNum, int flags) throws RemoteException; public List<ActivityManager.ProcessErrorStateInfo> getProcessesInErrorState() throws RemoteException; public void moveTaskToFront(int task, int flags, Bundle options) throws RemoteException; public void moveTaskToBack(int task) throws RemoteException; public boolean moveActivityTaskToBack(IBinder token, boolean nonRoot) throws RemoteException; public void moveTaskBackwards(int task) throws RemoteException; + public int createStack(int position, int relativeStackId, float weight) throws RemoteException; + public void moveTaskToStack(int taskId, int stackId, boolean toTop) throws RemoteException; + public void resizeStack(int stackId, float weight) throws RemoteException; public int getTaskForActivity(IBinder token, boolean onlyRoot) throws RemoteException; /* oneway */ public void reportThumbnail(IBinder token, @@ -632,4 +637,7 @@ public interface IActivityManager extends IInterface { int GET_TOP_ACTIVITY_EXTRAS_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+161; int REPORT_TOP_ACTIVITY_EXTRAS_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+162; int GET_LAUNCHED_FROM_PACKAGE_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+163; + int CREATE_STACK_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+164; + int MOVE_TASK_TO_STACK_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+165; + int RESIZE_STACK_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+166; } diff --git a/core/java/android/appwidget/AppWidgetHost.java b/core/java/android/appwidget/AppWidgetHost.java index c62bf32..3a355f9 100644 --- a/core/java/android/appwidget/AppWidgetHost.java +++ b/core/java/android/appwidget/AppWidgetHost.java @@ -198,7 +198,6 @@ public class AppWidgetHost { * @return a appWidgetId */ public int allocateAppWidgetId() { - try { if (mPackageName == null) { mPackageName = mContext.getPackageName(); @@ -211,20 +210,17 @@ public class AppWidgetHost { } /** - * Get a appWidgetId for a host in the calling process. + * Get a appWidgetId for a host in the given package. * * @return a appWidgetId * @hide */ - public static int allocateAppWidgetIdForSystem(int hostId, int userId) { + public static int allocateAppWidgetIdForPackage(int hostId, int userId, String packageName) { checkCallerIsSystem(); try { if (sService == null) { bindService(); } - Context systemContext = - (Context) ActivityThread.currentActivityThread().getSystemContext(); - String packageName = systemContext.getPackageName(); return sService.allocateAppWidgetId(packageName, hostId, userId); } catch (RemoteException e) { throw new RuntimeException("system server dead?", e); diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java index 0efd6b0..61b2915 100644 --- a/core/java/android/content/Intent.java +++ b/core/java/android/content/Intent.java @@ -1164,13 +1164,12 @@ public class Intent implements Parcelable, Cloneable { * additional optional contextual information about where the user was when they requested * the voice assist. * Output: nothing. - * @hide */ @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) public static final String ACTION_VOICE_ASSIST = "android.intent.action.VOICE_ASSIST"; /** - * An optional field on {@link #ACTION_ASSIST} + * An optional field on {@link #ACTION_ASSIST} and {@link #ACTION_VOICE_ASSIST} * containing the name of the current foreground application package at the time * the assist was invoked. */ @@ -1178,7 +1177,7 @@ public class Intent implements Parcelable, Cloneable { = "android.intent.extra.ASSIST_PACKAGE"; /** - * An optional field on {@link #ACTION_ASSIST} + * An optional field on {@link #ACTION_ASSIST} and {@link #ACTION_VOICE_ASSIST} * containing additional contextual information supplied by the current * foreground app at the time of the assist request. This is a {@link Bundle} of * additional data. diff --git a/core/java/android/content/pm/KeySet.java b/core/java/android/content/pm/KeySet.java new file mode 100644 index 0000000..0ef09a4 --- /dev/null +++ b/core/java/android/content/pm/KeySet.java @@ -0,0 +1,34 @@ +/* + * 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.Binder; + +/** @hide */ +public class KeySet { + + private Binder token; + + /** @hide */ + public KeySet(Binder token) { + this.token = token; + } + + Binder getToken() { + return token; + } +}
\ No newline at end of file diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java index 11f9be9..ae9df67 100644 --- a/core/java/android/content/pm/PackageParser.java +++ b/core/java/android/content/pm/PackageParser.java @@ -46,14 +46,20 @@ import java.security.NoSuchAlgorithmException; import java.security.PublicKey; import java.security.cert.Certificate; import java.security.cert.CertificateEncodingException; +import java.security.cert.CertificateFactory; +import java.security.cert.CertPath; +import java.security.cert.X509Certificate; import java.security.spec.EncodedKeySpec; import java.security.spec.InvalidKeySpecException; import java.security.spec.X509EncodedKeySpec; import java.util.ArrayList; import java.util.Enumeration; +import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.List; +import java.util.Map; +import java.util.Set; import java.util.jar.Attributes; import java.util.jar.JarEntry; import java.util.jar.JarFile; @@ -691,6 +697,13 @@ public class PackageParser { mParseError = PackageManager.INSTALL_PARSE_FAILED_NO_CERTIFICATES; return false; } + + // Add the signing KeySet to the system + pkg.mSigningKeys = new HashSet<PublicKey>(); + for (int i=0; i < certs.length; i++) { + pkg.mSigningKeys.add(certs[i].getPublicKey()); + } + } catch (CertificateEncodingException e) { Slog.w(TAG, "Exception reading " + mArchiveSourcePath, e); mParseError = PackageManager.INSTALL_PARSE_FAILED_CERTIFICATE_ENCODING; @@ -1004,6 +1017,10 @@ public class PackageParser { if (!parseApplication(pkg, res, parser, attrs, flags, outError)) { return null; } + } else if (tagName.equals("keys")) { + if (!parseKeys(pkg, res, parser, attrs, outError)) { + return null; + } } else if (tagName.equals("permission-group")) { if (parsePermissionGroup(pkg, flags, res, parser, attrs, outError) == null) { return null; @@ -1464,7 +1481,71 @@ public class PackageParser { } return buildCompoundName(pkg, procSeq, "taskAffinity", outError); } - + + private boolean parseKeys(Package owner, Resources res, + XmlPullParser parser, AttributeSet attrs, String[] outError) + throws XmlPullParserException, IOException { + // we've encountered the 'keys' tag + // all the keys and keysets that we want must be defined here + // so we're going to iterate over the parser and pull out the things we want + int outerDepth = parser.getDepth(); + + int type; + PublicKey currentKey = null; + Map<PublicKey, Set<String>> definedKeySets = new HashMap<PublicKey, Set<String>>(); + while ((type = parser.next()) != XmlPullParser.END_DOCUMENT + && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) { + if (type == XmlPullParser.END_TAG) { + continue; + } + String tagname = parser.getName(); + if (tagname.equals("publicKey")) { + final TypedArray sa = res.obtainAttributes(attrs, + com.android.internal.R.styleable.PublicKey); + final String encodedKey = sa.getNonResourceString( + com.android.internal.R.styleable.PublicKey_value); + currentKey = parsePublicKey(encodedKey); + definedKeySets.put(currentKey, new HashSet<String>()); + sa.recycle(); + } else if (tagname.equals("keyset")) { + final TypedArray sa = res.obtainAttributes(attrs, + com.android.internal.R.styleable.KeySet); + final String name = sa.getNonResourceString( + com.android.internal.R.styleable.KeySet_name); + definedKeySets.get(currentKey).add(name); + sa.recycle(); + } else if (RIGID_PARSER) { + Slog.w(TAG, "Bad element under <keys>: " + parser.getName() + + " at " + mArchiveSourcePath + " " + + parser.getPositionDescription()); + return false; + } else { + Slog.w(TAG, "Unknown element under <keys>: " + parser.getName() + + " at " + mArchiveSourcePath + " " + + parser.getPositionDescription()); + XmlUtils.skipCurrentTag(parser); + continue; + } + } + + owner.mKeySetMapping = new HashMap<String, Set<PublicKey>>(); + for (Map.Entry<PublicKey, Set<String>> e : definedKeySets.entrySet()) { + PublicKey key = e.getKey(); + Set<String> keySetNames = e.getValue(); + for (String alias : keySetNames) { + if (owner.mKeySetMapping.containsKey(alias)) { + owner.mKeySetMapping.get(alias).add(key); + } else { + Set<PublicKey> keys = new HashSet<PublicKey>(); + keys.add(key); + owner.mKeySetMapping.put(alias, keys); + } + } + } + + return true; + } + private PermissionGroup parsePermissionGroup(Package owner, int flags, Resources res, XmlPullParser parser, AttributeSet attrs, String[] outError) throws XmlPullParserException, IOException { @@ -3020,20 +3101,28 @@ public class PackageParser { Slog.i(TAG, "verifier " + packageName + " public key was null; skipping"); } + PublicKey publicKey = parsePublicKey(encodedPublicKey); + if (publicKey != null) { + return new VerifierInfo(packageName, publicKey); + } + + return null; + } + + public static final PublicKey parsePublicKey(String encodedPublicKey) { EncodedKeySpec keySpec; try { final byte[] encoded = Base64.decode(encodedPublicKey, Base64.DEFAULT); keySpec = new X509EncodedKeySpec(encoded); } catch (IllegalArgumentException e) { - Slog.i(TAG, "Could not parse verifier " + packageName + " public key; invalid Base64"); + Slog.i(TAG, "Could not parse verifier public key; invalid Base64"); return null; } /* First try the key as an RSA key. */ try { final KeyFactory keyFactory = KeyFactory.getInstance("RSA"); - final PublicKey publicKey = keyFactory.generatePublic(keySpec); - return new VerifierInfo(packageName, publicKey); + return keyFactory.generatePublic(keySpec); } catch (NoSuchAlgorithmException e) { Log.wtf(TAG, "Could not parse public key because RSA isn't included in build"); return null; @@ -3044,8 +3133,7 @@ public class PackageParser { /* Now try it as a DSA key. */ try { final KeyFactory keyFactory = KeyFactory.getInstance("DSA"); - final PublicKey publicKey = keyFactory.generatePublic(keySpec); - return new VerifierInfo(packageName, publicKey); + return keyFactory.generatePublic(keySpec); } catch (NoSuchAlgorithmException e) { Log.wtf(TAG, "Could not parse public key because DSA isn't included in build"); return null; @@ -3294,6 +3382,12 @@ public class PackageParser { */ public ManifestDigest manifestDigest; + /** + * Data used to feed the KeySetManager + */ + public Set<PublicKey> mSigningKeys; + public Map<String, Set<PublicKey>> mKeySetMapping; + public Package(String _name) { packageName = _name; applicationInfo.packageName = _name; diff --git a/core/java/android/os/Build.java b/core/java/android/os/Build.java index 97ac862..bbad76a 100644 --- a/core/java/android/os/Build.java +++ b/core/java/android/os/Build.java @@ -436,6 +436,11 @@ public class Build { * Android 4.X: Jelly Bean MR2, the revenge of the beans. */ public static final int JELLY_BEAN_MR2 = CUR_DEVELOPMENT; + + /** + * Android X.X: Key Lime Pie, another tasty treat. + */ + public static final int KEY_LIME_PIE = CUR_DEVELOPMENT; } /** The type of build, like "user" or "eng". */ diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index 03ee9eb..562d686 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -984,6 +984,14 @@ public final class Settings { MOVED_TO_GLOBAL.add(Settings.Global.WAIT_FOR_DEBUGGER); MOVED_TO_GLOBAL.add(Settings.Global.SHOW_PROCESSES); MOVED_TO_GLOBAL.add(Settings.Global.ALWAYS_FINISH_ACTIVITIES); + MOVED_TO_GLOBAL.add(Settings.Global.TZINFO_UPDATE_CONTENT_URL); + MOVED_TO_GLOBAL.add(Settings.Global.TZINFO_UPDATE_METADATA_URL); + MOVED_TO_GLOBAL.add(Settings.Global.SELINUX_UPDATE_CONTENT_URL); + MOVED_TO_GLOBAL.add(Settings.Global.SELINUX_UPDATE_METADATA_URL); + MOVED_TO_GLOBAL.add(Settings.Global.SMS_SHORT_CODES_UPDATE_CONTENT_URL); + MOVED_TO_GLOBAL.add(Settings.Global.SMS_SHORT_CODES_UPDATE_METADATA_URL); + MOVED_TO_GLOBAL.add(Settings.Global.CERT_PIN_UPDATE_CONTENT_URL); + MOVED_TO_GLOBAL.add(Settings.Global.CERT_PIN_UPDATE_METADATA_URL); } /** @hide */ diff --git a/core/java/android/text/method/ArrowKeyMovementMethod.java b/core/java/android/text/method/ArrowKeyMovementMethod.java index 30bb447..ba6f1d4 100644 --- a/core/java/android/text/method/ArrowKeyMovementMethod.java +++ b/core/java/android/text/method/ArrowKeyMovementMethod.java @@ -56,7 +56,7 @@ public class ArrowKeyMovementMethod extends BaseMovementMethod implements Moveme if (event.getAction() == KeyEvent.ACTION_DOWN && event.getRepeatCount() == 0 && MetaKeyKeyListener.getMetaState(buffer, - MetaKeyKeyListener.META_SELECTING) != 0) { + MetaKeyKeyListener.META_SELECTING, event) != 0) { return widget.showContextMenu(); } } diff --git a/core/java/android/text/method/BaseKeyListener.java b/core/java/android/text/method/BaseKeyListener.java index 4fede32..63607fa 100644 --- a/core/java/android/text/method/BaseKeyListener.java +++ b/core/java/android/text/method/BaseKeyListener.java @@ -75,7 +75,7 @@ public abstract class BaseKeyListener extends MetaKeyKeyListener } // Alt+Backspace or Alt+ForwardDelete deletes the current line, if possible. - if (event.isAltPressed() || getMetaState(content, META_ALT_ON) == 1) { + if (getMetaState(content, META_ALT_ON, event) == 1) { if (deleteLine(view, content)) { return true; } diff --git a/core/java/android/text/method/BaseMovementMethod.java b/core/java/android/text/method/BaseMovementMethod.java index 113a4be..155a2c4 100644 --- a/core/java/android/text/method/BaseMovementMethod.java +++ b/core/java/android/text/method/BaseMovementMethod.java @@ -135,7 +135,7 @@ public class BaseMovementMethod implements MovementMethod { */ protected int getMovementMetaState(Spannable buffer, KeyEvent event) { // We ignore locked modifiers and SHIFT. - int metaState = (event.getMetaState() | MetaKeyKeyListener.getMetaState(buffer)) + int metaState = MetaKeyKeyListener.getMetaState(buffer, event) & ~(MetaKeyKeyListener.META_ALT_LOCKED | MetaKeyKeyListener.META_SYM_LOCKED); return KeyEvent.normalizeMetaState(metaState) & ~KeyEvent.META_SHIFT_MASK; } diff --git a/core/java/android/text/method/DialerKeyListener.java b/core/java/android/text/method/DialerKeyListener.java index ce51fae..bb8b0de 100644 --- a/core/java/android/text/method/DialerKeyListener.java +++ b/core/java/android/text/method/DialerKeyListener.java @@ -53,7 +53,7 @@ public class DialerKeyListener extends NumberKeyListener * from the KeyEvent. */ protected int lookup(KeyEvent event, Spannable content) { - int meta = event.getMetaState() | getMetaState(content); + int meta = getMetaState(content, event); int number = event.getNumber(); /* diff --git a/core/java/android/text/method/MetaKeyKeyListener.java b/core/java/android/text/method/MetaKeyKeyListener.java index 0a097f9..e9db5fd 100644 --- a/core/java/android/text/method/MetaKeyKeyListener.java +++ b/core/java/android/text/method/MetaKeyKeyListener.java @@ -135,6 +135,9 @@ public abstract class MetaKeyKeyListener { private static final Object SYM = new NoCopySpan.Concrete(); private static final Object SELECTING = new NoCopySpan.Concrete(); + private static final int PRESSED_RETURN_VALUE = 1; + private static final int LOCKED_RETURN_VALUE = 2; + /** * Resets all meta state to inactive. */ @@ -161,9 +164,34 @@ public abstract class MetaKeyKeyListener { } /** + * Gets the state of the meta keys for a specific key event. + * + * For input devices that use toggled key modifiers, the `toggled' state + * is stored into the text buffer. This method retrieves the meta state + * for this event, accounting for the stored state. If the event has been + * created by a device that does not support toggled key modifiers, like + * a virtual device for example, the stored state is ignored. + * + * @param text the buffer in which the meta key would have been pressed. + * @param event the event for which to evaluate the meta state. + * @return an integer in which each bit set to one represents a pressed + * or locked meta key. + */ + public static final int getMetaState(final CharSequence text, final KeyEvent event) { + int metaState = event.getMetaState(); + if (event.getKeyCharacterMap().getModifierBehavior() + == KeyCharacterMap.MODIFIER_BEHAVIOR_CHORDED_OR_TOGGLED) { + metaState |= getMetaState(text); + } + return metaState; + } + + // As META_SELECTING is @hide we should not mention it in public comments, hence the + // omission in @param meta + /** * Gets the state of a particular meta key. * - * @param meta META_SHIFT_ON, META_ALT_ON, META_SYM_ON, or META_SELECTING + * @param meta META_SHIFT_ON, META_ALT_ON, META_SYM_ON * @param text the buffer in which the meta key would have been pressed. * * @return 0 if inactive, 1 if active, 2 if locked. @@ -171,22 +199,53 @@ public abstract class MetaKeyKeyListener { public static final int getMetaState(CharSequence text, int meta) { switch (meta) { case META_SHIFT_ON: - return getActive(text, CAP, 1, 2); + return getActive(text, CAP, PRESSED_RETURN_VALUE, LOCKED_RETURN_VALUE); case META_ALT_ON: - return getActive(text, ALT, 1, 2); + return getActive(text, ALT, PRESSED_RETURN_VALUE, LOCKED_RETURN_VALUE); case META_SYM_ON: - return getActive(text, SYM, 1, 2); + return getActive(text, SYM, PRESSED_RETURN_VALUE, LOCKED_RETURN_VALUE); case META_SELECTING: - return getActive(text, SELECTING, 1, 2); + return getActive(text, SELECTING, PRESSED_RETURN_VALUE, LOCKED_RETURN_VALUE); default: return 0; } } + /** + * Gets the state of a particular meta key to use with a particular key event. + * + * If the key event has been created by a device that does not support toggled + * key modifiers, like a virtual keyboard for example, only the meta state in + * the key event is considered. + * + * @param meta META_SHIFT_ON, META_ALT_ON, META_SYM_ON + * @param text the buffer in which the meta key would have been pressed. + * @param event the event for which to evaluate the meta state. + * @return 0 if inactive, 1 if active, 2 if locked. + */ + public static final int getMetaState(final CharSequence text, final int meta, + final KeyEvent event) { + int metaState = event.getMetaState(); + if (event.getKeyCharacterMap().getModifierBehavior() + == KeyCharacterMap.MODIFIER_BEHAVIOR_CHORDED_OR_TOGGLED) { + metaState |= getMetaState(text); + } + if (META_SELECTING == meta) { + // #getMetaState(long, int) does not support META_SELECTING, but we want the same + // behavior as #getMetaState(CharSequence, int) so we need to do it here + if ((metaState & META_SELECTING) != 0) { + // META_SELECTING is only ever set to PRESSED and can't be LOCKED, so return 1 + return 1; + } + return 0; + } + return getMetaState(metaState, meta); + } + private static int getActive(CharSequence text, Object meta, int on, int lock) { if (!(text instanceof Spanned)) { @@ -430,18 +489,18 @@ public abstract class MetaKeyKeyListener { public static final int getMetaState(long state, int meta) { switch (meta) { case META_SHIFT_ON: - if ((state & META_CAP_LOCKED) != 0) return 2; - if ((state & META_SHIFT_ON) != 0) return 1; + if ((state & META_CAP_LOCKED) != 0) return LOCKED_RETURN_VALUE; + if ((state & META_SHIFT_ON) != 0) return PRESSED_RETURN_VALUE; return 0; case META_ALT_ON: - if ((state & META_ALT_LOCKED) != 0) return 2; - if ((state & META_ALT_ON) != 0) return 1; + if ((state & META_ALT_LOCKED) != 0) return LOCKED_RETURN_VALUE; + if ((state & META_ALT_ON) != 0) return PRESSED_RETURN_VALUE; return 0; case META_SYM_ON: - if ((state & META_SYM_LOCKED) != 0) return 2; - if ((state & META_SYM_ON) != 0) return 1; + if ((state & META_SYM_LOCKED) != 0) return LOCKED_RETURN_VALUE; + if ((state & META_SYM_ON) != 0) return PRESSED_RETURN_VALUE; return 0; default: @@ -599,4 +658,3 @@ public abstract class MetaKeyKeyListener { private static final int LOCKED = Spannable.SPAN_MARK_MARK | (4 << Spannable.SPAN_USER_SHIFT); } - diff --git a/core/java/android/text/method/NumberKeyListener.java b/core/java/android/text/method/NumberKeyListener.java index 5d4c732..988d566 100644 --- a/core/java/android/text/method/NumberKeyListener.java +++ b/core/java/android/text/method/NumberKeyListener.java @@ -41,7 +41,7 @@ public abstract class NumberKeyListener extends BaseKeyListener protected abstract char[] getAcceptedChars(); protected int lookup(KeyEvent event, Spannable content) { - return event.getMatch(getAcceptedChars(), event.getMetaState() | getMetaState(content)); + return event.getMatch(getAcceptedChars(), getMetaState(content, event)); } public CharSequence filter(CharSequence source, int start, int end, diff --git a/core/java/android/text/method/QwertyKeyListener.java b/core/java/android/text/method/QwertyKeyListener.java index 98316ae..0bd46bc 100644 --- a/core/java/android/text/method/QwertyKeyListener.java +++ b/core/java/android/text/method/QwertyKeyListener.java @@ -108,7 +108,7 @@ public class QwertyKeyListener extends BaseKeyListener { // QWERTY keyboard normal case - int i = event.getUnicodeChar(event.getMetaState() | getMetaState(content)); + int i = event.getUnicodeChar(getMetaState(content, event)); if (!mFullKeyboard) { int count = event.getRepeatCount(); diff --git a/core/java/android/view/IWindowManager.aidl b/core/java/android/view/IWindowManager.aidl index 8ed4a86..8007d9a 100644 --- a/core/java/android/view/IWindowManager.aidl +++ b/core/java/android/view/IWindowManager.aidl @@ -80,8 +80,8 @@ interface IWindowManager void setEventDispatching(boolean enabled); void addWindowToken(IBinder token, int type); void removeWindowToken(IBinder token); - void addAppToken(int addPos, IApplicationToken token, - int groupId, int requestedOrientation, boolean fullscreen, boolean showWhenLocked); + void addAppToken(int addPos, IApplicationToken token, int groupId, int stackId, + int requestedOrientation, boolean fullscreen, boolean showWhenLocked); void setAppGroupId(IBinder token, int groupId); void setAppOrientation(IApplicationToken token, int requestedOrientation); int getAppOrientation(IApplicationToken token); @@ -103,9 +103,6 @@ interface IWindowManager void startAppFreezingScreen(IBinder token, int configChanges); void stopAppFreezingScreen(IBinder token, boolean force); void removeAppToken(IBinder token); - void moveAppToken(int index, IBinder token); - void moveAppTokensToTop(in List<IBinder> tokens); - void moveAppTokensToBottom(in List<IBinder> tokens); // Re-evaluate the current orientation from the caller's state. // If there is a change, the new Configuration is returned and the diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index 6207faa..19a8974 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -2341,7 +2341,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, * allows it to avoid artifacts when switching in and out of that mode, at * the expense that some of its user interface may be covered by screen * decorations when they are shown. You can perform layout of your inner - * UI elements to account for the navagation system UI through the + * UI elements to account for the navigation system UI through the * {@link #fitSystemWindows(Rect)} method. */ public static final int SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION = 0x00000200; @@ -12023,6 +12023,9 @@ public class View implements Drawable.Callback, KeyEvent.Callback, resetAccessibilityStateChanged(); } + void invalidateInheritedLayoutMode(int layoutModeOfRoot) { + } + /** * @return The number of times this view has been attached to a window */ diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java index 725502d..7b75033 100644 --- a/core/java/android/view/ViewGroup.java +++ b/core/java/android/view/ViewGroup.java @@ -204,7 +204,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager /** * Either {@link #LAYOUT_MODE_CLIP_BOUNDS} or {@link #LAYOUT_MODE_OPTICAL_BOUNDS}. */ - private int mLayoutMode = DEFAULT_LAYOUT_MODE; + private int mLayoutMode = LAYOUT_MODE_UNDEFINED; /** * NOTE: If you change the flags below make sure to reflect the changes @@ -345,6 +345,14 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager private static final int FLAG_PREVENT_DISPATCH_ATTACHED_TO_WINDOW = 0x400000; /** + * When true, indicates that a layoutMode has been explicitly set, either with + * an explicit call to {@link #setLayoutMode(int)} in code or from an XML resource. + * This distinguishes the situation in which a layout mode was inherited from + * one of the ViewGroup's ancestors and cached locally. + */ + private static final int FLAG_LAYOUT_MODE_WAS_EXPLICITLY_SET = 0x800000; + + /** * Indicates which types of drawing caches are to be kept in memory. * This field should be made private, so it is hidden from the SDK. * {@hide} @@ -373,6 +381,8 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager // Layout Modes + private static final int LAYOUT_MODE_UNDEFINED = -1; + /** * This constant is a {@link #setLayoutMode(int) layoutMode}. * Clip bounds are the raw values of {@link #getLeft() left}, {@link #getTop() top}, @@ -389,7 +399,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager public static final int LAYOUT_MODE_OPTICAL_BOUNDS = 1; /** @hide */ - public static int DEFAULT_LAYOUT_MODE = LAYOUT_MODE_CLIP_BOUNDS; + public static int LAYOUT_MODE_DEFAULT = LAYOUT_MODE_CLIP_BOUNDS; /** * We clip to padding when FLAG_CLIP_TO_PADDING and FLAG_PADDING_NOT_NULL @@ -525,7 +535,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager } break; case R.styleable.ViewGroup_layoutMode: - setLayoutMode(a.getInt(attr, DEFAULT_LAYOUT_MODE)); + setLayoutMode(a.getInt(attr, LAYOUT_MODE_UNDEFINED)); break; } } @@ -3425,6 +3435,24 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager } } + private void clearCachedLayoutMode() { + if (!getBooleanFlag(FLAG_LAYOUT_MODE_WAS_EXPLICITLY_SET)) { + mLayoutMode = LAYOUT_MODE_UNDEFINED; + } + } + + @Override + protected void onAttachedToWindow() { + super.onAttachedToWindow(); + clearCachedLayoutMode(); + } + + @Override + protected void onDetachedFromWindow() { + super.onDetachedFromWindow(); + clearCachedLayoutMode(); + } + /** * Adds a view during layout. This is useful if in your onLayout() method, * you need to add more views (as does the list view for example). @@ -4717,6 +4745,10 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager setBooleanFlag(FLAG_USE_CHILD_DRAWING_ORDER, enabled); } + private boolean getBooleanFlag(int flag) { + return (mGroupFlags & flag) == flag; + } + private void setBooleanFlag(int flag, boolean value) { if (value) { mGroupFlags |= flag; @@ -4760,24 +4792,63 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager mPersistentDrawingCache = drawingCacheToKeep & PERSISTENT_ALL_CACHES; } + private void setLayoutMode(int layoutMode, boolean explicitly) { + mLayoutMode = layoutMode; + setBooleanFlag(FLAG_LAYOUT_MODE_WAS_EXPLICITLY_SET, explicitly); + } + /** - * Returns the basis of alignment during layout operations on this view group: + * Recursively traverse the view hierarchy, resetting the layoutMode of any + * descendants that had inherited a different layoutMode from a previous parent. + * Recursion terminates when a descendant's mode is: + * <ul> + * <li>Undefined</li> + * <li>The same as the root node's</li> + * <li>A mode that had been explicitly set</li> + * <ul/> + * The first two clauses are optimizations. + * @param layoutModeOfRoot + */ + @Override + void invalidateInheritedLayoutMode(int layoutModeOfRoot) { + if (mLayoutMode == LAYOUT_MODE_UNDEFINED || + mLayoutMode == layoutModeOfRoot || + getBooleanFlag(FLAG_LAYOUT_MODE_WAS_EXPLICITLY_SET)) { + return; + } + setLayoutMode(LAYOUT_MODE_UNDEFINED, false); + + // apply recursively + for (int i = 0, N = getChildCount(); i < N; i++) { + getChildAt(i).invalidateInheritedLayoutMode(layoutModeOfRoot); + } + } + + /** + * Returns the basis of alignment during layout operations on this ViewGroup: * either {@link #LAYOUT_MODE_CLIP_BOUNDS} or {@link #LAYOUT_MODE_OPTICAL_BOUNDS}. + * <p> + * If no layoutMode was explicitly set, either programmatically or in an XML resource, + * the method returns the layoutMode of the view's parent ViewGroup if such a parent exists, + * otherwise the method returns a default value of {@link #LAYOUT_MODE_CLIP_BOUNDS}. * * @return the layout mode to use during layout operations * * @see #setLayoutMode(int) */ public int getLayoutMode() { + if (mLayoutMode == LAYOUT_MODE_UNDEFINED) { + int inheritedLayoutMode = (mParent instanceof ViewGroup) ? + ((ViewGroup) mParent).getLayoutMode() : LAYOUT_MODE_DEFAULT; + setLayoutMode(inheritedLayoutMode, false); + } return mLayoutMode; } /** - * Sets the basis of alignment during the layout of this view group. + * Sets the basis of alignment during the layout of this ViewGroup. * Valid values are either {@link #LAYOUT_MODE_CLIP_BOUNDS} or * {@link #LAYOUT_MODE_OPTICAL_BOUNDS}. - * <p> - * The default is {@link #LAYOUT_MODE_CLIP_BOUNDS}. * * @param layoutMode the layout mode to use during layout operations * @@ -4785,7 +4856,8 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager */ public void setLayoutMode(int layoutMode) { if (mLayoutMode != layoutMode) { - mLayoutMode = layoutMode; + invalidateInheritedLayoutMode(layoutMode); + setLayoutMode(layoutMode, layoutMode != LAYOUT_MODE_UNDEFINED); requestLayout(); } } diff --git a/core/java/android/view/WindowManager.java b/core/java/android/view/WindowManager.java index 96ef0b4..cd39856 100644 --- a/core/java/android/view/WindowManager.java +++ b/core/java/android/view/WindowManager.java @@ -527,6 +527,14 @@ public interface WindowManager extends ViewManager { */ public static final int TYPE_RECENTS_OVERLAY = FIRST_SYSTEM_WINDOW+28; + + /** + * Window type: keyguard scrim window. Shows if keyguard needs to be restarted. + * In multiuser systems shows on all users' windows. + * @hide + */ + public static final int TYPE_KEYGUARD_SCRIM = FIRST_SYSTEM_WINDOW+29; + /** * End of types of system windows. */ diff --git a/core/java/android/view/accessibility/AccessibilityManager.java b/core/java/android/view/accessibility/AccessibilityManager.java index 732699b..04ce7e2 100644 --- a/core/java/android/view/accessibility/AccessibilityManager.java +++ b/core/java/android/view/accessibility/AccessibilityManager.java @@ -16,14 +16,17 @@ package android.view.accessibility; +import android.Manifest; import android.accessibilityservice.AccessibilityServiceInfo; import android.content.Context; +import android.content.pm.PackageManager; import android.content.pm.ServiceInfo; import android.os.Binder; import android.os.Handler; import android.os.IBinder; import android.os.Looper; import android.os.Message; +import android.os.Process; import android.os.RemoteException; import android.os.ServiceManager; import android.os.SystemClock; @@ -132,29 +135,6 @@ public final class AccessibilityManager { } /** - * Creates the singleton AccessibilityManager to be shared across users. This - * has to be called before the local AccessibilityManager is created to ensure - * it registers itself in the system correctly. - * <p> - * Note: Calling this method requires INTERACT_ACROSS_USERS_FULL or - * INTERACT_ACROSS_USERS permission. - * </p> - * @param context Context in which this manager operates. - * @throws IllegalStateException if not called before the local - * AccessibilityManager is instantiated. - * - * @hide - */ - public static void createAsSharedAcrossUsers(Context context) { - synchronized (sInstanceSync) { - if (sInstance != null) { - throw new IllegalStateException("AccessibilityManager already created."); - } - createSingletonInstance(context, UserHandle.USER_CURRENT); - } - } - - /** * Get an AccessibilityManager instance (create one if necessary). * * @param context Context in which this manager operates. @@ -164,25 +144,27 @@ public final class AccessibilityManager { public static AccessibilityManager getInstance(Context context) { synchronized (sInstanceSync) { if (sInstance == null) { - createSingletonInstance(context, UserHandle.myUserId()); + final int userId; + if (Binder.getCallingUid() == Process.SYSTEM_UID + || context.checkCallingOrSelfPermission( + Manifest.permission.INTERACT_ACROSS_USERS) + == PackageManager.PERMISSION_GRANTED + || context.checkCallingOrSelfPermission( + Manifest.permission.INTERACT_ACROSS_USERS_FULL) + == PackageManager.PERMISSION_GRANTED) { + userId = UserHandle.USER_CURRENT; + } else { + userId = UserHandle.myUserId(); + } + IBinder iBinder = ServiceManager.getService(Context.ACCESSIBILITY_SERVICE); + IAccessibilityManager service = IAccessibilityManager.Stub.asInterface(iBinder); + sInstance = new AccessibilityManager(context, service, userId); } } return sInstance; } /** - * Creates the singleton instance. - * - * @param context Context in which this manager operates. - * @param userId The user id under which to operate. - */ - private static void createSingletonInstance(Context context, int userId) { - IBinder iBinder = ServiceManager.getService(Context.ACCESSIBILITY_SERVICE); - IAccessibilityManager service = IAccessibilityManager.Stub.asInterface(iBinder); - sInstance = new AccessibilityManager(context, service, userId); - } - - /** * Create an instance. * * @param context A {@link Context}. diff --git a/core/java/android/view/inputmethod/BaseInputConnection.java b/core/java/android/view/inputmethod/BaseInputConnection.java index 7ec5398..b3ff54d 100644 --- a/core/java/android/view/inputmethod/BaseInputConnection.java +++ b/core/java/android/view/inputmethod/BaseInputConnection.java @@ -268,8 +268,9 @@ public class BaseInputConnection implements InputConnection { if (content != null) { beginBatchEdit(); removeComposingSpans(content); - endBatchEdit(); + // Note: sendCurrentText does nothing unless mDummyMode is set sendCurrentText(); + endBatchEdit(); } return true; } @@ -466,8 +467,9 @@ public class BaseInputConnection implements InputConnection { content.setSpan(COMPOSING, a, b, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE | Spanned.SPAN_COMPOSING); - endBatchEdit(); + // Note: sendCurrentText does nothing unless mDummyMode is set sendCurrentText(); + endBatchEdit(); } return true; } diff --git a/core/java/android/widget/Editor.java b/core/java/android/widget/Editor.java index 0aeef63..0c1a80e 100644 --- a/core/java/android/widget/Editor.java +++ b/core/java/android/widget/Editor.java @@ -181,7 +181,10 @@ public class Editor { // Set when this TextView gained focus with some text selected. Will start selection mode. boolean mCreatedWithASelection; - private EasyEditSpanController mEasyEditSpanController; + // The span controller helps monitoring the changes to which the Editor needs to react: + // - EasyEditSpans, for which we have some UI to display on attach and on hide + // - SelectionSpans, for which we need to call updateSelection if an IME is attached + private SpanController mSpanController; WordIterator mWordIterator; SpellChecker mSpellChecker; @@ -466,8 +469,8 @@ public class Editor { } private void hideSpanControllers() { - if (mEasyEditSpanController != null) { - mEasyEditSpanController.hide(); + if (mSpanController != null) { + mSpanController.hide(); } } @@ -1082,9 +1085,12 @@ public class Editor { mTextView.updateAfterEdit(); reportExtractedText(); } else if (ims.mCursorChanged) { - // Cheezy way to get us to report the current cursor location. + // Cheesy way to get us to report the current cursor location. mTextView.invalidateCursor(); } + // sendUpdateSelection knows to avoid sending if the selection did + // not actually change. + sendUpdateSelection(); } static final int EXTRACT_NOTHING = -2; @@ -1205,6 +1211,27 @@ public class Editor { return false; } + private void sendUpdateSelection() { + if (null != mInputMethodState && mInputMethodState.mBatchEditNesting <= 0) { + final InputMethodManager imm = InputMethodManager.peekInstance(); + if (null != imm) { + final int selectionStart = mTextView.getSelectionStart(); + final int selectionEnd = mTextView.getSelectionEnd(); + int candStart = -1; + int candEnd = -1; + if (mTextView.getText() instanceof Spannable) { + final Spannable sp = (Spannable) mTextView.getText(); + candStart = EditableInputConnection.getComposingSpanStart(sp); + candEnd = EditableInputConnection.getComposingSpanEnd(sp); + } + // InputMethodManager#updateSelection skips sending the message if + // none of the parameters have changed since the last time we called it. + imm.updateSelection(mTextView, + selectionStart, selectionEnd, candStart, candEnd); + } + } + } + void onDraw(Canvas canvas, Layout layout, Path highlight, Paint highlightPaint, int cursorOffsetVertical) { final int selectionStart = mTextView.getSelectionStart(); @@ -1222,17 +1249,6 @@ public class Editor { // input method. reported = reportExtractedText(); } - if (!reported && highlight != null) { - int candStart = -1; - int candEnd = -1; - if (mTextView.getText() instanceof Spannable) { - Spannable sp = (Spannable) mTextView.getText(); - candStart = EditableInputConnection.getComposingSpanStart(sp); - candEnd = EditableInputConnection.getComposingSpanEnd(sp); - } - imm.updateSelection(mTextView, - selectionStart, selectionEnd, candStart, candEnd); - } } if (imm.isWatchingCursor(mTextView) && highlight != null) { @@ -1859,17 +1875,18 @@ public class Editor { text.setSpan(mKeyListener, 0, textLength, Spanned.SPAN_INCLUSIVE_INCLUSIVE); } - if (mEasyEditSpanController == null) { - mEasyEditSpanController = new EasyEditSpanController(); + if (mSpanController == null) { + mSpanController = new SpanController(); } - text.setSpan(mEasyEditSpanController, 0, textLength, Spanned.SPAN_INCLUSIVE_INCLUSIVE); + text.setSpan(mSpanController, 0, textLength, Spanned.SPAN_INCLUSIVE_INCLUSIVE); } /** * Controls the {@link EasyEditSpan} monitoring when it is added, and when the related * pop-up should be displayed. + * Also monitors {@link SelectionSpan} to call back to the attached input method. */ - class EasyEditSpanController implements SpanWatcher { + class SpanController implements SpanWatcher { private static final int DISPLAY_TIMEOUT_MS = 3000; // 3 secs @@ -1877,9 +1894,18 @@ public class Editor { private Runnable mHidePopup; + // This function is pure but inner classes can't have static functions + private boolean isNonIntermediateSelectionSpan(final Spannable text, + final Object span) { + return (Selection.SELECTION_START == span || Selection.SELECTION_END == span) + && (text.getSpanFlags(span) & Spanned.SPAN_INTERMEDIATE) == 0; + } + @Override public void onSpanAdded(Spannable text, Object span, int start, int end) { - if (span instanceof EasyEditSpan) { + if (isNonIntermediateSelectionSpan(text, span)) { + sendUpdateSelection(); + } else if (span instanceof EasyEditSpan) { if (mPopupWindow == null) { mPopupWindow = new EasyEditPopupWindow(); mHidePopup = new Runnable() { @@ -1903,7 +1929,7 @@ public class Editor { int start = editable.getSpanStart(span); int end = editable.getSpanEnd(span); if (start >= 0 && end >= 0) { - sendNotification(EasyEditSpan.TEXT_DELETED, span); + sendEasySpanNotification(EasyEditSpan.TEXT_DELETED, span); mTextView.deleteText_internal(start, end); } editable.removeSpan(span); @@ -1934,7 +1960,9 @@ public class Editor { @Override public void onSpanRemoved(Spannable text, Object span, int start, int end) { - if (mPopupWindow != null && span == mPopupWindow.mEasyEditSpan) { + if (isNonIntermediateSelectionSpan(text, span)) { + sendUpdateSelection(); + } else if (mPopupWindow != null && span == mPopupWindow.mEasyEditSpan) { hide(); } } @@ -1942,9 +1970,11 @@ public class Editor { @Override public void onSpanChanged(Spannable text, Object span, int previousStart, int previousEnd, int newStart, int newEnd) { - if (mPopupWindow != null && span instanceof EasyEditSpan) { + if (isNonIntermediateSelectionSpan(text, span)) { + sendUpdateSelection(); + } else if (mPopupWindow != null && span instanceof EasyEditSpan) { EasyEditSpan easyEditSpan = (EasyEditSpan) span; - sendNotification(EasyEditSpan.TEXT_MODIFIED, easyEditSpan); + sendEasySpanNotification(EasyEditSpan.TEXT_MODIFIED, easyEditSpan); text.removeSpan(easyEditSpan); } } @@ -1956,7 +1986,7 @@ public class Editor { } } - private void sendNotification(int textChangedType, EasyEditSpan span) { + private void sendEasySpanNotification(int textChangedType, EasyEditSpan span) { try { PendingIntent pendingIntent = span.getPendingIntent(); if (pendingIntent != null) { diff --git a/core/java/android/widget/GridLayout.java b/core/java/android/widget/GridLayout.java index 85ed8db..206beb3 100644 --- a/core/java/android/widget/GridLayout.java +++ b/core/java/android/widget/GridLayout.java @@ -24,7 +24,9 @@ import android.graphics.Insets; import android.graphics.Paint; import android.util.AttributeSet; import android.util.Log; +import android.util.LogPrinter; import android.util.Pair; +import android.util.Printer; import android.view.Gravity; import android.view.View; import android.view.ViewGroup; @@ -124,6 +126,17 @@ import static java.lang.Math.min; * GridLayout's algorithms favour rows and columns that are closer to its <em>right</em> * and <em>bottom</em> edges. * + * <h4>Interpretation of GONE</h4> + * + * For layout purposes, GridLayout treats views whose visibility status is + * {@link View#GONE GONE}, as having zero width and height. This is subtly different from + * the policy of ignoring views that are marked as GONE outright. If, for example, a gone-marked + * view was alone in a column, that column would itself collapse to zero width if and only if + * no gravity was defined on the view. If gravity was defined, then the gone-marked + * view has no effect on the layout and the container should be laid out as if the view + * had never been added to it. + * These statements apply equally to rows as well as columns, and to groups of rows or columns. + * * <h5>Limitations</h5> * * GridLayout does not provide support for the principle of <em>weight</em>, as defined in @@ -208,10 +221,15 @@ public class GridLayout extends ViewGroup { // Misc constants - static final String TAG = GridLayout.class.getName(); static final int MAX_SIZE = 100000; static final int DEFAULT_CONTAINER_MARGIN = 0; static final int UNINITIALIZED_HASH = 0; + static final Printer LOG_PRINTER = new LogPrinter(Log.DEBUG, GridLayout.class.getName()); + static final Printer NO_PRINTER = new Printer() { + @Override + public void println(String x) { + } + }; // Defaults @@ -240,6 +258,7 @@ public class GridLayout extends ViewGroup { int alignmentMode = DEFAULT_ALIGNMENT_MODE; int defaultGap; int lastLayoutParamsHashCode = UNINITIALIZED_HASH; + Printer printer = LOG_PRINTER; // Constructors @@ -556,6 +575,29 @@ public class GridLayout extends ViewGroup { requestLayout(); } + /** + * Return the printer that will log diagnostics from this layout. + * + * @see #setPrinter(android.util.Printer) + * + * @return the printer associated with this view + */ + public Printer getPrinter() { + return printer; + } + + /** + * Set the printer that will log diagnostics from this layout. + * The default value is created by {@link android.util.LogPrinter}. + * + * @param printer the printer associated with this layout + * + * @see #getPrinter() + */ + public void setPrinter(Printer printer) { + this.printer = (printer == null) ? NO_PRINTER : printer; + } + // Static utility methods static int max2(int[] a, int valueIfEmpty) { @@ -915,7 +957,7 @@ public class GridLayout extends ViewGroup { protected void onChildVisibilityChanged(View child, int oldVisibility, int newVisibility) { super.onChildVisibilityChanged(child, oldVisibility, newVisibility); if (oldVisibility == GONE || newVisibility == GONE) { - invalidateStructure(); + invalidateStructure(); } } @@ -935,8 +977,8 @@ public class GridLayout extends ViewGroup { validateLayoutParams(); lastLayoutParamsHashCode = computeLayoutParamsHashCode(); } else if (lastLayoutParamsHashCode != computeLayoutParamsHashCode()) { - Log.w(TAG, "The fields of some layout parameters were modified in between layout " + - "operations. Check the javadoc for GridLayout.LayoutParams#rowSpec."); + printer.println("The fields of some layout parameters were modified in between " + + "layout operations. Check the javadoc for GridLayout.LayoutParams#rowSpec."); invalidateStructure(); consistencyCheck(); } @@ -1235,6 +1277,7 @@ public class GridLayout extends ViewGroup { Assoc<Spec, Bounds> assoc = Assoc.of(Spec.class, Bounds.class); for (int i = 0, N = getChildCount(); i < N; i++) { View c = getChildAt(i); + // we must include views that are GONE here, see introductory javadoc LayoutParams lp = getLayoutParams(c); Spec spec = horizontal ? lp.columnSpec : lp.rowSpec; Bounds bounds = getAlignment(spec.alignment, horizontal).getBounds(); @@ -1250,6 +1293,7 @@ public class GridLayout extends ViewGroup { } for (int i = 0, N = getChildCount(); i < N; i++) { View c = getChildAt(i); + // we must include views that are GONE here, see introductory javadoc LayoutParams lp = getLayoutParams(c); Spec spec = horizontal ? lp.columnSpec : lp.rowSpec; groupBounds.getValue(i).include(GridLayout.this, c, spec, this); @@ -1516,8 +1560,8 @@ public class GridLayout extends ViewGroup { removed.add(arc); } } - Log.d(TAG, axisName + " constraints: " + arcsToString(culprits) + " are inconsistent; " - + "permanently removing: " + arcsToString(removed) + ". "); + printer.println(axisName + " constraints: " + arcsToString(culprits) + + " are inconsistent; permanently removing: " + arcsToString(removed) + ". "); } /* @@ -2655,6 +2699,9 @@ public class GridLayout extends ViewGroup { @Override public int getAlignmentValue(View view, int viewSize, int mode) { + if (view.getVisibility() == GONE) { + return 0; + } int baseline = view.getBaseline(); return baseline == -1 ? UNDEFINED : baseline; } diff --git a/core/java/android/widget/RemoteViewsAdapter.java b/core/java/android/widget/RemoteViewsAdapter.java index aeee111..3ff0cee 100644 --- a/core/java/android/widget/RemoteViewsAdapter.java +++ b/core/java/android/widget/RemoteViewsAdapter.java @@ -22,9 +22,11 @@ import java.util.HashMap; import java.util.HashSet; import java.util.LinkedList; +import android.Manifest; import android.appwidget.AppWidgetManager; import android.content.Context; import android.content.Intent; +import android.content.pm.PackageManager; import android.os.Handler; import android.os.HandlerThread; import android.os.IBinder; @@ -34,6 +36,7 @@ import android.os.Process; import android.os.RemoteException; import android.os.UserHandle; import android.util.Log; +import android.util.Slog; import android.view.LayoutInflater; import android.view.View; import android.view.View.MeasureSpec; @@ -50,9 +53,11 @@ import com.android.internal.widget.LockPatternUtils; */ /** @hide */ public class RemoteViewsAdapter extends BaseAdapter implements Handler.Callback { + private static final String MULTI_USER_PERM = Manifest.permission.INTERACT_ACROSS_USERS_FULL; + private static final String TAG = "RemoteViewsAdapter"; - // The max number of items in the cache + // The max number of items in the cache private static final int sDefaultCacheSize = 40; // The delay (in millis) to wait until attempting to unbind from a service after a request. // This ensures that we don't stay continually bound to the service and that it can be destroyed @@ -63,7 +68,7 @@ public class RemoteViewsAdapter extends BaseAdapter implements Handler.Callback private static final int sDefaultLoadingViewHeight = 50; // Type defs for controlling different messages across the main and worker message queues - private static final int sDefaultMessageType = 0; + private static final int sDefaultMessageType = 0; private static final int sUnbindServiceMessageType = 1; private final Context mContext; @@ -90,7 +95,7 @@ public class RemoteViewsAdapter extends BaseAdapter implements Handler.Callback private Handler mMainQueue; // We cache the FixedSizeRemoteViewsCaches across orientation. These are the related data - // structures; + // structures; private static final HashMap<RemoteViewsCacheKey, FixedSizeRemoteViewsCache> sCachedRemoteViewsCaches = new HashMap<RemoteViewsCacheKey, @@ -155,13 +160,12 @@ public class RemoteViewsAdapter extends BaseAdapter implements Handler.Callback try { RemoteViewsAdapter adapter; final AppWidgetManager mgr = AppWidgetManager.getInstance(context); - if (Process.myUid() == Process.SYSTEM_UID - && (adapter = mAdapter.get()) != null) { + if ((adapter = mAdapter.get()) != null) { + checkInteractAcrossUsersPermission(context, adapter.mUserId); mgr.bindRemoteViewsService(appWidgetId, intent, asBinder(), new UserHandle(adapter.mUserId)); } else { - mgr.bindRemoteViewsService(appWidgetId, intent, asBinder(), - Process.myUserHandle()); + Slog.w(TAG, "bind: adapter was null"); } mIsConnecting = true; } catch (Exception e) { @@ -176,12 +180,12 @@ public class RemoteViewsAdapter extends BaseAdapter implements Handler.Callback try { RemoteViewsAdapter adapter; final AppWidgetManager mgr = AppWidgetManager.getInstance(context); - if (Process.myUid() == Process.SYSTEM_UID - && (adapter = mAdapter.get()) != null) { + if ((adapter = mAdapter.get()) != null) { + checkInteractAcrossUsersPermission(context, adapter.mUserId); mgr.unbindRemoteViewsService(appWidgetId, intent, new UserHandle(adapter.mUserId)); } else { - mgr.unbindRemoteViewsService(appWidgetId, intent, Process.myUserHandle()); + Slog.w(TAG, "unbind: adapter was null"); } mIsConnecting = false; } catch (Exception e) { @@ -263,7 +267,7 @@ public class RemoteViewsAdapter extends BaseAdapter implements Handler.Callback // Clear the main/worker queues final RemoteViewsAdapter adapter = mAdapter.get(); if (adapter == null) return; - + adapter.mMainQueue.post(new Runnable() { @Override public void run() { @@ -828,11 +832,9 @@ public class RemoteViewsAdapter extends BaseAdapter implements Handler.Callback } mRequestedViews = new RemoteViewsFrameLayoutRefSet(); - if (Process.myUid() == Process.SYSTEM_UID) { - mUserId = new LockPatternUtils(context).getCurrentUser(); - } else { - mUserId = UserHandle.myUserId(); - } + checkInteractAcrossUsersPermission(context, UserHandle.myUserId()); + mUserId = context.getUserId(); + // Strip the previously injected app widget id from service intent if (intent.hasExtra(RemoteViews.EXTRA_REMOTEADAPTER_APPWIDGET_ID)) { intent.removeExtra(RemoteViews.EXTRA_REMOTEADAPTER_APPWIDGET_ID); @@ -876,6 +878,15 @@ public class RemoteViewsAdapter extends BaseAdapter implements Handler.Callback } } + private static void checkInteractAcrossUsersPermission(Context context, int userId) { + if (context.getUserId() != userId + && context.checkCallingOrSelfPermission(MULTI_USER_PERM) + != PackageManager.PERMISSION_GRANTED) { + throw new SecurityException("Must have permission " + MULTI_USER_PERM + + " to inflate another user's widget"); + } + } + @Override protected void finalize() throws Throwable { try { diff --git a/core/java/android/widget/ScrollBarDrawable.java b/core/java/android/widget/ScrollBarDrawable.java index 93a1179..9886bc3 100644 --- a/core/java/android/widget/ScrollBarDrawable.java +++ b/core/java/android/widget/ScrollBarDrawable.java @@ -226,6 +226,12 @@ public class ScrollBarDrawable extends Drawable { } @Override + public int getAlpha() { + // All elements should have same alpha, just return one of them + return mVerticalThumb.getAlpha(); + } + + @Override public void setColorFilter(ColorFilter cf) { if (mVerticalTrack != null) { mVerticalTrack.setColorFilter(cf); diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java index 52b7a81..76690f7 100644 --- a/core/java/android/widget/TextView.java +++ b/core/java/android/widget/TextView.java @@ -284,6 +284,13 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener private boolean mPreDrawRegistered; + // A flag to prevent repeated movements from escaping the enclosing text view. The idea here is + // that if a user is holding down a movement key to traverse text, we shouldn't also traverse + // the view hierarchy. On the other hand, if the user is using the movement key to traverse views + // (i.e. the first movement was to traverse out of this view, or this view was traversed into by + // the user holding the movement key down) then we shouldn't prevent the focus from changing. + private boolean mPreventDefaultMovement; + private TextUtils.TruncateAt mEllipsize; static class Drawables { @@ -5268,7 +5275,6 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener public boolean onKeyDown(int keyCode, KeyEvent event) { int which = doKeyDown(keyCode, event, null); if (which == 0) { - // Go through default dispatching. return super.onKeyDown(keyCode, event); } @@ -5366,6 +5372,15 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener return 0; } + // If this is the initial keydown, we don't want to prevent a movement away from this view. + // While this shouldn't be necessary because any time we're preventing default movement we + // should be restricting the focus to remain within this view, thus we'll also receive + // the key up event, occasionally key up events will get dropped and we don't want to + // prevent the user from traversing out of this on the next key down. + if (event.getRepeatCount() == 0 && !KeyEvent.isModifierKey(keyCode)) { + mPreventDefaultMovement = false; + } + switch (keyCode) { case KeyEvent.KEYCODE_ENTER: if (event.hasNoModifiers()) { @@ -5474,12 +5489,16 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener } } if (doDown) { - if (mMovement.onKeyDown(this, (Spannable)mText, keyCode, event)) + if (mMovement.onKeyDown(this, (Spannable)mText, keyCode, event)) { + if (event.getRepeatCount() == 0 && !KeyEvent.isModifierKey(keyCode)) { + mPreventDefaultMovement = true; + } return 2; + } } } - return 0; + return mPreventDefaultMovement && !KeyEvent.isModifierKey(keyCode) ? -1 : 0; } /** @@ -5512,6 +5531,10 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener return super.onKeyUp(keyCode, event); } + if (!KeyEvent.isModifierKey(keyCode)) { + mPreventDefaultMovement = false; + } + switch (keyCode) { case KeyEvent.KEYCODE_DPAD_CENTER: if (event.hasNoModifiers()) { diff --git a/core/java/com/android/internal/policy/IKeyguardExitCallback.aidl b/core/java/com/android/internal/policy/IKeyguardExitCallback.aidl new file mode 100644 index 0000000..3702712 --- /dev/null +++ b/core/java/com/android/internal/policy/IKeyguardExitCallback.aidl @@ -0,0 +1,20 @@ +/* + * Copyright (C) 2013 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 com.android.internal.policy; + +oneway interface IKeyguardExitCallback { + void onKeyguardExitResult(boolean success); +} diff --git a/core/java/com/android/internal/policy/IKeyguardService.aidl b/core/java/com/android/internal/policy/IKeyguardService.aidl new file mode 100644 index 0000000..880464d --- /dev/null +++ b/core/java/com/android/internal/policy/IKeyguardService.aidl @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2013 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 com.android.internal.policy; + +import com.android.internal.policy.IKeyguardShowCallback; +import com.android.internal.policy.IKeyguardExitCallback; + +import android.os.Bundle; + +interface IKeyguardService { + boolean isShowing(); + boolean isSecure(); + boolean isShowingAndNotHidden(); + boolean isInputRestricted(); + boolean isDismissable(); + oneway void verifyUnlock(IKeyguardExitCallback callback); + oneway void keyguardDone(boolean authenticated, boolean wakeup); + oneway void setHidden(boolean isHidden); + oneway void dismiss(); + oneway void onWakeKeyWhenKeyguardShowing(int keyCode); + oneway void onWakeMotionWhenKeyguardShowing(); + oneway void onDreamingStarted(); + oneway void onDreamingStopped(); + oneway void onScreenTurnedOff(int reason); + oneway void onScreenTurnedOn(IKeyguardShowCallback callback); + oneway void setKeyguardEnabled(boolean enabled); + oneway void onSystemReady(); + oneway void doKeyguardTimeout(in Bundle options); + oneway void setCurrentUser(int userId); + oneway void showAssistant(); +} diff --git a/core/java/com/android/internal/policy/IKeyguardShowCallback.aidl b/core/java/com/android/internal/policy/IKeyguardShowCallback.aidl new file mode 100644 index 0000000..a2784d9 --- /dev/null +++ b/core/java/com/android/internal/policy/IKeyguardShowCallback.aidl @@ -0,0 +1,20 @@ +/* + * Copyright (C) 2013 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 com.android.internal.policy; + +oneway interface IKeyguardShowCallback { + void onShown(IBinder windowToken); +} diff --git a/core/java/com/android/internal/widget/LockPatternUtils.java b/core/java/com/android/internal/widget/LockPatternUtils.java index 555c7c2..9b12aa0 100644 --- a/core/java/com/android/internal/widget/LockPatternUtils.java +++ b/core/java/com/android/internal/widget/LockPatternUtils.java @@ -16,6 +16,7 @@ package com.android.internal.widget; +import android.Manifest; import android.app.ActivityManagerNative; import android.app.admin.DevicePolicyManager; import android.appwidget.AppWidgetManager; @@ -145,6 +146,8 @@ public class LockPatternUtils { private DevicePolicyManager mDevicePolicyManager; private ILockSettings mLockSettingsService; + private final boolean mMultiUserMode; + // The current user is set by KeyguardViewMediator and shared by all LockPatternUtils. private static volatile int sCurrentUserId = UserHandle.USER_NULL; @@ -166,6 +169,12 @@ public class LockPatternUtils { public LockPatternUtils(Context context) { mContext = context; mContentResolver = context.getContentResolver(); + + // If this is being called by the system or by an application like keyguard that + // has permision INTERACT_ACROSS_USERS, then LockPatternUtils will operate in multi-user + // mode where calls are for the current user rather than the user of the calling process. + mMultiUserMode = context.checkCallingOrSelfPermission( + Manifest.permission.INTERACT_ACROSS_USERS_FULL) == PackageManager.PERMISSION_GRANTED; } private ILockSettings getLockSettings() { @@ -260,13 +269,12 @@ public class LockPatternUtils { } private int getCurrentOrCallingUserId() { - int callingUid = Binder.getCallingUid(); - if (callingUid == android.os.Process.SYSTEM_UID) { + if (mMultiUserMode) { // TODO: This is a little inefficient. See if all users of this are able to // handle USER_CURRENT and pass that instead. return getCurrentUser(); } else { - return UserHandle.getUserId(callingUid); + return UserHandle.getCallingUserId(); } } diff --git a/core/java/com/android/internal/widget/TransportControlView.java b/core/java/com/android/internal/widget/TransportControlView.java deleted file mode 100644 index 8ebe94c..0000000 --- a/core/java/com/android/internal/widget/TransportControlView.java +++ /dev/null @@ -1,515 +0,0 @@ -/* - * 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. - */ - -package com.android.internal.widget; - -import java.lang.ref.WeakReference; - -import com.android.internal.widget.LockScreenWidgetCallback; -import com.android.internal.widget.LockScreenWidgetInterface; - -import android.app.PendingIntent; -import android.app.PendingIntent.CanceledException; -import android.content.Context; -import android.content.Intent; -import android.graphics.Bitmap; -import android.media.AudioManager; -import android.media.MediaMetadataRetriever; -import android.media.RemoteControlClient; -import android.media.IRemoteControlDisplay; -import android.os.Bundle; -import android.os.Handler; -import android.os.Message; -import android.os.Parcel; -import android.os.Parcelable; -import android.os.RemoteException; -import android.os.SystemClock; -import android.text.Spannable; -import android.text.TextUtils; -import android.text.style.ForegroundColorSpan; -import android.util.AttributeSet; -import android.util.Log; -import android.view.KeyEvent; -import android.view.View; -import android.view.View.OnClickListener; -import android.widget.FrameLayout; -import android.widget.ImageView; -import android.widget.TextView; - - -import com.android.internal.R; - -public class TransportControlView extends FrameLayout implements OnClickListener, - LockScreenWidgetInterface { - - private static final int MSG_UPDATE_STATE = 100; - private static final int MSG_SET_METADATA = 101; - private static final int MSG_SET_TRANSPORT_CONTROLS = 102; - private static final int MSG_SET_ARTWORK = 103; - private static final int MSG_SET_GENERATION_ID = 104; - private static final int MAXDIM = 512; - private static final int DISPLAY_TIMEOUT_MS = 5000; // 5s - protected static final boolean DEBUG = false; - protected static final String TAG = "TransportControlView"; - - private ImageView mAlbumArt; - private TextView mTrackTitle; - private ImageView mBtnPrev; - private ImageView mBtnPlay; - private ImageView mBtnNext; - private int mClientGeneration; - private Metadata mMetadata = new Metadata(); - private boolean mAttached; - private PendingIntent mClientIntent; - private int mTransportControlFlags; - private int mCurrentPlayState; - private AudioManager mAudioManager; - private LockScreenWidgetCallback mWidgetCallbacks; - private IRemoteControlDisplayWeak mIRCD; - - /** - * The metadata which should be populated into the view once we've been attached - */ - private Bundle mPopulateMetadataWhenAttached = null; - - // This handler is required to ensure messages from IRCD are handled in sequence and on - // the UI thread. - private Handler mHandler = new Handler() { - @Override - public void handleMessage(Message msg) { - switch (msg.what) { - case MSG_UPDATE_STATE: - if (mClientGeneration == msg.arg1) updatePlayPauseState(msg.arg2); - break; - - case MSG_SET_METADATA: - if (mClientGeneration == msg.arg1) updateMetadata((Bundle) msg.obj); - break; - - case MSG_SET_TRANSPORT_CONTROLS: - if (mClientGeneration == msg.arg1) updateTransportControls(msg.arg2); - break; - - case MSG_SET_ARTWORK: - if (mClientGeneration == msg.arg1) { - if (mMetadata.bitmap != null) { - mMetadata.bitmap.recycle(); - } - mMetadata.bitmap = (Bitmap) msg.obj; - mAlbumArt.setImageBitmap(mMetadata.bitmap); - } - break; - - case MSG_SET_GENERATION_ID: - if (msg.arg2 != 0) { - // This means nobody is currently registered. Hide the view. - if (mWidgetCallbacks != null) { - mWidgetCallbacks.requestHide(TransportControlView.this); - } - } - if (DEBUG) Log.v(TAG, "New genId = " + msg.arg1 + ", clearing = " + msg.arg2); - mClientGeneration = msg.arg1; - mClientIntent = (PendingIntent) msg.obj; - break; - - } - } - }; - - /** - * This class is required to have weak linkage to the current TransportControlView - * because the remote process can hold a strong reference to this binder object and - * we can't predict when it will be GC'd in the remote process. Without this code, it - * would allow a heavyweight object to be held on this side of the binder when there's - * no requirement to run a GC on the other side. - */ - private static class IRemoteControlDisplayWeak extends IRemoteControlDisplay.Stub { - private WeakReference<Handler> mLocalHandler; - - IRemoteControlDisplayWeak(Handler handler) { - mLocalHandler = new WeakReference<Handler>(handler); - } - - public void setPlaybackState(int generationId, int state, long stateChangeTimeMs, - long currentPosMs, float speed) { - Handler handler = mLocalHandler.get(); - if (handler != null) { - handler.obtainMessage(MSG_UPDATE_STATE, generationId, state).sendToTarget(); - } - } - - public void setMetadata(int generationId, Bundle metadata) { - Handler handler = mLocalHandler.get(); - if (handler != null) { - handler.obtainMessage(MSG_SET_METADATA, generationId, 0, metadata).sendToTarget(); - } - } - - public void setTransportControlFlags(int generationId, int flags) { - Handler handler = mLocalHandler.get(); - if (handler != null) { - handler.obtainMessage(MSG_SET_TRANSPORT_CONTROLS, generationId, flags) - .sendToTarget(); - } - } - - public void setArtwork(int generationId, Bitmap bitmap) { - Handler handler = mLocalHandler.get(); - if (handler != null) { - handler.obtainMessage(MSG_SET_ARTWORK, generationId, 0, bitmap).sendToTarget(); - } - } - - public void setAllMetadata(int generationId, Bundle metadata, Bitmap bitmap) { - Handler handler = mLocalHandler.get(); - if (handler != null) { - handler.obtainMessage(MSG_SET_METADATA, generationId, 0, metadata).sendToTarget(); - handler.obtainMessage(MSG_SET_ARTWORK, generationId, 0, bitmap).sendToTarget(); - } - } - - public void setCurrentClientId(int clientGeneration, PendingIntent mediaIntent, - boolean clearing) throws RemoteException { - Handler handler = mLocalHandler.get(); - if (handler != null) { - handler.obtainMessage(MSG_SET_GENERATION_ID, - clientGeneration, (clearing ? 1 : 0), mediaIntent).sendToTarget(); - } - } - }; - - public TransportControlView(Context context, AttributeSet attrs) { - super(context, attrs); - if (DEBUG) Log.v(TAG, "Create TCV " + this); - mAudioManager = new AudioManager(mContext); - mCurrentPlayState = RemoteControlClient.PLAYSTATE_NONE; // until we get a callback - mIRCD = new IRemoteControlDisplayWeak(mHandler); - } - - private void updateTransportControls(int transportControlFlags) { - mTransportControlFlags = transportControlFlags; - } - - @Override - public void onFinishInflate() { - super.onFinishInflate(); - mTrackTitle = (TextView) findViewById(R.id.title); - mTrackTitle.setSelected(true); // enable marquee - mAlbumArt = (ImageView) findViewById(R.id.albumart); - mBtnPrev = (ImageView) findViewById(R.id.btn_prev); - mBtnPlay = (ImageView) findViewById(R.id.btn_play); - mBtnNext = (ImageView) findViewById(R.id.btn_next); - final View buttons[] = { mBtnPrev, mBtnPlay, mBtnNext }; - for (View view : buttons) { - view.setOnClickListener(this); - } - } - - @Override - public void onAttachedToWindow() { - super.onAttachedToWindow(); - if (mPopulateMetadataWhenAttached != null) { - updateMetadata(mPopulateMetadataWhenAttached); - mPopulateMetadataWhenAttached = null; - } - if (!mAttached) { - if (DEBUG) Log.v(TAG, "Registering TCV " + this); - mAudioManager.registerRemoteControlDisplay(mIRCD); - } - mAttached = true; - } - - @Override - public void onDetachedFromWindow() { - super.onDetachedFromWindow(); - if (mAttached) { - if (DEBUG) Log.v(TAG, "Unregistering TCV " + this); - mAudioManager.unregisterRemoteControlDisplay(mIRCD); - } - mAttached = false; - } - - @Override - protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - super.onMeasure(widthMeasureSpec, heightMeasureSpec); - int dim = Math.min(MAXDIM, Math.max(getWidth(), getHeight())); -// Log.v(TAG, "setting max bitmap size: " + dim + "x" + dim); -// mAudioManager.remoteControlDisplayUsesBitmapSize(mIRCD, dim, dim); - } - - class Metadata { - private String artist; - private String trackTitle; - private String albumTitle; - private Bitmap bitmap; - - public String toString() { - return "Metadata[artist=" + artist + " trackTitle=" + trackTitle + " albumTitle=" + albumTitle + "]"; - } - } - - private String getMdString(Bundle data, int id) { - return data.getString(Integer.toString(id)); - } - - private void updateMetadata(Bundle data) { - if (mAttached) { - mMetadata.artist = getMdString(data, MediaMetadataRetriever.METADATA_KEY_ALBUMARTIST); - mMetadata.trackTitle = getMdString(data, MediaMetadataRetriever.METADATA_KEY_TITLE); - mMetadata.albumTitle = getMdString(data, MediaMetadataRetriever.METADATA_KEY_ALBUM); - populateMetadata(); - } else { - mPopulateMetadataWhenAttached = data; - } - } - - /** - * Populates the given metadata into the view - */ - private void populateMetadata() { - StringBuilder sb = new StringBuilder(); - int trackTitleLength = 0; - if (!TextUtils.isEmpty(mMetadata.trackTitle)) { - sb.append(mMetadata.trackTitle); - trackTitleLength = mMetadata.trackTitle.length(); - } - if (!TextUtils.isEmpty(mMetadata.artist)) { - if (sb.length() != 0) { - sb.append(" - "); - } - sb.append(mMetadata.artist); - } - if (!TextUtils.isEmpty(mMetadata.albumTitle)) { - if (sb.length() != 0) { - sb.append(" - "); - } - sb.append(mMetadata.albumTitle); - } - mTrackTitle.setText(sb.toString(), TextView.BufferType.SPANNABLE); - Spannable str = (Spannable) mTrackTitle.getText(); - if (trackTitleLength != 0) { - str.setSpan(new ForegroundColorSpan(0xffffffff), 0, trackTitleLength, - Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); - trackTitleLength++; - } - if (sb.length() > trackTitleLength) { - str.setSpan(new ForegroundColorSpan(0x7fffffff), trackTitleLength, sb.length(), - Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); - } - - mAlbumArt.setImageBitmap(mMetadata.bitmap); - final int flags = mTransportControlFlags; - setVisibilityBasedOnFlag(mBtnPrev, flags, RemoteControlClient.FLAG_KEY_MEDIA_PREVIOUS); - setVisibilityBasedOnFlag(mBtnNext, flags, RemoteControlClient.FLAG_KEY_MEDIA_NEXT); - setVisibilityBasedOnFlag(mBtnPlay, flags, - RemoteControlClient.FLAG_KEY_MEDIA_PLAY - | RemoteControlClient.FLAG_KEY_MEDIA_PAUSE - | RemoteControlClient.FLAG_KEY_MEDIA_PLAY_PAUSE - | RemoteControlClient.FLAG_KEY_MEDIA_STOP); - - updatePlayPauseState(mCurrentPlayState); - } - - private static void setVisibilityBasedOnFlag(View view, int flags, int flag) { - if ((flags & flag) != 0) { - view.setVisibility(View.VISIBLE); - } else { - view.setVisibility(View.GONE); - } - } - - private void updatePlayPauseState(int state) { - if (DEBUG) Log.v(TAG, - "updatePlayPauseState(), old=" + mCurrentPlayState + ", state=" + state); - if (state == mCurrentPlayState) { - return; - } - final int imageResId; - final int imageDescId; - boolean showIfHidden = false; - switch (state) { - case RemoteControlClient.PLAYSTATE_ERROR: - imageResId = com.android.internal.R.drawable.stat_sys_warning; - // TODO use more specific image description string for warning, but here the "play" - // message is still valid because this button triggers a play command. - imageDescId = com.android.internal.R.string.lockscreen_transport_play_description; - break; - - case RemoteControlClient.PLAYSTATE_PLAYING: - imageResId = com.android.internal.R.drawable.ic_media_pause; - imageDescId = com.android.internal.R.string.lockscreen_transport_pause_description; - showIfHidden = true; - break; - - case RemoteControlClient.PLAYSTATE_BUFFERING: - imageResId = com.android.internal.R.drawable.ic_media_stop; - imageDescId = com.android.internal.R.string.lockscreen_transport_stop_description; - showIfHidden = true; - break; - - case RemoteControlClient.PLAYSTATE_PAUSED: - default: - imageResId = com.android.internal.R.drawable.ic_media_play; - imageDescId = com.android.internal.R.string.lockscreen_transport_play_description; - showIfHidden = false; - break; - } - mBtnPlay.setImageResource(imageResId); - mBtnPlay.setContentDescription(getResources().getString(imageDescId)); - if (showIfHidden && mWidgetCallbacks != null && !mWidgetCallbacks.isVisible(this)) { - mWidgetCallbacks.requestShow(this); - } - mCurrentPlayState = state; - } - - static class SavedState extends BaseSavedState { - boolean wasShowing; - - SavedState(Parcelable superState) { - super(superState); - } - - private SavedState(Parcel in) { - super(in); - this.wasShowing = in.readInt() != 0; - } - - @Override - public void writeToParcel(Parcel out, int flags) { - super.writeToParcel(out, flags); - out.writeInt(this.wasShowing ? 1 : 0); - } - - 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]; - } - }; - } - - @Override - public Parcelable onSaveInstanceState() { - if (DEBUG) Log.v(TAG, "onSaveInstanceState()"); - Parcelable superState = super.onSaveInstanceState(); - SavedState ss = new SavedState(superState); - ss.wasShowing = mWidgetCallbacks != null && mWidgetCallbacks.isVisible(this); - return ss; - } - - @Override - public void onRestoreInstanceState(Parcelable state) { - if (DEBUG) Log.v(TAG, "onRestoreInstanceState()"); - if (!(state instanceof SavedState)) { - super.onRestoreInstanceState(state); - return; - } - SavedState ss = (SavedState) state; - super.onRestoreInstanceState(ss.getSuperState()); - if (ss.wasShowing && mWidgetCallbacks != null) { - mWidgetCallbacks.requestShow(this); - } - } - - public void onClick(View v) { - int keyCode = -1; - if (v == mBtnPrev) { - keyCode = KeyEvent.KEYCODE_MEDIA_PREVIOUS; - } else if (v == mBtnNext) { - keyCode = KeyEvent.KEYCODE_MEDIA_NEXT; - } else if (v == mBtnPlay) { - keyCode = KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE; - - } - if (keyCode != -1) { - sendMediaButtonClick(keyCode); - if (mWidgetCallbacks != null) { - mWidgetCallbacks.userActivity(this); - } - } - } - - private void sendMediaButtonClick(int keyCode) { - if (mClientIntent == null) { - // Shouldn't be possible because this view should be hidden in this case. - Log.e(TAG, "sendMediaButtonClick(): No client is currently registered"); - return; - } - // use the registered PendingIntent that will be processed by the registered - // media button event receiver, which is the component of mClientIntent - KeyEvent keyEvent = new KeyEvent(KeyEvent.ACTION_DOWN, keyCode); - Intent intent = new Intent(Intent.ACTION_MEDIA_BUTTON); - intent.putExtra(Intent.EXTRA_KEY_EVENT, keyEvent); - try { - mClientIntent.send(getContext(), 0, intent); - } catch (CanceledException e) { - Log.e(TAG, "Error sending intent for media button down: "+e); - e.printStackTrace(); - } - - keyEvent = new KeyEvent(KeyEvent.ACTION_UP, keyCode); - intent = new Intent(Intent.ACTION_MEDIA_BUTTON); - intent.putExtra(Intent.EXTRA_KEY_EVENT, keyEvent); - try { - mClientIntent.send(getContext(), 0, intent); - } catch (CanceledException e) { - Log.e(TAG, "Error sending intent for media button up: "+e); - e.printStackTrace(); - } - } - - public void setCallback(LockScreenWidgetCallback callback) { - mWidgetCallbacks = callback; - } - - public boolean providesClock() { - return false; - } - - private boolean wasPlayingRecently(int state, long stateChangeTimeMs) { - switch (state) { - case RemoteControlClient.PLAYSTATE_PLAYING: - case RemoteControlClient.PLAYSTATE_FAST_FORWARDING: - case RemoteControlClient.PLAYSTATE_REWINDING: - case RemoteControlClient.PLAYSTATE_SKIPPING_FORWARDS: - case RemoteControlClient.PLAYSTATE_SKIPPING_BACKWARDS: - case RemoteControlClient.PLAYSTATE_BUFFERING: - // actively playing or about to play - return true; - case RemoteControlClient.PLAYSTATE_NONE: - return false; - case RemoteControlClient.PLAYSTATE_STOPPED: - case RemoteControlClient.PLAYSTATE_PAUSED: - case RemoteControlClient.PLAYSTATE_ERROR: - // we have stopped playing, check how long ago - if (DEBUG) { - if ((SystemClock.elapsedRealtime() - stateChangeTimeMs) < DISPLAY_TIMEOUT_MS) { - Log.v(TAG, "wasPlayingRecently: time < TIMEOUT was playing recently"); - } else { - Log.v(TAG, "wasPlayingRecently: time > TIMEOUT"); - } - } - return ((SystemClock.elapsedRealtime() - stateChangeTimeMs) < DISPLAY_TIMEOUT_MS); - default: - Log.e(TAG, "Unknown playback state " + state + " in wasPlayingRecently()"); - return false; - } - } -} diff --git a/core/java/com/android/internal/widget/multiwaveview/TargetDrawable.java b/core/java/com/android/internal/widget/multiwaveview/TargetDrawable.java index 30f5f2f..16bec16 100644 --- a/core/java/com/android/internal/widget/multiwaveview/TargetDrawable.java +++ b/core/java/com/android/internal/widget/multiwaveview/TargetDrawable.java @@ -46,36 +46,6 @@ public class TargetDrawable { private boolean mEnabled = true; private final int mResourceId; - /* package */ static class DrawableWithAlpha extends Drawable { - private float mAlpha = 1.0f; - private Drawable mRealDrawable; - public DrawableWithAlpha(Drawable realDrawable) { - mRealDrawable = realDrawable; - } - public void setAlpha(float alpha) { - mAlpha = alpha; - } - public float getAlpha() { - return mAlpha; - } - public void draw(Canvas canvas) { - mRealDrawable.setAlpha((int) Math.round(mAlpha * 255f)); - mRealDrawable.draw(canvas); - } - @Override - public void setAlpha(int alpha) { - mRealDrawable.setAlpha(alpha); - } - @Override - public void setColorFilter(ColorFilter cf) { - mRealDrawable.setColorFilter(cf); - } - @Override - public int getOpacity() { - return mRealDrawable.getOpacity(); - } - } - public TargetDrawable(Resources res, int resId) { mResourceId = resId; setDrawable(res, resId); diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml index 666d1c6..ebe47e0 100644 --- a/core/res/AndroidManifest.xml +++ b/core/res/AndroidManifest.xml @@ -2193,6 +2193,13 @@ android:description="@string/permdesc_accessNotifications" android:protectionLevel="signature|system" /> + <!-- Allows access to keyguard secure storage. Only allowed for system processes. + @hide --> + <permission android:name="android.permission.ACCESS_KEYGUARD_SECURE_STORAGE" + android:protectionLevel="signature" + android:label="@string/permlab_access_keyguard_secure_storage" + android:description="@string/permdesc_access_keyguard_secure_storage" /> + <!-- The system process is explicitly the only one allowed to launch the confirmation UI for full backup/restore --> <uses-permission android:name="android.permission.CONFIRM_FULL_BACKUP"/> diff --git a/core/res/res/drawable-hdpi/kg_add_widget.png b/core/res/res/drawable-hdpi/kg_add_widget.png Binary files differdeleted file mode 100644 index 68971a5..0000000 --- a/core/res/res/drawable-hdpi/kg_add_widget.png +++ /dev/null diff --git a/core/res/res/drawable-hdpi/kg_security_lock_focused.png b/core/res/res/drawable-hdpi/kg_security_lock_focused.png Binary files differdeleted file mode 100644 index abcf683..0000000 --- a/core/res/res/drawable-hdpi/kg_security_lock_focused.png +++ /dev/null diff --git a/core/res/res/drawable-hdpi/kg_security_lock_normal.png b/core/res/res/drawable-hdpi/kg_security_lock_normal.png Binary files differdeleted file mode 100644 index e8cff24..0000000 --- a/core/res/res/drawable-hdpi/kg_security_lock_normal.png +++ /dev/null diff --git a/core/res/res/drawable-hdpi/kg_security_lock_pressed.png b/core/res/res/drawable-hdpi/kg_security_lock_pressed.png Binary files differdeleted file mode 100644 index 3214dcb..0000000 --- a/core/res/res/drawable-hdpi/kg_security_lock_pressed.png +++ /dev/null diff --git a/core/res/res/drawable-mdpi/kg_add_widget.png b/core/res/res/drawable-mdpi/kg_add_widget.png Binary files differdeleted file mode 100644 index 136ae17..0000000 --- a/core/res/res/drawable-mdpi/kg_add_widget.png +++ /dev/null diff --git a/core/res/res/drawable-mdpi/kg_security_lock_focused.png b/core/res/res/drawable-mdpi/kg_security_lock_focused.png Binary files differdeleted file mode 100644 index c567a82..0000000 --- a/core/res/res/drawable-mdpi/kg_security_lock_focused.png +++ /dev/null diff --git a/core/res/res/drawable-mdpi/kg_security_lock_normal.png b/core/res/res/drawable-mdpi/kg_security_lock_normal.png Binary files differdeleted file mode 100644 index 6fbecc1..0000000 --- a/core/res/res/drawable-mdpi/kg_security_lock_normal.png +++ /dev/null diff --git a/core/res/res/drawable-mdpi/kg_security_lock_pressed.png b/core/res/res/drawable-mdpi/kg_security_lock_pressed.png Binary files differdeleted file mode 100644 index a883258..0000000 --- a/core/res/res/drawable-mdpi/kg_security_lock_pressed.png +++ /dev/null diff --git a/core/res/res/drawable-xhdpi/kg_add_widget.png b/core/res/res/drawable-xhdpi/kg_add_widget.png Binary files differdeleted file mode 100644 index ca48be2..0000000 --- a/core/res/res/drawable-xhdpi/kg_add_widget.png +++ /dev/null diff --git a/core/res/res/drawable-xhdpi/kg_security_lock_focused.png b/core/res/res/drawable-xhdpi/kg_security_lock_focused.png Binary files differdeleted file mode 100644 index ee21647..0000000 --- a/core/res/res/drawable-xhdpi/kg_security_lock_focused.png +++ /dev/null diff --git a/core/res/res/drawable-xhdpi/kg_security_lock_normal.png b/core/res/res/drawable-xhdpi/kg_security_lock_normal.png Binary files differdeleted file mode 100644 index eae7d8c..0000000 --- a/core/res/res/drawable-xhdpi/kg_security_lock_normal.png +++ /dev/null diff --git a/core/res/res/drawable-xhdpi/kg_security_lock_pressed.png b/core/res/res/drawable-xhdpi/kg_security_lock_pressed.png Binary files differdeleted file mode 100644 index 5e9a52b..0000000 --- a/core/res/res/drawable-xhdpi/kg_security_lock_pressed.png +++ /dev/null diff --git a/core/res/res/drawable/lockscreen_password_field_dark.xml b/core/res/res/drawable/lockscreen_password_field_dark.xml deleted file mode 100644 index 92ceb79..0000000 --- a/core/res/res/drawable/lockscreen_password_field_dark.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- Copyright (C) 2010 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_window_focused="false" android:state_enabled="true" android:drawable="@drawable/textfield_bg_default_holo_dark" /> - <item android:state_window_focused="false" android:state_enabled="false" android:drawable="@drawable/textfield_bg_disabled_holo_dark" /> - <item android:state_enabled="true" android:state_focused="true" android:drawable="@drawable/textfield_bg_activated_holo_dark" /> - <iten android:state_enabled="true" android:state_activated="true" android:drawable="@drawable/textfield_bg_focused_holo_dark" /> - <item android:state_enabled="true" android:drawable="@drawable/textfield_bg_default_holo_dark" /> - <item android:state_focused="true" android:drawable="@drawable/textfield_bg_disabled_focused_holo_dark" /> - <item android:drawable="@drawable/textfield_bg_disabled_holo_dark" /> -</selector> - diff --git a/core/res/res/layout-sw600dp-port/keyguard_status_area.xml b/core/res/res/layout-sw600dp-port/keyguard_status_area.xml deleted file mode 100644 index 88dd760..0000000 --- a/core/res/res/layout-sw600dp-port/keyguard_status_area.xml +++ /dev/null @@ -1,56 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- -** -** Copyright 2009, 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. -*/ ---> - -<!-- This is a view that shows general status information in Keyguard. --> -<LinearLayout - xmlns:android="http://schemas.android.com/apk/res/android" - android:id="@+id/keyguard_status_area" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="end" - android:layout_marginTop="-16dp" - android:orientation="vertical"> - - <TextView - android:id="@+id/date" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="end" - android:layout_marginEnd="@dimen/kg_status_line_font_right_margin" - android:singleLine="true" - android:ellipsize="marquee" - android:textAppearance="?android:attr/textAppearanceMedium" - android:textSize="@dimen/kg_status_date_font_size" - /> - - <TextView - android:id="@+id/alarm_status" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="end" - android:layout_marginTop="28dp" - android:layout_marginEnd="@dimen/kg_status_line_font_right_margin" - android:singleLine="true" - android:ellipsize="marquee" - android:textAppearance="?android:attr/textAppearance" - android:textSize="@dimen/kg_status_line_font_size" - android:drawablePadding="4dip" - /> - -</LinearLayout> diff --git a/core/res/res/layout-sw600dp/keyguard_transport_control.xml b/core/res/res/layout-sw600dp/keyguard_transport_control.xml deleted file mode 100644 index f864339..0000000 --- a/core/res/res/layout-sw600dp/keyguard_transport_control.xml +++ /dev/null @@ -1,111 +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. ---> - -<!-- *** Note *** This should mirror the file in layout/ with the exception of the background set - here for adding a drop shadow on tablets. --> - -<com.android.internal.widget.TransportControlView - xmlns:android="http://schemas.android.com/apk/res/android" - android:id="@+id/transport_controls" - android:background="@drawable/transportcontrol_bg"> - - <!-- FrameLayout used as scrim to show between album art and buttons --> - <FrameLayout - android:layout_width="match_parent" - android:layout_height="match_parent" - android:foreground="@drawable/ic_lockscreen_player_background"> - <!-- We use ImageView for its cropping features, otherwise could be android:background --> - <ImageView - android:id="@+id/albumart" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:layout_gravity="fill" - android:scaleType="centerCrop" - android:adjustViewBounds="false" - /> - </FrameLayout> - - <LinearLayout - android:orientation="vertical" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_gravity="bottom"> - <TextView - android:id="@+id/title" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_marginTop="8dip" - android:layout_marginStart="16dip" - android:layout_marginEnd="16dip" - android:gravity="center_horizontal" - android:singleLine="true" - android:ellipsize="end" - android:textAppearance="?android:attr/textAppearanceMedium" - /> - <LinearLayout - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:orientation="horizontal" - android:layout_marginTop="5dip"> - <FrameLayout - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_weight="1"> - <ImageView - android:id="@+id/btn_prev" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="center" - android:src="@drawable/ic_media_previous" - android:clickable="true" - android:background="?android:attr/selectableItemBackground" - android:padding="10dip" - android:contentDescription="@string/lockscreen_transport_prev_description"/> - </FrameLayout> - <FrameLayout - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_weight="1"> - <ImageView - android:id="@+id/btn_play" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="center" - android:clickable="true" - android:src="@drawable/ic_media_play" - android:background="?android:attr/selectableItemBackground" - android:padding="10dip" - android:contentDescription="@string/lockscreen_transport_play_description"/> - </FrameLayout> - <FrameLayout - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_weight="1"> - <ImageView - android:id="@+id/btn_next" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="center" - android:clickable="true" - android:src="@drawable/ic_media_next" - android:background="?android:attr/selectableItemBackground" - android:padding="10dip" - android:contentDescription="@string/lockscreen_transport_next_description"/> - </FrameLayout> - </LinearLayout> - </LinearLayout> - -</com.android.internal.widget.TransportControlView> diff --git a/core/res/res/values-af/strings.xml b/core/res/res/values-af/strings.xml index 8a956d0..5fdd12a 100644 --- a/core/res/res/values-af/strings.xml +++ b/core/res/res/values-af/strings.xml @@ -1244,6 +1244,8 @@ <string name="permdesc_copyProtectedData" msgid="4390697124288317831">"Laat die program toe om die verstek houerdiens in te roep om inhoud te kopieer. Nie vir gebruik deur normale programme nie."</string> <string name="permlab_route_media_output" msgid="1642024455750414694">"Roeteer media-uitvoer"</string> <string name="permdesc_route_media_output" msgid="4932818749547244346">"Laat \'n program toe om media-uitvoere na ander eksterne toestelle te roeteer."</string> + <string name="permlab_access_keyguard_secure_storage" msgid="7565552237977815047">"Kry toegang tot keyguard se veilige berging"</string> + <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Laat \'n program toe om toegang tot keyguard se veilige berging te kry."</string> <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Raak twee keer vir zoembeheer"</string> <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Kon nie legstuk byvoeg nie."</string> <string name="ime_action_go" msgid="8320845651737369027">"Gaan"</string> diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml index 103f0b7..e10174c 100644 --- a/core/res/res/values-am/strings.xml +++ b/core/res/res/values-am/strings.xml @@ -1249,6 +1249,8 @@ <string name="permdesc_copyProtectedData" msgid="4390697124288317831">"ይዘትን ለመቅዳት ነባሪ መያዣ አገልግሎት እንዲያስነሳ ለመተግበሪው ይፈቅዳሉ፡፡ ለመደበኛ መተግበሪያዎች ለመጠቀም አይሆንም፡፡"</string> <string name="permlab_route_media_output" msgid="1642024455750414694">"የሚዲያ ውፅአት መንገድ"</string> <string name="permdesc_route_media_output" msgid="4932818749547244346">"አንድ መተግበሪያ የሚዲያ ውፅአትን ወደ ሌላ ውጫዊ መሳሪያ እንዲመራ ይፈቅድለታል።"</string> + <string name="permlab_access_keyguard_secure_storage" msgid="7565552237977815047">"ደህንነቱ በቁልፍ የተጠበቀ ማከማቻን ይድረሱ"</string> + <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"አንድ መተግበሪያ ደህንነቱ በቁልፍ የተጠበቀ ማከማቻ እንዲደርስ ያስችለዋል።"</string> <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"ለአጉላ መቆጣጠሪያ ሁለት ጊዜ ነካ አድርግ"</string> <string name="gadget_host_error_inflating" msgid="4882004314906466162">"ምግብር ማከል አልተቻለም።"</string> <string name="ime_action_go" msgid="8320845651737369027">"ሂድ"</string> diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml index b8fc281..87003e2 100644 --- a/core/res/res/values-ar/strings.xml +++ b/core/res/res/values-ar/strings.xml @@ -1249,6 +1249,8 @@ <string name="permdesc_copyProtectedData" msgid="4390697124288317831">"للسماح باستدعاء خدمة الحاوية الافتراضية لنسخ المحتوى. ليس للاستخدام بواسطة التطبيقات العادية."</string> <string name="permlab_route_media_output" msgid="1642024455750414694">"توجيه إخراج الوسائط"</string> <string name="permdesc_route_media_output" msgid="4932818749547244346">"للسماح للتطبيق بتوجيه إخراج الوسائط إلى أجهزة خارجية أخرى."</string> + <string name="permlab_access_keyguard_secure_storage" msgid="7565552237977815047">"الدخول إلى التخزين المحمي بقفل المفاتيح"</string> + <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"السماح لأحد التطبيقات بالدخول إلى التخزين المحمي بقفل المفاتيح."</string> <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"المس مرتين للتحكم في التكبير/التصغير"</string> <string name="gadget_host_error_inflating" msgid="4882004314906466162">"تعذرت إضافة أداة."</string> <string name="ime_action_go" msgid="8320845651737369027">"تنفيذ"</string> diff --git a/core/res/res/values-be/strings.xml b/core/res/res/values-be/strings.xml index eb7c6cd..46a374e 100644 --- a/core/res/res/values-be/strings.xml +++ b/core/res/res/values-be/strings.xml @@ -1244,6 +1244,8 @@ <string name="permdesc_copyProtectedData" msgid="4390697124288317831">"Дазваляе прыкладанням выклікаць службу захавання па змаўчанні для капіявання змесціва. Не выкарыстоўваецца звычайнымі прыкладаннямі."</string> <string name="permlab_route_media_output" msgid="1642024455750414694">"Маршрутны мультымедыйны выхад"</string> <string name="permdesc_route_media_output" msgid="4932818749547244346">"Дазваляе прыкладанням маршрутызаваць мультымедыйны выхад на iншыя знешнiя прылады."</string> + <string name="permlab_access_keyguard_secure_storage" msgid="7565552237977815047">"Доступ да блакіроўкі клавіятуры бяспечнага сховішча"</string> + <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Дазваляе прыкладанню атрымліваць доступ да блакіроўкі клавіятуры бяспечнага сховішча."</string> <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Двойчы дакраніцеся, каб змянiць маштаб"</string> <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Немагчыма дадаць віджэт."</string> <string name="ime_action_go" msgid="8320845651737369027">"Пачаць"</string> diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml index 4831909..57b8cba 100644 --- a/core/res/res/values-bg/strings.xml +++ b/core/res/res/values-bg/strings.xml @@ -1249,6 +1249,8 @@ <string name="permdesc_copyProtectedData" msgid="4390697124288317831">"Разрешава на приложението да извиква стандартната услуга на контейнера, за да се копира съдържание. Не е предназначено за нормални приложения."</string> <string name="permlab_route_media_output" msgid="1642024455750414694">"Насочване на изходящата мултимедия"</string> <string name="permdesc_route_media_output" msgid="4932818749547244346">"Разрешава на приложението да насочва изходящата мултимедия към други външни устройства."</string> + <string name="permlab_access_keyguard_secure_storage" msgid="7565552237977815047">"Достъп до надеждното хранилище, свързано с функцията за защита на клавишите"</string> + <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Позволява на приложението да осъществява достъп до надеждното хранилище, свързано с функцията за защита на клавишите."</string> <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Докоснете двукратно за управление на промяната на мащаба"</string> <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Приспособлението не можа да бъде добавено."</string> <string name="ime_action_go" msgid="8320845651737369027">"Старт"</string> diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml index 365186c..4968235 100644 --- a/core/res/res/values-ca/strings.xml +++ b/core/res/res/values-ca/strings.xml @@ -1244,6 +1244,8 @@ <string name="permdesc_copyProtectedData" msgid="4390697124288317831">"Permet invocar el servei de contenidor predeterminat per copiar contingut. No indicat per a les aplicacions normals."</string> <string name="permlab_route_media_output" msgid="1642024455750414694">"Indicació de ruta de sortida de contingut multimèdia"</string> <string name="permdesc_route_media_output" msgid="4932818749547244346">"Permet que una aplicació indiqui la ruta de sortida de contingut multimèdia a altres dispositius externs."</string> + <string name="permlab_access_keyguard_secure_storage" msgid="7565552237977815047">"Accedeix a l\'emmagatzematge protegit per contrasenya"</string> + <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Permet que una aplicació accedeixi a l\'emmagatzematge protegit per contrasenya."</string> <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Toca dos cops per controlar el zoom"</string> <string name="gadget_host_error_inflating" msgid="4882004314906466162">"No s\'ha pogut afegir el widget."</string> <string name="ime_action_go" msgid="8320845651737369027">"Vés"</string> diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml index 621067f..0b6a30c 100644 --- a/core/res/res/values-cs/strings.xml +++ b/core/res/res/values-cs/strings.xml @@ -1244,6 +1244,8 @@ <string name="permdesc_copyProtectedData" msgid="4390697124288317831">"Umožňuje aplikaci dát výchozí službě kontejneru příkaz ke zkopírování obsahu. Toto oprávnění není určeno pro běžné aplikace."</string> <string name="permlab_route_media_output" msgid="1642024455750414694">"Směrování výstupu médií"</string> <string name="permdesc_route_media_output" msgid="4932818749547244346">"Umožňuje aplikaci směrovat výstup médií do dalších externích zařízení."</string> + <string name="permlab_access_keyguard_secure_storage" msgid="7565552237977815047">"Přístup k bezpečnému úložišti keyguard"</string> + <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Umožňuje aplikaci přístup k bezpečnému úložišti keyguard."</string> <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Dvojitým dotykem můžete ovládat přiblížení"</string> <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Widget nelze přidat."</string> <string name="ime_action_go" msgid="8320845651737369027">"Přejít"</string> diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml index 3dcd8f3..8f30339 100644 --- a/core/res/res/values-da/strings.xml +++ b/core/res/res/values-da/strings.xml @@ -1244,6 +1244,8 @@ <string name="permdesc_copyProtectedData" msgid="4390697124288317831">"Tillader, at appen kan benytte standardlagertjenesten til at kopiere indhold. Anvendes ikke af almindelige apps."</string> <string name="permlab_route_media_output" msgid="1642024455750414694">"Viderefør medieoutput"</string> <string name="permdesc_route_media_output" msgid="4932818749547244346">"Tillader, at en applikation viderefører medieoutput til andre eksterne enheder."</string> + <string name="permlab_access_keyguard_secure_storage" msgid="7565552237977815047">"Få adgang nøglebeskyttet lager"</string> + <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Tillader, at en applikation får adgang til et nøglebeskyttet lager."</string> <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Tryk to gange for zoomstyring"</string> <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Widget kunne ikke tilføjes."</string> <string name="ime_action_go" msgid="8320845651737369027">"Gå"</string> diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml index e15a39f..cec2e1f 100644 --- a/core/res/res/values-de/strings.xml +++ b/core/res/res/values-de/strings.xml @@ -1244,6 +1244,8 @@ <string name="permdesc_copyProtectedData" msgid="4390697124288317831">"Ermöglicht der App das Aufrufen des Standard-Containerdienstes zum Kopieren von Inhalten. Nicht für normale Apps vorgesehen."</string> <string name="permlab_route_media_output" msgid="1642024455750414694">"Medienausgabe umleiten"</string> <string name="permdesc_route_media_output" msgid="4932818749547244346">"Ermöglicht einer App, die Medienausgabe auf andere externe Geräte umzuleiten."</string> + <string name="permlab_access_keyguard_secure_storage" msgid="7565552237977815047">"Zugriff auf mit Keyguard geschützten Speicher"</string> + <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Ermöglicht einer App den Zugriff auf mit Keyguard geschützten Speicher"</string> <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Für Zoomeinstellung zweimal berühren"</string> <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Widget konnte nicht hinzugefügt werden."</string> <string name="ime_action_go" msgid="8320845651737369027">"Los"</string> diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml index 2dbb82b..1b591e5 100644 --- a/core/res/res/values-el/strings.xml +++ b/core/res/res/values-el/strings.xml @@ -1244,6 +1244,8 @@ <string name="permdesc_copyProtectedData" msgid="4390697124288317831">"Επιτρέπει στην εφαρμογή την κλήση της προεπιλεγμένης υπηρεσίας κοντέινερ για την αντιγραφή περιεχομένου. Δεν χρησιμοποιείται από συνήθεις εφαρμογές."</string> <string name="permlab_route_media_output" msgid="1642024455750414694">"Διαγραφή διαδρομής δεδομένων εξόδου μέσων"</string> <string name="permdesc_route_media_output" msgid="4932818749547244346">"Επιτρέπει σε μια εφαρμογή τη διαγραφή διαδρομής δεδομένων εξόδου μέσων σε άλλες εξωτερικές συσκευές."</string> + <string name="permlab_access_keyguard_secure_storage" msgid="7565552237977815047">"Πρόσβαση στον ασφαλή αποθηκευτικό χώρο με κλείδωμα"</string> + <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Επιτρέπει σε μια εφαρμογή να αποκτήσει πρόσβαση στον ασφαλή αποθηκευτικό χώρο με κλείδωμα."</string> <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Αγγίξτε δύο φορές για έλεγχο εστίασης"</string> <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Δεν ήταν δυνατή η προσθήκη του γραφικού στοιχείου."</string> <string name="ime_action_go" msgid="8320845651737369027">"Μετάβαση"</string> diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml index 9fab86e..eefc24d 100644 --- a/core/res/res/values-en-rGB/strings.xml +++ b/core/res/res/values-en-rGB/strings.xml @@ -1244,6 +1244,8 @@ <string name="permdesc_copyProtectedData" msgid="4390697124288317831">"Allows the app to invoke default container service to copy content. Not for use by normal apps."</string> <string name="permlab_route_media_output" msgid="1642024455750414694">"Route media output"</string> <string name="permdesc_route_media_output" msgid="4932818749547244346">"Allows an application to route media output to other external devices."</string> + <string name="permlab_access_keyguard_secure_storage" msgid="7565552237977815047">"Access keyguard secure storage"</string> + <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Allows an application to access keyguard secure storage."</string> <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Touch twice for zoom control"</string> <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Couldn\'t add widget."</string> <string name="ime_action_go" msgid="8320845651737369027">"Go"</string> diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml index ee18e9e..88950d8 100644 --- a/core/res/res/values-es-rUS/strings.xml +++ b/core/res/res/values-es-rUS/strings.xml @@ -1244,6 +1244,8 @@ <string name="permdesc_copyProtectedData" msgid="4390697124288317831">"Permite que la aplicación ejecute el servicio de contenedor predeterminado para que copie contenido. Las aplicaciones normales no deben utilizar este permiso."</string> <string name="permlab_route_media_output" msgid="1642024455750414694">"Dirigir salida de medios"</string> <string name="permdesc_route_media_output" msgid="4932818749547244346">"Permite que la aplicación dirija salidas de medios a otros dispositivos externos."</string> + <string name="permlab_access_keyguard_secure_storage" msgid="7565552237977815047">"Acceder al almacenamiento seguro de bloqueos"</string> + <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Permite que una aplicación acceda al almacenamiento seguro de bloqueos."</string> <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Toca dos veces para acceder al control de zoom."</string> <string name="gadget_host_error_inflating" msgid="4882004314906466162">"No se pudo agregar el widget."</string> <string name="ime_action_go" msgid="8320845651737369027">"Ir"</string> diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml index 50fb83c..6ed6eb1 100644 --- a/core/res/res/values-es/strings.xml +++ b/core/res/res/values-es/strings.xml @@ -1244,6 +1244,8 @@ <string name="permdesc_copyProtectedData" msgid="4390697124288317831">"Permite que la aplicación ejecute el servicio de contenedor predeterminado para copiar contenido. Las aplicaciones normales no deben usar este permiso."</string> <string name="permlab_route_media_output" msgid="1642024455750414694">"Dirigir salida de medio"</string> <string name="permdesc_route_media_output" msgid="4932818749547244346">"Permite que la aplicación dirija salidas de medios a otros dispositivos externos."</string> + <string name="permlab_access_keyguard_secure_storage" msgid="7565552237977815047">"Acceder al almacenamiento seguro de bloqueos"</string> + <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Permite que una aplicación acceda al almacenamiento seguro de bloqueos."</string> <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Toca dos veces para acceder al control de zoom."</string> <string name="gadget_host_error_inflating" msgid="4882004314906466162">"No se ha podido añadir el widget."</string> <string name="ime_action_go" msgid="8320845651737369027">"Ir"</string> diff --git a/core/res/res/values-et/strings.xml b/core/res/res/values-et/strings.xml index 3abaf62..83ab6a5 100644 --- a/core/res/res/values-et/strings.xml +++ b/core/res/res/values-et/strings.xml @@ -1249,6 +1249,8 @@ <string name="permdesc_copyProtectedData" msgid="4390697124288317831">"Võimaldab rakendusel võtta sisu kopeerimiseks appi vaikekonteinerteenuse. Mitte kasutada tavarakenduste puhul."</string> <string name="permlab_route_media_output" msgid="1642024455750414694">"Meediaväljundi teekonna koostamine"</string> <string name="permdesc_route_media_output" msgid="4932818749547244346">"Võimaldab rakendusel koostada teekonna meediaväljundist teistesse välistesse seadmetesse."</string> + <string name="permlab_access_keyguard_secure_storage" msgid="7565552237977815047">"Juurdepääs võtmekaitsega turvalisele talletusruumile"</string> + <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Lubab rakendusel hankida juurdepääsu võtmekaitsega turvalisele talletusruumile."</string> <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Suumi juhtimiseks puudutage kaks korda"</string> <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Vidinat ei saanud lisada."</string> <string name="ime_action_go" msgid="8320845651737369027">"Mine"</string> diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml index f8c1629..28b10c3 100644 --- a/core/res/res/values-fa/strings.xml +++ b/core/res/res/values-fa/strings.xml @@ -1249,6 +1249,8 @@ <string name="permdesc_copyProtectedData" msgid="4390697124288317831">"به برنامه اجازه میدهد تا سرویس پیشفرض را فراخوانی کند و محتوا را کپی کند. برای استفاده برنامههای عادی مورد نیاز نیست."</string> <string name="permlab_route_media_output" msgid="1642024455750414694">"تعیین مسیر خروجی رسانه"</string> <string name="permdesc_route_media_output" msgid="4932818749547244346">"به یک برنامه اجازه میدهد خروجی رسانه را به دستگاههای خارجی دیگر تعیین مسیر کند."</string> + <string name="permlab_access_keyguard_secure_storage" msgid="7565552237977815047">"دسترسی به فضای ذخیرهسازی ایمن محافظ کلید"</string> + <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"به یک برنامه کاربردی برای دسترسی به فضای ذخیرهسازی ایمن محافظ کلید اجازه میدهد."</string> <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"دوبار لمس کنید تا بزرگنمایی کنترل شود"</string> <string name="gadget_host_error_inflating" msgid="4882004314906466162">"افزودن ابزارک انجام نشد."</string> <string name="ime_action_go" msgid="8320845651737369027">"برو"</string> diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml index da5c2db..9854e41 100644 --- a/core/res/res/values-fi/strings.xml +++ b/core/res/res/values-fi/strings.xml @@ -1249,6 +1249,8 @@ <string name="permdesc_copyProtectedData" msgid="4390697124288317831">"Antaa sovelluksen kutsua oletussäilöpalvelua sisällön kopioimiseen. Ei tavallisten sovellusten käyttöön."</string> <string name="permlab_route_media_output" msgid="1642024455750414694">"Median reititys"</string> <string name="permdesc_route_media_output" msgid="4932818749547244346">"Antaa sovelluksen reitittää mediaa muihin ulkoisiin laitteisiin."</string> + <string name="permlab_access_keyguard_secure_storage" msgid="7565552237977815047">"Salasanalla suojatun tallennustilan hallinta"</string> + <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Sallii sovelluksen käyttää salasanalla suojattua tallennustilaa."</string> <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Ohjaa zoomausta napauttamalla kahdesti"</string> <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Widgetin lisääminen epäonnistui."</string> <string name="ime_action_go" msgid="8320845651737369027">"Siirry"</string> diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml index 1bc0fe4..542f8f0 100644 --- a/core/res/res/values-fr/strings.xml +++ b/core/res/res/values-fr/strings.xml @@ -1244,6 +1244,8 @@ <string name="permdesc_copyProtectedData" msgid="4390697124288317831">"Permet à l\'application d\'invoquer le service de conteneur par défaut pour copier du contenu. Les applications standards ne doivent pas utiliser cette fonctionnalité."</string> <string name="permlab_route_media_output" msgid="1642024455750414694">"Diriger la sortie multimédia"</string> <string name="permdesc_route_media_output" msgid="4932818749547244346">"Permet à une application de diriger la sortie multimédia vers d\'autres appareils externes."</string> + <string name="permlab_access_keyguard_secure_storage" msgid="7565552237977815047">"Accéder au stockage sécurisé keyguard"</string> + <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Permet à une application d\'accéder au stockage sécurisé keyguard."</string> <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Appuyez deux fois pour régler le zoom."</string> <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Impossible d\'ajouter le widget."</string> <string name="ime_action_go" msgid="8320845651737369027">"OK"</string> diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml index cbec3fe..0c1f2cb 100644 --- a/core/res/res/values-hi/strings.xml +++ b/core/res/res/values-hi/strings.xml @@ -1249,6 +1249,8 @@ <string name="permdesc_copyProtectedData" msgid="4390697124288317831">"एप्लिकेशन को सामग्री की प्रतिलिपि बनाने के लिए डिफ़ॉल्ट कंटेनर सेवा शुरू करने देता है. सामान्य एप्लिकेशन द्वारा उपयोग करने के लिए नहीं."</string> <string name="permlab_route_media_output" msgid="1642024455750414694">"मीडिया आउटपुट को रूट करें"</string> <string name="permdesc_route_media_output" msgid="4932818749547244346">"एप्लिकेशन को मीडिया आउटपुट को अन्य बाहरी उपकरणों पर रूट करने देता है."</string> + <string name="permlab_access_keyguard_secure_storage" msgid="7565552237977815047">"कीगार्ड सुरक्षित संग्रहण एक्सेस करें"</string> + <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"एप्लिकेशन को कीगार्ड सुरक्षित संग्रहण एक्सेस करने देती है."</string> <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"ज़ूम नियंत्रण के लिए दो बार स्पर्श करें"</string> <string name="gadget_host_error_inflating" msgid="4882004314906466162">"विजेट नहीं जोड़ा जा सका."</string> <string name="ime_action_go" msgid="8320845651737369027">"जाएं"</string> diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml index c196b59..cb7c76a 100644 --- a/core/res/res/values-hr/strings.xml +++ b/core/res/res/values-hr/strings.xml @@ -1244,6 +1244,8 @@ <string name="permdesc_copyProtectedData" msgid="4390697124288317831">"Omogućuje aplikaciji dozivanje usluge zadanog spremnika radi kopiranja sadržaja. Nije namijenjena uobičajenim aplikacijama."</string> <string name="permlab_route_media_output" msgid="1642024455750414694">"Usmjeravanje medijskog izlaza"</string> <string name="permdesc_route_media_output" msgid="4932818749547244346">"Aplikaciji omogućuje usmjeravanje medijskog izlaza na druge vanjske uređaje."</string> + <string name="permlab_access_keyguard_secure_storage" msgid="7565552237977815047">"Pristup zaključanoj sigurnoj pohrani"</string> + <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Omogućuje aplikaciji pristupanje zaključanoj sigurnoj pohrani."</string> <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Dodirnite dvaput za upravljanje zumiranjem"</string> <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Widget nije moguće dodati."</string> <string name="ime_action_go" msgid="8320845651737369027">"Idi"</string> diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml index ff978a0..f960ae6 100644 --- a/core/res/res/values-hu/strings.xml +++ b/core/res/res/values-hu/strings.xml @@ -1244,6 +1244,8 @@ <string name="permdesc_copyProtectedData" msgid="4390697124288317831">"Lehetővé teszi az alkalmazás számára az alapértelmezett tárolószolgáltatás használatát tartalom másolásához. Normál alkalmazások nem használhatják."</string> <string name="permlab_route_media_output" msgid="1642024455750414694">"Médiafájlok kimenetének irányítása"</string> <string name="permdesc_route_media_output" msgid="4932818749547244346">"Lehetővé teszi az alkalmazás számára, hogy más külső eszközökre irányítsa a médiafájlok lejátszását."</string> + <string name="permlab_access_keyguard_secure_storage" msgid="7565552237977815047">"Hozzáférés a kóddal védett tárhelyhez"</string> + <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Lehetővé teszi egy alkalmazás számára, hogy hozzáférjen a kóddal védett tárhelyhez."</string> <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Érintse meg kétszer a nagyítás beállításához"</string> <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Nem sikerült hozzáadni a modult."</string> <string name="ime_action_go" msgid="8320845651737369027">"Ugrás"</string> diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml index fee8fc4..97725e2 100644 --- a/core/res/res/values-in/strings.xml +++ b/core/res/res/values-in/strings.xml @@ -1244,6 +1244,8 @@ <string name="permdesc_copyProtectedData" msgid="4390697124288317831">"Mengizinkan apl menjalankan layanan kontainer default untuk menyalin konten. Tidak untuk digunakan oleh apl normal."</string> <string name="permlab_route_media_output" msgid="1642024455750414694">"Menentukan rute keluaran media"</string> <string name="permdesc_route_media_output" msgid="4932818749547244346">"Memungkinkan aplikasi menentukan rute keluaran media ke perangkat eksternal lainnya."</string> + <string name="permlab_access_keyguard_secure_storage" msgid="7565552237977815047">"Mengakses pengaman penyimpanan aman"</string> + <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Mengizinkan aplikasi mengakses pengaman penyimpanan aman."</string> <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Sentuh dua kali untuk mengontrol perbesar/perkecil"</string> <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Tidak dapat menambahkan widget."</string> <string name="ime_action_go" msgid="8320845651737369027">"Buka"</string> diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml index 0cd7322..6ebb90a 100644 --- a/core/res/res/values-it/strings.xml +++ b/core/res/res/values-it/strings.xml @@ -1244,6 +1244,8 @@ <string name="permdesc_copyProtectedData" msgid="4390697124288317831">"Consente all\'applicazione di richiamare il servizio container predefinito per la copia di contenuti. Da non usare per normali applicazioni."</string> <string name="permlab_route_media_output" msgid="1642024455750414694">"Indirizzamento uscita media"</string> <string name="permdesc_route_media_output" msgid="4932818749547244346">"Consente a un\'applicazione di indirizzare l\'uscita di media verso altri dispositivi esterni."</string> + <string name="permlab_access_keyguard_secure_storage" msgid="7565552237977815047">"Accesso all\'archivio sicuro keyguard"</string> + <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Consente a un\'applicazione di accedere all\'archivio sicuro keguard."</string> <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Tocca due volte per il comando dello zoom"</string> <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Aggiunta del widget non riuscita."</string> <string name="ime_action_go" msgid="8320845651737369027">"Vai"</string> diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml index 0139b29..5c0d617 100644 --- a/core/res/res/values-iw/strings.xml +++ b/core/res/res/values-iw/strings.xml @@ -1244,6 +1244,8 @@ <string name="permdesc_copyProtectedData" msgid="4390697124288317831">"מאפשר ליישום להפעיל שירות גורם מכיל המוגדר כברירת מחדל להעתקת תוכן. לא מיועד לשימוש על ידי יישומים רגילים."</string> <string name="permlab_route_media_output" msgid="1642024455750414694">"ניתוב פלט מדיה"</string> <string name="permdesc_route_media_output" msgid="4932818749547244346">"מאפשר ליישום לנתב פלט מדיה למכשירים חיצוניים אחרים."</string> + <string name="permlab_access_keyguard_secure_storage" msgid="7565552237977815047">"גישה לאחסון המוגן באמצעות מפתח"</string> + <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"מאפשר ליישום לגשת לאחסון המוגן באמצעות מפתח."</string> <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"גע פעמיים לבקרת מרחק מתצוגה"</string> <string name="gadget_host_error_inflating" msgid="4882004314906466162">"לא ניתן להוסיף widget."</string> <string name="ime_action_go" msgid="8320845651737369027">"התחל"</string> diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml index af64842..66369c5 100644 --- a/core/res/res/values-ja/strings.xml +++ b/core/res/res/values-ja/strings.xml @@ -1244,6 +1244,8 @@ <string name="permdesc_copyProtectedData" msgid="4390697124288317831">"デフォルトのコンテナサービスを呼び出してコンテンツをコピーすることをアプリに許可します。通常のアプリでは使用しません。"</string> <string name="permlab_route_media_output" msgid="1642024455750414694">"メディア出力のルーティング"</string> <string name="permdesc_route_media_output" msgid="4932818749547244346">"メディア出力を他の外部デバイスにルーティングすることをアプリに許可します。"</string> + <string name="permlab_access_keyguard_secure_storage" msgid="7565552237977815047">"キーガードセキュアストレージへのアクセス"</string> + <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"キーガードセキュアストレージへのアクセスをアプリに許可する"</string> <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"ダブルタップでズームコントロール"</string> <string name="gadget_host_error_inflating" msgid="4882004314906466162">"ウィジェットを追加できませんでした。"</string> <string name="ime_action_go" msgid="8320845651737369027">"移動"</string> diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml index 5d663d5..d4a246a 100644 --- a/core/res/res/values-ko/strings.xml +++ b/core/res/res/values-ko/strings.xml @@ -1244,6 +1244,8 @@ <string name="permdesc_copyProtectedData" msgid="4390697124288317831">"기본 컨테이너 서비스를 호출하여 콘텐츠를 복사할 수 있도록 허용합니다. 일반 앱에서는 사용하지 않습니다."</string> <string name="permlab_route_media_output" msgid="1642024455750414694">"미디어 출력 연결"</string> <string name="permdesc_route_media_output" msgid="4932818749547244346">"앱이 미디어 출력을 기타 외부 기기에 연결할 수 있도록 허용합니다."</string> + <string name="permlab_access_keyguard_secure_storage" msgid="7565552237977815047">"키가드 보안 저장소 액세스"</string> + <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"애플리케이션에서 키가드 보안 저장소에 액세스하도록 허용합니다."</string> <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"확대/축소하려면 두 번 터치하세요."</string> <string name="gadget_host_error_inflating" msgid="4882004314906466162">"위젯을 추가할 수 없습니다."</string> <string name="ime_action_go" msgid="8320845651737369027">"이동"</string> diff --git a/core/res/res/values-land/arrays.xml b/core/res/res/values-land/arrays.xml index 240b9e4..5602a1c 100644 --- a/core/res/res/values-land/arrays.xml +++ b/core/res/res/values-land/arrays.xml @@ -19,54 +19,4 @@ --> <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <!-- Resources for GlowPadView in LockScreen --> - <array name="lockscreen_targets_when_silent"> - <item>@null</item>" - <item>@drawable/ic_action_assist_generic</item> - <item>@drawable/ic_lockscreen_soundon</item> - <item>@drawable/ic_lockscreen_unlock</item> - </array> - - <array name="lockscreen_target_descriptions_when_silent"> - <item>@null</item> - <item>@string/description_target_search</item> - <item>@string/description_target_soundon</item> - <item>@string/description_target_unlock</item> - </array> - - <array name="lockscreen_direction_descriptions"> - <item>@null</item> - <item>@string/description_direction_up</item> - <item>@string/description_direction_left</item> - <item>@string/description_direction_down</item> - </array> - - <array name="lockscreen_targets_when_soundon"> - <item>@null</item> - <item>@drawable/ic_action_assist_generic</item> - <item>@drawable/ic_lockscreen_silent</item> - <item>@drawable/ic_lockscreen_unlock</item> - </array> - - <array name="lockscreen_target_descriptions_when_soundon"> - <item>@null</item> - <item>@string/description_target_search</item> - <item>@string/description_target_silent</item> - <item>@string/description_target_unlock</item> - </array> - - <array name="lockscreen_targets_with_camera"> - <item>@null</item> - <item>@drawable/ic_action_assist_generic</item> - <item>@drawable/ic_lockscreen_camera</item> - <item>@drawable/ic_lockscreen_unlock</item> - </array> - - <array name="lockscreen_target_descriptions_with_camera"> - <item>@null</item> - <item>@string/description_target_search</item> - <item>@string/description_target_camera</item> - <item>@string/description_target_unlock</item> - </array> - </resources> diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml index 1a48fac..4f29e57 100644 --- a/core/res/res/values-lt/strings.xml +++ b/core/res/res/values-lt/strings.xml @@ -1249,6 +1249,8 @@ <string name="permdesc_copyProtectedData" msgid="4390697124288317831">"Leidžiama programai iškviesti numatytąją sudėtinio rodinio paslaugą, kad būtų kopijuojamas turinys. Neskirta naudoti įprastoms programoms."</string> <string name="permlab_route_media_output" msgid="1642024455750414694">"Medijos išvesties nukreipimas"</string> <string name="permdesc_route_media_output" msgid="4932818749547244346">"Leidžiama programai nukreipti medijos išvestį į kitus išorinius įrenginius."</string> + <string name="permlab_access_keyguard_secure_storage" msgid="7565552237977815047">"Pasiekti „KeyGuard“ saugyklą"</string> + <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Programai leidžiama pasiekti „KeyGuard“ saugyklą."</string> <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Dukart palieskite, kad valdytumėte mastelio keitimą"</string> <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Nepavyko pridėti."</string> <string name="ime_action_go" msgid="8320845651737369027">"Pradėti"</string> diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml index 5890f13..651bb12 100644 --- a/core/res/res/values-lv/strings.xml +++ b/core/res/res/values-lv/strings.xml @@ -1244,6 +1244,8 @@ <string name="permdesc_copyProtectedData" msgid="4390697124288317831">"Ļauj lietotnei izsaukt noklusējuma konteinera pakalpojumu, lai kopētu saturu. Atļauja neattiecas uz parastām lietotnēm."</string> <string name="permlab_route_media_output" msgid="1642024455750414694">"Multivides datu izejas maršrutēšana"</string> <string name="permdesc_route_media_output" msgid="4932818749547244346">"Ļauj lietojumprogrammai maršrutēt multivides datu izeju uz citām ārējām ierīcēm."</string> + <string name="permlab_access_keyguard_secure_storage" msgid="7565552237977815047">"Piekļūt krātuvei, kas aizsargāta ar atslēgu"</string> + <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Ļauj lietojumprogrammai piekļūt krātuvei, kas aizsargāta ar atslēgu."</string> <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Pieskarieties divreiz, lai kontrolētu tālummaiņu."</string> <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Nevarēja pievienot logrīku."</string> <string name="ime_action_go" msgid="8320845651737369027">"Doties uz"</string> diff --git a/core/res/res/values-ms/strings.xml b/core/res/res/values-ms/strings.xml index be04f9d..8417a7b 100644 --- a/core/res/res/values-ms/strings.xml +++ b/core/res/res/values-ms/strings.xml @@ -1249,6 +1249,8 @@ <string name="permdesc_copyProtectedData" msgid="4390697124288317831">"Membenarkan apl untuk menggunakan perkhidmatan bekas lalai untuk menyalin kandungan. Bukan untuk digunakan oleh apl biasa."</string> <string name="permlab_route_media_output" msgid="1642024455750414694">"Buat laluan output media"</string> <string name="permdesc_route_media_output" msgid="4932818749547244346">"Membenarkan apl untuk membuat laluan output media ke peranti luaran lain."</string> + <string name="permlab_access_keyguard_secure_storage" msgid="7565552237977815047">"Akses storan selamat pengawal kekunci"</string> + <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Membenarkan aplikasi mengakses storan selamat pengawal kekunci."</string> <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Sentuh dua kali untuk mendapatkan kawalan zum"</string> <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Tidak dapat menambahkan widget."</string> <string name="ime_action_go" msgid="8320845651737369027">"Pergi"</string> diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml index 5fd9a42..5f4fd9b 100644 --- a/core/res/res/values-nb/strings.xml +++ b/core/res/res/values-nb/strings.xml @@ -1244,6 +1244,8 @@ <string name="permdesc_copyProtectedData" msgid="4390697124288317831">"Lar appen påkalle standard meldingsbeholdertjeneste for kopiering av innhold. Ikke beregnet på vanlige apper."</string> <string name="permlab_route_media_output" msgid="1642024455750414694">"Videresending av medieutdata"</string> <string name="permdesc_route_media_output" msgid="4932818749547244346">"Lar en app videresende medieutdata til andre eksterne enheter."</string> + <string name="permlab_access_keyguard_secure_storage" msgid="7565552237977815047">"Bruk av sikker lagring via keyguard."</string> + <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Lar en app bruke sikker lagring via keyguard."</string> <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Trykk to ganger for zoomkontroll"</string> <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Kunne ikke legge til modulen."</string> <string name="ime_action_go" msgid="8320845651737369027">"Utfør"</string> diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml index f5dd3be..224a6a1 100644 --- a/core/res/res/values-nl/strings.xml +++ b/core/res/res/values-nl/strings.xml @@ -1244,6 +1244,8 @@ <string name="permdesc_copyProtectedData" msgid="4390697124288317831">"Hiermee kan de app de standaard containerservice aanroepen om inhoud te kopiëren. Niet voor gebruik door normale apps."</string> <string name="permlab_route_media_output" msgid="1642024455750414694">"Media-uitvoer aansturen"</string> <string name="permdesc_route_media_output" msgid="4932818749547244346">"Hiermee kan een app media-uitvoer naar andere externe apparaten doorsturen."</string> + <string name="permlab_access_keyguard_secure_storage" msgid="7565552237977815047">"Toegang tot opslag met toetsbeveiliging"</string> + <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Hiermee krijgt een app toegang tot opslag met toetsbeveiliging."</string> <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Raak twee keer aan voor zoomregeling"</string> <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Kan widget niet toevoegen."</string> <string name="ime_action_go" msgid="8320845651737369027">"Ga"</string> diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml index f6ffb20..a5ccffe 100644 --- a/core/res/res/values-pl/strings.xml +++ b/core/res/res/values-pl/strings.xml @@ -1244,6 +1244,8 @@ <string name="permdesc_copyProtectedData" msgid="4390697124288317831">"Pozwala aplikacji na wywoływanie domyślnej usługi kontenera w celu skopiowania zawartości. Nieprzeznaczone dla zwykłych aplikacji."</string> <string name="permlab_route_media_output" msgid="1642024455750414694">"Kierowanie wyjścia multimediów"</string> <string name="permdesc_route_media_output" msgid="4932818749547244346">"Pozwala aplikacji na kierowanie wyjściowych danych multimedialnych do innych urządzeń zewnętrznych."</string> + <string name="permlab_access_keyguard_secure_storage" msgid="7565552237977815047">"Dostęp do bezpiecznego magazynu kluczy"</string> + <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Zezwala aplikacji na dostęp do bezpiecznego magazynu kluczy."</string> <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Dotknij dwukrotnie, aby sterować powiększeniem."</string> <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Nie można dodać widżetu."</string> <string name="ime_action_go" msgid="8320845651737369027">"OK"</string> diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml index 82a0893..a9cbead 100644 --- a/core/res/res/values-pt-rPT/strings.xml +++ b/core/res/res/values-pt-rPT/strings.xml @@ -1244,6 +1244,8 @@ <string name="permdesc_copyProtectedData" msgid="4390697124288317831">"Permite à aplicação invocar o serviço de contentor predefinido para copiar conteúdo. Não se destina a ser utilizado por aplicações normais."</string> <string name="permlab_route_media_output" msgid="1642024455750414694">"Encaminhar saída de som multimédia"</string> <string name="permdesc_route_media_output" msgid="4932818749547244346">"Permite que a aplicação encaminhe a saída de som multimédia para outros dispositivos externos."</string> + <string name="permlab_access_keyguard_secure_storage" msgid="7565552237977815047">"Aceder ao armazenamento seguro de proteção de teclado"</string> + <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Permite a uma aplicação aceder ao armazenamento seguro de proteção de teclado."</string> <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Toque duas vezes para controlar o zoom"</string> <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Não foi possível adicionar widget."</string> <string name="ime_action_go" msgid="8320845651737369027">"Ir"</string> diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml index 873c9db..e1e45cc 100644 --- a/core/res/res/values-pt/strings.xml +++ b/core/res/res/values-pt/strings.xml @@ -1249,6 +1249,8 @@ <string name="permdesc_copyProtectedData" msgid="4390697124288317831">"Permite que o aplicativo invoque serviços contêiner padrão para copiar conteúdo. Não deve ser usado em aplicativos normais."</string> <string name="permlab_route_media_output" msgid="1642024455750414694">"Rotear saída de mídia"</string> <string name="permdesc_route_media_output" msgid="4932818749547244346">"Permite que um aplicativo faça o roteamento de saída de mídia para outros dispositivos externos."</string> + <string name="permlab_access_keyguard_secure_storage" msgid="7565552237977815047">"Acessar o armazenamento seguro do bloqueio de teclado"</string> + <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Permite que o aplicativo acesse o armazenamento seguro do bloqueio de teclado."</string> <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Toque duas vezes para controlar o zoom"</string> <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Não foi possível adicionar widget."</string> <string name="ime_action_go" msgid="8320845651737369027">"Ir"</string> diff --git a/core/res/res/values-rm/strings.xml b/core/res/res/values-rm/strings.xml index e934a08..6301c1a 100644 --- a/core/res/res/values-rm/strings.xml +++ b/core/res/res/values-rm/strings.xml @@ -1959,6 +1959,10 @@ <skip /> <!-- no translation found for permdesc_route_media_output (4932818749547244346) --> <skip /> + <!-- no translation found for permlab_access_keyguard_secure_storage (7565552237977815047) --> + <skip /> + <!-- no translation found for permdesc_access_keyguard_secure_storage (5866245484303285762) --> + <skip /> <!-- no translation found for tutorial_double_tap_to_zoom_message_short (4070433208160063538) --> <skip /> <!-- no translation found for gadget_host_error_inflating (4882004314906466162) --> diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml index fdeeb93..ab8d5fc 100644 --- a/core/res/res/values-ro/strings.xml +++ b/core/res/res/values-ro/strings.xml @@ -1244,6 +1244,8 @@ <string name="permdesc_copyProtectedData" msgid="4390697124288317831">"Permite aplicaţiei să invoce serviciul containerului prestabilit pentru a copia conţinutul. Nu se utilizează de aplicaţiile obişnuite."</string> <string name="permlab_route_media_output" msgid="1642024455750414694">"Direcţionează rezultatele media"</string> <string name="permdesc_route_media_output" msgid="4932818749547244346">"Permite unei aplicaţii să direcţioneze rezultate media către alte dispozitive externe."</string> + <string name="permlab_access_keyguard_secure_storage" msgid="7565552237977815047">"Accesează stocarea securizată când tastatura este blocată"</string> + <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Permite unei aplicații să acceseze stocarea securizată când tastatura este blocată."</string> <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Atingeţi de două ori pentru a mări/micşora"</string> <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Nu s-a putut adăuga widgetul."</string> <string name="ime_action_go" msgid="8320845651737369027">"Accesaţi"</string> diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml index da1f312..a8601d9 100644 --- a/core/res/res/values-ru/strings.xml +++ b/core/res/res/values-ru/strings.xml @@ -1244,6 +1244,8 @@ <string name="permdesc_copyProtectedData" msgid="4390697124288317831">"Приложение сможет вызывать службу контейнеров по умолчанию для копирования данных. Это разрешение не используется обычными приложениями."</string> <string name="permlab_route_media_output" msgid="1642024455750414694">"Перенаправление мультимедийных данных"</string> <string name="permdesc_route_media_output" msgid="4932818749547244346">"Приложение сможет направлять поток мультимедиа на другие внешние устройства."</string> + <string name="permlab_access_keyguard_secure_storage" msgid="7565552237977815047">"Доступ к хранилищу ключей"</string> + <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Приложение сможет получить доступ к хранилищу ключей."</string> <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Нажмите дважды для изменения масштаба"</string> <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Не удалось добавить виджет."</string> <string name="ime_action_go" msgid="8320845651737369027">"Выбрать"</string> diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml index 94fdd7b..2be90eb 100644 --- a/core/res/res/values-sk/strings.xml +++ b/core/res/res/values-sk/strings.xml @@ -1244,6 +1244,8 @@ <string name="permdesc_copyProtectedData" msgid="4390697124288317831">"Umožňuje volať predvolenú službu kontajnera na skopírovanie obsahu. Bežné aplikácie toto nastavenie nepoužívajú."</string> <string name="permlab_route_media_output" msgid="1642024455750414694">"Smerovanie výstupu médií"</string> <string name="permdesc_route_media_output" msgid="4932818749547244346">"Umožňuje aplikácii smerovať výstup médií do ďalších externých zariadení."</string> + <string name="permlab_access_keyguard_secure_storage" msgid="7565552237977815047">"Prístup k ukladaciemu priestoru zabezpečenému technológiou keyguard"</string> + <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Umožňuje aplikácii získať prístup k ukladaciemu priestoru zabezpečenému technológiou keyguard."</string> <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Ovládacie prvky lupy zobrazíte dvojitým dotknutím"</string> <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Miniaplikáciu sa nepodarilo pridať."</string> <string name="ime_action_go" msgid="8320845651737369027">"Hľadať"</string> diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml index 1486341..5ab5261 100644 --- a/core/res/res/values-sl/strings.xml +++ b/core/res/res/values-sl/strings.xml @@ -1249,6 +1249,8 @@ <string name="permdesc_copyProtectedData" msgid="4390697124288317831">"Programu omogoča pozivanje privzete storitve vsebnika, da kopira vsebino. Ni za uporabo z navadnimi programi."</string> <string name="permlab_route_media_output" msgid="1642024455750414694">"Preusmeritev predstavnosti"</string> <string name="permdesc_route_media_output" msgid="4932818749547244346">"Aplikaciji omogoča preusmerjanje predstavnosti v druge zunanje naprave."</string> + <string name="permlab_access_keyguard_secure_storage" msgid="7565552237977815047">"Dostop do varne shrambe Keyguard."</string> + <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Aplikaciji omogoča dostop do varne shrambe Keyguard."</string> <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Dvakrat se dotaknite za nadzor povečave/pomanjšave"</string> <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Pripomočka ni bilo mogoče dodati."</string> <string name="ime_action_go" msgid="8320845651737369027">"Pojdi"</string> diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml index 1ec58d4..0cb15cc 100644 --- a/core/res/res/values-sr/strings.xml +++ b/core/res/res/values-sr/strings.xml @@ -1244,6 +1244,8 @@ <string name="permdesc_copyProtectedData" msgid="4390697124288317831">"Дозвољава апликацији да од подразумеване услуге контејнера захтева да копира садржај. Не користе је уобичајене апликације."</string> <string name="permlab_route_media_output" msgid="1642024455750414694">"Усмеравање излаза медија"</string> <string name="permdesc_route_media_output" msgid="4932818749547244346">"Дозвољава апликацији да усмерава излаз медија на друге спољне уређаје."</string> + <string name="permlab_access_keyguard_secure_storage" msgid="7565552237977815047">"Приступај безбедној меморији заштићеној шифром"</string> + <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Дозвољава апликацији да приступа безбедној меморији заштићеној шифром."</string> <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Додирните двапут да бисте контролисали зум"</string> <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Није могуће додати виџет."</string> <string name="ime_action_go" msgid="8320845651737369027">"Иди"</string> diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml index 6a51baf..1e3dccd 100644 --- a/core/res/res/values-sv/strings.xml +++ b/core/res/res/values-sv/strings.xml @@ -1244,6 +1244,8 @@ <string name="permdesc_copyProtectedData" msgid="4390697124288317831">"Tillåter att appen kopierar innehåll genom att standardbehållartjänsten startas. Används inte av vanliga appar."</string> <string name="permlab_route_media_output" msgid="1642024455750414694">"Omdirigera medieuppspelning"</string> <string name="permdesc_route_media_output" msgid="4932818749547244346">"Tillåter att appen omdirigerar medieuppspelningar till andra externa enheter."</string> + <string name="permlab_access_keyguard_secure_storage" msgid="7565552237977815047">"Åtkomst till säkert keyguard-lagringsutrymme"</string> + <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Tillåter att en app får åtkomst till säkert keyguard-lagringsutrymme."</string> <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Tryck två gånger för zoomkontroll"</string> <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Det gick inte att lägga till widgeten."</string> <string name="ime_action_go" msgid="8320845651737369027">"Kör"</string> diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml index d1e4270..48e20de 100644 --- a/core/res/res/values-sw/strings.xml +++ b/core/res/res/values-sw/strings.xml @@ -1249,6 +1249,8 @@ <string name="permdesc_copyProtectedData" msgid="4390697124288317831">"Inaruhusu programu kuomba huduma ya chombo chaguo-msingi kunakili maudhui. Si ya matumizi na programu za kawiada."</string> <string name="permlab_route_media_output" msgid="1642024455750414694">"Fuatalia utoaji wa habari"</string> <string name="permdesc_route_media_output" msgid="4932818749547244346">"Inaruhusu programu kufuatilia utoaji wa habari kwa vifaa vingine vya nje."</string> + <string name="permlab_access_keyguard_secure_storage" msgid="7565552237977815047">"Kufikia hifadhi salama ya ufunguo wa ulinzi"</string> + <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Inaruhusu programu kufikia hifadhi salama ya ufunguo wa ulinzi."</string> <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Gusa mara mbili kwa udhibiti cha kuza"</string> <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Haikuweza kuongeza wijeti."</string> <string name="ime_action_go" msgid="8320845651737369027">"Nenda"</string> diff --git a/core/res/res/values-sw600dp-land/arrays.xml b/core/res/res/values-sw600dp-land/arrays.xml index 5550216..5602a1c 100644 --- a/core/res/res/values-sw600dp-land/arrays.xml +++ b/core/res/res/values-sw600dp-land/arrays.xml @@ -19,54 +19,4 @@ --> <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <!-- Resources for GlowPadView in LockScreen --> - <array name="lockscreen_targets_when_silent"> - <item>@drawable/ic_lockscreen_unlock</item> - <item>@null</item> - <item>@drawable/ic_lockscreen_soundon</item> - <item>@null</item> - </array> - - <array name="lockscreen_target_descriptions_when_silent"> - <item>@string/description_target_unlock</item> - <item>@null</item> - <item>@string/description_target_soundon</item> - <item>@null</item> - </array> - - <array name="lockscreen_direction_descriptions"> - <item>@string/description_direction_right</item> - <item>@null</item> - <item>@string/description_direction_left</item> - <item>@null</item> - </array> - - <array name="lockscreen_targets_when_soundon"> - <item>@drawable/ic_lockscreen_unlock</item> - <item>@null</item> - <item>@drawable/ic_lockscreen_silent</item> - <item>@null</item> - </array> - - <array name="lockscreen_target_descriptions_when_soundon"> - <item>@string/description_target_unlock</item> - <item>@null</item> - <item>@string/description_target_silent</item> - <item>@null</item> - </array> - - <array name="lockscreen_targets_with_camera"> - <item>@drawable/ic_lockscreen_unlock</item> - <item>@drawable/ic_action_assist_generic</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>@string/description_target_search</item> - <item>@string/description_target_camera</item> - <item>@null</item> - </array> - </resources> diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml index 4bca1b1..62425a4 100644 --- a/core/res/res/values-th/strings.xml +++ b/core/res/res/values-th/strings.xml @@ -1249,6 +1249,8 @@ <string name="permdesc_copyProtectedData" msgid="4390697124288317831">"อนุญาตให้แอปพลิเคชันเรียกใช้บริการที่เก็บค่าเริ่มต้นเพื่อคัดลอกเนื้อหา ไม่ใช้สำหรับแอปพลิเคชันทั่วไป"</string> <string name="permlab_route_media_output" msgid="1642024455750414694">"กำหนดเส้นทางเอาต์พุตของสื่อ"</string> <string name="permdesc_route_media_output" msgid="4932818749547244346">"อนุญาตให้แอปพลิเคชันกำหนดเส้นทางเอาต์พุตของสื่อไปยังอุปกรณ์ภายนอกอื่นๆ"</string> + <string name="permlab_access_keyguard_secure_storage" msgid="7565552237977815047">"เข้าถึงพื้นที่จัดเก็บที่รักษาความปลอดภัยด้วยคีย์การ์ด"</string> + <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"อนุญาตให้แอปพลิเคชันเข้าถึงพื้นที่จัดเก็บที่รักษาความปลอดภัยด้วยคีย์การ์ด"</string> <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"แตะสองครั้งเพื่อควบคุมการซูม"</string> <string name="gadget_host_error_inflating" msgid="4882004314906466162">"ไม่สามารถเพิ่มวิดเจ็ต"</string> <string name="ime_action_go" msgid="8320845651737369027">"ไป"</string> diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml index 5354a54..ed0b823 100644 --- a/core/res/res/values-tl/strings.xml +++ b/core/res/res/values-tl/strings.xml @@ -1244,6 +1244,8 @@ <string name="permdesc_copyProtectedData" msgid="4390697124288317831">"Pinapayagan ang app na i-apela ang default na serbisyo ng container upang kopyahin ang nilalaman. Hindi para sa paggamit ng normal na apps."</string> <string name="permlab_route_media_output" msgid="1642024455750414694">"I-route ang output ng media"</string> <string name="permdesc_route_media_output" msgid="4932818749547244346">"Pinapayagan ang application na mag-route ng output ng media sa iba pang mga panlabas na device."</string> + <string name="permlab_access_keyguard_secure_storage" msgid="7565552237977815047">"I-access ang secure na storage ng keyguard"</string> + <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Nagbibigay-daan sa isang application na i-access ang secure na storage ng keyguard."</string> <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Pindutin nang dalawang beses para sa pagkontrol ng zoom"</string> <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Hindi maidagdag ang widget."</string> <string name="ime_action_go" msgid="8320845651737369027">"Pumunta"</string> diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml index c5ce4cd..e5c85bb 100644 --- a/core/res/res/values-tr/strings.xml +++ b/core/res/res/values-tr/strings.xml @@ -1244,6 +1244,8 @@ <string name="permdesc_copyProtectedData" msgid="4390697124288317831">"Uygulamaya, içerik kopyalamak için varsayılan kapsayıcı hizmetini çağırma izni verir. Normal uygulamaların kullanımına yönelik değildir."</string> <string name="permlab_route_media_output" msgid="1642024455750414694">"Medya çıktısını yönlendir"</string> <string name="permdesc_route_media_output" msgid="4932818749547244346">"Uygulamaya medya çıktısını başka harici cihazlara yönlendirme izni verir."</string> + <string name="permlab_access_keyguard_secure_storage" msgid="7565552237977815047">"Tuş kilitli güvenli depolamaya erişim"</string> + <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Bir uygulamanın tuş kilitli güvenli depolamaya erişimine izin verir."</string> <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Yakınlaştırma denetimi için iki kez dokunun"</string> <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Widget eklenemedi."</string> <string name="ime_action_go" msgid="8320845651737369027">"Git"</string> diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml index 7c8f192..661fc49 100644 --- a/core/res/res/values-uk/strings.xml +++ b/core/res/res/values-uk/strings.xml @@ -1244,6 +1244,8 @@ <string name="permdesc_copyProtectedData" msgid="4390697124288317831">"Дозволяє програмі викликати службу контейнерів за умовчанням для копіювання вмісту. Не для використання звичайними програмами."</string> <string name="permlab_route_media_output" msgid="1642024455750414694">"Скеровувати вивід медіа-даних"</string> <string name="permdesc_route_media_output" msgid="4932818749547244346">"Дозволяє програмі скеровувати вивід медіа-даних на інші зовнішні пристрої."</string> + <string name="permlab_access_keyguard_secure_storage" msgid="7565552237977815047">"Отримувати доступ до безпечного сховища через клавіатуру"</string> + <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Дозволяє програмі отримувати доступ до безпечного сховища через клавіатуру."</string> <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Двічі торкніться, щоб керувати масштабом"</string> <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Не вдалося додати віджет."</string> <string name="ime_action_go" msgid="8320845651737369027">"Йти"</string> diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml index e9ccd36..c9e706f 100644 --- a/core/res/res/values-vi/strings.xml +++ b/core/res/res/values-vi/strings.xml @@ -1244,6 +1244,8 @@ <string name="permdesc_copyProtectedData" msgid="4390697124288317831">"Cho phép ứng dụng gọi ra dịch vụ bộ chứa mặc định để sao chép nội dung. Không dành cho ứng dụng thông thường."</string> <string name="permlab_route_media_output" msgid="1642024455750414694">"Định tuyến thiết bị ra phương tiện"</string> <string name="permdesc_route_media_output" msgid="4932818749547244346">"Cho phép ứng dụng định tuyến thiết bị ra phương tiện đến các thiết bị bên ngoài khác."</string> + <string name="permlab_access_keyguard_secure_storage" msgid="7565552237977815047">"Truy cập bộ nhớ an toàn khóa bàn phím"</string> + <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Cho phép ứng dụng truy cập bộ nhớ an toàn khóa"</string> <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Chạm hai lần để kiểm soát thu phóng"</string> <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Không thể thêm tiện ích."</string> <string name="ime_action_go" msgid="8320845651737369027">"Đến"</string> diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml index c768ec8..cca3eaf 100644 --- a/core/res/res/values-zh-rCN/strings.xml +++ b/core/res/res/values-zh-rCN/strings.xml @@ -1244,6 +1244,8 @@ <string name="permdesc_copyProtectedData" msgid="4390697124288317831">"允许应用调用默认的容器服务,以便复制内容。普通应用不应使用此权限。"</string> <string name="permlab_route_media_output" msgid="1642024455750414694">"更改媒体输出线路"</string> <string name="permdesc_route_media_output" msgid="4932818749547244346">"允许该应用将媒体输出线路更改到其他外部设备。"</string> + <string name="permlab_access_keyguard_secure_storage" msgid="7565552237977815047">"访问密钥保护安全存储空间"</string> + <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"允许应用访问密钥保护安全存储空间。"</string> <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"触摸两次可进行缩放控制"</string> <string name="gadget_host_error_inflating" msgid="4882004314906466162">"无法添加小部件。"</string> <string name="ime_action_go" msgid="8320845651737369027">"开始"</string> diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml index 5cb2f9d..5c6b435 100644 --- a/core/res/res/values-zh-rTW/strings.xml +++ b/core/res/res/values-zh-rTW/strings.xml @@ -1249,6 +1249,8 @@ <string name="permdesc_copyProtectedData" msgid="4390697124288317831">"允許觸發預設容器服務,以便複製內容 (不建議一般應用程式使用)。"</string> <string name="permlab_route_media_output" msgid="1642024455750414694">"轉送媒體輸出"</string> <string name="permdesc_route_media_output" msgid="4932818749547244346">"允許應用程式將媒體輸出轉送至其他外部裝置。"</string> + <string name="permlab_access_keyguard_secure_storage" msgid="7565552237977815047">"存取 Keyguard 安全儲存空間"</string> + <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"允許應用程式存取 Keyguard 安全儲存空間。"</string> <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"輕觸兩下即可控制縮放"</string> <string name="gadget_host_error_inflating" msgid="4882004314906466162">"無法新增小工具。"</string> <string name="ime_action_go" msgid="8320845651737369027">"開始"</string> diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml index d9d0913..5d25476 100644 --- a/core/res/res/values-zu/strings.xml +++ b/core/res/res/values-zu/strings.xml @@ -1244,6 +1244,8 @@ <string name="permdesc_copyProtectedData" msgid="4390697124288317831">"Ivumela insiza ukuthi inqabe okutholakala kukhona ukukopisha okuqukethwe. Akusetshenziswa izinsiza ezijwayelekile."</string> <string name="permlab_route_media_output" msgid="1642024455750414694">"Yenza umzila wemidiya wokukhiphayo"</string> <string name="permdesc_route_media_output" msgid="4932818749547244346">"Ivumela uhlelo lokusebenza ukwenza umzila wokukhiphayo wemidiya kuya kumadivayisi angaphandle."</string> + <string name="permlab_access_keyguard_secure_storage" msgid="7565552237977815047">"Finyelela kusitoreji esiqashwa ngesikhiya esiphephile"</string> + <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Ivumela uhlelo lokusebenza ukuthi lufinyelele kusitoreji esiqashwa ngesikhiya esiphephile."</string> <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Thinta kabili ukulawula ukusondeza"</string> <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Yehlulekile ukwengeza i-widget."</string> <string name="ime_action_go" msgid="8320845651737369027">"Iya"</string> diff --git a/core/res/res/values/arrays.xml b/core/res/res/values/arrays.xml index f7ff77b..7cdc7bb 100644 --- a/core/res/res/values/arrays.xml +++ b/core/res/res/values/arrays.xml @@ -342,75 +342,4 @@ <item>中文 (繁體)</item> </string-array> - <!-- Resources for GlowPadView in LockScreen --> - <array name="lockscreen_targets_when_silent"> - <item>@drawable/ic_lockscreen_unlock</item> - <item>@drawable/ic_action_assist_generic</item> - <item>@drawable/ic_lockscreen_soundon</item> - <item>@null</item> - </array> - - <array name="lockscreen_target_descriptions_when_silent"> - <item>@string/description_target_unlock</item> - <item>@string/description_target_search</item> - <item>@string/description_target_soundon</item> - <item>@null</item> - </array> - - <array name="lockscreen_direction_descriptions"> - <item>@string/description_direction_right</item> - <item>@string/description_direction_up</item> - <item>@string/description_direction_left</item> - <item>@null</item> - </array> - - <array name="lockscreen_targets_when_soundon"> - <item>@drawable/ic_lockscreen_unlock</item> - <item>@drawable/ic_action_assist_generic</item> - <item>@drawable/ic_lockscreen_silent</item> - <item>@null</item> - </array> - - <array name="lockscreen_target_descriptions_when_soundon"> - <item>@string/description_target_unlock</item> - <item>@string/description_target_search</item> - <item>@string/description_target_silent</item> - <item>@null</item> - </array> - - <array name="lockscreen_targets_with_camera"> - <item>@drawable/ic_lockscreen_unlock</item> - <item>@drawable/ic_action_assist_generic</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>@string/description_target_search</item> - <item>@string/description_target_camera</item> - <item>@null</item> - </array> - - <array name="lockscreen_targets_unlock_only"> - <item>@*android:drawable/ic_lockscreen_unlock</item> - </array> - - <array name="lockscreen_target_descriptions_unlock_only"> - <item>@*android:string/description_target_unlock</item> - </array> - - <!-- list of 3- or 4-letter mnemonics for a 10-key numeric keypad --> - <string-array translatable="false" name="lockscreen_num_pad_klondike"> - <item></item><!-- 0 --> - <item></item><!-- 1 --> - <item>ABC</item><!-- 2 --> - <item>DEF</item><!-- 3 --> - <item>GHI</item><!-- 4 --> - <item>JKL</item><!-- 5 --> - <item>MNO</item><!-- 6 --> - <item>PQRS</item><!-- 7 --> - <item>TUV</item><!-- 8 --> - <item>WXYZ</item><!-- 9 --> - </string-array> </resources> diff --git a/core/res/res/values/attrs_manifest.xml b/core/res/res/values/attrs_manifest.xml index 0afe4c1..2423ba8 100644 --- a/core/res/res/values/attrs_manifest.xml +++ b/core/res/res/values/attrs_manifest.xml @@ -1723,4 +1723,12 @@ <!-- Concrete value to put for this named extra data. --> <attr name="value" /> </declare-styleable> + + <attr name="keyset" /> + <declare-styleable name="PublicKey"> + <attr name="value" /> + </declare-styleable> + <declare-styleable name="KeySet"> + <attr name="name" /> + </declare-styleable> </resources> diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml index 42d692f..7f852b7 100644 --- a/core/res/res/values/public.xml +++ b/core/res/res/values/public.xml @@ -2051,4 +2051,11 @@ <public type="style" name="Theme.DeviceDefault.NoActionBar.Overscan" /> <public type="style" name="Theme.DeviceDefault.Light.NoActionBar.Overscan" /> +<!-- =============================================================== + Resources added in version 19 of the platform + =============================================================== --> + <eat-comment /> + + <public type="attr" name="keyset" /> + </resources> diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml index 4a15967..6614c42 100644 --- a/core/res/res/values/strings.xml +++ b/core/res/res/values/strings.xml @@ -3444,6 +3444,11 @@ <!-- Description of an application permission that lets an application route media output. --> <string name="permdesc_route_media_output">Allows an application to route media output to other external devices.</string> + <!-- Title of an application permission that lets an application access keyguard secure storage. --> + <string name="permlab_access_keyguard_secure_storage">Access keyguard secure storage</string> + <!-- Description of an application permission that lets an application access keyguard secure storage. --> + <string name="permdesc_access_keyguard_secure_storage">Allows an application to access keguard secure storage.</string> + <!-- Shown in the tutorial for tap twice for zoom control. --> <string name="tutorial_double_tap_to_zoom_message_short">Touch twice for zoom control</string> diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index 757bbc8..81aea16 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -38,16 +38,12 @@ <java-symbol type="id" name="action_menu_presenter" /> <java-symbol type="id" name="action_mode_close_button" /> <java-symbol type="id" name="activity_chooser_view_content" /> - <java-symbol type="id" name="albumart" /> <java-symbol type="id" name="alertTitle" /> <java-symbol type="id" name="allow_button" /> <java-symbol type="id" name="alwaysUse" /> <java-symbol type="id" name="amPm" /> <java-symbol type="id" name="authtoken_type" /> <java-symbol type="id" name="back_button" /> - <java-symbol type="id" name="btn_next" /> - <java-symbol type="id" name="btn_play" /> - <java-symbol type="id" name="btn_prev" /> <java-symbol type="id" name="button_bar" /> <java-symbol type="id" name="buttonPanel" /> <java-symbol type="id" name="by_common" /> @@ -561,26 +557,6 @@ <java-symbol type="string" name="keyboardview_keycode_enter" /> <java-symbol type="string" name="keyboardview_keycode_mode_change" /> <java-symbol type="string" name="keyboardview_keycode_shift" /> - <java-symbol type="string" name="keyguard_accessibility_add_widget" /> - <java-symbol type="string" name="keyguard_accessibility_camera" /> - <java-symbol type="string" name="keyguard_accessibility_expand_lock_area" /> - <java-symbol type="string" name="keyguard_accessibility_face_unlock" /> - <java-symbol type="string" name="keygaurd_accessibility_media_controls" /> - <java-symbol type="string" name="keyguard_accessibility_pattern_area" /> - <java-symbol type="string" name="keyguard_accessibility_pattern_unlock" /> - <java-symbol type="string" name="keyguard_accessibility_password_unlock" /> - <java-symbol type="string" name="keyguard_accessibility_pin_unlock" /> - <java-symbol type="string" name="keyguard_accessibility_slide_area" /> - <java-symbol type="string" name="keyguard_accessibility_slide_unlock" /> - <java-symbol type="string" name="keyguard_accessibility_status" /> - <java-symbol type="string" name="keyguard_accessibility_user_selector" /> - <java-symbol type="string" name="keyguard_accessibility_widget" /> - <java-symbol type="string" name="keyguard_accessibility_widget_deleted" /> - <java-symbol type="string" name="keyguard_accessibility_widget_empty_slot" /> - <java-symbol type="string" name="keyguard_accessibility_widget_reorder_start" /> - <java-symbol type="string" name="keyguard_accessibility_widget_reorder_end" /> - <java-symbol type="string" name="keyguard_accessibility_unlock_area_collapsed" /> - <java-symbol type="string" name="keyguard_accessibility_unlock_area_expanded" /> <java-symbol type="string" name="kilobyteShort" /> <java-symbol type="string" name="last_month" /> <java-symbol type="string" name="launchBrowserDefault" /> @@ -590,9 +566,6 @@ <java-symbol type="string" name="lockscreen_access_pattern_start" /> <java-symbol type="string" name="lockscreen_emergency_call" /> <java-symbol type="string" name="lockscreen_return_to_call" /> - <java-symbol type="string" name="lockscreen_transport_pause_description" /> - <java-symbol type="string" name="lockscreen_transport_play_description" /> - <java-symbol type="string" name="lockscreen_transport_stop_description" /> <java-symbol type="string" name="low_memory" /> <java-symbol type="string" name="media_bad_removal" /> <java-symbol type="string" name="media_checking" /> @@ -1007,16 +980,11 @@ <java-symbol type="drawable" name="unlock_halo" /> <java-symbol type="drawable" name="unlock_ring" /> <java-symbol type="drawable" name="unlock_wave" /> - <java-symbol type="drawable" name="ic_lockscreen_camera" /> - <java-symbol type="drawable" name="ic_lockscreen_silent" /> - <java-symbol type="drawable" name="ic_lockscreen_unlock" /> <java-symbol type="drawable" name="ic_action_assist_generic" /> - <java-symbol type="drawable" name="ic_lockscreen_alarm" /> <java-symbol type="drawable" name="notification_bg" /> <java-symbol type="drawable" name="notification_bg_low" /> <java-symbol type="drawable" name="notification_template_icon_bg" /> <java-symbol type="drawable" name="notification_template_icon_low_bg" /> - <java-symbol type="drawable" name="ic_lockscreen_unlock_phantom" /> <java-symbol type="drawable" name="ic_media_route_on_holo_dark" /> <java-symbol type="drawable" name="ic_media_route_disabled_holo_dark" /> @@ -1116,10 +1084,7 @@ <java-symbol type="layout" name="notification_template_part_time" /> <java-symbol type="layout" name="notification_template_part_chronometer" /> <java-symbol type="layout" name="notification_template_inbox" /> - <java-symbol type="layout" name="keyguard_multi_user_avatar" /> - <java-symbol type="layout" name="keyguard_multi_user_selector_widget" /> <java-symbol type="layout" name="sms_short_code_confirmation_dialog" /> - <java-symbol type="layout" name="keyguard_add_widget" /> <java-symbol type="layout" name="action_bar_up_container" /> <java-symbol type="layout" name="app_not_authorized" /> @@ -1137,7 +1102,6 @@ <java-symbol type="xml" name="password_kbd_qwerty_shifted" /> <java-symbol type="xml" name="password_kbd_symbols" /> <java-symbol type="xml" name="password_kbd_symbols_shift" /> - <java-symbol type="xml" name="kg_password_kbd_numeric" /> <java-symbol type="xml" name="power_profile" /> <java-symbol type="xml" name="time_zones_by_country" /> <java-symbol type="xml" name="sms_short_codes" /> @@ -1190,8 +1154,6 @@ <!-- From android.policy --> <java-symbol type="anim" name="app_starting_exit" /> - <java-symbol type="anim" name="lock_screen_behind_enter" /> - <java-symbol type="anim" name="lock_screen_wallpaper_behind_enter" /> <java-symbol type="anim" name="dock_top_enter" /> <java-symbol type="anim" name="dock_top_exit" /> <java-symbol type="anim" name="dock_bottom_enter" /> @@ -1200,22 +1162,12 @@ <java-symbol type="anim" name="dock_left_exit" /> <java-symbol type="anim" name="dock_right_enter" /> <java-symbol type="anim" name="dock_right_exit" /> - <java-symbol type="anim" name="keyguard_security_animate_in" /> - <java-symbol type="anim" name="keyguard_security_animate_out" /> - <java-symbol type="anim" name="keyguard_security_fade_in" /> - <java-symbol type="anim" name="keyguard_security_fade_out" /> - <java-symbol type="anim" name="keyguard_action_assist_exit" /> - <java-symbol type="anim" name="keyguard_action_assist_enter" /> <java-symbol type="array" name="config_keyboardTapVibePattern" /> <java-symbol type="array" name="config_longPressVibePattern" /> <java-symbol type="array" name="config_safeModeDisabledVibePattern" /> <java-symbol type="array" name="config_safeModeEnabledVibePattern" /> <java-symbol type="array" name="config_virtualKeyVibePattern" /> - <java-symbol type="array" name="lockscreen_targets_when_silent" /> - <java-symbol type="array" name="lockscreen_targets_when_soundon" /> - <java-symbol type="array" name="lockscreen_targets_with_camera" /> - <java-symbol type="array" name="lockscreen_num_pad_klondike" /> <java-symbol type="attr" name="actionModePopupWindowStyle" /> <java-symbol type="attr" name="dialogCustomTitleDecorLayout" /> <java-symbol type="attr" name="dialogTitleDecorLayout" /> @@ -1230,33 +1182,11 @@ <java-symbol type="bool" name="config_lidControlsSleep" /> <java-symbol type="bool" name="config_reverseDefaultRotation" /> <java-symbol type="bool" name="config_showNavigationBar" /> - <java-symbol type="bool" name="kg_enable_camera_default_widget" /> - <java-symbol type="bool" name="kg_share_status_area" /> - <java-symbol type="bool" name="kg_sim_puk_account_full_screen" /> - <java-symbol type="bool" name="kg_top_align_page_shrink_on_bouncer_visible" /> <java-symbol type="bool" name="target_honeycomb_needs_options_menu" /> - <java-symbol type="bool" name="kg_center_small_widgets_vertically" /> - <java-symbol type="bool" name="kg_show_ime_at_screen_on" /> - <java-symbol type="color" name="kg_multi_user_text_active" /> - <java-symbol type="color" name="kg_multi_user_text_inactive" /> - <java-symbol type="color" name="kg_widget_pager_gradient" /> - <java-symbol type="color" name="keyguard_avatar_frame_color" /> - <java-symbol type="color" name="keyguard_avatar_frame_pressed_color" /> - <java-symbol type="color" name="keyguard_avatar_frame_shadow_color" /> - <java-symbol type="color" name="keyguard_avatar_nick_color" /> <java-symbol type="dimen" name="navigation_bar_height" /> <java-symbol type="dimen" name="navigation_bar_height_landscape" /> <java-symbol type="dimen" name="navigation_bar_width" /> <java-symbol type="dimen" name="status_bar_height" /> - <java-symbol type="dimen" name="kg_widget_pager_horizontal_padding" /> - <java-symbol type="dimen" name="kg_widget_pager_top_padding" /> - <java-symbol type="dimen" name="kg_widget_pager_bottom_padding" /> - <java-symbol type="dimen" name="keyguard_avatar_size" /> - <java-symbol type="dimen" name="keyguard_avatar_frame_stroke_width" /> - <java-symbol type="dimen" name="keyguard_avatar_frame_shadow_radius" /> - <java-symbol type="dimen" name="kg_edge_swipe_region_size" /> - <java-symbol type="dimen" name="kg_squashed_layout_threshold" /> - <java-symbol type="dimen" name="kg_small_widget_height" /> <java-symbol type="drawable" name="ic_jog_dial_sound_off" /> <java-symbol type="drawable" name="ic_jog_dial_sound_on" /> <java-symbol type="drawable" name="ic_jog_dial_unlock" /> @@ -1275,9 +1205,7 @@ <java-symbol type="drawable" name="magnified_region_frame" /> <java-symbol type="drawable" name="menu_background" /> <java-symbol type="drawable" name="stat_sys_secure" /> - <java-symbol type="drawable" name="kg_widget_bg_padded" /> <java-symbol type="id" name="action_mode_bar_stub" /> - <java-symbol type="id" name="alarm_status" /> <java-symbol type="id" name="button0" /> <java-symbol type="id" name="button4" /> <java-symbol type="id" name="button5" /> @@ -1285,15 +1213,12 @@ <java-symbol type="id" name="button7" /> <java-symbol type="id" name="date" /> <java-symbol type="id" name="eight" /> - <java-symbol type="id" name="face_unlock_area_view" /> - <java-symbol type="id" name="face_unlock_cancel_button" /> <java-symbol type="id" name="five" /> <java-symbol type="id" name="four" /> <java-symbol type="id" name="icon_menu_presenter" /> <java-symbol type="id" name="keyboard" /> <java-symbol type="id" name="list_menu_presenter" /> <java-symbol type="id" name="lock_screen" /> - <java-symbol type="id" name="login" /> <java-symbol type="id" name="nine" /> <java-symbol type="id" name="no_applications_message" /> <java-symbol type="id" name="ok" /> @@ -1301,57 +1226,14 @@ <java-symbol type="id" name="option1" /> <java-symbol type="id" name="option2" /> <java-symbol type="id" name="option3" /> - <java-symbol type="id" name="password" /> - <java-symbol type="id" name="passwordEntry" /> - <java-symbol type="id" name="pinEntry" /> <java-symbol type="id" name="right_icon" /> <java-symbol type="id" name="seven" /> <java-symbol type="id" name="six" /> <java-symbol type="id" name="status" /> - <java-symbol type="id" name="switch_ime_button" /> <java-symbol type="id" name="three" /> <java-symbol type="id" name="title_container" /> <java-symbol type="id" name="two" /> <java-symbol type="id" name="zero" /> - <java-symbol type="id" name="keyguard_message_area" /> - <java-symbol type="id" name="keyguard_click_area" /> - <java-symbol type="id" name="keyguard_selector_view" /> - <java-symbol type="id" name="keyguard_pattern_view" /> - <java-symbol type="id" name="keyguard_password_view" /> - <java-symbol type="id" name="keyguard_pin_view" /> - <java-symbol type="id" name="keyguard_face_unlock_view" /> - <java-symbol type="id" name="keyguard_sim_pin_view" /> - <java-symbol type="id" name="keyguard_sim_puk_view" /> - <java-symbol type="id" name="keyguard_account_view" /> - <java-symbol type="id" name="keyguard_selector_fade_container" /> - <java-symbol type="id" name="keyguard_widget_pager_delete_target" /> - <java-symbol type="id" name="keyguard_bouncer_frame" /> - <java-symbol type="id" name="app_widget_container" /> - <java-symbol type="id" name="view_flipper" /> - <java-symbol type="id" name="carrier_text" /> - <java-symbol type="id" name="emergency_call_button" /> - <java-symbol type="id" name="keyguard_host_view" /> - <java-symbol type="id" name="delete_button" /> - <java-symbol type="id" name="lockPatternView" /> - <java-symbol type="id" name="forgot_password_button" /> - <java-symbol type="id" name="glow_pad_view" /> - <java-symbol type="id" name="delete_button" /> - <java-symbol type="id" name="keyguard_user_avatar" /> - <java-symbol type="id" name="keyguard_user_name" /> - <java-symbol type="id" name="keyguard_transport_control" /> - <java-symbol type="id" name="keyguard_status_view" /> - <java-symbol type="id" name="keyguard_status_view_face_palm" /> - <java-symbol type="id" name="keyguard_users_grid" /> - <java-symbol type="id" name="clock_text" /> - <java-symbol type="id" name="clock_view" /> - <java-symbol type="id" name="keyguard_multi_user_selector" /> - <java-symbol type="id" name="sliding_layout" /> - <java-symbol type="id" name="keyguard_add_widget" /> - <java-symbol type="id" name="keyguard_add_widget_view" /> - <java-symbol type="id" name="multi_pane_challenge" /> - <java-symbol type="id" name="keyguard_user_selector" /> - <java-symbol type="id" name="key_enter" /> - <java-symbol type="id" name="keyguard_selector_view_frame" /> <java-symbol type="integer" name="config_carDockRotation" /> <java-symbol type="integer" name="config_defaultUiModeType" /> <java-symbol type="integer" name="config_deskDockRotation" /> @@ -1359,18 +1241,8 @@ <java-symbol type="integer" name="config_lidNavigationAccessibility" /> <java-symbol type="integer" name="config_lidOpenRotation" /> <java-symbol type="integer" name="config_longPressOnHomeBehavior" /> - <java-symbol type="integer" name="kg_security_flip_duration" /> - <java-symbol type="integer" name="kg_carousel_angle" /> <java-symbol type="layout" name="global_actions_item" /> <java-symbol type="layout" name="global_actions_silent_mode" /> - <java-symbol type="layout" name="keyguard_selector_view" /> - <java-symbol type="layout" name="keyguard_pattern_view" /> - <java-symbol type="layout" name="keyguard_password_view" /> - <java-symbol type="layout" name="keyguard_pin_view" /> - <java-symbol type="layout" name="keyguard_face_unlock_view" /> - <java-symbol type="layout" name="keyguard_sim_pin_view" /> - <java-symbol type="layout" name="keyguard_sim_puk_view" /> - <java-symbol type="layout" name="keyguard_account_view" /> <java-symbol type="layout" name="recent_apps_dialog" /> <java-symbol type="layout" name="screen_action_bar" /> <java-symbol type="layout" name="screen_custom_title" /> @@ -1379,9 +1251,6 @@ <java-symbol type="layout" name="screen_simple_overlay_action_mode" /> <java-symbol type="layout" name="screen_title" /> <java-symbol type="layout" name="screen_title_icons" /> - <java-symbol type="layout" name="keyguard_host_view" /> - <java-symbol type="layout" name="keyguard_transport_control_view" /> - <java-symbol type="layout" name="keyguard_status_view" /> <java-symbol type="string" name="abbrev_wday_month_day_no_year" /> <java-symbol type="string" name="system_ui_date_pattern" /> <java-symbol type="string" name="android_upgrading_title" /> @@ -1397,41 +1266,7 @@ <java-symbol type="string" name="global_action_silent_mode_on_status" /> <java-symbol type="string" name="global_action_toggle_silent_mode" /> <java-symbol type="string" name="invalidPuk" /> - <java-symbol type="string" name="keyguard_password_enter_pin_code" /> - <java-symbol type="string" name="keyguard_password_enter_puk_code" /> - <java-symbol type="string" name="keyguard_password_wrong_pin_code" /> <java-symbol type="string" name="lockscreen_carrier_default" /> - <java-symbol type="string" name="lockscreen_charged" /> - <java-symbol type="string" name="lockscreen_failed_attempts_almost_at_wipe" /> - <java-symbol type="string" name="lockscreen_failed_attempts_almost_glogin" /> - <java-symbol type="string" name="lockscreen_failed_attempts_now_wiping" /> - <java-symbol type="string" name="lockscreen_forgot_pattern_button_text" /> - <java-symbol type="string" name="lockscreen_glogin_checking_password" /> - <java-symbol type="string" name="lockscreen_glogin_forgot_pattern" /> - <java-symbol type="string" name="lockscreen_glogin_invalid_input" /> - <java-symbol type="string" name="lockscreen_glogin_too_many_attempts" /> - <java-symbol type="string" name="lockscreen_instructions_when_pattern_disabled" /> - <java-symbol type="string" name="lockscreen_low_battery" /> - <java-symbol type="string" name="lockscreen_missing_sim_instructions" /> - <java-symbol type="string" name="lockscreen_missing_sim_instructions_long" /> - <java-symbol type="string" name="lockscreen_missing_sim_message_short" /> - <java-symbol type="string" name="lockscreen_network_locked_message" /> - <java-symbol type="string" name="lockscreen_password_wrong" /> - <java-symbol type="string" name="lockscreen_pattern_instructions" /> - <java-symbol type="string" name="lockscreen_pattern_wrong" /> - <java-symbol type="string" name="lockscreen_permanent_disabled_sim_message_short" /> - <java-symbol type="string" name="lockscreen_permanent_disabled_sim_instructions" /> - <java-symbol type="string" name="lockscreen_plugged_in" /> - <java-symbol type="string" name="lockscreen_sim_locked_message" /> - <java-symbol type="string" name="lockscreen_sim_puk_locked_message" /> - <java-symbol type="string" name="lockscreen_sim_unlock_progress_dialog_message" /> - <java-symbol type="string" name="lockscreen_sound_off_label" /> - <java-symbol type="string" name="lockscreen_sound_on_label" /> - <java-symbol type="string" name="lockscreen_too_many_failed_attempts_countdown" /> - <java-symbol type="string" name="lockscreen_too_many_failed_attempts_dialog_message" /> - <java-symbol type="string" name="lockscreen_too_many_failed_password_attempts_dialog_message" /> - <java-symbol type="string" name="lockscreen_too_many_failed_pin_attempts_dialog_message" /> - <java-symbol type="string" name="lockscreen_unlock_label" /> <java-symbol type="string" name="status_bar_device_locked" /> <java-symbol type="style" name="Animation.LockScreen" /> <java-symbol type="style" name="Theme.Dialog.RecentApplications" /> @@ -1439,40 +1274,6 @@ <java-symbol type="style" name="Widget.Button.NumPadKey" /> <java-symbol type="style" name="TextAppearance.NumPadKey" /> <java-symbol type="style" name="TextAppearance.NumPadKey.Klondike" /> - <java-symbol type="string" name="kg_emergency_call_label" /> - <java-symbol type="string" name="kg_forgot_pattern_button_text" /> - <java-symbol type="string" name="kg_wrong_pattern" /> - <java-symbol type="string" name="kg_wrong_password" /> - <java-symbol type="string" name="kg_wrong_pin" /> - <java-symbol type="string" name="kg_too_many_failed_attempts_countdown" /> - <java-symbol type="string" name="kg_pattern_instructions" /> - <java-symbol type="string" name="kg_sim_pin_instructions" /> - <java-symbol type="string" name="kg_pin_instructions" /> - <java-symbol type="string" name="kg_password_instructions" /> - <java-symbol type="string" name="kg_puk_enter_puk_hint" /> - <java-symbol type="string" name="kg_puk_enter_pin_hint" /> - <java-symbol type="string" name="kg_sim_unlock_progress_dialog_message" /> - <java-symbol type="string" name="kg_password_wrong_pin_code" /> - <java-symbol type="string" name="kg_invalid_sim_pin_hint" /> - <java-symbol type="string" name="kg_invalid_sim_puk_hint" /> - <java-symbol type="string" name="kg_invalid_puk" /> - <java-symbol type="string" name="kg_login_too_many_attempts" /> - <java-symbol type="string" name="kg_login_instructions" /> - <java-symbol type="string" name="kg_login_username_hint" /> - <java-symbol type="string" name="kg_login_password_hint" /> - <java-symbol type="string" name="kg_login_submit_button" /> - <java-symbol type="string" name="kg_login_invalid_input" /> - <java-symbol type="string" name="kg_login_account_recovery_hint" /> - <java-symbol type="string" name="kg_login_checking_password" /> - <java-symbol type="string" name="kg_too_many_failed_pin_attempts_dialog_message" /> - <java-symbol type="string" name="kg_too_many_failed_pattern_attempts_dialog_message" /> - <java-symbol type="string" name="kg_too_many_failed_password_attempts_dialog_message" /> - <java-symbol type="string" name="kg_failed_attempts_almost_at_wipe" /> - <java-symbol type="string" name="kg_failed_attempts_now_wiping" /> - <java-symbol type="string" name="kg_failed_attempts_almost_at_login" /> - <java-symbol type="string" name="kg_enter_confirm_pin_hint" /> - <java-symbol type="string" name="kg_invalid_confirm_pin_hint" /> - <java-symbol type="string" name="kg_text_message_separator" /> <!-- From services --> <java-symbol type="anim" name="screen_rotate_0_enter" /> @@ -1689,6 +1490,9 @@ <java-symbol type="anim" name="push_down_out" /> <java-symbol type="anim" name="push_up_in" /> <java-symbol type="anim" name="push_up_out" /> + <java-symbol type="anim" name="lock_screen_wallpaper_behind_enter" /> + <java-symbol type="anim" name="lock_screen_behind_enter" /> + <java-symbol type="bool" name="config_alwaysUseCdmaRssi" /> <java-symbol type="dimen" name="status_bar_icon_size" /> <java-symbol type="dimen" name="system_bar_icon_size" /> diff --git a/docs/html/training/monitoring-device-state/battery-monitoring.jd b/docs/html/training/monitoring-device-state/battery-monitoring.jd index c963a18..81b6e6b 100644 --- a/docs/html/training/monitoring-device-state/battery-monitoring.jd +++ b/docs/html/training/monitoring-device-state/battery-monitoring.jd @@ -65,7 +65,7 @@ boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING || status == BatteryManager.BATTERY_STATUS_FULL; // How are we charging? -int chargePlug = battery.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1); +int chargePlug = batteryStatus.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1); boolean usbCharge = chargePlug == BATTERY_PLUGGED_USB; boolean acCharge = chargePlug == BATTERY_PLUGGED_AC;</pre> @@ -119,8 +119,8 @@ the rate of your background updates if the battery charge is below a certain lev <p>You can find the current battery charge by extracting the current battery level and scale from the battery status intent as shown here:</p> -<pre>int level = battery.getIntExtra(BatteryManager.EXTRA_LEVEL, -1); -int scale = battery.getIntExtra(BatteryManager.EXTRA_SCALE, -1); +<pre>int level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1); +int scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1); float batteryPct = level / (float)scale;</pre> diff --git a/graphics/java/android/graphics/drawable/AnimatedRotateDrawable.java b/graphics/java/android/graphics/drawable/AnimatedRotateDrawable.java index 34f9070..9042ce6 100644 --- a/graphics/java/android/graphics/drawable/AnimatedRotateDrawable.java +++ b/graphics/java/android/graphics/drawable/AnimatedRotateDrawable.java @@ -153,6 +153,11 @@ public class AnimatedRotateDrawable extends Drawable implements Drawable.Callbac } @Override + public int getAlpha() { + return mState.mDrawable.getAlpha(); + } + + @Override public void setColorFilter(ColorFilter cf) { mState.mDrawable.setColorFilter(cf); } diff --git a/graphics/java/android/graphics/drawable/BitmapDrawable.java b/graphics/java/android/graphics/drawable/BitmapDrawable.java index 675c4b6..41765b3 100644 --- a/graphics/java/android/graphics/drawable/BitmapDrawable.java +++ b/graphics/java/android/graphics/drawable/BitmapDrawable.java @@ -456,6 +456,11 @@ public class BitmapDrawable extends Drawable { } @Override + public int getAlpha() { + return mBitmapState.mPaint.getAlpha(); + } + + @Override public void setColorFilter(ColorFilter cf) { mBitmapState.mPaint.setColorFilter(cf); invalidateSelf(); diff --git a/graphics/java/android/graphics/drawable/ClipDrawable.java b/graphics/java/android/graphics/drawable/ClipDrawable.java index b7429d4..dcfe20f 100644 --- a/graphics/java/android/graphics/drawable/ClipDrawable.java +++ b/graphics/java/android/graphics/drawable/ClipDrawable.java @@ -158,6 +158,11 @@ public class ClipDrawable extends Drawable implements Drawable.Callback { } @Override + public int getAlpha() { + return mClipState.mDrawable.getAlpha(); + } + + @Override public void setColorFilter(ColorFilter cf) { mClipState.mDrawable.setColorFilter(cf); } diff --git a/graphics/java/android/graphics/drawable/ColorDrawable.java b/graphics/java/android/graphics/drawable/ColorDrawable.java index d11e554..61dd675 100644 --- a/graphics/java/android/graphics/drawable/ColorDrawable.java +++ b/graphics/java/android/graphics/drawable/ColorDrawable.java @@ -116,6 +116,7 @@ public class ColorDrawable extends Drawable { * * @return A value between 0 and 255. */ + @Override public int getAlpha() { return mState.mUseColor >>> 24; } diff --git a/graphics/java/android/graphics/drawable/Drawable.java b/graphics/java/android/graphics/drawable/Drawable.java index c90f400..1a67970 100644 --- a/graphics/java/android/graphics/drawable/Drawable.java +++ b/graphics/java/android/graphics/drawable/Drawable.java @@ -410,6 +410,17 @@ public abstract class Drawable { public abstract void setAlpha(int alpha); /** + * Gets the current alpha value for the drawable. 0 means fully transparent, + * 255 means fully opaque. This method is implemented by + * Drawable subclasses and the value returned is specific to how that class treats alpha. + * The default return value is 255 if the class does not override this method to return a value + * specific to its use of alpha. + */ + public int getAlpha() { + return 0xFF; + } + + /** * Specify an optional colorFilter for the drawable. Pass null to remove * any filters. */ diff --git a/graphics/java/android/graphics/drawable/DrawableContainer.java b/graphics/java/android/graphics/drawable/DrawableContainer.java index a0c9701..07c25c4 100644 --- a/graphics/java/android/graphics/drawable/DrawableContainer.java +++ b/graphics/java/android/graphics/drawable/DrawableContainer.java @@ -114,6 +114,11 @@ public class DrawableContainer extends Drawable implements Drawable.Callback { } @Override + public int getAlpha() { + return mAlpha; + } + + @Override public void setDither(boolean dither) { if (mDrawableContainerState.mDither != dither) { mDrawableContainerState.mDither = dither; diff --git a/graphics/java/android/graphics/drawable/GradientDrawable.java b/graphics/java/android/graphics/drawable/GradientDrawable.java index b966bb4..d226c8c 100644 --- a/graphics/java/android/graphics/drawable/GradientDrawable.java +++ b/graphics/java/android/graphics/drawable/GradientDrawable.java @@ -639,6 +639,11 @@ public class GradientDrawable extends Drawable { } @Override + public int getAlpha() { + return mAlpha; + } + + @Override public void setDither(boolean dither) { if (dither != mDither) { mDither = dither; diff --git a/graphics/java/android/graphics/drawable/InsetDrawable.java b/graphics/java/android/graphics/drawable/InsetDrawable.java index 231234c..1507a9b 100644 --- a/graphics/java/android/graphics/drawable/InsetDrawable.java +++ b/graphics/java/android/graphics/drawable/InsetDrawable.java @@ -192,7 +192,12 @@ public class InsetDrawable extends Drawable implements Drawable.Callback public void setAlpha(int alpha) { mInsetState.mDrawable.setAlpha(alpha); } - + + @Override + public int getAlpha() { + return mInsetState.mDrawable.getAlpha(); + } + @Override public void setColorFilter(ColorFilter cf) { mInsetState.mDrawable.setColorFilter(cf); diff --git a/graphics/java/android/graphics/drawable/LayerDrawable.java b/graphics/java/android/graphics/drawable/LayerDrawable.java index dd692c6..dfbd986 100644 --- a/graphics/java/android/graphics/drawable/LayerDrawable.java +++ b/graphics/java/android/graphics/drawable/LayerDrawable.java @@ -402,7 +402,18 @@ public class LayerDrawable extends Drawable implements Drawable.Callback { array[i].mDrawable.setAlpha(alpha); } } - + + @Override + public int getAlpha() { + final ChildDrawable[] array = mLayerState.mChildren; + if (mLayerState.mNum > 0) { + // All layers should have the same alpha set on them - just return the first one + return array[0].mDrawable.getAlpha(); + } else { + return super.getAlpha(); + } + } + @Override public void setColorFilter(ColorFilter cf) { final ChildDrawable[] array = mLayerState.mChildren; diff --git a/graphics/java/android/graphics/drawable/NinePatchDrawable.java b/graphics/java/android/graphics/drawable/NinePatchDrawable.java index a9dc22b..8429e24 100644 --- a/graphics/java/android/graphics/drawable/NinePatchDrawable.java +++ b/graphics/java/android/graphics/drawable/NinePatchDrawable.java @@ -251,6 +251,15 @@ public class NinePatchDrawable extends Drawable { } @Override + public int getAlpha() { + if (mPaint == null) { + // Fast common case -- normal alpha. + return 0xFF; + } + return getPaint().getAlpha(); + } + + @Override public void setColorFilter(ColorFilter cf) { if (mPaint == null && cf == null) { // Fast common case -- leave at no color filter. diff --git a/graphics/java/android/graphics/drawable/RotateDrawable.java b/graphics/java/android/graphics/drawable/RotateDrawable.java index e987679..7cbc737 100644 --- a/graphics/java/android/graphics/drawable/RotateDrawable.java +++ b/graphics/java/android/graphics/drawable/RotateDrawable.java @@ -108,6 +108,11 @@ public class RotateDrawable extends Drawable implements Drawable.Callback { mState.mDrawable.setAlpha(alpha); } + @Override + public int getAlpha() { + return mState.mDrawable.getAlpha(); + } + public void setColorFilter(ColorFilter cf) { mState.mDrawable.setColorFilter(cf); } diff --git a/graphics/java/android/graphics/drawable/ScaleDrawable.java b/graphics/java/android/graphics/drawable/ScaleDrawable.java index bd2b2f0..8a28b2b 100644 --- a/graphics/java/android/graphics/drawable/ScaleDrawable.java +++ b/graphics/java/android/graphics/drawable/ScaleDrawable.java @@ -177,6 +177,11 @@ public class ScaleDrawable extends Drawable implements Drawable.Callback { } @Override + public int getAlpha() { + return mScaleState.mDrawable.getAlpha(); + } + + @Override public void setColorFilter(ColorFilter cf) { mScaleState.mDrawable.setColorFilter(cf); } diff --git a/graphics/java/android/graphics/drawable/ShapeDrawable.java b/graphics/java/android/graphics/drawable/ShapeDrawable.java index 1dbcddb..93f2dc6 100644 --- a/graphics/java/android/graphics/drawable/ShapeDrawable.java +++ b/graphics/java/android/graphics/drawable/ShapeDrawable.java @@ -252,7 +252,12 @@ public class ShapeDrawable extends Drawable { mShapeState.mAlpha = alpha; invalidateSelf(); } - + + @Override + public int getAlpha() { + return mShapeState.mAlpha; + } + @Override public void setColorFilter(ColorFilter cf) { mShapeState.mPaint.setColorFilter(cf); diff --git a/media/java/android/media/AudioTrack.java b/media/java/android/media/AudioTrack.java index cd50de4..cba7e03 100644 --- a/media/java/android/media/AudioTrack.java +++ b/media/java/android/media/AudioTrack.java @@ -26,7 +26,7 @@ import android.util.Log; /** * The AudioTrack class manages and plays a single audio resource for Java applications. - * It allows streaming PCM audio buffers to the audio hardware for playback. This is + * It allows streaming of PCM audio buffers to the audio sink for playback. This is * achieved by "pushing" the data to the AudioTrack object using one of the * {@link #write(byte[], int, int)} and {@link #write(short[], int, int)} methods. * @@ -53,8 +53,10 @@ import android.util.Log; * can play before running out of data.<br> * For an AudioTrack using the static mode, this size is the maximum size of the sound that can * be played from it.<br> - * For the streaming mode, data will be written to the hardware in chunks of + * For the streaming mode, data will be written to the audio sink in chunks of * sizes less than or equal to the total buffer size. + * + * AudioTrack is not final and thus permits subclasses, but such use is not recommended. */ public class AudioTrack { @@ -130,7 +132,7 @@ public class AudioTrack private static final int ERROR_NATIVESETUP_NATIVEINITFAILED = -20; // Events: - // to keep in sync with frameworks/base/include/media/AudioTrack.h + // to keep in sync with frameworks/av/include/media/AudioTrack.h /** * Event id denotes when playback head has reached a previously set marker. */ @@ -159,9 +161,10 @@ public class AudioTrack */ private final Object mPlayStateLock = new Object(); /** - * Size of the native audio buffer. + * Sizes of the native audio buffer. */ private int mNativeBufferSizeInBytes = 0; + private int mNativeBufferSizeInFrames = 0; /** * Handler for marker events coming from the native code. */ @@ -192,7 +195,7 @@ public class AudioTrack */ private int mStreamType = AudioManager.STREAM_MUSIC; /** - * The way audio is consumed by the hardware, streaming or static. + * The way audio is consumed by the audio sink, streaming or static. */ private int mDataLoadMode = MODE_STREAM; /** @@ -243,10 +246,13 @@ public class AudioTrack * @param audioFormat the format in which the audio data is represented. * See {@link AudioFormat#ENCODING_PCM_16BIT} and * {@link AudioFormat#ENCODING_PCM_8BIT} - * @param bufferSizeInBytes the total size (in bytes) of the buffer where audio data is read - * from for playback. If using the AudioTrack in streaming mode, you can write data into - * this buffer in smaller chunks than this size. If using the AudioTrack in static mode, - * this is the maximum size of the sound that will be played for this instance. + * @param bufferSizeInBytes the total size (in bytes) of the internal buffer where audio data is + * read from for playback. + * If track's creation mode is {@link #MODE_STREAM}, you can write data into + * this buffer in chunks less than or equal to this size, and it is typical to use + * chunks of 1/2 of the total size to permit double-buffering. + * If the track's creation mode is {@link #MODE_STATIC}, + * this is the maximum length sample, or audio clip, that can be played by this instance. * See {@link #getMinBufferSize(int, int, int)} to determine the minimum required buffer size * for the successful creation of an AudioTrack instance in streaming mode. Using values * smaller than getMinBufferSize() will result in an initialization failure. @@ -464,7 +470,7 @@ public class AudioTrack } - // Convenience method for the contructor's audio buffer size check. + // Convenience method for the constructor's audio buffer size check. // preconditions: // mChannelCount is valid // mAudioFormat is valid @@ -480,6 +486,7 @@ public class AudioTrack } mNativeBufferSizeInBytes = audioBufferSize; + mNativeBufferSizeInFrames = audioBufferSize / frameSizeInBytes; } @@ -559,7 +566,6 @@ public class AudioTrack /** * Returns the configured channel configuration. - * See {@link AudioFormat#CHANNEL_OUT_MONO} * and {@link AudioFormat#CHANNEL_OUT_STEREO}. */ @@ -577,8 +583,7 @@ public class AudioTrack /** * Returns the state of the AudioTrack instance. This is useful after the * AudioTrack instance has been created to check if it was initialized - * properly. This ensures that the appropriate hardware resources have been - * acquired. + * properly. This ensures that the appropriate resources have been acquired. * @see #STATE_INITIALIZED * @see #STATE_NO_STATIC_DATA * @see #STATE_UNINITIALIZED @@ -600,14 +605,26 @@ public class AudioTrack } /** - * Returns the native frame count used by the hardware. + * Returns the "native frame count", derived from the bufferSizeInBytes specified at + * creation time and converted to frame units. + * If track's creation mode is {@link #MODE_STATIC}, + * it is equal to the specified bufferSizeInBytes converted to frame units. + * If track's creation mode is {@link #MODE_STREAM}, + * it is typically greater than or equal to the specified bufferSizeInBytes converted to frame + * units; it may be rounded up to a larger value if needed by the target device implementation. + * @deprecated Only accessible by subclasses, which are not recommended for AudioTrack. + * See {@link AudioManager#getProperty(String)} for key + * {@link AudioManager#PROPERTY_OUTPUT_FRAMES_PER_BUFFER}. */ + @Deprecated protected int getNativeFrameCount() { return native_get_native_frame_count(); } /** * Returns marker position expressed in frames. + * @return marker position in wrapping frame units similar to {@link #getPlaybackHeadPosition}, + * or zero if marker is disabled. */ public int getNotificationMarkerPosition() { return native_get_marker_pos(); @@ -615,20 +632,26 @@ public class AudioTrack /** * Returns the notification update period expressed in frames. + * Zero means that no position update notifications are being delivered. */ public int getPositionNotificationPeriod() { return native_get_pos_update_period(); } /** - * Returns the playback head position expressed in frames + * Returns the playback head position expressed in frames. + * Though the "int" type is signed 32-bits, the value should be reinterpreted as if it is + * unsigned 32-bits. That is, the next position after 0x7FFFFFFF is (int) 0x80000000. + * This is a continuously advancing counter. It will wrap (overflow) periodically, + * for example approximately once every 27:03:11 hours:minutes:seconds at 44.1 kHz. + * It is reset to zero by flush(), reload(), and stop(). */ public int getPlaybackHeadPosition() { return native_get_position(); } /** - * Returns the hardware output sample rate + * Returns the output sample rate in Hz for the specified stream type. */ static public int getNativeOutputSampleRate(int streamType) { return native_get_output_sample_rate(streamType); @@ -647,8 +670,7 @@ public class AudioTrack * See {@link AudioFormat#ENCODING_PCM_16BIT} and * {@link AudioFormat#ENCODING_PCM_8BIT} * @return {@link #ERROR_BAD_VALUE} if an invalid parameter was passed, - * or {@link #ERROR} if the implementation was unable to query the hardware for its output - * properties, + * or {@link #ERROR} if unable to query for output properties, * or the minimum buffer size expressed in bytes. */ static public int getMinBufferSize(int sampleRateInHz, int channelConfig, int audioFormat) { @@ -782,9 +804,9 @@ public class AudioTrack /** * Sets the playback sample rate for this track. This sets the sampling rate at which * the audio data will be consumed and played back, not the original sampling rate of the - * content. Setting it to half the sample rate of the content will cause the playback to - * last twice as long, but will also result in a negative pitch shift. - * The valid sample rate range is from 1Hz to twice the value returned by + * content. For example, setting it to half the sample rate of the content will cause the + * playback to last twice as long, but will also result in a pitch shift down by one octave. + * The valid sample rate range is from 1 Hz to twice the value returned by * {@link #getNativeOutputSampleRate(int)}. * @param sampleRateInHz the sample rate expressed in Hz * @return error code or success, see {@link #SUCCESS}, {@link #ERROR_BAD_VALUE}, @@ -802,8 +824,11 @@ public class AudioTrack /** - * Sets the position of the notification marker. - * @param markerInFrames marker in frames + * Sets the position of the notification marker. At most one marker can be active. + * @param markerInFrames marker position in wrapping frame units similar to + * {@link #getPlaybackHeadPosition}, or zero to disable the marker. + * To set a marker at a position which would appear as zero due to wraparound, + * a workaround is to use a non-zero position near zero, such as -1 or 1. * @return error code or success, see {@link #SUCCESS}, {@link #ERROR_BAD_VALUE}, * {@link #ERROR_INVALID_OPERATION} */ @@ -833,6 +858,8 @@ public class AudioTrack * The track must be stopped or paused for the position to be changed, * and must use the {@link #MODE_STATIC} mode. * @param positionInFrames playback head position expressed in frames + * Zero corresponds to start of buffer. + * The position must not be greater than the buffer size in frames, or negative. * @return error code or success, see {@link #SUCCESS}, {@link #ERROR_BAD_VALUE}, * {@link #ERROR_INVALID_OPERATION} */ @@ -841,18 +868,28 @@ public class AudioTrack getPlayState() == PLAYSTATE_PLAYING) { return ERROR_INVALID_OPERATION; } + if (!(0 <= positionInFrames && positionInFrames <= mNativeBufferSizeInFrames)) { + return ERROR_BAD_VALUE; + } return native_set_position(positionInFrames); } /** * Sets the loop points and the loop count. The loop can be infinite. * Similarly to setPlaybackHeadPosition, - * the track must be stopped or paused for the position to be changed, + * the track must be stopped or paused for the loop points to be changed, * and must use the {@link #MODE_STATIC} mode. * @param startInFrames loop start marker expressed in frames + * Zero corresponds to start of buffer. + * The start marker must not be greater than or equal to the buffer size in frames, or negative. * @param endInFrames loop end marker expressed in frames + * The total buffer size in frames corresponds to end of buffer. + * The end marker must not be greater than the buffer size in frames. + * For looping, the end marker must not be less than or equal to the start marker, + * but to disable looping + * it is permitted for start marker, end marker, and loop count to all be 0. * @param loopCount the number of times the loop is looped. - * A value of -1 means infinite looping. + * A value of -1 means infinite looping, and 0 disables looping. * @return error code or success, see {@link #SUCCESS}, {@link #ERROR_BAD_VALUE}, * {@link #ERROR_INVALID_OPERATION} */ @@ -861,14 +898,23 @@ public class AudioTrack getPlayState() == PLAYSTATE_PLAYING) { return ERROR_INVALID_OPERATION; } + if (loopCount == 0) { + ; // explicitly allowed as an exception to the loop region range check + } else if (!(0 <= startInFrames && startInFrames < mNativeBufferSizeInFrames && + startInFrames < endInFrames && endInFrames <= mNativeBufferSizeInFrames)) { + return ERROR_BAD_VALUE; + } return native_set_loop(startInFrames, endInFrames, loopCount); } /** - * Sets the initialization state of the instance. To be used in an AudioTrack subclass - * constructor to set a subclass-specific post-initialization state. + * Sets the initialization state of the instance. This method was originally intended to be used + * in an AudioTrack subclass constructor to set a subclass-specific post-initialization state. + * However, subclasses of AudioTrack are no longer recommended, so this method is obsolete. * @param state the state of the AudioTrack instance + * @deprecated Only accessible by subclasses, which are not recommended for AudioTrack. */ + @Deprecated protected void setState(int state) { mState = state; } @@ -879,6 +925,7 @@ public class AudioTrack //-------------------- /** * Starts playing an AudioTrack. + * If track's creation mode is {@link #MODE_STATIC}, you must have called write() prior. * * @throws IllegalStateException */ @@ -943,7 +990,8 @@ public class AudioTrack /** * Flushes the audio data currently queued for playback. Any data that has - * not been played back will be discarded. + * not been played back will be discarded. No-op if not stopped or paused, + * or if the track's creation mode is not {@link #MODE_STREAM}. */ public void flush() { if (mState == STATE_INITIALIZED) { @@ -954,11 +1002,13 @@ public class AudioTrack } /** - * Writes the audio data to the audio hardware for playback. Will block until - * all data has been written to the audio mixer. + * Writes the audio data to the audio sink for playback (streaming mode), + * or copies audio data for later playback (static buffer mode). + * In streaming mode, will block until all data has been written to the audio sink. + * In static buffer mode, copies the data to the buffer starting at offset 0. * Note that the actual playback of this data might occur after this function * returns. This function is thread safe with respect to {@link #stop} calls, - * in which case all of the specified data might not be written to the mixer. + * in which case all of the specified data might not be written to the audio sink. * * @param audioData the array that holds the data to play. * @param offsetInBytes the offset expressed in bytes in audioData where the data to play @@ -995,11 +1045,13 @@ public class AudioTrack /** - * Writes the audio data to the audio hardware for playback. Will block until - * all data has been written to the audio mixer. + * Writes the audio data to the audio sink for playback (streaming mode), + * or copies audio data for later playback (static buffer mode). + * In streaming mode, will block until all data has been written to the audio sink. + * In static buffer mode, copies the data to the buffer starting at offset 0. * Note that the actual playback of this data might occur after this function * returns. This function is thread safe with respect to {@link #stop} calls, - * in which case all of the specified data might not be written to the mixer. + * in which case all of the specified data might not be written to the audio sink. * * @param audioData the array that holds the data to play. * @param offsetInShorts the offset expressed in shorts in audioData where the data to play @@ -1037,8 +1089,8 @@ public class AudioTrack /** * Notifies the native resource to reuse the audio data already loaded in the native - * layer. This call is only valid with AudioTrack instances that don't use the streaming - * model. + * layer, that is to rewind to start of buffer. + * The track's creation mode must be {@link #MODE_STATIC}. * @return error code or success, see {@link #SUCCESS}, {@link #ERROR_BAD_VALUE}, * {@link #ERROR_INVALID_OPERATION} */ @@ -1079,8 +1131,9 @@ public class AudioTrack /** * Sets the send level of the audio track to the attached auxiliary effect - * {@link #attachAuxEffect(int)}. The level value range is 0 to 1.0. - * <p>By default the send level is 0, so even if an effect is attached to the player + * {@link #attachAuxEffect(int)}. The level value range is 0.0f to 1.0f. + * Values are clamped to the (0.0f, 1.0f) interval if outside this range. + * <p>By default the send level is 0.0f, so even if an effect is attached to the player * this method must be called for the effect to be applied. * <p>Note that the passed level value is a raw scalar. UI controls should be scaled * logarithmically: the gain applied by audio framework ranges from -72dB to 0dB, diff --git a/packages/BackupRestoreConfirmation/res/values-sw/strings.xml b/packages/BackupRestoreConfirmation/res/values-sw/strings.xml index 493c168..24d9c39 100644 --- a/packages/BackupRestoreConfirmation/res/values-sw/strings.xml +++ b/packages/BackupRestoreConfirmation/res/values-sw/strings.xml @@ -17,7 +17,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="backup_confirm_title" msgid="827563724209303345">"Kuhifadhi kikamilifu"</string> - <string name="restore_confirm_title" msgid="5469365809567486602">"Kurejeza kamili"</string> + <string name="restore_confirm_title" msgid="5469365809567486602">"Kurejesha kila kitu"</string> <string name="backup_confirm_text" msgid="1878021282758896593">"Chelezo kamili la data iliyounganishwa kwenye eneo kazi la kompyuta limeombwa. Unataka kuruhusu hii kutendeka?"\n\n" Ikiwa hukuomba chelezo mwenyewe, usikubali uendeshaji kuendelea."</string> <string name="allow_backup_button_label" msgid="4217228747769644068">"Cheleza data yangu"</string> <string name="deny_backup_button_label" msgid="6009119115581097708">"Usicheleze"</string> @@ -32,7 +32,7 @@ <string name="restore_enc_password_text" msgid="6140898525580710823">"Ikiwa data iliyorejeshwa upya, tafadhali ingiza nenosiri lililo hapo chini:"</string> <string name="toast_backup_started" msgid="550354281452756121">"Inaanza kuhifadhi..."</string> <string name="toast_backup_ended" msgid="3818080769548726424">"Imemaliza kuhifadhi"</string> - <string name="toast_restore_started" msgid="7881679218971277385">"Inaanza kurejeza..."</string> - <string name="toast_restore_ended" msgid="1764041639199696132">"Kurejeza kumekamilika"</string> + <string name="toast_restore_started" msgid="7881679218971277385">"Inaanza kurejesha..."</string> + <string name="toast_restore_ended" msgid="1764041639199696132">"Kurejesha kumekamilika"</string> <string name="toast_timeout" msgid="5276598587087626877">"Muda wa uendeshaji umeisha"</string> </resources> diff --git a/packages/Keyguard/Android.mk b/packages/Keyguard/Android.mk new file mode 100644 index 0000000..2f8edad --- /dev/null +++ b/packages/Keyguard/Android.mk @@ -0,0 +1,31 @@ +# Copyright (C) 2013 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. +# + +LOCAL_PATH:= $(call my-dir) +include $(CLEAR_VARS) + +LOCAL_SRC_FILES := $(call all-subdir-java-files) $(call all-subdir-Iaidl-files) + +LOCAL_JAVA_LIBRARIES := services + +LOCAL_PACKAGE_NAME := Keyguard + +LOCAL_CERTIFICATE := platform + +LOCAL_PROGUARD_FLAG_FILES := proguard.flags + +include $(BUILD_PACKAGE) + +include $(call all-makefiles-under,$(LOCAL_PATH)) diff --git a/packages/Keyguard/AndroidManifest.xml b/packages/Keyguard/AndroidManifest.xml new file mode 100644 index 0000000..38e764a --- /dev/null +++ b/packages/Keyguard/AndroidManifest.xml @@ -0,0 +1,49 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* +** Copyright 2013, 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. +*/ +--> +<manifest xmlns:android="http://schemas.android.com/apk/res/android" + package="com.android.keyguard" + android:sharedUserId="android.uid.systemui" + coreApp="true"> + <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="17"/> + <uses-permission android:name="android.permission.VIBRATE" /> + <uses-permission android:name="android.permission.MODIFY_PHONE_STATE" /> + <uses-permission android:name="android.permission.GET_ACCOUNTS" /> + <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" /> + <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" /> + <uses-permission android:name="android.permission.WAKE_LOCK" /> + <uses-permission android:name="android.permission.STATUS_BAR" /> + <uses-permission android:name="android.permission.DEVICE_POWER" /> + <uses-permission android:name="android.permission.MANAGE_USERS" /> + <uses-permission android:name="android.permission.MANAGE_APP_TOKENS" /> + <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> + <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" /> + <uses-permission android:name="android.permission.BIND_APPWIDGET" /> + <uses-permission android:name="android.permission.INTERNAL_SYSTEM_WINDOW" /> + <uses-permission android:name="android.permission.BIND_DEVICE_ADMIN" /> + <uses-permission android:name="android.permission.CHANGE_COMPONENT_ENABLED_STATE" /> + + <application android:label="@string/app_name" android:icon="@drawable/app_icon" + android:process="com.android.systemui.keyguard" + android:persistent="true" > + + <service android:name=".KeyguardService" + android:exported="true" /> + + </application> +</manifest> diff --git a/packages/Keyguard/NOTICE b/packages/Keyguard/NOTICE new file mode 100644 index 0000000..33ff961 --- /dev/null +++ b/packages/Keyguard/NOTICE @@ -0,0 +1,190 @@ + + Copyright (c) 2005-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. + + 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. + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + diff --git a/packages/Keyguard/proguard.flags b/packages/Keyguard/proguard.flags new file mode 100644 index 0000000..00ca0fa --- /dev/null +++ b/packages/Keyguard/proguard.flags @@ -0,0 +1,2 @@ +-keep public class com.android.keyguard.KeyguardService + diff --git a/core/res/res/anim/keyguard_action_assist_enter.xml b/packages/Keyguard/res/anim/keyguard_action_assist_enter.xml index f3333b7..f3333b7 100644 --- a/core/res/res/anim/keyguard_action_assist_enter.xml +++ b/packages/Keyguard/res/anim/keyguard_action_assist_enter.xml diff --git a/core/res/res/anim/keyguard_action_assist_exit.xml b/packages/Keyguard/res/anim/keyguard_action_assist_exit.xml index b4ed278..b4ed278 100644 --- a/core/res/res/anim/keyguard_action_assist_exit.xml +++ b/packages/Keyguard/res/anim/keyguard_action_assist_exit.xml diff --git a/core/res/res/anim/keyguard_security_animate_in.xml b/packages/Keyguard/res/anim/keyguard_security_animate_in.xml index 4ee30c3..4ee30c3 100644 --- a/core/res/res/anim/keyguard_security_animate_in.xml +++ b/packages/Keyguard/res/anim/keyguard_security_animate_in.xml diff --git a/core/res/res/anim/keyguard_security_animate_out.xml b/packages/Keyguard/res/anim/keyguard_security_animate_out.xml index 76d065c..76d065c 100644 --- a/core/res/res/anim/keyguard_security_animate_out.xml +++ b/packages/Keyguard/res/anim/keyguard_security_animate_out.xml diff --git a/core/res/res/anim/keyguard_security_fade_in.xml b/packages/Keyguard/res/anim/keyguard_security_fade_in.xml index 6293432..c66c604 100644 --- a/core/res/res/anim/keyguard_security_fade_in.xml +++ b/packages/Keyguard/res/anim/keyguard_security_fade_in.xml @@ -17,6 +17,6 @@ <alpha xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:interpolator/decelerate_quad" android:fromAlpha="0.0" android:toAlpha="1.0" - android:duration="@*android:integer/kg_security_fade_duration" /> + android:duration="@integer/kg_security_fade_duration" /> diff --git a/core/res/res/anim/keyguard_security_fade_out.xml b/packages/Keyguard/res/anim/keyguard_security_fade_out.xml index 4ab0229..6465b35 100644 --- a/core/res/res/anim/keyguard_security_fade_out.xml +++ b/packages/Keyguard/res/anim/keyguard_security_fade_out.xml @@ -17,5 +17,5 @@ android:interpolator="@android:interpolator/accelerate_quad" android:fromAlpha="1.0" android:toAlpha="0.0" - android:duration="@*android:integer/kg_security_fade_duration" + android:duration="@integer/kg_security_fade_duration" /> diff --git a/packages/Keyguard/res/anim/lock_screen_enter.xml b/packages/Keyguard/res/anim/lock_screen_enter.xml new file mode 100644 index 0000000..4344cf9 --- /dev/null +++ b/packages/Keyguard/res/anim/lock_screen_enter.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* +** Copyright 2007, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ +--> + +<set xmlns:android="http://schemas.android.com/apk/res/android" + android:interpolator="@android:interpolator/accelerate_cubic"> + <alpha android:fromAlpha="0.0" android:toAlpha="1.0" + android:duration="@integer/config_activityDefaultDur" /> +</set> diff --git a/packages/Keyguard/res/anim/lock_screen_exit.xml b/packages/Keyguard/res/anim/lock_screen_exit.xml new file mode 100644 index 0000000..c75b3cc --- /dev/null +++ b/packages/Keyguard/res/anim/lock_screen_exit.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* +** Copyright 2007, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ +--> + + +<set xmlns:android="http://schemas.android.com/apk/res/android" + android:zAdjustment="top" + android:shareInterpolator="false"> + <scale + android:fromXScale="1.0" android:toXScale="1.10" + android:fromYScale="1.0" android:toYScale="1.10" + android:pivotX="50%p" android:pivotY="50%p" + android:fillEnabled="true" android:fillAfter="true" + android:interpolator="@android:interpolator/accelerate_quint" + android:duration="@android:integer/config_shortAnimTime" /> + <alpha + android:fromAlpha="1.0" android:toAlpha="0" + android:fillEnabled="true" android:fillAfter="true" + android:interpolator="@android:interpolator/accelerate_quad" + android:duration="@android:integer/config_shortAnimTime"/> +</set> diff --git a/packages/Keyguard/res/drawable-hdpi/ic_action_assist_generic_activated.png b/packages/Keyguard/res/drawable-hdpi/ic_action_assist_generic_activated.png Binary files differnew file mode 100644 index 0000000..c0e2098 --- /dev/null +++ b/packages/Keyguard/res/drawable-hdpi/ic_action_assist_generic_activated.png diff --git a/packages/Keyguard/res/drawable-hdpi/ic_action_assist_generic_normal.png b/packages/Keyguard/res/drawable-hdpi/ic_action_assist_generic_normal.png Binary files differnew file mode 100644 index 0000000..a852e2c --- /dev/null +++ b/packages/Keyguard/res/drawable-hdpi/ic_action_assist_generic_normal.png diff --git a/core/res/res/drawable-hdpi/ic_facial_backup.png b/packages/Keyguard/res/drawable-hdpi/ic_facial_backup.png Binary files differindex 2956109..2956109 100644 --- a/core/res/res/drawable-hdpi/ic_facial_backup.png +++ b/packages/Keyguard/res/drawable-hdpi/ic_facial_backup.png diff --git a/packages/Keyguard/res/drawable-hdpi/ic_input_delete.png b/packages/Keyguard/res/drawable-hdpi/ic_input_delete.png Binary files differnew file mode 100644 index 0000000..5d638bd --- /dev/null +++ b/packages/Keyguard/res/drawable-hdpi/ic_input_delete.png diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_alarm.png b/packages/Keyguard/res/drawable-hdpi/ic_lockscreen_alarm.png Binary files differindex d7a8cfc..d7a8cfc 100644 --- a/core/res/res/drawable-hdpi/ic_lockscreen_alarm.png +++ b/packages/Keyguard/res/drawable-hdpi/ic_lockscreen_alarm.png diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_camera_activated.png b/packages/Keyguard/res/drawable-hdpi/ic_lockscreen_camera_activated.png Binary files differindex 19c8eb2..19c8eb2 100644 --- a/core/res/res/drawable-hdpi/ic_lockscreen_camera_activated.png +++ b/packages/Keyguard/res/drawable-hdpi/ic_lockscreen_camera_activated.png diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_camera_normal.png b/packages/Keyguard/res/drawable-hdpi/ic_lockscreen_camera_normal.png Binary files differindex c79a245..c79a245 100644 --- a/core/res/res/drawable-hdpi/ic_lockscreen_camera_normal.png +++ b/packages/Keyguard/res/drawable-hdpi/ic_lockscreen_camera_normal.png diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_emergencycall_normal.png b/packages/Keyguard/res/drawable-hdpi/ic_lockscreen_emergencycall_normal.png Binary files differindex 460495a..460495a 100644 --- a/core/res/res/drawable-hdpi/ic_lockscreen_emergencycall_normal.png +++ b/packages/Keyguard/res/drawable-hdpi/ic_lockscreen_emergencycall_normal.png diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_emergencycall_pressed.png b/packages/Keyguard/res/drawable-hdpi/ic_lockscreen_emergencycall_pressed.png Binary files differindex b0f7ae9..b0f7ae9 100644 --- a/core/res/res/drawable-hdpi/ic_lockscreen_emergencycall_pressed.png +++ b/packages/Keyguard/res/drawable-hdpi/ic_lockscreen_emergencycall_pressed.png diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_forgotpassword_normal.png b/packages/Keyguard/res/drawable-hdpi/ic_lockscreen_forgotpassword_normal.png Binary files differindex 6402d3d..6402d3d 100644 --- a/core/res/res/drawable-hdpi/ic_lockscreen_forgotpassword_normal.png +++ b/packages/Keyguard/res/drawable-hdpi/ic_lockscreen_forgotpassword_normal.png diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_forgotpassword_pressed.png b/packages/Keyguard/res/drawable-hdpi/ic_lockscreen_forgotpassword_pressed.png Binary files differindex 83be046..83be046 100644 --- a/core/res/res/drawable-hdpi/ic_lockscreen_forgotpassword_pressed.png +++ b/packages/Keyguard/res/drawable-hdpi/ic_lockscreen_forgotpassword_pressed.png diff --git a/packages/Keyguard/res/drawable-hdpi/ic_lockscreen_glowdot.png b/packages/Keyguard/res/drawable-hdpi/ic_lockscreen_glowdot.png Binary files differnew file mode 100644 index 0000000..983c45e --- /dev/null +++ b/packages/Keyguard/res/drawable-hdpi/ic_lockscreen_glowdot.png diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_google_activated.png b/packages/Keyguard/res/drawable-hdpi/ic_lockscreen_google_activated.png Binary files differindex 2c4847c..2c4847c 100644 --- a/core/res/res/drawable-hdpi/ic_lockscreen_google_activated.png +++ b/packages/Keyguard/res/drawable-hdpi/ic_lockscreen_google_activated.png diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_google_focused.png b/packages/Keyguard/res/drawable-hdpi/ic_lockscreen_google_focused.png Binary files differindex d98557d..d98557d 100644 --- a/core/res/res/drawable-hdpi/ic_lockscreen_google_focused.png +++ b/packages/Keyguard/res/drawable-hdpi/ic_lockscreen_google_focused.png diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_google_normal.png b/packages/Keyguard/res/drawable-hdpi/ic_lockscreen_google_normal.png Binary files differindex 656f3ba..656f3ba 100644 --- a/core/res/res/drawable-hdpi/ic_lockscreen_google_normal.png +++ b/packages/Keyguard/res/drawable-hdpi/ic_lockscreen_google_normal.png diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_handle_normal.png b/packages/Keyguard/res/drawable-hdpi/ic_lockscreen_handle_normal.png Binary files differindex 1780ec0..1780ec0 100644 --- a/core/res/res/drawable-hdpi/ic_lockscreen_handle_normal.png +++ b/packages/Keyguard/res/drawable-hdpi/ic_lockscreen_handle_normal.png diff --git a/packages/Keyguard/res/drawable-hdpi/ic_lockscreen_handle_pressed.png b/packages/Keyguard/res/drawable-hdpi/ic_lockscreen_handle_pressed.png Binary files differnew file mode 100644 index 0000000..58a5f16 --- /dev/null +++ b/packages/Keyguard/res/drawable-hdpi/ic_lockscreen_handle_pressed.png diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_ime.png b/packages/Keyguard/res/drawable-hdpi/ic_lockscreen_ime.png Binary files differindex 29a7989..29a7989 100644 --- a/core/res/res/drawable-hdpi/ic_lockscreen_ime.png +++ b/packages/Keyguard/res/drawable-hdpi/ic_lockscreen_ime.png diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_lock_normal.png b/packages/Keyguard/res/drawable-hdpi/ic_lockscreen_lock_normal.png Binary files differindex 732133c..732133c 100644 --- a/core/res/res/drawable-hdpi/ic_lockscreen_lock_normal.png +++ b/packages/Keyguard/res/drawable-hdpi/ic_lockscreen_lock_normal.png diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_lock_pressed.png b/packages/Keyguard/res/drawable-hdpi/ic_lockscreen_lock_pressed.png Binary files differindex 0bbf62f..0bbf62f 100644 --- a/core/res/res/drawable-hdpi/ic_lockscreen_lock_pressed.png +++ b/packages/Keyguard/res/drawable-hdpi/ic_lockscreen_lock_pressed.png diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_player_background.9.png b/packages/Keyguard/res/drawable-hdpi/ic_lockscreen_player_background.9.png Binary files differindex fbb75b5..fbb75b5 100644 --- a/core/res/res/drawable-hdpi/ic_lockscreen_player_background.9.png +++ b/packages/Keyguard/res/drawable-hdpi/ic_lockscreen_player_background.9.png diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_search_activated.png b/packages/Keyguard/res/drawable-hdpi/ic_lockscreen_search_activated.png Binary files differindex 0d2e2ef..0d2e2ef 100644 --- a/core/res/res/drawable-hdpi/ic_lockscreen_search_activated.png +++ b/packages/Keyguard/res/drawable-hdpi/ic_lockscreen_search_activated.png diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_search_normal.png b/packages/Keyguard/res/drawable-hdpi/ic_lockscreen_search_normal.png Binary files differindex 66d14ae..66d14ae 100644 --- a/core/res/res/drawable-hdpi/ic_lockscreen_search_normal.png +++ b/packages/Keyguard/res/drawable-hdpi/ic_lockscreen_search_normal.png diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_silent_activated.png b/packages/Keyguard/res/drawable-hdpi/ic_lockscreen_silent_activated.png Binary files differindex 7060d59..7060d59 100644 --- a/core/res/res/drawable-hdpi/ic_lockscreen_silent_activated.png +++ b/packages/Keyguard/res/drawable-hdpi/ic_lockscreen_silent_activated.png diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_silent_focused.png b/packages/Keyguard/res/drawable-hdpi/ic_lockscreen_silent_focused.png Binary files differindex f9a8c7c..f9a8c7c 100644 --- a/core/res/res/drawable-hdpi/ic_lockscreen_silent_focused.png +++ b/packages/Keyguard/res/drawable-hdpi/ic_lockscreen_silent_focused.png diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_silent_normal.png b/packages/Keyguard/res/drawable-hdpi/ic_lockscreen_silent_normal.png Binary files differindex b47cd08..b47cd08 100644 --- a/core/res/res/drawable-hdpi/ic_lockscreen_silent_normal.png +++ b/packages/Keyguard/res/drawable-hdpi/ic_lockscreen_silent_normal.png diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_sim.png b/packages/Keyguard/res/drawable-hdpi/ic_lockscreen_sim.png Binary files differindex 7cf9e36..7cf9e36 100644 --- a/core/res/res/drawable-hdpi/ic_lockscreen_sim.png +++ b/packages/Keyguard/res/drawable-hdpi/ic_lockscreen_sim.png diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_soundon_activated.png b/packages/Keyguard/res/drawable-hdpi/ic_lockscreen_soundon_activated.png Binary files differindex 88d0a9f..88d0a9f 100644 --- a/core/res/res/drawable-hdpi/ic_lockscreen_soundon_activated.png +++ b/packages/Keyguard/res/drawable-hdpi/ic_lockscreen_soundon_activated.png diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_soundon_focused.png b/packages/Keyguard/res/drawable-hdpi/ic_lockscreen_soundon_focused.png Binary files differindex 6e16e40..6e16e40 100644 --- a/core/res/res/drawable-hdpi/ic_lockscreen_soundon_focused.png +++ b/packages/Keyguard/res/drawable-hdpi/ic_lockscreen_soundon_focused.png diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_soundon_normal.png b/packages/Keyguard/res/drawable-hdpi/ic_lockscreen_soundon_normal.png Binary files differindex 0dd81c0..0dd81c0 100644 --- a/core/res/res/drawable-hdpi/ic_lockscreen_soundon_normal.png +++ b/packages/Keyguard/res/drawable-hdpi/ic_lockscreen_soundon_normal.png diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_activated.png b/packages/Keyguard/res/drawable-hdpi/ic_lockscreen_unlock_activated.png Binary files differindex 374a62a..374a62a 100644 --- a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_activated.png +++ b/packages/Keyguard/res/drawable-hdpi/ic_lockscreen_unlock_activated.png diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_normal.png b/packages/Keyguard/res/drawable-hdpi/ic_lockscreen_unlock_normal.png Binary files differindex 3960893..3960893 100644 --- a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_normal.png +++ b/packages/Keyguard/res/drawable-hdpi/ic_lockscreen_unlock_normal.png diff --git a/packages/Keyguard/res/drawable-hdpi/ic_media_next.png b/packages/Keyguard/res/drawable-hdpi/ic_media_next.png Binary files differnew file mode 100644 index 0000000..6e27b81 --- /dev/null +++ b/packages/Keyguard/res/drawable-hdpi/ic_media_next.png diff --git a/packages/Keyguard/res/drawable-hdpi/ic_media_play.png b/packages/Keyguard/res/drawable-hdpi/ic_media_play.png Binary files differnew file mode 100644 index 0000000..2746d17 --- /dev/null +++ b/packages/Keyguard/res/drawable-hdpi/ic_media_play.png diff --git a/packages/Keyguard/res/drawable-hdpi/ic_media_previous.png b/packages/Keyguard/res/drawable-hdpi/ic_media_previous.png Binary files differnew file mode 100644 index 0000000..85b3766 --- /dev/null +++ b/packages/Keyguard/res/drawable-hdpi/ic_media_previous.png diff --git a/core/res/res/drawable-hdpi/intro_bg.png b/packages/Keyguard/res/drawable-hdpi/intro_bg.png Binary files differindex a758e7d..a758e7d 100644 --- a/core/res/res/drawable-hdpi/intro_bg.png +++ b/packages/Keyguard/res/drawable-hdpi/intro_bg.png diff --git a/packages/Keyguard/res/drawable-hdpi/kg_add_widget.png b/packages/Keyguard/res/drawable-hdpi/kg_add_widget.png Binary files differnew file mode 100644 index 0000000..7456705 --- /dev/null +++ b/packages/Keyguard/res/drawable-hdpi/kg_add_widget.png diff --git a/core/res/res/drawable-hdpi/kg_add_widget_disabled.png b/packages/Keyguard/res/drawable-hdpi/kg_add_widget_disabled.png Binary files differindex f24cf642..f24cf642 100644 --- a/core/res/res/drawable-hdpi/kg_add_widget_disabled.png +++ b/packages/Keyguard/res/drawable-hdpi/kg_add_widget_disabled.png diff --git a/core/res/res/drawable-hdpi/kg_add_widget_pressed.png b/packages/Keyguard/res/drawable-hdpi/kg_add_widget_pressed.png Binary files differindex 55112ca..55112ca 100644 --- a/core/res/res/drawable-hdpi/kg_add_widget_pressed.png +++ b/packages/Keyguard/res/drawable-hdpi/kg_add_widget_pressed.png diff --git a/core/res/res/drawable-hdpi/kg_bouncer_bg_white.9.png b/packages/Keyguard/res/drawable-hdpi/kg_bouncer_bg_white.9.png Binary files differindex cfd5db3..cfd5db3 100644 --- a/core/res/res/drawable-hdpi/kg_bouncer_bg_white.9.png +++ b/packages/Keyguard/res/drawable-hdpi/kg_bouncer_bg_white.9.png diff --git a/core/res/res/drawable-hdpi/kg_security_grip.9.png b/packages/Keyguard/res/drawable-hdpi/kg_security_grip.9.png Binary files differindex 1e40aef..1e40aef 100644 --- a/core/res/res/drawable-hdpi/kg_security_grip.9.png +++ b/packages/Keyguard/res/drawable-hdpi/kg_security_grip.9.png diff --git a/core/res/res/drawable-hdpi/kg_security_lock.png b/packages/Keyguard/res/drawable-hdpi/kg_security_lock.png Binary files differindex c3c94c4..c3c94c4 100644 --- a/core/res/res/drawable-hdpi/kg_security_lock.png +++ b/packages/Keyguard/res/drawable-hdpi/kg_security_lock.png diff --git a/packages/Keyguard/res/drawable-hdpi/kg_security_lock_focused.png b/packages/Keyguard/res/drawable-hdpi/kg_security_lock_focused.png Binary files differnew file mode 100644 index 0000000..9a82799 --- /dev/null +++ b/packages/Keyguard/res/drawable-hdpi/kg_security_lock_focused.png diff --git a/packages/Keyguard/res/drawable-hdpi/kg_security_lock_normal.png b/packages/Keyguard/res/drawable-hdpi/kg_security_lock_normal.png Binary files differnew file mode 100644 index 0000000..d608707 --- /dev/null +++ b/packages/Keyguard/res/drawable-hdpi/kg_security_lock_normal.png diff --git a/packages/Keyguard/res/drawable-hdpi/kg_security_lock_pressed.png b/packages/Keyguard/res/drawable-hdpi/kg_security_lock_pressed.png Binary files differnew file mode 100644 index 0000000..7ca995d --- /dev/null +++ b/packages/Keyguard/res/drawable-hdpi/kg_security_lock_pressed.png diff --git a/core/res/res/drawable-hdpi/kg_widget_bg_padded.9.png b/packages/Keyguard/res/drawable-hdpi/kg_widget_bg_padded.9.png Binary files differindex dff1dfa..dff1dfa 100644 --- a/core/res/res/drawable-hdpi/kg_widget_bg_padded.9.png +++ b/packages/Keyguard/res/drawable-hdpi/kg_widget_bg_padded.9.png diff --git a/core/res/res/drawable-hdpi/kg_widget_delete_drop_target.png b/packages/Keyguard/res/drawable-hdpi/kg_widget_delete_drop_target.png Binary files differindex 84549ff..84549ff 100644 --- a/core/res/res/drawable-hdpi/kg_widget_delete_drop_target.png +++ b/packages/Keyguard/res/drawable-hdpi/kg_widget_delete_drop_target.png diff --git a/core/res/res/drawable-hdpi/lockscreen_protection_pattern.png b/packages/Keyguard/res/drawable-hdpi/lockscreen_protection_pattern.png Binary files differindex 681d8be..681d8be 100644 --- a/core/res/res/drawable-hdpi/lockscreen_protection_pattern.png +++ b/packages/Keyguard/res/drawable-hdpi/lockscreen_protection_pattern.png diff --git a/core/res/res/drawable-hdpi/sym_keyboard_return_holo.png b/packages/Keyguard/res/drawable-hdpi/sym_keyboard_return_holo.png Binary files differindex f1bcf48..f1bcf48 100644 --- a/core/res/res/drawable-hdpi/sym_keyboard_return_holo.png +++ b/packages/Keyguard/res/drawable-hdpi/sym_keyboard_return_holo.png diff --git a/packages/Keyguard/res/drawable-ldpi/ic_input_delete.png b/packages/Keyguard/res/drawable-ldpi/ic_input_delete.png Binary files differnew file mode 100644 index 0000000..d7eff17 --- /dev/null +++ b/packages/Keyguard/res/drawable-ldpi/ic_input_delete.png diff --git a/packages/Keyguard/res/drawable-ldpi/ic_media_next.png b/packages/Keyguard/res/drawable-ldpi/ic_media_next.png Binary files differnew file mode 100644 index 0000000..99927fd --- /dev/null +++ b/packages/Keyguard/res/drawable-ldpi/ic_media_next.png diff --git a/packages/Keyguard/res/drawable-ldpi/ic_media_play.png b/packages/Keyguard/res/drawable-ldpi/ic_media_play.png Binary files differnew file mode 100644 index 0000000..e7c1972 --- /dev/null +++ b/packages/Keyguard/res/drawable-ldpi/ic_media_play.png diff --git a/packages/Keyguard/res/drawable-ldpi/ic_media_previous.png b/packages/Keyguard/res/drawable-ldpi/ic_media_previous.png Binary files differnew file mode 100644 index 0000000..df04322 --- /dev/null +++ b/packages/Keyguard/res/drawable-ldpi/ic_media_previous.png diff --git a/packages/Keyguard/res/drawable-mdpi/ic_action_assist_generic_activated.png b/packages/Keyguard/res/drawable-mdpi/ic_action_assist_generic_activated.png Binary files differnew file mode 100644 index 0000000..f88f7e1 --- /dev/null +++ b/packages/Keyguard/res/drawable-mdpi/ic_action_assist_generic_activated.png diff --git a/packages/Keyguard/res/drawable-mdpi/ic_action_assist_generic_normal.png b/packages/Keyguard/res/drawable-mdpi/ic_action_assist_generic_normal.png Binary files differnew file mode 100644 index 0000000..7426994 --- /dev/null +++ b/packages/Keyguard/res/drawable-mdpi/ic_action_assist_generic_normal.png diff --git a/core/res/res/drawable-mdpi/ic_facial_backup.png b/packages/Keyguard/res/drawable-mdpi/ic_facial_backup.png Binary files differindex 6ed1327..6ed1327 100644 --- a/core/res/res/drawable-mdpi/ic_facial_backup.png +++ b/packages/Keyguard/res/drawable-mdpi/ic_facial_backup.png diff --git a/packages/Keyguard/res/drawable-mdpi/ic_input_delete.png b/packages/Keyguard/res/drawable-mdpi/ic_input_delete.png Binary files differnew file mode 100644 index 0000000..47c8708 --- /dev/null +++ b/packages/Keyguard/res/drawable-mdpi/ic_input_delete.png diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_alarm.png b/packages/Keyguard/res/drawable-mdpi/ic_lockscreen_alarm.png Binary files differindex 330ade1..330ade1 100644 --- a/core/res/res/drawable-mdpi/ic_lockscreen_alarm.png +++ b/packages/Keyguard/res/drawable-mdpi/ic_lockscreen_alarm.png diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_camera_activated.png b/packages/Keyguard/res/drawable-mdpi/ic_lockscreen_camera_activated.png Binary files differindex 862f33b..862f33b 100644 --- a/core/res/res/drawable-mdpi/ic_lockscreen_camera_activated.png +++ b/packages/Keyguard/res/drawable-mdpi/ic_lockscreen_camera_activated.png diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_camera_normal.png b/packages/Keyguard/res/drawable-mdpi/ic_lockscreen_camera_normal.png Binary files differindex 30df0a3..30df0a3 100644 --- a/core/res/res/drawable-mdpi/ic_lockscreen_camera_normal.png +++ b/packages/Keyguard/res/drawable-mdpi/ic_lockscreen_camera_normal.png diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_emergencycall_normal.png b/packages/Keyguard/res/drawable-mdpi/ic_lockscreen_emergencycall_normal.png Binary files differindex cae795f..cae795f 100644 --- a/core/res/res/drawable-mdpi/ic_lockscreen_emergencycall_normal.png +++ b/packages/Keyguard/res/drawable-mdpi/ic_lockscreen_emergencycall_normal.png diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_emergencycall_pressed.png b/packages/Keyguard/res/drawable-mdpi/ic_lockscreen_emergencycall_pressed.png Binary files differindex 2867956..2867956 100644 --- a/core/res/res/drawable-mdpi/ic_lockscreen_emergencycall_pressed.png +++ b/packages/Keyguard/res/drawable-mdpi/ic_lockscreen_emergencycall_pressed.png diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_forgotpassword_normal.png b/packages/Keyguard/res/drawable-mdpi/ic_lockscreen_forgotpassword_normal.png Binary files differindex a7e063a..a7e063a 100644 --- a/core/res/res/drawable-mdpi/ic_lockscreen_forgotpassword_normal.png +++ b/packages/Keyguard/res/drawable-mdpi/ic_lockscreen_forgotpassword_normal.png diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_forgotpassword_pressed.png b/packages/Keyguard/res/drawable-mdpi/ic_lockscreen_forgotpassword_pressed.png Binary files differindex 53af5a5..53af5a5 100644 --- a/core/res/res/drawable-mdpi/ic_lockscreen_forgotpassword_pressed.png +++ b/packages/Keyguard/res/drawable-mdpi/ic_lockscreen_forgotpassword_pressed.png diff --git a/packages/Keyguard/res/drawable-mdpi/ic_lockscreen_glowdot.png b/packages/Keyguard/res/drawable-mdpi/ic_lockscreen_glowdot.png Binary files differnew file mode 100644 index 0000000..056c3f17 --- /dev/null +++ b/packages/Keyguard/res/drawable-mdpi/ic_lockscreen_glowdot.png diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_google_activated.png b/packages/Keyguard/res/drawable-mdpi/ic_lockscreen_google_activated.png Binary files differindex 32a68e0..32a68e0 100644 --- a/core/res/res/drawable-mdpi/ic_lockscreen_google_activated.png +++ b/packages/Keyguard/res/drawable-mdpi/ic_lockscreen_google_activated.png diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_google_focused.png b/packages/Keyguard/res/drawable-mdpi/ic_lockscreen_google_focused.png Binary files differindex 3f96d03..3f96d03 100644 --- a/core/res/res/drawable-mdpi/ic_lockscreen_google_focused.png +++ b/packages/Keyguard/res/drawable-mdpi/ic_lockscreen_google_focused.png diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_google_normal.png b/packages/Keyguard/res/drawable-mdpi/ic_lockscreen_google_normal.png Binary files differindex 2f7efcf..2f7efcf 100644 --- a/core/res/res/drawable-mdpi/ic_lockscreen_google_normal.png +++ b/packages/Keyguard/res/drawable-mdpi/ic_lockscreen_google_normal.png diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_handle_normal.png b/packages/Keyguard/res/drawable-mdpi/ic_lockscreen_handle_normal.png Binary files differindex 1d547e1..1d547e1 100644 --- a/core/res/res/drawable-mdpi/ic_lockscreen_handle_normal.png +++ b/packages/Keyguard/res/drawable-mdpi/ic_lockscreen_handle_normal.png diff --git a/packages/Keyguard/res/drawable-mdpi/ic_lockscreen_handle_pressed.png b/packages/Keyguard/res/drawable-mdpi/ic_lockscreen_handle_pressed.png Binary files differnew file mode 100644 index 0000000..0187a02 --- /dev/null +++ b/packages/Keyguard/res/drawable-mdpi/ic_lockscreen_handle_pressed.png diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_ime.png b/packages/Keyguard/res/drawable-mdpi/ic_lockscreen_ime.png Binary files differindex b27e059..b27e059 100644 --- a/core/res/res/drawable-mdpi/ic_lockscreen_ime.png +++ b/packages/Keyguard/res/drawable-mdpi/ic_lockscreen_ime.png diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_lock_normal.png b/packages/Keyguard/res/drawable-mdpi/ic_lockscreen_lock_normal.png Binary files differindex 30eb974..30eb974 100644 --- a/core/res/res/drawable-mdpi/ic_lockscreen_lock_normal.png +++ b/packages/Keyguard/res/drawable-mdpi/ic_lockscreen_lock_normal.png diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_lock_pressed.png b/packages/Keyguard/res/drawable-mdpi/ic_lockscreen_lock_pressed.png Binary files differindex aab2f6b..aab2f6b 100644 --- a/core/res/res/drawable-mdpi/ic_lockscreen_lock_pressed.png +++ b/packages/Keyguard/res/drawable-mdpi/ic_lockscreen_lock_pressed.png diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_player_background.9.png b/packages/Keyguard/res/drawable-mdpi/ic_lockscreen_player_background.9.png Binary files differindex 17d97c4..17d97c4 100644 --- a/core/res/res/drawable-mdpi/ic_lockscreen_player_background.9.png +++ b/packages/Keyguard/res/drawable-mdpi/ic_lockscreen_player_background.9.png diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_search_activated.png b/packages/Keyguard/res/drawable-mdpi/ic_lockscreen_search_activated.png Binary files differindex 73c6be6..73c6be6 100644 --- a/core/res/res/drawable-mdpi/ic_lockscreen_search_activated.png +++ b/packages/Keyguard/res/drawable-mdpi/ic_lockscreen_search_activated.png diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_search_normal.png b/packages/Keyguard/res/drawable-mdpi/ic_lockscreen_search_normal.png Binary files differindex 73c6be6..73c6be6 100644 --- a/core/res/res/drawable-mdpi/ic_lockscreen_search_normal.png +++ b/packages/Keyguard/res/drawable-mdpi/ic_lockscreen_search_normal.png diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_silent_activated.png b/packages/Keyguard/res/drawable-mdpi/ic_lockscreen_silent_activated.png Binary files differindex 2bc3f52..2bc3f52 100644 --- a/core/res/res/drawable-mdpi/ic_lockscreen_silent_activated.png +++ b/packages/Keyguard/res/drawable-mdpi/ic_lockscreen_silent_activated.png diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_silent_focused.png b/packages/Keyguard/res/drawable-mdpi/ic_lockscreen_silent_focused.png Binary files differindex 6a5af9d..6a5af9d 100644 --- a/core/res/res/drawable-mdpi/ic_lockscreen_silent_focused.png +++ b/packages/Keyguard/res/drawable-mdpi/ic_lockscreen_silent_focused.png diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_silent_normal.png b/packages/Keyguard/res/drawable-mdpi/ic_lockscreen_silent_normal.png Binary files differindex c288ce4..c288ce4 100644 --- a/core/res/res/drawable-mdpi/ic_lockscreen_silent_normal.png +++ b/packages/Keyguard/res/drawable-mdpi/ic_lockscreen_silent_normal.png diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_sim.png b/packages/Keyguard/res/drawable-mdpi/ic_lockscreen_sim.png Binary files differindex 2e259c3..2e259c3 100644 --- a/core/res/res/drawable-mdpi/ic_lockscreen_sim.png +++ b/packages/Keyguard/res/drawable-mdpi/ic_lockscreen_sim.png diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_soundon_activated.png b/packages/Keyguard/res/drawable-mdpi/ic_lockscreen_soundon_activated.png Binary files differindex 637eec6..637eec6 100644 --- a/core/res/res/drawable-mdpi/ic_lockscreen_soundon_activated.png +++ b/packages/Keyguard/res/drawable-mdpi/ic_lockscreen_soundon_activated.png diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_soundon_focused.png b/packages/Keyguard/res/drawable-mdpi/ic_lockscreen_soundon_focused.png Binary files differindex db59b5f..db59b5f 100644 --- a/core/res/res/drawable-mdpi/ic_lockscreen_soundon_focused.png +++ b/packages/Keyguard/res/drawable-mdpi/ic_lockscreen_soundon_focused.png diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_soundon_normal.png b/packages/Keyguard/res/drawable-mdpi/ic_lockscreen_soundon_normal.png Binary files differindex eb6ceed..eb6ceed 100644 --- a/core/res/res/drawable-mdpi/ic_lockscreen_soundon_normal.png +++ b/packages/Keyguard/res/drawable-mdpi/ic_lockscreen_soundon_normal.png diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_activated.png b/packages/Keyguard/res/drawable-mdpi/ic_lockscreen_unlock_activated.png Binary files differindex 68409c5..68409c5 100644 --- a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_activated.png +++ b/packages/Keyguard/res/drawable-mdpi/ic_lockscreen_unlock_activated.png diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_normal.png b/packages/Keyguard/res/drawable-mdpi/ic_lockscreen_unlock_normal.png Binary files differindex 52866f2..52866f2 100644 --- a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_normal.png +++ b/packages/Keyguard/res/drawable-mdpi/ic_lockscreen_unlock_normal.png diff --git a/packages/Keyguard/res/drawable-mdpi/ic_media_next.png b/packages/Keyguard/res/drawable-mdpi/ic_media_next.png Binary files differnew file mode 100644 index 0000000..fcd73d9 --- /dev/null +++ b/packages/Keyguard/res/drawable-mdpi/ic_media_next.png diff --git a/packages/Keyguard/res/drawable-mdpi/ic_media_play.png b/packages/Keyguard/res/drawable-mdpi/ic_media_play.png Binary files differnew file mode 100644 index 0000000..7966bbc --- /dev/null +++ b/packages/Keyguard/res/drawable-mdpi/ic_media_play.png diff --git a/packages/Keyguard/res/drawable-mdpi/ic_media_previous.png b/packages/Keyguard/res/drawable-mdpi/ic_media_previous.png Binary files differnew file mode 100644 index 0000000..b653d05 --- /dev/null +++ b/packages/Keyguard/res/drawable-mdpi/ic_media_previous.png diff --git a/core/res/res/drawable-mdpi/intro_bg.png b/packages/Keyguard/res/drawable-mdpi/intro_bg.png Binary files differindex 540da31..540da31 100644 --- a/core/res/res/drawable-mdpi/intro_bg.png +++ b/packages/Keyguard/res/drawable-mdpi/intro_bg.png diff --git a/packages/Keyguard/res/drawable-mdpi/kg_add_widget.png b/packages/Keyguard/res/drawable-mdpi/kg_add_widget.png Binary files differnew file mode 100644 index 0000000..1cab0d9 --- /dev/null +++ b/packages/Keyguard/res/drawable-mdpi/kg_add_widget.png diff --git a/core/res/res/drawable-mdpi/kg_add_widget_disabled.png b/packages/Keyguard/res/drawable-mdpi/kg_add_widget_disabled.png Binary files differindex 02e0f0e..02e0f0e 100644 --- a/core/res/res/drawable-mdpi/kg_add_widget_disabled.png +++ b/packages/Keyguard/res/drawable-mdpi/kg_add_widget_disabled.png diff --git a/core/res/res/drawable-mdpi/kg_add_widget_pressed.png b/packages/Keyguard/res/drawable-mdpi/kg_add_widget_pressed.png Binary files differindex 34a7aaa..34a7aaa 100644 --- a/core/res/res/drawable-mdpi/kg_add_widget_pressed.png +++ b/packages/Keyguard/res/drawable-mdpi/kg_add_widget_pressed.png diff --git a/core/res/res/drawable-mdpi/kg_bouncer_bg_white.9.png b/packages/Keyguard/res/drawable-mdpi/kg_bouncer_bg_white.9.png Binary files differindex e3cb6db..e3cb6db 100644 --- a/core/res/res/drawable-mdpi/kg_bouncer_bg_white.9.png +++ b/packages/Keyguard/res/drawable-mdpi/kg_bouncer_bg_white.9.png diff --git a/core/res/res/drawable-mdpi/kg_security_grip.9.png b/packages/Keyguard/res/drawable-mdpi/kg_security_grip.9.png Binary files differindex 334a39b..334a39b 100644 --- a/core/res/res/drawable-mdpi/kg_security_grip.9.png +++ b/packages/Keyguard/res/drawable-mdpi/kg_security_grip.9.png diff --git a/core/res/res/drawable-mdpi/kg_security_lock.png b/packages/Keyguard/res/drawable-mdpi/kg_security_lock.png Binary files differindex a39f380..a39f380 100644 --- a/core/res/res/drawable-mdpi/kg_security_lock.png +++ b/packages/Keyguard/res/drawable-mdpi/kg_security_lock.png diff --git a/packages/Keyguard/res/drawable-mdpi/kg_security_lock_focused.png b/packages/Keyguard/res/drawable-mdpi/kg_security_lock_focused.png Binary files differnew file mode 100644 index 0000000..c3608f9 --- /dev/null +++ b/packages/Keyguard/res/drawable-mdpi/kg_security_lock_focused.png diff --git a/packages/Keyguard/res/drawable-mdpi/kg_security_lock_normal.png b/packages/Keyguard/res/drawable-mdpi/kg_security_lock_normal.png Binary files differnew file mode 100644 index 0000000..7957c79 --- /dev/null +++ b/packages/Keyguard/res/drawable-mdpi/kg_security_lock_normal.png diff --git a/packages/Keyguard/res/drawable-mdpi/kg_security_lock_pressed.png b/packages/Keyguard/res/drawable-mdpi/kg_security_lock_pressed.png Binary files differnew file mode 100644 index 0000000..41715f5 --- /dev/null +++ b/packages/Keyguard/res/drawable-mdpi/kg_security_lock_pressed.png diff --git a/core/res/res/drawable-mdpi/kg_widget_bg_padded.9.png b/packages/Keyguard/res/drawable-mdpi/kg_widget_bg_padded.9.png Binary files differindex c313df1..c313df1 100644 --- a/core/res/res/drawable-mdpi/kg_widget_bg_padded.9.png +++ b/packages/Keyguard/res/drawable-mdpi/kg_widget_bg_padded.9.png diff --git a/core/res/res/drawable-mdpi/kg_widget_delete_drop_target.png b/packages/Keyguard/res/drawable-mdpi/kg_widget_delete_drop_target.png Binary files differindex 219f3e5..219f3e5 100644 --- a/core/res/res/drawable-mdpi/kg_widget_delete_drop_target.png +++ b/packages/Keyguard/res/drawable-mdpi/kg_widget_delete_drop_target.png diff --git a/core/res/res/drawable-mdpi/lockscreen_protection_pattern.png b/packages/Keyguard/res/drawable-mdpi/lockscreen_protection_pattern.png Binary files differindex 30bcea5..30bcea5 100644 --- a/core/res/res/drawable-mdpi/lockscreen_protection_pattern.png +++ b/packages/Keyguard/res/drawable-mdpi/lockscreen_protection_pattern.png diff --git a/core/res/res/drawable-mdpi/sym_keyboard_return_holo.png b/packages/Keyguard/res/drawable-mdpi/sym_keyboard_return_holo.png Binary files differindex d5a7708..d5a7708 100644 --- a/core/res/res/drawable-mdpi/sym_keyboard_return_holo.png +++ b/packages/Keyguard/res/drawable-mdpi/sym_keyboard_return_holo.png diff --git a/packages/Keyguard/res/drawable-nodpi/app_icon.png b/packages/Keyguard/res/drawable-nodpi/app_icon.png Binary files differnew file mode 100644 index 0000000..ea31bd8 --- /dev/null +++ b/packages/Keyguard/res/drawable-nodpi/app_icon.png diff --git a/core/res/res/drawable-sw600dp-hdpi/ic_lockscreen_handle_normal.png b/packages/Keyguard/res/drawable-sw600dp-hdpi/ic_lockscreen_handle_normal.png Binary files differindex f28fe38..f28fe38 100644 --- a/core/res/res/drawable-sw600dp-hdpi/ic_lockscreen_handle_normal.png +++ b/packages/Keyguard/res/drawable-sw600dp-hdpi/ic_lockscreen_handle_normal.png diff --git a/packages/Keyguard/res/drawable-sw600dp-hdpi/ic_lockscreen_handle_pressed.png b/packages/Keyguard/res/drawable-sw600dp-hdpi/ic_lockscreen_handle_pressed.png Binary files differnew file mode 100644 index 0000000..728fc67 --- /dev/null +++ b/packages/Keyguard/res/drawable-sw600dp-hdpi/ic_lockscreen_handle_pressed.png diff --git a/core/res/res/drawable-sw600dp-mdpi/ic_lockscreen_handle_normal.png b/packages/Keyguard/res/drawable-sw600dp-mdpi/ic_lockscreen_handle_normal.png Binary files differindex 99e742f..99e742f 100644 --- a/core/res/res/drawable-sw600dp-mdpi/ic_lockscreen_handle_normal.png +++ b/packages/Keyguard/res/drawable-sw600dp-mdpi/ic_lockscreen_handle_normal.png diff --git a/packages/Keyguard/res/drawable-sw600dp-mdpi/ic_lockscreen_handle_pressed.png b/packages/Keyguard/res/drawable-sw600dp-mdpi/ic_lockscreen_handle_pressed.png Binary files differnew file mode 100644 index 0000000..c7da024 --- /dev/null +++ b/packages/Keyguard/res/drawable-sw600dp-mdpi/ic_lockscreen_handle_pressed.png diff --git a/core/res/res/drawable-sw600dp-xhdpi/ic_lockscreen_handle_normal.png b/packages/Keyguard/res/drawable-sw600dp-xhdpi/ic_lockscreen_handle_normal.png Binary files differindex 75e4783..75e4783 100644 --- a/core/res/res/drawable-sw600dp-xhdpi/ic_lockscreen_handle_normal.png +++ b/packages/Keyguard/res/drawable-sw600dp-xhdpi/ic_lockscreen_handle_normal.png diff --git a/packages/Keyguard/res/drawable-sw600dp-xhdpi/ic_lockscreen_handle_pressed.png b/packages/Keyguard/res/drawable-sw600dp-xhdpi/ic_lockscreen_handle_pressed.png Binary files differnew file mode 100644 index 0000000..534c10b --- /dev/null +++ b/packages/Keyguard/res/drawable-sw600dp-xhdpi/ic_lockscreen_handle_pressed.png diff --git a/packages/Keyguard/res/drawable-xhdpi/ic_action_assist_generic_activated.png b/packages/Keyguard/res/drawable-xhdpi/ic_action_assist_generic_activated.png Binary files differnew file mode 100644 index 0000000..500b157 --- /dev/null +++ b/packages/Keyguard/res/drawable-xhdpi/ic_action_assist_generic_activated.png diff --git a/packages/Keyguard/res/drawable-xhdpi/ic_action_assist_generic_normal.png b/packages/Keyguard/res/drawable-xhdpi/ic_action_assist_generic_normal.png Binary files differnew file mode 100644 index 0000000..d0e4cf3 --- /dev/null +++ b/packages/Keyguard/res/drawable-xhdpi/ic_action_assist_generic_normal.png diff --git a/core/res/res/drawable-xhdpi/ic_facial_backup.png b/packages/Keyguard/res/drawable-xhdpi/ic_facial_backup.png Binary files differindex 942cf23..942cf23 100644 --- a/core/res/res/drawable-xhdpi/ic_facial_backup.png +++ b/packages/Keyguard/res/drawable-xhdpi/ic_facial_backup.png diff --git a/packages/Keyguard/res/drawable-xhdpi/ic_input_delete.png b/packages/Keyguard/res/drawable-xhdpi/ic_input_delete.png Binary files differnew file mode 100644 index 0000000..8b822d9 --- /dev/null +++ b/packages/Keyguard/res/drawable-xhdpi/ic_input_delete.png diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_alarm.png b/packages/Keyguard/res/drawable-xhdpi/ic_lockscreen_alarm.png Binary files differindex e6cceef..e6cceef 100644 --- a/core/res/res/drawable-xhdpi/ic_lockscreen_alarm.png +++ b/packages/Keyguard/res/drawable-xhdpi/ic_lockscreen_alarm.png diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_camera_activated.png b/packages/Keyguard/res/drawable-xhdpi/ic_lockscreen_camera_activated.png Binary files differindex 760ef2d..760ef2d 100644 --- a/core/res/res/drawable-xhdpi/ic_lockscreen_camera_activated.png +++ b/packages/Keyguard/res/drawable-xhdpi/ic_lockscreen_camera_activated.png diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_camera_normal.png b/packages/Keyguard/res/drawable-xhdpi/ic_lockscreen_camera_normal.png Binary files differindex 093bc05..093bc05 100644 --- a/core/res/res/drawable-xhdpi/ic_lockscreen_camera_normal.png +++ b/packages/Keyguard/res/drawable-xhdpi/ic_lockscreen_camera_normal.png diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_emergencycall_normal.png b/packages/Keyguard/res/drawable-xhdpi/ic_lockscreen_emergencycall_normal.png Binary files differindex a61f7a5..a61f7a5 100644 --- a/core/res/res/drawable-xhdpi/ic_lockscreen_emergencycall_normal.png +++ b/packages/Keyguard/res/drawable-xhdpi/ic_lockscreen_emergencycall_normal.png diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_emergencycall_pressed.png b/packages/Keyguard/res/drawable-xhdpi/ic_lockscreen_emergencycall_pressed.png Binary files differindex dd5e481..dd5e481 100644 --- a/core/res/res/drawable-xhdpi/ic_lockscreen_emergencycall_pressed.png +++ b/packages/Keyguard/res/drawable-xhdpi/ic_lockscreen_emergencycall_pressed.png diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_forgotpassword_normal.png b/packages/Keyguard/res/drawable-xhdpi/ic_lockscreen_forgotpassword_normal.png Binary files differindex e4172ce..e4172ce 100644 --- a/core/res/res/drawable-xhdpi/ic_lockscreen_forgotpassword_normal.png +++ b/packages/Keyguard/res/drawable-xhdpi/ic_lockscreen_forgotpassword_normal.png diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_forgotpassword_pressed.png b/packages/Keyguard/res/drawable-xhdpi/ic_lockscreen_forgotpassword_pressed.png Binary files differindex e2c7621..e2c7621 100644 --- a/core/res/res/drawable-xhdpi/ic_lockscreen_forgotpassword_pressed.png +++ b/packages/Keyguard/res/drawable-xhdpi/ic_lockscreen_forgotpassword_pressed.png diff --git a/packages/Keyguard/res/drawable-xhdpi/ic_lockscreen_glowdot.png b/packages/Keyguard/res/drawable-xhdpi/ic_lockscreen_glowdot.png Binary files differnew file mode 100644 index 0000000..cbd039a --- /dev/null +++ b/packages/Keyguard/res/drawable-xhdpi/ic_lockscreen_glowdot.png diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_google_activated.png b/packages/Keyguard/res/drawable-xhdpi/ic_lockscreen_google_activated.png Binary files differindex d643f83..d643f83 100644 --- a/core/res/res/drawable-xhdpi/ic_lockscreen_google_activated.png +++ b/packages/Keyguard/res/drawable-xhdpi/ic_lockscreen_google_activated.png diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_google_focused.png b/packages/Keyguard/res/drawable-xhdpi/ic_lockscreen_google_focused.png Binary files differindex 51863f4..51863f4 100644 --- a/core/res/res/drawable-xhdpi/ic_lockscreen_google_focused.png +++ b/packages/Keyguard/res/drawable-xhdpi/ic_lockscreen_google_focused.png diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_google_normal.png b/packages/Keyguard/res/drawable-xhdpi/ic_lockscreen_google_normal.png Binary files differindex 9a9bf68..9a9bf68 100644 --- a/core/res/res/drawable-xhdpi/ic_lockscreen_google_normal.png +++ b/packages/Keyguard/res/drawable-xhdpi/ic_lockscreen_google_normal.png diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_handle_normal.png b/packages/Keyguard/res/drawable-xhdpi/ic_lockscreen_handle_normal.png Binary files differindex b09071b..b09071b 100644 --- a/core/res/res/drawable-xhdpi/ic_lockscreen_handle_normal.png +++ b/packages/Keyguard/res/drawable-xhdpi/ic_lockscreen_handle_normal.png diff --git a/packages/Keyguard/res/drawable-xhdpi/ic_lockscreen_handle_pressed.png b/packages/Keyguard/res/drawable-xhdpi/ic_lockscreen_handle_pressed.png Binary files differnew file mode 100644 index 0000000..2d28009 --- /dev/null +++ b/packages/Keyguard/res/drawable-xhdpi/ic_lockscreen_handle_pressed.png diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_ime.png b/packages/Keyguard/res/drawable-xhdpi/ic_lockscreen_ime.png Binary files differindex a40ddeb..a40ddeb 100644 --- a/core/res/res/drawable-xhdpi/ic_lockscreen_ime.png +++ b/packages/Keyguard/res/drawable-xhdpi/ic_lockscreen_ime.png diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_lock_normal.png b/packages/Keyguard/res/drawable-xhdpi/ic_lockscreen_lock_normal.png Binary files differindex c44a330..c44a330 100644 --- a/core/res/res/drawable-xhdpi/ic_lockscreen_lock_normal.png +++ b/packages/Keyguard/res/drawable-xhdpi/ic_lockscreen_lock_normal.png diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_lock_pressed.png b/packages/Keyguard/res/drawable-xhdpi/ic_lockscreen_lock_pressed.png Binary files differindex 2264dc3..2264dc3 100644 --- a/core/res/res/drawable-xhdpi/ic_lockscreen_lock_pressed.png +++ b/packages/Keyguard/res/drawable-xhdpi/ic_lockscreen_lock_pressed.png diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_player_background.9.png b/packages/Keyguard/res/drawable-xhdpi/ic_lockscreen_player_background.9.png Binary files differindex 393bca6..393bca6 100644 --- a/core/res/res/drawable-xhdpi/ic_lockscreen_player_background.9.png +++ b/packages/Keyguard/res/drawable-xhdpi/ic_lockscreen_player_background.9.png diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_silent_activated.png b/packages/Keyguard/res/drawable-xhdpi/ic_lockscreen_silent_activated.png Binary files differindex 2900045..2900045 100644 --- a/core/res/res/drawable-xhdpi/ic_lockscreen_silent_activated.png +++ b/packages/Keyguard/res/drawable-xhdpi/ic_lockscreen_silent_activated.png diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_silent_focused.png b/packages/Keyguard/res/drawable-xhdpi/ic_lockscreen_silent_focused.png Binary files differindex 5a93472..5a93472 100644 --- a/core/res/res/drawable-xhdpi/ic_lockscreen_silent_focused.png +++ b/packages/Keyguard/res/drawable-xhdpi/ic_lockscreen_silent_focused.png diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_silent_normal.png b/packages/Keyguard/res/drawable-xhdpi/ic_lockscreen_silent_normal.png Binary files differindex 73f6a2e..73f6a2e 100644 --- a/core/res/res/drawable-xhdpi/ic_lockscreen_silent_normal.png +++ b/packages/Keyguard/res/drawable-xhdpi/ic_lockscreen_silent_normal.png diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_sim.png b/packages/Keyguard/res/drawable-xhdpi/ic_lockscreen_sim.png Binary files differindex f4de96a..f4de96a 100644 --- a/core/res/res/drawable-xhdpi/ic_lockscreen_sim.png +++ b/packages/Keyguard/res/drawable-xhdpi/ic_lockscreen_sim.png diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_soundon_activated.png b/packages/Keyguard/res/drawable-xhdpi/ic_lockscreen_soundon_activated.png Binary files differindex da2adc2..da2adc2 100644 --- a/core/res/res/drawable-xhdpi/ic_lockscreen_soundon_activated.png +++ b/packages/Keyguard/res/drawable-xhdpi/ic_lockscreen_soundon_activated.png diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_soundon_focused.png b/packages/Keyguard/res/drawable-xhdpi/ic_lockscreen_soundon_focused.png Binary files differindex 0485af0..0485af0 100644 --- a/core/res/res/drawable-xhdpi/ic_lockscreen_soundon_focused.png +++ b/packages/Keyguard/res/drawable-xhdpi/ic_lockscreen_soundon_focused.png diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_soundon_normal.png b/packages/Keyguard/res/drawable-xhdpi/ic_lockscreen_soundon_normal.png Binary files differindex 6af5375..6af5375 100644 --- a/core/res/res/drawable-xhdpi/ic_lockscreen_soundon_normal.png +++ b/packages/Keyguard/res/drawable-xhdpi/ic_lockscreen_soundon_normal.png diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_activated.png b/packages/Keyguard/res/drawable-xhdpi/ic_lockscreen_unlock_activated.png Binary files differindex 8a0331d..8a0331d 100644 --- a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_activated.png +++ b/packages/Keyguard/res/drawable-xhdpi/ic_lockscreen_unlock_activated.png diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_normal.png b/packages/Keyguard/res/drawable-xhdpi/ic_lockscreen_unlock_normal.png Binary files differindex 0422117..0422117 100644 --- a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_normal.png +++ b/packages/Keyguard/res/drawable-xhdpi/ic_lockscreen_unlock_normal.png diff --git a/packages/Keyguard/res/drawable-xhdpi/ic_media_next.png b/packages/Keyguard/res/drawable-xhdpi/ic_media_next.png Binary files differnew file mode 100644 index 0000000..4def965 --- /dev/null +++ b/packages/Keyguard/res/drawable-xhdpi/ic_media_next.png diff --git a/packages/Keyguard/res/drawable-xhdpi/ic_media_play.png b/packages/Keyguard/res/drawable-xhdpi/ic_media_play.png Binary files differnew file mode 100644 index 0000000..ccfef18 --- /dev/null +++ b/packages/Keyguard/res/drawable-xhdpi/ic_media_play.png diff --git a/packages/Keyguard/res/drawable-xhdpi/ic_media_previous.png b/packages/Keyguard/res/drawable-xhdpi/ic_media_previous.png Binary files differnew file mode 100644 index 0000000..c4472ae --- /dev/null +++ b/packages/Keyguard/res/drawable-xhdpi/ic_media_previous.png diff --git a/core/res/res/drawable-xhdpi/intro_bg.png b/packages/Keyguard/res/drawable-xhdpi/intro_bg.png Binary files differindex 00466c5..00466c5 100644 --- a/core/res/res/drawable-xhdpi/intro_bg.png +++ b/packages/Keyguard/res/drawable-xhdpi/intro_bg.png diff --git a/packages/Keyguard/res/drawable-xhdpi/kg_add_widget.png b/packages/Keyguard/res/drawable-xhdpi/kg_add_widget.png Binary files differnew file mode 100644 index 0000000..d71905f --- /dev/null +++ b/packages/Keyguard/res/drawable-xhdpi/kg_add_widget.png diff --git a/core/res/res/drawable-xhdpi/kg_add_widget_disabled.png b/packages/Keyguard/res/drawable-xhdpi/kg_add_widget_disabled.png Binary files differindex 55fa1ac..55fa1ac 100644 --- a/core/res/res/drawable-xhdpi/kg_add_widget_disabled.png +++ b/packages/Keyguard/res/drawable-xhdpi/kg_add_widget_disabled.png diff --git a/core/res/res/drawable-xhdpi/kg_add_widget_pressed.png b/packages/Keyguard/res/drawable-xhdpi/kg_add_widget_pressed.png Binary files differindex 4b86727..4b86727 100644 --- a/core/res/res/drawable-xhdpi/kg_add_widget_pressed.png +++ b/packages/Keyguard/res/drawable-xhdpi/kg_add_widget_pressed.png diff --git a/core/res/res/drawable-xhdpi/kg_bouncer_bg_white.9.png b/packages/Keyguard/res/drawable-xhdpi/kg_bouncer_bg_white.9.png Binary files differindex b9e30e2..b9e30e2 100644 --- a/core/res/res/drawable-xhdpi/kg_bouncer_bg_white.9.png +++ b/packages/Keyguard/res/drawable-xhdpi/kg_bouncer_bg_white.9.png diff --git a/core/res/res/drawable-xhdpi/kg_security_grip.9.png b/packages/Keyguard/res/drawable-xhdpi/kg_security_grip.9.png Binary files differindex c33b9d3..c33b9d3 100644 --- a/core/res/res/drawable-xhdpi/kg_security_grip.9.png +++ b/packages/Keyguard/res/drawable-xhdpi/kg_security_grip.9.png diff --git a/core/res/res/drawable-xhdpi/kg_security_lock.png b/packages/Keyguard/res/drawable-xhdpi/kg_security_lock.png Binary files differindex 81d577e..81d577e 100644 --- a/core/res/res/drawable-xhdpi/kg_security_lock.png +++ b/packages/Keyguard/res/drawable-xhdpi/kg_security_lock.png diff --git a/packages/Keyguard/res/drawable-xhdpi/kg_security_lock_focused.png b/packages/Keyguard/res/drawable-xhdpi/kg_security_lock_focused.png Binary files differnew file mode 100644 index 0000000..db22016 --- /dev/null +++ b/packages/Keyguard/res/drawable-xhdpi/kg_security_lock_focused.png diff --git a/packages/Keyguard/res/drawable-xhdpi/kg_security_lock_normal.png b/packages/Keyguard/res/drawable-xhdpi/kg_security_lock_normal.png Binary files differnew file mode 100644 index 0000000..17ebb5f --- /dev/null +++ b/packages/Keyguard/res/drawable-xhdpi/kg_security_lock_normal.png diff --git a/packages/Keyguard/res/drawable-xhdpi/kg_security_lock_pressed.png b/packages/Keyguard/res/drawable-xhdpi/kg_security_lock_pressed.png Binary files differnew file mode 100644 index 0000000..186b6ff --- /dev/null +++ b/packages/Keyguard/res/drawable-xhdpi/kg_security_lock_pressed.png diff --git a/core/res/res/drawable-xhdpi/kg_widget_bg_padded.9.png b/packages/Keyguard/res/drawable-xhdpi/kg_widget_bg_padded.9.png Binary files differindex a84bfa3..a84bfa3 100644 --- a/core/res/res/drawable-xhdpi/kg_widget_bg_padded.9.png +++ b/packages/Keyguard/res/drawable-xhdpi/kg_widget_bg_padded.9.png diff --git a/core/res/res/drawable-xhdpi/kg_widget_delete_drop_target.png b/packages/Keyguard/res/drawable-xhdpi/kg_widget_delete_drop_target.png Binary files differindex d4965d9..d4965d9 100644 --- a/core/res/res/drawable-xhdpi/kg_widget_delete_drop_target.png +++ b/packages/Keyguard/res/drawable-xhdpi/kg_widget_delete_drop_target.png diff --git a/core/res/res/drawable-xhdpi/lockscreen_protection_pattern.png b/packages/Keyguard/res/drawable-xhdpi/lockscreen_protection_pattern.png Binary files differindex c13afe2..c13afe2 100644 --- a/core/res/res/drawable-xhdpi/lockscreen_protection_pattern.png +++ b/packages/Keyguard/res/drawable-xhdpi/lockscreen_protection_pattern.png diff --git a/core/res/res/drawable-xhdpi/sym_keyboard_return_holo.png b/packages/Keyguard/res/drawable-xhdpi/sym_keyboard_return_holo.png Binary files differindex 55174e0..55174e0 100644 --- a/core/res/res/drawable-xhdpi/sym_keyboard_return_holo.png +++ b/packages/Keyguard/res/drawable-xhdpi/sym_keyboard_return_holo.png diff --git a/packages/Keyguard/res/drawable/ic_action_assist_generic.xml b/packages/Keyguard/res/drawable/ic_action_assist_generic.xml new file mode 100644 index 0000000..60f5d5d --- /dev/null +++ b/packages/Keyguard/res/drawable/ic_action_assist_generic.xml @@ -0,0 +1,36 @@ +<?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_enabled="true" + android:state_active="false" + android:state_focused="false" + android:drawable="@drawable/ic_action_assist_generic_normal" /> + + <item + android:state_enabled="true" + android:state_active="true" + android:state_focused="false" + android:drawable="@drawable/ic_action_assist_generic_activated" /> + + <item + android:state_enabled="true" + android:state_active="false" + android:state_focused="true" + android:drawable="@drawable/ic_action_assist_generic_activated" /> + +</selector> diff --git a/core/res/res/drawable/ic_lockscreen_camera.xml b/packages/Keyguard/res/drawable/ic_lockscreen_camera.xml index 41277fe..41277fe 100644 --- a/core/res/res/drawable/ic_lockscreen_camera.xml +++ b/packages/Keyguard/res/drawable/ic_lockscreen_camera.xml diff --git a/core/res/res/drawable/ic_lockscreen_handle.xml b/packages/Keyguard/res/drawable/ic_lockscreen_handle.xml index e7b4a6e..e7b4a6e 100644 --- a/core/res/res/drawable/ic_lockscreen_handle.xml +++ b/packages/Keyguard/res/drawable/ic_lockscreen_handle.xml diff --git a/packages/Keyguard/res/drawable/ic_lockscreen_outerring.xml b/packages/Keyguard/res/drawable/ic_lockscreen_outerring.xml new file mode 100644 index 0000000..75bea70 --- /dev/null +++ b/packages/Keyguard/res/drawable/ic_lockscreen_outerring.xml @@ -0,0 +1,24 @@ +<?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. +--> + +<shape xmlns:android="http://schemas.android.com/apk/res/android" + android:shape="oval" + > + <size android:height="@dimen/keyguard_lockscreen_outerring_diameter" + android:width="@dimen/keyguard_lockscreen_outerring_diameter" /> + <solid android:color="#00000000" /> + <stroke android:color="#1affffff" android:width="2dp" /> +</shape> diff --git a/core/res/res/drawable/ic_lockscreen_silent.xml b/packages/Keyguard/res/drawable/ic_lockscreen_silent.xml index df23278..df23278 100644 --- a/core/res/res/drawable/ic_lockscreen_silent.xml +++ b/packages/Keyguard/res/drawable/ic_lockscreen_silent.xml diff --git a/core/res/res/drawable/ic_lockscreen_soundon.xml b/packages/Keyguard/res/drawable/ic_lockscreen_soundon.xml index b44c86c..b44c86c 100644 --- a/core/res/res/drawable/ic_lockscreen_soundon.xml +++ b/packages/Keyguard/res/drawable/ic_lockscreen_soundon.xml diff --git a/core/res/res/drawable/ic_lockscreen_unlock.xml b/packages/Keyguard/res/drawable/ic_lockscreen_unlock.xml index bb1d0ee..bb1d0ee 100644 --- a/core/res/res/drawable/ic_lockscreen_unlock.xml +++ b/packages/Keyguard/res/drawable/ic_lockscreen_unlock.xml diff --git a/core/res/res/drawable/ic_lockscreen_unlock_phantom.xml b/packages/Keyguard/res/drawable/ic_lockscreen_unlock_phantom.xml index 83f0aed..83f0aed 100644 --- a/core/res/res/drawable/ic_lockscreen_unlock_phantom.xml +++ b/packages/Keyguard/res/drawable/ic_lockscreen_unlock_phantom.xml diff --git a/core/res/res/drawable/keyguard_add_widget_button.xml b/packages/Keyguard/res/drawable/keyguard_add_widget_button.xml index c26f81d..c26f81d 100644 --- a/core/res/res/drawable/keyguard_add_widget_button.xml +++ b/packages/Keyguard/res/drawable/keyguard_add_widget_button.xml diff --git a/core/res/res/drawable/keyguard_expand_challenge_handle.xml b/packages/Keyguard/res/drawable/keyguard_expand_challenge_handle.xml index 3e0780b..3e0780b 100644 --- a/core/res/res/drawable/keyguard_expand_challenge_handle.xml +++ b/packages/Keyguard/res/drawable/keyguard_expand_challenge_handle.xml diff --git a/core/res/res/drawable/lockscreen_emergency_button.xml b/packages/Keyguard/res/drawable/lockscreen_emergency_button.xml index 4ec6a96..4ec6a96 100644 --- a/core/res/res/drawable/lockscreen_emergency_button.xml +++ b/packages/Keyguard/res/drawable/lockscreen_emergency_button.xml diff --git a/core/res/res/drawable/lockscreen_forgot_password_button.xml b/packages/Keyguard/res/drawable/lockscreen_forgot_password_button.xml index 6c081bf..6c081bf 100644 --- a/core/res/res/drawable/lockscreen_forgot_password_button.xml +++ b/packages/Keyguard/res/drawable/lockscreen_forgot_password_button.xml diff --git a/core/res/res/layout-land/keyguard_host_view.xml b/packages/Keyguard/res/layout-land/keyguard_host_view.xml index 6b36235..eeb9ee7 100644 --- a/core/res/res/layout-land/keyguard_host_view.xml +++ b/packages/Keyguard/res/layout-land/keyguard_host_view.xml @@ -19,18 +19,19 @@ <!-- This is the host view that generally contains two sub views: the widget view and the security view. --> -<com.android.internal.policy.impl.keyguard.KeyguardHostView +<com.android.keyguard.KeyguardHostView xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:androidprv="http://schemas.android.com/apk/res/android" + xmlns:androidprv="http://schemas.android.com/apk/res/com.android.keyguard" android:id="@+id/keyguard_host_view" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal"> - <com.android.internal.policy.impl.keyguard.MultiPaneChallengeLayout + <com.android.keyguard.MultiPaneChallengeLayout android:id="@+id/multi_pane_challenge" android:layout_width="match_parent" android:layout_height="match_parent" + android:orientation="horizontal" android:clipChildren="false"> <include layout="@layout/keyguard_widget_remove_drop_target" @@ -55,13 +56,13 @@ androidprv:layout_childType="scrim" android:background="#99000000" /> - <com.android.internal.policy.impl.keyguard.KeyguardSecurityContainer + <com.android.keyguard.KeyguardSecurityContainer android:id="@+id/keyguard_security_container" android:layout_width="wrap_content" android:layout_height="wrap_content" androidprv:layout_childType="challenge" androidprv:layout_centerWithinArea="0.55"> - <com.android.internal.policy.impl.keyguard.KeyguardSecurityViewFlipper + <com.android.keyguard.KeyguardSecurityViewFlipper android:id="@+id/view_flipper" android:layout_width="match_parent" android:layout_height="match_parent" @@ -72,9 +73,9 @@ android:paddingRight="@dimen/keyguard_security_view_margin" android:paddingBottom="@dimen/keyguard_security_view_margin" android:gravity="center"> - </com.android.internal.policy.impl.keyguard.KeyguardSecurityViewFlipper> - </com.android.internal.policy.impl.keyguard.KeyguardSecurityContainer> + </com.android.keyguard.KeyguardSecurityViewFlipper> + </com.android.keyguard.KeyguardSecurityContainer> - </com.android.internal.policy.impl.keyguard.MultiPaneChallengeLayout> -</com.android.internal.policy.impl.keyguard.KeyguardHostView> + </com.android.keyguard.MultiPaneChallengeLayout> +</com.android.keyguard.KeyguardHostView> diff --git a/core/res/res/layout-land/keyguard_status_area.xml b/packages/Keyguard/res/layout-land/keyguard_status_area.xml index 51ee740..51ee740 100644 --- a/core/res/res/layout-land/keyguard_status_area.xml +++ b/packages/Keyguard/res/layout-land/keyguard_status_area.xml diff --git a/core/res/res/layout-land/keyguard_widget_pager.xml b/packages/Keyguard/res/layout-land/keyguard_widget_pager.xml index 02c6d0e..da31065 100644 --- a/core/res/res/layout-land/keyguard_widget_pager.xml +++ b/packages/Keyguard/res/layout-land/keyguard_widget_pager.xml @@ -18,8 +18,8 @@ --> <!-- This is the selector widget that allows the user to select an action. --> -<com.android.internal.policy.impl.keyguard.KeyguardWidgetCarousel - xmlns:androidprv="http://schemas.android.com/apk/res/android" +<com.android.keyguard.KeyguardWidgetCarousel + xmlns:androidprv="http://schemas.android.com/apk/res/com.android.keyguard" xmlns:android="http://schemas.android.com/apk/res/android" android:paddingLeft="25dp" android:paddingRight="25dp" @@ -27,4 +27,4 @@ android:paddingBottom="25dp" android:clipToPadding="false" androidprv:pageSpacing="10dp"> -</com.android.internal.policy.impl.keyguard.KeyguardWidgetCarousel>
\ No newline at end of file +</com.android.keyguard.KeyguardWidgetCarousel> diff --git a/core/res/res/layout-port/keyguard_host_view.xml b/packages/Keyguard/res/layout-port/keyguard_host_view.xml index fb25f9c..8498dcf 100644 --- a/core/res/res/layout-port/keyguard_host_view.xml +++ b/packages/Keyguard/res/layout-port/keyguard_host_view.xml @@ -19,16 +19,16 @@ <!-- This is the host view that generally contains two sub views: the widget view and the security view. --> -<com.android.internal.policy.impl.keyguard.KeyguardHostView +<com.android.keyguard.KeyguardHostView xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:androidprv="http://schemas.android.com/apk/res/android" + xmlns:androidprv="http://schemas.android.com/apk/res/com.android.keyguard" android:id="@+id/keyguard_host_view" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center_horizontal" android:orientation="vertical"> - <com.android.internal.policy.impl.keyguard.SlidingChallengeLayout + <com.android.keyguard.SlidingChallengeLayout android:id="@+id/sliding_layout" android:layout_width="match_parent" android:layout_height="match_parent"> @@ -60,15 +60,15 @@ androidprv:layout_childType="scrim" android:background="#99000000" /> - <com.android.internal.policy.impl.keyguard.KeyguardSecurityContainer + <com.android.keyguard.KeyguardSecurityContainer android:id="@+id/keyguard_security_container" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_maxHeight="@dimen/keyguard_security_height" + androidprv:layout_maxHeight="@dimen/keyguard_security_height" androidprv:layout_childType="challenge" android:padding="0dp" android:gravity="bottom|center_horizontal"> - <com.android.internal.policy.impl.keyguard.KeyguardSecurityViewFlipper + <com.android.keyguard.KeyguardSecurityViewFlipper android:id="@+id/view_flipper" android:layout_width="match_parent" android:layout_height="match_parent" @@ -76,8 +76,8 @@ android:clipToPadding="false" android:paddingTop="@dimen/keyguard_security_view_margin" android:gravity="center"> - </com.android.internal.policy.impl.keyguard.KeyguardSecurityViewFlipper> - </com.android.internal.policy.impl.keyguard.KeyguardSecurityContainer> + </com.android.keyguard.KeyguardSecurityViewFlipper> + </com.android.keyguard.KeyguardSecurityContainer> <ImageButton android:layout_width="match_parent" @@ -89,6 +89,6 @@ android:scaleType="center" android:contentDescription="@string/keyguard_accessibility_expand_lock_area" /> - </com.android.internal.policy.impl.keyguard.SlidingChallengeLayout> -</com.android.internal.policy.impl.keyguard.KeyguardHostView> + </com.android.keyguard.SlidingChallengeLayout> +</com.android.keyguard.KeyguardHostView> diff --git a/core/res/res/layout-port/keyguard_status_area.xml b/packages/Keyguard/res/layout-port/keyguard_status_area.xml index d274457..d274457 100644 --- a/core/res/res/layout-port/keyguard_status_area.xml +++ b/packages/Keyguard/res/layout-port/keyguard_status_area.xml diff --git a/core/res/res/layout-port/keyguard_widget_pager.xml b/packages/Keyguard/res/layout-port/keyguard_widget_pager.xml index 7f22709..d0a07ca 100644 --- a/core/res/res/layout-port/keyguard_widget_pager.xml +++ b/packages/Keyguard/res/layout-port/keyguard_widget_pager.xml @@ -18,8 +18,8 @@ --> <!-- This is the selector widget that allows the user to select an action. --> -<com.android.internal.policy.impl.keyguard.KeyguardWidgetPager - xmlns:androidprv="http://schemas.android.com/apk/res/android" +<com.android.keyguard.KeyguardWidgetPager + xmlns:androidprv="http://schemas.android.com/apk/res/com.android.keyguard" xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/app_widget_container" android:paddingLeft="25dp" @@ -28,4 +28,4 @@ android:paddingBottom="@dimen/kg_widget_pager_bottom_padding" android:clipToPadding="false" androidprv:pageSpacing="10dp"> -</com.android.internal.policy.impl.keyguard.KeyguardWidgetPager> +</com.android.keyguard.KeyguardWidgetPager> diff --git a/core/res/res/layout-sw600dp-port/keyguard_host_view.xml b/packages/Keyguard/res/layout-sw600dp-port/keyguard_host_view.xml index e3d577d..77bc9b5 100644 --- a/core/res/res/layout-sw600dp-port/keyguard_host_view.xml +++ b/packages/Keyguard/res/layout-sw600dp-port/keyguard_host_view.xml @@ -19,15 +19,15 @@ <!-- This is the host view that generally contains two sub views: the widget view and the security view. --> -<com.android.internal.policy.impl.keyguard.KeyguardHostView +<com.android.keyguard.KeyguardHostView xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:androidprv="http://schemas.android.com/apk/res/android" + xmlns:androidprv="http://schemas.android.com/apk/res/com.android.keyguard" android:id="@+id/keyguard_host_view" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal"> - <com.android.internal.policy.impl.keyguard.MultiPaneChallengeLayout + <com.android.keyguard.MultiPaneChallengeLayout android:id="@+id/multi_pane_challenge" android:layout_width="match_parent" android:layout_height="match_parent" @@ -57,14 +57,14 @@ androidprv:layout_childType="scrim" android:background="#99000000" /> - <com.android.internal.policy.impl.keyguard.KeyguardSecurityContainer + <com.android.keyguard.KeyguardSecurityContainer android:id="@+id/keyguard_security_container" android:layout_width="wrap_content" android:layout_height="wrap_content" androidprv:layout_centerWithinArea="0.5" androidprv:layout_childType="challenge" android:layout_gravity="center_horizontal|bottom"> - <com.android.internal.policy.impl.keyguard.KeyguardSecurityViewFlipper + <com.android.keyguard.KeyguardSecurityViewFlipper android:id="@+id/view_flipper" android:layout_width="wrap_content" android:layout_height="wrap_content" @@ -75,8 +75,8 @@ android:paddingRight="@dimen/keyguard_security_view_margin" android:paddingBottom="@dimen/keyguard_security_view_margin" android:gravity="center"> - </com.android.internal.policy.impl.keyguard.KeyguardSecurityViewFlipper> - </com.android.internal.policy.impl.keyguard.KeyguardSecurityContainer> + </com.android.keyguard.KeyguardSecurityViewFlipper> + </com.android.keyguard.KeyguardSecurityContainer> - </com.android.internal.policy.impl.keyguard.MultiPaneChallengeLayout> -</com.android.internal.policy.impl.keyguard.KeyguardHostView> + </com.android.keyguard.MultiPaneChallengeLayout> +</com.android.keyguard.KeyguardHostView> diff --git a/core/res/res/layout-sw600dp/keyguard_glow_pad_container.xml b/packages/Keyguard/res/layout-sw600dp/keyguard_glow_pad_container.xml index 930b14e..930b14e 100644 --- a/core/res/res/layout-sw600dp/keyguard_glow_pad_container.xml +++ b/packages/Keyguard/res/layout-sw600dp/keyguard_glow_pad_container.xml diff --git a/core/res/res/layout/keyguard_account_view.xml b/packages/Keyguard/res/layout/keyguard_account_view.xml index fa36371..766effa 100644 --- a/core/res/res/layout/keyguard_account_view.xml +++ b/packages/Keyguard/res/layout/keyguard_account_view.xml @@ -16,13 +16,14 @@ ** limitations under the License. */ --> -<com.android.internal.policy.impl.keyguard.KeyguardAccountView +<com.android.keyguard.KeyguardAccountView xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:androidprv="http://schemas.android.com/apk/res/com.android.keyguard" android:id="@+id/keyguard_account_view" android:layout_width="match_parent" android:layout_height="match_parent" - android:layout_maxWidth="@dimen/keyguard_security_width" - android:layout_maxHeight="@dimen/keyguard_security_height" + androidprv:layout_maxWidth="@dimen/keyguard_security_width" + androidprv:layout_maxHeight="@dimen/keyguard_security_height" android:orientation="vertical"> <include layout="@layout/keyguard_message_area" @@ -84,4 +85,4 @@ android:gravity="center_horizontal" /> --> -</com.android.internal.policy.impl.keyguard.KeyguardAccountView> +</com.android.keyguard.KeyguardAccountView> diff --git a/core/res/res/layout/keyguard_add_widget.xml b/packages/Keyguard/res/layout/keyguard_add_widget.xml index d043fdb..01b616c 100644 --- a/core/res/res/layout/keyguard_add_widget.xml +++ b/packages/Keyguard/res/layout/keyguard_add_widget.xml @@ -18,7 +18,7 @@ --> <!-- This is a view that shows general status information in Keyguard. --> -<com.android.internal.policy.impl.keyguard.KeyguardWidgetFrame +<com.android.keyguard.KeyguardWidgetFrame xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/keyguard_add_widget" android:layout_width="match_parent" @@ -39,4 +39,4 @@ android:src="@drawable/keyguard_add_widget_button" android:contentDescription="@string/keyguard_accessibility_add_widget"/> </FrameLayout> -</com.android.internal.policy.impl.keyguard.KeyguardWidgetFrame> +</com.android.keyguard.KeyguardWidgetFrame> diff --git a/core/res/res/layout/keyguard_emergency_carrier_area.xml b/packages/Keyguard/res/layout/keyguard_emergency_carrier_area.xml index b8a7654..de673ec 100644 --- a/core/res/res/layout/keyguard_emergency_carrier_area.xml +++ b/packages/Keyguard/res/layout/keyguard_emergency_carrier_area.xml @@ -18,7 +18,7 @@ --> <!-- This contains emergency call button and carrier as shared by pin/pattern/password screens --> -<com.android.internal.policy.impl.keyguard.EmergencyCarrierArea +<com.android.keyguard.EmergencyCarrierArea xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" @@ -28,7 +28,7 @@ android:layout_alignParentBottom="true" android:clickable="true"> - <com.android.internal.policy.impl.keyguard.CarrierText + <com.android.keyguard.CarrierText android:id="@+id/carrier_text" android:layout_width="wrap_content" android:layout_height="wrap_content" @@ -47,12 +47,12 @@ android:gravity="center" android:weightSum="2"> - <com.android.internal.policy.impl.keyguard.EmergencyButton + <com.android.keyguard.EmergencyButton android:id="@+id/emergency_call_button" android:layout_width="0dip" android:layout_height="wrap_content" android:layout_weight="1" - android:drawableLeft="@*android:drawable/lockscreen_emergency_button" + android:drawableLeft="@drawable/lockscreen_emergency_button" android:text="@string/kg_emergency_call_label" style="?android:attr/buttonBarButtonStyle" android:textAppearance="?android:attr/textAppearanceMedium" @@ -64,7 +64,7 @@ android:layout_width="0dip" android:layout_height="wrap_content" android:layout_weight="1" - android:drawableLeft="@*android:drawable/lockscreen_forgot_password_button" + android:drawableLeft="@drawable/lockscreen_forgot_password_button" style="?android:attr/buttonBarButtonStyle" android:textSize="@dimen/kg_status_line_font_size" android:textColor="?android:attr/textColorSecondary" @@ -73,4 +73,4 @@ android:visibility="gone"/> </LinearLayout> -</com.android.internal.policy.impl.keyguard.EmergencyCarrierArea> +</com.android.keyguard.EmergencyCarrierArea> diff --git a/core/res/res/layout/keyguard_emergency_carrier_area_empty.xml b/packages/Keyguard/res/layout/keyguard_emergency_carrier_area_empty.xml index 2f4adae..2f4adae 100644 --- a/core/res/res/layout/keyguard_emergency_carrier_area_empty.xml +++ b/packages/Keyguard/res/layout/keyguard_emergency_carrier_area_empty.xml diff --git a/core/res/res/layout/keyguard_face_unlock_view.xml b/packages/Keyguard/res/layout/keyguard_face_unlock_view.xml index c9f1176..94c68a5 100644 --- a/core/res/res/layout/keyguard_face_unlock_view.xml +++ b/packages/Keyguard/res/layout/keyguard_face_unlock_view.xml @@ -18,14 +18,15 @@ --> <!-- This is the screen that allows the user to unlock by showing their face. --> -<com.android.internal.policy.impl.keyguard.KeyguardFaceUnlockView +<com.android.keyguard.KeyguardFaceUnlockView xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:androidprv="http://schemas.android.com/apk/res/com.android.keyguard" android:id="@+id/keyguard_face_unlock_view" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" - android:layout_maxWidth="@dimen/keyguard_security_width" - android:layout_maxHeight="@dimen/keyguard_security_height" + androidprv:layout_maxWidth="@dimen/keyguard_security_width" + androidprv:layout_maxHeight="@dimen/keyguard_security_height" android:contentDescription="@string/keyguard_accessibility_face_unlock"> <include layout="@layout/keyguard_message_area" @@ -35,7 +36,7 @@ <FrameLayout android:id="@+id/keyguard_bouncer_frame" - android:background="@*android:drawable/kg_bouncer_bg_white" + android:background="@drawable/kg_bouncer_bg_white" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" @@ -45,14 +46,14 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center_horizontal" - android:background="@*android:drawable/intro_bg" + android:background="@drawable/intro_bg" android:gravity="center"> <View android:id="@+id/spotlightMask" android:layout_width="match_parent" android:layout_height="match_parent" - android:background="@*android:color/facelock_spotlight_mask" + android:background="@color/facelock_spotlight_mask" /> <ImageButton @@ -63,7 +64,7 @@ android:layout_alignParentTop="true" android:layout_alignParentEnd="true" android:background="#00000000" - android:src="@*android:drawable/ic_facial_backup" + android:src="@drawable/ic_facial_backup" /> </com.android.internal.widget.FaceUnlockView> </FrameLayout> @@ -75,4 +76,4 @@ android:orientation="vertical" android:layout_gravity="bottom|center_horizontal" android:gravity="center_horizontal" /> -</com.android.internal.policy.impl.keyguard.KeyguardFaceUnlockView> +</com.android.keyguard.KeyguardFaceUnlockView> diff --git a/core/res/res/layout/keyguard_glow_pad_container.xml b/packages/Keyguard/res/layout/keyguard_glow_pad_container.xml index d86707f..376d0e9 100644 --- a/core/res/res/layout/keyguard_glow_pad_container.xml +++ b/packages/Keyguard/res/layout/keyguard_glow_pad_container.xml @@ -22,5 +22,5 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom|center_horizontal" - android:layout_marginBottom="-60dp"/> + android:layout_marginBottom="-80dp"/> </merge>
\ No newline at end of file diff --git a/core/res/res/layout/keyguard_glow_pad_view.xml b/packages/Keyguard/res/layout/keyguard_glow_pad_view.xml index cfd8160..3a466dd 100644 --- a/core/res/res/layout/keyguard_glow_pad_view.xml +++ b/packages/Keyguard/res/layout/keyguard_glow_pad_view.xml @@ -31,16 +31,16 @@ prvandroid:targetDrawables="@array/lockscreen_targets_unlock_only" prvandroid:targetDescriptions="@array/lockscreen_target_descriptions_unlock_only" - prvandroid:directionDescriptions="@*android:array/lockscreen_direction_descriptions" - prvandroid:handleDrawable="@*android:drawable/ic_lockscreen_handle" - prvandroid:outerRingDrawable="@*android:drawable/ic_lockscreen_outerring" - prvandroid:outerRadius="@*android:dimen/glowpadview_target_placement_radius" - prvandroid:innerRadius="@*android:dimen/glowpadview_inner_radius" - prvandroid:snapMargin="@*android:dimen/glowpadview_snap_margin" + prvandroid:directionDescriptions="@array/lockscreen_direction_descriptions" + prvandroid:handleDrawable="@drawable/ic_lockscreen_handle" + prvandroid:outerRingDrawable="@drawable/ic_lockscreen_outerring" + prvandroid:outerRadius="@dimen/glowpadview_target_placement_radius" + prvandroid:innerRadius="@dimen/glowpadview_inner_radius" + prvandroid:snapMargin="@dimen/glowpadview_snap_margin" prvandroid:firstItemOffset="@integer/kg_glowpad_rotation_offset" prvandroid:magneticTargets="true" prvandroid:feedbackCount="1" prvandroid:vibrationDuration="20" - prvandroid:glowRadius="@*android:dimen/glowpadview_glow_radius" - prvandroid:pointDrawable="@*android:drawable/ic_lockscreen_glowdot" + prvandroid:glowRadius="@dimen/glowpadview_glow_radius" + prvandroid:pointDrawable="@drawable/ic_lockscreen_glowdot" prvandroid:allowScaling="true" /> diff --git a/core/res/res/layout/keyguard_message_area.xml b/packages/Keyguard/res/layout/keyguard_message_area.xml index 37463cf..a709e98 100644 --- a/core/res/res/layout/keyguard_message_area.xml +++ b/packages/Keyguard/res/layout/keyguard_message_area.xml @@ -18,7 +18,7 @@ --> <!-- This contains emergency call button and carrier as shared by pin/pattern/password screens --> -<com.android.internal.policy.impl.keyguard.KeyguardMessageArea +<com.android.keyguard.KeyguardMessageArea xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" diff --git a/core/res/res/layout/keyguard_message_area_large.xml b/packages/Keyguard/res/layout/keyguard_message_area_large.xml index 584cec4..ab6246d 100644 --- a/core/res/res/layout/keyguard_message_area_large.xml +++ b/packages/Keyguard/res/layout/keyguard_message_area_large.xml @@ -18,7 +18,7 @@ --> <!-- This contains emergency call button and carrier as shared by pin/pattern/password screens --> -<com.android.internal.policy.impl.keyguard.KeyguardMessageArea +<com.android.keyguard.KeyguardMessageArea xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" diff --git a/core/res/res/layout/keyguard_multi_user_avatar.xml b/packages/Keyguard/res/layout/keyguard_multi_user_avatar.xml index 2d8f02d..41b0be9 100644 --- a/core/res/res/layout/keyguard_multi_user_avatar.xml +++ b/packages/Keyguard/res/layout/keyguard_multi_user_avatar.xml @@ -18,7 +18,7 @@ --> <!-- This is a view that shows general status information in Keyguard. --> -<com.android.internal.policy.impl.keyguard.KeyguardMultiUserAvatar +<com.android.keyguard.KeyguardMultiUserAvatar xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="@dimen/keyguard_avatar_size" android:layout_height="@dimen/keyguard_avatar_size" @@ -42,4 +42,4 @@ android:ellipsize="end" android:paddingLeft="2dp" android:paddingRight="2dp" /> -</com.android.internal.policy.impl.keyguard.KeyguardMultiUserAvatar> +</com.android.keyguard.KeyguardMultiUserAvatar> diff --git a/core/res/res/layout/keyguard_multi_user_selector.xml b/packages/Keyguard/res/layout/keyguard_multi_user_selector.xml index ee01285..c1d5326 100644 --- a/core/res/res/layout/keyguard_multi_user_selector.xml +++ b/packages/Keyguard/res/layout/keyguard_multi_user_selector.xml @@ -16,8 +16,8 @@ ** limitations under the License. */ --> -<com.android.internal.policy.impl.keyguard.KeyguardMultiUserSelectorView - xmlns:androidprv="http://schemas.android.com/apk/res/android" +<com.android.keyguard.KeyguardMultiUserSelectorView + xmlns:androidprv="http://schemas.android.com/apk/res/com.android.keyguard" xmlns:android="http://schemas.android.com/apk/res/android" androidprv:layout_childType="userSwitcher" android:id="@+id/keyguard_user_selector" @@ -25,10 +25,10 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="bottom" - android:contentDescription="@*android:string/keyguard_accessibility_user_selector" + android:contentDescription="@string/keyguard_accessibility_user_selector" android:visibility="gone"> - <com.android.internal.policy.impl.keyguard.KeyguardLinearLayout + <com.android.keyguard.KeyguardLinearLayout android:id="@+id/keyguard_users_grid" android:orientation="horizontal" android:layout_width="wrap_content" @@ -36,4 +36,4 @@ android:layout_height="@dimen/keyguard_avatar_size" android:layout_gravity="center|bottom" /> -</com.android.internal.policy.impl.keyguard.KeyguardMultiUserSelectorView> +</com.android.keyguard.KeyguardMultiUserSelectorView> diff --git a/core/res/res/layout/keyguard_password_view.xml b/packages/Keyguard/res/layout/keyguard_password_view.xml index aab54c3..d8012bf 100644 --- a/core/res/res/layout/keyguard_password_view.xml +++ b/packages/Keyguard/res/layout/keyguard_password_view.xml @@ -16,14 +16,15 @@ ** limitations under the License. */ --> -<com.android.internal.policy.impl.keyguard.KeyguardPasswordView +<com.android.keyguard.KeyguardPasswordView xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:androidprv="http://schemas.android.com/apk/res/com.android.keyguard" android:id="@+id/keyguard_password_view" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" - android:layout_maxWidth="@dimen/keyguard_security_width" - android:layout_maxHeight="@dimen/keyguard_security_height" + androidprv:layout_maxWidth="@dimen/keyguard_security_width" + androidprv:layout_maxHeight="@dimen/keyguard_security_height" android:gravity="bottom" android:contentDescription="@string/keyguard_accessibility_password_unlock" > @@ -43,7 +44,7 @@ since the backspace/IME switcher looks better inside --> <FrameLayout android:id="@+id/keyguard_bouncer_frame" - android:background="@*android:drawable/kg_bouncer_bg_white" + android:background="@drawable/kg_bouncer_bg_white" android:layout_height="wrap_content" android:layout_width="match_parent" > @@ -62,7 +63,7 @@ android:layout_weight="1" android:gravity="center_horizontal" android:layout_gravity="center_vertical" - android:layout_marginStart="@*android:dimen/keyguard_lockscreen_pin_margin_left" + android:layout_marginStart="@dimen/keyguard_lockscreen_pin_margin_left" android:singleLine="true" android:textStyle="normal" android:inputType="textPassword" @@ -76,7 +77,7 @@ <ImageView android:id="@+id/switch_ime_button" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:src="@*android:drawable/ic_lockscreen_ime" + android:src="@drawable/ic_lockscreen_ime" android:clickable="true" android:padding="8dip" android:layout_gravity="center" @@ -101,4 +102,4 @@ android:layout_gravity="bottom|center_horizontal" android:gravity="center_horizontal" /> -</com.android.internal.policy.impl.keyguard.KeyguardPasswordView> +</com.android.keyguard.KeyguardPasswordView> diff --git a/core/res/res/layout/keyguard_pattern_view.xml b/packages/Keyguard/res/layout/keyguard_pattern_view.xml index 1bd3e4e..0c9380c 100644 --- a/core/res/res/layout/keyguard_pattern_view.xml +++ b/packages/Keyguard/res/layout/keyguard_pattern_view.xml @@ -20,14 +20,15 @@ <!-- This is the screen that shows the 9 circle unlock widget and instructs the user how to unlock their device, or make an emergency call. This is the portrait layout. --> -<com.android.internal.policy.impl.keyguard.KeyguardPatternView +<com.android.keyguard.KeyguardPatternView xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:androidprv="http://schemas.android.com/apk/res/com.android.keyguard" android:id="@+id/keyguard_pattern_view" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" - android:layout_maxWidth="@dimen/keyguard_security_width" - android:layout_maxHeight="@dimen/keyguard_security_height" + androidprv:layout_maxWidth="@dimen/keyguard_security_width" + androidprv:layout_maxHeight="@dimen/keyguard_security_height" android:gravity="center_horizontal" android:contentDescription="@string/keyguard_accessibility_pattern_unlock"> @@ -48,7 +49,7 @@ <FrameLayout android:id="@+id/keyguard_bouncer_frame" - android:background="@*android:drawable/kg_bouncer_bg_white" + android:background="@drawable/kg_bouncer_bg_white" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" @@ -75,4 +76,4 @@ </LinearLayout> </FrameLayout> -</com.android.internal.policy.impl.keyguard.KeyguardPatternView> +</com.android.keyguard.KeyguardPatternView> diff --git a/core/res/res/layout/keyguard_pin_view.xml b/packages/Keyguard/res/layout/keyguard_pin_view.xml index 6a3b9e6..00c6a21 100644 --- a/core/res/res/layout/keyguard_pin_view.xml +++ b/packages/Keyguard/res/layout/keyguard_pin_view.xml @@ -17,14 +17,14 @@ */ --> -<com.android.internal.policy.impl.keyguard.KeyguardPINView +<com.android.keyguard.KeyguardPINView xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:androidprv="http://schemas.android.com/apk/res/android" + xmlns:androidprv="http://schemas.android.com/apk/res/com.android.keyguard" android:id="@+id/keyguard_pin_view" android:layout_width="match_parent" android:layout_height="match_parent" - android:layout_maxWidth="@dimen/keyguard_security_width" - android:layout_maxHeight="@dimen/keyguard_security_height" + androidprv:layout_maxWidth="@dimen/keyguard_security_width" + androidprv:layout_maxHeight="@dimen/keyguard_security_height" android:orientation="vertical" android:contentDescription="@string/keyguard_accessibility_pin_unlock" > @@ -34,7 +34,7 @@ /> <LinearLayout android:id="@+id/keyguard_bouncer_frame" - android:background="@*android:drawable/kg_bouncer_bg_white" + android:background="@drawable/kg_bouncer_bg_white" android:layout_width="match_parent" android:layout_height="0dp" android:orientation="vertical" @@ -53,7 +53,7 @@ android:layout_height="match_parent" android:layout_weight="1" android:gravity="center" - android:layout_marginStart="@*android:dimen/keyguard_lockscreen_pin_margin_left" + android:layout_marginStart="@dimen/keyguard_lockscreen_pin_margin_left" android:singleLine="true" android:cursorVisible="false" android:background="@null" @@ -64,7 +64,7 @@ android:layout_width="wrap_content" android:layout_height="match_parent" android:gravity="center_vertical" - android:src="@*android:drawable/ic_input_delete" + android:src="@drawable/ic_input_delete" android:clickable="true" android:paddingTop="8dip" android:paddingBottom="8dip" @@ -85,7 +85,7 @@ android:layout_weight="1" android:orientation="horizontal" > - <view class="com.android.internal.policy.impl.keyguard.NumPadKey" + <view class="com.android.keyguard.NumPadKey" android:id="@+id/key1" style="@style/Widget.Button.NumPadKey" android:layout_width="0px" @@ -94,7 +94,7 @@ androidprv:textView="@+id/pinEntry" androidprv:digit="1" /> - <view class="com.android.internal.policy.impl.keyguard.NumPadKey" + <view class="com.android.keyguard.NumPadKey" android:id="@+id/key2" style="@style/Widget.Button.NumPadKey" android:layout_width="0px" @@ -103,7 +103,7 @@ androidprv:textView="@+id/pinEntry" androidprv:digit="2" /> - <view class="com.android.internal.policy.impl.keyguard.NumPadKey" + <view class="com.android.keyguard.NumPadKey" android:id="@+id/key3" style="@style/Widget.Button.NumPadKey" android:layout_width="0px" @@ -119,7 +119,7 @@ android:layout_weight="1" android:orientation="horizontal" > - <view class="com.android.internal.policy.impl.keyguard.NumPadKey" + <view class="com.android.keyguard.NumPadKey" android:id="@+id/key4" style="@style/Widget.Button.NumPadKey" android:layout_width="0px" @@ -128,7 +128,7 @@ androidprv:textView="@+id/pinEntry" androidprv:digit="4" /> - <view class="com.android.internal.policy.impl.keyguard.NumPadKey" + <view class="com.android.keyguard.NumPadKey" android:id="@+id/key5" style="@style/Widget.Button.NumPadKey" android:layout_width="0px" @@ -137,7 +137,7 @@ androidprv:textView="@+id/pinEntry" androidprv:digit="5" /> - <view class="com.android.internal.policy.impl.keyguard.NumPadKey" + <view class="com.android.keyguard.NumPadKey" android:id="@+id/key6" style="@style/Widget.Button.NumPadKey" android:layout_width="0px" @@ -153,7 +153,7 @@ android:orientation="horizontal" android:layout_weight="1" > - <view class="com.android.internal.policy.impl.keyguard.NumPadKey" + <view class="com.android.keyguard.NumPadKey" android:id="@+id/key7" style="@style/Widget.Button.NumPadKey" android:layout_width="0px" @@ -162,7 +162,7 @@ androidprv:textView="@+id/pinEntry" androidprv:digit="7" /> - <view class="com.android.internal.policy.impl.keyguard.NumPadKey" + <view class="com.android.keyguard.NumPadKey" android:id="@+id/key8" style="@style/Widget.Button.NumPadKey" android:layout_width="0px" @@ -171,7 +171,7 @@ androidprv:textView="@+id/pinEntry" androidprv:digit="8" /> - <view class="com.android.internal.policy.impl.keyguard.NumPadKey" + <view class="com.android.keyguard.NumPadKey" android:id="@+id/key9" style="@style/Widget.Button.NumPadKey" android:layout_width="0px" @@ -192,7 +192,7 @@ android:layout_height="match_parent" android:layout_weight="1" /> - <view class="com.android.internal.policy.impl.keyguard.NumPadKey" + <view class="com.android.keyguard.NumPadKey" android:id="@+id/key0" style="@style/Widget.Button.NumPadKey" android:layout_width="0px" @@ -221,4 +221,4 @@ android:layout_gravity="bottom|center_horizontal" android:gravity="center_horizontal" /> -</com.android.internal.policy.impl.keyguard.KeyguardPINView> +</com.android.keyguard.KeyguardPINView> diff --git a/core/res/res/layout/keyguard_selector_view.xml b/packages/Keyguard/res/layout/keyguard_selector_view.xml index dfacb6a..6cb5e67 100644 --- a/core/res/res/layout/keyguard_selector_view.xml +++ b/packages/Keyguard/res/layout/keyguard_selector_view.xml @@ -18,14 +18,14 @@ --> <!-- This is the selector widget that allows the user to select an action. --> -<com.android.internal.policy.impl.keyguard.KeyguardSelectorView - xmlns:prvandroid="http://schemas.android.com/apk/prv/res/android" +<com.android.keyguard.KeyguardSelectorView xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:androidprv="http://schemas.android.com/apk/res/com.android.keyguard" android:id="@+id/keyguard_selector_view" android:layout_width="match_parent" android:layout_height="match_parent" - android:layout_maxWidth="420dp" - android:layout_maxHeight="@dimen/keyguard_security_height" + androidprv:layout_maxWidth="420dp" + androidprv:layout_maxHeight="@dimen/keyguard_security_height" android:clipChildren="false" android:clipToPadding="false" android:orientation="vertical" @@ -49,7 +49,7 @@ android:layout_height="match_parent" android:layout_marginLeft="16dp" android:layout_marginRight="16dp" - android:background="@*android:drawable/kg_bouncer_bg_white"/> + android:background="@drawable/kg_bouncer_bg_white"/> <include layout="@layout/keyguard_glow_pad_container" /> @@ -60,5 +60,5 @@ android:layout_gravity="bottom|center_horizontal" /> </FrameLayout> -</com.android.internal.policy.impl.keyguard.KeyguardSelectorView> +</com.android.keyguard.KeyguardSelectorView> diff --git a/core/res/res/layout/keyguard_sim_pin_view.xml b/packages/Keyguard/res/layout/keyguard_sim_pin_view.xml index 6e6fe08..eccac19 100644 --- a/core/res/res/layout/keyguard_sim_pin_view.xml +++ b/packages/Keyguard/res/layout/keyguard_sim_pin_view.xml @@ -17,15 +17,15 @@ */ --> <!-- This is the SIM PIN view that allows the user to enter a SIM PIN to unlock the device. --> -<com.android.internal.policy.impl.keyguard.KeyguardSimPinView +<com.android.keyguard.KeyguardSimPinView xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:androidprv="http://schemas.android.com/apk/res/android" + xmlns:androidprv="http://schemas.android.com/apk/res/com.android.keyguard" android:id="@+id/keyguard_sim_pin_view" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" - android:layout_maxWidth="@dimen/keyguard_security_width" - android:layout_maxHeight="@dimen/keyguard_security_height" + androidprv:layout_maxWidth="@dimen/keyguard_security_width" + androidprv:layout_maxHeight="@dimen/keyguard_security_height" android:gravity="center_horizontal"> <ImageView @@ -39,7 +39,7 @@ /> <LinearLayout android:id="@+id/keyguard_bouncer_frame" - android:background="@*android:drawable/kg_bouncer_bg_white" + android:background="@drawable/kg_bouncer_bg_white" android:layout_width="match_parent" android:layout_height="0dp" android:orientation="vertical" @@ -58,7 +58,7 @@ android:layout_height="match_parent" android:layout_weight="1" android:gravity="center" - android:layout_marginStart="@*android:dimen/keyguard_lockscreen_pin_margin_left" + android:layout_marginStart="@dimen/keyguard_lockscreen_pin_margin_left" android:singleLine="true" android:cursorVisible="false" android:background="@null" @@ -69,7 +69,7 @@ android:layout_width="wrap_content" android:layout_height="match_parent" android:gravity="center_vertical" - android:src="@*android:drawable/ic_input_delete" + android:src="@drawable/ic_input_delete" android:clickable="true" android:paddingTop="8dip" android:paddingBottom="8dip" @@ -90,7 +90,7 @@ android:layout_weight="1" android:orientation="horizontal" > - <view class="com.android.internal.policy.impl.keyguard.NumPadKey" + <view class="com.android.keyguard.NumPadKey" android:id="@+id/key1" style="@style/Widget.Button.NumPadKey" android:layout_width="0px" @@ -99,7 +99,7 @@ androidprv:textView="@+id/pinEntry" androidprv:digit="1" /> - <view class="com.android.internal.policy.impl.keyguard.NumPadKey" + <view class="com.android.keyguard.NumPadKey" android:id="@+id/key2" style="@style/Widget.Button.NumPadKey" android:layout_width="0px" @@ -108,7 +108,7 @@ androidprv:textView="@+id/pinEntry" androidprv:digit="2" /> - <view class="com.android.internal.policy.impl.keyguard.NumPadKey" + <view class="com.android.keyguard.NumPadKey" android:id="@+id/key3" style="@style/Widget.Button.NumPadKey" android:layout_width="0px" @@ -124,7 +124,7 @@ android:layout_weight="1" android:orientation="horizontal" > - <view class="com.android.internal.policy.impl.keyguard.NumPadKey" + <view class="com.android.keyguard.NumPadKey" android:id="@+id/key4" style="@style/Widget.Button.NumPadKey" android:layout_width="0px" @@ -133,7 +133,7 @@ androidprv:textView="@+id/pinEntry" androidprv:digit="4" /> - <view class="com.android.internal.policy.impl.keyguard.NumPadKey" + <view class="com.android.keyguard.NumPadKey" android:id="@+id/key5" style="@style/Widget.Button.NumPadKey" android:layout_width="0px" @@ -142,7 +142,7 @@ androidprv:textView="@+id/pinEntry" androidprv:digit="5" /> - <view class="com.android.internal.policy.impl.keyguard.NumPadKey" + <view class="com.android.keyguard.NumPadKey" android:id="@+id/key6" style="@style/Widget.Button.NumPadKey" android:layout_width="0px" @@ -158,7 +158,7 @@ android:orientation="horizontal" android:layout_weight="1" > - <view class="com.android.internal.policy.impl.keyguard.NumPadKey" + <view class="com.android.keyguard.NumPadKey" android:id="@+id/key7" style="@style/Widget.Button.NumPadKey" android:layout_width="0px" @@ -167,7 +167,7 @@ androidprv:textView="@+id/pinEntry" androidprv:digit="7" /> - <view class="com.android.internal.policy.impl.keyguard.NumPadKey" + <view class="com.android.keyguard.NumPadKey" android:id="@+id/key8" style="@style/Widget.Button.NumPadKey" android:layout_width="0px" @@ -176,7 +176,7 @@ androidprv:textView="@+id/pinEntry" androidprv:digit="8" /> - <view class="com.android.internal.policy.impl.keyguard.NumPadKey" + <view class="com.android.keyguard.NumPadKey" android:id="@+id/key9" style="@style/Widget.Button.NumPadKey" android:layout_width="0px" @@ -197,7 +197,7 @@ android:layout_height="match_parent" android:layout_weight="1" /> - <view class="com.android.internal.policy.impl.keyguard.NumPadKey" + <view class="com.android.keyguard.NumPadKey" android:id="@+id/key0" style="@style/Widget.Button.NumPadKey" android:layout_width="0px" @@ -227,4 +227,4 @@ android:layout_gravity="bottom|center_horizontal" android:gravity="center_horizontal" /> -</com.android.internal.policy.impl.keyguard.KeyguardSimPinView> +</com.android.keyguard.KeyguardSimPinView> diff --git a/core/res/res/layout/keyguard_sim_puk_view.xml b/packages/Keyguard/res/layout/keyguard_sim_puk_view.xml index 0412fdc..fe37203 100644 --- a/core/res/res/layout/keyguard_sim_puk_view.xml +++ b/packages/Keyguard/res/layout/keyguard_sim_puk_view.xml @@ -18,15 +18,15 @@ --> <!-- This is the SIM PUK view that allows the user to recover their device by entering the carrier-provided PUK code and entering a new SIM PIN for it. --> -<com.android.internal.policy.impl.keyguard.KeyguardSimPukView +<com.android.keyguard.KeyguardSimPukView xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:androidprv="http://schemas.android.com/apk/res/android" + xmlns:androidprv="http://schemas.android.com/apk/res/com.android.keyguard" android:id="@+id/keyguard_sim_puk_view" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" - android:layout_maxWidth="@dimen/keyguard_security_width" - android:layout_maxHeight="@dimen/keyguard_security_height" + androidprv:layout_maxWidth="@dimen/keyguard_security_width" + androidprv:layout_maxHeight="@dimen/keyguard_security_height" android:gravity="center_horizontal"> <ImageView @@ -40,7 +40,7 @@ /> <LinearLayout android:id="@+id/keyguard_bouncer_frame" - android:background="@*android:drawable/kg_bouncer_bg_white" + android:background="@drawable/kg_bouncer_bg_white" android:layout_width="match_parent" android:layout_height="0dp" android:orientation="vertical" @@ -59,7 +59,7 @@ android:layout_height="match_parent" android:layout_weight="1" android:gravity="center" - android:layout_marginStart="@*android:dimen/keyguard_lockscreen_pin_margin_left" + android:layout_marginStart="@dimen/keyguard_lockscreen_pin_margin_left" android:singleLine="true" android:cursorVisible="false" android:background="@null" @@ -70,7 +70,7 @@ android:layout_width="wrap_content" android:layout_height="match_parent" android:gravity="center_vertical" - android:src="@*android:drawable/ic_input_delete" + android:src="@drawable/ic_input_delete" android:clickable="true" android:paddingTop="8dip" android:paddingBottom="8dip" @@ -91,7 +91,7 @@ android:layout_weight="1" android:orientation="horizontal" > - <view class="com.android.internal.policy.impl.keyguard.NumPadKey" + <view class="com.android.keyguard.NumPadKey" android:id="@+id/key1" style="@style/Widget.Button.NumPadKey" android:layout_width="0px" @@ -100,7 +100,7 @@ androidprv:textView="@+id/pinEntry" androidprv:digit="1" /> - <view class="com.android.internal.policy.impl.keyguard.NumPadKey" + <view class="com.android.keyguard.NumPadKey" android:id="@+id/key2" style="@style/Widget.Button.NumPadKey" android:layout_width="0px" @@ -109,7 +109,7 @@ androidprv:textView="@+id/pinEntry" androidprv:digit="2" /> - <view class="com.android.internal.policy.impl.keyguard.NumPadKey" + <view class="com.android.keyguard.NumPadKey" android:id="@+id/key3" style="@style/Widget.Button.NumPadKey" android:layout_width="0px" @@ -125,7 +125,7 @@ android:layout_weight="1" android:orientation="horizontal" > - <view class="com.android.internal.policy.impl.keyguard.NumPadKey" + <view class="com.android.keyguard.NumPadKey" android:id="@+id/key4" style="@style/Widget.Button.NumPadKey" android:layout_width="0px" @@ -134,7 +134,7 @@ androidprv:textView="@+id/pinEntry" androidprv:digit="4" /> - <view class="com.android.internal.policy.impl.keyguard.NumPadKey" + <view class="com.android.keyguard.NumPadKey" android:id="@+id/key5" style="@style/Widget.Button.NumPadKey" android:layout_width="0px" @@ -143,7 +143,7 @@ androidprv:textView="@+id/pinEntry" androidprv:digit="5" /> - <view class="com.android.internal.policy.impl.keyguard.NumPadKey" + <view class="com.android.keyguard.NumPadKey" android:id="@+id/key6" style="@style/Widget.Button.NumPadKey" android:layout_width="0px" @@ -159,7 +159,7 @@ android:orientation="horizontal" android:layout_weight="1" > - <view class="com.android.internal.policy.impl.keyguard.NumPadKey" + <view class="com.android.keyguard.NumPadKey" android:id="@+id/key7" style="@style/Widget.Button.NumPadKey" android:layout_width="0px" @@ -168,7 +168,7 @@ androidprv:textView="@+id/pinEntry" androidprv:digit="7" /> - <view class="com.android.internal.policy.impl.keyguard.NumPadKey" + <view class="com.android.keyguard.NumPadKey" android:id="@+id/key8" style="@style/Widget.Button.NumPadKey" android:layout_width="0px" @@ -177,7 +177,7 @@ androidprv:textView="@+id/pinEntry" androidprv:digit="8" /> - <view class="com.android.internal.policy.impl.keyguard.NumPadKey" + <view class="com.android.keyguard.NumPadKey" android:id="@+id/key9" style="@style/Widget.Button.NumPadKey" android:layout_width="0px" @@ -198,7 +198,7 @@ android:layout_height="match_parent" android:layout_weight="1" /> - <view class="com.android.internal.policy.impl.keyguard.NumPadKey" + <view class="com.android.keyguard.NumPadKey" android:id="@+id/key0" style="@style/Widget.Button.NumPadKey" android:layout_width="0px" @@ -227,4 +227,4 @@ android:orientation="vertical" android:layout_gravity="bottom|center_horizontal" android:gravity="center_horizontal" /> -</com.android.internal.policy.impl.keyguard.KeyguardSimPukView> +</com.android.keyguard.KeyguardSimPukView> diff --git a/core/res/res/layout/keyguard_status_view.xml b/packages/Keyguard/res/layout/keyguard_status_view.xml index 9e36df3..2304d9f 100644 --- a/core/res/res/layout/keyguard_status_view.xml +++ b/packages/Keyguard/res/layout/keyguard_status_view.xml @@ -18,29 +18,30 @@ --> <!-- This is a view that shows general status information in Keyguard. --> -<com.android.internal.policy.impl.keyguard.KeyguardWidgetFrame +<com.android.keyguard.KeyguardWidgetFrame xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:androidprv="http://schemas.android.com/apk/res/com.android.keyguard" android:id="@+id/keyguard_status_view" android:layout_width="match_parent" android:layout_height="match_parent" - android:layout_maxWidth="@dimen/keyguard_security_width" - android:layout_maxHeight="@dimen/keyguard_security_height" + androidprv:layout_maxWidth="@dimen/keyguard_security_width" + androidprv:layout_maxHeight="@dimen/keyguard_security_height" android:gravity="center_horizontal"> - <com.android.internal.policy.impl.keyguard.KeyguardStatusView + <com.android.keyguard.KeyguardStatusView android:id="@+id/keyguard_status_view_face_palm" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center_horizontal|top" - android:contentDescription="@android:string/keyguard_accessibility_status"> + android:contentDescription="@string/keyguard_accessibility_status"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_horizontal|top" android:orientation="vertical" android:focusable="true"> - <com.android.internal.policy.impl.keyguard.ClockView + <com.android.keyguard.ClockView android:id="@+id/clock_view" android:layout_width="wrap_content" android:layout_height="wrap_content" @@ -58,10 +59,10 @@ android:drawablePadding="2dip" /> - </com.android.internal.policy.impl.keyguard.ClockView> + </com.android.keyguard.ClockView> <include layout="@layout/keyguard_status_area" /> </LinearLayout> - </com.android.internal.policy.impl.keyguard.KeyguardStatusView> -</com.android.internal.policy.impl.keyguard.KeyguardWidgetFrame> + </com.android.keyguard.KeyguardStatusView> +</com.android.keyguard.KeyguardWidgetFrame> diff --git a/packages/Keyguard/res/layout/keyguard_test_activity.xml b/packages/Keyguard/res/layout/keyguard_test_activity.xml new file mode 100644 index 0000000..a3b75b0 --- /dev/null +++ b/packages/Keyguard/res/layout/keyguard_test_activity.xml @@ -0,0 +1,47 @@ +<?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:gravity="center"> + + <Button android:id="@+id/do_keyguard" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:text="@string/do_keyguard" /> + + <Button android:id="@+id/on_screen_turned_off" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:text="@string/on_screen_turned_off" /> + + <Button android:id="@+id/on_screen_turned_on" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:text="@string/on_screen_turned_on" /> + + <Button android:id="@+id/verify_unlock" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:text="@string/verify_unlock" /> + +</LinearLayout> diff --git a/core/res/res/layout/keyguard_transport_control_view.xml b/packages/Keyguard/res/layout/keyguard_transport_control_view.xml index 532322c..7e36f9f 100644 --- a/core/res/res/layout/keyguard_transport_control_view.xml +++ b/packages/Keyguard/res/layout/keyguard_transport_control_view.xml @@ -15,7 +15,7 @@ --> <!-- This is a view to control music playback in keyguard. --> -<com.android.internal.policy.impl.keyguard.KeyguardTransportControlView +<com.android.keyguard.KeyguardTransportControlView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" @@ -26,8 +26,8 @@ <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent" - android:foreground="@*android:drawable/ic_lockscreen_player_background" - android:contentDescription="@*android:string/keygaurd_accessibility_media_controls"> + android:foreground="@drawable/ic_lockscreen_player_background" + android:contentDescription="@string/keygaurd_accessibility_media_controls"> <!-- Use ImageView for its cropping features; otherwise could be android:background --> <ImageView android:id="@+id/albumart" @@ -70,11 +70,11 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" - android:src="@*android:drawable/ic_media_previous" + android:src="@drawable/ic_media_previous" android:clickable="true" android:background="?android:attr/selectableItemBackground" android:padding="10dip" - android:contentDescription="@*android:string/lockscreen_transport_prev_description"/> + android:contentDescription="@string/keyguard_accessibility_transport_prev_description"/> </FrameLayout> <FrameLayout android:layout_width="wrap_content" @@ -86,10 +86,10 @@ android:layout_height="wrap_content" android:layout_gravity="center" android:clickable="true" - android:src="@*android:drawable/ic_media_play" + android:src="@drawable/ic_media_play" android:background="?android:attr/selectableItemBackground" android:padding="10dip" - android:contentDescription="@*android:string/lockscreen_transport_play_description"/> + android:contentDescription="@string/keyguard_accessibility_transport_play_description"/> </FrameLayout> <FrameLayout android:layout_width="wrap_content" @@ -101,12 +101,12 @@ android:layout_height="wrap_content" android:layout_gravity="center" android:clickable="true" - android:src="@*android:drawable/ic_media_next" + android:src="@drawable/ic_media_next" android:background="?android:attr/selectableItemBackground" android:padding="10dip" - android:contentDescription="@*android:string/lockscreen_transport_next_description"/> + android:contentDescription="@string/keyguard_accessibility_transport_next_description"/> </FrameLayout> </LinearLayout> </LinearLayout> -</com.android.internal.policy.impl.keyguard.KeyguardTransportControlView>
\ No newline at end of file +</com.android.keyguard.KeyguardTransportControlView> diff --git a/core/res/res/layout/keyguard_widget_remove_drop_target.xml b/packages/Keyguard/res/layout/keyguard_widget_remove_drop_target.xml index 294c386..294c386 100644 --- a/core/res/res/layout/keyguard_widget_remove_drop_target.xml +++ b/packages/Keyguard/res/layout/keyguard_widget_remove_drop_target.xml diff --git a/packages/Keyguard/res/menu/optionmenu.xml b/packages/Keyguard/res/menu/optionmenu.xml new file mode 100644 index 0000000..22f300d --- /dev/null +++ b/packages/Keyguard/res/menu/optionmenu.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="utf-8"?> +<menu xmlns:android="http://schemas.android.com/apk/res/android"> + <item android:id="@+id/none_menu_item" + android:title="@string/none_menu_item" /> + <item android:id="@+id/pin_menu_item" + android:title="@string/pin_menu_item" /> + <item android:id="@+id/password_menu_item" + android:title="@string/password_menu_item" /> + <item android:id="@+id/pattern_menu_item" + android:title="@string/pattern_menu_item" /> + <item android:id="@+id/sim_pin_menu_item" + android:title="@string/sim_pin_menu_item" /> + <item android:id="@+id/sim_puk_menu_item" + android:title="@string/sim_puk_menu_item" /> + <item android:id="@+id/add_widget_item" + android:title="@string/add_widget_item" /> +</menu> diff --git a/packages/Keyguard/res/values-af/activitystrings.xml b/packages/Keyguard/res/values-af/activitystrings.xml new file mode 100644 index 0000000..f6e8d5e --- /dev/null +++ b/packages/Keyguard/res/values-af/activitystrings.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="app_name" msgid="3352888186674981593">"KeyguardToetsAktiwiteit"</string> + <string name="secure_app_name" msgid="7955498742816868049">"VerenigdeKamera"</string> + <string name="none_menu_item" msgid="6156747285687551424">"Geen sekuriteit nie"</string> + <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string> + <string name="password_menu_item" msgid="1959980499662153160">"Wagwoord"</string> + <string name="pattern_menu_item" msgid="2987798152175140249">"Patroon"</string> + <string name="sim_pin_menu_item" msgid="3962286639645084880">"SIM PIN"</string> + <string name="sim_puk_menu_item" msgid="6190044133008392974">"SIM PUK"</string> + <string name="add_widget_item" msgid="279702152366857415">"Kies legstuk…"</string> + <string name="on_screen_turned_off" msgid="8761396329770508367">"opSkermAfgeskakel"</string> + <string name="on_screen_turned_on" msgid="9222926818030728999">"opSkermAangeskakel"</string> + <string name="do_keyguard" msgid="9210936977823118796">"doenKeyguard"</string> + <string name="verify_unlock" msgid="8508722273329306968">"verifieerOntsluit"</string> +</resources> diff --git a/packages/Keyguard/res/values-af/strings.xml b/packages/Keyguard/res/values-af/strings.xml new file mode 100644 index 0000000..911fbed --- /dev/null +++ b/packages/Keyguard/res/values-af/strings.xml @@ -0,0 +1,138 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Voer PIN-kode in"</string> + <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Voer PUK en nuwe PIN-kode in"</string> + <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK-kode"</string> + <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Nuwe PIN-kode"</string> + <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Raak om wagwoord in te voer"</font></string> + <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Voer wagwoord in om te ontsluit"</string> + <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Voer PIN in om te ontsluit"</string> + <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"Verkeerde PIN-kode."</string> + <string name="keyguard_label_text" msgid="861796461028298424">"Om te ontsluit, druk Kieslys dan 0."</string> + <string name="faceunlock_multiple_failures" msgid="754137583022792429">"Maksimum gesigontsluit-pogings oorskry"</string> + <string name="keyguard_charged" msgid="3272223906073492454">"Gelaai"</string> + <string name="keyguard_plugged_in" msgid="8117572000639998388">"Laai, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string> + <string name="keyguard_low_battery" msgid="8143808018719173859">"Koppel jou herlaaier."</string> + <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Druk kieslys om te ontsluit."</string> + <string name="keyguard_network_locked_message" msgid="9169717779058037168">"Netwerk gesluit"</string> + <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"Geen SIM-kaart nie"</string> + <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"Geen SIM-kaart in tablet nie."</string> + <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"Geen SIM-kaart in foon nie."</string> + <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"Steek \'n SIM-kaart in."</string> + <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"Die SIM-kaart is weg of nie leesbaar nie. Steek \'n SIM-kaart in."</string> + <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"Onbruikbare SIM-kaart."</string> + <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"Jou SIM-kaart is permanent gedeaktiveer."\n" Kontak jou draadlose diensverskaffer vir \'n ander SIM-kaart."</string> + <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM-kaart is gesluit."</string> + <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM-kaart is PUK-geslote."</string> + <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Ontsluit tans SIM-kaart…"</string> + <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. Legstuk %2$d van %3$d."</string> + <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"Voeg legstuk by."</string> + <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"Leeg"</string> + <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"Ontsluitruimte uitgevou."</string> + <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"Ontsluitruimte ingevou."</string> + <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g>-legstuk."</string> + <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"Gebruikerkieser"</string> + <string name="keyguard_accessibility_status" msgid="8008264603935930611">"Status"</string> + <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"Kamera"</string> + <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"Media-kontroles"</string> + <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"Herordening van legstuk begin."</string> + <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"Herordening van legstuk beëindig."</string> + <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"Legstuk <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> uitgevee."</string> + <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"Vou ontsluitruimte uit."</string> + <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"Sleep-ontsluit."</string> + <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Patroon ontsluit."</string> + <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Gesigslot."</string> + <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"PIN ontsluit."</string> + <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Wagwoord ontsluit."</string> + <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Patroonarea."</string> + <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Sleep-area."</string> + <string name="keyguard_accessibility_transport_prev_description" msgid="1337286538318543555">"Vorigesnit-knoppie"</string> + <string name="keyguard_accessibility_transport_next_description" msgid="7073928300444909320">"Volgendesnit-knoppie"</string> + <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Laatwag-knoppie"</string> + <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Speel-knoppie"</string> + <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Stop-knoppie"</string> + <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string> + <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string> + <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string> + <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string> + <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Kanselleer"</string> + <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Vee uit"</string> + <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Klaar"</string> + <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Modus verander"</string> + <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string> + <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Invoersleutel"</string> + <string name="description_target_unlock" msgid="2228524900439801453">"Ontsluit"</string> + <string name="description_target_camera" msgid="969071997552486814">"Kamera"</string> + <string name="description_target_silent" msgid="893551287746522182">"Stil"</string> + <string name="description_target_soundon" msgid="30052466675500172">"Klank aan"</string> + <string name="description_target_search" msgid="3091587249776033139">"Soek"</string> + <string name="description_direction_up" msgid="7169032478259485180">"Gly op vir <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_down" msgid="5087739728639014595">"Gly af vir <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_left" msgid="7207478719805562165">"Gly links vir <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_right" msgid="8034433242579600980">"Gly regs vir <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="user_switched" msgid="3768006783166984410">"Huidige gebruiker <xliff:g id="NAME">%1$s</xliff:g> ."</string> + <string name="kg_emergency_call_label" msgid="684946192523830531">"Noodoproep"</string> + <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Het jy die patroon vergeet?"</string> + <string name="kg_wrong_pattern" msgid="1850806070801358830">"Verkeerde patroon"</string> + <string name="kg_wrong_password" msgid="2333281762128113157">"Verkeerde wagwoord"</string> + <string name="kg_wrong_pin" msgid="1131306510833563801">"Verkeerde PIN"</string> + <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"Probeer weer oor <xliff:g id="NUMBER">%d</xliff:g> sekondes."</string> + <string name="kg_pattern_instructions" msgid="398978611683075868">"Teken jou patroon"</string> + <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Voer SIM-PIN in"</string> + <string name="kg_pin_instructions" msgid="2377242233495111557">"Voer PIN in"</string> + <string name="kg_password_instructions" msgid="5753646556186936819">"Voer wagwoord in"</string> + <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"SIM is nou gedeaktiveer. Voer PUK-kode in om voort te gaan. Kontak diensverskaffer vir details."</string> + <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Voer die gewenste PIN-kode in"</string> + <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Bevestig gewenste PIN-kode"</string> + <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Ontsluit tans SIM-kaart…"</string> + <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Verkeerde PIN-kode."</string> + <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Tik \'n PIN in wat 4 tot 8 syfers lank is."</string> + <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK-kode moet 8 of meer syfers wees."</string> + <string name="kg_invalid_puk" msgid="3638289409676051243">"Voer weer die korrekte PUK-kode in. Herhaalde pogings sal die SIM permanent deaktiveer."</string> + <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN-kodes stem nie ooreen nie"</string> + <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Te veel patroonpogings"</string> + <string name="kg_login_instructions" msgid="1100551261265506448">"Om te ontsluit, meld met jou Google-rekening aan."</string> + <string name="kg_login_username_hint" msgid="5718534272070920364">"Gebruikernaam (e-pos)"</string> + <string name="kg_login_password_hint" msgid="9057289103827298549">"Wagwoord"</string> + <string name="kg_login_submit_button" msgid="5355904582674054702">"Meld aan"</string> + <string name="kg_login_invalid_input" msgid="5754664119319872197">"Ongeldige gebruikernaam of wagwoord."</string> + <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Het jy jou gebruikernaam of wagwoord vergeet?"\n"Besoek "<b>"google.com/accounts/recovery"</b>"."</string> + <string name="kg_login_checking_password" msgid="1052685197710252395">"Kontroleer tans rekening..."</string> + <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Jy het jou PIN <xliff:g id="NUMBER_0">%d</xliff:g> keer verkeerd ingetik. "\n\n"Probeer weer oor <xliff:g id="NUMBER_1">%d</xliff:g> sekondes."</string> + <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Jy het <xliff:g id="NUMBER_0">%d</xliff:g> keer jou wagwoord verkeerdelik getik. "\n\n"Probeer weer oor <xliff:g id="NUMBER_1">%d</xliff:g> sekondes."</string> + <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Jy het jou ontsluitpatroon <xliff:g id="NUMBER_0">%d</xliff:g> keer verkeerdelik geteken. "\n\n"Probeer weer oor <xliff:g id="NUMBER_1">%d</xliff:g> sekondes."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"Jy het <xliff:g id="NUMBER_0">%d</xliff:g> keer verkeerdelik gepoog om die tablet te ontsluit. Na nog <xliff:g id="NUMBER_1">%d</xliff:g> onsuksesvolle pogings, sal die tablet na die fabrieksverstek teruggestel word en al die gebruikerdata sal verlore wees."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"Jy het <xliff:g id="NUMBER_0">%d</xliff:g> keer verkeerdelik gepoog om die foon te ontsluit. Na nog <xliff:g id="NUMBER_1">%d</xliff:g> onsuksesvolle pogings, sal die foon na die fabrieksverstek teruggestel word en al die gebruikerdata sal verlore wees."</string> + <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"Jy het <xliff:g id="NUMBER">%d</xliff:g> keer verkeerdelik gepoog om die tablet te ontsluit. Die tablet sal nou na fabrieksverstek teruggestel word."</string> + <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"Jy het <xliff:g id="NUMBER">%d</xliff:g> keer verkeerdelik gepoog om die foon te ontsluit. Die foon sal nou na fabrieksverstek teruggestel word."</string> + <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Jy het jou ontsluitpatroon <xliff:g id="NUMBER_0">%d</xliff:g> keer verkeerdelik geteken. Na nog <xliff:g id="NUMBER_1">%d</xliff:g> onsuksesvolle pogings, sal jy gevra word om jou tablet te ontsluit deur middel van \'n e-posrekening."\n\n" Probeer weer oor <xliff:g id="NUMBER_2">%d</xliff:g> sekondes."</string> + <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Jy het jou ontsluitpatroon <xliff:g id="NUMBER_0">%d</xliff:g> keer verkeerdelik geteken. Na nog <xliff:g id="NUMBER_1">%d</xliff:g> onsuksesvolle pogings, sal jy gevra word om jou foon te ontsluit deur middel van \'n e-posrekening."\n\n" Probeer weer oor <xliff:g id="NUMBER_2">%d</xliff:g> sekondes."</string> + <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string> + <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Verwyder"</string> + <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Vorigesnit-knoppie"</string> + <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Volgendesnit-knoppie"</string> + <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Laatwag-knoppie"</string> + <string name="keyguard_transport_play_description" msgid="2924628863741150956">"Speel-knoppie"</string> + <string name="keyguard_transport_stop_description" msgid="3084179324810575787">"Stop-knoppie"</string> + <string name="keyguard_carrier_default" msgid="8700650403054042153">"Geen diens nie."</string> +</resources> diff --git a/packages/Keyguard/res/values-am/activitystrings.xml b/packages/Keyguard/res/values-am/activitystrings.xml new file mode 100644 index 0000000..a6c7449 --- /dev/null +++ b/packages/Keyguard/res/values-am/activitystrings.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string> + <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string> + <string name="none_menu_item" msgid="6156747285687551424">"ምንም ደህንነት የለም"</string> + <string name="pin_menu_item" msgid="1179756433268962311">"ፒን"</string> + <string name="password_menu_item" msgid="1959980499662153160">"የይለፍ ቃል"</string> + <string name="pattern_menu_item" msgid="2987798152175140249">"ሥርዓተ ጥለት"</string> + <string name="sim_pin_menu_item" msgid="3962286639645084880">"የሲም ፒን"</string> + <string name="sim_puk_menu_item" msgid="6190044133008392974">"የሲም ፒዩኬ"</string> + <string name="add_widget_item" msgid="279702152366857415">"ንዑስ ፕሮግራም ይምረጡ..."</string> + <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string> + <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string> + <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string> + <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string> +</resources> diff --git a/packages/Keyguard/res/values-am/strings.xml b/packages/Keyguard/res/values-am/strings.xml new file mode 100644 index 0000000..325163d --- /dev/null +++ b/packages/Keyguard/res/values-am/strings.xml @@ -0,0 +1,138 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"ፒን ኮድ ተይብ"</string> + <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"PUK እና አዲስ ፒን ተይብ"</string> + <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"የPUK ኮድ"</string> + <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"አዲስ Pin ኮድ"</string> + <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"የይለፍ ቃል ለመተየብ ንካ"</font></string> + <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"ለመክፈት የይለፍ ቃል ተይብ"</string> + <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"ለመክፈት ፒን ተይብ"</string> + <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"ትክክል ያልሆነ PIN ኮድ።"</string> + <string name="keyguard_label_text" msgid="861796461028298424">"ለመክፈት፣ምናሌ ተጫን ከዛ 0"</string> + <string name="faceunlock_multiple_failures" msgid="754137583022792429">"የመጨረሻውን የገጽ ክፈት ሙከራዎችን አልፏል"</string> + <string name="keyguard_charged" msgid="3272223906073492454">"ባትሪ ሞልቷል"</string> + <string name="keyguard_plugged_in" msgid="8117572000639998388">"ባትሪ በመሙላት ላይ፣ <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string> + <string name="keyguard_low_battery" msgid="8143808018719173859">"የኃይል መሙያዎን ይሰኩ።"</string> + <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"ለመክፈት ምናሌውን ይጫኑ።"</string> + <string name="keyguard_network_locked_message" msgid="9169717779058037168">"አውታረ መረብ ተቆልፏል"</string> + <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"ምንም ሲም ካርድ የለም"</string> + <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"በጡባዊ ውስጥ ምንም ሲም ካርድ የለም።"</string> + <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"በስልኩ ውስጥ ምንም ሲም ካርድ የለም።"</string> + <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"ሲም ካርድ ያስገቡ።"</string> + <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"ሲም ካርዱ ጠፍቷል ወይም መነበብ አይችልም። እባክዎ ሲም ሲም ካርድ ያስገቡ።"</string> + <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"የማይሰራ ሲም ካርድ።"</string> + <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"ሲም ካርድዎ እስከመጨረሻው ተሰናክሏል።"\n" ሌላ ሲም ካርድ ለማግኘት ከገመድ አልባ አገልግሎት አቅራቢዎ ጋር ይገናኙ።"</string> + <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"ሲም ካርድ ተዘግቷል።"</string> + <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"ሲም ካርድ በፒዩኬ ተዘግቷል።"</string> + <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"ሲም ካርዱን በመክፈት ላይ…"</string> + <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s። ምግብር %2$d ከ%3$d።"</string> + <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"ንዑስ ፕሮግራም አክል"</string> + <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"ባዶ"</string> + <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"የመክፈቻ አካባቢ ተስፋፍቷል።"</string> + <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"የመክፈቻ አካባቢ ተሰብስቧል።"</string> + <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"የ<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> ንዑስ ፕሮግራም።"</string> + <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"ተጠቃሚ መራጭ"</string> + <string name="keyguard_accessibility_status" msgid="8008264603935930611">"ሁኔታ"</string> + <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"ካሜራ"</string> + <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"የሚዲያ መቆጣጠሪያዎች"</string> + <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"የንዑስ ፕሮግራም ዳግም መደርደር ተጀምሯል።"</string> + <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"የንዑስ ፕሮግራም ዳግም መደርደር አብቅቷል።"</string> + <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"ንዑስ ፕሮግራም <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> ተሰርዟል።"</string> + <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"የመክፈቻ አካባቢውን አስፋፋ።"</string> + <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"በማንሸራተት ክፈት።"</string> + <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"በስርዓተ-ጥለት መክፈት።"</string> + <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"በፊት መክፈት።"</string> + <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"በፒን መክፈት።"</string> + <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"በይለፍ ቃል መክፈት።"</string> + <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"የስርዓተ-ጥለት አካባቢ።"</string> + <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"የማንሸራተቻ አካባቢ።"</string> + <string name="keyguard_accessibility_transport_prev_description" msgid="1337286538318543555">"የቀዳሚ ትራክ አዝራር"</string> + <string name="keyguard_accessibility_transport_next_description" msgid="7073928300444909320">"የቀጣይ ትራክ አዝራር"</string> + <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"ለአፍታ አቁም አዝራር"</string> + <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"የአጫውት አዝራር"</string> + <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"አቁም አዝራር"</string> + <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string> + <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string> + <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string> + <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string> + <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"ተወው"</string> + <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"ሰርዝ"</string> + <string name="keyboardview_keycode_done" msgid="1992571118466679775">"ተከናውኗል"</string> + <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"ሞድ ለውጥ"</string> + <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"ቀይር"</string> + <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"አስገባ"</string> + <string name="description_target_unlock" msgid="2228524900439801453">"ክፈት"</string> + <string name="description_target_camera" msgid="969071997552486814">"ካሜራ"</string> + <string name="description_target_silent" msgid="893551287746522182">"ፀጥታ"</string> + <string name="description_target_soundon" msgid="30052466675500172">"ድምፅ አብራ"</string> + <string name="description_target_search" msgid="3091587249776033139">"ፈልግ"</string> + <string name="description_direction_up" msgid="7169032478259485180">"ለ<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ወደ ላይ አንሸራትት።"</string> + <string name="description_direction_down" msgid="5087739728639014595">"ለ<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ወደ ታች አንሸራትት።"</string> + <string name="description_direction_left" msgid="7207478719805562165">"ለ<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ወደ ግራ አንሸራትት።"</string> + <string name="description_direction_right" msgid="8034433242579600980">"ለ<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ወደ ቀኝ አንሸራትት።"</string> + <string name="user_switched" msgid="3768006783166984410">"የአሁኑ ተጠቃሚ <xliff:g id="NAME">%1$s</xliff:g>።"</string> + <string name="kg_emergency_call_label" msgid="684946192523830531">"የአደጋ ጊዜ ጥሪ"</string> + <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"ስርዓተ ጥለቱን እርሳ"</string> + <string name="kg_wrong_pattern" msgid="1850806070801358830">"የተሳሳተ ስርዓተ ጥለት"</string> + <string name="kg_wrong_password" msgid="2333281762128113157">"የተሳሳተ ይለፍ ቃል"</string> + <string name="kg_wrong_pin" msgid="1131306510833563801">"የተሳሳተ ፒን"</string> + <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"በ<xliff:g id="NUMBER">%d</xliff:g> ሰከንዶች ውስጥ እንደገና ይሞክሩ።"</string> + <string name="kg_pattern_instructions" msgid="398978611683075868">"ስርዓተ ጥለትዎን ይሳሉ"</string> + <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"የሲም ፒን ያስገቡ"</string> + <string name="kg_pin_instructions" msgid="2377242233495111557">"ፒን ያስገቡ"</string> + <string name="kg_password_instructions" msgid="5753646556186936819">"የይለፍ ቃል ያስገቡ"</string> + <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"ሲም አሁን ተሰናክሏል። ለመቀጠል የPUK ኮድ ያስገቡ። ለዝርዝር ድምጸ ተያያዥ ሞደምን ያግኙ።"</string> + <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"የተፈለገውን የፒን ኮድ ያስገቡ"</string> + <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"የተፈለገውን የፒን ኮድ ያረጋግጡ"</string> + <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"ሲም ካርዱን በመክፈት ላይ…"</string> + <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"ትክክል ያልሆነ ፒን ኮድ።"</string> + <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"ከ4 እስከ 8 ቁጥሮች የያዘ ፒን ይተይቡ።"</string> + <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"የPUK ኮድ 8 ወይም ከዚያ በላይ ቁጥሮች ሊኖረው ይገባል።"</string> + <string name="kg_invalid_puk" msgid="3638289409676051243">"ትክክለኛውን የPUK ኮድ እንደገና ያስገቡ። ተደጋጋሚ ሙከራዎች ሲም ካርዱን እስከመጨረሻው ያሰናክሉታል።"</string> + <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"ፒን ኮዶች አይገጣጠሙም"</string> + <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"በጣም ብዙ የስርዓተ ጥለት ሙከራዎች"</string> + <string name="kg_login_instructions" msgid="1100551261265506448">"ለመክፈት በGoogle መለያዎ ይግቡ።"</string> + <string name="kg_login_username_hint" msgid="5718534272070920364">"የተጠቃሚ ስም (ኢሜይል)"</string> + <string name="kg_login_password_hint" msgid="9057289103827298549">"የይለፍ ቃል"</string> + <string name="kg_login_submit_button" msgid="5355904582674054702">"ግባ"</string> + <string name="kg_login_invalid_input" msgid="5754664119319872197">"ልክ ያልሆነ የተጠቃሚ ስም ወይም የይለፍ ቃል።"</string> + <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"የተጠቃሚ ስምዎን ወይም የይለፍ ቃልዎን ረሱት?"\n<b>"google.com/accounts/recovery"</b>"ይጎብኙ።"</string> + <string name="kg_login_checking_password" msgid="1052685197710252395">"መለያውን በማረጋገጥ ላይ…"</string> + <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"ፒንዎን <xliff:g id="NUMBER_0">%d</xliff:g> ጊዜ በትክክል አልተየቡም። "\n\n"በ<xliff:g id="NUMBER_1">%d</xliff:g> ሰኮንዶች ውስጥ እንደገና ይሞክሩ።"</string> + <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"የይለፍ ቃልዎን <xliff:g id="NUMBER_0">%d</xliff:g> ጊዜ ትክክል ባልሆነ መንገድ ተይበዋል።"\n\n"በ<xliff:g id="NUMBER_1">%d</xliff:g> ሰኮንዶች ውስጥ እንደገና ይሞክሩ።"</string> + <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"የመክፈቻ ስርዓተ ጥለትዎን <xliff:g id="NUMBER_0">%d</xliff:g> ጊዜ በትክክል አልሳሉትም። "\n\n" ከ<xliff:g id="NUMBER_1">%d</xliff:g> ሰከንዶች በኋላ እንደገና ይሞክሩ።"</string> + <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"ጡባዊ ቱኮውን <xliff:g id="NUMBER_0">%d</xliff:g> ጊዜ ትክክል ባልሆነ መንገድ ለመክፈት ሞክረዋል። ከ<xliff:g id="NUMBER_1">%d</xliff:g> ተጨማሪ ያልተሳኩ ሙከራዎች በኋላ ጡባዊ ቱኮው በፋብሪካ ነባሪ ቅንብር ዳግም ይጀመርና ሁሉም የተጠቃሚ ውሂብ ይጠፋል።"</string> + <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"ስልኩን <xliff:g id="NUMBER_0">%d</xliff:g> ጊዜ ትክክል ባልሆነ መንገድ ለመክፈት ሞክረዋል። ከ<xliff:g id="NUMBER_1">%d</xliff:g> ተጨማሪ ያልተሳኩ ሙከራዎች በኋላ ስልኩ በፋብሪካ ነባሪ ቅንብር ዳግም ይጀመርና ሁሉም የተጠቃሚ ውሂብ ይጠፋል።"</string> + <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"ጡባዊ ቱኮዎን <xliff:g id="NUMBER">%d</xliff:g> ጊዜ ትክክል ባልሆነ መንገድ ለመክፈት ሞክረዋል። ጡባዊ ቱኮዎ አሁን በፋብሪካ ነባሪ ቅንብር ዳግም ይጀመራል።"</string> + <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"ስልኩን <xliff:g id="NUMBER">%d</xliff:g> ጊዜ ትክክል ባልሆነ መንገድ ለመክፈት ሞክረዋል። ስልኩ አሁን በፋብሪካ ነባሪ ቅንብር ዳግም ይጀመራል።"</string> + <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"የመክፈቻ ስርዓተ ጥለቱን <xliff:g id="NUMBER_0">%d</xliff:g> ጊዜ በትክክል አልሳሉትም። ከ<xliff:g id="NUMBER_1">%d</xliff:g> ተጨማሪ ያልተሳኩ ሙከራዎች በኋላ የኢሜይል መለያ ተጠቅመው ጡባዊ ቱኮዎን እንዲከፍቱ ይጠየቃሉ።"\n\n" ከ<xliff:g id="NUMBER_2">%d</xliff:g> ከሰከንዶች በኋላ እንደገና ይሞክሩ።"</string> + <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"የመክፈቻ ስርዓተ ጥለቱን <xliff:g id="NUMBER_0">%d</xliff:g> ጊዜ በትክክል አልሳሉትም። ከ<xliff:g id="NUMBER_1">%d</xliff:g> ተጨማሪ ያልተሳኩ ሙከራዎች በኋላ የኢሜይል መለያ ተጠቅመው ስልክዎን እንዲከፍቱ ይጠየቃሉ።"\n\n"እባክዎ ከ<xliff:g id="NUMBER_2">%d</xliff:g> ሰከንዶች በኋላ እንደገና ይሞክሩ።"</string> + <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string> + <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"አስወግድ"</string> + <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"የቀዳሚ ትራክ አዝራር"</string> + <string name="keyguard_transport_next_description" msgid="4299258300283778305">"የቀጣይ ትራክ አዝራር"</string> + <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"ለአፍታ አቁም አዝራር"</string> + <string name="keyguard_transport_play_description" msgid="2924628863741150956">"የአጫውት አዝራር"</string> + <string name="keyguard_transport_stop_description" msgid="3084179324810575787">"አቁም አዝራር"</string> + <string name="keyguard_carrier_default" msgid="8700650403054042153">"ከአገልግሎት መስጫ ክልል ውጪ።"</string> +</resources> diff --git a/packages/Keyguard/res/values-ar/activitystrings.xml b/packages/Keyguard/res/values-ar/activitystrings.xml new file mode 100644 index 0000000..f77d8f00 --- /dev/null +++ b/packages/Keyguard/res/values-ar/activitystrings.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string> + <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string> + <string name="none_menu_item" msgid="6156747285687551424">"بدون تأمين"</string> + <string name="pin_menu_item" msgid="1179756433268962311">"رقم التعريف الشخصي"</string> + <string name="password_menu_item" msgid="1959980499662153160">"كلمة المرور"</string> + <string name="pattern_menu_item" msgid="2987798152175140249">"نقش"</string> + <string name="sim_pin_menu_item" msgid="3962286639645084880">"رقم التعريف الشخصي لبطاقة SIM"</string> + <string name="sim_puk_menu_item" msgid="6190044133008392974">"رمز PUK لبطاقة SIM"</string> + <string name="add_widget_item" msgid="279702152366857415">"جارٍ اختيار أداة..."</string> + <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string> + <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string> + <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string> + <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string> +</resources> diff --git a/packages/Keyguard/res/values-ar/strings.xml b/packages/Keyguard/res/values-ar/strings.xml new file mode 100644 index 0000000..21f2f09 --- /dev/null +++ b/packages/Keyguard/res/values-ar/strings.xml @@ -0,0 +1,138 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"اكتب رمز رقم التعريف الشخصي"</string> + <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"اكتب رمز PUK ورمز رقم التعريف الشخصي الجديد"</string> + <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"رمز PUK"</string> + <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"رمز رقم التعريف الشخصي الجديد"</string> + <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"المس لكتابة كلمة المرور"</font></string> + <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"اكتب كلمة المرور لإلغاء التأمين"</string> + <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"اكتب رقم التعريف الشخصي لإلغاء التأمين"</string> + <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"رقم التعريف الشخصي غير صحيح."</string> + <string name="keyguard_label_text" msgid="861796461028298424">"لإلغاء التأمين، اضغط على \"القائمة\" ثم على 0."</string> + <string name="faceunlock_multiple_failures" msgid="754137583022792429">"تم تجاوز الحد الأقصى لعدد محاولات تأمين الجهاز بالوجه"</string> + <string name="keyguard_charged" msgid="3272223906073492454">"تم الشحن"</string> + <string name="keyguard_plugged_in" msgid="8117572000639998388">"جارٍ الشحن، <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string> + <string name="keyguard_low_battery" msgid="8143808018719173859">"توصيل جهاز الشحن."</string> + <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"اضغط على \"القائمة\" لإلغاء القفل."</string> + <string name="keyguard_network_locked_message" msgid="9169717779058037168">"الشبكة مؤمّنة"</string> + <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"ليست هناك بطاقة SIM"</string> + <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"ليست هناك بطاقة SIM في الجهاز اللوحي."</string> + <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"ليست هناك بطاقة SIM في الهاتف."</string> + <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"أدخل بطاقة SIM."</string> + <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"بطاقة SIM مفقودة أو غير قابلة للقراءة. أدخل بطاقة SIM."</string> + <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"بطاقة SIM غير قابلة للاستخدام."</string> + <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"تم تعطيل بطاقة SIM بشكل دائم."\n" اتصل بمقدم خدمة اللاسلكي للحصول على بطاقة SIM أخرى."</string> + <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"بطاقة SIM مؤمّنة."</string> + <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"بطاقة SIM مؤمّنة بكود PUK."</string> + <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"جارٍ إلغاء تأمين بطاقة SIM…"</string> + <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. الأداة %2$d من %3$d."</string> + <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"إضافة أداة."</string> + <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"فارغة"</string> + <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"تم توسيع منطقة إلغاء القفل."</string> + <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"تم تصغير منطقة إلغاء القفل."</string> + <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"أداة <xliff:g id="WIDGET_INDEX">%1$s</xliff:g>."</string> + <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"محدد المستخدم"</string> + <string name="keyguard_accessibility_status" msgid="8008264603935930611">"الحالة"</string> + <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"الكاميرا"</string> + <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"أدوات التحكم في الوسائط"</string> + <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"بدأت إعادة ترتيب الأدوات."</string> + <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"انتهت إعادة ترتيب الأدوات."</string> + <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"تم حذف أداة <xliff:g id="WIDGET_INDEX">%1$s</xliff:g>."</string> + <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"توسيع منطقة إلغاء القفل."</string> + <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"إلغاء القفل باستخدام التمرير."</string> + <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"إلغاء القفل باستخدام النقش."</string> + <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"تأمين الجهاز بالوجه."</string> + <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"إلغاء القفل باستخدام رقم التعريف الشخصي."</string> + <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"إلغاء القفل باستخدام كلمة المرور."</string> + <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"منطقة النقش."</string> + <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"منطقة التمرير."</string> + <string name="keyguard_accessibility_transport_prev_description" msgid="1337286538318543555">"زر المقطع الصوتي السابق"</string> + <string name="keyguard_accessibility_transport_next_description" msgid="7073928300444909320">"زر المقطع الصوتي التالي"</string> + <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"زر الإيقاف المؤقت"</string> + <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"زر التشغيل"</string> + <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"زر الإيقاف"</string> + <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string> + <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ب ت ث"</string> + <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string> + <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string> + <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"إلغاء"</string> + <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"حذف"</string> + <string name="keyboardview_keycode_done" msgid="1992571118466679775">"تم"</string> + <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"تغيير الوضع"</string> + <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"العالي"</string> + <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string> + <string name="description_target_unlock" msgid="2228524900439801453">"إلغاء تأمين"</string> + <string name="description_target_camera" msgid="969071997552486814">"الكاميرا"</string> + <string name="description_target_silent" msgid="893551287746522182">"صامت"</string> + <string name="description_target_soundon" msgid="30052466675500172">"تشغيل الصوت"</string> + <string name="description_target_search" msgid="3091587249776033139">"بحث"</string> + <string name="description_direction_up" msgid="7169032478259485180">"تمرير لأعلى لـ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_down" msgid="5087739728639014595">"تمرير لأسفل لـ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_left" msgid="7207478719805562165">"تمرير لليسار لـ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_right" msgid="8034433242579600980">"تمرير لليمين لـ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="user_switched" msgid="3768006783166984410">"المستخدم الحالي <xliff:g id="NAME">%1$s</xliff:g>."</string> + <string name="kg_emergency_call_label" msgid="684946192523830531">"الاتصال بالطوارئ"</string> + <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"نسيت النقش"</string> + <string name="kg_wrong_pattern" msgid="1850806070801358830">"نقش خاطئ"</string> + <string name="kg_wrong_password" msgid="2333281762128113157">"كلمة مرور خاطئة"</string> + <string name="kg_wrong_pin" msgid="1131306510833563801">"رقم تعريف شخصي خاطئ"</string> + <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"حاول مرة أخرى خلال <xliff:g id="NUMBER">%d</xliff:g> ثانية."</string> + <string name="kg_pattern_instructions" msgid="398978611683075868">"ارسم نقشك"</string> + <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"أدخل رقم التعريف الشخصي لبطاقة SIM"</string> + <string name="kg_pin_instructions" msgid="2377242233495111557">"أدخل رقم التعريف الشخصي"</string> + <string name="kg_password_instructions" msgid="5753646556186936819">"أدخل كلمة المرور"</string> + <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"بطاقة SIM معطلة الآن. أدخل رمز PUK للمتابعة. اتصل بمشغل شبكة الجوال للاطلاع على التفاصيل."</string> + <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"إدخال رمز رقم التعريف الشخصي المراد"</string> + <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"تأكيد رمز رقم التعريف الشخصي المراد"</string> + <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"جارٍ إلغاء تأمين بطاقة SIM…"</string> + <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"رقم التعريف الشخصي غير صحيح."</string> + <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"اكتب رقم التعريف الشخصي المكون من 4 إلى 8 أرقام."</string> + <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"يجب أن يتضمن رمز PUK 8 أرقام أو أكثر."</string> + <string name="kg_invalid_puk" msgid="3638289409676051243">"أعد إدخال رمز PUK الصحيح. وستؤدي المحاولات المتكررة إلى تعطيل بطاقة SIM نهائيًا."</string> + <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"لا يتطابق رمزا رقم التعريف الشخصي"</string> + <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"محاولات النقش كثيرة جدًا"</string> + <string name="kg_login_instructions" msgid="1100551261265506448">"لإلغاء التأمين، سجّل الدخول بحسابك في Google."</string> + <string name="kg_login_username_hint" msgid="5718534272070920364">"اسم المستخدم (البريد إلكتروني)"</string> + <string name="kg_login_password_hint" msgid="9057289103827298549">"كلمة المرور"</string> + <string name="kg_login_submit_button" msgid="5355904582674054702">"تسجيل الدخول"</string> + <string name="kg_login_invalid_input" msgid="5754664119319872197">"اسم مستخدم غير صحيح أو كلمة مرور غير صالحة."</string> + <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"هل نسيت اسم المستخدم أو كلمة المرور؟"\n"انتقل إلى "<b>"google.com/accounts/recovery"</b>"."</string> + <string name="kg_login_checking_password" msgid="1052685197710252395">"جارٍ فحص الحساب…"</string> + <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"لقد كتبت رقم التعريف الشخصي بشكل غير صحيح <xliff:g id="NUMBER_0">%d</xliff:g> مرة. "\n\n"أعد المحاولة خلال <xliff:g id="NUMBER_1">%d</xliff:g> ثانية."</string> + <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"لقد كتبت كلمة المرور بشكل غير صحيح <xliff:g id="NUMBER_0">%d</xliff:g> مرة. "\n\n"أعد المحاولة خلال <xliff:g id="NUMBER_1">%d</xliff:g> ثانية."</string> + <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"لقد رسمت نقش إلغاء التأمين بطريقة غير صحيحة <xliff:g id="NUMBER_0">%d</xliff:g> مرة. "\n\n"أعد المحاولة خلال <xliff:g id="NUMBER_1">%d</xliff:g> ثانية."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"لقد حاولت إلغاء تأمين الجهاز اللوحي بشكل غير صحيح <xliff:g id="NUMBER_0">%d</xliff:g> مرة. بعد إجراء <xliff:g id="NUMBER_1">%d</xliff:g> من المحاولات غير الناجحة الأخرى، ستتم إعادة تعيين الجهاز اللوحي على الإعدادات الافتراضية للمصنع وسيتم فقد جميع بيانات المستخدم."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"لقد حاولت إلغاء تأمين الهاتف بشكل غير صحيح <xliff:g id="NUMBER_0">%d</xliff:g> مرة. بعد إجراء <xliff:g id="NUMBER_1">%d</xliff:g> من المحاولات غير الناجحة الأخرى، ستتم إعادة تعيين الهاتف على الإعدادات الافتراضية للمصنع وسيتم فقد جميع بيانات المستخدم."</string> + <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"لقد حاولت إلغاء تأمين الجهاز اللوحي بشكل غير صحيح <xliff:g id="NUMBER">%d</xliff:g> مرة. سيتم الآن إعادة تعيين الجهاز اللوحي على الإعدادات الافتراضية للمصنع."</string> + <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"لقد حاولت إلغاء تأمين الهاتف بشكل غير صحيح <xliff:g id="NUMBER">%d</xliff:g> مرة. سيتم الآن إعادة تعيين الهاتف على الإعدادات الافتراضية للمصنع."</string> + <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"لقد رسمت نقش إلغاء التأمين بشكل غير صحيح <xliff:g id="NUMBER_0">%d</xliff:g> مرة. بعد إجراء <xliff:g id="NUMBER_1">%d</xliff:g> من المحاولات غير الناجحة الأخرى، ستطالَب بإلغاء تأمين الجهاز اللوحي باستخدام معلومات حساب بريد إلكتروني."\n\n" أعد المحاولة خلال <xliff:g id="NUMBER_2">%d</xliff:g> ثانية."</string> + <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"لقد رسمت نقش إلغاء التأمين بشكل غير صحيح <xliff:g id="NUMBER_0">%d</xliff:g> مرة. بعد إجراء <xliff:g id="NUMBER_1">%d</xliff:g> من المحاولات غير الناجحة الأخرى، ستُطالب بإلغاء تأمين الهاتف باستخدام حساب بريد إلكتروني لإلغاء تأمين الهاتف."\n\n" أعد المحاولة خلال <xliff:g id="NUMBER_2">%d</xliff:g> ثانية."</string> + <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string> + <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"إزالة"</string> + <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"زر المقطع الصوتي السابق"</string> + <string name="keyguard_transport_next_description" msgid="4299258300283778305">"زر المقطع الصوتي التالي"</string> + <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"زر الإيقاف المؤقت"</string> + <string name="keyguard_transport_play_description" msgid="2924628863741150956">"زر التشغيل"</string> + <string name="keyguard_transport_stop_description" msgid="3084179324810575787">"زر الإيقاف"</string> + <string name="keyguard_carrier_default" msgid="8700650403054042153">"لا تتوفر خدمة"</string> +</resources> diff --git a/packages/Keyguard/res/values-be/activitystrings.xml b/packages/Keyguard/res/values-be/activitystrings.xml new file mode 100644 index 0000000..ccefe40 --- /dev/null +++ b/packages/Keyguard/res/values-be/activitystrings.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string> + <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string> + <string name="none_menu_item" msgid="6156747285687551424">"Аховы няма"</string> + <string name="pin_menu_item" msgid="1179756433268962311">"PIN-код"</string> + <string name="password_menu_item" msgid="1959980499662153160">"Пароль"</string> + <string name="pattern_menu_item" msgid="2987798152175140249">"Шаблон"</string> + <string name="sim_pin_menu_item" msgid="3962286639645084880">"PIN-код SIM-карты"</string> + <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK-код SIM-карты"</string> + <string name="add_widget_item" msgid="279702152366857415">"Выбар вiджэта..."</string> + <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string> + <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string> + <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string> + <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string> +</resources> diff --git a/packages/Keyguard/res/values-be/strings.xml b/packages/Keyguard/res/values-be/strings.xml new file mode 100644 index 0000000..c7ddeb7 --- /dev/null +++ b/packages/Keyguard/res/values-be/strings.xml @@ -0,0 +1,138 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Увядзіце PIN-код"</string> + <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Увядзіце PUK-код і новы PIN-код"</string> + <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK"</string> + <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Новы PIN-код"</string> + <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Дакраніцеся, каб увесці пароль"</font></string> + <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Увядзіце пароль для разблакавання"</string> + <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Каб разблакаваць, увядзіце PIN-код"</string> + <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"Няправільны PIN-код."</string> + <string name="keyguard_label_text" msgid="861796461028298424">"Каб разблакаваць, націсніце \"Меню\", затым 0."</string> + <string name="faceunlock_multiple_failures" msgid="754137583022792429">"Перавышана максімальная колькасць спроб разблакоўкі праз Фэйскантроль"</string> + <string name="keyguard_charged" msgid="3272223906073492454">"Зараджаны"</string> + <string name="keyguard_plugged_in" msgid="8117572000639998388">"Зарадка, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string> + <string name="keyguard_low_battery" msgid="8143808018719173859">"Падключыце зарадную прыладу."</string> + <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Націсніце кнопку \"Меню\", каб разблакіраваць."</string> + <string name="keyguard_network_locked_message" msgid="9169717779058037168">"Сетка заблакiраваная"</string> + <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"Няма SIM-карты"</string> + <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"У планшэце няма SIM-карты."</string> + <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"У тэлефоне няма SIM-карты."</string> + <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"Устаўце SIM-карту."</string> + <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"SIM-карта адсутнічае ці не чытаецца. Устаўце SIM-карту."</string> + <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"SIM-карту немагчыма выкарыстоўваць."</string> + <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"Ваша SIM-карта была адключана назаўсёды."\n" Звяжыцеся з аператарам бесправадной сувязі, каб атрымаць іншую SIM-карту."</string> + <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM-карта заблакiраваная."</string> + <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM-карта заблакiравана PUK-кодам."</string> + <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Разблакiраванне SIM-карты..."</string> + <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. ВIджэт %2$d з %3$d."</string> + <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"Дадаць віджэт"</string> + <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"Пусты"</string> + <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"Вобласць разблакіроўкі разгарнута."</string> + <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"Вобласць разблакіроўкі згарнута."</string> + <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"Віджэт <xliff:g id="WIDGET_INDEX">%1$s</xliff:g>."</string> + <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"Селектар карыстальнiка"</string> + <string name="keyguard_accessibility_status" msgid="8008264603935930611">"Стан"</string> + <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"Камера"</string> + <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"Налады мультымедыя"</string> + <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"Змяненне парадку віджэтаў пачалося."</string> + <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"Змяненне парадку віджэтаў скончылася."</string> + <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"Віджэт <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> выдалены."</string> + <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"Разгарнуць вобласць разблакіроўкі."</string> + <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"Разблакiроўка слайда."</string> + <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Узор разблакiроўкі."</string> + <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Фэйскантроль"</string> + <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"PIN-код разблакiроўкі."</string> + <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Пароль разблакiроўкі."</string> + <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Вобласць узора."</string> + <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Вобласць слайда."</string> + <string name="keyguard_accessibility_transport_prev_description" msgid="1337286538318543555">"Кнопка папярэдняй кампазiцыі"</string> + <string name="keyguard_accessibility_transport_next_description" msgid="7073928300444909320">"Кнопка наступнай кампазiцыі"</string> + <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Кнопка паўзы"</string> + <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Кнопка прайгравання"</string> + <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Кнопка спынення"</string> + <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"123"</string> + <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string> + <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"Alt"</string> + <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string> + <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Адмена"</string> + <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Выдаліць"</string> + <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Гатова"</string> + <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Змена рэжыму"</string> + <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string> + <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string> + <string name="description_target_unlock" msgid="2228524900439801453">"Разблакаваць"</string> + <string name="description_target_camera" msgid="969071997552486814">"Камера"</string> + <string name="description_target_silent" msgid="893551287746522182">"Ціхі рэжым"</string> + <string name="description_target_soundon" msgid="30052466675500172">"Гук уключаны"</string> + <string name="description_target_search" msgid="3091587249776033139">"Пошук"</string> + <string name="description_direction_up" msgid="7169032478259485180">"Правядзіце пальцам уверх, каб атрымаць <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_down" msgid="5087739728639014595">"Правядзіце пальцам уніз, каб атрымаць <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_left" msgid="7207478719805562165">"Правядзіце пальцам улева, каб атрымаць <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_right" msgid="8034433242579600980">"Правядзіце пальцам управа, каб атрымаць <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="user_switched" msgid="3768006783166984410">"Бягучы карыстальнік <xliff:g id="NAME">%1$s</xliff:g>."</string> + <string name="kg_emergency_call_label" msgid="684946192523830531">"Экстранны выклік"</string> + <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Забылі ключ"</string> + <string name="kg_wrong_pattern" msgid="1850806070801358830">"Няправільна ключ"</string> + <string name="kg_wrong_password" msgid="2333281762128113157">"Няправiльны пароль"</string> + <string name="kg_wrong_pin" msgid="1131306510833563801">"Няправільны PIN-код"</string> + <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"Паўтарыце спробу праз <xliff:g id="NUMBER">%d</xliff:g> с."</string> + <string name="kg_pattern_instructions" msgid="398978611683075868">"Намалюйце ключ"</string> + <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Увядзіце PIN-код SIM-карты"</string> + <string name="kg_pin_instructions" msgid="2377242233495111557">"Увядзіце PIN-код"</string> + <string name="kg_password_instructions" msgid="5753646556186936819">"Увядзіце пароль"</string> + <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"SIM-карта зараз адключана. Увядзіце PUK-код, каб працягнуць. Звяжыцеся са сваiм аператарам, каб атрымаць дадатковую iнфармацыю."</string> + <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Увядзіце жаданы PIN-код"</string> + <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Пацвердзіце жадан PIN-код"</string> + <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Разблакiроўка SIM-карты..."</string> + <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Няправільны PIN-код."</string> + <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Увядзіце PIN-код, які змяшчае ад 4 да 8 лічбаў."</string> + <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK-код павінен утрымлiваць 8 лiчбаў і больш."</string> + <string name="kg_invalid_puk" msgid="3638289409676051243">"Паўторна увядзіце правільны PUK-код. Неаднаразовыя спробы назаўжды адключаць SIM-карту."</string> + <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN-коды не супадаюць"</string> + <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Занадта шмат спроб паўтарыць шаблон!"</string> + <string name="kg_login_instructions" msgid="1100551261265506448">"Каб разблакiраваць, увайдзіце ў свой уліковы запіс Google."</string> + <string name="kg_login_username_hint" msgid="5718534272070920364">"Імя карыстальніка (электронная пошта)"</string> + <string name="kg_login_password_hint" msgid="9057289103827298549">"Пароль"</string> + <string name="kg_login_submit_button" msgid="5355904582674054702">"Увайсцi"</string> + <string name="kg_login_invalid_input" msgid="5754664119319872197">"Няправільнае імя карыстальніка ці пароль."</string> + <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Забыліся на імя карыстальніка або пароль?"\n"Наведайце "<b>"google.com/accounts/recovery"</b></string> + <string name="kg_login_checking_password" msgid="1052685197710252395">"Праверка ўлiковага запiсу..."</string> + <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Вы няправільна ўвялі PIN-код пэўную колькасць разоў: <xliff:g id="NUMBER_0">%d</xliff:g>. "\n\n"Паўтарыце спробу праз <xliff:g id="NUMBER_1">%d</xliff:g> с."</string> + <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Вы няправільна ўвялі пароль пэўную колькасць разоў: <xliff:g id="NUMBER_0">%d</xliff:g>. "\n\n"Паўтарыце спробу праз <xliff:g id="NUMBER_1">%d</xliff:g> с."</string> + <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Вы няправільна ўвялі графічны ключ разблакiроўкi пэўную колькасць разоў: <xliff:g id="NUMBER_0">%d</xliff:g>. "\n\n"Паўтарыце спробу праз <xliff:g id="NUMBER_1">%d</xliff:g> с."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"Вы няправільна спрабавалі разблакiраваць планшэт некалькi разоў (<xliff:g id="NUMBER_0">%d</xliff:g>). Пасля яшчэ некалькiх спроб (<xliff:g id="NUMBER_1">%d</xliff:g>) ён будзе скінуты да заводскіх налад i карыстальнiцкiя дадзеныя будуць згубленыя."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"Вы няправільна спрабавалі разблакiраваць планшэт некалькi разоў (<xliff:g id="NUMBER_0">%d</xliff:g>). Пасля яшчэ некалькiх спроб (<xliff:g id="NUMBER_1">%d</xliff:g>) ён будзе скінуты да завадскіх налад i карыстальнiцкiя дадзеныя будуць згубленыя."</string> + <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"Вы няправільна спрабавалі разблакiраваць планшэт некалькi разоў (<xliff:g id="NUMBER">%d</xliff:g>). Цяпер ён будзе скінуты да завадскіх налад."</string> + <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"Вы няправільна спрабавалі разблакiраваць тэлефон некалькi разоў (<xliff:g id="NUMBER">%d</xliff:g>). Цяпер ён будзе скінуты да завадскіх налад."</string> + <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Вы няправільна ўвялі графічны ключ разблакiроўкi пэўную колькасць разоў: <xliff:g id="NUMBER_0">%d</xliff:g>. Пасля яшчэ некалькiх няўдалых спроб (<xliff:g id="NUMBER_1">%d</xliff:g>) вам будзе прапанавана разблакiраваць тэлефон, увайшоўшы ў Google."\n\n" Паўтарыце спробу праз <xliff:g id="NUMBER_2">%d</xliff:g> с."</string> + <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Вы няправільна ўвялі графічны ключ разблакiроўкi пэўную колькасць разоў: <xliff:g id="NUMBER_0">%d</xliff:g>. Пасля яшчэ некалькiх няўдалых спроб (<xliff:g id="NUMBER_1">%d</xliff:g>) вам будзе прапанавана разблакiраваць тэлефон, увайшоўшы ў Google."\n\n" Паўтарыце спробу праз <xliff:g id="NUMBER_2">%d</xliff:g> с."</string> + <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string> + <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Выдалiць"</string> + <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Кнопка папярэдняй кампазiцыі"</string> + <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Кнопка наступнай кампазiцыі"</string> + <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Кнопка паўзы"</string> + <string name="keyguard_transport_play_description" msgid="2924628863741150956">"Кнопка прайгравання"</string> + <string name="keyguard_transport_stop_description" msgid="3084179324810575787">"Кнопка спынення"</string> + <string name="keyguard_carrier_default" msgid="8700650403054042153">"Не абслугоўваецца."</string> +</resources> diff --git a/packages/Keyguard/res/values-bg/activitystrings.xml b/packages/Keyguard/res/values-bg/activitystrings.xml new file mode 100644 index 0000000..807bcf2 --- /dev/null +++ b/packages/Keyguard/res/values-bg/activitystrings.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string> + <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string> + <string name="none_menu_item" msgid="6156747285687551424">"Без защита"</string> + <string name="pin_menu_item" msgid="1179756433268962311">"ПИН код"</string> + <string name="password_menu_item" msgid="1959980499662153160">"Парола"</string> + <string name="pattern_menu_item" msgid="2987798152175140249">"Фигура"</string> + <string name="sim_pin_menu_item" msgid="3962286639645084880">"ПИН код за SIM карта"</string> + <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK код за SIM карта"</string> + <string name="add_widget_item" msgid="279702152366857415">"Избиране на приспособление..."</string> + <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string> + <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string> + <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string> + <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string> +</resources> diff --git a/packages/Keyguard/res/values-bg/strings.xml b/packages/Keyguard/res/values-bg/strings.xml new file mode 100644 index 0000000..8abfd9a --- /dev/null +++ b/packages/Keyguard/res/values-bg/strings.xml @@ -0,0 +1,138 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Въведете ПИН кода"</string> + <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Въведете PUK и новия ПИН код"</string> + <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK код"</string> + <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Нов ПИН код"</string> + <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Докоснете и въведете парола"</font></string> + <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Въведете парола, за да отключите"</string> + <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Въведете ПИН, за да отключите"</string> + <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"Неправилен ПИН код."</string> + <string name="keyguard_label_text" msgid="861796461028298424">"За да отключите, натиснете „Меню“ и после 0."</string> + <string name="faceunlock_multiple_failures" msgid="754137583022792429">"Максималният брой опити за отключване с лице е надвишен"</string> + <string name="keyguard_charged" msgid="3272223906073492454">"Заредена"</string> + <string name="keyguard_plugged_in" msgid="8117572000639998388">"Зарежда се, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string> + <string name="keyguard_low_battery" msgid="8143808018719173859">"Свържете зарядното си устройство."</string> + <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Натиснете иконата за меню, за да отключите."</string> + <string name="keyguard_network_locked_message" msgid="9169717779058037168">"Мрежата е заключена"</string> + <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"Няма SIM карта"</string> + <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"В таблета няма SIM карта."</string> + <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"В телефона няма SIM карта."</string> + <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"Поставете SIM карта."</string> + <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"SIM картата липсва или е нечетима. Поставете SIM карта."</string> + <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"Неизползваема SIM карта."</string> + <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"SIM картата ви е деактивирана за постоянно."\n"За да получите друга, се свържете с доставчика на безжичната си услуга."</string> + <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM картата е заключена."</string> + <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM картата е заключена с PUK код."</string> + <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"SIM картата се отключва…"</string> + <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. Приспособление %2$d от %3$d."</string> + <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"Добавяне на приспособление."</string> + <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"Празно"</string> + <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"Областта за отключване е разгъната."</string> + <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"Областта за отключване е свита."</string> + <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"Приспособление за <xliff:g id="WIDGET_INDEX">%1$s</xliff:g>."</string> + <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"Инструмент за избор на потребители"</string> + <string name="keyguard_accessibility_status" msgid="8008264603935930611">"Състояние"</string> + <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"Камера"</string> + <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"Контроли за мултимедията"</string> + <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"Пренареждането на приспособленията започна."</string> + <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"Пренареждането на приспособленията завърши."</string> + <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"Приспособлението за <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> е изтрито."</string> + <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"Разгъване на областта за отключване."</string> + <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"Отключване с плъзгане."</string> + <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Отключване с фигура."</string> + <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Отключване с лице."</string> + <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Отключване с ПИН код."</string> + <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Отключване с парола."</string> + <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Област на фигурата."</string> + <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Област на плъзгане."</string> + <string name="keyguard_accessibility_transport_prev_description" msgid="1337286538318543555">"Бутон за предишния запис"</string> + <string name="keyguard_accessibility_transport_next_description" msgid="7073928300444909320">"Бутон за следващия запис"</string> + <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Бутон за пауза"</string> + <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Бутон за пускане"</string> + <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Бутон за спиране"</string> + <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string> + <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"АБВ"</string> + <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string> + <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string> + <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Отказ"</string> + <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Изтриване"</string> + <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Готово"</string> + <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Промяна на режима"</string> + <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string> + <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string> + <string name="description_target_unlock" msgid="2228524900439801453">"Отключване"</string> + <string name="description_target_camera" msgid="969071997552486814">"Камера"</string> + <string name="description_target_silent" msgid="893551287746522182">"Тих режим"</string> + <string name="description_target_soundon" msgid="30052466675500172">"Включване на звука"</string> + <string name="description_target_search" msgid="3091587249776033139">"Търсене"</string> + <string name="description_direction_up" msgid="7169032478259485180">"Плъзнете нагоре за <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_down" msgid="5087739728639014595">"Плъзнете надолу за <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_left" msgid="7207478719805562165">"Плъзнете наляво за <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_right" msgid="8034433242579600980">"Плъзнете надясно за <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="user_switched" msgid="3768006783166984410">"Текущ потребител <xliff:g id="NAME">%1$s</xliff:g>."</string> + <string name="kg_emergency_call_label" msgid="684946192523830531">"Спешно обаждане"</string> + <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Забравена фигура"</string> + <string name="kg_wrong_pattern" msgid="1850806070801358830">"Грешна фигура"</string> + <string name="kg_wrong_password" msgid="2333281762128113157">"Грешна парола"</string> + <string name="kg_wrong_pin" msgid="1131306510833563801">"Грешен ПИН код"</string> + <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"Опитайте отново след <xliff:g id="NUMBER">%d</xliff:g> секунди."</string> + <string name="kg_pattern_instructions" msgid="398978611683075868">"Начертайте фигурата си"</string> + <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Въведете ПИН кода за SIM картата"</string> + <string name="kg_pin_instructions" msgid="2377242233495111557">"Въведете ПИН код"</string> + <string name="kg_password_instructions" msgid="5753646556186936819">"Въведете паролата"</string> + <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"SIM картата вече е деактивирана. Въведете PUK кода, за да продължите. Свържете се с оператора за подробности."</string> + <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Въведете желания ПИН код"</string> + <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Потвърдете желания ПИН код"</string> + <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"SIM картата се отключва…"</string> + <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Неправилен ПИН код."</string> + <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Въведете ПИН код с четири до осем цифри."</string> + <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK кодът трябва да е с 8 или повече цифри."</string> + <string name="kg_invalid_puk" msgid="3638289409676051243">"Въведете отново правилния PUK код. Многократните опити ще деактивират за постоянно SIM картата."</string> + <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"ПИН кодовете не съвпадат"</string> + <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Опитите за фигурата са твърде много"</string> + <string name="kg_login_instructions" msgid="1100551261265506448">"За да отключите, влезте с профила си в Google."</string> + <string name="kg_login_username_hint" msgid="5718534272070920364">"Потребителско име (имейл)"</string> + <string name="kg_login_password_hint" msgid="9057289103827298549">"Парола"</string> + <string name="kg_login_submit_button" msgid="5355904582674054702">"Вход"</string> + <string name="kg_login_invalid_input" msgid="5754664119319872197">"Невалидно потребителско име или парола."</string> + <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Забравили сте потребителското име или паролата си?"\n"Посетете "<b>"google.com/accounts/recovery"</b>"."</string> + <string name="kg_login_checking_password" msgid="1052685197710252395">"Профилът се проверява…"</string> + <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Въведохте неправилно ПИН кода си <xliff:g id="NUMBER_0">%d</xliff:g> пъти. "\n\n"Опитайте отново след <xliff:g id="NUMBER_1">%d</xliff:g> секунди."</string> + <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Въведохте неправилно паролата си <xliff:g id="NUMBER_0">%d</xliff:g> пъти. "\n\n"Опитайте отново след <xliff:g id="NUMBER_1">%d</xliff:g> секунди."</string> + <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Начертахте неправилно фигурата си за отключване <xliff:g id="NUMBER_0">%d</xliff:g> пъти. "\n\n"Опитайте отново след <xliff:g id="NUMBER_1">%d</xliff:g> секунди."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"Направихте опит да отключите неправилно таблета <xliff:g id="NUMBER_0">%d</xliff:g> пъти. След още <xliff:g id="NUMBER_1">%d</xliff:g> неуспешни опита ще бъдат възстановени стандартните му фабрични настройки и всички потребителски данни ще бъдат заличени."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"Направихте опит да отключите неправилно телефона <xliff:g id="NUMBER_0">%d</xliff:g> пъти. След още <xliff:g id="NUMBER_1">%d</xliff:g> неуспешни опита ще бъдат възстановени стандартните му фабрични настройки и всички потребителски данни ще бъдат заличени."</string> + <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"Направихте опит да отключите неправилно таблета <xliff:g id="NUMBER">%d</xliff:g> пъти. Сега ще бъдат възстановени стандартните му фабрични настройки."</string> + <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"Направихте опит да отключите неправилно телефона <xliff:g id="NUMBER">%d</xliff:g> пъти. Сега ще бъдат възстановени стандартните му фабрични настройки."</string> + <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Начертахте неправилно фигурата си за отключване <xliff:g id="NUMBER_0">%d</xliff:g> пъти. След още <xliff:g id="NUMBER_1">%d</xliff:g> неуспешни опита ще бъдете помолени да отключите таблета посредством имейл адрес."\n\n" Опитайте отново след <xliff:g id="NUMBER_2">%d</xliff:g> секунди."</string> + <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Начертахте неправилно фигурата си за отключване <xliff:g id="NUMBER_0">%d</xliff:g> пъти. След още <xliff:g id="NUMBER_1">%d</xliff:g> неуспешни опита ще бъдете помолени да отключите телефона посредством имейл адрес."\n\n" Опитайте отново след <xliff:g id="NUMBER_2">%d</xliff:g> секунди."</string> + <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" – "</string> + <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Премахване"</string> + <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Бутон за предишния запис"</string> + <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Бутон за следващия запис"</string> + <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Бутон за пауза"</string> + <string name="keyguard_transport_play_description" msgid="2924628863741150956">"Бутон за пускане"</string> + <string name="keyguard_transport_stop_description" msgid="3084179324810575787">"Бутон за спиране"</string> + <string name="keyguard_carrier_default" msgid="8700650403054042153">"Няма покритие."</string> +</resources> diff --git a/packages/Keyguard/res/values-ca/activitystrings.xml b/packages/Keyguard/res/values-ca/activitystrings.xml new file mode 100644 index 0000000..c18b9bb --- /dev/null +++ b/packages/Keyguard/res/values-ca/activitystrings.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string> + <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string> + <string name="none_menu_item" msgid="6156747285687551424">"No hi ha seguretat"</string> + <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string> + <string name="password_menu_item" msgid="1959980499662153160">"Contrasenya"</string> + <string name="pattern_menu_item" msgid="2987798152175140249">"Patró"</string> + <string name="sim_pin_menu_item" msgid="3962286639645084880">"PIN de la SIM"</string> + <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK de la SIM"</string> + <string name="add_widget_item" msgid="279702152366857415">"Tria un widget..."</string> + <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string> + <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string> + <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string> + <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string> +</resources> diff --git a/packages/Keyguard/res/values-ca/strings.xml b/packages/Keyguard/res/values-ca/strings.xml new file mode 100644 index 0000000..7daa32e --- /dev/null +++ b/packages/Keyguard/res/values-ca/strings.xml @@ -0,0 +1,138 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Introdueix el codi PIN"</string> + <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Introdueix el codi PUK i el codi PIN nou"</string> + <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"Codi PUK"</string> + <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Codi PIN nou"</string> + <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Toca per introduir contrasenya"</font></string> + <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Introdueix la contrasenya per desbloquejar"</string> + <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Introdueix la contrasenya per desbloquejar"</string> + <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"Codi PIN incorrecte."</string> + <string name="keyguard_label_text" msgid="861796461028298424">"Per desbloquejar-lo, premeu Menú i després 0."</string> + <string name="faceunlock_multiple_failures" msgid="754137583022792429">"S\'ha superat el nombre màxim d\'intents de desbloqueig facial"</string> + <string name="keyguard_charged" msgid="3272223906073492454">"Carregada"</string> + <string name="keyguard_plugged_in" msgid="8117572000639998388">"S\'està carregant, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string> + <string name="keyguard_low_battery" msgid="8143808018719173859">"Connecta el carregador."</string> + <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Prem Menú per desbloquejar."</string> + <string name="keyguard_network_locked_message" msgid="9169717779058037168">"Xarxa bloquejada"</string> + <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"No hi ha cap targeta SIM."</string> + <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"No hi ha cap targeta SIM a la tauleta."</string> + <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"No hi ha cap targeta SIM al telèfon."</string> + <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"Insereix una targeta SIM."</string> + <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"Falta la targeta SIM o no es pot llegir. Insereix-ne una."</string> + <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"Targeta SIM no utilitzable."</string> + <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"La targeta SIM s\'ha desactivat permanentment."\n" Contacta amb el teu proveïdor de serveis sense fil per obtenir-ne una altra."</string> + <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"La targeta SIM està bloquejada."</string> + <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"La targeta SIM està bloquejada pel PUK."</string> + <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"S\'està desbloquejant la targeta SIM..."</string> + <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. Widget %2$d de %3$d."</string> + <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"Afegeix un widget"</string> + <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"Buit"</string> + <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"S\'ha ampliat l\'àrea de desbloqueig."</string> + <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"L\'àrea de desbloqueig està replegada."</string> + <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"Widget de <xliff:g id="WIDGET_INDEX">%1$s</xliff:g>."</string> + <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"Selector d\'usuaris"</string> + <string name="keyguard_accessibility_status" msgid="8008264603935930611">"Estat"</string> + <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"Càmera"</string> + <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"Controls multimèdia"</string> + <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"S\'ha iniciat la reorganització del widget."</string> + <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"Ha finalitzat la reorganització del widget."</string> + <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"S\'ha suprimit el widget de <xliff:g id="WIDGET_INDEX">%1$s</xliff:g>."</string> + <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"Amplia l\'àrea de desbloqueig."</string> + <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"Desbloqueig lliscant el dit"</string> + <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Desbloqueig mitjançant patró"</string> + <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Desbloqueig facial"</string> + <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Desbloqueig mitjançant PIN"</string> + <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Desbloqueig mitjançant contrasenya"</string> + <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Àrea de patró"</string> + <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Àrea per lliscar el dit"</string> + <string name="keyguard_accessibility_transport_prev_description" msgid="1337286538318543555">"Botó de pista anterior"</string> + <string name="keyguard_accessibility_transport_next_description" msgid="7073928300444909320">"Botó de pista següent"</string> + <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Botó de pausa"</string> + <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Botó de reproducció"</string> + <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Botó de parada"</string> + <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string> + <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string> + <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string> + <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string> + <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Cancel·la"</string> + <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Suprimeix"</string> + <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Fet"</string> + <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Canvi de mode"</string> + <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Maj"</string> + <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Retorn"</string> + <string name="description_target_unlock" msgid="2228524900439801453">"Desbloqueja"</string> + <string name="description_target_camera" msgid="969071997552486814">"Càmera"</string> + <string name="description_target_silent" msgid="893551287746522182">"Silenci"</string> + <string name="description_target_soundon" msgid="30052466675500172">"Activa el so"</string> + <string name="description_target_search" msgid="3091587249776033139">"Cerca"</string> + <string name="description_direction_up" msgid="7169032478259485180">"Fes lliscar el dit cap amunt per <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_down" msgid="5087739728639014595">"Fes lliscar el dit cap avall per <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_left" msgid="7207478719805562165">"Fes lliscar el dit cap a l\'esquerra per <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_right" msgid="8034433242579600980">"Fes lliscar el dit cap a la dreta per <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="user_switched" msgid="3768006783166984410">"Usuari actual: <xliff:g id="NAME">%1$s</xliff:g>."</string> + <string name="kg_emergency_call_label" msgid="684946192523830531">"Trucada d\'emergència"</string> + <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Patró oblidat"</string> + <string name="kg_wrong_pattern" msgid="1850806070801358830">"Patró incorrecte"</string> + <string name="kg_wrong_password" msgid="2333281762128113157">"Contrasenya incorrecta"</string> + <string name="kg_wrong_pin" msgid="1131306510833563801">"PIN incorrecte"</string> + <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"Torna-ho a provar d\'aquí a <xliff:g id="NUMBER">%d</xliff:g> segons."</string> + <string name="kg_pattern_instructions" msgid="398978611683075868">"Dibuixa el patró"</string> + <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Introdueix el PIN de la SIM"</string> + <string name="kg_pin_instructions" msgid="2377242233495111557">"Introdueix el PIN"</string> + <string name="kg_password_instructions" msgid="5753646556186936819">"Introdueix la contrasenya"</string> + <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"La SIM està desactivada. Introdueix el codi PUK per continuar. Contacta amb l\'operador de telefonia mòbil per obtenir detalls."</string> + <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Introdueix el codi PIN"</string> + <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Confirma el codi PIN"</string> + <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"S\'està desbloquejant la targeta SIM..."</string> + <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Codi PIN incorrecte."</string> + <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Escriu un PIN que tingui de 4 a 8 números."</string> + <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"El codi PUK ha de tenir 8 números o més."</string> + <string name="kg_invalid_puk" msgid="3638289409676051243">"Torna a introduir el codi PUK correcte. Els intents repetits faran que es desactivi la SIM de manera permanent."</string> + <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"Els codis PIN no coincideixen"</string> + <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Massa intents incorrectes"</string> + <string name="kg_login_instructions" msgid="1100551261265506448">"Per desbloquejar el telèfon, inicia la sessió amb el compte de Google."</string> + <string name="kg_login_username_hint" msgid="5718534272070920364">"Nom d\'usuari (correu electrònic)"</string> + <string name="kg_login_password_hint" msgid="9057289103827298549">"Contrasenya"</string> + <string name="kg_login_submit_button" msgid="5355904582674054702">"Inicia la sessió"</string> + <string name="kg_login_invalid_input" msgid="5754664119319872197">"Nom d\'usuari o contrasenya no vàlids."</string> + <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Has oblidat el teu nom d\'usuari o la contrasenya?"\n"Visita "<b>"google.com/accounts/recovery"</b>"."</string> + <string name="kg_login_checking_password" msgid="1052685197710252395">"S\'està comprovant el compte…"</string> + <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Has escrit malament el PIN <xliff:g id="NUMBER_0">%d</xliff:g> vegades. "\n\n"Torna-ho a provar d\'aquí a <xliff:g id="NUMBER_1">%d</xliff:g> segons."</string> + <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Has escrit malament la contrasenya <xliff:g id="NUMBER_0">%d</xliff:g> vegades. "\n\n"Torna-ho a provar d\'aquí a <xliff:g id="NUMBER_1">%d</xliff:g> segons."</string> + <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Has dibuixat el patró de desbloqueig de manera incorrecta <xliff:g id="NUMBER_0">%d</xliff:g> vegades. "\n\n"Torna-ho a provar d\'aquí a <xliff:g id="NUMBER_1">%d</xliff:g> segons."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"Has provat de desbloquejar la tauleta <xliff:g id="NUMBER_0">%d</xliff:g> vegades de manera incorrecta. D\'aquí a <xliff:g id="NUMBER_1">%d</xliff:g> intents incorrectes més, la tauleta es restablirà a la configuració predeterminada de fàbrica i es perdran totes les dades dels usuaris."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"Has provat de desbloquejar el telèfon <xliff:g id="NUMBER_0">%d</xliff:g> vegades de manera incorrecta. D\'aquí a <xliff:g id="NUMBER_1">%d</xliff:g> intents incorrectes més, el telèfon es restablirà a la configuració predeterminada de fàbrica i es perdran totes les dades dels usuaris."</string> + <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"Has provat de desbloquejar la tauleta <xliff:g id="NUMBER">%d</xliff:g> vegades de manera incorrecta. Ara la tauleta es restablirà a la configuració predeterminada de fàbrica."</string> + <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"Has provat de desbloquejar el telèfon <xliff:g id="NUMBER">%d</xliff:g> vegades de manera incorrecta. Ara el telèfon es restablirà a la configuració predeterminada de fàbrica."</string> + <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Has dibuixat el patró de desbloqueig <xliff:g id="NUMBER_0">%d</xliff:g> vegades de manera incorrecta. Després de <xliff:g id="NUMBER_1">%d</xliff:g> intents incorrectes més, se\'t demanarà que desbloquegis la tauleta amb un compte de correu electrònic."\n\n" Torna-ho a provar d\'aquí a <xliff:g id="NUMBER_2">%d</xliff:g> segons."</string> + <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Has dibuixat el patró de desbloqueig <xliff:g id="NUMBER_0">%d</xliff:g> vegades de manera incorrecta. Després de <xliff:g id="NUMBER_1">%d</xliff:g> intents incorrectes més, se\'t demanarà que desbloquegis el telèfon amb un compte de correu electrònic."\n\n" Torna-ho a provar d\'aquí a <xliff:g id="NUMBER_2">%d</xliff:g> segons."</string> + <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string> + <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Elimina"</string> + <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Botó de pista anterior"</string> + <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Botó de pista següent"</string> + <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Botó de pausa"</string> + <string name="keyguard_transport_play_description" msgid="2924628863741150956">"Botó de reproducció"</string> + <string name="keyguard_transport_stop_description" msgid="3084179324810575787">"Botó de parada"</string> + <string name="keyguard_carrier_default" msgid="8700650403054042153">"Sense servei."</string> +</resources> diff --git a/packages/Keyguard/res/values-cs/activitystrings.xml b/packages/Keyguard/res/values-cs/activitystrings.xml new file mode 100644 index 0000000..354176e --- /dev/null +++ b/packages/Keyguard/res/values-cs/activitystrings.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string> + <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string> + <string name="none_menu_item" msgid="6156747285687551424">"Žádné zabezpečení"</string> + <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string> + <string name="password_menu_item" msgid="1959980499662153160">"Heslo"</string> + <string name="pattern_menu_item" msgid="2987798152175140249">"Gesto"</string> + <string name="sim_pin_menu_item" msgid="3962286639645084880">"PIN SIM karty"</string> + <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK SIM karty"</string> + <string name="add_widget_item" msgid="279702152366857415">"Zvolte widget..."</string> + <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string> + <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string> + <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string> + <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string> +</resources> diff --git a/packages/Keyguard/res/values-cs/strings.xml b/packages/Keyguard/res/values-cs/strings.xml new file mode 100644 index 0000000..2f956c7 --- /dev/null +++ b/packages/Keyguard/res/values-cs/strings.xml @@ -0,0 +1,138 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Zadejte kód PIN"</string> + <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Zadejte kód PUK a nový kód PIN."</string> + <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"Kód PUK"</string> + <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Nový kód PIN"</string> + <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Dotykem zadáte heslo"</font></string> + <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Zadejte heslo pro odemknutí"</string> + <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Zadejte kód PIN pro odemknutí"</string> + <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"Nesprávný kód PIN."</string> + <string name="keyguard_label_text" msgid="861796461028298424">"Chcete-li telefon odemknout, stiskněte Menu a poté 0."</string> + <string name="faceunlock_multiple_failures" msgid="754137583022792429">"Překročili jste maximální povolený počet pokusů o odemknutí obličejem."</string> + <string name="keyguard_charged" msgid="3272223906073492454">"Nabito"</string> + <string name="keyguard_plugged_in" msgid="8117572000639998388">"Nabíjení, <xliff:g id="NUMBER">%d</xliff:g> <xliff:g id="PERCENT">%%</xliff:g>"</string> + <string name="keyguard_low_battery" msgid="8143808018719173859">"Připojte dobíjecí zařízení."</string> + <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Telefon odemknete stisknutím tlačítka Menu."</string> + <string name="keyguard_network_locked_message" msgid="9169717779058037168">"Síť je blokována"</string> + <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"Není vložena SIM karta."</string> + <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"V tabletu není SIM karta."</string> + <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"V telefonu není SIM karta."</string> + <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"Vložte SIM kartu."</string> + <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"SIM karta chybí nebo je nečitelná. Vložte SIM kartu."</string> + <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"Nepoužitelná SIM karta."</string> + <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"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="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM karta je zablokována."</string> + <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM karta je zablokována pomocí kódu PUK."</string> + <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Odblokování SIM karty…"</string> + <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. Widget %2$d z %3$d."</string> + <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"Přidat widget"</string> + <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"Prázdné"</string> + <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"Oblast odemknutí byla rozšířena."</string> + <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"Oblast odemknutí byla sbalena."</string> + <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"Widget <xliff:g id="WIDGET_INDEX">%1$s</xliff:g>"</string> + <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"Výběr uživatele"</string> + <string name="keyguard_accessibility_status" msgid="8008264603935930611">"Stav"</string> + <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"Fotoaparát"</string> + <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"Ovládání médií"</string> + <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"Přeuspořádání widgetů bylo zahájeno."</string> + <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"Přeuspořádání widgetů bylo dokončeno."</string> + <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"Widget <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> byl smazán."</string> + <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"Rozšířit oblast odemknutí"</string> + <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"Odemknutí přejetím prstem."</string> + <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Odemknutí gestem."</string> + <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Odemknutí obličejem."</string> + <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Odemknutí kódem PIN."</string> + <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Odemknutí heslem."</string> + <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Oblast pro zadání bezpečnostního gesta."</string> + <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Oblast pro přejetí prstem."</string> + <string name="keyguard_accessibility_transport_prev_description" msgid="1337286538318543555">"Tlačítko Předchozí stopa"</string> + <string name="keyguard_accessibility_transport_next_description" msgid="7073928300444909320">"Tlačítko Další stopa"</string> + <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Tlačítko Pozastavit"</string> + <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Tlačítko Přehrát"</string> + <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Tlačítko Zastavit"</string> + <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string> + <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string> + <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"Alt"</string> + <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string> + <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Zrušit"</string> + <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Smazat"</string> + <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Hotovo"</string> + <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Změna režimu"</string> + <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string> + <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string> + <string name="description_target_unlock" msgid="2228524900439801453">"Odemknout"</string> + <string name="description_target_camera" msgid="969071997552486814">"Fotoaparát"</string> + <string name="description_target_silent" msgid="893551287746522182">"Tichý"</string> + <string name="description_target_soundon" msgid="30052466675500172">"Zapnout zvuk"</string> + <string name="description_target_search" msgid="3091587249776033139">"Vyhledávání"</string> + <string name="description_direction_up" msgid="7169032478259485180">"Přejeďte prstem nahoru: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>"</string> + <string name="description_direction_down" msgid="5087739728639014595">"Přejeďte prstem dolů: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>"</string> + <string name="description_direction_left" msgid="7207478719805562165">"Přejeďte prstem doleva: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>"</string> + <string name="description_direction_right" msgid="8034433242579600980">"Přejeďte prstem doprava: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>"</string> + <string name="user_switched" msgid="3768006783166984410">"Aktuální uživatel je <xliff:g id="NAME">%1$s</xliff:g>."</string> + <string name="kg_emergency_call_label" msgid="684946192523830531">"Tísňové volání"</string> + <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Zapomenuté gesto"</string> + <string name="kg_wrong_pattern" msgid="1850806070801358830">"Nesprávné gesto"</string> + <string name="kg_wrong_password" msgid="2333281762128113157">"Nesprávné heslo"</string> + <string name="kg_wrong_pin" msgid="1131306510833563801">"Nesprávný kód PIN"</string> + <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"Zkuste to znovu za <xliff:g id="NUMBER">%d</xliff:g> s."</string> + <string name="kg_pattern_instructions" msgid="398978611683075868">"Nakreslete gesto"</string> + <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Zadejte kód PIN SIM karty"</string> + <string name="kg_pin_instructions" msgid="2377242233495111557">"Zadejte kód PIN"</string> + <string name="kg_password_instructions" msgid="5753646556186936819">"Zadejte heslo"</string> + <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"SIM karta byla deaktivována. Chcete-li pokračovat, je třeba zadat kód PUK. Podrobné informace získáte od operátora."</string> + <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Zadejte požadovaný kód PIN."</string> + <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Potvrďte požadovaný kód PIN."</string> + <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Odblokování SIM karty..."</string> + <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Nesprávný kód PIN."</string> + <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Zadejte kód PIN o délce 4–8 číslic."</string> + <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"Minimální délka kódu PUK je 8 číslic."</string> + <string name="kg_invalid_puk" msgid="3638289409676051243">"Znovu zadejte správný kód PUK. Opakovanými pokusy SIM kartu trvale deaktivujete."</string> + <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"Kódy PIN se neshodují."</string> + <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Příliš mnoho pokusů o nakreslení gesta"</string> + <string name="kg_login_instructions" msgid="1100551261265506448">"Chcete-li telefon odemknout, přihlaste se pomocí svého účtu Google."</string> + <string name="kg_login_username_hint" msgid="5718534272070920364">"Uživatelské jméno (e-mail)"</string> + <string name="kg_login_password_hint" msgid="9057289103827298549">"Heslo"</string> + <string name="kg_login_submit_button" msgid="5355904582674054702">"Přihlásit se"</string> + <string name="kg_login_invalid_input" msgid="5754664119319872197">"Neplatné uživatelské jméno nebo heslo."</string> + <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Zapomněli jste uživatelské jméno nebo heslo?"\n"Přejděte na stránku "<b>"google.com/accounts/recovery"</b>"."</string> + <string name="kg_login_checking_password" msgid="1052685197710252395">"Kontrola účtu…"</string> + <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Již <xliff:g id="NUMBER_0">%d</xliff:g>krát jste zadali nesprávný kód PIN. "\n\n"Zkuste to znovu za <xliff:g id="NUMBER_1">%d</xliff:g> s."</string> + <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Již <xliff:g id="NUMBER_0">%d</xliff:g>krát jste nesprávně zadali heslo. "\n\n"Zkuste to znovu za <xliff:g id="NUMBER_1">%d</xliff:g> s."</string> + <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Již <xliff:g id="NUMBER_0">%d</xliff:g>krát jste zadali nesprávné bezpečnostní gesto. "\n\n"Zkuste to znovu za <xliff:g id="NUMBER_1">%d</xliff:g> s."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"Již jste se <xliff:g id="NUMBER_0">%d</xliff:g>krát pokusili odemknout tablet nesprávným způsobem. Po <xliff:g id="NUMBER_1">%d</xliff:g> dalších neúspěšných pokusech se v tabletu obnoví tovární nastavení a veškerá uživatelská data budou ztracena."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"Již jste se <xliff:g id="NUMBER_0">%d</xliff:g>krát pokusili odemknout telefon nesprávným způsobem. Po <xliff:g id="NUMBER_1">%d</xliff:g> dalších neúspěšných pokusech se v telefonu obnoví tovární nastavení a veškerá uživatelská data budou ztracena."</string> + <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"Již jste se <xliff:g id="NUMBER">%d</xliff:g>krát pokusili odemknout tablet nesprávným způsobem. V tabletu se nyní obnoví výchozí tovární nastavení."</string> + <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"Již jste se <xliff:g id="NUMBER">%d</xliff:g>krát pokusili odemknout telefon nesprávným způsobem. V telefonu se nyní obnoví výchozí tovární nastavení."</string> + <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Již <xliff:g id="NUMBER_0">%d</xliff:g>krát jste nesprávně nakreslili své heslo odemknutí. Po <xliff:g id="NUMBER_1">%d</xliff:g>dalších neúspěšných pokusech budete požádáni o odemčení tabletu pomocí e-mailového účtu."\n\n" Zkuste to znovu za <xliff:g id="NUMBER_2">%d</xliff:g> s."</string> + <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Již <xliff:g id="NUMBER_0">%d</xliff:g>krát jste nesprávně nakreslili své heslo odemknutí. Po <xliff:g id="NUMBER_1">%d</xliff:g> dalších neúspěšných pokusech budete požádáni o odemčení telefonu pomocí e-mailového účtu."\n\n" Zkuste to znovu za <xliff:g id="NUMBER_2">%d</xliff:g> s."</string> + <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" – "</string> + <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Odebrat"</string> + <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Tlačítko Předchozí stopa"</string> + <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Tlačítko Další stopa"</string> + <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Tlačítko Pozastavit"</string> + <string name="keyguard_transport_play_description" msgid="2924628863741150956">"Tlačítko Přehrát"</string> + <string name="keyguard_transport_stop_description" msgid="3084179324810575787">"Tlačítko Zastavit"</string> + <string name="keyguard_carrier_default" msgid="8700650403054042153">"Žádný signál."</string> +</resources> diff --git a/packages/Keyguard/res/values-da/activitystrings.xml b/packages/Keyguard/res/values-da/activitystrings.xml new file mode 100644 index 0000000..af07ba5 --- /dev/null +++ b/packages/Keyguard/res/values-da/activitystrings.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string> + <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string> + <string name="none_menu_item" msgid="6156747285687551424">"Ingen sikkerhed"</string> + <string name="pin_menu_item" msgid="1179756433268962311">"Pinkode"</string> + <string name="password_menu_item" msgid="1959980499662153160">"Adgangskode"</string> + <string name="pattern_menu_item" msgid="2987798152175140249">"Mønster"</string> + <string name="sim_pin_menu_item" msgid="3962286639645084880">"Pinkode til SIM-kort"</string> + <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK-kode til SIM-kort"</string> + <string name="add_widget_item" msgid="279702152366857415">"Vælg widget..."</string> + <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string> + <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string> + <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string> + <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string> +</resources> diff --git a/packages/Keyguard/res/values-da/strings.xml b/packages/Keyguard/res/values-da/strings.xml new file mode 100644 index 0000000..4a36c93 --- /dev/null +++ b/packages/Keyguard/res/values-da/strings.xml @@ -0,0 +1,138 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Indtast pinkode"</string> + <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Indtast PUK- og pinkode"</string> + <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK-kode"</string> + <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Ny pinkode"</string> + <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Tryk for at angive adgangskode"</font></string> + <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Indtast adgangskoden for at låse op"</string> + <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Indtast pinkode for at låse op"</string> + <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"Forkert pinkode."</string> + <string name="keyguard_label_text" msgid="861796461028298424">"Tryk på Menu og dernæst på 0 for at låse op."</string> + <string name="faceunlock_multiple_failures" msgid="754137583022792429">"Det maksimale antal forsøg på at bruge Ansigtslås er overskredet"</string> + <string name="keyguard_charged" msgid="3272223906073492454">"Opladet"</string> + <string name="keyguard_plugged_in" msgid="8117572000639998388">"Oplader, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string> + <string name="keyguard_low_battery" msgid="8143808018719173859">"Tilslut din oplader."</string> + <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Tryk på Menu for at låse op."</string> + <string name="keyguard_network_locked_message" msgid="9169717779058037168">"Netværket er låst"</string> + <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"Intet SIM-kort"</string> + <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"Der er ikke noget SIM-kort i tabletten."</string> + <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"Der er ikke noget SIM-kort i telefonen."</string> + <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"Indsæt et SIM-kort."</string> + <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"SIM-kortet mangler eller kan ikke læses. Indsæt et SIM-kort."</string> + <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"Ubrugeligt SIM-kort."</string> + <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"Dit SIM-kort er blevet permanent deaktiveret."\n"Kontakt din tjenesteudbyder for at få et nyt SIM-kort."</string> + <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM-kortet er låst."</string> + <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM-kort er låst med PUK-koden."</string> + <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"SIM-kortet låses op…"</string> + <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. Widget %2$d af %3$d."</string> + <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"Tilføj widget."</string> + <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"Tom"</string> + <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"Oplåsningsområdet er udvidet."</string> + <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"Oplåsningsområdet er skjult."</string> + <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"Widget til <xliff:g id="WIDGET_INDEX">%1$s</xliff:g>."</string> + <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"Brugervælger"</string> + <string name="keyguard_accessibility_status" msgid="8008264603935930611">"Status"</string> + <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"Kamera"</string> + <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"Mediekontrolelementer"</string> + <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"Omrokering af widgets er påbegyndt."</string> + <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"Omrokering af widgets er afsluttet."</string> + <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"Widgetten <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> er slettet."</string> + <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"Udvid oplåsningsområdet."</string> + <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"Lås op ved at stryge."</string> + <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Lås op med mønster."</string> + <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Lås op med ansigt."</string> + <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Lås op med pinkode."</string> + <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Lås op med adgangskode."</string> + <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Mønsterområde."</string> + <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Strygeområde."</string> + <string name="keyguard_accessibility_transport_prev_description" msgid="1337286538318543555">"Knap til forrige nummer"</string> + <string name="keyguard_accessibility_transport_next_description" msgid="7073928300444909320">"Knap til næste nummer"</string> + <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Pause-knap"</string> + <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Afspil-knap"</string> + <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Stop-knap"</string> + <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string> + <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string> + <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string> + <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string> + <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Annuller"</string> + <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Slet"</string> + <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Udført"</string> + <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Ændring af tilstand"</string> + <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string> + <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Angiv"</string> + <string name="description_target_unlock" msgid="2228524900439801453">"Lås op"</string> + <string name="description_target_camera" msgid="969071997552486814">"Kamera"</string> + <string name="description_target_silent" msgid="893551287746522182">"Lydløs"</string> + <string name="description_target_soundon" msgid="30052466675500172">"Lyd slået til"</string> + <string name="description_target_search" msgid="3091587249776033139">"Søgning"</string> + <string name="description_direction_up" msgid="7169032478259485180">"Glid op for at <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_down" msgid="5087739728639014595">"Glid ned for at <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_left" msgid="7207478719805562165">"Glid til venstre for at <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_right" msgid="8034433242579600980">"Glid til højre for at <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="user_switched" msgid="3768006783166984410">"Nuværende bruger <xliff:g id="NAME">%1$s</xliff:g>."</string> + <string name="kg_emergency_call_label" msgid="684946192523830531">"Nødopkald"</string> + <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Glemt mønster"</string> + <string name="kg_wrong_pattern" msgid="1850806070801358830">"Forkert mønster"</string> + <string name="kg_wrong_password" msgid="2333281762128113157">"Forkert adgangskode"</string> + <string name="kg_wrong_pin" msgid="1131306510833563801">"Forkert pinkode"</string> + <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"Prøv igen om <xliff:g id="NUMBER">%d</xliff:g> sekunder."</string> + <string name="kg_pattern_instructions" msgid="398978611683075868">"Tegn dit mønster"</string> + <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Indtast pinkode til SIM"</string> + <string name="kg_pin_instructions" msgid="2377242233495111557">"Indtast pinkode"</string> + <string name="kg_password_instructions" msgid="5753646556186936819">"Angiv adgangskode"</string> + <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"SIM-kortet er nu deaktiveret. Indtast PUK-koden for at fortsætte. Kontakt mobiloperatøren for at få flere oplysninger."</string> + <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Indtast den ønskede pinkode"</string> + <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Bekræft den ønskede pinkode"</string> + <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"SIM-kortet låses op…"</string> + <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Forkert pinkode."</string> + <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Indtast en pinkode på mellem 4 og 8 tal."</string> + <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK-koden skal være på 8 tal eller mere."</string> + <string name="kg_invalid_puk" msgid="3638289409676051243">"Indtast den korrekte PUK-kode. Gentagne forsøg vil permanent deaktivere SIM-kortet."</string> + <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"Pinkoderne stemmer ikke overens"</string> + <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"For mange forsøg på at tegne mønstret korrekt"</string> + <string name="kg_login_instructions" msgid="1100551261265506448">"Lås op ved at logge ind med din Google-konto."</string> + <string name="kg_login_username_hint" msgid="5718534272070920364">"Brugernavn (e-mail)"</string> + <string name="kg_login_password_hint" msgid="9057289103827298549">"Adgangskode"</string> + <string name="kg_login_submit_button" msgid="5355904582674054702">"Log ind"</string> + <string name="kg_login_invalid_input" msgid="5754664119319872197">"Ugyldigt brugernavn eller ugyldig adgangskode."</string> + <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Har du glemt dit brugernavn eller din adgangskode?"\n"Gå til "<b>"google.com/accounts/recovery"</b>"."</string> + <string name="kg_login_checking_password" msgid="1052685197710252395">"Kontoen kontrolleres…"</string> + <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Du har indtastet en forkert pinkode <xliff:g id="NUMBER_0">%d</xliff:g> gange. "\n\n"Prøv igen om <xliff:g id="NUMBER_1">%d</xliff:g> sekunder."</string> + <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Du har indtastet din adgangskode forkert <xliff:g id="NUMBER_0">%d</xliff:g> gange. "\n\n"Prøv igen om <xliff:g id="NUMBER_1">%d</xliff:g> sekunder."</string> + <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Du har tegnet dit oplåsningsmønster forkert <xliff:g id="NUMBER_0">%d</xliff:g> gange. "\n\n"Prøv igen om <xliff:g id="NUMBER_1">%d</xliff:g> sekunder."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"Du har forsøgt at låse tabletten op forkert <xliff:g id="NUMBER_0">%d</xliff:g> gange. Efter <xliff:g id="NUMBER_1">%d</xliff:g> yderligere mislykkede forsøg nulstilles tabletten til fabriksindstillingerne, og alle brugerdata mistes."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"Du har forsøgt at låse telefonen op forkert <xliff:g id="NUMBER_0">%d</xliff:g> gange. Efter <xliff:g id="NUMBER_1">%d</xliff:g> yderligere mislykkede forsøg, nulstilles telefonen til fabriksindstillingerne, og alle brugerdata mistes."</string> + <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"Du har forsøgt at låse tabletten op forkert <xliff:g id="NUMBER">%d</xliff:g> gange. Tabletten nulstilles til fabriksindstillingerne."</string> + <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"Du har forsøgt at låse telefonen op forkert <xliff:g id="NUMBER">%d</xliff:g> gange. Telefonen nulstilles til fabriksindstillingerne."</string> + <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Du har tegnet dit oplåsningsmønster forkert <xliff:g id="NUMBER_0">%d</xliff:g> gange. Efter <xliff:g id="NUMBER_1">%d</xliff:g> yderligere mislykkede forsøg vil du blive bedt om at låse din tablet op ved hjælp af en e-mailkonto"\n\n" Prøv igen om <xliff:g id="NUMBER_2">%d</xliff:g> sekunder."</string> + <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Du har tegnet dit oplåsningsmønster forkert <xliff:g id="NUMBER_0">%d</xliff:g> gange. Efter <xliff:g id="NUMBER_1">%d</xliff:g> yderligere mislykkede forsøg til vil du blive bedt om at låse din telefon op ved hjælp af en e-mailkonto."\n\n" Prøv igen om <xliff:g id="NUMBER_2">%d</xliff:g> sekunder."</string> + <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" – "</string> + <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Fjern"</string> + <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Knap til forrige nummer"</string> + <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Knap til næste nummer"</string> + <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Pause-knap"</string> + <string name="keyguard_transport_play_description" msgid="2924628863741150956">"Afspil-knap"</string> + <string name="keyguard_transport_stop_description" msgid="3084179324810575787">"Stop-knap"</string> + <string name="keyguard_carrier_default" msgid="8700650403054042153">"Ingen dækning."</string> +</resources> diff --git a/packages/Keyguard/res/values-de/activitystrings.xml b/packages/Keyguard/res/values-de/activitystrings.xml new file mode 100644 index 0000000..d8e9272 --- /dev/null +++ b/packages/Keyguard/res/values-de/activitystrings.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string> + <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string> + <string name="none_menu_item" msgid="6156747285687551424">"Keine Sicherheit"</string> + <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string> + <string name="password_menu_item" msgid="1959980499662153160">"Passwort"</string> + <string name="pattern_menu_item" msgid="2987798152175140249">"Muster"</string> + <string name="sim_pin_menu_item" msgid="3962286639645084880">"PIN für SIM-Karte"</string> + <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK für SIM-Karte"</string> + <string name="add_widget_item" msgid="279702152366857415">"Widget auswählen..."</string> + <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string> + <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string> + <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string> + <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string> +</resources> diff --git a/packages/Keyguard/res/values-de/strings.xml b/packages/Keyguard/res/values-de/strings.xml new file mode 100644 index 0000000..ad4f8ab --- /dev/null +++ b/packages/Keyguard/res/values-de/strings.xml @@ -0,0 +1,138 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"PIN-Code eingeben"</string> + <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"PUK und neuen PIN-Code eingeben"</string> + <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK-Code"</string> + <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Neuer PIN-Code"</string> + <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Zur Passworteingabe berühren"</font></string> + <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Passwort zum Entsperren eingeben"</string> + <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"PIN zum Entsperren eingeben"</string> + <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"Falscher PIN-Code"</string> + <string name="keyguard_label_text" msgid="861796461028298424">"Drücken Sie zum Entsperren die Menütaste und dann auf \"0\"."</string> + <string name="faceunlock_multiple_failures" msgid="754137583022792429">"Die maximal zulässige Anzahl an Face Unlock-Versuchen wurde überschritten."</string> + <string name="keyguard_charged" msgid="3272223906073492454">"Aufgeladen"</string> + <string name="keyguard_plugged_in" msgid="8117572000639998388">"Akku wird aufgeladen (<xliff:g id="NUMBER">%d</xliff:g> <xliff:g id="PERCENT">%%</xliff:g>)"</string> + <string name="keyguard_low_battery" msgid="8143808018719173859">"Bitte Ladegerät anschließen"</string> + <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Zum Entsperren die Menütaste drücken"</string> + <string name="keyguard_network_locked_message" msgid="9169717779058037168">"Netzwerk gesperrt"</string> + <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"Keine SIM-Karte"</string> + <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"Keine SIM-Karte im Tablet"</string> + <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"Keine SIM-Karte im Telefon"</string> + <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"Legen Sie eine SIM-Karte ein."</string> + <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"SIM-Karte fehlt oder ist nicht lesbar. Bitte legen Sie eine SIM-Karte ein."</string> + <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"SIM-Karte unbrauchbar"</string> + <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"Ihre SIM-Karte wurde dauerhaft deaktiviert."\n" Wenden Sie sich an Ihren Mobilfunkanbieter, um eine andere SIM-Karte zu erhalten."</string> + <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM-Karte ist gesperrt."</string> + <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM-Karte ist gesperrt. PUK-Eingabe erforderlich."</string> + <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"SIM-Karte wird entsperrt…"</string> + <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. Widget %2$d von %3$d."</string> + <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"Widget hinzufügen"</string> + <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"Leer"</string> + <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"Entsperr-Bereich maximiert"</string> + <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"Entsperr-Bereich mminimiert"</string> + <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"Widget <xliff:g id="WIDGET_INDEX">%1$s</xliff:g>"</string> + <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"Nutzerauswahl"</string> + <string name="keyguard_accessibility_status" msgid="8008264603935930611">"Status"</string> + <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"Kamera"</string> + <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"Mediensteuerelemente"</string> + <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"Neuordnung der Widgets gestartet"</string> + <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"Neuordnung der Widgets abgeschlossen"</string> + <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"Widget <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> gelöscht"</string> + <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"Entsperr-Bereich maximieren"</string> + <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"Entsperrung mit Fingerbewegung"</string> + <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Entsperrung mit Muster"</string> + <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Face Unlock"</string> + <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Entsperrung mit PIN"</string> + <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Entsperrung mit Passwort"</string> + <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Bereich für Muster"</string> + <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Bereich für Fingerbewegung"</string> + <string name="keyguard_accessibility_transport_prev_description" msgid="1337286538318543555">"Schaltfläche für vorherigen Titel"</string> + <string name="keyguard_accessibility_transport_next_description" msgid="7073928300444909320">"Schaltfläche für nächsten Titel"</string> + <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Schaltfläche für Pause"</string> + <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Schaltfläche für Wiedergabe"</string> + <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Schaltfläche für Stopp"</string> + <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string> + <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string> + <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string> + <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string> + <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Abbrechen"</string> + <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Löschen"</string> + <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Fertig"</string> + <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Modusänderung"</string> + <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Umschalttaste"</string> + <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Eingabetaste"</string> + <string name="description_target_unlock" msgid="2228524900439801453">"Entsperren"</string> + <string name="description_target_camera" msgid="969071997552486814">"Kamera"</string> + <string name="description_target_silent" msgid="893551287746522182">"Lautlos"</string> + <string name="description_target_soundon" msgid="30052466675500172">"Ton ein"</string> + <string name="description_target_search" msgid="3091587249776033139">"Suche"</string> + <string name="description_direction_up" msgid="7169032478259485180">"Zum <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> nach oben schieben"</string> + <string name="description_direction_down" msgid="5087739728639014595">"Zum <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> nach unten schieben"</string> + <string name="description_direction_left" msgid="7207478719805562165">"Zum <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> nach links schieben"</string> + <string name="description_direction_right" msgid="8034433242579600980">"Zum <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> nach rechts schieben"</string> + <string name="user_switched" msgid="3768006783166984410">"Aktueller Nutzer <xliff:g id="NAME">%1$s</xliff:g>"</string> + <string name="kg_emergency_call_label" msgid="684946192523830531">"Notruf"</string> + <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Muster vergessen"</string> + <string name="kg_wrong_pattern" msgid="1850806070801358830">"Falsches Muster"</string> + <string name="kg_wrong_password" msgid="2333281762128113157">"Falsches Passwort"</string> + <string name="kg_wrong_pin" msgid="1131306510833563801">"Falsche PIN"</string> + <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"Versuchen Sie es in <xliff:g id="NUMBER">%d</xliff:g> Sekunden erneut."</string> + <string name="kg_pattern_instructions" msgid="398978611683075868">"Muster zeichnen"</string> + <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"SIM-PIN eingeben"</string> + <string name="kg_pin_instructions" msgid="2377242233495111557">"PIN eingeben"</string> + <string name="kg_password_instructions" msgid="5753646556186936819">"Passwort eingeben"</string> + <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"Die SIM-Karte ist jetzt deaktiviert. Geben Sie den PUK-Code ein, um fortzufahren. Weitere Informationen erhalten Sie von Ihrem Mobilfunkanbieter."</string> + <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Gewünschten PIN-Code eingeben"</string> + <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Gewünschten PIN-Code bestätigen"</string> + <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"SIM-Karte wird entsperrt…"</string> + <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Falscher PIN-Code"</string> + <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Geben Sie eine 4- bis 8-stellige PIN ein."</string> + <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"Der PUK-Code muss mindestens 8 Ziffern betragen."</string> + <string name="kg_invalid_puk" msgid="3638289409676051243">"Geben Sie den richtigen PUK-Code ein. Bei wiederholten Versuchen wird die SIM-Karte dauerhaft deaktiviert."</string> + <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN-Codes stimmen nicht überein"</string> + <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Zu viele Musterversuche"</string> + <string name="kg_login_instructions" msgid="1100551261265506448">"Melden Sie sich zum Entsperren mit Ihrem Google-Konto an."</string> + <string name="kg_login_username_hint" msgid="5718534272070920364">"Nutzername (E-Mail)"</string> + <string name="kg_login_password_hint" msgid="9057289103827298549">"Passwort"</string> + <string name="kg_login_submit_button" msgid="5355904582674054702">"Anmelden"</string> + <string name="kg_login_invalid_input" msgid="5754664119319872197">"Ungültiger Nutzername oder ungültiges Passwort"</string> + <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Nutzernamen oder Passwort vergessen?"\n"Besuchen Sie "<b>"google.com/accounts/recovery"</b>"."</string> + <string name="kg_login_checking_password" msgid="1052685197710252395">"Konto wird geprüft…"</string> + <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Sie haben Ihre PIN <xliff:g id="NUMBER_0">%d</xliff:g>-mal falsch eingegeben."\n\n"Versuchen Sie es in <xliff:g id="NUMBER_1">%d</xliff:g> Sekunden erneut."</string> + <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Sie haben Ihr Passwort <xliff:g id="NUMBER_0">%d</xliff:g>-mal falsch eingegeben."\n\n"Versuchen Sie es in <xliff:g id="NUMBER_1">%d</xliff:g> Sekunden erneut."</string> + <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Sie haben Ihr Entsperrungsmuster <xliff:g id="NUMBER_0">%d</xliff:g>-mal falsch gezeichnet. "\n\n"Versuchen Sie es in <xliff:g id="NUMBER_1">%d</xliff:g> Sekunden erneut."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"Sie haben <xliff:g id="NUMBER_0">%d</xliff:g>-mal erfolglos versucht, das Tablet zu entsperren. Nach <xliff:g id="NUMBER_1">%d</xliff:g> weiteren erfolglosen Versuchen wird das Tablet auf die Werkseinstellungen zurückgesetzt und alle Nutzerdaten gehen verloren."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"Sie haben <xliff:g id="NUMBER_0">%d</xliff:g>-mal erfolglos versucht, das Telefon zu entsperren. Nach <xliff:g id="NUMBER_1">%d</xliff:g> weiteren erfolglosen Versuchen wird das Telefon auf die Werkseinstellungen zurückgesetzt und alle Nutzerdaten gehen verloren."</string> + <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"Sie haben <xliff:g id="NUMBER">%d</xliff:g>-mal erfolglos versucht, das Tablet zu entsperren. Das Tablet wird nun auf die Werkseinstellungen zurückgesetzt."</string> + <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"Sie haben <xliff:g id="NUMBER">%d</xliff:g>-mal erfolglos versucht, das Telefon zu entsperren. Das Telefon wird nun auf die Werkseinstellungen zurückgesetzt."</string> + <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Sie haben Ihr Entsperrungsmuster <xliff:g id="NUMBER_0">%d</xliff:g>-mal falsch gezeichnet. Nach <xliff:g id="NUMBER_1">%d</xliff:g> weiteren erfolglosen Versuchen werden Sie aufgefordert, Ihr Tablet mithilfe eines E-Mail-Kontos zu entsperren."\n\n" Versuchen Sie es in <xliff:g id="NUMBER_2">%d</xliff:g> Sekunden erneut."</string> + <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Sie haben Ihr Entsperrungsmuster <xliff:g id="NUMBER_0">%d</xliff:g>-mal falsch gezeichnet. Nach <xliff:g id="NUMBER_1">%d</xliff:g> weiteren erfolglosen Versuchen werden Sie aufgefordert, Ihr Telefon mithilfe eines E-Mail-Kontos zu entsperren."\n\n" Versuchen Sie es in <xliff:g id="NUMBER_2">%d</xliff:g> Sekunden erneut."</string> + <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" – "</string> + <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Entfernen"</string> + <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Schaltfläche für vorherigen Titel"</string> + <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Schaltfläche für nächsten Titel"</string> + <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Schaltfläche für Pause"</string> + <string name="keyguard_transport_play_description" msgid="2924628863741150956">"Schaltfläche für Wiedergabe"</string> + <string name="keyguard_transport_stop_description" msgid="3084179324810575787">"Schaltfläche für Stopp"</string> + <string name="keyguard_carrier_default" msgid="8700650403054042153">"Kein Dienst"</string> +</resources> diff --git a/packages/Keyguard/res/values-el/activitystrings.xml b/packages/Keyguard/res/values-el/activitystrings.xml new file mode 100644 index 0000000..3941f4f --- /dev/null +++ b/packages/Keyguard/res/values-el/activitystrings.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string> + <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string> + <string name="none_menu_item" msgid="6156747285687551424">"Χωρίς ασφάλεια"</string> + <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string> + <string name="password_menu_item" msgid="1959980499662153160">"Κωδικός πρόσβασης"</string> + <string name="pattern_menu_item" msgid="2987798152175140249">"Μοτίβο"</string> + <string name="sim_pin_menu_item" msgid="3962286639645084880">"Κωδικός PIN κάρτας SIM"</string> + <string name="sim_puk_menu_item" msgid="6190044133008392974">"Κωδικός PUK κάρτας SIM"</string> + <string name="add_widget_item" msgid="279702152366857415">"Επιλογή γραφικού στοιχείου…"</string> + <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string> + <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string> + <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string> + <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string> +</resources> diff --git a/packages/Keyguard/res/values-el/strings.xml b/packages/Keyguard/res/values-el/strings.xml new file mode 100644 index 0000000..4069b9e --- /dev/null +++ b/packages/Keyguard/res/values-el/strings.xml @@ -0,0 +1,138 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Πληκτρολογήστε τον κωδικό αριθμό PIN"</string> + <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Πληκτρολογήστε τον κωδικό PUK και τον νέο κωδικό PIN"</string> + <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"Κωδικός PUK"</string> + <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Νέος κωδικός PIN"</string> + <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Αγγίξτε για εισαγ. κωδ. πρόσβ."</font></string> + <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Πληκτρολογήστε τον κωδικό πρόσβασης για ξεκλείδωμα"</string> + <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Πληκτρολογήστε τον αριθμό PIN για ξεκλείδωμα"</string> + <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"Εσφαλμένος κωδικός PIN."</string> + <string name="keyguard_label_text" msgid="861796461028298424">"Για ξεκλείδωμα, πατήστε το πλήκτρο Menu και, στη συνέχεια, το πλήκτρο 0."</string> + <string name="faceunlock_multiple_failures" msgid="754137583022792429">"Έγινε υπέρβαση του μέγιστου αριθμού προσπαθειών Face Unlock"</string> + <string name="keyguard_charged" msgid="3272223906073492454">"Φορτίστηκε"</string> + <string name="keyguard_plugged_in" msgid="8117572000639998388">"Φόρτιση, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string> + <string name="keyguard_low_battery" msgid="8143808018719173859">"Συνδέστε τον φορτιστή."</string> + <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Πατήστε \"Μενού\" για ξεκλείδωμα."</string> + <string name="keyguard_network_locked_message" msgid="9169717779058037168">"Το δίκτυο κλειδώθηκε"</string> + <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"Δεν υπάρχει κάρτα SIM"</string> + <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"Δεν υπάρχει κάρτα SIM στο tablet."</string> + <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"Δεν υπάρχει κάρτα SIM στο τηλέφωνο."</string> + <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"Τοποθετήστε μια κάρτα SIM."</string> + <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"Η κάρτα SIM δεν υπάρχει ή δεν είναι δυνατή η ανάγνωσή της. Τοποθετήστε μια κάρτα SIM."</string> + <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"Η κάρτα SIM δεν μπορεί να χρησιμοποιηθεί."</string> + <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"Η κάρτα SIM έχει απενεργοποιηθεί οριστικά."\n" Επικοινωνήστε με τον παροχέα υπηρεσιών ασύρματου δικτύου για να λάβετε μια νέα κάρτα SIM."</string> + <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"Η κάρτα SIM είναι κλειδωμένη."</string> + <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"Η κάρτα SIM είναι κλειδωμένη με κωδικό PUK."</string> + <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Ξεκλείδωμα κάρτας SIM…"</string> + <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. Γραφικό στοιχείο %2$d από %3$d."</string> + <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"Προσθήκη γραφικού στοιχείου"</string> + <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"Κενή"</string> + <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"Ανάπτυξη της περιοχής ξεκλειδώματος."</string> + <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"Σύμπτυξη της περιοχής ξεκλειδώματος."</string> + <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"Γραφικό στοιχείο <xliff:g id="WIDGET_INDEX">%1$s</xliff:g>."</string> + <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"Επιλογέας χρήστη"</string> + <string name="keyguard_accessibility_status" msgid="8008264603935930611">"Κατάσταση"</string> + <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"Φωτογραφική μηχανή"</string> + <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"Στοιχεία ελέγχου μέσων"</string> + <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"Έχει ξεκινήσει η αναδιάταξη των γραφικών στοιχείων."</string> + <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"Έχει ολοκληρωθεί η αναδιάταξη των γραφικών στοιχείων."</string> + <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"Το γραφικό στοιχείο <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> έχει διαγραφεί."</string> + <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"Ανάπτυξη περιοχής ξεκλειδώματος."</string> + <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"Ξεκλείδωμα ολίσθησης."</string> + <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Ξεκλείδωμα μοτίβου."</string> + <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Face unlock."</string> + <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Ξεκλείδωμα κωδικού ασφαλείας"</string> + <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Ξεκλείδωμα κωδικού πρόσβασης."</string> + <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Περιοχή μοτίβου."</string> + <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Περιοχή ολίσθησης"</string> + <string name="keyguard_accessibility_transport_prev_description" msgid="1337286538318543555">"Κουμπί προηγούμενου κομματιού"</string> + <string name="keyguard_accessibility_transport_next_description" msgid="7073928300444909320">"Κουμπί επόμενου κομματιού"</string> + <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Κουμπί παύσης"</string> + <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Κουμπί αναπαραγωγής"</string> + <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Κουμπί διακοπής"</string> + <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string> + <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ΑΒΓ"</string> + <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string> + <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string> + <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Ακύρωση"</string> + <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Διαγραφή"</string> + <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Τέλος"</string> + <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Αλλαγή τρόπου"</string> + <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string> + <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string> + <string name="description_target_unlock" msgid="2228524900439801453">"Ξεκλείδωμα"</string> + <string name="description_target_camera" msgid="969071997552486814">"Φωτογραφική μηχανή"</string> + <string name="description_target_silent" msgid="893551287746522182">"Αθόρυβο"</string> + <string name="description_target_soundon" msgid="30052466675500172">"Ενεργοποίηση ήχου"</string> + <string name="description_target_search" msgid="3091587249776033139">"Αναζήτηση"</string> + <string name="description_direction_up" msgid="7169032478259485180">"Κύλιση προς τα επάνω για <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_down" msgid="5087739728639014595">"Κύλιση προς τα κάτω για <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_left" msgid="7207478719805562165">"Κύλιση προς τα αριστερά για <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_right" msgid="8034433242579600980">"Κύλιση προς τα δεξιά για <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="user_switched" msgid="3768006783166984410">"Τρέχων χρήστης <xliff:g id="NAME">%1$s</xliff:g>."</string> + <string name="kg_emergency_call_label" msgid="684946192523830531">"Κλήσεις επείγουσας ανάγκης"</string> + <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Ξεχάσατε το μοτίβο"</string> + <string name="kg_wrong_pattern" msgid="1850806070801358830">"Εσφαλμένο μοτίβο"</string> + <string name="kg_wrong_password" msgid="2333281762128113157">"Εσφαλμένος κωδικός πρόσβασης"</string> + <string name="kg_wrong_pin" msgid="1131306510833563801">"Εσφαλμένος κωδικός PIN"</string> + <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"Δοκιμάστε ξανά σε <xliff:g id="NUMBER">%d</xliff:g> δευτερόλεπτα."</string> + <string name="kg_pattern_instructions" msgid="398978611683075868">"Σχεδιάστε το μοτίβο σας"</string> + <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Εισαγωγή PIN SIM"</string> + <string name="kg_pin_instructions" msgid="2377242233495111557">"Πληκτρολογήστε το PIN"</string> + <string name="kg_password_instructions" msgid="5753646556186936819">"Εισαγάγετε κωδικό πρόσβασης"</string> + <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"Η κάρτα SIM είναι απενεργοποιημένη αυτή τη στιγμή. Εισαγάγετε τον κωδικό PUK για να συνεχίσετε. Επικοινωνήστε με την εταιρεία κινητής τηλεφωνίας σας για λεπτομέρειες."</string> + <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Εισαγάγετε τον απαιτούμενο κωδικό PIN"</string> + <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Επιβεβαιώστε τον απαιτούμενο κωδικό PIN"</string> + <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Ξεκλείδωμα κάρτας SIM..."</string> + <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Εσφαλμένος κωδικός PIN."</string> + <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Πληκτρολογήστε έναν αριθμό PIN που να αποτελείται από 4 έως 8 αριθμούς."</string> + <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"Ο κωδικός PUK θα πρέπει να περιέχει τουλάχιστον 8 αριθμούς."</string> + <string name="kg_invalid_puk" msgid="3638289409676051243">"Εισαγάγετε ξανά τον κωδικό PUK. Οι επαναλαμβανόμενες προσπάθειες θα απενεργοποιήσουν οριστικά την κάρτα SIM."</string> + <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"Δεν υπάρχει αντιστοιχία των κωδικών PIN"</string> + <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Πάρα πολλές προσπάθειες μοτίβου"</string> + <string name="kg_login_instructions" msgid="1100551261265506448">"Για ξεκλείδωμα, συνδεθείτε με τον λογαριασμό σας Google."</string> + <string name="kg_login_username_hint" msgid="5718534272070920364">"Όνομα χρήστη (διεύθυνση ηλεκτρονικού ταχυδρομείου)"</string> + <string name="kg_login_password_hint" msgid="9057289103827298549">"Κωδικός πρόσβασης"</string> + <string name="kg_login_submit_button" msgid="5355904582674054702">"Σύνδεση"</string> + <string name="kg_login_invalid_input" msgid="5754664119319872197">"Μη έγκυρο όνομα χρήστη ή κωδικός πρόσβασης."</string> + <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Ξεχάσατε το όνομα χρήστη ή τον κωδικό πρόσβασής σας;"\n"Επισκεφτείτε τη διεύθυνση "<b>"google.com/accounts/recovery"</b>"."</string> + <string name="kg_login_checking_password" msgid="1052685197710252395">"Έλεγχος λογαριασμού…"</string> + <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Έχετε πληκτρολογήσει εσφαλμένα τον κωδικό σας PIN <xliff:g id="NUMBER_0">%d</xliff:g> φορές. "\n\n"Δοκιμάστε ξανά σε <xliff:g id="NUMBER_1">%d</xliff:g> δευτερόλεπτα."</string> + <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Έχετε πληκτρολογήσει τον κωδικό πρόσβασης εσφαλμένα <xliff:g id="NUMBER_0">%d</xliff:g> φορές. "\n\n"Δοκιμάστε ξανά σε <xliff:g id="NUMBER_1">%d</xliff:g> δευτερόλεπτα."</string> + <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Σχεδιάσατε εσφαλμένα το μοτίβο ξεκλειδώματος <xliff:g id="NUMBER_0">%d</xliff:g> φορές. "\n\n"Δοκιμάστε ξανά σε <xliff:g id="NUMBER_1">%d</xliff:g> δευτερόλετπα."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"Προσπαθήσατε να ξεκλειδώσετε εσφαλμένα το tablet <xliff:g id="NUMBER_0">%d</xliff:g> φορές. Μετά από <xliff:g id="NUMBER_1">%d</xliff:g> προσπάθειες, το tablet θα επαναφερθεί στις εργοστασιακές ρυθμίσεις και όλα τα δεδομένα χρήστη θα χαθούν."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"Προσπαθήσατε να ξεκλειδώσετε εσφαλμένα το τηλέφωνο <xliff:g id="NUMBER_0">%d</xliff:g> φορές. Μετά από <xliff:g id="NUMBER_1">%d</xliff:g> προσπάθειες, το τηλέφωνο θα επαναφερθεί στις εργοστασιακές ρυθμίσεις και όλα τα δεδομένα χρήστη θα χαθούν."</string> + <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"Προσπαθήσατε να ξεκλειδώσετε εσφαλμένα το tablet <xliff:g id="NUMBER">%d</xliff:g> φορές. Το tablet θα επαναφερθεί στις εργοστασιακές ρυθμίσεις."</string> + <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"Προσπαθήσατε να ξεκλειδώσετε εσφαλμένα το τηλέφωνο <xliff:g id="NUMBER">%d</xliff:g> φορές. Το τηλέφωνο θα επαναφερθεί στις εργοστασιακές ρυθμίσεις."</string> + <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Σχεδιάσατε το μοτίβο ξεκλειδώματος εσφαλμένα <xliff:g id="NUMBER_0">%d</xliff:g> φορές. Μετά από <xliff:g id="NUMBER_1">%d</xliff:g> ανεπιτυχείς προσπάθειες ακόμη, θα σας ζητηθεί να ξεκλειδώσετε το tablet σας με τη χρήση ενός λογαριασμού ηλεκτρονικού ταχυδρομείου."\n\n" Δοκιμάστε να συνδεθείτε ξανά σε <xliff:g id="NUMBER_2">%d</xliff:g> δευτερόλεπτα."</string> + <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Σχεδιάσατε το μοτίβο ξεκλειδώματος εσφαλμένα <xliff:g id="NUMBER_0">%d</xliff:g> φορές. Μετά από <xliff:g id="NUMBER_1">%d</xliff:g> ανεπιτυχείς προσπάθειες ακόμη, θα σας ζητηθεί να ξεκλειδώσετε το τηλέφωνό σας με τη χρήση ενός λογαριασμού ηλεκτρονικού ταχυδρομείου."\n\n" Δοκιμάστε ξανά σε <xliff:g id="NUMBER_2">%d</xliff:g> δευτερόλεπτα."</string> + <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string> + <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Κατάργηση"</string> + <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Κουμπί προηγούμενου κομματιού"</string> + <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Κουμπί επόμενου κομματιού"</string> + <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Κουμπί παύσης"</string> + <string name="keyguard_transport_play_description" msgid="2924628863741150956">"Κουμπί αναπαραγωγής"</string> + <string name="keyguard_transport_stop_description" msgid="3084179324810575787">"Κουμπί διακοπής"</string> + <string name="keyguard_carrier_default" msgid="8700650403054042153">"Καμία υπηρεσία."</string> +</resources> diff --git a/packages/Keyguard/res/values-en-rGB/activitystrings.xml b/packages/Keyguard/res/values-en-rGB/activitystrings.xml new file mode 100644 index 0000000..88e806e --- /dev/null +++ b/packages/Keyguard/res/values-en-rGB/activitystrings.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string> + <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string> + <string name="none_menu_item" msgid="6156747285687551424">"No security"</string> + <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string> + <string name="password_menu_item" msgid="1959980499662153160">"Password"</string> + <string name="pattern_menu_item" msgid="2987798152175140249">"Pattern"</string> + <string name="sim_pin_menu_item" msgid="3962286639645084880">"SIM PIN"</string> + <string name="sim_puk_menu_item" msgid="6190044133008392974">"SIM PUK"</string> + <string name="add_widget_item" msgid="279702152366857415">"Choose widget..."</string> + <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string> + <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string> + <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string> + <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string> +</resources> diff --git a/packages/Keyguard/res/values-en-rGB/strings.xml b/packages/Keyguard/res/values-en-rGB/strings.xml new file mode 100644 index 0000000..d8b8df4 --- /dev/null +++ b/packages/Keyguard/res/values-en-rGB/strings.xml @@ -0,0 +1,138 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Type PIN code"</string> + <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Type PUK and new PIN code"</string> + <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK code"</string> + <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"New PIN Code"</string> + <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Touch to type password"</font></string> + <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Type password to unlock"</string> + <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Type PIN to unlock"</string> + <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"Incorrect PIN code."</string> + <string name="keyguard_label_text" msgid="861796461028298424">"To unlock, press Menu, then 0."</string> + <string name="faceunlock_multiple_failures" msgid="754137583022792429">"Maximum Face Unlock attempts exceeded"</string> + <string name="keyguard_charged" msgid="3272223906073492454">"Charged"</string> + <string name="keyguard_plugged_in" msgid="8117572000639998388">"Charging, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string> + <string name="keyguard_low_battery" msgid="8143808018719173859">"Connect your charger."</string> + <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Press Menu to unlock."</string> + <string name="keyguard_network_locked_message" msgid="9169717779058037168">"Network locked"</string> + <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"No SIM card"</string> + <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"No SIM card in tablet."</string> + <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"No SIM card in phone."</string> + <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"Insert a SIM card."</string> + <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"The SIM card is missing or not readable. Insert a SIM card."</string> + <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"Unusable SIM card."</string> + <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"Your SIM card has been permanently disabled."\n" Contact your wireless service provider for another SIM card."</string> + <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM card is locked."</string> + <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM card is PUK-locked."</string> + <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Unlocking SIM card…"</string> + <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. Widget %2$d of %3$d."</string> + <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"Add widget"</string> + <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"Empty"</string> + <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"Unlock area expanded."</string> + <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"Unlock area collapsed."</string> + <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> widget."</string> + <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"User selector"</string> + <string name="keyguard_accessibility_status" msgid="8008264603935930611">"Status"</string> + <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"Camera"</string> + <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"Media controls"</string> + <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"Widget reordering started."</string> + <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"Widget reordering ended."</string> + <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"Widget <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> deleted."</string> + <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"Expand unlock area."</string> + <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"Slide unlock."</string> + <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Pattern unlock."</string> + <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Face unlock."</string> + <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Pin unlock."</string> + <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Password unlock."</string> + <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Pattern area."</string> + <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Slide area."</string> + <string name="keyguard_accessibility_transport_prev_description" msgid="1337286538318543555">"Previous track button"</string> + <string name="keyguard_accessibility_transport_next_description" msgid="7073928300444909320">"Next track button"</string> + <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Pause button"</string> + <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Play button"</string> + <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Stop button"</string> + <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string> + <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string> + <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string> + <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string> + <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Cancel"</string> + <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Delete"</string> + <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Done"</string> + <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Mode change"</string> + <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string> + <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string> + <string name="description_target_unlock" msgid="2228524900439801453">"Unlock"</string> + <string name="description_target_camera" msgid="969071997552486814">"Camera"</string> + <string name="description_target_silent" msgid="893551287746522182">"Silent"</string> + <string name="description_target_soundon" msgid="30052466675500172">"Sound on"</string> + <string name="description_target_search" msgid="3091587249776033139">"Search"</string> + <string name="description_direction_up" msgid="7169032478259485180">"Slide up for <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_down" msgid="5087739728639014595">"Slide down for <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_left" msgid="7207478719805562165">"Slide left for <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_right" msgid="8034433242579600980">"Slide right for <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="user_switched" msgid="3768006783166984410">"Current user <xliff:g id="NAME">%1$s</xliff:g>."</string> + <string name="kg_emergency_call_label" msgid="684946192523830531">"Emergency call"</string> + <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Forgot Pattern"</string> + <string name="kg_wrong_pattern" msgid="1850806070801358830">"Wrong Pattern"</string> + <string name="kg_wrong_password" msgid="2333281762128113157">"Wrong Password"</string> + <string name="kg_wrong_pin" msgid="1131306510833563801">"Wrong PIN"</string> + <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"Try again in <xliff:g id="NUMBER">%d</xliff:g> seconds."</string> + <string name="kg_pattern_instructions" msgid="398978611683075868">"Draw your pattern"</string> + <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Enter SIM PIN"</string> + <string name="kg_pin_instructions" msgid="2377242233495111557">"Enter PIN"</string> + <string name="kg_password_instructions" msgid="5753646556186936819">"Enter Password"</string> + <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"SIM is now disabled. Enter PUK code to continue. Contact carrier for details."</string> + <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Enter desired PIN code"</string> + <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Confirm desired PIN code"</string> + <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Unlocking SIM card…"</string> + <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Incorrect PIN code."</string> + <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Type a PIN that is 4 to 8 numbers."</string> + <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK code should be 8 numbers or more."</string> + <string name="kg_invalid_puk" msgid="3638289409676051243">"Re-enter the correct PUK code. Repeated attempts will permanently disable the SIM."</string> + <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN codes do not match"</string> + <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Too many pattern attempts"</string> + <string name="kg_login_instructions" msgid="1100551261265506448">"To unlock, sign in with your Google account."</string> + <string name="kg_login_username_hint" msgid="5718534272070920364">"Username (email)"</string> + <string name="kg_login_password_hint" msgid="9057289103827298549">"Password"</string> + <string name="kg_login_submit_button" msgid="5355904582674054702">"Sign in"</string> + <string name="kg_login_invalid_input" msgid="5754664119319872197">"Invalid username or password."</string> + <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Forgot your username or password?"\n"Visit "<b>"google.com/accounts/recovery"</b>"."</string> + <string name="kg_login_checking_password" msgid="1052685197710252395">"Checking account…"</string> + <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"You have incorrectly typed your PIN <xliff:g id="NUMBER_0">%d</xliff:g> times. "\n\n"Try again in <xliff:g id="NUMBER_1">%d</xliff:g> seconds."</string> + <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"You have incorrectly typed your password <xliff:g id="NUMBER_0">%d</xliff:g> times. "\n\n"Try again in <xliff:g id="NUMBER_1">%d</xliff:g> seconds."</string> + <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"You have incorrectly drawn your unlock pattern <xliff:g id="NUMBER_0">%d</xliff:g> times. "\n\n"Try again in <xliff:g id="NUMBER_1">%d</xliff:g> seconds."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"You have incorrectly attempted to unlock the tablet <xliff:g id="NUMBER_0">%d</xliff:g> times. After <xliff:g id="NUMBER_1">%d</xliff:g> more unsuccessful attempts, the tablet will be reset to factory default and all user data will be lost."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"You have incorrectly attempted to unlock the phone <xliff:g id="NUMBER_0">%d</xliff:g> times. After <xliff:g id="NUMBER_1">%d</xliff:g> more unsuccessful attempts, the phone will be reset to factory default and all user data will be lost."</string> + <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"You have incorrectly attempted to unlock the tablet <xliff:g id="NUMBER">%d</xliff:g> times. The tablet will now be reset to factory default."</string> + <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"You have incorrectly attempted to unlock the phone <xliff:g id="NUMBER">%d</xliff:g> times. The phone will now be reset to factory default."</string> + <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"You have incorrectly drawn your unlock pattern <xliff:g id="NUMBER_0">%d</xliff:g> times. After <xliff:g id="NUMBER_1">%d</xliff:g> more unsuccessful attempts, you will be asked to unlock your tablet using an email account."\n\n" Try again in <xliff:g id="NUMBER_2">%d</xliff:g> seconds."</string> + <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"You have incorrectly drawn your unlock pattern <xliff:g id="NUMBER_0">%d</xliff:g> times. After <xliff:g id="NUMBER_1">%d</xliff:g> more unsuccessful attempts, you will be asked to unlock your phone using an email account."\n\n" Try again in <xliff:g id="NUMBER_2">%d</xliff:g> seconds."</string> + <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string> + <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Remove"</string> + <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Previous track button"</string> + <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Next track button"</string> + <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Pause button"</string> + <string name="keyguard_transport_play_description" msgid="2924628863741150956">"Play button"</string> + <string name="keyguard_transport_stop_description" msgid="3084179324810575787">"Stop button"</string> + <string name="keyguard_carrier_default" msgid="8700650403054042153">"No service."</string> +</resources> diff --git a/packages/Keyguard/res/values-es-rUS/activitystrings.xml b/packages/Keyguard/res/values-es-rUS/activitystrings.xml new file mode 100644 index 0000000..20117c4 --- /dev/null +++ b/packages/Keyguard/res/values-es-rUS/activitystrings.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string> + <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string> + <string name="none_menu_item" msgid="6156747285687551424">"Sin seguridad"</string> + <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string> + <string name="password_menu_item" msgid="1959980499662153160">"Contraseña"</string> + <string name="pattern_menu_item" msgid="2987798152175140249">"Patrón"</string> + <string name="sim_pin_menu_item" msgid="3962286639645084880">"PIN de tarjeta SIM"</string> + <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK de tarjeta SIM"</string> + <string name="add_widget_item" msgid="279702152366857415">"Elegir widget..."</string> + <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string> + <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string> + <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string> + <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string> +</resources> diff --git a/packages/Keyguard/res/values-es-rUS/strings.xml b/packages/Keyguard/res/values-es-rUS/strings.xml new file mode 100644 index 0000000..4e1c3cd --- /dev/null +++ b/packages/Keyguard/res/values-es-rUS/strings.xml @@ -0,0 +1,138 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Ingresa el código PIN"</string> + <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Escribe el código PUK y un nuevo código PIN."</string> + <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"Código PUK"</string> + <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Nuevo código PIN"</string> + <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Toca para ingresar la contraseña"</font></string> + <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Ingresar contraseña para desbloquear"</string> + <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Ingresa el PIN para desbloquear"</string> + <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"Código PIN incorrecto"</string> + <string name="keyguard_label_text" msgid="861796461028298424">"Para desbloquear, presiona el menú y luego 0."</string> + <string name="faceunlock_multiple_failures" msgid="754137583022792429">"Se superó el máximo de intentos permitido para el desbloqueo facial del dispositivo."</string> + <string name="keyguard_charged" msgid="3272223906073492454">"Cargada"</string> + <string name="keyguard_plugged_in" msgid="8117572000639998388">"Cargando (<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>)"</string> + <string name="keyguard_low_battery" msgid="8143808018719173859">"Conecta tu cargador."</string> + <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Presiona Menú para desbloquear."</string> + <string name="keyguard_network_locked_message" msgid="9169717779058037168">"Bloqueada para la red"</string> + <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"No se insertó ninguna tarjeta SIM."</string> + <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"No se insertó ninguna tarjeta SIM en la tableta."</string> + <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"No se insertó ninguna tarjeta SIM en el dispositivo."</string> + <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"Inserta una tarjeta SIM."</string> + <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"Falta la tarjeta SIM o esta no se puede leer. Inserta una tarjeta SIM."</string> + <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"Tarjeta SIM inutilizable"</string> + <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"Tu tarjeta SIM se inhabilitó de forma permanente."\n" Comunícate con tu proveedor de servicios inalámbricos para obtener otra tarjeta SIM."</string> + <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"La tarjeta SIM está bloqueada."</string> + <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"La tarjeta SIM está bloqueada por código PUK."</string> + <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Desbloqueando tarjeta SIM…"</string> + <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. Widget %2$d de %3$d"</string> + <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"Agregar widget"</string> + <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"Vacío"</string> + <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"Área desbloqueada expandida."</string> + <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"El área desbloqueada se contrajo."</string> + <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> widget"</string> + <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"Selector de usuarios"</string> + <string name="keyguard_accessibility_status" msgid="8008264603935930611">"Estado"</string> + <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"Cámara"</string> + <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"Controles de medios"</string> + <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"Se comenzaron a reordenar los widgets."</string> + <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"Se terminaron de reordenar los widgets."</string> + <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"Widget <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> eliminado"</string> + <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"Expandir el área desbloqueada"</string> + <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"Desbloqueo por deslizamiento"</string> + <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Desbloqueo por patrón"</string> + <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Desbloqueo facial"</string> + <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Desbloqueo por PIN"</string> + <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Desbloqueo por contraseña"</string> + <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Área de patrón"</string> + <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Área de deslizamiento"</string> + <string name="keyguard_accessibility_transport_prev_description" msgid="1337286538318543555">"Botón de pista anterior"</string> + <string name="keyguard_accessibility_transport_next_description" msgid="7073928300444909320">"Botón de pista siguiente"</string> + <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Botón de pausa"</string> + <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Botón de reproducción"</string> + <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Botón de detención"</string> + <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string> + <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string> + <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string> + <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string> + <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Cancelar"</string> + <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Eliminar"</string> + <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Listo"</string> + <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Cambio de modo"</string> + <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Mayúscula"</string> + <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Ingresar"</string> + <string name="description_target_unlock" msgid="2228524900439801453">"Desbloquear"</string> + <string name="description_target_camera" msgid="969071997552486814">"Cámara"</string> + <string name="description_target_silent" msgid="893551287746522182">"Silencioso"</string> + <string name="description_target_soundon" msgid="30052466675500172">"Sonido activado"</string> + <string name="description_target_search" msgid="3091587249776033139">"Buscar"</string> + <string name="description_direction_up" msgid="7169032478259485180">"Desliza el dedo hacia arriba para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_down" msgid="5087739728639014595">"Desliza el dedo hacia abajo para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_left" msgid="7207478719805562165">"Desliza el dedo hacia la izquierda para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_right" msgid="8034433242579600980">"Desliza el dedo hacia la derecha para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="user_switched" msgid="3768006783166984410">"Usuario actual: <xliff:g id="NAME">%1$s</xliff:g>"</string> + <string name="kg_emergency_call_label" msgid="684946192523830531">"Llamada de emergencia"</string> + <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"¿Olvidaste el patrón?"</string> + <string name="kg_wrong_pattern" msgid="1850806070801358830">"Patrón incorrecto"</string> + <string name="kg_wrong_password" msgid="2333281762128113157">"Contraseña incorrecta"</string> + <string name="kg_wrong_pin" msgid="1131306510833563801">"PIN incorrecto"</string> + <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"Vuelve a intentarlo en <xliff:g id="NUMBER">%d</xliff:g> segundos."</string> + <string name="kg_pattern_instructions" msgid="398978611683075868">"Dibuja tu patrón."</string> + <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Ingresa el PIN de la tarjeta SIM."</string> + <string name="kg_pin_instructions" msgid="2377242233495111557">"Ingresa el PIN."</string> + <string name="kg_password_instructions" msgid="5753646556186936819">"Ingresa tu contraseña."</string> + <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"La tarjeta SIM está inhabilitada. Para continuar, ingresa el código PUK. Si quieres obtener más información, ponte en contacto con el proveedor."</string> + <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Ingresa el código PIN deseado"</string> + <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Confirmar código PIN deseado"</string> + <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Desbloqueando tarjeta SIM…"</string> + <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Código PIN incorrecto"</string> + <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Escribe un PIN que tenga de cuatro a ocho números."</string> + <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"El código PUK debe tener ocho números como mínimo."</string> + <string name="kg_invalid_puk" msgid="3638289409676051243">"Vuelve a ingresar el código PUK correcto. Si ingresas un código incorrecto varias veces, se inhabilitará la tarjeta SIM."</string> + <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"Los códigos PIN no coinciden."</string> + <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Demasiados intentos incorrectos de ingresar el patrón"</string> + <string name="kg_login_instructions" msgid="1100551261265506448">"Para desbloquear, accede con tu cuenta de Google."</string> + <string name="kg_login_username_hint" msgid="5718534272070920364">"Nombre de usuario (correo)"</string> + <string name="kg_login_password_hint" msgid="9057289103827298549">"Contraseña"</string> + <string name="kg_login_submit_button" msgid="5355904582674054702">"Acceder"</string> + <string name="kg_login_invalid_input" msgid="5754664119319872197">"Nombre de usuario o contraseña incorrectos"</string> + <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"¿Olvidaste tu nombre de usuario o contraseña?"\n"Accede a "<b>"google.com/accounts/recovery"</b>"."</string> + <string name="kg_login_checking_password" msgid="1052685197710252395">"Comprobando la cuenta…"</string> + <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Escribiste incorrectamente tu PIN <xliff:g id="NUMBER_0">%d</xliff:g> veces. "\n\n"Vuelve a intentarlo en <xliff:g id="NUMBER_1">%d</xliff:g> segundos."</string> + <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Escribiste incorrectamente tu contraseña <xliff:g id="NUMBER_0">%d</xliff:g> veces. "\n\n"Vuelve a intentarlo en <xliff:g id="NUMBER_1">%d</xliff:g> segundos."</string> + <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Dibujaste incorrectamente tu patrón de desbloqueo <xliff:g id="NUMBER_0">%d</xliff:g> veces. "\n\n"Vuelve a intentarlo en <xliff:g id="NUMBER_1">%d</xliff:g> segundos."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"Intentaste desbloquear la tableta <xliff:g id="NUMBER_0">%d</xliff:g> veces, pero no lo lograste. Puedes intentarlo <xliff:g id="NUMBER_1">%d</xliff:g> veces más antes de que se restablezcan los valores predeterminados de fábrica de la tableta y se pierdan todos los datos del usuario."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"Intentaste desbloquear el dispositivo <xliff:g id="NUMBER_0">%d</xliff:g> veces, pero no lo lograste. Puedes intentarlo <xliff:g id="NUMBER_1">%d</xliff:g> veces más antes de que se restablezcan los valores predeterminados de fábrica del dispositivo y se pierdan todos los datos del usuario."</string> + <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"Intentaste desbloquear la tableta <xliff:g id="NUMBER">%d</xliff:g> veces, pero no lo lograste. Se restablecerán los valores predeterminados de fábrica de la tableta."</string> + <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"Intentaste desbloquear el dispositivo <xliff:g id="NUMBER">%d</xliff:g> veces, pero no lo lograste. Se restablecerán los valores predeterminados de fábrica del dispositivo."</string> + <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Dibujaste incorrectamente tu patrón de desbloqueo <xliff:g id="NUMBER_0">%d</xliff:g> veces. Luego de <xliff:g id="NUMBER_1">%d</xliff:g> intentos incorrectos más, se te solicitará que desbloquees tu tableta mediante el uso de una cuenta de correo."\n\n" Vuelve a intentarlo en <xliff:g id="NUMBER_2">%d</xliff:g> segundos."</string> + <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Dibujaste incorrectamente tu patrón de desbloqueo <xliff:g id="NUMBER_0">%d</xliff:g> veces. Luego de <xliff:g id="NUMBER_1">%d</xliff:g> intentos incorrectos más, se te solicitará que desbloquees tu dispositivo mediante el uso de una cuenta de correo."\n\n" Vuelve a intentarlo en <xliff:g id="NUMBER_2">%d</xliff:g> segundos."</string> + <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string> + <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Eliminar"</string> + <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Botón de pista anterior"</string> + <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Botón de pista siguiente"</string> + <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Botón de pausa"</string> + <string name="keyguard_transport_play_description" msgid="2924628863741150956">"Botón de reproducción"</string> + <string name="keyguard_transport_stop_description" msgid="3084179324810575787">"Botón de detención"</string> + <string name="keyguard_carrier_default" msgid="8700650403054042153">"Sin servicio"</string> +</resources> diff --git a/packages/Keyguard/res/values-es/activitystrings.xml b/packages/Keyguard/res/values-es/activitystrings.xml new file mode 100644 index 0000000..34899cc --- /dev/null +++ b/packages/Keyguard/res/values-es/activitystrings.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string> + <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string> + <string name="none_menu_item" msgid="6156747285687551424">"Sin seguridad"</string> + <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string> + <string name="password_menu_item" msgid="1959980499662153160">"Contraseña"</string> + <string name="pattern_menu_item" msgid="2987798152175140249">"Patrón"</string> + <string name="sim_pin_menu_item" msgid="3962286639645084880">"PIN de tarjeta SIM"</string> + <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK de tarjeta SIM"</string> + <string name="add_widget_item" msgid="279702152366857415">"Seleccionar widget..."</string> + <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string> + <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string> + <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string> + <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string> +</resources> diff --git a/packages/Keyguard/res/values-es/strings.xml b/packages/Keyguard/res/values-es/strings.xml new file mode 100644 index 0000000..4924e9d --- /dev/null +++ b/packages/Keyguard/res/values-es/strings.xml @@ -0,0 +1,138 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Introduce el código PIN."</string> + <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Introduce el código PUK y un nuevo código PIN."</string> + <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"Código PUK"</string> + <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Nuevo código PIN"</string> + <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Toca para introducir contraseña"</font></string> + <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Introduce la contraseña para desbloquear."</string> + <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Introduce el código PIN para desbloquear."</string> + <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"Código PIN incorrecto"</string> + <string name="keyguard_label_text" msgid="861796461028298424">"Para desbloquear el teléfono, pulsa la tecla de menú y, a continuación, pulsa 0."</string> + <string name="faceunlock_multiple_failures" msgid="754137583022792429">"Se ha superado el número máximo de intentos de desbloqueo facial."</string> + <string name="keyguard_charged" msgid="3272223906073492454">"Cargado"</string> + <string name="keyguard_plugged_in" msgid="8117572000639998388">"Cargando (<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>)"</string> + <string name="keyguard_low_battery" msgid="8143808018719173859">"Conecta el cargador."</string> + <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Ve al menú para desbloquear la pantalla."</string> + <string name="keyguard_network_locked_message" msgid="9169717779058037168">"Bloqueada para la red"</string> + <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"Falta la tarjeta SIM."</string> + <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"No se ha insertado ninguna tarjeta SIM en el tablet."</string> + <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"No se ha insertado ninguna tarjeta SIM en el teléfono."</string> + <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"Inserta una tarjeta SIM."</string> + <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"Falta la tarjeta SIM o no se puede leer. Introduce una tarjeta SIM."</string> + <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"Tarjeta SIM inutilizable"</string> + <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"Tu tarjeta SIM se ha inhabilitado permanentemente."\n" Para obtener otra, ponte en contacto con tu proveedor de servicios de telefonía."</string> + <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"La tarjeta SIM está bloqueada."</string> + <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"La tarjeta SIM está bloqueada con el código PUK."</string> + <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Desbloqueando tarjeta SIM…"</string> + <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. Widget %2$d de %3$d"</string> + <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"Añadir widget"</string> + <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"Vacío"</string> + <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"Área de desbloqueo ampliada"</string> + <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"Área de desbloqueo contraída"</string> + <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"Widget de <xliff:g id="WIDGET_INDEX">%1$s</xliff:g>"</string> + <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"Selector de usuarios"</string> + <string name="keyguard_accessibility_status" msgid="8008264603935930611">"Estado"</string> + <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"Cámara"</string> + <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"Controles multimedia"</string> + <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"Se ha empezado a cambiar el orden de los widgets."</string> + <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"Se ha terminado de cambiar el orden de los widgets."</string> + <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"Widget <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> eliminado"</string> + <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"Ampliar área de desbloqueo"</string> + <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"Desbloqueo deslizando el dedo"</string> + <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Desbloqueo por patrón"</string> + <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Desbloqueo facial"</string> + <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Desbloqueo por PIN"</string> + <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Desbloqueo por contraseña"</string> + <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Área de patrón"</string> + <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Área para deslizar"</string> + <string name="keyguard_accessibility_transport_prev_description" msgid="1337286538318543555">"Botón de canción anterior"</string> + <string name="keyguard_accessibility_transport_next_description" msgid="7073928300444909320">"Botón de siguiente canción"</string> + <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Botón de pausa"</string> + <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Botón de reproducción"</string> + <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Botón para detener la reproducción"</string> + <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string> + <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string> + <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string> + <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string> + <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Cancelar"</string> + <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Eliminar"</string> + <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Listo"</string> + <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Cambio de modo"</string> + <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Mayús"</string> + <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Intro"</string> + <string name="description_target_unlock" msgid="2228524900439801453">"Desbloquear"</string> + <string name="description_target_camera" msgid="969071997552486814">"Cámara"</string> + <string name="description_target_silent" msgid="893551287746522182">"Silencio"</string> + <string name="description_target_soundon" msgid="30052466675500172">"Sonido activado"</string> + <string name="description_target_search" msgid="3091587249776033139">"Buscar"</string> + <string name="description_direction_up" msgid="7169032478259485180">"Desliza el dedo hacia arriba para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_down" msgid="5087739728639014595">"Desliza el dedo hacia abajo para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_left" msgid="7207478719805562165">"Desliza el dedo hacia la izquierda para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_right" msgid="8034433242579600980">"Desliza el dedo hacia la derecha para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="user_switched" msgid="3768006783166984410">"Usuario actual: <xliff:g id="NAME">%1$s</xliff:g>"</string> + <string name="kg_emergency_call_label" msgid="684946192523830531">"Llamada de emergencia"</string> + <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"¿Has olvidado el patrón?"</string> + <string name="kg_wrong_pattern" msgid="1850806070801358830">"El patrón es incorrecto."</string> + <string name="kg_wrong_password" msgid="2333281762128113157">"Contraseña incorrecta"</string> + <string name="kg_wrong_pin" msgid="1131306510833563801">"PIN incorrecto"</string> + <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"Inténtalo de nuevo en <xliff:g id="NUMBER">%d</xliff:g> segundos."</string> + <string name="kg_pattern_instructions" msgid="398978611683075868">"Dibuja tu patrón de desbloqueo."</string> + <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Introduce el PIN de la tarjeta SIM."</string> + <string name="kg_pin_instructions" msgid="2377242233495111557">"Introduce el PIN."</string> + <string name="kg_password_instructions" msgid="5753646556186936819">"Escribe tu contraseña."</string> + <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"La tarjeta SIM está inhabilitada. Para continuar, introduce el código PUK. Si quieres obtener más información, ponte en contacto con el operador"</string> + <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Introduce el código PIN deseado"</string> + <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Confirma el código PIN"</string> + <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Desbloqueando tarjeta SIM…"</string> + <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Código PIN incorrecto"</string> + <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Introduce un código PIN con una longitud comprendida entre cuatro y ocho dígitos."</string> + <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"El código PUK debe tener ocho números como mínimo."</string> + <string name="kg_invalid_puk" msgid="3638289409676051243">"Vuelve a introducir el código PUK correcto. Si introduces un código incorrecto varias veces, se inhabilitará la tarjeta SIM."</string> + <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"Los códigos PIN no coinciden."</string> + <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Demasiados intentos incorrectos de crear el patrón"</string> + <string name="kg_login_instructions" msgid="1100551261265506448">"Para desbloquear el teléfono, inicia sesión con tu cuenta de Google."</string> + <string name="kg_login_username_hint" msgid="5718534272070920364">"Nombre de usuario (correo electrónico)"</string> + <string name="kg_login_password_hint" msgid="9057289103827298549">"Contraseña"</string> + <string name="kg_login_submit_button" msgid="5355904582674054702">"Iniciar sesión"</string> + <string name="kg_login_invalid_input" msgid="5754664119319872197">"El nombre de usuario o la contraseña no son válidos."</string> + <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Si has olvidado tu nombre de usuario o tu contraseña,"\n"accede a la página "<b>"google.com/accounts/recovery"</b>"."</string> + <string name="kg_login_checking_password" msgid="1052685197710252395">"Comprobando cuenta…"</string> + <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Has introducido un código PIN incorrecto <xliff:g id="NUMBER_0">%d</xliff:g> veces. "\n\n"Inténtalo de nuevo en <xliff:g id="NUMBER_1">%d</xliff:g> segundos."</string> + <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Has introducido una contraseña incorrecta <xliff:g id="NUMBER_0">%d</xliff:g> veces. "\n\n"Inténtalo de nuevo en <xliff:g id="NUMBER_1">%d</xliff:g> segundos."</string> + <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Has fallado <xliff:g id="NUMBER_0">%d</xliff:g> veces al dibujar tu patrón de desbloqueo. "\n\n"Inténtalo de nuevo en <xliff:g id="NUMBER_1">%d</xliff:g> segundos."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"Has intentado desbloquear el tablet <xliff:g id="NUMBER_0">%d</xliff:g> veces, pero no lo has conseguido. Si fallas otras <xliff:g id="NUMBER_1">%d</xliff:g> veces, se restablecerán los datos de fábrica y se perderán todos los datos del usuario."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"Has intentado desbloquear el teléfono <xliff:g id="NUMBER_0">%d</xliff:g> veces, pero no lo has conseguido. Si fallas otras <xliff:g id="NUMBER_1">%d</xliff:g> veces, se restablecerán los datos de fábrica y se perderán todos los datos del usuario."</string> + <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"Has intentado desbloquear el tablet <xliff:g id="NUMBER">%d</xliff:g> veces, pero no lo has conseguido. Se restablecerán los datos de fábrica del dispositivo."</string> + <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"Has intentado desbloquear el teléfono <xliff:g id="NUMBER">%d</xliff:g> veces, pero no lo has conseguido. Se restablecerán los datos de fábrica del dispositivo."</string> + <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Has fallado <xliff:g id="NUMBER_0">%d</xliff:g> veces al dibujar el patrón de desbloqueo. Si fallas otras <xliff:g id="NUMBER_1">%d</xliff:g> veces, deberás usar una cuenta de correo electrónico para desbloquear el tablet."\n\n" Inténtalo de nuevo en <xliff:g id="NUMBER_2">%d</xliff:g> segundos."</string> + <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Has fallado <xliff:g id="NUMBER_0">%d</xliff:g> veces al dibujar el patrón de desbloqueo. Si fallas otras <xliff:g id="NUMBER_1">%d</xliff:g> veces, deberás usar una cuenta de correo electrónico para desbloquear el teléfono."\n\n" Inténtalo de nuevo en <xliff:g id="NUMBER_2">%d</xliff:g> segundos."</string> + <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string> + <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Eliminar"</string> + <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Botón de canción anterior"</string> + <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Botón de siguiente canción"</string> + <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Botón de pausa"</string> + <string name="keyguard_transport_play_description" msgid="2924628863741150956">"Botón de reproducción"</string> + <string name="keyguard_transport_stop_description" msgid="3084179324810575787">"Botón para detener la reproducción"</string> + <string name="keyguard_carrier_default" msgid="8700650403054042153">"Sin servicio"</string> +</resources> diff --git a/packages/Keyguard/res/values-et/activitystrings.xml b/packages/Keyguard/res/values-et/activitystrings.xml new file mode 100644 index 0000000..eb71afc --- /dev/null +++ b/packages/Keyguard/res/values-et/activitystrings.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string> + <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string> + <string name="none_menu_item" msgid="6156747285687551424">"Turvamata"</string> + <string name="pin_menu_item" msgid="1179756433268962311">"PIN-kood"</string> + <string name="password_menu_item" msgid="1959980499662153160">"Parool"</string> + <string name="pattern_menu_item" msgid="2987798152175140249">"Muster"</string> + <string name="sim_pin_menu_item" msgid="3962286639645084880">"SIM-i PIN-kood"</string> + <string name="sim_puk_menu_item" msgid="6190044133008392974">"SIM-i PUK"</string> + <string name="add_widget_item" msgid="279702152366857415">"Vidina valimine ..."</string> + <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string> + <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string> + <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string> + <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string> +</resources> diff --git a/packages/Keyguard/res/values-et/strings.xml b/packages/Keyguard/res/values-et/strings.xml new file mode 100644 index 0000000..d856c96 --- /dev/null +++ b/packages/Keyguard/res/values-et/strings.xml @@ -0,0 +1,138 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Sisestage PIN-kood"</string> + <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Sisestage PUK-kood ja uus PIN-kood"</string> + <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK-kood"</string> + <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Uus PIN-kood"</string> + <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Puudutage parooli sisestamiseks"</font></string> + <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Avamiseks sisestage parool"</string> + <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Avamiseks sisestage PIN-kood"</string> + <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"Vale PIN-kood."</string> + <string name="keyguard_label_text" msgid="861796461028298424">"Avamiseks vajutage menüüklahvi, seejärel klahvi 0."</string> + <string name="faceunlock_multiple_failures" msgid="754137583022792429">"Maksimaalne teenusega Face Unlock avamise katsete arv on ületatud"</string> + <string name="keyguard_charged" msgid="3272223906073492454">"Laetud"</string> + <string name="keyguard_plugged_in" msgid="8117572000639998388">"Laadimine, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string> + <string name="keyguard_low_battery" msgid="8143808018719173859">"Ühendage laadija."</string> + <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Avamiseks vajutage menüüklahvi."</string> + <string name="keyguard_network_locked_message" msgid="9169717779058037168">"Võrk on suletud"</string> + <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"SIM-kaarti pole"</string> + <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"Tahvelarvutis pole SIM-kaarti."</string> + <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"Telefonis pole SIM-kaarti."</string> + <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"Sisestage SIM-kaart."</string> + <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"SIM-kaart puudub või on loetamatu. Sisestage SIM-kaart."</string> + <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"Kasutamiskõlbmatu SIM-kaart."</string> + <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"SIM-kaart on jäädavalt keelatud."\n" Uue SIM-kaardi saamiseks võtke ühendust oma mobiilsideoperaatoriga."</string> + <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM-kaart on lukus."</string> + <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM-kaart on PUK-lukus."</string> + <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"SIM-kaardi avamine ..."</string> + <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. Vidin %2$d/%3$d."</string> + <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"Vidina lisamine."</string> + <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"Tühi"</string> + <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"Avamisala on laiendatud."</string> + <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"Avamisala on ahendatud."</string> + <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"Vidin <xliff:g id="WIDGET_INDEX">%1$s</xliff:g>."</string> + <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"Kasutaja valija"</string> + <string name="keyguard_accessibility_status" msgid="8008264603935930611">"Olek"</string> + <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"Kaamera"</string> + <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"Meedia juhtnupud"</string> + <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"Vidina ümberkorraldamine algas."</string> + <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"Vidina ümberkorraldamine lõppes."</string> + <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"Vidin <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> on kustutatud."</string> + <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"Avamisala laiendamine."</string> + <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"Lohistamisega avamine."</string> + <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Mustriga avamine."</string> + <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Näoga avamine."</string> + <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"PIN-koodiga avamine."</string> + <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Parooliga avamine."</string> + <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Mustri ala."</string> + <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Lohistamisala."</string> + <string name="keyguard_accessibility_transport_prev_description" msgid="1337286538318543555">"Nupp Eelmine lugu"</string> + <string name="keyguard_accessibility_transport_next_description" msgid="7073928300444909320">"Nupp Järgmine lugu"</string> + <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Nupp Peata"</string> + <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Nupp Esita"</string> + <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Nupp Peata"</string> + <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string> + <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string> + <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string> + <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string> + <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Tühista"</string> + <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Kustuta"</string> + <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Valmis"</string> + <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Režiimi muutmine"</string> + <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Tõstuklahv"</string> + <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Sisestusklahv"</string> + <string name="description_target_unlock" msgid="2228524900439801453">"Luku avamine"</string> + <string name="description_target_camera" msgid="969071997552486814">"Kaamera"</string> + <string name="description_target_silent" msgid="893551287746522182">"Hääletu"</string> + <string name="description_target_soundon" msgid="30052466675500172">"Heli on sees"</string> + <string name="description_target_search" msgid="3091587249776033139">"Otsing"</string> + <string name="description_direction_up" msgid="7169032478259485180">"Lohistage üles: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_down" msgid="5087739728639014595">"Lohistage alla: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_left" msgid="7207478719805562165">"Lohistage vasakule: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_right" msgid="8034433242579600980">"Lohistage paremale: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="user_switched" msgid="3768006783166984410">"Praegune kasutaja <xliff:g id="NAME">%1$s</xliff:g>."</string> + <string name="kg_emergency_call_label" msgid="684946192523830531">"Hädaabikõne"</string> + <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Unustasin mustri"</string> + <string name="kg_wrong_pattern" msgid="1850806070801358830">"Vale muster"</string> + <string name="kg_wrong_password" msgid="2333281762128113157">"Vale parool"</string> + <string name="kg_wrong_pin" msgid="1131306510833563801">"Vale PIN-kood"</string> + <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"Proovige uuesti <xliff:g id="NUMBER">%d</xliff:g> sekundi pärast."</string> + <string name="kg_pattern_instructions" msgid="398978611683075868">"Joonistage oma muster"</string> + <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Sisestage SIM-i PIN-kood"</string> + <string name="kg_pin_instructions" msgid="2377242233495111557">"Sisestage PIN-kood"</string> + <string name="kg_password_instructions" msgid="5753646556186936819">"Sisestage parool"</string> + <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"SIM on nüüd keelatud. Jätkamiseks sisestage PUK-kood. Üksikasju küsige operaatorilt."</string> + <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Sisestage soovitud PIN-kood"</string> + <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Kinnitage soovitud PIN-kood"</string> + <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"SIM-kaardi avamine ..."</string> + <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Vale PIN-kood."</string> + <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Sisestage 4–8-numbriline PIN-kood."</string> + <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK-koodi pikkus peab olema vähemalt 8 numbrit."</string> + <string name="kg_invalid_puk" msgid="3638289409676051243">"Sisestage uuesti õige PUK-kood. Korduvkatsete korral keelatakse SIM jäädavalt."</string> + <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN-koodid ei ole vastavuses"</string> + <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Liiga palju mustrikatseid"</string> + <string name="kg_login_instructions" msgid="1100551261265506448">"Avamiseks logige sisse oma Google\'i kontoga."</string> + <string name="kg_login_username_hint" msgid="5718534272070920364">"Kasutajanimi (e-post)"</string> + <string name="kg_login_password_hint" msgid="9057289103827298549">"Parool"</string> + <string name="kg_login_submit_button" msgid="5355904582674054702">"Logi sisse"</string> + <string name="kg_login_invalid_input" msgid="5754664119319872197">"Vale kasutajanimi või parool."</string> + <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Kas unustasite kasutajanime või parooli?"\n"Külastage aadressi "<b>"google.com/accounts/recovery"</b>"."</string> + <string name="kg_login_checking_password" msgid="1052685197710252395">"Konto kontrollimine ..."</string> + <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Olete PIN-koodi <xliff:g id="NUMBER_0">%d</xliff:g> korda valesti sisestanud."\n\n"Proovige <xliff:g id="NUMBER_1">%d</xliff:g> sekundi pärast uuesti."</string> + <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Olete parooli <xliff:g id="NUMBER_0">%d</xliff:g> korda valesti sisestanud. "\n\n"Proovige uuesti <xliff:g id="NUMBER_1">%d</xliff:g> sekundi pärast."</string> + <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Joonistasite oma avamismustri <xliff:g id="NUMBER_0">%d</xliff:g> korda valesti."\n\n"Proovige <xliff:g id="NUMBER_1">%d</xliff:g> sekundi pärast uuesti."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"Olete üritanud <xliff:g id="NUMBER_0">%d</xliff:g> korda tahvelarvutit valesti avada. Pärast veel <xliff:g id="NUMBER_1">%d</xliff:g> ebaõnnestunud katset lähtestatakse tahvelarvuti tehase vaikeseadetele ja kõik kasutajaandmed lähevad kaotsi."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"Olete üritanud <xliff:g id="NUMBER_0">%d</xliff:g> korda telefoni valesti avada. Pärast veel <xliff:g id="NUMBER_1">%d</xliff:g> ebaõnnestunud katset lähtestatakse telefon tehase vaikeseadetele ja kõik kasutajaandmed lähevad kaotsi."</string> + <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"Olete püüdnud tahvelarvutit <xliff:g id="NUMBER">%d</xliff:g> korda valesti avada. Tahvelarvuti lähtestatakse nüüd tehase vaikeseadetele."</string> + <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"Olete püüdnud telefoni <xliff:g id="NUMBER">%d</xliff:g> korda valesti avada. Telefon lähtestatakse nüüd tehase vaikeseadetele."</string> + <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Joonistasite oma avamismustri <xliff:g id="NUMBER_0">%d</xliff:g> korda valesti. Pärast veel <xliff:g id="NUMBER_1">%d</xliff:g> ebaõnnestunud katset palutakse teil tahvelarvuti avada meilikontoga."\n\n" Proovige uuesti <xliff:g id="NUMBER_2">%d</xliff:g> sekundi pärast."</string> + <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Joonistasite oma avamismustri <xliff:g id="NUMBER_0">%d</xliff:g> korda valesti. Pärast veel <xliff:g id="NUMBER_1">%d</xliff:g> ebaõnnestunud katset palutakse teil telefon avada meilikontoga."\n\n" Proovige uuesti <xliff:g id="NUMBER_2">%d</xliff:g> sekundi pärast."</string> + <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string> + <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Eemalda"</string> + <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Nupp Eelmine lugu"</string> + <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Nupp Järgmine lugu"</string> + <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Nupp Peata"</string> + <string name="keyguard_transport_play_description" msgid="2924628863741150956">"Nupp Esita"</string> + <string name="keyguard_transport_stop_description" msgid="3084179324810575787">"Nupp Peata"</string> + <string name="keyguard_carrier_default" msgid="8700650403054042153">"Teenus puudub."</string> +</resources> diff --git a/packages/Keyguard/res/values-fa/activitystrings.xml b/packages/Keyguard/res/values-fa/activitystrings.xml new file mode 100644 index 0000000..735af8d --- /dev/null +++ b/packages/Keyguard/res/values-fa/activitystrings.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string> + <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string> + <string name="none_menu_item" msgid="6156747285687551424">"عدم وجود امنیت"</string> + <string name="pin_menu_item" msgid="1179756433268962311">"پین"</string> + <string name="password_menu_item" msgid="1959980499662153160">"گذرواژه"</string> + <string name="pattern_menu_item" msgid="2987798152175140249">"الگو"</string> + <string name="sim_pin_menu_item" msgid="3962286639645084880">"پین سیم کارت"</string> + <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK سیم کارت"</string> + <string name="add_widget_item" msgid="279702152366857415">"انتخاب ابزارک..."</string> + <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string> + <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string> + <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string> + <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string> +</resources> diff --git a/packages/Keyguard/res/values-fa/strings.xml b/packages/Keyguard/res/values-fa/strings.xml new file mode 100644 index 0000000..61ea08c --- /dev/null +++ b/packages/Keyguard/res/values-fa/strings.xml @@ -0,0 +1,138 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"پین کد را وارد کنید"</string> + <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"PUK و پین کد جدید را تایپ کنید"</string> + <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"کد PUK"</string> + <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"پین کد جدید"</string> + <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"برای تایپ گذرواژه لمس کنید"</font></string> + <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"برای بازکردن قفل، گذرواژه را وارد کنید"</string> + <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"برای بازکردن قفل، پین را تایپ کنید"</string> + <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"پین کد اشتباه است."</string> + <string name="keyguard_label_text" msgid="861796461028298424">"برای بازگشایی قفل، منو را فشار دهید و سپس 0 را فشار دهید."</string> + <string name="faceunlock_multiple_failures" msgid="754137583022792429">"دفعات تلاش برای Face Unlock از حداکثر مجاز بیشتر شد"</string> + <string name="keyguard_charged" msgid="3272223906073492454">"شارژ شد"</string> + <string name="keyguard_plugged_in" msgid="8117572000639998388">"شارژ، <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string> + <string name="keyguard_low_battery" msgid="8143808018719173859">"شارژر خود را وصل کنید."</string> + <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"برای بازگشایی قفل روی منو فشار دهید."</string> + <string name="keyguard_network_locked_message" msgid="9169717779058037168">"شبکه قفل شد"</string> + <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"سیم کارت موجود نیست"</string> + <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"سیم کارتی در رایانه لوحی نیست."</string> + <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"سیم کارت در تلفن نیست."</string> + <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"سیم کارت را وارد کنید."</string> + <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"سیم کارت موجود نیست یا قابل خواندن نیست. یک سیم کارت وارد کنید."</string> + <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"سیم کارت غیرقابل استفاده است."</string> + <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"سیم کارت شما به طور دائم غیر فعال شده است. "\n"برای داشتن سیم کارت دیگر با ارائهدهنده سرویس بیسیم خود تماس بگیرید."</string> + <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"سیم کارت قفل شد."</string> + <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"سیم کارت با PUK قفل شده است."</string> + <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"درحال بازگشایی قفل سیم کارت..."</string> + <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. ابزارک %2$d از %3$d."</string> + <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"ابزارک اضافه کنید."</string> + <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"خالی"</string> + <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"منطقه بازگشایی گسترده شد."</string> + <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"منطقه بازگشایی کوچک شد."</string> + <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"ابزارک <xliff:g id="WIDGET_INDEX">%1$s</xliff:g>."</string> + <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"انتخابگر کاربر"</string> + <string name="keyguard_accessibility_status" msgid="8008264603935930611">"وضعیت"</string> + <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"دوربین"</string> + <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"کنترلهای رسانه"</string> + <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"مرتب سازی مجدد ابزارک آغاز شد."</string> + <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"مرتبسازی مجدد ابزارک به پایان رسید."</string> + <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"ابزارک <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> حذف شد."</string> + <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"گسترده کردن منطقه بازگشایی شده."</string> + <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"باز کردن قفل با کشیدن انگشت روی صفحه."</string> + <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"باز کردن قفل با الگو."</string> + <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"باز کردن قفل با چهره."</string> + <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"باز کردن قفل با پین."</string> + <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"باز کردن قفل با گذرواژه."</string> + <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"ناحیه الگو."</string> + <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"ناحیه کشیدن انگشت روی صفحه."</string> + <string name="keyguard_accessibility_transport_prev_description" msgid="1337286538318543555">"دکمه تراک قبلی"</string> + <string name="keyguard_accessibility_transport_next_description" msgid="7073928300444909320">"دکمه تراک بعدی"</string> + <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"دکمه توقف موقت"</string> + <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"دکمه پخش"</string> + <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"دکمه توقف"</string> + <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string> + <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string> + <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string> + <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string> + <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"لغو"</string> + <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Delete"</string> + <string name="keyboardview_keycode_done" msgid="1992571118466679775">"انجام شد"</string> + <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"تغییر حالت"</string> + <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string> + <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string> + <string name="description_target_unlock" msgid="2228524900439801453">"بازکردن قفل"</string> + <string name="description_target_camera" msgid="969071997552486814">"دوربین"</string> + <string name="description_target_silent" msgid="893551287746522182">"ساکت"</string> + <string name="description_target_soundon" msgid="30052466675500172">"صدا روشن"</string> + <string name="description_target_search" msgid="3091587249776033139">"جستجو"</string> + <string name="description_direction_up" msgid="7169032478259485180">"لغزاندن به بالا برای <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_down" msgid="5087739728639014595">"لغزاندن به پایین برای <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_left" msgid="7207478719805562165">"لغزاندن به چپ برای <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_right" msgid="8034433242579600980">"لغزاندن به راست برای <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="user_switched" msgid="3768006783166984410">"کاربر کنونی <xliff:g id="NAME">%1$s</xliff:g>."</string> + <string name="kg_emergency_call_label" msgid="684946192523830531">"تماس اضطراری"</string> + <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"الگو را فراموش کردهاید"</string> + <string name="kg_wrong_pattern" msgid="1850806070801358830">"الگوی اشتباه"</string> + <string name="kg_wrong_password" msgid="2333281762128113157">"گذرواژه اشتباه"</string> + <string name="kg_wrong_pin" msgid="1131306510833563801">"پین اشتباه"</string> + <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"پس از <xliff:g id="NUMBER">%d</xliff:g> ثانیه دوباره امتحان کنید."</string> + <string name="kg_pattern_instructions" msgid="398978611683075868">"الگوی خود را رسم کنید"</string> + <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"پین سیم کارت را وارد کنید"</string> + <string name="kg_pin_instructions" msgid="2377242233495111557">"پین را وارد کنید"</string> + <string name="kg_password_instructions" msgid="5753646556186936819">"گذرواژه را وارد کنید"</string> + <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"اکنون سیم کارت غیرفعال است. پین کد را برای ادامه وارد کنید. برای جزئیات با شرکت مخابراتی خود تماس بگیرید."</string> + <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"پین کد دلخواه را وارد کنید"</string> + <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"تأیید پین کد دلخواه"</string> + <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"بازگشایی قفل سیم کارت..."</string> + <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"پین کد اشتباه است."</string> + <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"یک پین ۴ تا ۸ رقمی را تایپ کنید."</string> + <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"پین کد باید ۸ عدد یا بیشتر باشد."</string> + <string name="kg_invalid_puk" msgid="3638289409676051243">"پین کد صحیح را دوباره وارد کنید. تلاشهای مکرر بهطور دائم سیم کارت را غیرفعال خواهد کرد."</string> + <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"پین کدها منطبق نیستند"</string> + <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"تلاشهای زیادی برای کشیدن الگو صورت گرفته است"</string> + <string name="kg_login_instructions" msgid="1100551261265506448">"برای بازگشایی قفل، با حساب Google خود وارد سیستم شوید."</string> + <string name="kg_login_username_hint" msgid="5718534272070920364">"نام کاربری (ایمیل)"</string> + <string name="kg_login_password_hint" msgid="9057289103827298549">"گذرواژه"</string> + <string name="kg_login_submit_button" msgid="5355904582674054702">"ورود به سیستم"</string> + <string name="kg_login_invalid_input" msgid="5754664119319872197">"نام کاربری یا گذرواژه نامعتبر."</string> + <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"نام کاربری یا گذرواژه خود را فراموش کردید؟"\n"از "<b>"google.com/accounts/recovery"</b>" بازدید کنید."</string> + <string name="kg_login_checking_password" msgid="1052685197710252395">"درحال بررسی حساب..."</string> + <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"پین خود را <xliff:g id="NUMBER_0">%d</xliff:g> بار اشتباه تایپ کردید. "\n\n"پس از <xliff:g id="NUMBER_1">%d</xliff:g> ثانیه دوباره امتحان کنید."</string> + <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"گذرواژه خود را <xliff:g id="NUMBER_0">%d</xliff:g> بار اشتباه تایپ کردید. "\n\n"پس از <xliff:g id="NUMBER_1">%d</xliff:g> ثانیه دوباره امتحان کنید."</string> + <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"الگوی بازگشایی قفل خود را <xliff:g id="NUMBER_0">%d</xliff:g> بار اشتباه کشیدید. "\n\n"لطفاً پس از <xliff:g id="NUMBER_1">%d</xliff:g> ثانیه دوباره امتحان کنید."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"شما به اشتباه <xliff:g id="NUMBER_0">%d</xliff:g> بار اقدام به باز کردن قفل رایانه لوحی کردهاید. پس از <xliff:g id="NUMBER_1">%d</xliff:g> تلاش ناموفق دیگر، رایانهٔ لوحی به پیشفرض کارخانه بازنشانی میشود و تمام دادههای کاربر از دست خواهد رفت."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"شما به اشتباه <xliff:g id="NUMBER_0">%d</xliff:g> بار اقدام به باز کردن قفل تلفن کردهاید. پس از <xliff:g id="NUMBER_1">%d</xliff:g> تلاش ناموفق دیگر، تلفن به پیشفرض کارخانه بازنشانی میشود و تمام دادههای کاربر از دست خواهد رفت."</string> + <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"شما به اشتباه <xliff:g id="NUMBER">%d</xliff:g> بار اقدام به باز کردن قفل رایانه لوحی کردهاید. رایانه لوحی اکنون به پیشفرض کارخانه بازنشانی میشود."</string> + <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"شما به اشتباه <xliff:g id="NUMBER">%d</xliff:g> بار اقدام به باز کردن قفل تلفن کردهاید. این تلفن اکنون به پیشفرض کارخانه بازنشانی میشود."</string> + <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"شما الگوی بازگشایی قفل خود را <xliff:g id="NUMBER_0">%d</xliff:g> بار اشتباه کشیدهاید. بعد از <xliff:g id="NUMBER_1">%d</xliff:g> تلاش ناموفق، از شما خواسته میشود که با استفاده از یک حساب ایمیل قفل رایانه لوحی خود را باز کنید."\n\n" لطفاً پس از <xliff:g id="NUMBER_2">%d</xliff:g> ثانیه دوباره امتحان کنید."</string> + <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"شما الگوی بازگشایی قفل خود را <xliff:g id="NUMBER_0">%d</xliff:g> بار اشتباه کشیدهاید. پس از <xliff:g id="NUMBER_1">%d</xliff:g> تلاش ناموفق، از شما خواسته میشود که با استفاده از یک حساب ایمیل قفل تلفن خود را باز کنید."\n\n" لطفاً پس از <xliff:g id="NUMBER_2">%d</xliff:g> ثانیه دوباره امتحان کنید."</string> + <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string> + <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"حذف"</string> + <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"دکمه تراک قبلی"</string> + <string name="keyguard_transport_next_description" msgid="4299258300283778305">"دکمه تراک بعدی"</string> + <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"دکمه توقف موقت"</string> + <string name="keyguard_transport_play_description" msgid="2924628863741150956">"دکمه پخش"</string> + <string name="keyguard_transport_stop_description" msgid="3084179324810575787">"دکمه توقف"</string> + <string name="keyguard_carrier_default" msgid="8700650403054042153">"خدماتی وجود ندارد."</string> +</resources> diff --git a/packages/Keyguard/res/values-fi/activitystrings.xml b/packages/Keyguard/res/values-fi/activitystrings.xml new file mode 100644 index 0000000..6e0a5a9 --- /dev/null +++ b/packages/Keyguard/res/values-fi/activitystrings.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string> + <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string> + <string name="none_menu_item" msgid="6156747285687551424">"Ei suojausta"</string> + <string name="pin_menu_item" msgid="1179756433268962311">"PIN-koodi"</string> + <string name="password_menu_item" msgid="1959980499662153160">"Salasana"</string> + <string name="pattern_menu_item" msgid="2987798152175140249">"Kuvio"</string> + <string name="sim_pin_menu_item" msgid="3962286639645084880">"SIM-kortin PIN-koodi"</string> + <string name="sim_puk_menu_item" msgid="6190044133008392974">"SIM-kortin PUK-koodi"</string> + <string name="add_widget_item" msgid="279702152366857415">"Valitse widget…"</string> + <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string> + <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string> + <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string> + <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string> +</resources> diff --git a/packages/Keyguard/res/values-fi/strings.xml b/packages/Keyguard/res/values-fi/strings.xml new file mode 100644 index 0000000..8064993 --- /dev/null +++ b/packages/Keyguard/res/values-fi/strings.xml @@ -0,0 +1,138 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Anna PIN-koodi"</string> + <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Anna PUK-koodi ja uusi PIN-koodi"</string> + <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK-koodi"</string> + <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Uusi PIN-koodi"</string> + <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Kosketa ja anna salasana"</font></string> + <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Poista lukitus antamalla salasana"</string> + <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Poista lukitus antamalla PIN-koodi"</string> + <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"PIN-koodi väärin."</string> + <string name="keyguard_label_text" msgid="861796461028298424">"Poista lukitus painamalla Valikko-painiketta ja 0-näppäintä."</string> + <string name="faceunlock_multiple_failures" msgid="754137583022792429">"Face Unlock -yrityksiä tehty suurin sallittu määrä."</string> + <string name="keyguard_charged" msgid="3272223906073492454">"Täynnä"</string> + <string name="keyguard_plugged_in" msgid="8117572000639998388">"Ladataan (<xliff:g id="NUMBER">%d</xliff:g> <xliff:g id="PERCENT">%%</xliff:g>)"</string> + <string name="keyguard_low_battery" msgid="8143808018719173859">"Kytke laturi."</string> + <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Poista lukitus painamalla Valikko-painiketta."</string> + <string name="keyguard_network_locked_message" msgid="9169717779058037168">"Verkko lukittu"</string> + <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"Ei SIM-korttia"</string> + <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"Tablet-laitteessa ei ole SIM-korttia."</string> + <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"Puhelimessa ei ole SIM-korttia."</string> + <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"Aseta SIM-kortti."</string> + <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"SIM-korttia ei löydy tai sitä ei voi lukea. Aseta SIM-kortti."</string> + <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"SIM-kortti ei kelpaa."</string> + <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"SIM-kortti on poistettu pysyvästi käytöstä."\n" Ota yhteyttä operaattoriisi ja hanki uusi SIM-kortti."</string> + <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM-kortti on lukittu."</string> + <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM-kortti on PUK-lukittu."</string> + <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"SIM-kortin lukitusta poistetaan…"</string> + <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. Widget %2$d/%3$d."</string> + <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"Lisää widget."</string> + <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"Tyhjä"</string> + <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"Lukituksen poiston alue laajennettu."</string> + <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"Lukituksen poiston alue tiivistetty."</string> + <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g>-widget."</string> + <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"Käyttäjävalitsin"</string> + <string name="keyguard_accessibility_status" msgid="8008264603935930611">"Tila"</string> + <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"Kamera"</string> + <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"Mediaohjaimet"</string> + <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"Widgetien järjestely aloitettu."</string> + <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"Widgetien järjestely päättyi."</string> + <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"Widget <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> poistettu."</string> + <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"Laajenna lukituksen poiston aluetta."</string> + <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"Lukituksen poisto liu\'uttamalla."</string> + <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Lukituksen poisto salasanalla."</string> + <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Face Unlock"</string> + <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Lukituksen poisto PIN-koodilla."</string> + <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Lukituksen poisto salasanalla."</string> + <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Kuvioalue."</string> + <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Liu\'utusalue."</string> + <string name="keyguard_accessibility_transport_prev_description" msgid="1337286538318543555">"Edellinen kappale -painike"</string> + <string name="keyguard_accessibility_transport_next_description" msgid="7073928300444909320">"Seuraava kappale -painike"</string> + <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Tauko-painike"</string> + <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Toista-painike"</string> + <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Keskeytä-painike"</string> + <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string> + <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string> + <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string> + <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string> + <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Peruuta"</string> + <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Poista"</string> + <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Valmis"</string> + <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Tilan muutos"</string> + <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string> + <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string> + <string name="description_target_unlock" msgid="2228524900439801453">"Poista lukitus"</string> + <string name="description_target_camera" msgid="969071997552486814">"Kamera"</string> + <string name="description_target_silent" msgid="893551287746522182">"Äänetön"</string> + <string name="description_target_soundon" msgid="30052466675500172">"Ääni käytössä"</string> + <string name="description_target_search" msgid="3091587249776033139">"Haku"</string> + <string name="description_direction_up" msgid="7169032478259485180">"Liu\'uta ylös ja <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_down" msgid="5087739728639014595">"Liu\'uta alas ja <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_left" msgid="7207478719805562165">"Liu\'uta vasemmalle ja <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_right" msgid="8034433242579600980">"Liu\'uta oikealle ja <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="user_switched" msgid="3768006783166984410">"Nykyinen käyttäjä: <xliff:g id="NAME">%1$s</xliff:g>."</string> + <string name="kg_emergency_call_label" msgid="684946192523830531">"Hätäpuhelu"</string> + <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Unohtunut kuvio"</string> + <string name="kg_wrong_pattern" msgid="1850806070801358830">"Väärä kuvio"</string> + <string name="kg_wrong_password" msgid="2333281762128113157">"Väärä salasana"</string> + <string name="kg_wrong_pin" msgid="1131306510833563801">"Väärä PIN-koodi"</string> + <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"Yritä uudelleen <xliff:g id="NUMBER">%d</xliff:g> sekunnin kuluttua."</string> + <string name="kg_pattern_instructions" msgid="398978611683075868">"Piirrä kuvio"</string> + <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Anna SIM-kortin PIN-koodi"</string> + <string name="kg_pin_instructions" msgid="2377242233495111557">"Anna PIN-koodi"</string> + <string name="kg_password_instructions" msgid="5753646556186936819">"Anna salasana"</string> + <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"SIM-kortti on nyt poistettu käytöstä. Jatka antamalla PUK-koodi. Saat lisätietoja ottamalla yhteyttä operaattoriin."</string> + <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Anna haluamasi PIN-koodi"</string> + <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Vahvista haluamasi PIN-koodi"</string> + <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"SIM-kortin lukitusta poistetaan…"</string> + <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Virheellinen PIN-koodi."</string> + <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Anna 4–8-numeroinen PIN-koodi."</string> + <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK-koodissa tulee olla vähintään 8 numeroa."</string> + <string name="kg_invalid_puk" msgid="3638289409676051243">"Anna uudelleen oikea PUK-koodi. Jos teet liian monta yritystä, SIM-kortti poistetaan käytöstä pysyvästi."</string> + <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN-koodit eivät täsmää"</string> + <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Liikaa kuvionpiirtoyrityksiä"</string> + <string name="kg_login_instructions" msgid="1100551261265506448">"Poista lukitus kirjautumalla sisään Google-tililläsi."</string> + <string name="kg_login_username_hint" msgid="5718534272070920364">"Käyttäjänimi (sähköposti)"</string> + <string name="kg_login_password_hint" msgid="9057289103827298549">"Salasana"</string> + <string name="kg_login_submit_button" msgid="5355904582674054702">"Kirjaudu sisään"</string> + <string name="kg_login_invalid_input" msgid="5754664119319872197">"Virheellinen käyttäjänimi tai salasana."</string> + <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Unohditko käyttäjänimesi tai salasanasi?"\n"Käy osoitteessa "<b>"google.com/accounts/recovery"</b>"."</string> + <string name="kg_login_checking_password" msgid="1052685197710252395">"Tarkistetaan tiliä..."</string> + <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Olet kirjoittanut PIN-koodin väärin <xliff:g id="NUMBER_0">%d</xliff:g> kertaa. "\n\n"Yritä uudelleen <xliff:g id="NUMBER_1">%d</xliff:g> sekunnin kuluttua."</string> + <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Olet kirjoittanut salasanan väärin <xliff:g id="NUMBER_0">%d</xliff:g> kertaa. "\n\n"Yritä uudelleen <xliff:g id="NUMBER_1">%d</xliff:g> sekunnin kuluttua."</string> + <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Olet piirtänyt lukituksenpoistokuvion väärin <xliff:g id="NUMBER_0">%d</xliff:g> kertaa. "\n\n"Yritä uudelleen <xliff:g id="NUMBER_1">%d</xliff:g> sekunnin kuluttua."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"Tablet-laitteen lukituksen poisto epäonnistui <xliff:g id="NUMBER_0">%d</xliff:g> kertaa. Jos teet vielä <xliff:g id="NUMBER_1">%d</xliff:g> epäonnistunutta yritystä, tablet-laitteeseen palautetaan tehdasasetukset ja kaikki käyttäjätiedot häviävät."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"Puhelimen lukituksen poisto epäonnistui <xliff:g id="NUMBER_0">%d</xliff:g> kertaa. Jos teet vielä <xliff:g id="NUMBER_1">%d</xliff:g> epäonnistunutta yritystä, puhelimeen palautetaan tehdasasetukset ja kaikki käyttäjätiedot häviävät."</string> + <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"Tablet-laitteen lukituksen poisto epäonnistui <xliff:g id="NUMBER">%d</xliff:g> kertaa. Laitteeseen palautetaan nyt tehdasasetukset."</string> + <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"Puhelimen lukituksen poisto epäonnistui <xliff:g id="NUMBER">%d</xliff:g> kertaa. Puhelimeen palautetaan nyt tehdasasetukset."</string> + <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Piirsit lukituksenpoistokuvion väärin <xliff:g id="NUMBER_0">%d</xliff:g> kertaa. Jos piirrät kuvion väärin vielä <xliff:g id="NUMBER_1">%d</xliff:g> kertaa, sinua pyydetään poistamaan tablet-laitteesi lukitus sähköpostitilin avulla."\n\n" Yritä uudelleen <xliff:g id="NUMBER_2">%d</xliff:g> sekunnin kuluttua."</string> + <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Piirsit lukituksenpoistokuvion väärin <xliff:g id="NUMBER_0">%d</xliff:g> kertaa. Jos piirrät kuvion väärin vielä <xliff:g id="NUMBER_1">%d</xliff:g> kertaa, sinua pyydetään poistamaan puhelimesi lukitus sähköpostitilin avulla."\n\n" Yritä uudelleen <xliff:g id="NUMBER_2">%d</xliff:g> sekunnin kuluttua."</string> + <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" – "</string> + <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Poista"</string> + <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Edellinen kappale -painike"</string> + <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Seuraava kappale -painike"</string> + <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Tauko-painike"</string> + <string name="keyguard_transport_play_description" msgid="2924628863741150956">"Toista-painike"</string> + <string name="keyguard_transport_stop_description" msgid="3084179324810575787">"Keskeytä-painike"</string> + <string name="keyguard_carrier_default" msgid="8700650403054042153">"Ei yhteyttä."</string> +</resources> diff --git a/packages/Keyguard/res/values-fr/activitystrings.xml b/packages/Keyguard/res/values-fr/activitystrings.xml new file mode 100644 index 0000000..dc79842 --- /dev/null +++ b/packages/Keyguard/res/values-fr/activitystrings.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string> + <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string> + <string name="none_menu_item" msgid="6156747285687551424">"Aucune sécurité"</string> + <string name="pin_menu_item" msgid="1179756433268962311">"Code PIN"</string> + <string name="password_menu_item" msgid="1959980499662153160">"Mot de passe"</string> + <string name="pattern_menu_item" msgid="2987798152175140249">"Schéma"</string> + <string name="sim_pin_menu_item" msgid="3962286639645084880">"Code PIN de la carte SIM"</string> + <string name="sim_puk_menu_item" msgid="6190044133008392974">"Clé PUK de la carte SIM"</string> + <string name="add_widget_item" msgid="279702152366857415">"Sélectionner un widget"</string> + <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string> + <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string> + <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string> + <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string> +</resources> diff --git a/packages/Keyguard/res/values-fr/strings.xml b/packages/Keyguard/res/values-fr/strings.xml new file mode 100644 index 0000000..ee2f07b --- /dev/null +++ b/packages/Keyguard/res/values-fr/strings.xml @@ -0,0 +1,138 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Saisissez le code PIN."</string> + <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Saisissez la clé PUK et le nouveau code PIN."</string> + <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"Code PUK"</string> + <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Nouveau code PIN"</string> + <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Appuyez pour saisir mot passe"</font></string> + <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Saisissez le mot de passe pour déverrouiller le clavier."</string> + <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Saisissez le code PIN pour déverrouiller le clavier."</string> + <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"Le code PIN est erroné."</string> + <string name="keyguard_label_text" msgid="861796461028298424">"Pour déverrouiller le clavier, appuyez sur \"Menu\" puis sur 0."</string> + <string name="faceunlock_multiple_failures" msgid="754137583022792429">"Nombre maximal autorisé de tentatives Face Unlock atteint."</string> + <string name="keyguard_charged" msgid="3272223906073492454">"Chargé"</string> + <string name="keyguard_plugged_in" msgid="8117572000639998388">"En charge (<xliff:g id="NUMBER">%d</xliff:g> <xliff:g id="PERCENT">%%</xliff:g>)"</string> + <string name="keyguard_low_battery" msgid="8143808018719173859">"Branchez votre chargeur."</string> + <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Appuyez sur \"Menu\" pour déverrouiller l\'appareil."</string> + <string name="keyguard_network_locked_message" msgid="9169717779058037168">"Réseau verrouillé"</string> + <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"Aucune carte SIM"</string> + <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"Aucune carte SIM n\'est insérée dans la tablette."</string> + <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"Aucune carte SIM n\'est insérée dans le téléphone."</string> + <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"Insérez une carte SIM."</string> + <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"Carte SIM absente ou illisible. Veuillez insérer une carte SIM."</string> + <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"Carte SIM inutilisable."</string> + <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"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="keyguard_sim_locked_message" msgid="6875773413306380902">"La carte SIM est verrouillée."</string> + <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"La carte SIM est verrouillée par clé PUK."</string> + <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Déverrouillage de la carte SIM en cours…"</string> + <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. Widget %2$d sur %3$d."</string> + <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"Ajouter un widget"</string> + <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"Vide"</string> + <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"Zone de déverrouillage développée."</string> + <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"Zone de déverrouillage réduite."</string> + <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"Widget <xliff:g id="WIDGET_INDEX">%1$s</xliff:g>"</string> + <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"Sélecteur d\'utilisateur"</string> + <string name="keyguard_accessibility_status" msgid="8008264603935930611">"État"</string> + <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"Caméra"</string> + <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"Commandes multimédias"</string> + <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"Début de la réorganisation des widgets"</string> + <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"Réorganisation des widgets terminée."</string> + <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"Le widget <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> a été supprimé."</string> + <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"Développer la zone de déverrouillage"</string> + <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"Déverrouillage en faisant glisser votre doigt sur l\'écran"</string> + <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Déverrouillage par schéma"</string> + <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Déverrouillage par reconnaissance faciale"</string> + <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Déverrouillage par code PIN"</string> + <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Déverrouillage par mot de passe"</string> + <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Zone du schéma"</string> + <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Zone où faire glisser votre doigt sur l\'écran"</string> + <string name="keyguard_accessibility_transport_prev_description" msgid="1337286538318543555">"Bouton pour revenir au titre précédent"</string> + <string name="keyguard_accessibility_transport_next_description" msgid="7073928300444909320">"Bouton pour atteindre le titre suivant"</string> + <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Bouton de pause"</string> + <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Bouton de lecture"</string> + <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Bouton d\'arrêt"</string> + <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string> + <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string> + <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string> + <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string> + <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Annuler"</string> + <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Supprimer"</string> + <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Terminé"</string> + <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Changement de mode"</string> + <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Maj"</string> + <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Entrée"</string> + <string name="description_target_unlock" msgid="2228524900439801453">"Déverrouiller"</string> + <string name="description_target_camera" msgid="969071997552486814">"Appareil photo"</string> + <string name="description_target_silent" msgid="893551287746522182">"Mode silencieux"</string> + <string name="description_target_soundon" msgid="30052466675500172">"Son activé"</string> + <string name="description_target_search" msgid="3091587249776033139">"Rechercher"</string> + <string name="description_direction_up" msgid="7169032478259485180">"Faites glisser vers le haut pour <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_down" msgid="5087739728639014595">"Faites glisser vers le bas pour <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_left" msgid="7207478719805562165">"Faites glisser vers la gauche pour <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_right" msgid="8034433242579600980">"Faites glisser vers la droite pour <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="user_switched" msgid="3768006783166984410">"Utilisateur actuel : <xliff:g id="NAME">%1$s</xliff:g>"</string> + <string name="kg_emergency_call_label" msgid="684946192523830531">"Appel d\'urgence"</string> + <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"J\'ai oublié le schéma"</string> + <string name="kg_wrong_pattern" msgid="1850806070801358830">"Schéma incorrect."</string> + <string name="kg_wrong_password" msgid="2333281762128113157">"Mot de passe incorrect."</string> + <string name="kg_wrong_pin" msgid="1131306510833563801">"Code PIN incorrect."</string> + <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"Réessayez dans <xliff:g id="NUMBER">%d</xliff:g> secondes."</string> + <string name="kg_pattern_instructions" msgid="398978611683075868">"Dessinez votre schéma."</string> + <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Saisissez le code PIN de la carte SIM."</string> + <string name="kg_pin_instructions" msgid="2377242233495111557">"Saisissez le code PIN."</string> + <string name="kg_password_instructions" msgid="5753646556186936819">"Saisissez votre mot de passe."</string> + <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"La carte SIM est maintenant désactivée. Saisissez le code PUK pour continuer. Contactez votre opérateur pour en savoir plus."</string> + <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Saisir le code PIN souhaité"</string> + <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Confirmer le code PIN souhaité"</string> + <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Déblocage de la carte SIM en cours…"</string> + <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Le code PIN est erroné."</string> + <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Veuillez saisir un code PIN comprenant entre quatre et huit chiffres."</string> + <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"Le code PUK doit contenir au moins 8 chiffres."</string> + <string name="kg_invalid_puk" msgid="3638289409676051243">"Veuillez saisir de nouveau le code PUK correct. Des tentatives répétées désactivent définitivement la carte SIM."</string> + <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"Les codes PIN ne correspondent pas."</string> + <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Trop de tentatives."</string> + <string name="kg_login_instructions" msgid="1100551261265506448">"Pour déverrouiller le téléphone, veuillez vous connecter avec votre compte Google."</string> + <string name="kg_login_username_hint" msgid="5718534272070920364">"Nom d\'utilisateur (e-mail)"</string> + <string name="kg_login_password_hint" msgid="9057289103827298549">"Mot de passe"</string> + <string name="kg_login_submit_button" msgid="5355904582674054702">"Connexion"</string> + <string name="kg_login_invalid_input" msgid="5754664119319872197">"Nom d\'utilisateur ou mot de passe non valide."</string> + <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Vous avez oublié votre nom d\'utilisateur ou votre mot de passe ?"\n"Rendez-vous sur la page "<b>"google.com/accounts/recovery"</b>"."</string> + <string name="kg_login_checking_password" msgid="1052685197710252395">"Vérification du compte en cours…"</string> + <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Vous avez saisi un code PIN incorrect à <xliff:g id="NUMBER_0">%d</xliff:g> reprises. "\n\n"Veuillez réessayer dans <xliff:g id="NUMBER_1">%d</xliff:g> secondes."</string> + <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Vous avez saisi un mot de passe incorrect à <xliff:g id="NUMBER_0">%d</xliff:g> reprises. "\n\n"Veuillez réessayer dans <xliff:g id="NUMBER_1">%d</xliff:g> secondes."</string> + <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Vous avez dessiné un schéma de déverrouillage incorrect à <xliff:g id="NUMBER_0">%d</xliff:g> reprises."\n\n"Veuillez réessayer dans <xliff:g id="NUMBER_1">%d</xliff:g> secondes."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"Vous avez tenté de déverrouiller la tablette de façon incorrecte à <xliff:g id="NUMBER_0">%d</xliff:g> reprises. Si vous échouez encore <xliff:g id="NUMBER_1">%d</xliff:g> fois, sa configuration d\'usine sera rétablie, et toutes les données utilisateur seront perdues."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"Vous avez tenté de déverrouiller le téléphone de façon incorrecte à <xliff:g id="NUMBER_0">%d</xliff:g> reprises. Si vous échouez encore <xliff:g id="NUMBER_1">%d</xliff:g> fois, sa configuration d\'usine sera rétablie, et toutes les données utilisateur seront perdues."</string> + <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"Vous avez tenté de déverrouiller la tablette de façon incorrecte à <xliff:g id="NUMBER">%d</xliff:g> reprises. Sa configuration d\'usine va être rétablie."</string> + <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"Vous avez tenté de déverrouiller le téléphone de façon incorrecte à <xliff:g id="NUMBER">%d</xliff:g> reprises. Sa configuration d\'usine va être rétablie."</string> + <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Vous avez dessiné un schéma de déverrouillage incorrect à <xliff:g id="NUMBER_0">%d</xliff:g> reprises. Si vous échouez encore <xliff:g id="NUMBER_1">%d</xliff:g> fois, vous devrez déverrouiller votre tablette à l\'aide d\'un compte de messagerie électronique."\n\n" Veuillez réessayer dans <xliff:g id="NUMBER_2">%d</xliff:g> secondes."</string> + <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Vous avez dessiné un schéma de déverrouillage incorrect à <xliff:g id="NUMBER_0">%d</xliff:g> reprises. Si vous échouez encore <xliff:g id="NUMBER_1">%d</xliff:g> fois, vous devrez déverrouiller votre téléphone à l\'aide d\'un compte de messagerie électronique."\n\n" Veuillez réessayer dans <xliff:g id="NUMBER_2">%d</xliff:g> secondes."</string> + <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string> + <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Supprimer"</string> + <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Bouton pour revenir au titre précédent"</string> + <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Bouton pour atteindre le titre suivant"</string> + <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Bouton de pause"</string> + <string name="keyguard_transport_play_description" msgid="2924628863741150956">"Bouton de lecture"</string> + <string name="keyguard_transport_stop_description" msgid="3084179324810575787">"Bouton d\'arrêt"</string> + <string name="keyguard_carrier_default" msgid="8700650403054042153">"Aucun service"</string> +</resources> diff --git a/packages/Keyguard/res/values-hi/activitystrings.xml b/packages/Keyguard/res/values-hi/activitystrings.xml new file mode 100644 index 0000000..4b0a082 --- /dev/null +++ b/packages/Keyguard/res/values-hi/activitystrings.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string> + <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string> + <string name="none_menu_item" msgid="6156747285687551424">"कोई सुरक्षा नहीं"</string> + <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string> + <string name="password_menu_item" msgid="1959980499662153160">"पासवर्ड"</string> + <string name="pattern_menu_item" msgid="2987798152175140249">"प्रतिमान"</string> + <string name="sim_pin_menu_item" msgid="3962286639645084880">"SIM पिन"</string> + <string name="sim_puk_menu_item" msgid="6190044133008392974">"SIM PUK"</string> + <string name="add_widget_item" msgid="279702152366857415">"विजेट चुनें..."</string> + <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string> + <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string> + <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string> + <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string> +</resources> diff --git a/packages/Keyguard/res/values-hi/strings.xml b/packages/Keyguard/res/values-hi/strings.xml new file mode 100644 index 0000000..57bad8c --- /dev/null +++ b/packages/Keyguard/res/values-hi/strings.xml @@ -0,0 +1,138 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"पिन कोड लिखें"</string> + <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"PUK और नया पिन कोड लिखें"</string> + <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK कोड"</string> + <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"नया पिन कोड"</string> + <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"पासवर्ड लिखने के लिए स्पर्श करें"</font></string> + <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"अनलॉक करने के लिए पासवर्ड लिखें"</string> + <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"अनलॉक करने के लिए पिन लिखें"</string> + <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"गलत पिन कोड."</string> + <string name="keyguard_label_text" msgid="861796461028298424">"अनलॉक करने के लिए, मेनू दबाएं और फिर 0 दबाएं."</string> + <string name="faceunlock_multiple_failures" msgid="754137583022792429">"फेस अनलॉक के अधिकतम प्रयासों की सीमा पार हो गई"</string> + <string name="keyguard_charged" msgid="3272223906073492454">"चार्ज हो गई"</string> + <string name="keyguard_plugged_in" msgid="8117572000639998388">"चार्ज हो रही है, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string> + <string name="keyguard_low_battery" msgid="8143808018719173859">"अपना चार्जर कनेक्ट करें."</string> + <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"अनलॉक करने के लिए मेनू दबाएं."</string> + <string name="keyguard_network_locked_message" msgid="9169717779058037168">"नेटवर्क लॉक किया गया"</string> + <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"कोई SIM कार्ड नहीं है"</string> + <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"टेबलेट में कोई SIM कार्ड नहीं है."</string> + <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"फ़ोन में कोई SIM कार्ड नहीं है."</string> + <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"SIM कार्ड डालें."</string> + <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"SIM कार्ड गुम है या पढ़ने योग्य नहीं है. SIM कार्ड डालें."</string> + <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"अनुपयोगी SIM कार्ड."</string> + <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"आपका SIM कार्ड स्थायी रूप से अक्षम कर दिया गया है."\n" दूसरे SIM कार्ड के लिए अपने वायरलेस सेवा प्रदाता से संपर्क करें."</string> + <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"सिम कार्ड लॉक है."</string> + <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM कार्ड PUK द्वारा लॉक किया हुआ है."</string> + <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"SIM कार्ड अनलॉक हो रहा है…"</string> + <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. %3$d विजेट में से %2$d."</string> + <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"विजेट जोड़ें"</string> + <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"रिक्त"</string> + <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"अनलॉक क्षेत्र को विस्तृत कर दिया गया."</string> + <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"अनलॉक क्षेत्र को संक्षिप्त कर दिया गया."</string> + <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> विजेट."</string> + <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"उपयोगकर्ता चयनकर्ता"</string> + <string name="keyguard_accessibility_status" msgid="8008264603935930611">"स्थिति"</string> + <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"कैमरा"</string> + <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"मीडिया नियंत्रण"</string> + <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"विजेट पुनः क्रमित करना प्रारंभ."</string> + <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"विजेट पुनः क्रमित करना समाप्त."</string> + <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"विजेट <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> को हटा दिया गया."</string> + <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"अनलॉक क्षेत्र विस्तृत करें."</string> + <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"स्लाइड अनलॉक."</string> + <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"प्रतिमान अनलॉक."</string> + <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"फेस अनलॉक."</string> + <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"पिन अनलॉक."</string> + <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"पासवर्ड अनलॉक."</string> + <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"प्रतिमान क्षेत्र."</string> + <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"स्लाइड क्षेत्र."</string> + <string name="keyguard_accessibility_transport_prev_description" msgid="1337286538318543555">"पिछला ट्रैक बटन"</string> + <string name="keyguard_accessibility_transport_next_description" msgid="7073928300444909320">"अगला ट्रैक बटन"</string> + <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"पॉज़ करें बटन"</string> + <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"चलाएं बटन"</string> + <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"रोकें बटन"</string> + <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string> + <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string> + <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string> + <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string> + <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"रद्द करें"</string> + <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"हटाएं"</string> + <string name="keyboardview_keycode_done" msgid="1992571118466679775">"पूर्ण"</string> + <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Mode change"</string> + <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string> + <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string> + <string name="description_target_unlock" msgid="2228524900439801453">"अनलॉक करें"</string> + <string name="description_target_camera" msgid="969071997552486814">"कैमरा"</string> + <string name="description_target_silent" msgid="893551287746522182">"मौन"</string> + <string name="description_target_soundon" msgid="30052466675500172">"ध्वनि चालू करें"</string> + <string name="description_target_search" msgid="3091587249776033139">"खोजें"</string> + <string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> के लिए ऊपर स्लाइड करें."</string> + <string name="description_direction_down" msgid="5087739728639014595">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> के लिए नीचे स्लाइड करें."</string> + <string name="description_direction_left" msgid="7207478719805562165">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> के लिए बाएं स्लाइड करें."</string> + <string name="description_direction_right" msgid="8034433242579600980">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> के लिए दाएं स्लाइड करें."</string> + <string name="user_switched" msgid="3768006783166984410">"वर्तमान उपयोगकर्ता <xliff:g id="NAME">%1$s</xliff:g>."</string> + <string name="kg_emergency_call_label" msgid="684946192523830531">"आपातकालीन कॉल"</string> + <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"प्रतिमान भूल गए"</string> + <string name="kg_wrong_pattern" msgid="1850806070801358830">"गलत प्रतिमान"</string> + <string name="kg_wrong_password" msgid="2333281762128113157">"गलत पासवर्ड"</string> + <string name="kg_wrong_pin" msgid="1131306510833563801">"गलत PIN"</string> + <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"<xliff:g id="NUMBER">%d</xliff:g> सेकंड में पुन: प्रयास करें."</string> + <string name="kg_pattern_instructions" msgid="398978611683075868">"अपना प्रतिमान आरेखित करें"</string> + <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"सिम PIN डालें"</string> + <string name="kg_pin_instructions" msgid="2377242233495111557">"PIN डालें"</string> + <string name="kg_password_instructions" msgid="5753646556186936819">"पासवर्ड डालें"</string> + <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"सिम अब अक्षम हो गई है. जारी रखने के लिए PUK कोड डालें. विवरण के लिए वाहक से संपर्क करें."</string> + <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"इच्छित पिन कोड डालें"</string> + <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"इच्छित पिन कोड की पुष्टि करें"</string> + <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"SIM कार्ड अनलॉक कर रहा है…"</string> + <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"गलत PIN कोड."</string> + <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"ऐसा PIN लिखें, जो 4 से 8 अंकों का हो."</string> + <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK कोड 8 या अधिक संख्या वाला होना चाहिए."</string> + <string name="kg_invalid_puk" msgid="3638289409676051243">"सही PUK कोड पुन: डालें. बार-बार प्रयास करने से सिम स्थायी रूप से अक्षम हो जाएगी."</string> + <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"पिन कोड का मिलान नहीं होता"</string> + <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"बहुत अधिक प्रतिमान प्रयास"</string> + <string name="kg_login_instructions" msgid="1100551261265506448">"अनलॉक करने के लिए, अपने Google खाते से साइन इन करें."</string> + <string name="kg_login_username_hint" msgid="5718534272070920364">"उपयोगकर्ता नाम (ईमेल)"</string> + <string name="kg_login_password_hint" msgid="9057289103827298549">"पासवर्ड"</string> + <string name="kg_login_submit_button" msgid="5355904582674054702">"साइन इन करें"</string> + <string name="kg_login_invalid_input" msgid="5754664119319872197">"अमान्य उपयोगकर्ता नाम या पासवर्ड."</string> + <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"अपना उपयोगकर्ता नाम या पासवर्ड भूल गए?"\n" "<b>"google.com/accounts/recovery"</b>" पर जाएं."</string> + <string name="kg_login_checking_password" msgid="1052685197710252395">"खाते की जांच की जा रही है…"</string> + <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"आप अपना PIN <xliff:g id="NUMBER_0">%d</xliff:g> बार गलत तरीके से लिख चुके हैं. "\n\n" <xliff:g id="NUMBER_1">%d</xliff:g> सेकंड में पुन: प्रयास करें."</string> + <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"आप अपना पासवर्ड <xliff:g id="NUMBER_0">%d</xliff:g> बार गलत तरीके से लिख चुके हैं. "\n\n" <xliff:g id="NUMBER_1">%d</xliff:g> सेकंड में पुन: प्रयास करें."</string> + <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"आपने अपना अनलॉक प्रतिमान <xliff:g id="NUMBER_0">%d</xliff:g> बार गलत तरीके से आरेखित किया है. "\n\n" <xliff:g id="NUMBER_1">%d</xliff:g> सेकंड में पुन: प्रयास करें."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"आप टेबलेट को अनलॉक करने के लिए <xliff:g id="NUMBER_0">%d</xliff:g> बार गलत तरीके से प्रयास कर चुके हैं. <xliff:g id="NUMBER_1">%d</xliff:g> और असफल प्रयासों के बाद, टेबलेट फ़ैक्टरी डिफ़ॉल्ट पर रीसेट हो जाएगा और सभी उपयोगकर्ता डेटा खो जाएगा."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"आप फ़ोन को अनलॉक करने के लिए <xliff:g id="NUMBER_0">%d</xliff:g> बार गलत तरीके से प्रयास कर चुके हैं. <xliff:g id="NUMBER_1">%d</xliff:g> और असफल प्रयासों के बाद, फ़ोन फ़ैक्टरी डिफ़ॉल्ट पर रीसेट हो जाएगा और सभी उपयोगकर्ता डेटा खो जाएगा."</string> + <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"आप टेबलेट को अनलॉक करने के लिए <xliff:g id="NUMBER">%d</xliff:g> बार गलत तरीके से प्रयास कर चुके हैं. टेबलेट अब फ़ैक्टरी डिफ़ॉल्ट पर रीसेट हो जाएगा."</string> + <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"आप फ़ोन को अनलॉक करने के लिए <xliff:g id="NUMBER">%d</xliff:g> बार गलत तरीके से प्रयास कर चुके हैं. फ़ोन अब फ़ैक्टरी डिफ़ॉल्ट पर रीसेट हो जाएगा."</string> + <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"आपने अपने अनलॉक प्रतिमान को <xliff:g id="NUMBER_0">%d</xliff:g> बार गलत तरीके से आरेखित किया है. <xliff:g id="NUMBER_1">%d</xliff:g> और असफल प्रयासों के बाद, आपसे अपने टेबलेट को किसी ईमेल खाते के उपयोग से अनलॉक करने के लिए कहा जाएगा."\n\n" <xliff:g id="NUMBER_2">%d</xliff:g> सेकंड में पुन: प्रयास करें."</string> + <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"आपने अपने अनलॉक प्रतिमान को <xliff:g id="NUMBER_0">%d</xliff:g> बार गलत तरीके से आरेखित किया है. <xliff:g id="NUMBER_1">%d</xliff:g> और असफल प्रयासों के बाद, आपसे अपने फ़ोन को किसी ईमेल खाते का उपयोग करके अनलॉक करने के लिए कहा जाएगा."\n\n" <xliff:g id="NUMBER_2">%d</xliff:g> सेकंड में पुन: प्रयास करें."</string> + <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string> + <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"निकालें"</string> + <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"पिछला ट्रैक बटन"</string> + <string name="keyguard_transport_next_description" msgid="4299258300283778305">"अगला ट्रैक बटन"</string> + <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"पॉज़ करें बटन"</string> + <string name="keyguard_transport_play_description" msgid="2924628863741150956">"चलाएं बटन"</string> + <string name="keyguard_transport_stop_description" msgid="3084179324810575787">"रोकें बटन"</string> + <string name="keyguard_carrier_default" msgid="8700650403054042153">"कोई सेवा नहीं."</string> +</resources> diff --git a/packages/Keyguard/res/values-hr/activitystrings.xml b/packages/Keyguard/res/values-hr/activitystrings.xml new file mode 100644 index 0000000..d2b8e92 --- /dev/null +++ b/packages/Keyguard/res/values-hr/activitystrings.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string> + <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string> + <string name="none_menu_item" msgid="6156747285687551424">"Nema zaštite"</string> + <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string> + <string name="password_menu_item" msgid="1959980499662153160">"Zaporka"</string> + <string name="pattern_menu_item" msgid="2987798152175140249">"Uzorak"</string> + <string name="sim_pin_menu_item" msgid="3962286639645084880">"PIN za SIM"</string> + <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK za SIM"</string> + <string name="add_widget_item" msgid="279702152366857415">"Odaberite widget..."</string> + <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string> + <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string> + <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string> + <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string> +</resources> diff --git a/packages/Keyguard/res/values-hr/strings.xml b/packages/Keyguard/res/values-hr/strings.xml new file mode 100644 index 0000000..232b2ca --- /dev/null +++ b/packages/Keyguard/res/values-hr/strings.xml @@ -0,0 +1,138 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Unesite PIN kôd"</string> + <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Unesite PUK i novi PIN kôd"</string> + <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK kôd"</string> + <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Novi PIN kôd"</string> + <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Dodirnite za tipkanje zaporke"</font></string> + <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Unesite zaporku za otključavanje"</string> + <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Unesite PIN za otključavanje"</string> + <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"Netočan PIN kôd."</string> + <string name="keyguard_label_text" msgid="861796461028298424">"Za otključavanje pritisnite Izbornik pa 0."</string> + <string name="faceunlock_multiple_failures" msgid="754137583022792429">"Premašen je maksimalni broj Otključavanja licem"</string> + <string name="keyguard_charged" msgid="3272223906073492454">"Napunjeno"</string> + <string name="keyguard_plugged_in" msgid="8117572000639998388">"Puni se, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string> + <string name="keyguard_low_battery" msgid="8143808018719173859">"Priključite punjač."</string> + <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Pritisnite Izbornik za otključavanje."</string> + <string name="keyguard_network_locked_message" msgid="9169717779058037168">"Mreža je zaključana"</string> + <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"Nema SIM kartice"</string> + <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"U tabletnom uređaju nema SIM kartice."</string> + <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"U telefonu nema SIM kartice."</string> + <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"Umetnite SIM karticu."</string> + <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"SIM kartica nedostaje ili nije čitljiva. Umetnite SIM karticu."</string> + <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"Neupotrebljiva SIM kartica."</string> + <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"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="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM kartica je zaključana."</string> + <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM kartica zaključana je PUK-om."</string> + <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Otključavanje SIM kartice…"</string> + <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. Widget %2$d od %3$d."</string> + <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"Dodavanje widgeta."</string> + <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"Prazno"</string> + <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"Područje za otključavanje prošireno je."</string> + <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"Područje za otključavanje sažeto je."</string> + <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> widget."</string> + <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"Birač korisnika"</string> + <string name="keyguard_accessibility_status" msgid="8008264603935930611">"Status"</string> + <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"Fotoaparat"</string> + <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"Nadzor medija"</string> + <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"Pokrenuta je promjena redoslijeda widgeta."</string> + <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"Završena je promjena redoslijeda widgeta."</string> + <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"Widget <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> izbrisan je."</string> + <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"Proširivanje područja za otključavanje."</string> + <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"Otključavanje klizanjem."</string> + <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Uzorak za otključavanje."</string> + <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Otključavanje licem."</string> + <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Otključavanje PIN-om."</string> + <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Otključavanje zaporkom."</string> + <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Područje uzorka."</string> + <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Područje klizanja."</string> + <string name="keyguard_accessibility_transport_prev_description" msgid="1337286538318543555">"Gumb Prethodni zapis"</string> + <string name="keyguard_accessibility_transport_next_description" msgid="7073928300444909320">"Gumb Sljedeći zapis"</string> + <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Gumb Pauza"</string> + <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Gumb Reprodukcija"</string> + <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Gumb Zaustavi"</string> + <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string> + <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string> + <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string> + <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string> + <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Odustani"</string> + <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Izbriši"</string> + <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Gotovo"</string> + <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Promjena načina"</string> + <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string> + <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string> + <string name="description_target_unlock" msgid="2228524900439801453">"Otključaj"</string> + <string name="description_target_camera" msgid="969071997552486814">"Fotoaparat"</string> + <string name="description_target_silent" msgid="893551287746522182">"Bešumno"</string> + <string name="description_target_soundon" msgid="30052466675500172">"Zvuk je uključen"</string> + <string name="description_target_search" msgid="3091587249776033139">"Pretraživanje"</string> + <string name="description_direction_up" msgid="7169032478259485180">"Kliznite prema gore za <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_down" msgid="5087739728639014595">"Kliznite prema dolje za <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_left" msgid="7207478719805562165">"Kliznite lijevo za <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_right" msgid="8034433242579600980">"Kliznite desno za <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="user_switched" msgid="3768006783166984410">"Trenutačni korisnik <xliff:g id="NAME">%1$s</xliff:g>."</string> + <string name="kg_emergency_call_label" msgid="684946192523830531">"Hitan poziv"</string> + <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Zaboravili ste obrazac"</string> + <string name="kg_wrong_pattern" msgid="1850806070801358830">"Pogrešan obrazac"</string> + <string name="kg_wrong_password" msgid="2333281762128113157">"Pogrešna zaporka"</string> + <string name="kg_wrong_pin" msgid="1131306510833563801">"Pogrešan PIN"</string> + <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"Pokušajte ponovo za <xliff:g id="NUMBER">%d</xliff:g> s."</string> + <string name="kg_pattern_instructions" msgid="398978611683075868">"Iscrtajte svoj obrazac"</string> + <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Unesite PIN za SIM"</string> + <string name="kg_pin_instructions" msgid="2377242233495111557">"Unesite PIN"</string> + <string name="kg_password_instructions" msgid="5753646556186936819">"Unesite zaporku"</string> + <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"SIM je sad onemogućen. Unesite PUK kôd da biste nastavili. Kontaktirajte operatera za pojedinosti."</string> + <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Upišite željeni PIN kôd"</string> + <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Potvrdite željeni PIN kôd"</string> + <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Otključavanje SIM kartice…"</string> + <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Netočan PIN kôd."</string> + <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Unesite PIN koji ima od 4 do 8 brojeva."</string> + <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK kôd treba imati 8 brojeva ili više."</string> + <string name="kg_invalid_puk" msgid="3638289409676051243">"Ponovo unesite ispravan PUK kôd. Ponovljeni pokušaji trajno će onemogućiti SIM."</string> + <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN kodovi nisu jednaki"</string> + <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Previše pokušaja iscrtavanja obrasca"</string> + <string name="kg_login_instructions" msgid="1100551261265506448">"Za otključavanje prijavite se Google računom."</string> + <string name="kg_login_username_hint" msgid="5718534272070920364">"Korisničko ime (e-pošta)"</string> + <string name="kg_login_password_hint" msgid="9057289103827298549">"Zaporka"</string> + <string name="kg_login_submit_button" msgid="5355904582674054702">"Prijava"</string> + <string name="kg_login_invalid_input" msgid="5754664119319872197">"Nevažeće korisničko ime ili zaporka."</string> + <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Zaboravili ste korisničko ime ili zaporku?"\n"Posjetite "<b>"google.com/accounts/recovery"</b>"."</string> + <string name="kg_login_checking_password" msgid="1052685197710252395">"Provjera računa..."</string> + <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Netočno ste napisali PIN <xliff:g id="NUMBER_0">%d</xliff:g> puta. "\n\n"Pokušajte ponovo za <xliff:g id="NUMBER_1">%d</xliff:g> s."</string> + <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Netočno ste napisali zaporku <xliff:g id="NUMBER_0">%d</xliff:g> puta. "\n\n"Pokušajte ponovo za <xliff:g id="NUMBER_1">%d</xliff:g> s."</string> + <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Netočno ste iscrtali obrazac za otključavanje <xliff:g id="NUMBER_0">%d</xliff:g> puta. "\n\n"Pokušajte ponovo za <xliff:g id="NUMBER_1">%d</xliff:g> s."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"Netočno ste pokušali otključati tabletno računalo <xliff:g id="NUMBER_0">%d</xliff:g> puta. Ono će se vratiti na tvorničke postavke i svi korisnički podaci bit će izgubljeni nakon još ovoliko neuspjelih pokušaja: <xliff:g id="NUMBER_1">%d</xliff:g>."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"Netočno ste pokušali otključati telefon <xliff:g id="NUMBER_0">%d</xliff:g> puta. On će se vratiti na tvorničke postavke i svi korisnički podaci bit će izgubljeni nakon još ovoliko neuspjelih pokušaja: <xliff:g id="NUMBER_1">%d</xliff:g>."</string> + <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"Netočno ste pokušali otključati tabletno računalo <xliff:g id="NUMBER">%d</xliff:g> puta. Sada će se vratiti na tvorničke postavke."</string> + <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"Netočno ste pokušali otključati telefon <xliff:g id="NUMBER">%d</xliff:g> puta. Sada će se vratiti na tvorničke postavke."</string> + <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Netočno ste iscrtali obrazac za otključavanje <xliff:g id="NUMBER_0">%d</xliff:g> puta. Nakon još ovoliko neuspješnih pokušaja: <xliff:g id="NUMBER_1">%d</xliff:g> morat ćete otključati tabletno računalo pomoću računa e-pošte."\n\n" Pokušajte ponovo za <xliff:g id="NUMBER_2">%d</xliff:g> s."</string> + <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Netočno ste iscrtali obrazac za otključavanje <xliff:g id="NUMBER_0">%d</xliff:g> puta. Nakon još ovoliko neuspješnih pokušaja: <xliff:g id="NUMBER_1">%d</xliff:g> morat ćete otključati telefon pomoću računa e-pošte."\n\n" Pokušajte ponovo za <xliff:g id="NUMBER_2">%d</xliff:g> s."</string> + <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" – "</string> + <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Ukloni"</string> + <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Gumb Prethodni zapis"</string> + <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Gumb Sljedeći zapis"</string> + <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Gumb Pauza"</string> + <string name="keyguard_transport_play_description" msgid="2924628863741150956">"Gumb Reprodukcija"</string> + <string name="keyguard_transport_stop_description" msgid="3084179324810575787">"Gumb Zaustavi"</string> + <string name="keyguard_carrier_default" msgid="8700650403054042153">"Nema usluge."</string> +</resources> diff --git a/packages/Keyguard/res/values-hu/activitystrings.xml b/packages/Keyguard/res/values-hu/activitystrings.xml new file mode 100644 index 0000000..30d2951 --- /dev/null +++ b/packages/Keyguard/res/values-hu/activitystrings.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string> + <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string> + <string name="none_menu_item" msgid="6156747285687551424">"Nincs védelem"</string> + <string name="pin_menu_item" msgid="1179756433268962311">"PIN kód"</string> + <string name="password_menu_item" msgid="1959980499662153160">"Jelszó"</string> + <string name="pattern_menu_item" msgid="2987798152175140249">"Minta"</string> + <string name="sim_pin_menu_item" msgid="3962286639645084880">"SIM kártya PIN kódja"</string> + <string name="sim_puk_menu_item" msgid="6190044133008392974">"SIM kártya PUK kódja"</string> + <string name="add_widget_item" msgid="279702152366857415">"Modul kiválasztása..."</string> + <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string> + <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string> + <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string> + <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string> +</resources> diff --git a/packages/Keyguard/res/values-hu/strings.xml b/packages/Keyguard/res/values-hu/strings.xml new file mode 100644 index 0000000..df9a745 --- /dev/null +++ b/packages/Keyguard/res/values-hu/strings.xml @@ -0,0 +1,138 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Írja be a PIN kódot"</string> + <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Írja be a PUK kódot, majd az új PIN kódot"</string> + <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK kód"</string> + <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Új PIN kód"</string> + <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Érintsen jelszó megadásához"</font></string> + <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"A feloldáshoz írja be a jelszót"</string> + <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Feloldáshoz írja be a PIN kódot"</string> + <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"Helytelen PIN kód."</string> + <string name="keyguard_label_text" msgid="861796461028298424">"A feloldáshoz nyomja meg a Menü, majd a 0 gombot."</string> + <string name="faceunlock_multiple_failures" msgid="754137583022792429">"Elérte az arcalapú feloldási kísérletek maximális számát"</string> + <string name="keyguard_charged" msgid="3272223906073492454">"Feltöltve"</string> + <string name="keyguard_plugged_in" msgid="8117572000639998388">"Töltés (<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>)"</string> + <string name="keyguard_low_battery" msgid="8143808018719173859">"Csatlakoztassa a töltőt."</string> + <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"A feloldáshoz nyomja meg a Menü gombot."</string> + <string name="keyguard_network_locked_message" msgid="9169717779058037168">"A hálózat lezárva"</string> + <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"Nincs SIM kártya."</string> + <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"Nincs SIM kártya a táblagépben."</string> + <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"Nincs SIM kártya a telefonban."</string> + <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"Helyezzen be egy SIM kártyát."</string> + <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"A SIM kártya hiányzik vagy nem olvasható. Helyezzen be egy SIM kártyát."</string> + <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"A SIM kártya nem használható."</string> + <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"SIM kártyája véglegesen le van tiltva."\n" Forduljon a vezeték nélküli szolgáltatójához másik SIM kártya beszerzése érdekében."</string> + <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"A SIM kártya le van zárva."</string> + <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"A SIM kártya le van zárva a PUK kóddal."</string> + <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"SIM kártya feloldása..."</string> + <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. Modul %3$d/%2$d"</string> + <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"Modul hozzáadása."</string> + <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"Üres"</string> + <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"Feloldási terület kiterjesztve."</string> + <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"Feloldási terület összecsukva."</string> + <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> modul."</string> + <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"Felhasználóválasztó"</string> + <string name="keyguard_accessibility_status" msgid="8008264603935930611">"Állapot"</string> + <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"Kamera"</string> + <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"Médiaelemek vezérlője"</string> + <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"A modulátrendezés elkezdődött."</string> + <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"A modulátrendezés véget ért."</string> + <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> modul törölve."</string> + <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"A feloldási terület kiterjesztése."</string> + <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"Feloldás csúsztatással"</string> + <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Feloldás mintával"</string> + <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Arcalapú feloldás"</string> + <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Feloldás PIN kóddal"</string> + <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Feloldás jelszóval"</string> + <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Mintaterület"</string> + <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Csúsztatási terület"</string> + <string name="keyguard_accessibility_transport_prev_description" msgid="1337286538318543555">"Előző szám gomb"</string> + <string name="keyguard_accessibility_transport_next_description" msgid="7073928300444909320">"Következő szám gomb"</string> + <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Szünet gomb"</string> + <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Lejátszás gomb"</string> + <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Leállítás gomb"</string> + <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string> + <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string> + <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string> + <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string> + <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Mégse"</string> + <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Delete"</string> + <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Kész"</string> + <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Mód váltása"</string> + <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string> + <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string> + <string name="description_target_unlock" msgid="2228524900439801453">"Feloldás"</string> + <string name="description_target_camera" msgid="969071997552486814">"Kamera"</string> + <string name="description_target_silent" msgid="893551287746522182">"Némítás"</string> + <string name="description_target_soundon" msgid="30052466675500172">"Hang bekapcsolása"</string> + <string name="description_target_search" msgid="3091587249776033139">"Keresés"</string> + <string name="description_direction_up" msgid="7169032478259485180">"A(z) <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> művelethez csúsztassa felfelé."</string> + <string name="description_direction_down" msgid="5087739728639014595">"A(z) <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> művelethez csúsztassa lefelé."</string> + <string name="description_direction_left" msgid="7207478719805562165">"A(z) <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> művelethez csúsztassa balra."</string> + <string name="description_direction_right" msgid="8034433242579600980">"A(z) <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> művelethez csúsztassa jobbra."</string> + <string name="user_switched" msgid="3768006783166984410">"<xliff:g id="NAME">%1$s</xliff:g> az aktuális felhasználó."</string> + <string name="kg_emergency_call_label" msgid="684946192523830531">"Segélyhívás"</string> + <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Elfelejtett minta"</string> + <string name="kg_wrong_pattern" msgid="1850806070801358830">"Helytelen minta"</string> + <string name="kg_wrong_password" msgid="2333281762128113157">"Helytelen jelszó"</string> + <string name="kg_wrong_pin" msgid="1131306510833563801">"Helytelen PIN kód"</string> + <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"Próbálkozzon újra <xliff:g id="NUMBER">%d</xliff:g> másodperc múlva."</string> + <string name="kg_pattern_instructions" msgid="398978611683075868">"Rajzolja le a mintát"</string> + <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Adja meg a SIM kártya PIN kódját"</string> + <string name="kg_pin_instructions" msgid="2377242233495111557">"Adja meg a PIN kódot"</string> + <string name="kg_password_instructions" msgid="5753646556186936819">"Írja be a jelszót"</string> + <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"A SIM kártya le van tiltva. A folytatáshoz adja meg a PUK kódot. A részletekért vegye fel a kapcsolatot szolgáltatójával."</string> + <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Kívánt PIN kód megadása"</string> + <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Kívánt PIN kód megerősítése"</string> + <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"SIM kártya feloldása..."</string> + <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Helytelen PIN kód."</string> + <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"4–8 számjegyű PIN kódot írjon be."</string> + <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"A PUK kód legalább 8 számjegyből kell, hogy álljon."</string> + <string name="kg_invalid_puk" msgid="3638289409676051243">"Adja meg újra a helyes PUK kódot. Az ismételt próbálkozással véglegesen letiltja a SIM kártyát."</string> + <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"A PIN kódok nem egyeznek."</string> + <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Túl sok mintarajzolási próbálkozás"</string> + <string name="kg_login_instructions" msgid="1100551261265506448">"A feloldáshoz jelentkezzen be Google Fiókjával."</string> + <string name="kg_login_username_hint" msgid="5718534272070920364">"Felhasználónév (e-mail cím)"</string> + <string name="kg_login_password_hint" msgid="9057289103827298549">"Jelszó"</string> + <string name="kg_login_submit_button" msgid="5355904582674054702">"Bejelentkezés"</string> + <string name="kg_login_invalid_input" msgid="5754664119319872197">"Érvénytelen felhasználónév vagy jelszó."</string> + <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Elfelejtette a felhasználónevét vagy jelszavát?"\n"Keresse fel a "<b>"google.com/accounts/recovery"</b>" webhelyet."</string> + <string name="kg_login_checking_password" msgid="1052685197710252395">"Fiók ellenőrzése..."</string> + <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"<xliff:g id="NUMBER_0">%d</xliff:g> alkalommal helytelenül adta meg PIN kódját. "\n\n"Próbálja újra <xliff:g id="NUMBER_1">%d</xliff:g> másodperc múlva."</string> + <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"<xliff:g id="NUMBER_0">%d</xliff:g> alkalommal helytelenül adta meg a jelszót. "\n\n" Próbálja újra <xliff:g id="NUMBER_1">%d</xliff:g> másodperc múlva."</string> + <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"<xliff:g id="NUMBER_0">%d</xliff:g> alkalommal rosszul rajzolta le feloldási mintát. "\n\n"Próbálja újra <xliff:g id="NUMBER_1">%d</xliff:g> másodperc múlva."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"A táblagépet <xliff:g id="NUMBER_0">%d</xliff:g> alkalommal próbálta meg sikertelenül feloldani. <xliff:g id="NUMBER_1">%d</xliff:g> további sikertelen próbálkozás után a rendszer visszaállítja a táblagép gyári alapértelmezett beállításait, és minden felhasználói adat elvész."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"A telefont <xliff:g id="NUMBER_0">%d</xliff:g> alkalommal próbálta meg sikertelenül feloldani. <xliff:g id="NUMBER_1">%d</xliff:g> további sikertelen próbálkozás után a rendszer visszaállítja a telefon gyári alapértelmezett beállításait, és minden felhasználói adat elvész."</string> + <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"A táblagépet <xliff:g id="NUMBER">%d</xliff:g> alkalommal próbálta meg sikertelenül feloldani. A rendszer visszaállítja a táblagép gyári alapértelmezett beállításait."</string> + <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"A telefont <xliff:g id="NUMBER">%d</xliff:g> alkalommal próbálta meg sikertelenül feloldani. A rendszer visszaállítja a telefon gyári alapértelmezett beállításait."</string> + <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"<xliff:g id="NUMBER_0">%d</xliff:g> alkalommal helytelenül rajzolta le a feloldási mintát. További <xliff:g id="NUMBER_1">%d</xliff:g> sikertelen kísérlet után egy e-mail fiók használatával kell feloldania a táblagépét."\n\n" Kérjük, próbálja újra <xliff:g id="NUMBER_2">%d</xliff:g> másodperc múlva."</string> + <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"<xliff:g id="NUMBER_0">%d</xliff:g> alkalommal helytelenül rajzolta le a feloldási mintát. További <xliff:g id="NUMBER_1">%d</xliff:g> sikertelen kísérlet után egy e-mail fiók használatával kell feloldania a telefonját."\n\n" Kérjük, próbálja újra <xliff:g id="NUMBER_2">%d</xliff:g> másodperc múlva."</string> + <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" – "</string> + <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Eltávolítás"</string> + <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Előző szám gomb"</string> + <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Következő szám gomb"</string> + <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Szünet gomb"</string> + <string name="keyguard_transport_play_description" msgid="2924628863741150956">"Lejátszás gomb"</string> + <string name="keyguard_transport_stop_description" msgid="3084179324810575787">"Leállítás gomb"</string> + <string name="keyguard_carrier_default" msgid="8700650403054042153">"Nincs szolgáltatás."</string> +</resources> diff --git a/packages/Keyguard/res/values-in/activitystrings.xml b/packages/Keyguard/res/values-in/activitystrings.xml new file mode 100644 index 0000000..ec9774d --- /dev/null +++ b/packages/Keyguard/res/values-in/activitystrings.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string> + <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string> + <string name="none_menu_item" msgid="6156747285687551424">"Tanpa pengamanan"</string> + <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string> + <string name="password_menu_item" msgid="1959980499662153160">"Sandi"</string> + <string name="pattern_menu_item" msgid="2987798152175140249">"Pola"</string> + <string name="sim_pin_menu_item" msgid="3962286639645084880">"PIN SIM"</string> + <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK SIM"</string> + <string name="add_widget_item" msgid="279702152366857415">"Pilih widget..."</string> + <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string> + <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string> + <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string> + <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string> +</resources> diff --git a/packages/Keyguard/res/values-in/strings.xml b/packages/Keyguard/res/values-in/strings.xml new file mode 100644 index 0000000..95ca2f7 --- /dev/null +++ b/packages/Keyguard/res/values-in/strings.xml @@ -0,0 +1,138 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Ketik kode PIN"</string> + <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Ketik kode PUK dan PIN baru"</string> + <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"Kode PUK"</string> + <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Kode Pin baru"</string> + <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Sentuh untuk mengetikkan sandi"</font></string> + <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Ketik sandi untuk membuka kunci"</string> + <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Ketik PIN untuk membuka kunci"</string> + <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"Kode PIN salah."</string> + <string name="keyguard_label_text" msgid="861796461028298424">"Untuk membuka, tekan Menu lalu 0."</string> + <string name="faceunlock_multiple_failures" msgid="754137583022792429">"Percobaan Face Unlock melebihi batas maksimum"</string> + <string name="keyguard_charged" msgid="3272223906073492454">"Terisi"</string> + <string name="keyguard_plugged_in" msgid="8117572000639998388">"Mengisi baterai, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string> + <string name="keyguard_low_battery" msgid="8143808018719173859">"Hubungkan pengisi daya."</string> + <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Tekan Menu untuk membuka."</string> + <string name="keyguard_network_locked_message" msgid="9169717779058037168">"Jaringan terkunci"</string> + <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"Tidak ada kartu SIM"</string> + <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"Tidak ada kartu SIM dalam tablet."</string> + <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"Tidak ada Kartu SIM di dalam ponsel."</string> + <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"Masukkan kartu SIM."</string> + <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"Kartu SIM tidak ada atau tidak dapat dibaca. Masukkan kartu SIM."</string> + <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"Kartu SIM tidak dapat digunakan."</string> + <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"Kartu SIM Anda telah dinonaktifkan secara permanen."\n" Hubungi penyedia layanan nirkabel Anda untuk kartu SIM lain."</string> + <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"Kartu SIM terkunci."</string> + <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"Kartu SIM terkunci PUK."</string> + <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Membuka kartu SIM…"</string> + <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. Widget %2$d dari %3$d."</string> + <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"Tambahkan widget."</string> + <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"Kosong"</string> + <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"Area buka kunci diluaskan."</string> + <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"Area buka kunci diciutkan."</string> + <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"Widget <xliff:g id="WIDGET_INDEX">%1$s</xliff:g>."</string> + <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"Pemilih pengguna"</string> + <string name="keyguard_accessibility_status" msgid="8008264603935930611">"Status"</string> + <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"Kamera"</string> + <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"Kontrol media"</string> + <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"Pengurutan ulang widget dimulai."</string> + <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"Pengurutan ulang widget berakhir."</string> + <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"Widget <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> dihapus."</string> + <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"Luaskan area buka kunci."</string> + <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"Buka kunci dengan menggeser."</string> + <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Buka kunci dengan pola."</string> + <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Buka kunci dengan face unlock."</string> + <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Buka kunci dengan PIN."</string> + <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Buka kunci dengan sandi."</string> + <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Area pola."</string> + <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Area geser."</string> + <string name="keyguard_accessibility_transport_prev_description" msgid="1337286538318543555">"Tombol lagu sebelumnya"</string> + <string name="keyguard_accessibility_transport_next_description" msgid="7073928300444909320">"Tombol lagu berikutnya"</string> + <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Tombol jeda"</string> + <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Tombol putar"</string> + <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Tombol hentikan"</string> + <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string> + <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string> + <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string> + <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string> + <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Batal"</string> + <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Hapus"</string> + <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Selesai"</string> + <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Pengubahan mode"</string> + <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string> + <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string> + <string name="description_target_unlock" msgid="2228524900439801453">"Membuka gembok"</string> + <string name="description_target_camera" msgid="969071997552486814">"Kamera"</string> + <string name="description_target_silent" msgid="893551287746522182">"Senyap"</string> + <string name="description_target_soundon" msgid="30052466675500172">"Suara hidup"</string> + <string name="description_target_search" msgid="3091587249776033139">"Telusuri"</string> + <string name="description_direction_up" msgid="7169032478259485180">"Geser ke atas untuk <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_down" msgid="5087739728639014595">"Geser ke bawah untuk <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_left" msgid="7207478719805562165">"Geser ke kiri untuk <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_right" msgid="8034433242579600980">"Geser ke kanan untuk <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="user_switched" msgid="3768006783166984410">"Pengguna saat ini <xliff:g id="NAME">%1$s</xliff:g>."</string> + <string name="kg_emergency_call_label" msgid="684946192523830531">"Panggilan darurat"</string> + <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Lupa Pola?"</string> + <string name="kg_wrong_pattern" msgid="1850806070801358830">"Pola Salah"</string> + <string name="kg_wrong_password" msgid="2333281762128113157">"Sandi Salah"</string> + <string name="kg_wrong_pin" msgid="1131306510833563801">"PIN Salah"</string> + <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"Coba lagi dalam <xliff:g id="NUMBER">%d</xliff:g> detik."</string> + <string name="kg_pattern_instructions" msgid="398978611683075868">"Gambar pola Anda"</string> + <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Masukkan PIN SIM"</string> + <string name="kg_pin_instructions" msgid="2377242233495111557">"Masukkan PIN"</string> + <string name="kg_password_instructions" msgid="5753646556186936819">"Masukkan Sandi"</string> + <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"SIM telah dinonaktifkan. Masukkan kode PUK untuk melanjutkan. Hubungi operator untuk keterangan selengkapnya."</string> + <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Masukkan kode PIN yang diinginkan"</string> + <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Konfirmasi kode PIN yang diinginkan"</string> + <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Membuka kunci kartu SIM…"</string> + <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Kode PIN salah."</string> + <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Ketik PIN yang terdiri dari 4 sampai 8 angka."</string> + <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"Kode PUK harus terdiri dari 8 angka atau lebih."</string> + <string name="kg_invalid_puk" msgid="3638289409676051243">"Masukkan kembali kode PUK yang benar. Jika berulang kali gagal, SIM akan dinonaktifkan secara permanen."</string> + <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"Kode PIN tidak cocok"</string> + <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Terlalu banyak upaya pola"</string> + <string name="kg_login_instructions" msgid="1100551261265506448">"Untuk membuka kunci, masuk dengan akun Google Anda."</string> + <string name="kg_login_username_hint" msgid="5718534272070920364">"Nama pengguna (email)"</string> + <string name="kg_login_password_hint" msgid="9057289103827298549">"Sandi"</string> + <string name="kg_login_submit_button" msgid="5355904582674054702">"Masuk"</string> + <string name="kg_login_invalid_input" msgid="5754664119319872197">"Nama pengguna atau sandi tidak valid."</string> + <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Lupa nama pengguna atau sandi Anda?"\n"Kunjungi "<b>"google.com/accounts/recovery"</b>"."</string> + <string name="kg_login_checking_password" msgid="1052685197710252395">"Memeriksa akun…"</string> + <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Anda telah <xliff:g id="NUMBER_0">%d</xliff:g> kali salah mengetik PIN. "\n\n"Coba lagi dalam <xliff:g id="NUMBER_1">%d</xliff:g> detik."</string> + <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Anda telah <xliff:g id="NUMBER_0">%d</xliff:g> kali salah mengetik sandi. "\n\n"Coba lagi dalam <xliff:g id="NUMBER_1">%d</xliff:g> detik."</string> + <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Anda telah <xliff:g id="NUMBER_0">%d</xliff:g> kali salah menggambar pola pembuka kunci. "\n\n"Coba lagi dalam <xliff:g id="NUMBER_1">%d</xliff:g> detik."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"Anda telah <xliff:g id="NUMBER_0">%d</xliff:g> kali gagal saat berusaha membuka kunci tablet. Setelah <xliff:g id="NUMBER_1">%d</xliff:g> lagi upaya gagal, tablet akan disetel ulang ke setelan default pabrik dan semua data pengguna akan hilang."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"Anda telah <xliff:g id="NUMBER_0">%d</xliff:g> kali gagal saat berusaha membuka kunci ponsel. Setelah <xliff:g id="NUMBER_1">%d</xliff:g> lagi upaya gagal, ponsel akan disetel ulang ke setelan default pabrik dan semua data pengguna akan hilang."</string> + <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"Anda telah <xliff:g id="NUMBER">%d</xliff:g> kali gagal saat berusaha membuka kunci tablet. Kini tablet akan disetel ulang ke setelan default pabrik."</string> + <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"Anda telah <xliff:g id="NUMBER">%d</xliff:g> kali gagal saat berusaha untuk membuka kunci ponsel. Kini ponsel akan disetel ulang ke setelan default pabrik."</string> + <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Anda telah <xliff:g id="NUMBER_0">%d</xliff:g> kali salah menggambar pola pembuka kunci. Setelah <xliff:g id="NUMBER_1">%d</xliff:g> lagi upaya gagal, Anda akan diminta membuka kunci tablet menggunakan akun email."\n\n"Coba lagi dalam <xliff:g id="NUMBER_2">%d</xliff:g> detik."</string> + <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Anda telah <xliff:g id="NUMBER_0">%d</xliff:g> kali salah menggambar pola pembuka kunci. Setelah <xliff:g id="NUMBER_1">%d</xliff:g> lagi upaya gagal, Anda akan diminta membuka kunci ponsel menggunakan akun email."\n\n"Coba lagi dalam <xliff:g id="NUMBER_2">%d</xliff:g> detik."</string> + <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string> + <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Hapus"</string> + <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Tombol lagu sebelumnya"</string> + <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Tombol lagu berikutnya"</string> + <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Tombol jeda"</string> + <string name="keyguard_transport_play_description" msgid="2924628863741150956">"Tombol putar"</string> + <string name="keyguard_transport_stop_description" msgid="3084179324810575787">"Tombol hentikan"</string> + <string name="keyguard_carrier_default" msgid="8700650403054042153">"Tidak ada layanan."</string> +</resources> diff --git a/packages/Keyguard/res/values-it/activitystrings.xml b/packages/Keyguard/res/values-it/activitystrings.xml new file mode 100644 index 0000000..34ad964 --- /dev/null +++ b/packages/Keyguard/res/values-it/activitystrings.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string> + <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string> + <string name="none_menu_item" msgid="6156747285687551424">"Nessuna sicurezza"</string> + <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string> + <string name="password_menu_item" msgid="1959980499662153160">"Password"</string> + <string name="pattern_menu_item" msgid="2987798152175140249">"Sequenza"</string> + <string name="sim_pin_menu_item" msgid="3962286639645084880">"PIN della SIM"</string> + <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK della SIM"</string> + <string name="add_widget_item" msgid="279702152366857415">"Scegli widget..."</string> + <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string> + <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string> + <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string> + <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string> +</resources> diff --git a/packages/Keyguard/res/values-it/strings.xml b/packages/Keyguard/res/values-it/strings.xml new file mode 100644 index 0000000..c47b120 --- /dev/null +++ b/packages/Keyguard/res/values-it/strings.xml @@ -0,0 +1,138 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Inserisci il codice PIN"</string> + <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Inserisci il PUK e il nuovo codice PIN"</string> + <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"Codice PUK"</string> + <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Nuovo codice PIN"</string> + <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Tocca per inserire la password"</font></string> + <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Inserisci password per sbloccare"</string> + <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Inserisci PIN per sbloccare"</string> + <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"Codice PIN errato."</string> + <string name="keyguard_label_text" msgid="861796461028298424">"Per sbloccare, premi Menu, poi 0."</string> + <string name="faceunlock_multiple_failures" msgid="754137583022792429">"Numero massimo di tentativi di Sblocco col sorriso superato"</string> + <string name="keyguard_charged" msgid="3272223906073492454">"Carico"</string> + <string name="keyguard_plugged_in" msgid="8117572000639998388">"In carica (<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>)"</string> + <string name="keyguard_low_battery" msgid="8143808018719173859">"Collega il caricabatterie."</string> + <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Premi Menu per sbloccare."</string> + <string name="keyguard_network_locked_message" msgid="9169717779058037168">"Rete bloccata"</string> + <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"Nessuna scheda SIM"</string> + <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"Nessuna scheda SIM presente nel tablet."</string> + <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"Nessuna scheda SIM presente nel telefono."</string> + <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"Inserisci una scheda SIM."</string> + <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"Scheda SIM mancante o non leggibile. Inserisci una scheda SIM."</string> + <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"Scheda SIM inutilizzabile."</string> + <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"La scheda SIM è stata disattivata definitivamente."\n" Contatta il fornitore del tuo servizio wireless per ricevere un\'altra scheda SIM."</string> + <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"La SIM è bloccata."</string> + <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"La SIM è bloccata tramite PUK."</string> + <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Sblocco scheda SIM..."</string> + <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. Widget %2$d di %3$d."</string> + <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"Aggiungi widget."</string> + <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"Vuoto"</string> + <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"Area di sblocco estesa."</string> + <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"Area di sblocco compressa."</string> + <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> widget."</string> + <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"Selettore utente"</string> + <string name="keyguard_accessibility_status" msgid="8008264603935930611">"Stato"</string> + <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"Fotocamera"</string> + <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"Controlli media"</string> + <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"Riordino dei widget iniziato."</string> + <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"Riordino dei widget terminato."</string> + <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"Widget <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> eliminato."</string> + <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"Espandi area di sblocco."</string> + <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"Sblocco con scorrimento."</string> + <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Sblocco con sequenza."</string> + <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Sblocco col sorriso."</string> + <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Sblocco con PIN."</string> + <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Sblocco con password."</string> + <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Area sequenza."</string> + <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Area di scorrimento."</string> + <string name="keyguard_accessibility_transport_prev_description" msgid="1337286538318543555">"Pulsante traccia precedente"</string> + <string name="keyguard_accessibility_transport_next_description" msgid="7073928300444909320">"Pulsante traccia successiva"</string> + <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Pulsante Pausa"</string> + <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Pulsante Riproduci"</string> + <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Pulsante di arresto"</string> + <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string> + <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string> + <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string> + <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string> + <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Annulla"</string> + <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Canc"</string> + <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Fine"</string> + <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Cambio modalità"</string> + <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Maiuscolo"</string> + <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Invio"</string> + <string name="description_target_unlock" msgid="2228524900439801453">"Sblocca"</string> + <string name="description_target_camera" msgid="969071997552486814">"Fotocamera"</string> + <string name="description_target_silent" msgid="893551287746522182">"Silenzioso"</string> + <string name="description_target_soundon" msgid="30052466675500172">"Audio attivato"</string> + <string name="description_target_search" msgid="3091587249776033139">"Ricerca"</string> + <string name="description_direction_up" msgid="7169032478259485180">"Su per <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_down" msgid="5087739728639014595">"Giù per <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_left" msgid="7207478719805562165">"A sinistra per <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_right" msgid="8034433242579600980">"A destra per <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="user_switched" msgid="3768006783166984410">"Utente corrente <xliff:g id="NAME">%1$s</xliff:g>."</string> + <string name="kg_emergency_call_label" msgid="684946192523830531">"Chiamata di emergenza"</string> + <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Sequenza dimenticata"</string> + <string name="kg_wrong_pattern" msgid="1850806070801358830">"Sequenza sbagliata"</string> + <string name="kg_wrong_password" msgid="2333281762128113157">"Password sbagliata"</string> + <string name="kg_wrong_pin" msgid="1131306510833563801">"PIN errato"</string> + <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"Riprova fra <xliff:g id="NUMBER">%d</xliff:g> secondi."</string> + <string name="kg_pattern_instructions" msgid="398978611683075868">"Inserisci la sequenza"</string> + <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Inserisci il PIN della SIM"</string> + <string name="kg_pin_instructions" msgid="2377242233495111557">"Inserisci PIN"</string> + <string name="kg_password_instructions" msgid="5753646556186936819">"Inserisci la password"</string> + <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"La scheda SIM è disattivata. Inserisci il codice PUK per continuare. Contatta l\'operatore per avere informazioni dettagliate."</string> + <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Inserisci il codice PIN desiderato"</string> + <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Conferma il codice PIN desiderato"</string> + <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Sblocco scheda SIM..."</string> + <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Codice PIN errato."</string> + <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Il PIN deve essere di 4-8 numeri."</string> + <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"Il codice PUK dovrebbe avere almeno otto numeri."</string> + <string name="kg_invalid_puk" msgid="3638289409676051243">"Inserisci di nuovo il codice PUK corretto. Ripetuti tentativi comportano la disattivazione definitiva della scheda SIM."</string> + <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"I codici PIN non corrispondono"</string> + <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Troppi tentativi di inserimento della sequenza"</string> + <string name="kg_login_instructions" msgid="1100551261265506448">"Per sbloccare, accedi con il tuo account Google."</string> + <string name="kg_login_username_hint" msgid="5718534272070920364">"Nome utente (email)"</string> + <string name="kg_login_password_hint" msgid="9057289103827298549">"Password"</string> + <string name="kg_login_submit_button" msgid="5355904582674054702">"Accedi"</string> + <string name="kg_login_invalid_input" msgid="5754664119319872197">"Nome utente o password non validi."</string> + <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Hai dimenticato il nome utente o la password?"\n"Visita "<b>"google.com/accounts/recovery"</b>"."</string> + <string name="kg_login_checking_password" msgid="1052685197710252395">"Controllo account…"</string> + <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Hai digitato il tuo PIN <xliff:g id="NUMBER_0">%d</xliff:g> volte in modo errato. "\n\n"Riprova tra <xliff:g id="NUMBER_1">%d</xliff:g> secondi."</string> + <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Hai digitato la tua password <xliff:g id="NUMBER_0">%d</xliff:g> volte in modo errato. "\n\n"Riprova tra <xliff:g id="NUMBER_1">%d</xliff:g> secondi."</string> + <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"<xliff:g id="NUMBER_0">%d</xliff:g> tentativi errati di inserimento della sequenza di sblocco. "\n\n"Riprova tra <xliff:g id="NUMBER_1">%d</xliff:g> secondi."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"<xliff:g id="NUMBER_0">%d</xliff:g> tentativi errati di sblocco del tablet. Dopo altri <xliff:g id="NUMBER_1">%d</xliff:g> tentativi falliti, il tablet verrà sottoposto a un ripristino dei dati di fabbrica e tutti i dati utente andranno persi."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"<xliff:g id="NUMBER_0">%d</xliff:g> tentativi errati di sblocco del telefono. Dopo altri <xliff:g id="NUMBER_1">%d</xliff:g> tentativi falliti, il telefono verrà sottoposto a un ripristino dei dati di fabbrica e tutti i dati utente andranno persi."</string> + <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"<xliff:g id="NUMBER">%d</xliff:g> tentativi errati di sblocco del tablet. Il tablet verrà sottoposto a un ripristino dei dati di fabbrica."</string> + <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"<xliff:g id="NUMBER">%d</xliff:g> tentativi errati di sblocco del telefono. Il telefono verrà sottoposto a un ripristino dei dati di fabbrica."</string> + <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"<xliff:g id="NUMBER_0">%d</xliff:g> tentativi errati di inserimento della sequenza di sblocco. Dopo altri <xliff:g id="NUMBER_1">%d</xliff:g> tentativi falliti, ti verrà chiesto di sbloccare il tablet con un account email."\n\n" Riprova tra <xliff:g id="NUMBER_2">%d</xliff:g> secondi."</string> + <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"<xliff:g id="NUMBER_0">%d</xliff:g> tentativi errati di inserimento della sequenza di sblocco. Dopo altri <xliff:g id="NUMBER_1">%d</xliff:g> tentativi falliti, ti verrà chiesto di sbloccare il telefono con un account email."\n\n" Riprova tra <xliff:g id="NUMBER_2">%d</xliff:g> secondi."</string> + <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" – "</string> + <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Rimuovi"</string> + <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Pulsante traccia precedente"</string> + <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Pulsante traccia successiva"</string> + <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Pulsante Pausa"</string> + <string name="keyguard_transport_play_description" msgid="2924628863741150956">"Pulsante Riproduci"</string> + <string name="keyguard_transport_stop_description" msgid="3084179324810575787">"Pulsante di arresto"</string> + <string name="keyguard_carrier_default" msgid="8700650403054042153">"Nessun servizio."</string> +</resources> diff --git a/packages/Keyguard/res/values-iw/activitystrings.xml b/packages/Keyguard/res/values-iw/activitystrings.xml new file mode 100644 index 0000000..84e351a2 --- /dev/null +++ b/packages/Keyguard/res/values-iw/activitystrings.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string> + <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string> + <string name="none_menu_item" msgid="6156747285687551424">"ללא אבטחה"</string> + <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string> + <string name="password_menu_item" msgid="1959980499662153160">"סיסמה"</string> + <string name="pattern_menu_item" msgid="2987798152175140249">"קו ביטול נעילה"</string> + <string name="sim_pin_menu_item" msgid="3962286639645084880">"PIN של SIM"</string> + <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK של SIM"</string> + <string name="add_widget_item" msgid="279702152366857415">"בחר Widget..."</string> + <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string> + <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string> + <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string> + <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string> +</resources> diff --git a/packages/Keyguard/res/values-iw/strings.xml b/packages/Keyguard/res/values-iw/strings.xml new file mode 100644 index 0000000..70f73db --- /dev/null +++ b/packages/Keyguard/res/values-iw/strings.xml @@ -0,0 +1,138 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"הקלד קוד PIN"</string> + <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"הקלד את קוד ה-PUK וקוד ה-PIN החדש"</string> + <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"קוד PUK"</string> + <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"קוד PIN חדש"</string> + <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"גע כדי להקליד את הסיסמה"</font></string> + <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"הקלד סיסמה לביטול הנעילה"</string> + <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"הקלד קוד PIN לביטול הנעילה"</string> + <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"קוד PIN שגוי"</string> + <string name="keyguard_label_text" msgid="861796461028298424">"כדי לבטל את הנעילה, לחץ על \'תפריט\' ולאחר מכן על 0."</string> + <string name="faceunlock_multiple_failures" msgid="754137583022792429">"חרגת ממספר הניסיונות המרבי של זיהוי פרצוף"</string> + <string name="keyguard_charged" msgid="3272223906073492454">"טעון"</string> + <string name="keyguard_plugged_in" msgid="8117572000639998388">"טוען, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string> + <string name="keyguard_low_battery" msgid="8143808018719173859">"חבר את המטען."</string> + <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"לחץ על \'תפריט\' כדי לבטל את הנעילה."</string> + <string name="keyguard_network_locked_message" msgid="9169717779058037168">"רשת נעולה"</string> + <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"אין כרטיס SIM"</string> + <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"אין כרטיס SIM בטאבלט."</string> + <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"אין כרטיס SIM בטלפון."</string> + <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"הכנס כרטיס SIM."</string> + <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"כרטיס ה-SIM חסר או שלא ניתן לקרוא אותו. הכנס כרטיס SIM."</string> + <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"לא ניתן להשתמש בכרטיס SIM זה."</string> + <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"כרטיס ה-SIM שלך הושבת לצמיתות."\n"פנה לספק השירות האלחוטי שלך לקבלת כרטיס SIM אחר."</string> + <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"כרטיס ה-SIM נעול."</string> + <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"כרטיס SIM נעול באמצעות PUK."</string> + <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"מבטל נעילה של כרטיס SIM…"</string> + <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. Widget %2$d מתוך %3$d."</string> + <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"הוסף Widget."</string> + <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"ריק"</string> + <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"אזור ביטול הנעילה הורחב."</string> + <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"אזור ביטול הנעילה כווץ."</string> + <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"Widget <xliff:g id="WIDGET_INDEX">%1$s</xliff:g>."</string> + <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"בוחר משתמשים"</string> + <string name="keyguard_accessibility_status" msgid="8008264603935930611">"סטטוס"</string> + <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"מצלמה"</string> + <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"פקדי מדיה"</string> + <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"סידור מחדש של Widgets התחיל."</string> + <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"סידור מחדש של Widgets הסתיים."</string> + <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"Widget <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> נמחק."</string> + <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"הרחב את אזור ביטול הנעילה."</string> + <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"ביטול נעילה באמצעות הסטה."</string> + <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"ביטול נעילה באמצעות ציור קו."</string> + <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"ביטול נעילה באמצעות זיהוי פרצוף."</string> + <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"ביטול נעילה באמצעות מספר PIN."</string> + <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"ביטול נעילה באמצעות סיסמה."</string> + <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"אזור ציור קו."</string> + <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"אזור הסטה."</string> + <string name="keyguard_accessibility_transport_prev_description" msgid="1337286538318543555">"לחצן \'הרצועה הקודמת\'"</string> + <string name="keyguard_accessibility_transport_next_description" msgid="7073928300444909320">"לחצן \'הרצועה הבאה\'"</string> + <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"לחצן \'השהה\'"</string> + <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"לחצן \'הפעל\'"</string> + <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"לחצן \'הפסק\'"</string> + <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string> + <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"אבג"</string> + <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string> + <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string> + <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"ביטול"</string> + <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"מחק"</string> + <string name="keyboardview_keycode_done" msgid="1992571118466679775">"סיום"</string> + <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"שינוי מצב"</string> + <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string> + <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string> + <string name="description_target_unlock" msgid="2228524900439801453">"בטל נעילה"</string> + <string name="description_target_camera" msgid="969071997552486814">"מצלמה"</string> + <string name="description_target_silent" msgid="893551287746522182">"שקט"</string> + <string name="description_target_soundon" msgid="30052466675500172">"הקול פועל"</string> + <string name="description_target_search" msgid="3091587249776033139">"חיפוש"</string> + <string name="description_direction_up" msgid="7169032478259485180">"הסט למעלה כדי להציג <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_down" msgid="5087739728639014595">"הסט למטה כדי להציג <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_left" msgid="7207478719805562165">"הסט שמאלה כדי להציג <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_right" msgid="8034433242579600980">"הסט ימינה כדי להציג <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="user_switched" msgid="3768006783166984410">"המשתמש הנוכחי <xliff:g id="NAME">%1$s</xliff:g>."</string> + <string name="kg_emergency_call_label" msgid="684946192523830531">"שיחת חירום"</string> + <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"שכחת את הקו"</string> + <string name="kg_wrong_pattern" msgid="1850806070801358830">"קו ביטול נעילה שגוי"</string> + <string name="kg_wrong_password" msgid="2333281762128113157">"סיסמה שגויה"</string> + <string name="kg_wrong_pin" msgid="1131306510833563801">"מספר PIN שגוי"</string> + <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"נסה שוב בעוד <xliff:g id="NUMBER">%d</xliff:g> שניות."</string> + <string name="kg_pattern_instructions" msgid="398978611683075868">"שרטט את קו ביטול הנעילה"</string> + <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"הזן מספר PIN ל-SIM"</string> + <string name="kg_pin_instructions" msgid="2377242233495111557">"הזן מספר PIN"</string> + <string name="kg_password_instructions" msgid="5753646556186936819">"הזן את הסיסמה"</string> + <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"כרטיס ה-SIM מושבת כעת. הזן קוד PUK כדי להמשיך. פנה אל הספק לפרטים."</string> + <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"הזן את קוד ה-PIN הרצוי"</string> + <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"אשר את קוד ה-PIN הרצוי"</string> + <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"מבטל נעילה של כרטיס SIM…"</string> + <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"קוד PIN שגוי."</string> + <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"הקלד מספר PIN שאורכו 4 עד 8 ספרות."</string> + <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"קוד PUK צריך להיות בן 8 ספרות או יותר."</string> + <string name="kg_invalid_puk" msgid="3638289409676051243">"הזן מחדש את קוד PUK הנכון. ניסיונות חוזרים ישביתו לצמיתות את כרטיס ה-SIM."</string> + <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"קודי ה-PIN אינם תואמים"</string> + <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"ניסיונות רבים מדי לשרטוט קו ביטול נעילה."</string> + <string name="kg_login_instructions" msgid="1100551261265506448">"כדי לבטל את הנעילה, היכנס באמצעות חשבון Google שלך."</string> + <string name="kg_login_username_hint" msgid="5718534272070920364">"שם משתמש (דוא\"ל)"</string> + <string name="kg_login_password_hint" msgid="9057289103827298549">"סיסמה"</string> + <string name="kg_login_submit_button" msgid="5355904582674054702">"היכנס"</string> + <string name="kg_login_invalid_input" msgid="5754664119319872197">"שם משתמש או סיסמה לא חוקיים."</string> + <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"שכחת את שם המשתמש או הסיסמה?"\n"בקר בכתובת "<b>"google.com/accounts/recovery"</b></string> + <string name="kg_login_checking_password" msgid="1052685197710252395">"בודק חשבון…"</string> + <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"הקלדת מספר PIN שגוי <xliff:g id="NUMBER_0">%d</xliff:g> פעמים. "\n\n"נסה שוב בעוד <xliff:g id="NUMBER_1">%d</xliff:g> שניות."</string> + <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"הקלדת סיסמה שגויה <xliff:g id="NUMBER_0">%d</xliff:g> פעמים."\n\n"נסה שוב בעוד <xliff:g id="NUMBER_1">%d</xliff:g> שניות."</string> + <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"שרטטת את קו ביטול הנעילה באופן שגוי <xliff:g id="NUMBER_0">%d</xliff:g> פעמים. "\n\n"נסה שוב בעוד <xliff:g id="NUMBER_1">%d</xliff:g> שניות."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"ביצעת <xliff:g id="NUMBER_0">%d</xliff:g> ניסיונות שגויים לביטול נעילת הטלפון. לאחר <xliff:g id="NUMBER_1">%d</xliff:g> ניסיונות כושלים נוספים, הטאבלט יעבור איפוס לברירת המחדל של היצרן וכל נתוני המשתמש יאבדו."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"ביצעת <xliff:g id="NUMBER_0">%d</xliff:g> ניסיונות שגויים לביטול נעילת הטלפון. לאחר <xliff:g id="NUMBER_1">%d</xliff:g> ניסיונות כושלים נוספים, הטלפון יעבור איפוס לברירת המחדל של היצרן וכל נתוני המשתמש יאבדו."</string> + <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"ביצעת <xliff:g id="NUMBER">%d</xliff:g> ניסיונות שגויים לביטול נעילת הטאבלט. הטאבלט יעבור כעת איפוס לברירת המחדל של היצרן."</string> + <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"ביצעת <xliff:g id="NUMBER">%d</xliff:g> ניסיונות שגויים לביטול נעילת הטלפון. הטלפון יעבור כעת איפוס לברירת המחדל של היצרן."</string> + <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"שרטטת את קו ביטול הנעילה באופן שגוי <xliff:g id="NUMBER_0">%d</xliff:g> פעמים. לאחר <xliff:g id="NUMBER_1">%d</xliff:g> ניסיונות כושלים נוספים, תתבקש לבטל את נעילת הטאבלט באמצעות חשבון דוא\"ל."\n\n"נסה שוב בעוד <xliff:g id="NUMBER_2">%d</xliff:g> שניות."</string> + <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"שרטטת את קו ביטול הנעילה באופן שגוי <xliff:g id="NUMBER_0">%d</xliff:g> פעמים. לאחר <xliff:g id="NUMBER_1">%d</xliff:g> ניסיונות כושלים נוספים, תתבקש לבטל את נעילת הטלפון באמצעות חשבון דוא\"ל."\n\n"נסה שוב בעוד <xliff:g id="NUMBER_2">%d</xliff:g> שניות."</string> + <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string> + <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"הסר"</string> + <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"לחצן \'הרצועה הקודמת\'"</string> + <string name="keyguard_transport_next_description" msgid="4299258300283778305">"לחצן \'הרצועה הבאה\'"</string> + <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"לחצן \'השהה\'"</string> + <string name="keyguard_transport_play_description" msgid="2924628863741150956">"לחצן \'הפעל\'"</string> + <string name="keyguard_transport_stop_description" msgid="3084179324810575787">"לחצן \'הפסק\'"</string> + <string name="keyguard_carrier_default" msgid="8700650403054042153">"אין קליטה."</string> +</resources> diff --git a/packages/Keyguard/res/values-ja/activitystrings.xml b/packages/Keyguard/res/values-ja/activitystrings.xml new file mode 100644 index 0000000..b0e77f1 --- /dev/null +++ b/packages/Keyguard/res/values-ja/activitystrings.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string> + <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string> + <string name="none_menu_item" msgid="6156747285687551424">"セキュリティなし"</string> + <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string> + <string name="password_menu_item" msgid="1959980499662153160">"パスワード"</string> + <string name="pattern_menu_item" msgid="2987798152175140249">"パターン"</string> + <string name="sim_pin_menu_item" msgid="3962286639645084880">"SIM PIN"</string> + <string name="sim_puk_menu_item" msgid="6190044133008392974">"SIM PUK"</string> + <string name="add_widget_item" msgid="279702152366857415">"ウィジェットを選択..."</string> + <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string> + <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string> + <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string> + <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string> +</resources> diff --git a/packages/Keyguard/res/values-ja/strings.xml b/packages/Keyguard/res/values-ja/strings.xml new file mode 100644 index 0000000..f93d3ad --- /dev/null +++ b/packages/Keyguard/res/values-ja/strings.xml @@ -0,0 +1,138 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"PINコードを入力"</string> + <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"PUKと新しいPINコードを入力"</string> + <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUKコード"</string> + <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"新しいPINコード"</string> + <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"タップしてパスワードを入力"</font></string> + <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"ロックを解除するにはパスワードを入力"</string> + <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"ロックを解除するにはPINを入力"</string> + <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"PINコードが正しくありません。"</string> + <string name="keyguard_label_text" msgid="861796461028298424">"MENU、0キーでロック解除"</string> + <string name="faceunlock_multiple_failures" msgid="754137583022792429">"フェイスアンロックの最大試行回数を超えました"</string> + <string name="keyguard_charged" msgid="3272223906073492454">"充電完了"</string> + <string name="keyguard_plugged_in" msgid="8117572000639998388">"充電中: <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string> + <string name="keyguard_low_battery" msgid="8143808018719173859">"充電してください。"</string> + <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"メニューからロックを解除できます。"</string> + <string name="keyguard_network_locked_message" msgid="9169717779058037168">"ネットワークがロックされました"</string> + <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"SIMカードが挿入されていません"</string> + <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"タブレット内にSIMカードがありません。"</string> + <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"SIMカードが端末に挿入されていません。"</string> + <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"SIMカードを挿入してください。"</string> + <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"SIMカードが見つからないか読み取れません。SIMカードを挿入してください。"</string> + <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"SIMカードは使用できません。"</string> + <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"お使いのSIMカードは永久に無効となっています。"\n"ワイヤレスサービスプロバイダに問い合わせて新しいSIMカードを入手してください。"</string> + <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIMカードはロックされています。"</string> + <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIMカードはPUKでロックされています。"</string> + <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"SIMカードをロック解除しています…"</string> + <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s。ウィジェット%2$d/%3$d。"</string> + <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"ウィジェットを追加します。"</string> + <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"なし"</string> + <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"ロック解除エリアを拡大しました。"</string> + <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"ロック解除エリアを縮小しました。"</string> + <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g>ウィジェットです。"</string> + <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"ユーザー切り替え"</string> + <string name="keyguard_accessibility_status" msgid="8008264603935930611">"ステータス"</string> + <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"カメラ"</string> + <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"メディアコントロール"</string> + <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"ウィジェットの並べ替えを開始しました。"</string> + <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"ウィジェットの並べ替えを終了しました。"</string> + <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g>ウィジェットを削除しました。"</string> + <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"ロック解除エリアを拡大します。"</string> + <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"スライドロックを解除します。"</string> + <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"パターンロックを解除します。"</string> + <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"フェイスアンロックを行います。"</string> + <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"PINロックを解除します。"</string> + <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"パスワードロックを解除します。"</string> + <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"パターンエリアです。"</string> + <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"スライドエリアです。"</string> + <string name="keyguard_accessibility_transport_prev_description" msgid="1337286538318543555">"前のトラックボタン"</string> + <string name="keyguard_accessibility_transport_next_description" msgid="7073928300444909320">"次のトラックボタン"</string> + <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"一時停止ボタン"</string> + <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"再生ボタン"</string> + <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"停止ボタン"</string> + <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string> + <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string> + <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string> + <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string> + <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"キャンセル"</string> + <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"削除"</string> + <string name="keyboardview_keycode_done" msgid="1992571118466679775">"完了"</string> + <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"モードを変更"</string> + <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string> + <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string> + <string name="description_target_unlock" msgid="2228524900439801453">"ロックを解除"</string> + <string name="description_target_camera" msgid="969071997552486814">"カメラ"</string> + <string name="description_target_silent" msgid="893551287746522182">"マナーモード"</string> + <string name="description_target_soundon" msgid="30052466675500172">"サウンドON"</string> + <string name="description_target_search" msgid="3091587249776033139">"検索します"</string> + <string name="description_direction_up" msgid="7169032478259485180">"上にスライドして<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>を行います。"</string> + <string name="description_direction_down" msgid="5087739728639014595">"下にスライドして<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>を行います。"</string> + <string name="description_direction_left" msgid="7207478719805562165">"左にスライドして<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>を行います。"</string> + <string name="description_direction_right" msgid="8034433242579600980">"右にスライドして<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>を行います。"</string> + <string name="user_switched" msgid="3768006783166984410">"現在のユーザーは<xliff:g id="NAME">%1$s</xliff:g>です。"</string> + <string name="kg_emergency_call_label" msgid="684946192523830531">"緊急通報"</string> + <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"パターンを忘れた場合"</string> + <string name="kg_wrong_pattern" msgid="1850806070801358830">"パターンが正しくありません"</string> + <string name="kg_wrong_password" msgid="2333281762128113157">"パスワードが正しくありません"</string> + <string name="kg_wrong_pin" msgid="1131306510833563801">"PINが正しくありません"</string> + <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"<xliff:g id="NUMBER">%d</xliff:g>秒後にもう一度お試しください。"</string> + <string name="kg_pattern_instructions" msgid="398978611683075868">"パターンを入力"</string> + <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"SIM PINを入力"</string> + <string name="kg_pin_instructions" msgid="2377242233495111557">"PINを入力"</string> + <string name="kg_password_instructions" msgid="5753646556186936819">"パスワードを入力"</string> + <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"SIMが無効になりました。続行するにはPUKコードを入力してください。詳しくは携帯通信会社にお問い合わせください。"</string> + <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"希望のPINコードを入力してください"</string> + <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"希望のPINコードを確認してください"</string> + <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"SIMカードのロック解除中…"</string> + <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"PINコードが正しくありません。"</string> + <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"PINは4~8桁の数字で入力してください。"</string> + <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUKコードは8桁以上の番号です。"</string> + <string name="kg_invalid_puk" msgid="3638289409676051243">"正しいPUKコードを再入力してください。誤入力を繰り返すと、SIMが永久に無効になるおそれがあります。"</string> + <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PINコードが一致しません"</string> + <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"パターンの入力を所定の回数以上間違えました。"</string> + <string name="kg_login_instructions" msgid="1100551261265506448">"ロックを解除するにはGoogleアカウントでログインしてください。"</string> + <string name="kg_login_username_hint" msgid="5718534272070920364">"ユーザー名(メール)"</string> + <string name="kg_login_password_hint" msgid="9057289103827298549">"パスワード"</string> + <string name="kg_login_submit_button" msgid="5355904582674054702">"ログイン"</string> + <string name="kg_login_invalid_input" msgid="5754664119319872197">"ユーザー名またはパスワードが無効です。"</string> + <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"ユーザー名またはパスワードを忘れた場合は"\n" "<b>"google.com/accounts/recovery"</b>" にアクセスしてください。"</string> + <string name="kg_login_checking_password" msgid="1052685197710252395">"アカウントをチェックしています…"</string> + <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"PINの入力を<xliff:g id="NUMBER_0">%d</xliff:g>回間違えました。"\n\n"<xliff:g id="NUMBER_1">%d</xliff:g>秒後にもう一度お試しください。"</string> + <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"パスワードの入力を<xliff:g id="NUMBER_0">%d</xliff:g>回間違えました。"\n\n"<xliff:g id="NUMBER_1">%d</xliff:g>秒後にもう一度お試しください。"</string> + <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"ロック解除パターンの入力を<xliff:g id="NUMBER_0">%d</xliff:g>回間違えました。"\n\n"<xliff:g id="NUMBER_1">%d</xliff:g>秒後にもう一度お試しください。"</string> + <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"タブレットのロック解除に<xliff:g id="NUMBER_0">%d</xliff:g>回失敗しました。あと<xliff:g id="NUMBER_1">%d</xliff:g>回失敗すると、タブレットは出荷時設定にリセットされ、ユーザーのデータはすべて失われます。"</string> + <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"携帯端末のロック解除に<xliff:g id="NUMBER_0">%d</xliff:g>回失敗しました。あと<xliff:g id="NUMBER_1">%d</xliff:g>回失敗すると、端末は出荷時設定にリセットされ、ユーザーのデータはすべて失われます。"</string> + <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"タブレットのロック解除を<xliff:g id="NUMBER">%d</xliff:g>回失敗しました。タブレットは出荷時設定にリセットされます。"</string> + <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"携帯端末のロック解除を<xliff:g id="NUMBER">%d</xliff:g>回失敗しました。端末は出荷時設定にリセットされます。"</string> + <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"ロック解除パターンの入力を<xliff:g id="NUMBER_0">%d</xliff:g>回間違えました。あと<xliff:g id="NUMBER_1">%d</xliff:g>回間違えると、タブレットのロック解除にメールアカウントが必要になります。"\n\n"<xliff:g id="NUMBER_2">%d</xliff:g>秒後にもう一度お試しください。"</string> + <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"ロック解除パターンの入力を<xliff:g id="NUMBER_0">%d</xliff:g>回間違えました。あと<xliff:g id="NUMBER_1">%d</xliff:g>回間違えると、携帯端末のロック解除にメールアカウントが必要になります。"\n\n"<xliff:g id="NUMBER_2">%d</xliff:g>秒後にもう一度お試しください。"</string> + <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" - "</string> + <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"削除"</string> + <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"前のトラックボタン"</string> + <string name="keyguard_transport_next_description" msgid="4299258300283778305">"次のトラックボタン"</string> + <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"一時停止ボタン"</string> + <string name="keyguard_transport_play_description" msgid="2924628863741150956">"再生ボタン"</string> + <string name="keyguard_transport_stop_description" msgid="3084179324810575787">"停止ボタン"</string> + <string name="keyguard_carrier_default" msgid="8700650403054042153">"通信サービスはありません。"</string> +</resources> diff --git a/packages/Keyguard/res/values-ko/activitystrings.xml b/packages/Keyguard/res/values-ko/activitystrings.xml new file mode 100644 index 0000000..3aab225 --- /dev/null +++ b/packages/Keyguard/res/values-ko/activitystrings.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string> + <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string> + <string name="none_menu_item" msgid="6156747285687551424">"보안 사용 안함"</string> + <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string> + <string name="password_menu_item" msgid="1959980499662153160">"비밀번호"</string> + <string name="pattern_menu_item" msgid="2987798152175140249">"패턴"</string> + <string name="sim_pin_menu_item" msgid="3962286639645084880">"SIM PIN"</string> + <string name="sim_puk_menu_item" msgid="6190044133008392974">"SIM PUK"</string> + <string name="add_widget_item" msgid="279702152366857415">"위젯 선택..."</string> + <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string> + <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string> + <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string> + <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string> +</resources> diff --git a/packages/Keyguard/res/values-ko/strings.xml b/packages/Keyguard/res/values-ko/strings.xml new file mode 100644 index 0000000..28291c8 --- /dev/null +++ b/packages/Keyguard/res/values-ko/strings.xml @@ -0,0 +1,138 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"PIN 코드 입력"</string> + <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"PUK 및 새 PIN 코드 입력"</string> + <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK 코드"</string> + <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"새 PIN 코드"</string> + <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"비밀번호를 입력하려면 터치"</font></string> + <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"잠금 해제하려면 비밀번호 입력"</string> + <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"잠금을 해제하려면 PIN 입력"</string> + <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"PIN 코드가 잘못되었습니다."</string> + <string name="keyguard_label_text" msgid="861796461028298424">"잠금해제하려면 메뉴를 누른 다음 0을 누릅니다."</string> + <string name="faceunlock_multiple_failures" msgid="754137583022792429">"얼굴 인식 잠금해제 최대 시도 횟수를 초과했습니다."</string> + <string name="keyguard_charged" msgid="3272223906073492454">"충전됨"</string> + <string name="keyguard_plugged_in" msgid="8117572000639998388">"충전 중(<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>)"</string> + <string name="keyguard_low_battery" msgid="8143808018719173859">"충전기를 연결하세요."</string> + <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"잠금해제하려면 메뉴를 누르세요."</string> + <string name="keyguard_network_locked_message" msgid="9169717779058037168">"네트워크 잠김"</string> + <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"SIM 카드가 없습니다."</string> + <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"태블릿에 SIM 카드가 없습니다."</string> + <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"휴대전화에 SIM 카드가 없습니다."</string> + <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"SIM 카드를 삽입하세요."</string> + <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"SIM 카드가 없거나 읽을 수 없습니다. SIM 카드를 삽입하세요."</string> + <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"사용할 수 없는 SIM 카드입니다."</string> + <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"SIM 카드를 완전히 사용할 수 없게 되었습니다."\n"다른 SIM 카드를 사용하려면 무선 서비스 제공업체에 문의하시기 바랍니다."</string> + <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM 카드가 잠겨 있습니다."</string> + <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM 카드가 PUK 잠김 상태입니다."</string> + <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"SIM 카드 잠금해제 중..."</string> + <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. %3$d의 위젯 %2$d."</string> + <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"위젯 추가"</string> + <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"비어 있음"</string> + <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"잠금 해제 영역 확장됨"</string> + <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"잠금 해제 영역 축소됨"</string> + <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> 위젯"</string> + <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"사용자 선택기"</string> + <string name="keyguard_accessibility_status" msgid="8008264603935930611">"상태"</string> + <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"카메라"</string> + <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"미디어 조정"</string> + <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"위젯 재정렬 시작됨"</string> + <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"위젯 재정렬 완료됨"</string> + <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> 위젯이 삭제됨"</string> + <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"잠금 해제 영역 확장"</string> + <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"슬라이드하여 잠금해제합니다."</string> + <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"패턴을 사용하여 잠금해제합니다."</string> + <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"얼굴 인식을 사용하여 잠금해제합니다."</string> + <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"핀을 사용하여 잠금해제합니다."</string> + <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"비밀번호를 사용하여 잠금해제합니다."</string> + <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"패턴을 그리는 부분입니다."</string> + <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"슬라이드하는 부분입니다."</string> + <string name="keyguard_accessibility_transport_prev_description" msgid="1337286538318543555">"이전 트랙 버튼"</string> + <string name="keyguard_accessibility_transport_next_description" msgid="7073928300444909320">"다음 트랙 버튼"</string> + <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"일시중지 버튼"</string> + <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"재생 버튼"</string> + <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"중지 버튼"</string> + <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string> + <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string> + <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string> + <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt 키"</string> + <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"취소"</string> + <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Delete 키"</string> + <string name="keyboardview_keycode_done" msgid="1992571118466679775">"완료"</string> + <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"모드 변경"</string> + <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift 키"</string> + <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter 키"</string> + <string name="description_target_unlock" msgid="2228524900439801453">"잠금 해제"</string> + <string name="description_target_camera" msgid="969071997552486814">"카메라"</string> + <string name="description_target_silent" msgid="893551287746522182">"무음"</string> + <string name="description_target_soundon" msgid="30052466675500172">"사운드 켜기"</string> + <string name="description_target_search" msgid="3091587249776033139">"검색"</string> + <string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>하려면 위로 슬라이드"</string> + <string name="description_direction_down" msgid="5087739728639014595">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>하려면 아래로 슬라이드"</string> + <string name="description_direction_left" msgid="7207478719805562165">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>하려면 왼쪽으로 슬라이드"</string> + <string name="description_direction_right" msgid="8034433242579600980">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>하려면 오른쪽으로 슬라이드"</string> + <string name="user_switched" msgid="3768006783166984410">"현재 사용자는 <xliff:g id="NAME">%1$s</xliff:g>님입니다."</string> + <string name="kg_emergency_call_label" msgid="684946192523830531">"긴급 통화"</string> + <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"패턴을 잊음"</string> + <string name="kg_wrong_pattern" msgid="1850806070801358830">"잘못된 패턴"</string> + <string name="kg_wrong_password" msgid="2333281762128113157">"잘못된 비밀번호"</string> + <string name="kg_wrong_pin" msgid="1131306510833563801">"잘못된 PIN"</string> + <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"<xliff:g id="NUMBER">%d</xliff:g>초 후에 다시 시도해 주세요."</string> + <string name="kg_pattern_instructions" msgid="398978611683075868">"패턴 그리기"</string> + <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"SIM PIN 입력"</string> + <string name="kg_pin_instructions" msgid="2377242233495111557">"PIN 입력"</string> + <string name="kg_password_instructions" msgid="5753646556186936819">"비밀번호 입력"</string> + <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"이제 SIM을 사용할 수 없습니다. 계속하려면 PUK 코드를 입력합니다. 자세한 내용은 이동통신사에 문의하세요."</string> + <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"원하는 PIN 코드 입력"</string> + <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"원하는 PIN 코드 확인"</string> + <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"SIM 카드 잠금해제 중..."</string> + <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"PIN 코드가 잘못되었습니다."</string> + <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"4~8자리 숫자로 된 PIN을 입력하세요."</string> + <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK 코드는 8자리 이상의 숫자여야 합니다."</string> + <string name="kg_invalid_puk" msgid="3638289409676051243">"올바른 PUK 코드를 다시 입력하세요. 입력을 반복해서 시도하면 SIM을 영구적으로 사용할 수 없게 됩니다."</string> + <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN 코드가 일치하지 않음"</string> + <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"패턴 시도 횟수가 너무 많음"</string> + <string name="kg_login_instructions" msgid="1100551261265506448">"잠금해제하려면 Google 계정으로 로그인하세요."</string> + <string name="kg_login_username_hint" msgid="5718534272070920364">"사용자 이름(이메일)"</string> + <string name="kg_login_password_hint" msgid="9057289103827298549">"비밀번호"</string> + <string name="kg_login_submit_button" msgid="5355904582674054702">"로그인"</string> + <string name="kg_login_invalid_input" msgid="5754664119319872197">"사용자 이름 또는 비밀번호가 잘못되었습니다."</string> + <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"사용자 이름이나 비밀번호를 잊어버렸습니까?"\n<b>"google.com/accounts/recovery"</b>" 페이지를 방문하세요."</string> + <string name="kg_login_checking_password" msgid="1052685197710252395">"계정 확인 중…"</string> + <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"PIN을 <xliff:g id="NUMBER_0">%d</xliff:g>회 잘못 입력했습니다. "\n\n"<xliff:g id="NUMBER_1">%d</xliff:g>초 후에 다시 시도해 주세요."</string> + <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"비밀번호를 <xliff:g id="NUMBER_0">%d</xliff:g>회 잘못 입력했습니다. "\n\n"<xliff:g id="NUMBER_1">%d</xliff:g>초 후에 다시 시도해 주세요."</string> + <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"잠금해제 패턴을 <xliff:g id="NUMBER_0">%d</xliff:g>회 잘못 그렸습니다. "\n\n"<xliff:g id="NUMBER_1">%d</xliff:g>초 후에 다시 시도해 주세요."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"태블릿을 잠금해제하려는 시도가 <xliff:g id="NUMBER_0">%d</xliff:g>회 잘못되었습니다. <xliff:g id="NUMBER_1">%d</xliff:g>회 더 실패하면 태블릿이 초기화되고 사용자 데이터가 모두 사라집니다."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"휴대전화를 잠금해제하려는 시도가 <xliff:g id="NUMBER_0">%d</xliff:g>회 잘못되었습니다. <xliff:g id="NUMBER_1">%d</xliff:g>회 더 실패하면 휴대전화가 초기화되고 사용자 데이터가 모두 사라집니다."</string> + <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"태블릿을 잠금해제하려는 시도가 <xliff:g id="NUMBER">%d</xliff:g>회 잘못되었습니다. 태블릿이 초기화됩니다."</string> + <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"휴대전화를 잠금해제하려는 시도가 <xliff:g id="NUMBER">%d</xliff:g>회 잘못되었습니다. 휴대전화가 초기화됩니다."</string> + <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"잠금해제 패턴을 <xliff:g id="NUMBER_0">%d</xliff:g>회 잘못 그렸습니다. <xliff:g id="NUMBER_1">%d</xliff:g>회 더 실패하면 이메일 계정을 사용하여 태블릿을 잠금해제해야 합니다."\n\n" <xliff:g id="NUMBER_2">%d</xliff:g>초 후에 다시 시도해 주세요."</string> + <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"잠금해제 패턴을 <xliff:g id="NUMBER_0">%d</xliff:g>회 잘못 그렸습니다. <xliff:g id="NUMBER_1">%d</xliff:g>회 더 실패하면 이메일 계정을 사용하여 휴대전화를 잠금해제해야 합니다."\n\n" <xliff:g id="NUMBER_2">%d</xliff:g>초 후에 다시 시도해 주세요."</string> + <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string> + <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"삭제"</string> + <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"이전 트랙 버튼"</string> + <string name="keyguard_transport_next_description" msgid="4299258300283778305">"다음 트랙 버튼"</string> + <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"일시중지 버튼"</string> + <string name="keyguard_transport_play_description" msgid="2924628863741150956">"재생 버튼"</string> + <string name="keyguard_transport_stop_description" msgid="3084179324810575787">"중지 버튼"</string> + <string name="keyguard_carrier_default" msgid="8700650403054042153">"서비스 불가"</string> +</resources> diff --git a/core/res/res/values-port/alias.xml b/packages/Keyguard/res/values-land/alias.xml index bf3eecb..7aac5b4 100644 --- a/core/res/res/values-port/alias.xml +++ b/packages/Keyguard/res/values-land/alias.xml @@ -19,5 +19,5 @@ --> <resources> <!-- Alias used to reference one of two possible layouts in keyguard. --> - <item type="layout" name="keyguard_eca">@android:layout/keyguard_emergency_carrier_area</item> + <item type="layout" name="keyguard_eca">@layout/keyguard_emergency_carrier_area_empty</item> </resources> diff --git a/packages/Keyguard/res/values-land/arrays.xml b/packages/Keyguard/res/values-land/arrays.xml new file mode 100644 index 0000000..240b9e4 --- /dev/null +++ b/packages/Keyguard/res/values-land/arrays.xml @@ -0,0 +1,72 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* //device/apps/common/assets/res/any/colors.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ +--> +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + + <!-- Resources for GlowPadView in LockScreen --> + <array name="lockscreen_targets_when_silent"> + <item>@null</item>" + <item>@drawable/ic_action_assist_generic</item> + <item>@drawable/ic_lockscreen_soundon</item> + <item>@drawable/ic_lockscreen_unlock</item> + </array> + + <array name="lockscreen_target_descriptions_when_silent"> + <item>@null</item> + <item>@string/description_target_search</item> + <item>@string/description_target_soundon</item> + <item>@string/description_target_unlock</item> + </array> + + <array name="lockscreen_direction_descriptions"> + <item>@null</item> + <item>@string/description_direction_up</item> + <item>@string/description_direction_left</item> + <item>@string/description_direction_down</item> + </array> + + <array name="lockscreen_targets_when_soundon"> + <item>@null</item> + <item>@drawable/ic_action_assist_generic</item> + <item>@drawable/ic_lockscreen_silent</item> + <item>@drawable/ic_lockscreen_unlock</item> + </array> + + <array name="lockscreen_target_descriptions_when_soundon"> + <item>@null</item> + <item>@string/description_target_search</item> + <item>@string/description_target_silent</item> + <item>@string/description_target_unlock</item> + </array> + + <array name="lockscreen_targets_with_camera"> + <item>@null</item> + <item>@drawable/ic_action_assist_generic</item> + <item>@drawable/ic_lockscreen_camera</item> + <item>@drawable/ic_lockscreen_unlock</item> + </array> + + <array name="lockscreen_target_descriptions_with_camera"> + <item>@null</item> + <item>@string/description_target_search</item> + <item>@string/description_target_camera</item> + <item>@string/description_target_unlock</item> + </array> + +</resources> diff --git a/packages/Keyguard/res/values-land/bools.xml b/packages/Keyguard/res/values-land/bools.xml new file mode 100644 index 0000000..a1dd2e4 --- /dev/null +++ b/packages/Keyguard/res/values-land/bools.xml @@ -0,0 +1,22 @@ +<?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> + <bool name="kg_enable_camera_default_widget">false</bool> + <bool name="kg_top_align_page_shrink_on_bouncer_visible">true</bool> + <bool name="kg_share_status_area">false</bool> + <bool name="kg_sim_puk_account_full_screen">false</bool> +</resources> diff --git a/packages/Keyguard/res/values-land/dimens.xml b/packages/Keyguard/res/values-land/dimens.xml new file mode 100644 index 0000000..64e043c --- /dev/null +++ b/packages/Keyguard/res/values-land/dimens.xml @@ -0,0 +1,51 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* +** +** Copyright 2010, 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> + <!-- Default height of a key in the password keyboard for alpha --> + <dimen name="password_keyboard_key_height_alpha">47dip</dimen> + <!-- Default height of a key in the password keyboard for numeric --> + <dimen name="password_keyboard_key_height_numeric">50dip</dimen> + <!-- Default correction for the space key in the password keyboard --> + <dimen name="password_keyboard_spacebar_vertical_correction">2dip</dimen> + <dimen name="preference_widget_width">72dp</dimen> + + <!-- Size of clock font in LockScreen on Unsecure unlock screen. --> + <dimen name="keyguard_lockscreen_clock_font_size">70sp</dimen> + + <!-- Shift emergency button from the left edge by this amount. Used by landscape layout on + phones --> + <dimen name="kg_emergency_button_shift">30dp</dimen> + + <!-- Space reserved at the bottom of secure views (pin/pattern/password/SIM pin/SIM puk) --> + <dimen name="kg_secure_padding_height">0dp</dimen> + + <!-- Top padding for the widget pager --> + <dimen name="kg_widget_pager_top_padding">0dp</dimen> + + <!-- Bottom padding for the widget pager --> + <dimen name="kg_widget_pager_bottom_padding">0dp</dimen> + + <!-- If the height if keyguard drops below this threshold (most likely + due to the appearance of the IME), then drop the multiuser selector. + Landscape's layout allows this to be smaller than for portrait. --> + <dimen name="kg_squashed_layout_threshold">400dp</dimen> + +</resources> diff --git a/packages/Keyguard/res/values-land/integers.xml b/packages/Keyguard/res/values-land/integers.xml new file mode 100644 index 0000000..020fd23 --- /dev/null +++ b/packages/Keyguard/res/values-land/integers.xml @@ -0,0 +1,26 @@ +<?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. +*/ +--> +<resources> + <!-- Gravity to make KeyguardSelectorView work in multiple orientations + 0x13 == "left|center_vertical" --> + <integer name="kg_selector_gravity">0x13</integer> + <integer name="kg_widget_region_weight">45</integer> + <integer name="kg_security_flipper_weight">55</integer> + <integer name="kg_glowpad_rotation_offset">-90</integer> +</resources> diff --git a/packages/Keyguard/res/values-large/dimens.xml b/packages/Keyguard/res/values-large/dimens.xml new file mode 100644 index 0000000..8cd614d --- /dev/null +++ b/packages/Keyguard/res/values-large/dimens.xml @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* +** Copyright 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> + <!-- Default height of a key in the password keyboard for alpha --> + <dimen name="password_keyboard_key_height_alpha">75dip</dimen> + <!-- Default height of a key in the password keyboard for numeric --> + <dimen name="password_keyboard_key_height_numeric">75dip</dimen> + <!-- keyboardHeight = key_height*4 + key_bottom_gap*3 --> + <dimen name="password_keyboard_height">48.0mm</dimen> + + <!-- Minimum width of the search view text entry area. --> + <dimen name="search_view_text_min_width">192dip</dimen> + + <item type="dimen" name="dialog_min_width_major">55%</item> + <item type="dimen" name="dialog_min_width_minor">80%</item> + + <!-- Preference UI dimensions for larger screens. --> + <dimen name="preference_widget_width">56dp</dimen> +</resources> diff --git a/packages/Keyguard/res/values-lt/activitystrings.xml b/packages/Keyguard/res/values-lt/activitystrings.xml new file mode 100644 index 0000000..9ec21e4 --- /dev/null +++ b/packages/Keyguard/res/values-lt/activitystrings.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string> + <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string> + <string name="none_menu_item" msgid="6156747285687551424">"Neapsaugota"</string> + <string name="pin_menu_item" msgid="1179756433268962311">"PIN kodas"</string> + <string name="password_menu_item" msgid="1959980499662153160">"Slaptažodis"</string> + <string name="pattern_menu_item" msgid="2987798152175140249">"Šablonas"</string> + <string name="sim_pin_menu_item" msgid="3962286639645084880">"SIM kortelės PIN kodas"</string> + <string name="sim_puk_menu_item" msgid="6190044133008392974">"SIM kortelės PUK kodas"</string> + <string name="add_widget_item" msgid="279702152366857415">"Pasirinkite valdiklį..."</string> + <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string> + <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string> + <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string> + <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string> +</resources> diff --git a/packages/Keyguard/res/values-lt/strings.xml b/packages/Keyguard/res/values-lt/strings.xml new file mode 100644 index 0000000..4d6519c --- /dev/null +++ b/packages/Keyguard/res/values-lt/strings.xml @@ -0,0 +1,138 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Įveskite PIN kodą"</string> + <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Įveskite PUK ir naują PIN kodus"</string> + <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK kodas"</string> + <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Naujas PIN kodas"</string> + <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Palieskite, kad įves. slaptaž."</font></string> + <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Jei norite atrakinti, įveskite slaptažodį"</string> + <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Jei norite atrakinti, įveskite PIN kodą"</string> + <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"Neteisingas PIN kodas."</string> + <string name="keyguard_label_text" msgid="861796461028298424">"Jei norite atrakinti, paspauskite „Meniu“ ir 0."</string> + <string name="faceunlock_multiple_failures" msgid="754137583022792429">"Viršijote maksimalų atrakinimo pagal veidą bandymų skaičių"</string> + <string name="keyguard_charged" msgid="3272223906073492454">"Įkrauta"</string> + <string name="keyguard_plugged_in" msgid="8117572000639998388">"Įkraunama, <xliff:g id="NUMBER">%d</xliff:g> <xliff:g id="PERCENT">%%</xliff:g>"</string> + <string name="keyguard_low_battery" msgid="8143808018719173859">"Prijunkite įkroviklį."</string> + <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Jei norite atrakinti, paspauskite „Meniu“."</string> + <string name="keyguard_network_locked_message" msgid="9169717779058037168">"Tinklas užrakintas"</string> + <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"Nėra SIM kortelės"</string> + <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"Planšetiniame kompiuteryje nėra SIM kortelės."</string> + <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"Telefone nėra SIM kortelės."</string> + <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"Įdėkite SIM kortelę."</string> + <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"Trūksta SIM kortelės arba ji neskaitoma. Įdėkite SIM kortelę."</string> + <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"Negalima naudoti SIM kortelės."</string> + <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"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="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM kortelė užrakinta."</string> + <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM kortelė užrakinta PUK kodu."</string> + <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Atrakinama SIM kortelė…"</string> + <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. %2$d valdiklis iš %3$d."</string> + <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"Pridėti valdiklį."</string> + <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"Tuščia"</string> + <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"Atrakinimo sritis išplėsta."</string> + <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"Atrakinimo sritis sutraukta."</string> + <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"Valdiklis <xliff:g id="WIDGET_INDEX">%1$s</xliff:g>."</string> + <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"Naudotojo pasirinkimo valdiklis"</string> + <string name="keyguard_accessibility_status" msgid="8008264603935930611">"Būsena"</string> + <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"Fotoaparatas"</string> + <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"Medijos valdikliai"</string> + <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"Valdiklių pertvarkymas pradėtas."</string> + <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"Valdiklių pertvarkymas baigtas."</string> + <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"Valdiklis <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> ištrintas."</string> + <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"Išplėsti atrakinimo sritį."</string> + <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"Atrakinimas slystant."</string> + <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Atrakinimas pagal piešinį."</string> + <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Atrakinimas pagal veidą."</string> + <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Atrakinimas įvedus PIN kodą."</string> + <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Atrakinimas įvedus slaptažodį."</string> + <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Atrakinimo pagal piešinį sritis."</string> + <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Slydimo sritis."</string> + <string name="keyguard_accessibility_transport_prev_description" msgid="1337286538318543555">"Ankstesnio takelio mygtukas"</string> + <string name="keyguard_accessibility_transport_next_description" msgid="7073928300444909320">"Kito takelio mygtukas"</string> + <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Pristabdymo mygtukas"</string> + <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Paleidimo mygtukas"</string> + <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Sustabdymo mygtukas"</string> + <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string> + <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string> + <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string> + <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string> + <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Atšaukti"</string> + <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Ištrinti"</string> + <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Atlikta"</string> + <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Režimo keitimas"</string> + <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string> + <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Įvesti"</string> + <string name="description_target_unlock" msgid="2228524900439801453">"Atrakinti"</string> + <string name="description_target_camera" msgid="969071997552486814">"Vaizdo kamera"</string> + <string name="description_target_silent" msgid="893551287746522182">"Begarsis"</string> + <string name="description_target_soundon" msgid="30052466675500172">"Garsas įjungtas"</string> + <string name="description_target_search" msgid="3091587249776033139">"Paieška"</string> + <string name="description_direction_up" msgid="7169032478259485180">"Slyskite aukštyn link <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_down" msgid="5087739728639014595">"Slyskite žemyn link <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_left" msgid="7207478719805562165">"Slyskite į kairę link <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_right" msgid="8034433242579600980">"Slyskite į dešinę link <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="user_switched" msgid="3768006783166984410">"Dabartinis naudotojas: <xliff:g id="NAME">%1$s</xliff:g>."</string> + <string name="kg_emergency_call_label" msgid="684946192523830531">"Skambutis pagalbos numeriu"</string> + <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Pamiršau atrakinimo piešinį"</string> + <string name="kg_wrong_pattern" msgid="1850806070801358830">"Netinkamas atrakinimo piešinys"</string> + <string name="kg_wrong_password" msgid="2333281762128113157">"Netinkamas slaptažodis"</string> + <string name="kg_wrong_pin" msgid="1131306510833563801">"Netinkamas PIN kodas"</string> + <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"Bandyti dar kartą po <xliff:g id="NUMBER">%d</xliff:g> sek."</string> + <string name="kg_pattern_instructions" msgid="398978611683075868">"Nupieškite atrakinimo piešinį"</string> + <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Įveskite SIM PIN kodą"</string> + <string name="kg_pin_instructions" msgid="2377242233495111557">"Įveskite PIN kodą"</string> + <string name="kg_password_instructions" msgid="5753646556186936819">"Įveskite slaptažodį"</string> + <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"Dabar SIM neleidžiama. Jei norite tęsti, įveskite PUK kodą. Jei reikia išsamios informacijos, susisiekite su operatoriumi."</string> + <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Įveskite pageidaujamą PIN kodą"</string> + <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Patvirtinkite pageidaujamą PIN kodą"</string> + <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Atrakinama SIM kortelė…"</string> + <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Netinkamas PIN kodas."</string> + <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Įveskite PIN kodą, sudarytą iš 4–8 skaičių."</string> + <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK kodas turėtų būti mažiausiai 8 skaitmenų."</string> + <string name="kg_invalid_puk" msgid="3638289409676051243">"Pakartotinai įveskite tinkamą PUK kodą. Pakartotinai bandant SIM bus neleidžiama visam laikui."</string> + <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN kodai neatitinka"</string> + <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Per daug atrakinimo piešinių bandymų"</string> + <string name="kg_login_instructions" msgid="1100551261265506448">"Jei norite atrakinti, prisijunkite naudodami „Google“ paskyrą."</string> + <string name="kg_login_username_hint" msgid="5718534272070920364">"Naudotojo vardas (el. paštas)"</string> + <string name="kg_login_password_hint" msgid="9057289103827298549">"Slaptažodis"</string> + <string name="kg_login_submit_button" msgid="5355904582674054702">"Prisijungti"</string> + <string name="kg_login_invalid_input" msgid="5754664119319872197">"Netinkamas naudotojo vardas ar slaptažodis."</string> + <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Pamiršote naudotojo vardą ar slaptažodį?"\n"Apsilankykite šiuo adresu: "<b>"google.com/accounts/recovery"</b></string> + <string name="kg_login_checking_password" msgid="1052685197710252395">"Tikrinama paskyra…"</string> + <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"PIN kodą netinkamai įvedėte <xliff:g id="NUMBER_0">%d</xliff:g> k. "\n\n"Bandykite dar kartą po <xliff:g id="NUMBER_1">%d</xliff:g> sek."</string> + <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Neteisingai įvedėte slaptažodį <xliff:g id="NUMBER_0">%d</xliff:g> k. "\n\n"Bandykite dar kartą po <xliff:g id="NUMBER_1">%d</xliff:g> sek."</string> + <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Netinkamai nupiešėte atrakinimo piešinį <xliff:g id="NUMBER_0">%d</xliff:g> k. "\n\n"Bandykite dar kartą po <xliff:g id="NUMBER_1">%d</xliff:g> sek."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"<xliff:g id="NUMBER_0">%d</xliff:g> k. bandėte netinkamai atrakinti planšetinį kompiuterį. Po dar <xliff:g id="NUMBER_1">%d</xliff:g> nesėkm. band. planšetiniame kompiuteryje bus iš naujo nustatyti numatytieji gamyklos nustatymai ir bus prarasti visi naudotojo duomenys."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"<xliff:g id="NUMBER_0">%d</xliff:g> k. bandėte netinkamai atrakinti telefoną. Po dar <xliff:g id="NUMBER_1">%d</xliff:g> nesėkm. band. telefone bus iš naujo nustatyti numatytieji gamyklos nustatymai ir bus prarasti visi naudotojo duomenys."</string> + <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"<xliff:g id="NUMBER">%d</xliff:g> k. bandėte netinkamai atrakinti planšetinį kompiuterį. Planšetiniame kompiuteryje bus iš naujo nustatyti numatytieji gamyklos nustatymai."</string> + <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"<xliff:g id="NUMBER">%d</xliff:g> k. bandėte netinkamai atrakinti telefoną. Telefone bus iš naujo nustatyti numatytieji gamyklos nustatymai."</string> + <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Netinkamai nupiešėte atrakinimo piešinį <xliff:g id="NUMBER_0">%d</xliff:g> k. Po dar <xliff:g id="NUMBER_1">%d</xliff:g> nesėkm. band. būsite paprašyti atrakinti planšetinį kompiuterį naudodami „Google“ prisijungimo duomenis."\n\n" Bandykite dar kartą po <xliff:g id="NUMBER_2">%d</xliff:g> sek."</string> + <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Netinkamai nupiešėte atrakinimo piešinį <xliff:g id="NUMBER_0">%d</xliff:g> k. Po dar <xliff:g id="NUMBER_1">%d</xliff:g> nesėkm. band. būsite paprašyti atrakinti telefoną naudodami „Google“ prisijungimo duomenis."\n\n" Bandykite dar kartą po <xliff:g id="NUMBER_2">%d</xliff:g> sek."</string> + <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" – "</string> + <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Pašalinti"</string> + <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Ankstesnio takelio mygtukas"</string> + <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Kito takelio mygtukas"</string> + <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Pristabdymo mygtukas"</string> + <string name="keyguard_transport_play_description" msgid="2924628863741150956">"Paleidimo mygtukas"</string> + <string name="keyguard_transport_stop_description" msgid="3084179324810575787">"Sustabdymo mygtukas"</string> + <string name="keyguard_carrier_default" msgid="8700650403054042153">"Nėra paslaugos."</string> +</resources> diff --git a/packages/Keyguard/res/values-lv/activitystrings.xml b/packages/Keyguard/res/values-lv/activitystrings.xml new file mode 100644 index 0000000..96807de --- /dev/null +++ b/packages/Keyguard/res/values-lv/activitystrings.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string> + <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string> + <string name="none_menu_item" msgid="6156747285687551424">"Drošība nav iespējota"</string> + <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string> + <string name="password_menu_item" msgid="1959980499662153160">"Parole"</string> + <string name="pattern_menu_item" msgid="2987798152175140249">"Kombinācija"</string> + <string name="sim_pin_menu_item" msgid="3962286639645084880">"SIM PIN"</string> + <string name="sim_puk_menu_item" msgid="6190044133008392974">"SIM PUK"</string> + <string name="add_widget_item" msgid="279702152366857415">"Izvēlēties logrīku..."</string> + <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string> + <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string> + <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string> + <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string> +</resources> diff --git a/packages/Keyguard/res/values-lv/strings.xml b/packages/Keyguard/res/values-lv/strings.xml new file mode 100644 index 0000000..d8c64b5 --- /dev/null +++ b/packages/Keyguard/res/values-lv/strings.xml @@ -0,0 +1,138 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Ievadiet PIN kodu."</string> + <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Ievadiet PUK kodu un jaunu PIN kodu."</string> + <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK kods"</string> + <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Jauns PIN kods"</string> + <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Pieskarieties, lai ievadītu paroli"</font>"."</string> + <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Ievadiet paroli, lai atbloķētu."</string> + <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Lai atbloķētu, ievadiet PIN."</string> + <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"PIN kods nav pareizs."</string> + <string name="keyguard_label_text" msgid="861796461028298424">"Lai atbloķētu, nospiediet Izvēlne, pēc tam 0."</string> + <string name="faceunlock_multiple_failures" msgid="754137583022792429">"Ir pārsniegts maksimālais Autorizācijas pēc sejas mēģinājumu skaits."</string> + <string name="keyguard_charged" msgid="3272223906073492454">"Uzlādēts"</string> + <string name="keyguard_plugged_in" msgid="8117572000639998388">"Notiek uzlāde (<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>)"</string> + <string name="keyguard_low_battery" msgid="8143808018719173859">"Pievienojiet uzlādes ierīci."</string> + <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Lai atbloķētu, nospiediet vienumu Izvēlne."</string> + <string name="keyguard_network_locked_message" msgid="9169717779058037168">"Tīkls ir bloķēts."</string> + <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"Nav SIM kartes."</string> + <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"Planšetdatorā nav SIM kartes."</string> + <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"Tālrunī nav SIM kartes."</string> + <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"Ievietojiet SIM karti."</string> + <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"Nav SIM kartes, vai arī to nevar nolasīt. Ievietojiet SIM karti."</string> + <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"SIM karte nav lietojama."</string> + <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"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="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM karte ir bloķēta."</string> + <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM karte ir bloķēta ar PUK."</string> + <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Notiek SIM kartes atbloķēšana..."</string> + <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. %2$d. logrīks no %3$d."</string> + <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"Pievienot logrīku."</string> + <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"Tukšs"</string> + <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"Atbloķēšanas apgabals ir izvērsts."</string> + <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"Atbloķēšanas apgabals ir sakļauts."</string> + <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"Logrīks <xliff:g id="WIDGET_INDEX">%1$s</xliff:g>."</string> + <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"Lietotāju atlasītājs"</string> + <string name="keyguard_accessibility_status" msgid="8008264603935930611">"Statuss"</string> + <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"Kamera"</string> + <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"Multivides vadīklas"</string> + <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"Logrīku pārkārtošana ir sākta."</string> + <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"Logrīku pārkārtošana ir pabeigta."</string> + <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"Logrīks <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> ir izdzēsts."</string> + <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"Izvērst atbloķēšanas apgabalu."</string> + <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"Autorizācija, velkot ar pirkstu."</string> + <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Autorizācija ar kombināciju."</string> + <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Autorizācija pēc sejas."</string> + <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Autorizācija ar PIN kodu."</string> + <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Autorizācija ar paroli."</string> + <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Kombinācijas ievades apgabals."</string> + <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Apgabals, kur vilkt ar pirkstu."</string> + <string name="keyguard_accessibility_transport_prev_description" msgid="1337286538318543555">"Iepriekšējā ieraksta poga"</string> + <string name="keyguard_accessibility_transport_next_description" msgid="7073928300444909320">"Nākamā ieraksta poga"</string> + <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Pārtraukšanas poga"</string> + <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Atskaņošanas poga"</string> + <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Apturēšanas poga"</string> + <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string> + <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string> + <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string> + <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alternēšanas taustiņš"</string> + <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Atcelt"</string> + <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Dzēšanas taustiņš"</string> + <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Gatavs"</string> + <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Režīma maiņa"</string> + <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Pārslēgšanas taustiņš"</string> + <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Ievadīšanas taustiņš"</string> + <string name="description_target_unlock" msgid="2228524900439801453">"Atbloķēt"</string> + <string name="description_target_camera" msgid="969071997552486814">"Kamera"</string> + <string name="description_target_silent" msgid="893551287746522182">"Klusums"</string> + <string name="description_target_soundon" msgid="30052466675500172">"Skaņa ieslēgta"</string> + <string name="description_target_search" msgid="3091587249776033139">"Meklēt"</string> + <string name="description_direction_up" msgid="7169032478259485180">"Velciet uz augšu, lai veiktu šādu darbību: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_down" msgid="5087739728639014595">"Velciet uz leju, lai veiktu šādu darbību: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_left" msgid="7207478719805562165">"Velciet pa kreisi, lai veiktu šādu darbību: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_right" msgid="8034433242579600980">"Velciet pa labi, lai veiktu šādu darbību: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="user_switched" msgid="3768006783166984410">"Pašreizējais lietotājs: <xliff:g id="NAME">%1$s</xliff:g>."</string> + <string name="kg_emergency_call_label" msgid="684946192523830531">"Ārkārtas izsaukums"</string> + <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Aizmirsu kombināciju"</string> + <string name="kg_wrong_pattern" msgid="1850806070801358830">"Nepareiza kombinācija"</string> + <string name="kg_wrong_password" msgid="2333281762128113157">"Nepareiza parole"</string> + <string name="kg_wrong_pin" msgid="1131306510833563801">"Nepareizs PIN"</string> + <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"Mēģiniet vēlreiz pēc <xliff:g id="NUMBER">%d</xliff:g> sekundēm."</string> + <string name="kg_pattern_instructions" msgid="398978611683075868">"Norādiet savu kombināciju"</string> + <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Ievadiet SIM kartes PIN"</string> + <string name="kg_pin_instructions" msgid="2377242233495111557">"Ievadiet PIN"</string> + <string name="kg_password_instructions" msgid="5753646556186936819">"Ievadiet paroli"</string> + <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"SIM karte ir atspējota. Lai turpinātu, ievadiet PUK kodu. Lai iegūtu detalizētu informāciju, sazinieties ar mobilo sakaru operatoru."</string> + <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Ievadiet vēlamo PIN kodu."</string> + <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Apstipriniet vēlamo PIN."</string> + <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Notiek SIM kartes atbloķēšana..."</string> + <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"PIN kods nav pareizs."</string> + <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Ievadiet PIN, kas sastāv no 4 līdz 8 cipariem."</string> + <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK kodam ir jābūt vismaz 8 ciparus garam."</string> + <string name="kg_invalid_puk" msgid="3638289409676051243">"Atkārtoti ievadiet pareizo PUK kodu. Ja vairākas reizes ievadīsiet to nepareizi, SIM karte tiks neatgriezeniski atspējota."</string> + <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN kodi neatbilst."</string> + <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Pārāk daudz kombinācijas mēģinājumu"</string> + <string name="kg_login_instructions" msgid="1100551261265506448">"Lai atbloķētu, pierakstieties, izmantojot savu Google kontu."</string> + <string name="kg_login_username_hint" msgid="5718534272070920364">"Lietotājvārds (e-pasts)"</string> + <string name="kg_login_password_hint" msgid="9057289103827298549">"Parole"</string> + <string name="kg_login_submit_button" msgid="5355904582674054702">"Pierakstīties"</string> + <string name="kg_login_invalid_input" msgid="5754664119319872197">"Nederīgs lietotājvārds vai parole."</string> + <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Vai aizmirsāt lietotājvārdu vai paroli?"\n"Apmeklējiet vietni "<b>"google.com/accounts/recovery"</b>"."</string> + <string name="kg_login_checking_password" msgid="1052685197710252395">"Notiek konta pārbaude…"</string> + <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Jūs nepareizi ievadījāt PIN <xliff:g id="NUMBER_0">%d</xliff:g> reizes."\n\n"Mēģiniet vēlreiz pēc <xliff:g id="NUMBER_1">%d</xliff:g> sekundēm."</string> + <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Jūs nepareizi ievadījāt paroli <xliff:g id="NUMBER_0">%d</xliff:g> reizes."\n\n"Mēģiniet vēlreiz pēc <xliff:g id="NUMBER_1">%d</xliff:g> sekundēm."</string> + <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Jūs nepareizi norādījāt atbloķēšanas kombināciju <xliff:g id="NUMBER_0">%d</xliff:g> reizes."\n\n"Mēģiniet vēlreiz pēc <xliff:g id="NUMBER_1">%d</xliff:g> sekundēm."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"Jūs nepareizi veicāt planšetdatora atbloķēšanu <xliff:g id="NUMBER_0">%d</xliff:g> reizes. Pēc vēl <xliff:g id="NUMBER_1">%d</xliff:g> neveiksmīgiem mēģinājumiem planšetdatorā tiks atiestatīti rūpnīcas noklusējuma iestatījumi un lietotāja dati tiks zaudēti."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"Jūs nepareizi veicāt tālruņa atbloķēšanu <xliff:g id="NUMBER_0">%d</xliff:g> reizes. Pēc vēl <xliff:g id="NUMBER_1">%d</xliff:g> neveiksmīgiem mēģinājumiem tālrunī tiks atiestatīti rūpnīcas noklusējuma iestatījumi un lietotāja dati tiks zaudēti."</string> + <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"Jūs nepareizi veicāt planšetdatora atbloķēšanu <xliff:g id="NUMBER">%d</xliff:g> reizes. Planšetdatorā tiks atiestatīti rūpnīcas noklusējuma iestatījumi."</string> + <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"Jūs nepareizi veicāt tālruņa atbloķēšanu <xliff:g id="NUMBER">%d</xliff:g> reizes. Tālrunī tiks atiestatīti rūpnīcas noklusējuma iestatījumi."</string> + <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Jūs nepareizi norādījāt atbloķēšanas kombināciju <xliff:g id="NUMBER_0">%d</xliff:g> reizes. Pēc vēl <xliff:g id="NUMBER_1">%d</xliff:g> neveiksmīgiem mēģinājumiem planšetdators būs jāatbloķē, izmantojot e-pasta kontu."\n\n"Mēģiniet vēlreiz pēc <xliff:g id="NUMBER_2">%d</xliff:g> sekundēm."</string> + <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Jūs nepareizi norādījāt atbloķēšanas kombināciju <xliff:g id="NUMBER_0">%d</xliff:g> reizes. Pēc vēl <xliff:g id="NUMBER_1">%d</xliff:g> neveiksmīgiem mēģinājumiem tālrunis būs jāatbloķē, izmantojot e-pasta kontu."\n\n"Mēģiniet vēlreiz pēc <xliff:g id="NUMBER_2">%d</xliff:g> sekundēm."</string> + <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string> + <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Noņemt"</string> + <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Iepriekšējā ieraksta poga"</string> + <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Nākamā ieraksta poga"</string> + <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Pārtraukšanas poga"</string> + <string name="keyguard_transport_play_description" msgid="2924628863741150956">"Atskaņošanas poga"</string> + <string name="keyguard_transport_stop_description" msgid="3084179324810575787">"Apturēšanas poga"</string> + <string name="keyguard_carrier_default" msgid="8700650403054042153">"Nav pakalpojuma."</string> +</resources> diff --git a/packages/Keyguard/res/values-ms/activitystrings.xml b/packages/Keyguard/res/values-ms/activitystrings.xml new file mode 100644 index 0000000..04e2184 --- /dev/null +++ b/packages/Keyguard/res/values-ms/activitystrings.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string> + <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string> + <string name="none_menu_item" msgid="6156747285687551424">"Tiada keselamatan"</string> + <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string> + <string name="password_menu_item" msgid="1959980499662153160">"Kata laluan"</string> + <string name="pattern_menu_item" msgid="2987798152175140249">"Corak"</string> + <string name="sim_pin_menu_item" msgid="3962286639645084880">"PIN SIM"</string> + <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK SIM"</string> + <string name="add_widget_item" msgid="279702152366857415">"Pilih widget..."</string> + <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string> + <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string> + <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string> + <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string> +</resources> diff --git a/packages/Keyguard/res/values-ms/strings.xml b/packages/Keyguard/res/values-ms/strings.xml new file mode 100644 index 0000000..2379755 --- /dev/null +++ b/packages/Keyguard/res/values-ms/strings.xml @@ -0,0 +1,138 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Taip kod PIN"</string> + <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Taip PUK dan kod PIN baharu"</string> + <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"Kod PUK"</string> + <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Kod PIN Baharu"</string> + <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Sentuh untuk menaip kata laluan"</font></string> + <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Taip kata laluan untuk membuka kunci"</string> + <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Taip PIN untuk membuka kunci"</string> + <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"Kod PIN salah."</string> + <string name="keyguard_label_text" msgid="861796461028298424">"Untuk membuka kunci, tekan Menu, kemudian 0."</string> + <string name="faceunlock_multiple_failures" msgid="754137583022792429">"Telah melepasi had cubaan Buka Kunci Wajah"</string> + <string name="keyguard_charged" msgid="3272223906073492454">"Sudah dicas"</string> + <string name="keyguard_plugged_in" msgid="8117572000639998388">"Mengecas, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string> + <string name="keyguard_low_battery" msgid="8143808018719173859">"Sambungkan pengecas anda."</string> + <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Tekan Menu untuk membuka kunci."</string> + <string name="keyguard_network_locked_message" msgid="9169717779058037168">"Rangkaian dikunci"</string> + <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"Tiada kad SIM"</string> + <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"Tiada kad SIM dalam tablet."</string> + <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"Tiada kad SIM dalam telefon."</string> + <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"Masukkan kad SIM."</string> + <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"Kad SIM tiada atau tidak boleh dibaca. Sila masukkan kad SIM."</string> + <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"Kad SIM tidak boleh digunakan."</string> + <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"Kad SIM anda telah dilumpuhkan secara kekal."\n" Hubungi pembekal perkhidmatan wayarles anda untuk mendapatkan kad SIM lain."</string> + <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"Kad SIM dikunci."</string> + <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"Kad SIM dikunci dengan PUK."</string> + <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Membuka kunci kad SIM..."</string> + <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. Widget %2$d dari %3$d."</string> + <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"Tambah widget."</string> + <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"Kosong"</string> + <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"Bahagian buka kunci dikembangkan."</string> + <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"Bahagian buka kunci diruntuhkan."</string> + <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"Widget <xliff:g id="WIDGET_INDEX">%1$s</xliff:g>."</string> + <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"Pemilih pengguna"</string> + <string name="keyguard_accessibility_status" msgid="8008264603935930611">"Status"</string> + <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"Kamera"</string> + <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"Kawalan media"</string> + <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"Penyusunan semula widget dimulakan."</string> + <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"Penyusunan semula widget tamat."</string> + <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"Widget <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> dipadamkan."</string> + <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"Kembangkan bahagian buka kunci."</string> + <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"Buka kunci luncur."</string> + <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Buka kunci corak."</string> + <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Wajah Buka Kunci"</string> + <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Buka kunci pin."</string> + <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Buka kunci kata laluan."</string> + <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Kawasan corak."</string> + <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Kawasan luncur."</string> + <string name="keyguard_accessibility_transport_prev_description" msgid="1337286538318543555">"Butang lagu sebelumnya"</string> + <string name="keyguard_accessibility_transport_next_description" msgid="7073928300444909320">"Butang lagu seterusnya"</string> + <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Butang jeda"</string> + <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Butang main"</string> + <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Butang berhenti"</string> + <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string> + <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string> + <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string> + <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string> + <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Batal"</string> + <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Padam"</string> + <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Selesai"</string> + <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Perubahan mod"</string> + <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string> + <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Masuk"</string> + <string name="description_target_unlock" msgid="2228524900439801453">"Buka kunci"</string> + <string name="description_target_camera" msgid="969071997552486814">"Kamera"</string> + <string name="description_target_silent" msgid="893551287746522182">"Senyap"</string> + <string name="description_target_soundon" msgid="30052466675500172">"Bunyi dihidupkan"</string> + <string name="description_target_search" msgid="3091587249776033139">"Carian"</string> + <string name="description_direction_up" msgid="7169032478259485180">"Luncurkan ke atas untuk <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_down" msgid="5087739728639014595">"Luncurkan ke bawah untuk <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_left" msgid="7207478719805562165">"Luncurkan ke kiri untuk <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_right" msgid="8034433242579600980">"Luncurkan ke kanan untuk <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="user_switched" msgid="3768006783166984410">"Pengguna semasa <xliff:g id="NAME">%1$s</xliff:g>."</string> + <string name="kg_emergency_call_label" msgid="684946192523830531">"Panggilan kecemasan"</string> + <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Lupa Corak"</string> + <string name="kg_wrong_pattern" msgid="1850806070801358830">"Corak Salah"</string> + <string name="kg_wrong_password" msgid="2333281762128113157">"Kata Laluan Salah"</string> + <string name="kg_wrong_pin" msgid="1131306510833563801">"PIN salah"</string> + <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"Cuba lagi dalam <xliff:g id="NUMBER">%d</xliff:g> saat."</string> + <string name="kg_pattern_instructions" msgid="398978611683075868">"Lukiskan corak anda"</string> + <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Masukkan PIN SIM"</string> + <string name="kg_pin_instructions" msgid="2377242233495111557">"Masukkan PIN"</string> + <string name="kg_password_instructions" msgid="5753646556186936819">"Masukkan Kata Laluan"</string> + <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"Kini SIM dilumpuhkan. Masukkan kod PUK untuk meneruskan. Hubungi pembawa untuk butiran."</string> + <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Masukkan kod PIN yang diingini"</string> + <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Sahkan kod PIN yang diingini"</string> + <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Membuka kunci kad SIM..."</string> + <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Kod PIN salah."</string> + <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Taipkan PIN yang mengandungi 4 hingga 8 nombor."</string> + <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"Kod PUK mestilah 8 nombor atau lebih."</string> + <string name="kg_invalid_puk" msgid="3638289409676051243">"Masukkan semula kod PIN yang betul. Percubaan berulang akan melumpuhkan SIM secara kekal."</string> + <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"Kod PIN tidak sepadan"</string> + <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Terlalu banyak percubaan melukis corak"</string> + <string name="kg_login_instructions" msgid="1100551261265506448">"Untuk membuka kunci, log masuk dengan akaun Google anda."</string> + <string name="kg_login_username_hint" msgid="5718534272070920364">"Nama Pengguna (E-mel)"</string> + <string name="kg_login_password_hint" msgid="9057289103827298549">"Kata laluan"</string> + <string name="kg_login_submit_button" msgid="5355904582674054702">"Log masuk"</string> + <string name="kg_login_invalid_input" msgid="5754664119319872197">"Nama pengguna atau kata laluan tidak sah."</string> + <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Lupa nama pengguna atau kata laluan anda?"\n"Lawati"<b>"google.com/accounts/recovery"</b>"."</string> + <string name="kg_login_checking_password" msgid="1052685197710252395">"Menyemak akaun…"</string> + <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Anda telah menaip PIN anda secara salah sebanyak <xliff:g id="NUMBER_0">%d</xliff:g> kali. "\n\n"Cuba lagi dalam <xliff:g id="NUMBER_1">%d</xliff:g> saat."</string> + <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Anda telah menaip kata laluan anda secara salah sebanyak <xliff:g id="NUMBER_0">%d</xliff:g> kali. "\n\n"Cuba lagi dalam <xliff:g id="NUMBER_1">%d</xliff:g> saat."</string> + <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Anda telah tersilap melukis corak buka kunci anda sebanyak <xliff:g id="NUMBER_0">%d</xliff:g> kali. "\n\n"Cuba lagi dalam <xliff:g id="NUMBER_1">%d</xliff:g> saat."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"Anda telah mencuba untuk membuka kunci tablet dengan salah sebanyak <xliff:g id="NUMBER_0">%d</xliff:g> kali. Selepas <xliff:g id="NUMBER_1">%d</xliff:g> lagi percubaan yang tidak berjaya, tablet akan ditetapkan semula kepada tetapan lalai kilang dan semua data pengguna akan hilang."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"Anda telah mencuba untuk membuka kunci telefon dengan salah sebanyak <xliff:g id="NUMBER_0">%d</xliff:g> kali. Selepas <xliff:g id="NUMBER_1">%d</xliff:g> lagi percubaan yang tidak berjaya, telefon akan ditetapkan semula kepada tetapan lalai kilang dan semua data pengguna akan hilang."</string> + <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"Anda telah mencuba untuk membuka kunci tablet secara salah sebanyak <xliff:g id="NUMBER">%d</xliff:g> kali. Tablet kini akan ditetapkan semula ke tetapan lalai kilang."</string> + <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"Anda telah mencuba untuk membuka kunci telefon secara salah sebanyak <xliff:g id="NUMBER">%d</xliff:g> kali. Telefon kini akan ditetapkan semula ke tetapan lalai kilang."</string> + <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Anda telah tersilap melukis corak buka kunci sebanyak <xliff:g id="NUMBER_0">%d</xliff:g> kali. Selepas <xliff:g id="NUMBER_1">%d</xliff:g> lagi percubaan yang tidak berjaya, anda akan diminta membuka kunci tablet anda menggunakan log masuk Google anda."\n\n" Cuba lagi dalam <xliff:g id="NUMBER_2">%d</xliff:g> saat."</string> + <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Anda telah tersilap lukis corak buka kunci sebanyak <xliff:g id="NUMBER_0">%d</xliff:g> kali. Selepas <xliff:g id="NUMBER_1">%d</xliff:g> lagi percubaan yang tidak berjaya, anda akan diminta membuka kunci telefon anda menggunakan log masuk Google anda."\n\n" Cuba lagi dalam <xliff:g id="NUMBER_2">%d</xliff:g> saat."</string> + <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string> + <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Alih keluar"</string> + <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Butang lagu sebelumnya"</string> + <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Butang lagu seterusnya"</string> + <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Butang jeda"</string> + <string name="keyguard_transport_play_description" msgid="2924628863741150956">"Butang main"</string> + <string name="keyguard_transport_stop_description" msgid="3084179324810575787">"Butang berhenti"</string> + <string name="keyguard_carrier_default" msgid="8700650403054042153">"Tiada perkhidmatan."</string> +</resources> diff --git a/packages/Keyguard/res/values-nb/activitystrings.xml b/packages/Keyguard/res/values-nb/activitystrings.xml new file mode 100644 index 0000000..015df15 --- /dev/null +++ b/packages/Keyguard/res/values-nb/activitystrings.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string> + <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string> + <string name="none_menu_item" msgid="6156747285687551424">"Ingen sikkerhet"</string> + <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string> + <string name="password_menu_item" msgid="1959980499662153160">"Passord"</string> + <string name="pattern_menu_item" msgid="2987798152175140249">"Mønster"</string> + <string name="sim_pin_menu_item" msgid="3962286639645084880">"Personlig kode for SIM-kort"</string> + <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK-kode for SIM-kort"</string> + <string name="add_widget_item" msgid="279702152366857415">"Velg modul"</string> + <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string> + <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string> + <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string> + <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string> +</resources> diff --git a/packages/Keyguard/res/values-nb/strings.xml b/packages/Keyguard/res/values-nb/strings.xml new file mode 100644 index 0000000..623d640 --- /dev/null +++ b/packages/Keyguard/res/values-nb/strings.xml @@ -0,0 +1,138 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Skriv inn PIN-kode"</string> + <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Skriv inn PUK-kode og ny personlig kode"</string> + <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK-kode"</string> + <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Ny PIN-kode"</string> + <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Trykk for å skrive inn passord"</font></string> + <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Skriv inn passord for å låse opp"</string> + <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Skriv inn PIN-kode for å låse opp"</string> + <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"Feil personlig kode."</string> + <string name="keyguard_label_text" msgid="861796461028298424">"For å låse opp, trykk på menyknappen og deretter 0."</string> + <string name="faceunlock_multiple_failures" msgid="754137583022792429">"Du har overskredet grensen for opplåsingsforsøk med Ansiktslås"</string> + <string name="keyguard_charged" msgid="3272223906073492454">"Oppladet"</string> + <string name="keyguard_plugged_in" msgid="8117572000639998388">"Lader: <xliff:g id="NUMBER">%d</xliff:g> <xliff:g id="PERCENT">%%</xliff:g>"</string> + <string name="keyguard_low_battery" msgid="8143808018719173859">"Koble til laderen."</string> + <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Trykk på Meny for å låse opp."</string> + <string name="keyguard_network_locked_message" msgid="9169717779058037168">"Nettverk låst"</string> + <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"SIM-kortet mangler"</string> + <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"Nettbrettet mangler SIM-kort."</string> + <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"Telefonen mangler SIM-kort."</string> + <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"Sett inn et SIM-kort."</string> + <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"SIM-kort mangler eller er uleselig. Sett inn et SIM-kort."</string> + <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"Ubrukelig SIM-kort."</string> + <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"SIM-kortet er deaktivert permanent."\n"Ta kontakt med leverandøren av trådløstjenesten for å få et nytt SIM-kort."</string> + <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM-kortet er låst."</string> + <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM-kortet er PUK-låst."</string> + <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Låser opp SIM-kortet ..."</string> + <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. Modul %2$d av %3$d."</string> + <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"Legg til modul."</string> + <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"Tom"</string> + <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"Opplåsingsfeltet vises."</string> + <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"Opplåsingsfeltet skjules."</string> + <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g>-modul."</string> + <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"Brukervelgeren"</string> + <string name="keyguard_accessibility_status" msgid="8008264603935930611">"Status"</string> + <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"Kamera"</string> + <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"Mediekontroll"</string> + <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"Endring av modulplasseringen har startet."</string> + <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"Endringen av modulplasseringen er ferdig."</string> + <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"Modulen <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> ble slettet."</string> + <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"Vis opplåsingsfeltet."</string> + <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"Opplåsning ved å dra med fingeren."</string> + <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Mønsteropplåsning."</string> + <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Ansiktsopplåsning."</string> + <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"PIN-opplåsning."</string> + <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Passordopplåsning."</string> + <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Mønsterområde."</string> + <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Dra-felt."</string> + <string name="keyguard_accessibility_transport_prev_description" msgid="1337286538318543555">"Forrige spor-knapp"</string> + <string name="keyguard_accessibility_transport_next_description" msgid="7073928300444909320">"Neste spor-knapp"</string> + <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Pause-knapp"</string> + <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Avspillingsknapp"</string> + <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Stopp-knapp"</string> + <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string> + <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string> + <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string> + <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string> + <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Avbryt"</string> + <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Slett"</string> + <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Ferdig"</string> + <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Modusendring"</string> + <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string> + <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string> + <string name="description_target_unlock" msgid="2228524900439801453">"Lås opp"</string> + <string name="description_target_camera" msgid="969071997552486814">"Kamera"</string> + <string name="description_target_silent" msgid="893551287746522182">"Stille"</string> + <string name="description_target_soundon" msgid="30052466675500172">"Lyd på"</string> + <string name="description_target_search" msgid="3091587249776033139">"Søk"</string> + <string name="description_direction_up" msgid="7169032478259485180">"Dra opp for å <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_down" msgid="5087739728639014595">"Dra ned for å <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_left" msgid="7207478719805562165">"Dra til venstre for å <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_right" msgid="8034433242579600980">"Dra til høyre for å <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="user_switched" msgid="3768006783166984410">"Gjeldende bruker: <xliff:g id="NAME">%1$s</xliff:g>."</string> + <string name="kg_emergency_call_label" msgid="684946192523830531">"Nødnummer"</string> + <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Har du glemt mønsteret?"</string> + <string name="kg_wrong_pattern" msgid="1850806070801358830">"Feil mønster"</string> + <string name="kg_wrong_password" msgid="2333281762128113157">"Feil passord"</string> + <string name="kg_wrong_pin" msgid="1131306510833563801">"Feil PIN-kode"</string> + <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"Prøv på nytt om <xliff:g id="NUMBER">%d</xliff:g> sekunder."</string> + <string name="kg_pattern_instructions" msgid="398978611683075868">"Tegn mønsteret ditt"</string> + <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Skriv inn PIN-koden for SIM-kortet"</string> + <string name="kg_pin_instructions" msgid="2377242233495111557">"Skriv inn PIN-koden"</string> + <string name="kg_password_instructions" msgid="5753646556186936819">"Skriv inn passordet"</string> + <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"SIM-kortet er nå deaktivert. Skriv inn PUK-koden for å fortsette. Ta kontakt med operatøren for mer informasjon."</string> + <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Tast inn ønsket PIN-kode"</string> + <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Bekreft ønsket PIN-kode"</string> + <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Låser opp SIM-kortet ..."</string> + <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Feil PIN-kode."</string> + <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Skriv inn en PIN-kode på fire til åtte sifre."</string> + <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK-koden skal være på åtte eller flere siffer."</string> + <string name="kg_invalid_puk" msgid="3638289409676051243">"Skriv inn den korrekte PUK-koden på nytt. Gjentatte forsøk kommer til å deaktivere SIM-kortet."</string> + <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN-kodene stemmer ikke overens"</string> + <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"For mange forsøk på tegning av mønster"</string> + <string name="kg_login_instructions" msgid="1100551261265506448">"Logg deg på med Google-kontoen din for å låse opp."</string> + <string name="kg_login_username_hint" msgid="5718534272070920364">"Brukernavn (e-postadresse)"</string> + <string name="kg_login_password_hint" msgid="9057289103827298549">"Passord"</string> + <string name="kg_login_submit_button" msgid="5355904582674054702">"Logg på"</string> + <string name="kg_login_invalid_input" msgid="5754664119319872197">"Ugyldig brukernavn eller passord."</string> + <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Har du glemt brukernavnet eller passordet?"\n"Gå til "<b>"google.com/accounts/recovery"</b>"."</string> + <string name="kg_login_checking_password" msgid="1052685197710252395">"Sjekker kontoen ..."</string> + <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Du har oppgitt feil PIN-kode <xliff:g id="NUMBER_0">%d</xliff:g> ganger. "\n\n"Prøv på nytt om <xliff:g id="NUMBER_1">%d</xliff:g> sekunder."</string> + <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Du har tastet inn passordet ditt feil <xliff:g id="NUMBER_0">%d</xliff:g> ganger. "\n\n"Prøv på nytt om <xliff:g id="NUMBER_1">%d</xliff:g> sekunder."</string> + <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Du har tegnet opplåsningsmønsteret ditt feil <xliff:g id="NUMBER_0">%d</xliff:g> ganger. "\n\n"Prøv på nytt om <xliff:g id="NUMBER_1">%d</xliff:g> sekunder."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"Du har oppgitt feil opplåsningspassord for nettbrettet <xliff:g id="NUMBER_0">%d</xliff:g> ganger. Etter ytterligere <xliff:g id="NUMBER_1">%d</xliff:g> gale forsøk, tilbakestilles nettbrettet til fabrikkstandard og all data går tapt."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"Du har oppgitt feil opplåsningspassord for telefonen <xliff:g id="NUMBER_0">%d</xliff:g> ganger. Etter ytterligere <xliff:g id="NUMBER_1">%d</xliff:g> gale forsøk, tilbakestilles telefonen til fabrikkstandard og all data går tapt."</string> + <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"Du har oppgitt feil opplåsningspassord for nettbrettet <xliff:g id="NUMBER">%d</xliff:g> ganger. Telefonen tilbakestilles nå til fabrikkstandard."</string> + <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"Du har oppgitt feil opplåsningspassord for telefonen <xliff:g id="NUMBER">%d</xliff:g> ganger. Telefonen tilbakestilles nå til fabrikkstandard."</string> + <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Du har tegnet opplåsningsmønsteret feil <xliff:g id="NUMBER_0">%d</xliff:g> ganger. Etter ytterligere <xliff:g id="NUMBER_1">%d</xliff:g> gale forsøk, blir du bedt om å låse opp nettbrettet via en e-postkonto."\n\n" Prøv på nytt om <xliff:g id="NUMBER_2">%d</xliff:g> sekunder."</string> + <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Du har tegnet opplåsningsmønsteret feil <xliff:g id="NUMBER_0">%d</xliff:g> ganger. Etter ytterligere <xliff:g id="NUMBER_1">%d</xliff:g> gale forsøk, blir du bedt om å låse opp telefonen via en e-postkonto."\n\n" Prøv på nytt om <xliff:g id="NUMBER_2">%d</xliff:g> sekunder."</string> + <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string> + <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Fjern"</string> + <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Forrige spor-knapp"</string> + <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Neste spor-knapp"</string> + <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Pause-knapp"</string> + <string name="keyguard_transport_play_description" msgid="2924628863741150956">"Avspillingsknapp"</string> + <string name="keyguard_transport_stop_description" msgid="3084179324810575787">"Stopp-knappen"</string> + <string name="keyguard_carrier_default" msgid="8700650403054042153">"Ingen tjeneste."</string> +</resources> diff --git a/packages/Keyguard/res/values-nl/activitystrings.xml b/packages/Keyguard/res/values-nl/activitystrings.xml new file mode 100644 index 0000000..fcb0be9 --- /dev/null +++ b/packages/Keyguard/res/values-nl/activitystrings.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string> + <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string> + <string name="none_menu_item" msgid="6156747285687551424">"Geen beveiliging"</string> + <string name="pin_menu_item" msgid="1179756433268962311">"Pincode"</string> + <string name="password_menu_item" msgid="1959980499662153160">"Wachtwoord"</string> + <string name="pattern_menu_item" msgid="2987798152175140249">"Patroon"</string> + <string name="sim_pin_menu_item" msgid="3962286639645084880">"Pincode van simkaart"</string> + <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK-code van simkaart"</string> + <string name="add_widget_item" msgid="279702152366857415">"Widget kiezen…"</string> + <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string> + <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string> + <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string> + <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string> +</resources> diff --git a/packages/Keyguard/res/values-nl/strings.xml b/packages/Keyguard/res/values-nl/strings.xml new file mode 100644 index 0000000..ad4e841 --- /dev/null +++ b/packages/Keyguard/res/values-nl/strings.xml @@ -0,0 +1,138 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Pincode typen"</string> + <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Geef de PUK-code en de nieuwe pincode op"</string> + <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK-code"</string> + <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Nieuwe pincode"</string> + <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Raak aan om wachtwoord in te voeren"</font></string> + <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Typ het wachtwoord om te ontgrendelen"</string> + <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Typ pincode om te ontgrendelen"</string> + <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"Onjuiste pincode."</string> + <string name="keyguard_label_text" msgid="861796461028298424">"Druk op \'Menu\' en vervolgens op 0 om te ontgrendelen."</string> + <string name="faceunlock_multiple_failures" msgid="754137583022792429">"Maximaal aantal pogingen voor Face Unlock overschreden"</string> + <string name="keyguard_charged" msgid="3272223906073492454">"Opgeladen"</string> + <string name="keyguard_plugged_in" msgid="8117572000639998388">"Opladen, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string> + <string name="keyguard_low_battery" msgid="8143808018719173859">"Sluit de oplader aan."</string> + <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Druk op \'Menu\' om te ontgrendelen."</string> + <string name="keyguard_network_locked_message" msgid="9169717779058037168">"Netwerk vergrendeld"</string> + <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"Geen simkaart"</string> + <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"Geen simkaart in tablet."</string> + <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"Geen simkaart in telefoon."</string> + <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"Plaats een simkaart."</string> + <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"De simkaart ontbreekt of kan niet worden gelezen. Plaats een simkaart."</string> + <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"Onbruikbare simkaart."</string> + <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"Uw simkaart is permanent uitgeschakeld."\n" Neem contact op met uw mobiele serviceprovider voor een nieuwe simkaart."</string> + <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"Simkaart is vergrendeld."</string> + <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"Simkaart is vergrendeld met PUK-code."</string> + <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Simkaart ontgrendelen…"</string> + <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. Widget %2$d van %3$d."</string> + <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"Widget toevoegen."</string> + <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"Leeg"</string> + <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"Ontgrendelingsgebied uitgevouwen."</string> + <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"Ontgrendelingsgebied samengevouwen."</string> + <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"Widget <xliff:g id="WIDGET_INDEX">%1$s</xliff:g>."</string> + <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"Gebruikersselectie"</string> + <string name="keyguard_accessibility_status" msgid="8008264603935930611">"Status"</string> + <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"Camera"</string> + <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"Mediabediening"</string> + <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"Opnieuw indelen van widget gestart."</string> + <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"Opnieuw indelen van widget beëindigd."</string> + <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"Widget <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> verwijderd."</string> + <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"Ontgrendelingsgebied uitvouwen."</string> + <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"Ontgrendeling via schuiven."</string> + <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Ontgrendeling via patroon."</string> + <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Ontgrendeling via gezichtsherkenning."</string> + <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Ontgrendeling via pincode."</string> + <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Ontgrendeling via wachtwoord."</string> + <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Tekengebied voor patroon."</string> + <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Schuifgebied."</string> + <string name="keyguard_accessibility_transport_prev_description" msgid="1337286538318543555">"Knop voor vorig nummer"</string> + <string name="keyguard_accessibility_transport_next_description" msgid="7073928300444909320">"Knop voor volgend nummer"</string> + <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Knop voor onderbreken"</string> + <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Knop voor afspelen"</string> + <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Knop voor stoppen"</string> + <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string> + <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string> + <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"Alt"</string> + <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string> + <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Annuleren"</string> + <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Delete"</string> + <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Gereed"</string> + <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Modus wijzigen"</string> + <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string> + <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string> + <string name="description_target_unlock" msgid="2228524900439801453">"Ontgrendelen"</string> + <string name="description_target_camera" msgid="969071997552486814">"Camera"</string> + <string name="description_target_silent" msgid="893551287746522182">"Stil"</string> + <string name="description_target_soundon" msgid="30052466675500172">"Geluid aan"</string> + <string name="description_target_search" msgid="3091587249776033139">"Zoeken"</string> + <string name="description_direction_up" msgid="7169032478259485180">"Veeg omhoog voor <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_down" msgid="5087739728639014595">"Veeg omlaag voor <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_left" msgid="7207478719805562165">"Veeg naar links voor <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_right" msgid="8034433242579600980">"Veeg naar rechts voor <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="user_switched" msgid="3768006783166984410">"Huidige gebruiker <xliff:g id="NAME">%1$s</xliff:g>."</string> + <string name="kg_emergency_call_label" msgid="684946192523830531">"Noodoproep"</string> + <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Patroon vergeten"</string> + <string name="kg_wrong_pattern" msgid="1850806070801358830">"Onjuist patroon"</string> + <string name="kg_wrong_password" msgid="2333281762128113157">"Onjuist wachtwoord"</string> + <string name="kg_wrong_pin" msgid="1131306510833563801">"Onjuiste pincode"</string> + <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"Probeer het over <xliff:g id="NUMBER">%d</xliff:g> seconden opnieuw."</string> + <string name="kg_pattern_instructions" msgid="398978611683075868">"Teken uw patroon"</string> + <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Geef de pincode van de simkaart op"</string> + <string name="kg_pin_instructions" msgid="2377242233495111557">"Pincode opgeven"</string> + <string name="kg_password_instructions" msgid="5753646556186936819">"Wachtwoord invoeren"</string> + <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"De simkaart is nu uitgeschakeld. Geef de PUK-code op om door te gaan. Neem contact op met de provider voor informatie."</string> + <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Gewenste pincode opgeven"</string> + <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Gewenste pincode bevestigen"</string> + <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Simkaart ontgrendelen..."</string> + <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Onjuiste pincode."</string> + <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Voer een pincode van 4 tot 8 cijfers in."</string> + <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"De PUK-code is minimaal acht nummers lang."</string> + <string name="kg_invalid_puk" msgid="3638289409676051243">"Geef de juiste PUK-code opnieuw op. Bij herhaalde pogingen wordt de simkaart permanent uitgeschakeld."</string> + <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"Pincodes komen niet overeen"</string> + <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Te veel patroonpogingen"</string> + <string name="kg_login_instructions" msgid="1100551261265506448">"Als u wilt ontgrendelen, moet u inloggen op uw Google-account."</string> + <string name="kg_login_username_hint" msgid="5718534272070920364">"Gebruikersnaam (e-mail)"</string> + <string name="kg_login_password_hint" msgid="9057289103827298549">"Wachtwoord"</string> + <string name="kg_login_submit_button" msgid="5355904582674054702">"Inloggen"</string> + <string name="kg_login_invalid_input" msgid="5754664119319872197">"Ongeldige gebruikersnaam of wachtwoord."</string> + <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Bent u uw gebruikersnaam of wachtwoord vergeten?"\n"Ga naar "<b>"google.com/accounts/recovery"</b>"."</string> + <string name="kg_login_checking_password" msgid="1052685197710252395">"Account controleren…"</string> + <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"U heeft uw pincode <xliff:g id="NUMBER_0">%d</xliff:g> keer onjuist getypt. "\n\n"Probeer het over <xliff:g id="NUMBER_1">%d</xliff:g> seconden opnieuw."</string> + <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"U heeft uw wachtwoord <xliff:g id="NUMBER_0">%d</xliff:g> keer onjuist getypt. "\n\n"Probeer het over <xliff:g id="NUMBER_1">%d</xliff:g> seconden opnieuw."</string> + <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"U heeft uw ontgrendelingspatroon <xliff:g id="NUMBER_0">%d</xliff:g> keer onjuist getekend. "\n\n"Probeer het over <xliff:g id="NUMBER_1">%d</xliff:g> seconden opnieuw."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"U heeft <xliff:g id="NUMBER_0">%d</xliff:g> keer geprobeerd de tablet op een onjuiste manier te ontgrendelen. Na nog eens <xliff:g id="NUMBER_1">%d</xliff:g> mislukte pogingen worden de fabrieksinstellingen hersteld op de tablet en gaan alle gebruikersgegevens verloren."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"U heeft nu <xliff:g id="NUMBER_0">%d</xliff:g> keer geprobeerd de telefoon op een onjuiste manier te ontgrendelen. Na nog eens <xliff:g id="NUMBER_1">%d</xliff:g> mislukte pogingen worden de fabrieksinstellingen hersteld op de telefoon en gaan alle gebruikersgegevens verloren."</string> + <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"U heeft <xliff:g id="NUMBER">%d</xliff:g> keer geprobeerd de tablet op een onjuiste manier te ontgrendelen. De fabrieksinstellingen worden nu hersteld op de tablet."</string> + <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"U heeft <xliff:g id="NUMBER">%d</xliff:g> keer geprobeerd de telefoon op een onjuiste manier te ontgrendelen. De fabrieksinstellingen worden nu hersteld op de telefoon."</string> + <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"U heeft uw ontgrendelingspatroon <xliff:g id="NUMBER_0">%d</xliff:g> keer onjuist getekend. Na nog eens <xliff:g id="NUMBER_1">%d</xliff:g> mislukte pogingen wordt u gevraagd uw tablet te ontgrendelen via een e-mailaccount."\n\n" Probeer het over <xliff:g id="NUMBER_2">%d</xliff:g> seconden opnieuw."</string> + <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"U heeft uw ontgrendelingspatroon <xliff:g id="NUMBER_0">%d</xliff:g> keer onjuist getekend. Na nog eens <xliff:g id="NUMBER_1">%d</xliff:g> mislukte pogingen wordt u gevraagd uw telefoon te ontgrendelen via een e-mailaccount."\n\n" Probeer het over <xliff:g id="NUMBER_2">%d</xliff:g> seconden opnieuw."</string> + <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string> + <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Verwijderen"</string> + <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Knop voor vorig nummer"</string> + <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Knop voor volgend nummer"</string> + <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Knop voor onderbreken"</string> + <string name="keyguard_transport_play_description" msgid="2924628863741150956">"Knop voor afspelen"</string> + <string name="keyguard_transport_stop_description" msgid="3084179324810575787">"Knop voor stoppen"</string> + <string name="keyguard_carrier_default" msgid="8700650403054042153">"Geen service"</string> +</resources> diff --git a/packages/Keyguard/res/values-pl/activitystrings.xml b/packages/Keyguard/res/values-pl/activitystrings.xml new file mode 100644 index 0000000..f04170e --- /dev/null +++ b/packages/Keyguard/res/values-pl/activitystrings.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string> + <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string> + <string name="none_menu_item" msgid="6156747285687551424">"Bez zabezpieczeń"</string> + <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string> + <string name="password_menu_item" msgid="1959980499662153160">"Hasło"</string> + <string name="pattern_menu_item" msgid="2987798152175140249">"Wzór"</string> + <string name="sim_pin_menu_item" msgid="3962286639645084880">"PIN do karty SIM"</string> + <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK do karty SIM"</string> + <string name="add_widget_item" msgid="279702152366857415">"Wybierz widżet..."</string> + <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string> + <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string> + <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string> + <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string> +</resources> diff --git a/packages/Keyguard/res/values-pl/strings.xml b/packages/Keyguard/res/values-pl/strings.xml new file mode 100644 index 0000000..501a084 --- /dev/null +++ b/packages/Keyguard/res/values-pl/strings.xml @@ -0,0 +1,138 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Wpisz kod PIN."</string> + <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Wpisz kod PUK i nowy kod PIN."</string> + <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"Kod PUK"</string> + <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Nowy PIN"</string> + <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Dotknij, aby wpisać hasło."</font></string> + <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Wpisz hasło, aby odblokować."</string> + <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Wpisz kod PIN, aby odblokować."</string> + <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"Błędny kod PIN"</string> + <string name="keyguard_label_text" msgid="861796461028298424">"Aby odblokować, naciśnij Menu, a następnie 0."</string> + <string name="faceunlock_multiple_failures" msgid="754137583022792429">"Przekroczono maksymalną liczbę prób rozpoznania twarzy."</string> + <string name="keyguard_charged" msgid="3272223906073492454">"Naładowana"</string> + <string name="keyguard_plugged_in" msgid="8117572000639998388">"Ładowanie (<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>)"</string> + <string name="keyguard_low_battery" msgid="8143808018719173859">"Podłącz ładowarkę."</string> + <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Naciśnij Menu, by odblokować."</string> + <string name="keyguard_network_locked_message" msgid="9169717779058037168">"Zablokowana sieć"</string> + <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"Brak karty SIM"</string> + <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"Brak karty SIM w tablecie."</string> + <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"Brak karty SIM w telefonie."</string> + <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"Włóż kartę SIM."</string> + <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"Brak karty SIM lub nie można jej odczytać. Włóż kartę SIM."</string> + <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"Karta SIM bezużyteczna."</string> + <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"Karta SIM jest trwale wyłączona."\n" Skontaktuj się z dostawcą usług bezprzewodowych, by otrzymać inną kartę SIM."</string> + <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"Karta SIM jest zablokowana."</string> + <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"Karta SIM jest zablokowana za pomocą kodu PUK."</string> + <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Odblokowuję kartę SIM…"</string> + <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. Widżet %2$d z %3$d."</string> + <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"Dodaj widżet."</string> + <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"Puste"</string> + <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"Rozwinięto obszar odblokowania."</string> + <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"Zwinięto obszar odblokowania."</string> + <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"Widżet <xliff:g id="WIDGET_INDEX">%1$s</xliff:g>."</string> + <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"Wybór użytkownika"</string> + <string name="keyguard_accessibility_status" msgid="8008264603935930611">"Stan"</string> + <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"Aparat"</string> + <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"Elementy sterujące multimediów"</string> + <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"Rozpoczęto zmienianie kolejności widżetów."</string> + <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"Zakończono zmienianie kolejności widżetów."</string> + <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"Usunięto widżet <xliff:g id="WIDGET_INDEX">%1$s</xliff:g>."</string> + <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"Rozwiń obszar odblokowania."</string> + <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"Odblokowanie przesunięciem."</string> + <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Odblokowanie wzorem."</string> + <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Rozpoznanie twarzy"</string> + <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Odblokowanie kodem PIN."</string> + <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Odblokowanie hasłem."</string> + <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Obszar wzoru."</string> + <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Obszar przesuwania."</string> + <string name="keyguard_accessibility_transport_prev_description" msgid="1337286538318543555">"Przycisk poprzedniego utworu"</string> + <string name="keyguard_accessibility_transport_next_description" msgid="7073928300444909320">"Przycisk następnego utworu"</string> + <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Przycisk wstrzymania"</string> + <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Przycisk odtwarzania"</string> + <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Przycisk zatrzymania"</string> + <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string> + <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string> + <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string> + <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string> + <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Anuluj"</string> + <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Delete"</string> + <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Gotowe"</string> + <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Zmiana trybu"</string> + <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string> + <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string> + <string name="description_target_unlock" msgid="2228524900439801453">"Odblokuj"</string> + <string name="description_target_camera" msgid="969071997552486814">"Aparat"</string> + <string name="description_target_silent" msgid="893551287746522182">"Wyciszenie"</string> + <string name="description_target_soundon" msgid="30052466675500172">"Włącz dźwięk"</string> + <string name="description_target_search" msgid="3091587249776033139">"Szukaj"</string> + <string name="description_direction_up" msgid="7169032478259485180">"Przesuń w górę: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_down" msgid="5087739728639014595">"Przesuń w dół: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_left" msgid="7207478719805562165">"Przesuń w lewo: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_right" msgid="8034433242579600980">"Przesuń w prawo: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="user_switched" msgid="3768006783166984410">"Bieżący użytkownik: <xliff:g id="NAME">%1$s</xliff:g>."</string> + <string name="kg_emergency_call_label" msgid="684946192523830531">"Połączenie alarmowe"</string> + <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Nie pamiętam wzoru"</string> + <string name="kg_wrong_pattern" msgid="1850806070801358830">"Nieprawidłowy wzór"</string> + <string name="kg_wrong_password" msgid="2333281762128113157">"Nieprawidłowe hasło"</string> + <string name="kg_wrong_pin" msgid="1131306510833563801">"Nieprawidłowy PIN"</string> + <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"Spróbuj ponownie za <xliff:g id="NUMBER">%d</xliff:g> s."</string> + <string name="kg_pattern_instructions" msgid="398978611683075868">"Narysuj wzór"</string> + <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Podaj PIN karty SIM"</string> + <string name="kg_pin_instructions" msgid="2377242233495111557">"Podaj PIN"</string> + <string name="kg_password_instructions" msgid="5753646556186936819">"Wpisz hasło"</string> + <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"Karta SIM została wyłączona. Podaj kod PUK, by przejść dalej. Szczegóły uzyskasz od operatora."</string> + <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Podaj wybrany kod PIN"</string> + <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Potwierdź wybrany kod PIN"</string> + <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Odblokowuję kartę SIM…"</string> + <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Nieprawidłowy PIN."</string> + <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Wpisz PIN o długości od 4 do 8 cyfr."</string> + <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"Kod PUK musi mieć co najmniej 8 cyfr."</string> + <string name="kg_invalid_puk" msgid="3638289409676051243">"Ponownie podaj poprawny kod PUK. Nieudane próby spowodują trwałe wyłączenie karty SIM."</string> + <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"Kody PIN nie pasują"</string> + <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Zbyt wiele prób narysowania wzoru"</string> + <string name="kg_login_instructions" msgid="1100551261265506448">"Aby odblokować, zaloguj się na konto Google."</string> + <string name="kg_login_username_hint" msgid="5718534272070920364">"Nazwa użytkownika (e-mail)"</string> + <string name="kg_login_password_hint" msgid="9057289103827298549">"Hasło"</string> + <string name="kg_login_submit_button" msgid="5355904582674054702">"Zaloguj się"</string> + <string name="kg_login_invalid_input" msgid="5754664119319872197">"Nieprawidłowa nazwa użytkownika lub hasło."</string> + <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Nie pamiętasz nazwy użytkownika lub hasła?"\n"Wejdź na "<b>"google.com/accounts/recovery"</b>"."</string> + <string name="kg_login_checking_password" msgid="1052685197710252395">"Sprawdzam konto"</string> + <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Po raz <xliff:g id="NUMBER_0">%d</xliff:g> wpisałeś nieprawidłowy PIN. "\n\n"Spróbuj ponownie za <xliff:g id="NUMBER_1">%d</xliff:g> s."</string> + <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Po raz <xliff:g id="NUMBER_0">%d</xliff:g> wpisałeś nieprawidłowe hasło. "\n\n"Spróbuj ponownie za <xliff:g id="NUMBER_1">%d</xliff:g> s."</string> + <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Po raz <xliff:g id="NUMBER_0">%d</xliff:g> narysowałeś nieprawidłowy wzór odblokowania. "\n\n"Spróbuj ponownie za <xliff:g id="NUMBER_1">%d</xliff:g> s."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"Po raz <xliff:g id="NUMBER_0">%d</xliff:g> próbowałeś nieprawidłowo odblokować tablet. Po kolejnych <xliff:g id="NUMBER_1">%d</xliff:g> nieudanych próbach tablet zostanie zresetowany do ustawień fabrycznych, a wszystkie dane użytkownika zostaną utracone."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"Po raz <xliff:g id="NUMBER_0">%d</xliff:g> próbowałeś nieprawidłowo odblokować telefon. Po kolejnych <xliff:g id="NUMBER_1">%d</xliff:g> nieudanych próbach telefon zostanie zresetowany do ustawień fabrycznych, a wszystkie dane użytkownika zostaną utracone."</string> + <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"Po raz <xliff:g id="NUMBER">%d</xliff:g> próbowałeś nieprawidłowo odblokować tablet. Tablet zostanie teraz zresetowany do ustawień fabrycznych."</string> + <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"Po raz <xliff:g id="NUMBER">%d</xliff:g> próbowałeś nieprawidłowo odblokować telefon. Telefon zostanie teraz zresetowany do ustawień fabrycznych."</string> + <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Po raz <xliff:g id="NUMBER_0">%d</xliff:g> nieprawidłowo narysowałeś wzór odblokowania. Po kolejnych <xliff:g id="NUMBER_1">%d</xliff:g> nieudanych próbach konieczne będzie odblokowanie tabletu przy użyciu danych logowania na konto Google."\n\n" Spróbuj ponownie za <xliff:g id="NUMBER_2">%d</xliff:g> s."</string> + <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Po raz <xliff:g id="NUMBER_0">%d</xliff:g> nieprawidłowo narysowałeś wzór odblokowania. Po kolejnych <xliff:g id="NUMBER_1">%d</xliff:g> nieudanych próbach konieczne będzie odblokowanie telefonu przy użyciu danych logowania na konto Google."\n\n" Spróbuj ponownie za <xliff:g id="NUMBER_2">%d</xliff:g> s."</string> + <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" – "</string> + <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Usuń"</string> + <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Przycisk poprzedniego utworu"</string> + <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Przycisk następnego utworu"</string> + <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Przycisk wstrzymania"</string> + <string name="keyguard_transport_play_description" msgid="2924628863741150956">"Przycisk odtwarzania"</string> + <string name="keyguard_transport_stop_description" msgid="3084179324810575787">"Przycisk zatrzymania"</string> + <string name="keyguard_carrier_default" msgid="8700650403054042153">"Brak usługi."</string> +</resources> diff --git a/core/res/res/values-sw600dp/alias.xml b/packages/Keyguard/res/values-port/alias.xml index bf3eecb..c3ecbb9 100644 --- a/core/res/res/values-sw600dp/alias.xml +++ b/packages/Keyguard/res/values-port/alias.xml @@ -19,5 +19,5 @@ --> <resources> <!-- Alias used to reference one of two possible layouts in keyguard. --> - <item type="layout" name="keyguard_eca">@android:layout/keyguard_emergency_carrier_area</item> + <item type="layout" name="keyguard_eca">@layout/keyguard_emergency_carrier_area</item> </resources> diff --git a/packages/Keyguard/res/values-port/bools.xml b/packages/Keyguard/res/values-port/bools.xml new file mode 100644 index 0000000..1e2a4f2 --- /dev/null +++ b/packages/Keyguard/res/values-port/bools.xml @@ -0,0 +1,21 @@ +<?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> + <bool name="action_bar_embed_tabs">false</bool> + <bool name="kg_share_status_area">true</bool> + <bool name="kg_sim_puk_account_full_screen">true</bool> +</resources> diff --git a/packages/Keyguard/res/values-port/integers.xml b/packages/Keyguard/res/values-port/integers.xml new file mode 100644 index 0000000..ef7e4da --- /dev/null +++ b/packages/Keyguard/res/values-port/integers.xml @@ -0,0 +1,23 @@ +<?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. +*/ +--> +<resources> + <!-- Gravity to make KeyguardSelectorView work in multiple orientations + 0x31 == "top|center_horizontal" --> + <integer name="kg_selector_gravity">0x31</integer> +</resources>
\ No newline at end of file diff --git a/packages/Keyguard/res/values-pt-rPT/activitystrings.xml b/packages/Keyguard/res/values-pt-rPT/activitystrings.xml new file mode 100644 index 0000000..470865d --- /dev/null +++ b/packages/Keyguard/res/values-pt-rPT/activitystrings.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string> + <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string> + <string name="none_menu_item" msgid="6156747285687551424">"Sem segurança"</string> + <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string> + <string name="password_menu_item" msgid="1959980499662153160">"Palavra-passe"</string> + <string name="pattern_menu_item" msgid="2987798152175140249">"Sequência"</string> + <string name="sim_pin_menu_item" msgid="3962286639645084880">"PIN do SIM"</string> + <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK do SIM"</string> + <string name="add_widget_item" msgid="279702152366857415">"Escolher widget..."</string> + <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string> + <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string> + <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string> + <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string> +</resources> diff --git a/packages/Keyguard/res/values-pt-rPT/strings.xml b/packages/Keyguard/res/values-pt-rPT/strings.xml new file mode 100644 index 0000000..19fef32 --- /dev/null +++ b/packages/Keyguard/res/values-pt-rPT/strings.xml @@ -0,0 +1,138 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Escreva o código PIN"</string> + <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Escreva o PUK e o novo código PIN"</string> + <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"Código PUK"</string> + <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Novo código PIN"</string> + <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Toque para escrever a palavra-passe"</font></string> + <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Escreva a palavra-passe para desbloquear"</string> + <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Escreva o PIN para desbloquear"</string> + <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"Código PIN incorreto."</string> + <string name="keyguard_label_text" msgid="861796461028298424">"Para desbloquear, prima Menu e, em seguida, 0."</string> + <string name="faceunlock_multiple_failures" msgid="754137583022792429">"Excedido o n.º máximo de tentativas de Desbloqueio Através do Rosto"</string> + <string name="keyguard_charged" msgid="3272223906073492454">"Carregado"</string> + <string name="keyguard_plugged_in" msgid="8117572000639998388">"A carregar, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string> + <string name="keyguard_low_battery" msgid="8143808018719173859">"Ligue o carregador."</string> + <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Prima Menu para desbloquear."</string> + <string name="keyguard_network_locked_message" msgid="9169717779058037168">"Rede bloqueada"</string> + <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"Nenhum cartão SIM"</string> + <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"Nenhum cartão SIM no tablet."</string> + <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"Nenhum cartão SIM no telemóvel."</string> + <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"Insira um cartão SIM."</string> + <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"O cartão SIM está em falta ou não é legível. Introduza um cartão SIM."</string> + <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"Cartão SIM inutilizável."</string> + <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"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="keyguard_sim_locked_message" msgid="6875773413306380902">"O cartão SIM está bloqueado."</string> + <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"O cartão SIM está bloqueado por PUK."</string> + <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"A desbloquear o cartão SIM..."</string> + <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. Widget %2$d de %3$d."</string> + <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"Adicionar widget."</string> + <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"Vazio"</string> + <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"Área de desbloqueio expandida."</string> + <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"Área de desbloqueio minimizada."</string> + <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> widget."</string> + <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"Seletor de utilizadores"</string> + <string name="keyguard_accessibility_status" msgid="8008264603935930611">"Estado"</string> + <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"Câmara"</string> + <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"Controlos de multimédia"</string> + <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"Reordenação de widgets iniciada."</string> + <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"Reordenação de widgets concluída."</string> + <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"Widget <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> eliminado."</string> + <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"Expandir área de desbloqueio."</string> + <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"Desbloqueio através de deslize."</string> + <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Desbloqueio através de sequência."</string> + <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Desbloqueio através do rosto."</string> + <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Desbloqueio através de PIN."</string> + <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Desbloqueio através de palavra-passe."</string> + <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Área da sequência."</string> + <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Área de deslize."</string> + <string name="keyguard_accessibility_transport_prev_description" msgid="1337286538318543555">"Botão Faixa anterior"</string> + <string name="keyguard_accessibility_transport_next_description" msgid="7073928300444909320">"Botão Faixa seguinte"</string> + <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Botão Pausa"</string> + <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Botão Reproduzir"</string> + <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Botão Parar"</string> + <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string> + <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string> + <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string> + <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string> + <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Cancelar"</string> + <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Delete"</string> + <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Concluído"</string> + <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Alteração do modo"</string> + <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string> + <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string> + <string name="description_target_unlock" msgid="2228524900439801453">"Desbloquear"</string> + <string name="description_target_camera" msgid="969071997552486814">"Câmara"</string> + <string name="description_target_silent" msgid="893551287746522182">"Silencioso"</string> + <string name="description_target_soundon" msgid="30052466675500172">"Som ativado"</string> + <string name="description_target_search" msgid="3091587249776033139">"Pesquisar"</string> + <string name="description_direction_up" msgid="7169032478259485180">"Deslize para cima para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ."</string> + <string name="description_direction_down" msgid="5087739728639014595">"Deslize para baixo para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ."</string> + <string name="description_direction_left" msgid="7207478719805562165">"Deslize para a esquerda para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ."</string> + <string name="description_direction_right" msgid="8034433242579600980">"Deslize para a direita para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ."</string> + <string name="user_switched" msgid="3768006783166984410">"<xliff:g id="NAME">%1$s</xliff:g> do utilizador atual."</string> + <string name="kg_emergency_call_label" msgid="684946192523830531">"Chamada de emergência"</string> + <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Esqueceu-se da Sequência"</string> + <string name="kg_wrong_pattern" msgid="1850806070801358830">"Sequência Incorreta"</string> + <string name="kg_wrong_password" msgid="2333281762128113157">"Palavra-passe Incorreta"</string> + <string name="kg_wrong_pin" msgid="1131306510833563801">"PIN Incorreto"</string> + <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"Tente novamente dentro de <xliff:g id="NUMBER">%d</xliff:g> segundos."</string> + <string name="kg_pattern_instructions" msgid="398978611683075868">"Desenhe a sua sequência"</string> + <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Introduzir PIN do cartão SIM"</string> + <string name="kg_pin_instructions" msgid="2377242233495111557">"Introduzir PIN"</string> + <string name="kg_password_instructions" msgid="5753646556186936819">"Introduzir Palavra-passe"</string> + <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"O SIM está agora desativado. Introduza o código PUK para continuar. Contacte o operador para obter detalhes."</string> + <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Introduza o código PIN pretendido"</string> + <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Confirme o código PIN pretendido"</string> + <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"A desbloquear cartão SIM..."</string> + <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Código PIN incorreto."</string> + <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Introduza um PIN entre 4 e 8 números."</string> + <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"O código PUK deve ter 8 ou mais números."</string> + <string name="kg_invalid_puk" msgid="3638289409676051243">"Volte a introduzir o código PUK correto. Demasiadas tentativas consecutivas irão desativar permanentemente o SIM."</string> + <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"Os códigos PIN não correspondem"</string> + <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Demasiadas tentativas para desenhar sequência"</string> + <string name="kg_login_instructions" msgid="1100551261265506448">"Para desbloquear, inicie sessão com a sua Conta do Google."</string> + <string name="kg_login_username_hint" msgid="5718534272070920364">"Nome de utilizador (email)"</string> + <string name="kg_login_password_hint" msgid="9057289103827298549">"Palavra-passe"</string> + <string name="kg_login_submit_button" msgid="5355904582674054702">"Iniciar sessão"</string> + <string name="kg_login_invalid_input" msgid="5754664119319872197">"Nome de utilizador ou palavra-passe inválidos."</string> + <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Esqueceu-se do nome de utilizador ou da palavra-passe?"\n"Aceda a "<b>"google.com/accounts/recovery"</b>"."</string> + <string name="kg_login_checking_password" msgid="1052685197710252395">"A verificar a conta…"</string> + <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Escreveu o PIN incorretamente <xliff:g id="NUMBER_0">%d</xliff:g> vezes. "\n\n"Tente novamente dentro de <xliff:g id="NUMBER_1">%d</xliff:g> segundos."</string> + <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Escreveu a palavra-passe incorretamente <xliff:g id="NUMBER_0">%d</xliff:g> vezes. "\n\n"Tente novamente dentro de <xliff:g id="NUMBER_1">%d</xliff:g> segundos."</string> + <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Desenhou a sua sequência de desbloqueio incorretamente <xliff:g id="NUMBER_0">%d</xliff:g> vezes. "\n\n"Tente novamente dentro de <xliff:g id="NUMBER_1">%d</xliff:g> segundos."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"Tentou desbloquear o tablet <xliff:g id="NUMBER_0">%d</xliff:g> vezes de forma incorreta. Depois de mais <xliff:g id="NUMBER_1">%d</xliff:g> tentativas sem êxito, as definições de origem do telemóvel serão repostas e todos os dados do utilizador serão perdidos."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"Tentou desbloquear o telemóvel <xliff:g id="NUMBER_0">%d</xliff:g> vezes de forma incorreta. Depois de mais <xliff:g id="NUMBER_1">%d</xliff:g> tentativas sem êxito, as definições de origem do telemóvel serão repostas e todos os dados do utilizador serão perdidos."</string> + <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"Tentou desbloquear o tablet <xliff:g id="NUMBER">%d</xliff:g> vezes de forma incorreta, pelo que será reposta a predefinição de fábrica."</string> + <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"Tentou desbloquear o telemóvel <xliff:g id="NUMBER">%d</xliff:g> vezes de forma incorreta, pelo que será reposta a predefinição de fábrica."</string> + <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Desenhou a sequência de desbloqueio incorretamente <xliff:g id="NUMBER_0">%d</xliff:g> vezes. Depois de mais <xliff:g id="NUMBER_1">%d</xliff:g> tentativas sem sucesso, ser-lhe-á pedido para desbloquear o tablet através de uma conta de email."\n\n" Tente novamente dentro de <xliff:g id="NUMBER_2">%d</xliff:g> segundos."</string> + <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Desenhou a sequência de desbloqueio incorretamente <xliff:g id="NUMBER_0">%d</xliff:g> vezes. Depois de mais <xliff:g id="NUMBER_1">%d</xliff:g> tentativas sem sucesso, ser-lhe-á pedido para desbloquear o telemóvel através de uma conta de email."\n\n" Tente novamente dentro de <xliff:g id="NUMBER_2">%d</xliff:g> segundos."</string> + <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" - "</string> + <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Remover"</string> + <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Botão Faixa anterior"</string> + <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Botão Faixa seguinte"</string> + <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Botão Pausa"</string> + <string name="keyguard_transport_play_description" msgid="2924628863741150956">"Botão Reproduzir"</string> + <string name="keyguard_transport_stop_description" msgid="3084179324810575787">"Botão Parar"</string> + <string name="keyguard_carrier_default" msgid="8700650403054042153">"Sem serviço."</string> +</resources> diff --git a/packages/Keyguard/res/values-pt/activitystrings.xml b/packages/Keyguard/res/values-pt/activitystrings.xml new file mode 100644 index 0000000..7a63708 --- /dev/null +++ b/packages/Keyguard/res/values-pt/activitystrings.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string> + <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string> + <string name="none_menu_item" msgid="6156747285687551424">"Sem segurança"</string> + <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string> + <string name="password_menu_item" msgid="1959980499662153160">"Senha"</string> + <string name="pattern_menu_item" msgid="2987798152175140249">"Padrão"</string> + <string name="sim_pin_menu_item" msgid="3962286639645084880">"PIN do SIM"</string> + <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK do SIM"</string> + <string name="add_widget_item" msgid="279702152366857415">"Escolher widget..."</string> + <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string> + <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string> + <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string> + <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string> +</resources> diff --git a/packages/Keyguard/res/values-pt/strings.xml b/packages/Keyguard/res/values-pt/strings.xml new file mode 100644 index 0000000..08e2a60 --- /dev/null +++ b/packages/Keyguard/res/values-pt/strings.xml @@ -0,0 +1,138 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Insira o código PIN"</string> + <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Insira o PUK e o novo código PIN"</string> + <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"Código PUK"</string> + <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Novo código PIN"</string> + <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Toque para inserir a senha"</font></string> + <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Digite a senha para desbloquear"</string> + <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Insira o PIN para desbloquear"</string> + <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"Código PIN incorreto."</string> + <string name="keyguard_label_text" msgid="861796461028298424">"Para desbloquear, pressione Menu e, em seguida, 0."</string> + <string name="faceunlock_multiple_failures" msgid="754137583022792429">"O número máximo de tentativas de Desbloqueio por reconhecimento facial foi excedido"</string> + <string name="keyguard_charged" msgid="3272223906073492454">"Carregado"</string> + <string name="keyguard_plugged_in" msgid="8117572000639998388">"Carregando, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string> + <string name="keyguard_low_battery" msgid="8143808018719173859">"Conecte seu carregador."</string> + <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Pressione \"Menu\" para desbloquear."</string> + <string name="keyguard_network_locked_message" msgid="9169717779058037168">"Rede bloqueada"</string> + <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"Sem cartão SIM"</string> + <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"Não há um cartão SIM no tablet."</string> + <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"Não há um cartão SIM no telefone."</string> + <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"Insira um cartão SIM."</string> + <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"O cartão SIM não foi inserido ou não é possível lê-lo. Insira um cartão SIM."</string> + <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"Cartão SIM inutilizável."</string> + <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"O cartão SIM foi desativado permanentemente."\n"Entre em contato com seu provedor de serviços sem fio para receber outro cartão SIM."</string> + <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"O cartão SIM está bloqueado."</string> + <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"O cartão SIM está bloqueado pelo PUK."</string> + <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Desbloqueando o cartão SIM…"</string> + <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. Widget %2$d de %3$d."</string> + <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"Adicionar widget"</string> + <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"Vazio"</string> + <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"Área de desbloqueio expandida."</string> + <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"Área de desbloqueio recolhida."</string> + <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"Widget de <xliff:g id="WIDGET_INDEX">%1$s</xliff:g>."</string> + <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"Seletor de usuários"</string> + <string name="keyguard_accessibility_status" msgid="8008264603935930611">"Status"</string> + <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"Câmera"</string> + <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"Controles de mídia"</string> + <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"Reordenação de widgets iniciada."</string> + <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"Reordenação de widgets concluída."</string> + <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"Widget <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> excluído."</string> + <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"Expandir a área de desbloqueio."</string> + <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"Desbloqueio com deslize."</string> + <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Desbloqueio com padrão."</string> + <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Desbloqueio facial."</string> + <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Desbloqueio com PIN."</string> + <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Desbloqueio com senha."</string> + <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Área do padrão."</string> + <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Área de deslize."</string> + <string name="keyguard_accessibility_transport_prev_description" msgid="1337286538318543555">"Botão \"Faixa anterior\""</string> + <string name="keyguard_accessibility_transport_next_description" msgid="7073928300444909320">"Botão \"Próxima faixa\""</string> + <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Botão \"Pausar\""</string> + <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Botão \"Reproduzir\""</string> + <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Botão \"Parar\""</string> + <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string> + <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string> + <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string> + <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string> + <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Cancelar"</string> + <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Excluir"</string> + <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Concluído"</string> + <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Alteração do modo"</string> + <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string> + <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string> + <string name="description_target_unlock" msgid="2228524900439801453">"Desbloquear"</string> + <string name="description_target_camera" msgid="969071997552486814">"Câmera"</string> + <string name="description_target_silent" msgid="893551287746522182">"Silencioso"</string> + <string name="description_target_soundon" msgid="30052466675500172">"Som ativado"</string> + <string name="description_target_search" msgid="3091587249776033139">"Pesquisar"</string> + <string name="description_direction_up" msgid="7169032478259485180">"Para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>, deslize para cima."</string> + <string name="description_direction_down" msgid="5087739728639014595">"Para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>, deslize para baixo."</string> + <string name="description_direction_left" msgid="7207478719805562165">"Para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>, deslize para a esquerda."</string> + <string name="description_direction_right" msgid="8034433242579600980">"Para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>, deslize para a direita."</string> + <string name="user_switched" msgid="3768006783166984410">"Usuário atual <xliff:g id="NAME">%1$s</xliff:g>."</string> + <string name="kg_emergency_call_label" msgid="684946192523830531">"Chamada de emergência"</string> + <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Esqueci o padrão"</string> + <string name="kg_wrong_pattern" msgid="1850806070801358830">"Padrão incorreto"</string> + <string name="kg_wrong_password" msgid="2333281762128113157">"Senha incorreta"</string> + <string name="kg_wrong_pin" msgid="1131306510833563801">"PIN incorreto"</string> + <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"Tente novamente em <xliff:g id="NUMBER">%d</xliff:g> segundos."</string> + <string name="kg_pattern_instructions" msgid="398978611683075868">"Desenhe seu padrão"</string> + <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Digite o PIN do cartão SIM"</string> + <string name="kg_pin_instructions" msgid="2377242233495111557">"Digite o PIN"</string> + <string name="kg_password_instructions" msgid="5753646556186936819">"Digite a senha"</string> + <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"O SIM foi desativado. Insira o código PUK para continuar. Entre em contato com a operadora para obter mais detalhes."</string> + <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Digite o código PIN desejado"</string> + <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Confirme o código PIN desejado"</string> + <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Desbloqueando o cartão SIM…"</string> + <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Código PIN incorreto."</string> + <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Digite um PIN com quatro a oito números."</string> + <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"O código PUK deve ter 8 números ou mais."</string> + <string name="kg_invalid_puk" msgid="3638289409676051243">"Introduza novamente o código PUK correto. Muitas tentativas malsucedidas desativarão permanentemente o SIM."</string> + <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"Os códigos PIN não coincidem"</string> + <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Muitas tentativas de padrão"</string> + <string name="kg_login_instructions" msgid="1100551261265506448">"Para desbloquear, faça login usando sua Conta do Google."</string> + <string name="kg_login_username_hint" msgid="5718534272070920364">"Nome de usuário (e-mail)"</string> + <string name="kg_login_password_hint" msgid="9057289103827298549">"Senha"</string> + <string name="kg_login_submit_button" msgid="5355904582674054702">"Fazer login"</string> + <string name="kg_login_invalid_input" msgid="5754664119319872197">"Nome de usuário ou senha inválidos."</string> + <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Esqueceu seu nome de usuário ou senha?"\n"Acesse "<b>"google.com.br/accounts/recovery"</b>"."</string> + <string name="kg_login_checking_password" msgid="1052685197710252395">"Verificando a conta..."</string> + <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Você digitou seu PIN incorretamente <xliff:g id="NUMBER_0">%d</xliff:g> vezes. "\n\n"Tente novamente em <xliff:g id="NUMBER_1">%d</xliff:g> segundos."</string> + <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Você digitou sua senha incorretamente <xliff:g id="NUMBER_0">%d</xliff:g> vezes. "\n\n"Tente novamente em <xliff:g id="NUMBER_1">%d</xliff:g> segundos."</string> + <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Você desenhou sua sequência de desbloqueio incorretamente <xliff:g id="NUMBER_0">%d</xliff:g> vezes. "\n\n"Tente novamente em <xliff:g id="NUMBER_1">%d</xliff:g> segundos."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"Você tentou desbloquear incorretamente o tablet <xliff:g id="NUMBER_0">%d</xliff:g> vezes. Após mais <xliff:g id="NUMBER_1">%d</xliff:g> tentativas malsucedidas, o tablet será redefinido para o padrão de fábrica e todos os dados do usuário serão perdidos."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"Você tentou desbloquear incorretamente o telefone <xliff:g id="NUMBER_0">%d</xliff:g> vezes. Após mais <xliff:g id="NUMBER_1">%d</xliff:g> tentativas malsucedidas, o telefone será redefinido para o padrão de fábrica e todos os dados do usuário serão perdidos."</string> + <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"Você tentou desbloquear incorretamente o tablet <xliff:g id="NUMBER">%d</xliff:g> vezes. O tablet será redefinido para o padrão de fábrica."</string> + <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"Você tentou desbloquear incorretamente o telefone <xliff:g id="NUMBER">%d</xliff:g> vezes. O telefone será redefinido para o padrão de fábrica."</string> + <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Você desenhou sua sequência de desbloqueio incorretamente <xliff:g id="NUMBER_0">%d</xliff:g> vezes. Se fizer mais <xliff:g id="NUMBER_1">%d</xliff:g> tentativas incorretas, será solicitado que você use o login do Google para desbloquear seu tablet."\n\n" Tente novamente em <xliff:g id="NUMBER_2">%d</xliff:g> segundos."</string> + <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Você desenhou sua sequência de desbloqueio incorretamente <xliff:g id="NUMBER_0">%d</xliff:g> vezes. Se fizer mais <xliff:g id="NUMBER_1">%d</xliff:g> tentativas incorretas, será solicitado que você use o login do Google para desbloquear."\n\n" Tente novamente em <xliff:g id="NUMBER_2">%d</xliff:g> segundos."</string> + <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string> + <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Remover"</string> + <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Botão \"Faixa anterior\""</string> + <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Botão \"Próxima faixa\""</string> + <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Botão \"Pausar\""</string> + <string name="keyguard_transport_play_description" msgid="2924628863741150956">"Botão \"Reproduzir\""</string> + <string name="keyguard_transport_stop_description" msgid="3084179324810575787">"Botão \"Parar\""</string> + <string name="keyguard_carrier_default" msgid="8700650403054042153">"Sem serviço."</string> +</resources> diff --git a/packages/Keyguard/res/values-rm/strings.xml b/packages/Keyguard/res/values-rm/strings.xml new file mode 100644 index 0000000..8dda055 --- /dev/null +++ b/packages/Keyguard/res/values-rm/strings.xml @@ -0,0 +1,249 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for keyguard_password_enter_pin_code (3037685796058495017) --> + <skip /> + <!-- no translation found for keyguard_password_enter_puk_code (4800725266925845333) --> + <skip /> + <!-- no translation found for keyguard_password_enter_puk_prompt (1341112146710087048) --> + <skip /> + <!-- no translation found for keyguard_password_enter_pin_prompt (8027680321614196258) --> + <skip /> + <!-- no translation found for keyguard_password_entry_touch_hint (7858547464982981384) --> + <skip /> + <!-- no translation found for keyguard_password_enter_password_code (1054721668279049780) --> + <skip /> + <!-- no translation found for keyguard_password_enter_pin_password_code (6391755146112503443) --> + <skip /> + <!-- no translation found for keyguard_password_wrong_pin_code (2422225591006134936) --> + <skip /> + <string name="keyguard_label_text" msgid="861796461028298424">"Smatgai per debloccar sin la tasta Menu e lura sin 0."</string> + <!-- no translation found for faceunlock_multiple_failures (754137583022792429) --> + <skip /> + <!-- no translation found for keyguard_charged (3272223906073492454) --> + <skip /> + <!-- no translation found for keyguard_plugged_in (8117572000639998388) --> + <skip /> + <!-- no translation found for keyguard_low_battery (8143808018719173859) --> + <skip /> + <!-- no translation found for keyguard_instructions_when_pattern_disabled (1332288268600329841) --> + <skip /> + <!-- no translation found for keyguard_network_locked_message (9169717779058037168) --> + <skip /> + <!-- no translation found for keyguard_missing_sim_message_short (494980561304211931) --> + <skip /> + <!-- no translation found for keyguard_missing_sim_message (1445849005909260039) --> + <skip /> + <!-- no translation found for keyguard_missing_sim_message (3481110395508637643) --> + <skip /> + <!-- no translation found for keyguard_missing_sim_instructions (5210891509995942250) --> + <skip /> + <!-- no translation found for keyguard_missing_sim_instructions_long (5968985489463870358) --> + <skip /> + <!-- no translation found for keyguard_permanent_disabled_sim_message_short (8340813989586622356) --> + <skip /> + <!-- no translation found for keyguard_permanent_disabled_sim_instructions (5892940909699723544) --> + <skip /> + <!-- no translation found for keyguard_sim_locked_message (6875773413306380902) --> + <skip /> + <!-- no translation found for keyguard_sim_puk_locked_message (3747232467471801633) --> + <skip /> + <!-- no translation found for keyguard_sim_unlock_progress_dialog_message (7975221805033614426) --> + <skip /> + <!-- no translation found for keyguard_accessibility_widget_changed (5678624624681400191) --> + <skip /> + <!-- no translation found for keyguard_accessibility_add_widget (8273277058724924654) --> + <skip /> + <!-- no translation found for keyguard_accessibility_widget_empty_slot (1281505703307930757) --> + <skip /> + <!-- no translation found for keyguard_accessibility_unlock_area_expanded (2278106022311170299) --> + <skip /> + <!-- no translation found for keyguard_accessibility_unlock_area_collapsed (6366992066936076396) --> + <skip /> + <!-- no translation found for keyguard_accessibility_widget (6527131039741808240) --> + <skip /> + <!-- no translation found for keyguard_accessibility_user_selector (1226798370913698896) --> + <skip /> + <!-- no translation found for keyguard_accessibility_status (8008264603935930611) --> + <skip /> + <!-- no translation found for keyguard_accessibility_camera (8904231194181114603) --> + <skip /> + <!-- no translation found for keygaurd_accessibility_media_controls (262209654292161806) --> + <skip /> + <!-- no translation found for keyguard_accessibility_widget_reorder_start (8736853615588828197) --> + <skip /> + <!-- no translation found for keyguard_accessibility_widget_reorder_end (7170190950870468320) --> + <skip /> + <!-- no translation found for keyguard_accessibility_widget_deleted (4426204263929224434) --> + <skip /> + <!-- no translation found for keyguard_accessibility_expand_lock_area (519859720934178024) --> + <skip /> + <!-- no translation found for keyguard_accessibility_slide_unlock (2959928478764697254) --> + <skip /> + <!-- no translation found for keyguard_accessibility_pattern_unlock (1490840706075246612) --> + <skip /> + <!-- no translation found for keyguard_accessibility_face_unlock (4817282543351718535) --> + <skip /> + <!-- no translation found for keyguard_accessibility_pin_unlock (2469687111784035046) --> + <skip /> + <!-- no translation found for keyguard_accessibility_password_unlock (7675777623912155089) --> + <skip /> + <!-- no translation found for keyguard_accessibility_pattern_area (7679891324509597904) --> + <skip /> + <!-- no translation found for keyguard_accessibility_slide_area (6736064494019979544) --> + <skip /> + <!-- no translation found for keyguard_accessibility_transport_prev_description (1337286538318543555) --> + <skip /> + <!-- no translation found for keyguard_accessibility_transport_next_description (7073928300444909320) --> + <skip /> + <!-- no translation found for keyguard_accessibility_transport_pause_description (8455979545295224302) --> + <skip /> + <!-- no translation found for keyguard_accessibility_transport_play_description (8146417789511154044) --> + <skip /> + <!-- no translation found for keyguard_accessibility_transport_stop_description (7656358482980912216) --> + <skip /> + <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string> + <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string> + <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string> + <!-- no translation found for keyboardview_keycode_alt (4856868820040051939) --> + <skip /> + <!-- no translation found for keyboardview_keycode_cancel (1203984017245783244) --> + <skip /> + <!-- no translation found for keyboardview_keycode_delete (3337914833206635744) --> + <skip /> + <!-- no translation found for keyboardview_keycode_done (1992571118466679775) --> + <skip /> + <!-- no translation found for keyboardview_keycode_mode_change (4547387741906537519) --> + <skip /> + <!-- no translation found for keyboardview_keycode_shift (2270748814315147690) --> + <skip /> + <!-- no translation found for keyboardview_keycode_enter (2985864015076059467) --> + <skip /> + <!-- no translation found for description_target_unlock (2228524900439801453) --> + <skip /> + <!-- no translation found for description_target_camera (969071997552486814) --> + <skip /> + <!-- no translation found for description_target_silent (893551287746522182) --> + <skip /> + <!-- no translation found for description_target_soundon (30052466675500172) --> + <skip /> + <!-- no translation found for description_target_search (3091587249776033139) --> + <skip /> + <!-- no translation found for description_direction_up (7169032478259485180) --> + <skip /> + <!-- no translation found for description_direction_down (5087739728639014595) --> + <skip /> + <!-- no translation found for description_direction_left (7207478719805562165) --> + <skip /> + <!-- no translation found for description_direction_right (8034433242579600980) --> + <skip /> + <!-- no translation found for user_switched (3768006783166984410) --> + <skip /> + <!-- no translation found for kg_emergency_call_label (684946192523830531) --> + <skip /> + <!-- no translation found for kg_forgot_pattern_button_text (8852021467868220608) --> + <skip /> + <!-- no translation found for kg_wrong_pattern (1850806070801358830) --> + <skip /> + <!-- no translation found for kg_wrong_password (2333281762128113157) --> + <skip /> + <!-- no translation found for kg_wrong_pin (1131306510833563801) --> + <skip /> + <!-- no translation found for kg_too_many_failed_attempts_countdown (6358110221603297548) --> + <skip /> + <!-- no translation found for kg_pattern_instructions (398978611683075868) --> + <skip /> + <!-- no translation found for kg_sim_pin_instructions (2319508550934557331) --> + <skip /> + <!-- no translation found for kg_pin_instructions (2377242233495111557) --> + <skip /> + <!-- no translation found for kg_password_instructions (5753646556186936819) --> + <skip /> + <!-- no translation found for kg_puk_enter_puk_hint (453227143861735537) --> + <skip /> + <!-- no translation found for kg_puk_enter_pin_hint (7871604527429602024) --> + <skip /> + <!-- no translation found for kg_enter_confirm_pin_hint (325676184762529976) --> + <skip /> + <!-- no translation found for kg_sim_unlock_progress_dialog_message (8950398016976865762) --> + <skip /> + <!-- no translation found for kg_password_wrong_pin_code (1139324887413846912) --> + <skip /> + <!-- no translation found for kg_invalid_sim_pin_hint (8795159358110620001) --> + <skip /> + <!-- no translation found for kg_invalid_sim_puk_hint (7553388325654369575) --> + <skip /> + <!-- no translation found for kg_invalid_puk (3638289409676051243) --> + <skip /> + <!-- no translation found for kg_invalid_confirm_pin_hint (7003469261464593516) --> + <skip /> + <!-- no translation found for kg_login_too_many_attempts (6486842094005698475) --> + <skip /> + <!-- no translation found for kg_login_instructions (1100551261265506448) --> + <skip /> + <!-- no translation found for kg_login_username_hint (5718534272070920364) --> + <skip /> + <!-- no translation found for kg_login_password_hint (9057289103827298549) --> + <skip /> + <!-- no translation found for kg_login_submit_button (5355904582674054702) --> + <skip /> + <!-- no translation found for kg_login_invalid_input (5754664119319872197) --> + <skip /> + <!-- no translation found for kg_login_account_recovery_hint (5690709132841752974) --> + <skip /> + <!-- no translation found for kg_login_checking_password (1052685197710252395) --> + <skip /> + <!-- no translation found for kg_too_many_failed_pin_attempts_dialog_message (8276745642049502550) --> + <skip /> + <!-- no translation found for kg_too_many_failed_password_attempts_dialog_message (7813713389422226531) --> + <skip /> + <!-- no translation found for kg_too_many_failed_pattern_attempts_dialog_message (74089475965050805) --> + <skip /> + <!-- no translation found for kg_failed_attempts_almost_at_wipe (1575557200627128949) --> + <skip /> + <!-- no translation found for kg_failed_attempts_almost_at_wipe (4051015943038199910) --> + <skip /> + <!-- no translation found for kg_failed_attempts_now_wiping (2072996269148483637) --> + <skip /> + <!-- no translation found for kg_failed_attempts_now_wiping (4817627474419471518) --> + <skip /> + <!-- no translation found for kg_failed_attempts_almost_at_login (3253575572118914370) --> + <skip /> + <!-- no translation found for kg_failed_attempts_almost_at_login (1437638152015574839) --> + <skip /> + <!-- no translation found for kg_text_message_separator (4160700433287233771) --> + <skip /> + <!-- no translation found for kg_reordering_delete_drop_target_text (7899202978204438708) --> + <skip /> + <!-- no translation found for keyguard_transport_prev_description (8229108430245669854) --> + <skip /> + <!-- no translation found for keyguard_transport_next_description (4299258300283778305) --> + <skip /> + <!-- no translation found for keyguard_transport_pause_description (5093073338238310224) --> + <skip /> + <!-- no translation found for keyguard_transport_play_description (2924628863741150956) --> + <skip /> + <!-- no translation found for keyguard_transport_stop_description (3084179324810575787) --> + <skip /> + <!-- no translation found for keyguard_carrier_default (8700650403054042153) --> + <skip /> +</resources> diff --git a/packages/Keyguard/res/values-ro/activitystrings.xml b/packages/Keyguard/res/values-ro/activitystrings.xml new file mode 100644 index 0000000..6d3447d --- /dev/null +++ b/packages/Keyguard/res/values-ro/activitystrings.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string> + <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string> + <string name="none_menu_item" msgid="6156747285687551424">"Fără securitate"</string> + <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string> + <string name="password_menu_item" msgid="1959980499662153160">"Parolă"</string> + <string name="pattern_menu_item" msgid="2987798152175140249">"Model"</string> + <string name="sim_pin_menu_item" msgid="3962286639645084880">"PIN SIM"</string> + <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK SIM"</string> + <string name="add_widget_item" msgid="279702152366857415">"Alegeți un widget..."</string> + <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string> + <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string> + <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string> + <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string> +</resources> diff --git a/packages/Keyguard/res/values-ro/strings.xml b/packages/Keyguard/res/values-ro/strings.xml new file mode 100644 index 0000000..2430200 --- /dev/null +++ b/packages/Keyguard/res/values-ro/strings.xml @@ -0,0 +1,138 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Introduceţi codul PIN"</string> + <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Introduceţi codul PUK şi noul cod PIN"</string> + <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"Codul PUK"</string> + <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Noul cod PIN"</string> + <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Atingeţi şi introduceţi parola"</font></string> + <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Introduceţi parola pentru a debloca"</string> + <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Introduceţi codul PIN pentru a debloca"</string> + <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"Cod PIN incorect."</string> + <string name="keyguard_label_text" msgid="861796461028298424">"Pentru a debloca, apăsaţi Meniu, apoi 0."</string> + <string name="faceunlock_multiple_failures" msgid="754137583022792429">"S-a depăşit numărul maxim de încercări pentru Deblocare facială"</string> + <string name="keyguard_charged" msgid="3272223906073492454">"Încărcată"</string> + <string name="keyguard_plugged_in" msgid="8117572000639998388">"Se încarcă, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string> + <string name="keyguard_low_battery" msgid="8143808018719173859">"Conectați încărcătorul."</string> + <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Apăsați pe Meniu pentru a debloca."</string> + <string name="keyguard_network_locked_message" msgid="9169717779058037168">"Rețea blocată"</string> + <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"Niciun card SIM"</string> + <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"Tableta nu are card SIM."</string> + <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"Telefonul nu are card SIM."</string> + <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"Introduceți un card SIM."</string> + <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"Cardul SIM lipsește sau nu poate fi citit. Introduceți un card SIM."</string> + <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"Card SIM inutilizabil."</string> + <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"Cardul SIM este dezactivat definitiv."\n" Contactați furnizorul de servicii wireless pentru a obține alt card SIM."</string> + <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"Cardul SIM este blocat."</string> + <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"Cardul SIM este blocat cu codul PUK."</string> + <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Se deblochează cardul SIM…"</string> + <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. Widget %2$d din %3$d."</string> + <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"Adăugaţi un widget."</string> + <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"Gol"</string> + <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"Zona de deblocare a fost extinsă."</string> + <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"Zona de deblocare a fost restrânsă."</string> + <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"Widget <xliff:g id="WIDGET_INDEX">%1$s</xliff:g>."</string> + <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"Selector utilizator"</string> + <string name="keyguard_accessibility_status" msgid="8008264603935930611">"Stare"</string> + <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"Cameră foto"</string> + <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"Comenzi media"</string> + <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"A început reordonarea widgeturilor."</string> + <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"Reordonarea widgeturilor s-a încheiat."</string> + <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"Widgetul <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> a fost eliminat."</string> + <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"Extindeţi zona de deblocare."</string> + <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"Deblocare prin glisare."</string> + <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Deblocare cu model."</string> + <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Deblocare facială."</string> + <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Deblocare cu PIN."</string> + <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Deblocare cu parolă."</string> + <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Zonă model."</string> + <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Zonă glisare."</string> + <string name="keyguard_accessibility_transport_prev_description" msgid="1337286538318543555">"Butonul Melodia anterioară"</string> + <string name="keyguard_accessibility_transport_next_description" msgid="7073928300444909320">"Butonul Melodia următoare"</string> + <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Butonul Întrerupeți"</string> + <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Butonul Redați"</string> + <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Butonul Opriți"</string> + <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string> + <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string> + <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string> + <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string> + <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Anulaţi"</string> + <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Ștergeţi"</string> + <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Terminat"</string> + <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Schimbarea modului"</string> + <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string> + <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string> + <string name="description_target_unlock" msgid="2228524900439801453">"Deblocaţi"</string> + <string name="description_target_camera" msgid="969071997552486814">"Cameră foto"</string> + <string name="description_target_silent" msgid="893551287746522182">"Silenţios"</string> + <string name="description_target_soundon" msgid="30052466675500172">"Sunet activat"</string> + <string name="description_target_search" msgid="3091587249776033139">"Căutaţi"</string> + <string name="description_direction_up" msgid="7169032478259485180">"Glisaţi în sus pentru <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_down" msgid="5087739728639014595">"Glisaţi în jos pentru <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_left" msgid="7207478719805562165">"Glisaţi spre stânga pentru <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_right" msgid="8034433242579600980">"Glisaţi spre dreapta pentru <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="user_switched" msgid="3768006783166984410">"Utilizator curent: <xliff:g id="NAME">%1$s</xliff:g>."</string> + <string name="kg_emergency_call_label" msgid="684946192523830531">"Apel de urgenţă"</string> + <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Model uitat"</string> + <string name="kg_wrong_pattern" msgid="1850806070801358830">"Model greşit"</string> + <string name="kg_wrong_password" msgid="2333281762128113157">"Parolă greşită"</string> + <string name="kg_wrong_pin" msgid="1131306510833563801">"Cod PIN greşit"</string> + <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"Încercaţi din nou peste <xliff:g id="NUMBER">%d</xliff:g> (de) secunde."</string> + <string name="kg_pattern_instructions" msgid="398978611683075868">"Desenaţi modelul"</string> + <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Introduceţi codul PIN al cardului SIM"</string> + <string name="kg_pin_instructions" msgid="2377242233495111557">"Introduceţi codul PIN"</string> + <string name="kg_password_instructions" msgid="5753646556186936819">"Introduceţi parola"</string> + <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"Cardul SIM este acum dezactivat. Introduceţi codul PUK pentru a continua. Contactaţi operatorul pentru mai multe detalii."</string> + <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Introduceţi codul PIN dorit"</string> + <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Confirmaţi codul PIN dorit"</string> + <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Se deblochează cardul SIM..."</string> + <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Cod PIN incorect."</string> + <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Introduceţi un cod PIN format din 4 până la 8 cifre."</string> + <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"Codul PUK trebuie să aibă minimum 8 cifre."</string> + <string name="kg_invalid_puk" msgid="3638289409676051243">"Reintroduceţi codul PUK corect. Încercările repetate vor dezactiva definitiv cardul SIM."</string> + <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"Codurile PIN nu coincid"</string> + <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Prea multe încercări de desenare a modelului"</string> + <string name="kg_login_instructions" msgid="1100551261265506448">"Pentru a debloca, conectaţi-vă cu Contul dvs. Google."</string> + <string name="kg_login_username_hint" msgid="5718534272070920364">"Nume de utilizator (e-mail)"</string> + <string name="kg_login_password_hint" msgid="9057289103827298549">"Parolă"</string> + <string name="kg_login_submit_button" msgid="5355904582674054702">"Conectaţi-vă"</string> + <string name="kg_login_invalid_input" msgid="5754664119319872197">"Nume de utilizator sau parolă nevalide."</string> + <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Aţi uitat numele de utilizator sau parola?"\n"Accesaţi "<b>"google.com/accounts/recovery"</b>"."</string> + <string name="kg_login_checking_password" msgid="1052685197710252395">"Se verifică contul…"</string> + <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Aţi introdus incorect codul PIN de <xliff:g id="NUMBER_0">%d</xliff:g> ori."\n\n"Încercaţi din nou peste <xliff:g id="NUMBER_1">%d</xliff:g> (de) secunde."</string> + <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Aţi introdus incorect parola de <xliff:g id="NUMBER_0">%d</xliff:g> ori. "\n\n"Încercaţi din nou peste <xliff:g id="NUMBER_1">%d</xliff:g> (de) secunde."</string> + <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Aţi desenat incorect modelul pentru deblocare de <xliff:g id="NUMBER_0">%d</xliff:g> ori. "\n\n"Încercaţi din nou peste <xliff:g id="NUMBER_1">%d</xliff:g> (de) secunde."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"Aţi efectuat <xliff:g id="NUMBER_0">%d</xliff:g> încercări incorecte de deblocare a tabletei. După încă <xliff:g id="NUMBER_1">%d</xliff:g> încercări nereuşite, aceasta va fi resetată la setările prestabilite din fabrică, iar toate datele de utilizator se vor pierde."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"Aţi efectuat <xliff:g id="NUMBER_0">%d</xliff:g> încercări incorecte de deblocare a telefonului. După încă <xliff:g id="NUMBER_1">%d</xliff:g> încercări nereuşite, acesta va fi resetat la setările prestabilite din fabrică, iar toate datele de utilizator se vor pierde."</string> + <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"Aţi efectuat <xliff:g id="NUMBER">%d</xliff:g> încercări incorecte de deblocare a tabletei. Tableta va fi acum resetată la setările prestabilite din fabrică."</string> + <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"Aţi efectuat <xliff:g id="NUMBER">%d</xliff:g> încercări incorecte de deblocare a telefonului. Telefonul va fi acum resetat la setările prestabilite din fabrică."</string> + <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Aţi desenat incorect modelul pentru deblocare de <xliff:g id="NUMBER_0">%d</xliff:g> ori. După încă <xliff:g id="NUMBER_1">%d</xliff:g> încercări nereuşite, vi se va solicita să deblocaţi tableta cu ajutorul unui cont de e-mail."\n\n" Încercaţi din nou peste <xliff:g id="NUMBER_2">%d</xliff:g> (de) secunde."</string> + <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Aţi desenat incorect modelul pentru deblocare de <xliff:g id="NUMBER_0">%d</xliff:g> ori. După încă <xliff:g id="NUMBER_1">%d</xliff:g> încercări nereuşite, vi se va solicita să deblocaţi telefonul cu ajutorul unui cont de e-mail."\n\n" Încercaţi din nou peste <xliff:g id="NUMBER_2">%d</xliff:g> (de) secunde."</string> + <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string> + <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Eliminaţi"</string> + <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Butonul Melodia anterioară"</string> + <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Butonul Melodia următoare"</string> + <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Butonul Întrerupeți"</string> + <string name="keyguard_transport_play_description" msgid="2924628863741150956">"Butonul Redați"</string> + <string name="keyguard_transport_stop_description" msgid="3084179324810575787">"Butonul Opriți"</string> + <string name="keyguard_carrier_default" msgid="8700650403054042153">"Fără serviciu."</string> +</resources> diff --git a/packages/Keyguard/res/values-ru/activitystrings.xml b/packages/Keyguard/res/values-ru/activitystrings.xml new file mode 100644 index 0000000..002cd56 --- /dev/null +++ b/packages/Keyguard/res/values-ru/activitystrings.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string> + <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string> + <string name="none_menu_item" msgid="6156747285687551424">"Защита отключена"</string> + <string name="pin_menu_item" msgid="1179756433268962311">"PIN-код"</string> + <string name="password_menu_item" msgid="1959980499662153160">"Пароль"</string> + <string name="pattern_menu_item" msgid="2987798152175140249">"Графический ключ"</string> + <string name="sim_pin_menu_item" msgid="3962286639645084880">"PIN-код SIM-карты"</string> + <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK-код SIM-карты"</string> + <string name="add_widget_item" msgid="279702152366857415">"Выбор виджета..."</string> + <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string> + <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string> + <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string> + <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string> +</resources> diff --git a/packages/Keyguard/res/values-ru/strings.xml b/packages/Keyguard/res/values-ru/strings.xml new file mode 100644 index 0000000..3d482d9 --- /dev/null +++ b/packages/Keyguard/res/values-ru/strings.xml @@ -0,0 +1,138 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Введите PIN-код"</string> + <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Введите PUK-код и новый PIN-код"</string> + <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK-код"</string> + <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Новый PIN-код"</string> + <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Нажмите для ввода пароля"</font></string> + <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Введите пароль"</string> + <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Введите PIN-код"</string> + <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"Неверный PIN-код."</string> + <string name="keyguard_label_text" msgid="861796461028298424">"Для разблокировки нажмите \"Меню\", а затем 0."</string> + <string name="faceunlock_multiple_failures" msgid="754137583022792429">"Все попытки войти с помощью Фейсконтроля использованы"</string> + <string name="keyguard_charged" msgid="3272223906073492454">"Батарея заряжена"</string> + <string name="keyguard_plugged_in" msgid="8117572000639998388">"Идет зарядка (<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>)"</string> + <string name="keyguard_low_battery" msgid="8143808018719173859">"Подключите зарядное устройство."</string> + <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Для разблокировки нажмите \"Меню\"."</string> + <string name="keyguard_network_locked_message" msgid="9169717779058037168">"Сеть заблокирована"</string> + <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"Нет SIM-карты"</string> + <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"Нет SIM-карты."</string> + <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"Нет SIM-карты."</string> + <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"Вставьте SIM-карту."</string> + <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"SIM-карта отсутствует или недоступна. Вставьте SIM-карту."</string> + <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"SIM-карта непригодна."</string> + <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"SIM-карта окончательно заблокирована."\n"Чтобы получить новую, обратитесь к своему оператору."</string> + <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM-карта заблокирована."</string> + <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"Для разблокировки SIM-карты требуется PUK-код."</string> + <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Разблокировка SIM-карты…"</string> + <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. Виджет %2$d из %3$d."</string> + <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"Добавить виджет"</string> + <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"Пусто"</string> + <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"Область разблокировки развернута"</string> + <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"Область разблокировки свернута"</string> + <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"Виджет \"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g>\""</string> + <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"Выбор аккаунта"</string> + <string name="keyguard_accessibility_status" msgid="8008264603935930611">"Статус"</string> + <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"Камера"</string> + <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"Управление блокировкой"</string> + <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"Начато переопределение порядка виджетов"</string> + <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"Порядок виджетов определен"</string> + <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"Виджет <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> удален"</string> + <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"Развернуть области разблокировки"</string> + <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"Прокрутка"</string> + <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Графический ключ"</string> + <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Фейсконтроль"</string> + <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"PIN-код"</string> + <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Пароль"</string> + <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Область ввода графического ключа"</string> + <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Область слайдера"</string> + <string name="keyguard_accessibility_transport_prev_description" msgid="1337286538318543555">"Кнопка перехода к предыдущему треку"</string> + <string name="keyguard_accessibility_transport_next_description" msgid="7073928300444909320">"Кнопка перехода к следующему треку"</string> + <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Кнопка паузы"</string> + <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Кнопка воспроизведения"</string> + <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Кнопка выключения"</string> + <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string> + <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"АБВ"</string> + <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string> + <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Клавиша ALT"</string> + <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Отмена"</string> + <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Клавиша удаления"</string> + <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Готово"</string> + <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Клавиша смены режима"</string> + <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Клавиша смены регистра"</string> + <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Клавиша ввода"</string> + <string name="description_target_unlock" msgid="2228524900439801453">"Разблокировать"</string> + <string name="description_target_camera" msgid="969071997552486814">"Камера"</string> + <string name="description_target_silent" msgid="893551287746522182">"Без звука"</string> + <string name="description_target_soundon" msgid="30052466675500172">"Включить звук"</string> + <string name="description_target_search" msgid="3091587249776033139">"Поиск"</string> + <string name="description_direction_up" msgid="7169032478259485180">"Проведите вверх, чтобы <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_down" msgid="5087739728639014595">"Проведите вниз, чтобы <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_left" msgid="7207478719805562165">"Проведите влево, чтобы <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_right" msgid="8034433242579600980">"Проведите вправо, чтобы <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="user_switched" msgid="3768006783166984410">"Выбран аккаунт пользователя <xliff:g id="NAME">%1$s</xliff:g>."</string> + <string name="kg_emergency_call_label" msgid="684946192523830531">"Экстренный вызов"</string> + <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Забыли графический ключ?"</string> + <string name="kg_wrong_pattern" msgid="1850806070801358830">"Неправильный графический ключ"</string> + <string name="kg_wrong_password" msgid="2333281762128113157">"Неправильный пароль"</string> + <string name="kg_wrong_pin" msgid="1131306510833563801">"Неправильный PIN-код"</string> + <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"Повторите попытку через <xliff:g id="NUMBER">%d</xliff:g> сек."</string> + <string name="kg_pattern_instructions" msgid="398978611683075868">"Введите графический ключ"</string> + <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Введите PIN-код SIM-карты"</string> + <string name="kg_pin_instructions" msgid="2377242233495111557">"Введите PIN"</string> + <string name="kg_password_instructions" msgid="5753646556186936819">"Введите пароль"</string> + <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"SIM-карта заблокирована. Чтобы продолжить, введите PUK-код. За подробной информацией обратитесь к своему оператору связи."</string> + <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Введите желаемый PIN-код"</string> + <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Введите PIN-код ещё раз"</string> + <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Разблокировка SIM-карты…"</string> + <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Неверный PIN-код."</string> + <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Введите PIN-код (от 4 до 8 цифр)."</string> + <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK-код должен содержать не менее 8 символов."</string> + <string name="kg_invalid_puk" msgid="3638289409676051243">"Введите правильный PUK-код. После нескольких неудачных попыток SIM-карта будет заблокирована."</string> + <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN-коды не совпадают"</string> + <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Слишком много попыток ввода графического ключа"</string> + <string name="kg_login_instructions" msgid="1100551261265506448">"Чтобы разблокировать устройство, войдите в свой аккаунт Google."</string> + <string name="kg_login_username_hint" msgid="5718534272070920364">"Имя пользователя (эл. почта)"</string> + <string name="kg_login_password_hint" msgid="9057289103827298549">"Пароль"</string> + <string name="kg_login_submit_button" msgid="5355904582674054702">"Войти"</string> + <string name="kg_login_invalid_input" msgid="5754664119319872197">"Неверное имя пользователя или пароль."</string> + <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Забыли имя пользователя или пароль?"\n"Перейдите на страницу "<b>"google.com/accounts/recovery"</b>"."</string> + <string name="kg_login_checking_password" msgid="1052685197710252395">"Проверка данных…"</string> + <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Вы <xliff:g id="NUMBER_0">%d</xliff:g> раз неверно указали PIN-код. "\n\n"Повтор через <xliff:g id="NUMBER_1">%d</xliff:g> сек."</string> + <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Вы <xliff:g id="NUMBER_0">%d</xliff:g> раз неверно указали пароль."\n\n"Повтор через <xliff:g id="NUMBER_1">%d</xliff:g> сек."</string> + <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Вы <xliff:g id="NUMBER_0">%d</xliff:g> раз неверно указали графический ключ."\n\n"Повтор через <xliff:g id="NUMBER_1">%d</xliff:g> сек."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"Вы <xliff:g id="NUMBER_0">%d</xliff:g> раз не смогли разблокировать планшетный ПК. После <xliff:g id="NUMBER_1">%d</xliff:g> неверных попыток будут восстановлены заводские настройки, что приведет к удалению всех пользовательских данных."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"Вы <xliff:g id="NUMBER_0">%d</xliff:g> раз не смогли разблокировать телефон. После <xliff:g id="NUMBER_1">%d</xliff:g> неверных попыток будут восстановлены заводские настройки, что приведет к удалению всех пользовательских данных."</string> + <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"Вы <xliff:g id="NUMBER">%d</xliff:g> раз не смогли разблокировать планшетный ПК. Будут восстановлены заводские настройки."</string> + <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"Вы <xliff:g id="NUMBER">%d</xliff:g> раз не смогли разблокировать телефон. Будут восстановлены заводские настройки."</string> + <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Вы <xliff:g id="NUMBER_0">%d</xliff:g> раз неверно указали графический ключ. После <xliff:g id="NUMBER_1">%d</xliff:g> неверных попыток для разблокировки планшетного ПК потребуется войти в аккаунт Google."\n\n"Повтор через <xliff:g id="NUMBER_2">%d</xliff:g> сек."</string> + <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Вы <xliff:g id="NUMBER_0">%d</xliff:g> раз неверно указали графический ключ. После <xliff:g id="NUMBER_1">%d</xliff:g> неверных попыток для разблокировки телефона потребуется войти в аккаунт Google."\n\n"Повтор через <xliff:g id="NUMBER_2">%d</xliff:g> сек."</string> + <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" – "</string> + <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Удалить"</string> + <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Кнопка перехода к предыдущему треку"</string> + <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Кнопка перехода к следующему треку"</string> + <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Кнопка паузы"</string> + <string name="keyguard_transport_play_description" msgid="2924628863741150956">"Кнопка воспроизведения"</string> + <string name="keyguard_transport_stop_description" msgid="3084179324810575787">"Кнопка выключения"</string> + <string name="keyguard_carrier_default" msgid="8700650403054042153">"Нет сигнала."</string> +</resources> diff --git a/packages/Keyguard/res/values-sk/activitystrings.xml b/packages/Keyguard/res/values-sk/activitystrings.xml new file mode 100644 index 0000000..33f2228 --- /dev/null +++ b/packages/Keyguard/res/values-sk/activitystrings.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string> + <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string> + <string name="none_menu_item" msgid="6156747285687551424">"Bez zabezpečenia"</string> + <string name="pin_menu_item" msgid="1179756433268962311">"Kód PIN"</string> + <string name="password_menu_item" msgid="1959980499662153160">"Heslo"</string> + <string name="pattern_menu_item" msgid="2987798152175140249">"Vzor"</string> + <string name="sim_pin_menu_item" msgid="3962286639645084880">"PIN karty SIM"</string> + <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK karty SIM"</string> + <string name="add_widget_item" msgid="279702152366857415">"Vyberte miniaplikáciu..."</string> + <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string> + <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string> + <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string> + <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string> +</resources> diff --git a/packages/Keyguard/res/values-sk/strings.xml b/packages/Keyguard/res/values-sk/strings.xml new file mode 100644 index 0000000..66887bc --- /dev/null +++ b/packages/Keyguard/res/values-sk/strings.xml @@ -0,0 +1,138 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Zadajte kód PIN"</string> + <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Zadajte kód PUK a nový kód PIN"</string> + <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"Kód PUK"</string> + <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Nový kód PIN"</string> + <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Dotknutím zadajte heslo"</font></string> + <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Zadajte heslo na odomknutie"</string> + <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Zadajte kód PIN na odomknutie"</string> + <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"Nesprávny kód PIN."</string> + <string name="keyguard_label_text" msgid="861796461028298424">"Ak chcete telefón odomknúť, stlačte Menu a následne 0."</string> + <string name="faceunlock_multiple_failures" msgid="754137583022792429">"Prekročili ste maximálny povolený počet pokusov o odomknutie tvárou"</string> + <string name="keyguard_charged" msgid="3272223906073492454">"Batéria je nabitá"</string> + <string name="keyguard_plugged_in" msgid="8117572000639998388">"Nabíjanie, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string> + <string name="keyguard_low_battery" msgid="8143808018719173859">"Pripojte nabíjačku."</string> + <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Telefón odomknete stlačením tlačidla Menu."</string> + <string name="keyguard_network_locked_message" msgid="9169717779058037168">"Sieť je zablokovaná"</string> + <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"Nie je vložená karta SIM."</string> + <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"V tablete nie je žiadna karta SIM."</string> + <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"V telefóne nie je žiadna karta SIM."</string> + <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"Vložte kartu SIM."</string> + <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"Karta SIM chýba alebo sa z nej nedá čítať. Vložte kartu SIM."</string> + <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"Karta SIM je nepoužiteľná."</string> + <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"Vaša karta SIM bola natrvalo zakázaná."\n"Ak chcete získať inú kartu SIM, kontaktujte svojho poskytovateľa bezdrôtových služieb."</string> + <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"Karta SIM je uzamknutá."</string> + <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"Karta SIM je uzamknutá pomocou kódu PUK."</string> + <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Prebieha odomykanie karty SIM..."</string> + <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. Miniaplikácia %2$d z %3$d."</string> + <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"Pridať miniaplikáciu."</string> + <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"Prázdne"</string> + <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"Oblasť na odomknutie bola rozšírená."</string> + <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"Oblasť na odomknutie bola zúžená."</string> + <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"Miniaplikácia <xliff:g id="WIDGET_INDEX">%1$s</xliff:g>."</string> + <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"Výber používateľa"</string> + <string name="keyguard_accessibility_status" msgid="8008264603935930611">"Stav"</string> + <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"Fotoaparát"</string> + <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"Ovládacie prvky médií"</string> + <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"Zmena usporiadania miniaplikácií sa začala."</string> + <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"Zmena usporiadania miniaplikácií sa skončila."</string> + <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"Miniaplikácia <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> bola odstránená."</string> + <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"Rozšíriť oblasť na odomknutie."</string> + <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"Odomknutie prejdením prstom."</string> + <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Odomknutie vzorom."</string> + <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Odomknutie tvárou."</string> + <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Odomknutie kódom PIN."</string> + <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Odomknutie heslom."</string> + <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Oblasť na zadanie bezpečnostného vzoru."</string> + <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Oblasť na prejdenie prstom."</string> + <string name="keyguard_accessibility_transport_prev_description" msgid="1337286538318543555">"Tlačidlo Predchádzajúca stopa"</string> + <string name="keyguard_accessibility_transport_next_description" msgid="7073928300444909320">"Tlačidlo Ďalšia stopa"</string> + <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Tlačidlo Pozastaviť"</string> + <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Tlačidlo Prehrať"</string> + <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Tlačidlo Zastaviť"</string> + <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string> + <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string> + <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string> + <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string> + <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Zrušiť"</string> + <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Odstrániť"</string> + <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Hotovo"</string> + <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Zmena režimu"</string> + <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string> + <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string> + <string name="description_target_unlock" msgid="2228524900439801453">"Odomknúť"</string> + <string name="description_target_camera" msgid="969071997552486814">"Fotoaparát"</string> + <string name="description_target_silent" msgid="893551287746522182">"Tichý"</string> + <string name="description_target_soundon" msgid="30052466675500172">"Zapnúť zvuk"</string> + <string name="description_target_search" msgid="3091587249776033139">"Vyhľadávanie"</string> + <string name="description_direction_up" msgid="7169032478259485180">"Prejdite prstom nahor: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_down" msgid="5087739728639014595">"Prejdite prstom nadol: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_left" msgid="7207478719805562165">"Prejdite prstom doľava: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_right" msgid="8034433242579600980">"Prejdite prstom doprava: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="user_switched" msgid="3768006783166984410">"Aktuálny používateľ je <xliff:g id="NAME">%1$s</xliff:g>."</string> + <string name="kg_emergency_call_label" msgid="684946192523830531">"Tiesňové volanie"</string> + <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Nepamätám si vzor"</string> + <string name="kg_wrong_pattern" msgid="1850806070801358830">"Nesprávny vzor"</string> + <string name="kg_wrong_password" msgid="2333281762128113157">"Nesprávne heslo"</string> + <string name="kg_wrong_pin" msgid="1131306510833563801">"Nesprávny kód PIN"</string> + <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"Skúste to znova o <xliff:g id="NUMBER">%d</xliff:g> s."</string> + <string name="kg_pattern_instructions" msgid="398978611683075868">"Nakreslite svoj vzor"</string> + <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Zadajte kód PIN karty SIM"</string> + <string name="kg_pin_instructions" msgid="2377242233495111557">"Zadajte kód PIN"</string> + <string name="kg_password_instructions" msgid="5753646556186936819">"Zadajte heslo"</string> + <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"Karta SIM je teraz zakázaná. Ak chcete pokračovať, zadajte kód PUK. Podrobné informácie získate od operátora."</string> + <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Zadajte požadovaný kód PIN"</string> + <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Potvrďte požadovaný kód PIN"</string> + <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Prebieha odomykanie karty SIM..."</string> + <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Nesprávny kód PIN."</string> + <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Zadajte kód PIN s dĺžkou 4 až 8 číslic."</string> + <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"Kód PUK musí obsahovať 8 alebo viac číslic."</string> + <string name="kg_invalid_puk" msgid="3638289409676051243">"Znova zadajte správny kód PUK. Opakované pokusy zakážu kartu SIM natrvalo."</string> + <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"Kódy PIN sa nezhodujú"</string> + <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Príliš veľa pokusov o nakreslenie vzoru"</string> + <string name="kg_login_instructions" msgid="1100551261265506448">"Ak chcete telefón odomknúť, prihláste sa pomocou svojho účtu Google."</string> + <string name="kg_login_username_hint" msgid="5718534272070920364">"Používateľské meno (e-mail)"</string> + <string name="kg_login_password_hint" msgid="9057289103827298549">"Heslo"</string> + <string name="kg_login_submit_button" msgid="5355904582674054702">"Prihlásiť sa"</string> + <string name="kg_login_invalid_input" msgid="5754664119319872197">"Neplatné používateľské meno alebo heslo."</string> + <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Zabudli ste svoje používateľské meno alebo heslo?"\n" Navštívte stránky "<b>"google.com/accounts/recovery"</b>"."</string> + <string name="kg_login_checking_password" msgid="1052685197710252395">"Prebieha kontrola účtu..."</string> + <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"<xliff:g id="NUMBER_0">%d</xliff:g>-krát ste zadali nesprávny kód PIN. "\n\n"Skúste to znova o <xliff:g id="NUMBER_1">%d</xliff:g> s."</string> + <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"<xliff:g id="NUMBER_0">%d</xliff:g>-krát ste zadali nesprávne heslo. "\n\n"Skúste to znova o <xliff:g id="NUMBER_1">%d</xliff:g>."</string> + <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"<xliff:g id="NUMBER_0">%d</xliff:g>-krát ste použili nesprávny bezpečnostný vzor. "\n\n"Skúste to znova o <xliff:g id="NUMBER_1">%d</xliff:g> s."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"Tablet ste sa pokúsili odomknúť nesprávnym spôsobom <xliff:g id="NUMBER_0">%d</xliff:g>-krát. Po <xliff:g id="NUMBER_1">%d</xliff:g> ďalších neúspešných pokusoch sa v tablete obnovia predvolené továrenské nastavenia a všetky používateľské údaje budú stratené."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"Telefón ste sa pokúsili odomknúť nesprávnym spôsobom <xliff:g id="NUMBER_0">%d</xliff:g>-krát. Po <xliff:g id="NUMBER_1">%d</xliff:g> ďalších neúspešných pokusoch sa v telefóne obnovia predvolené továrenské nastavenia a všetky používateľské údaje budú stratené."</string> + <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"Tablet ste sa pokúsili odomknúť nesprávnym spôsobom <xliff:g id="NUMBER">%d</xliff:g>-krát. V tablete sa teraz obnovia predvolené továrenské nastavenia."</string> + <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"Telefón ste sa pokúsili odomknúť nesprávnym spôsobom <xliff:g id="NUMBER">%d</xliff:g>-krát. V telefóne sa teraz obnovia predvolené továrenské nastavenia."</string> + <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"<xliff:g id="NUMBER_0">%d</xliff:g>-krát ste nesprávne nakreslili svoj bezpečnostný vzor. Po ďalších <xliff:g id="NUMBER_1">%d</xliff:g> neúspešných pokusoch sa zobrazí výzva na odomknutie tabletu pomocou e-mailového účtu."\n\n" Skúste to znova o <xliff:g id="NUMBER_2">%d</xliff:g> s."</string> + <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"<xliff:g id="NUMBER_0">%d</xliff:g>-krát ste nesprávne nakreslili svoj bezpečnostný vzor. Po <xliff:g id="NUMBER_1">%d</xliff:g> ďalších neúspešných pokusoch sa zobrazí výzva na odomknutie telefónu pomocou e-mailového účtu."\n\n" Skúste to znova o <xliff:g id="NUMBER_2">%d</xliff:g> s."</string> + <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string> + <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Odstrániť"</string> + <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Tlačidlo Predchádzajúca stopa"</string> + <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Tlačidlo Ďalšia stopa"</string> + <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Tlačidlo Pozastaviť"</string> + <string name="keyguard_transport_play_description" msgid="2924628863741150956">"Tlačidlo Prehrať"</string> + <string name="keyguard_transport_stop_description" msgid="3084179324810575787">"Tlačidlo Zastaviť"</string> + <string name="keyguard_carrier_default" msgid="8700650403054042153">"Žiadny signál"</string> +</resources> diff --git a/packages/Keyguard/res/values-sl/activitystrings.xml b/packages/Keyguard/res/values-sl/activitystrings.xml new file mode 100644 index 0000000..2c60219 --- /dev/null +++ b/packages/Keyguard/res/values-sl/activitystrings.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string> + <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string> + <string name="none_menu_item" msgid="6156747285687551424">"Brez varnosti"</string> + <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string> + <string name="password_menu_item" msgid="1959980499662153160">"Geslo"</string> + <string name="pattern_menu_item" msgid="2987798152175140249">"Vzorec"</string> + <string name="sim_pin_menu_item" msgid="3962286639645084880">"PIN za kartico SIM"</string> + <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK za kartico SIM"</string> + <string name="add_widget_item" msgid="279702152366857415">"Izberite pripomoček ..."</string> + <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string> + <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string> + <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string> + <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string> +</resources> diff --git a/packages/Keyguard/res/values-sl/strings.xml b/packages/Keyguard/res/values-sl/strings.xml new file mode 100644 index 0000000..cdd5ca7b --- /dev/null +++ b/packages/Keyguard/res/values-sl/strings.xml @@ -0,0 +1,138 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Vnesite kodo PIN"</string> + <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Vnesite kodo PUK in novo kodo PIN"</string> + <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"Koda PUK"</string> + <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Nova koda PIN"</string> + <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Dotaknite se za vnos gesla"</font></string> + <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Vnesite geslo za odklepanje"</string> + <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Vnesite PIN za odklepanje"</string> + <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"Napačna koda PIN."</string> + <string name="keyguard_label_text" msgid="861796461028298424">"Če želite telefon odkleniti, pritisnite meni in nato 0."</string> + <string name="faceunlock_multiple_failures" msgid="754137583022792429">"Presegli ste dovoljeno število poskusov odklepanja z obrazom"</string> + <string name="keyguard_charged" msgid="3272223906073492454">"Napolnjeno"</string> + <string name="keyguard_plugged_in" msgid="8117572000639998388">"Polnjenje, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string> + <string name="keyguard_low_battery" msgid="8143808018719173859">"Priključite napajalnik."</string> + <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Če želite odkleniti, pritisnite meni."</string> + <string name="keyguard_network_locked_message" msgid="9169717779058037168">"Omrežje je zaklenjeno"</string> + <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"Ni kartice SIM"</string> + <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"V tabličnem računalniku ni kartice SIM."</string> + <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"V telefonu ni kartice SIM."</string> + <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"Vstavite kartico SIM."</string> + <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"Kartice SIM ni ali je ni mogoče prebrati. Vstavite jo."</string> + <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"Neuporabna kartica SIM."</string> + <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"Kartica SIM je trajno onemogočena."\n" Obrnite se na operaterja za drugo."</string> + <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"Kartica SIM je zaklenjena."</string> + <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"Kartica SIM je zaklenjena s kodo PUK."</string> + <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Odklepanje kartice SIM …"</string> + <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. Pripomoček %2$d za %3$d."</string> + <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"Dodajanje pripomočka."</string> + <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"Prazno"</string> + <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"Območje odklepanja razširjeno."</string> + <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"Območje odklepanja strnjeno."</string> + <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"Pripomoček <xliff:g id="WIDGET_INDEX">%1$s</xliff:g>."</string> + <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"Izbirnik uporabnika"</string> + <string name="keyguard_accessibility_status" msgid="8008264603935930611">"Stanje"</string> + <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"Fotoaparat"</string> + <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"Kontrolniki predstavnosti"</string> + <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"Prerazporejanje pripomočkov začeto."</string> + <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"Prerazporejanje pripomočkov končano."</string> + <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"Pripomoček <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> izbrisan."</string> + <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"Razširitev območja odklepanja."</string> + <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"Odklepanje s podrsanjem."</string> + <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Odklepanje z vzorcem."</string> + <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Odklepanje z obrazom."</string> + <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Odklepanje s kodo PIN."</string> + <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Odklepanje z geslom."</string> + <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Območje vzorca."</string> + <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Območje podrsanja."</string> + <string name="keyguard_accessibility_transport_prev_description" msgid="1337286538318543555">"Gumb za prejšnjo skladbo"</string> + <string name="keyguard_accessibility_transport_next_description" msgid="7073928300444909320">"Gumb za naslednjo skladbo"</string> + <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Gumb za začasno ustavitev"</string> + <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Gumb za predvajanje"</string> + <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Gumb za ustavitev"</string> + <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string> + <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string> + <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string> + <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Tipka Alt"</string> + <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Prekliči"</string> + <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Tipka Delete"</string> + <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Končano"</string> + <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Sprememba načina"</string> + <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Tipka Shift"</string> + <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Tipka Enter"</string> + <string name="description_target_unlock" msgid="2228524900439801453">"Odkleni"</string> + <string name="description_target_camera" msgid="969071997552486814">"Fotoaparat"</string> + <string name="description_target_silent" msgid="893551287746522182">"Tiho"</string> + <string name="description_target_soundon" msgid="30052466675500172">"Vklopljen zvok"</string> + <string name="description_target_search" msgid="3091587249776033139">"Iskanje"</string> + <string name="description_direction_up" msgid="7169032478259485180">"Povlecite navzgor za <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_down" msgid="5087739728639014595">"Povlecite navzdol za <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_left" msgid="7207478719805562165">"Povlecite v levo za <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ."</string> + <string name="description_direction_right" msgid="8034433242579600980">"Povlecite v desno za <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="user_switched" msgid="3768006783166984410">"Trenutni uporabnik <xliff:g id="NAME">%1$s</xliff:g>."</string> + <string name="kg_emergency_call_label" msgid="684946192523830531">"Klic v sili"</string> + <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Pozabljen vzorec"</string> + <string name="kg_wrong_pattern" msgid="1850806070801358830">"Napačen vzorec"</string> + <string name="kg_wrong_password" msgid="2333281762128113157">"Napačno geslo"</string> + <string name="kg_wrong_pin" msgid="1131306510833563801">"Napačen PIN"</string> + <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"Čez <xliff:g id="NUMBER">%d</xliff:g> sekund poskusite znova."</string> + <string name="kg_pattern_instructions" msgid="398978611683075868">"Narišite vzorec"</string> + <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Vnesite PIN za kartico SIM"</string> + <string name="kg_pin_instructions" msgid="2377242233495111557">"Vnesite PIN"</string> + <string name="kg_password_instructions" msgid="5753646556186936819">"Vnesite geslo"</string> + <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"Kartica SIM je onemogočena. Če želite nadaljevati, vnesite kodo PUK. Za dodatne informacije se obrnite na operaterja."</string> + <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Vnesite želeno kodo PIN"</string> + <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Potrdite želeno kodo PIN"</string> + <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Odklepanje kartice SIM ..."</string> + <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Napačna koda PIN."</string> + <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Vnesite PIN, ki vsebuje od štiri do osem številk."</string> + <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"Koda PUK mora vsebovati 8 ali več števk."</string> + <string name="kg_invalid_puk" msgid="3638289409676051243">"Vnovič vnesite pravilno kodo PUK. Večkratni poskusi bodo trajno onemogočili kartico SIM."</string> + <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"Kodi PIN se ne ujemata"</string> + <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Preveč poskusov vzorca"</string> + <string name="kg_login_instructions" msgid="1100551261265506448">"Če želite odkleniti napravo, se prijavite z Google Računom."</string> + <string name="kg_login_username_hint" msgid="5718534272070920364">"Uporabniško ime (e-pošta)"</string> + <string name="kg_login_password_hint" msgid="9057289103827298549">"Geslo"</string> + <string name="kg_login_submit_button" msgid="5355904582674054702">"Prijava"</string> + <string name="kg_login_invalid_input" msgid="5754664119319872197">"Neveljavno uporabniško ime ali geslo."</string> + <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Ali ste pozabili uporabniško ime ali geslo?"\n"Obiščite "<b>"google.com/accounts/recovery"</b>"."</string> + <string name="kg_login_checking_password" msgid="1052685197710252395">"Preverjanje računa ..."</string> + <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"PIN ste <xliff:g id="NUMBER_0">%d</xliff:g>-krat vnesli napačno. "\n\n"Znova poskusite čez <xliff:g id="NUMBER_1">%d</xliff:g> s."</string> + <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Geslo ste <xliff:g id="NUMBER_0">%d</xliff:g>-krat vnesli napačno. "\n\n"Znova poskusite čez <xliff:g id="NUMBER_1">%d</xliff:g> s."</string> + <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Vzorec za odklepanje ste nepravilno narisali <xliff:g id="NUMBER_0">%d</xliff:g>-krat. "\n\n"Poskusite znova čez <xliff:g id="NUMBER_1">%d</xliff:g> s."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"Tablični računalnik ste poskusili <xliff:g id="NUMBER_0">%d</xliff:g>-krat napačno odkleniti. Če poskusite še <xliff:g id="NUMBER_1">%d</xliff:g>-krat in ne uspete, bo ponastavljen na privzete tovarniške nastavitve in vsi uporabniški podatki bodo izgubljeni."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"Telefon ste poskusili <xliff:g id="NUMBER_0">%d</xliff:g>-krat napačno odkleniti. Če poskusite še <xliff:g id="NUMBER_1">%d</xliff:g>-krat in ne uspete, bo ponastavljen na privzete tovarniške nastavitve in vsi uporabniški podatki bodo izgubljeni."</string> + <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"Tablični računalnik ste poskusili <xliff:g id="NUMBER">%d</xliff:g>-krat napačno odkleniti, zato bo ponastavljen na privzete tovarniške nastavitve."</string> + <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"Telefon ste poskusili <xliff:g id="NUMBER">%d</xliff:g>-krat napačno odkleniti, zato bo ponastavljen na privzete tovarniške nastavitve."</string> + <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Vzorec za odklepanje ste <xliff:g id="NUMBER_0">%d</xliff:g>-krat napačno vnesli. Po nadaljnjih <xliff:g id="NUMBER_1">%d</xliff:g> neuspešnih poskusih boste pozvani, da tablični računalnik odklenete z e-poštnim računom."\n\n"Poskusite znova čez <xliff:g id="NUMBER_2">%d</xliff:g> s."</string> + <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Vzorec za odklepanje ste <xliff:g id="NUMBER_0">%d</xliff:g>-krat napačno vnesli. Po nadaljnjih <xliff:g id="NUMBER_1">%d</xliff:g> neuspešnih poskusih boste pozvani, da odklenete telefon z Googlovimi podatki za prijavo."\n\n"Poskusite znova čez <xliff:g id="NUMBER_2">%d</xliff:g> s."</string> + <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" – "</string> + <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Odstrani"</string> + <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Gumb za prejšnjo skladbo"</string> + <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Gumb za naslednjo skladbo"</string> + <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Gumb za začasno ustavitev"</string> + <string name="keyguard_transport_play_description" msgid="2924628863741150956">"Gumb za predvajanje"</string> + <string name="keyguard_transport_stop_description" msgid="3084179324810575787">"Gumb za ustavitev"</string> + <string name="keyguard_carrier_default" msgid="8700650403054042153">"Ni storitve."</string> +</resources> diff --git a/packages/Keyguard/res/values-sr/activitystrings.xml b/packages/Keyguard/res/values-sr/activitystrings.xml new file mode 100644 index 0000000..34802df --- /dev/null +++ b/packages/Keyguard/res/values-sr/activitystrings.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string> + <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string> + <string name="none_menu_item" msgid="6156747285687551424">"Без заштите"</string> + <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string> + <string name="password_menu_item" msgid="1959980499662153160">"Лозинка"</string> + <string name="pattern_menu_item" msgid="2987798152175140249">"Шаблон"</string> + <string name="sim_pin_menu_item" msgid="3962286639645084880">"PIN SIM картице"</string> + <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK SIM картице"</string> + <string name="add_widget_item" msgid="279702152366857415">"Изабери виџет..."</string> + <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string> + <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string> + <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string> + <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string> +</resources> diff --git a/packages/Keyguard/res/values-sr/strings.xml b/packages/Keyguard/res/values-sr/strings.xml new file mode 100644 index 0000000..0f08426 --- /dev/null +++ b/packages/Keyguard/res/values-sr/strings.xml @@ -0,0 +1,138 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Унесите PIN кôд"</string> + <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Унесите PUK и нови PIN кôд"</string> + <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK кôд"</string> + <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Нови PIN кôд"</string> + <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Додирните да бисте унели лозинку"</font></string> + <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Откуцајте лозинку да бисте откључали"</string> + <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Унесите PIN за откључавање"</string> + <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"PIN кôд је нетачан."</string> + <string name="keyguard_label_text" msgid="861796461028298424">"Да бисте откључали, притисните „Мени“, а затим 0."</string> + <string name="faceunlock_multiple_failures" msgid="754137583022792429">"Премашен је највећи дозвољени број покушаја Откључавања лицем"</string> + <string name="keyguard_charged" msgid="3272223906073492454">"Напуњено"</string> + <string name="keyguard_plugged_in" msgid="8117572000639998388">"Пуњење, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string> + <string name="keyguard_low_battery" msgid="8143808018719173859">"Повежите пуњач."</string> + <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Притисните Мени да бисте откључали."</string> + <string name="keyguard_network_locked_message" msgid="9169717779058037168">"Мрежа је закључана"</string> + <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"Нема SIM картице"</string> + <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"У таблету нема SIM картице."</string> + <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"У телефону нема SIM картице."</string> + <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"Уметните SIM картицу."</string> + <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"SIM картица недостаје или не може да се прочита. Уметните SIM картицу."</string> + <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"SIM картица је неупотребљива."</string> + <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"SIM картица је трајно онемогућена."\n" Обратите се добављачу услуге бежичне мреже да бисте добили другу SIM картицу."</string> + <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM картица је закључана."</string> + <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM картица је закључана PUK кодом."</string> + <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Откључавање SIM картице…"</string> + <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. Виџет %2$d од %3$d."</string> + <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"Додај виџет."</string> + <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"Празно"</string> + <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"Област откључавања је проширена."</string> + <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"Област откључавања је скупљена."</string> + <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"Виџет <xliff:g id="WIDGET_INDEX">%1$s</xliff:g>."</string> + <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"Избор корисника"</string> + <string name="keyguard_accessibility_status" msgid="8008264603935930611">"Статус"</string> + <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"Камера"</string> + <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"Контроле за медије"</string> + <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"Започела је промена редоследа виџета."</string> + <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"Промена редоследа виџета је завршена."</string> + <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"Виџет <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> је избрисан."</string> + <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"Прошири област откључавања."</string> + <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"Откључавање превлачењем."</string> + <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Откључавање шаблоном."</string> + <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Откључавање лицем."</string> + <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Откључавање PIN-ом."</string> + <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Откључавање лозинком."</string> + <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Област шаблона."</string> + <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Област превлачења."</string> + <string name="keyguard_accessibility_transport_prev_description" msgid="1337286538318543555">"Дугме за претходну песму"</string> + <string name="keyguard_accessibility_transport_next_description" msgid="7073928300444909320">"Дугме за следећу песму"</string> + <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Дугме за паузу"</string> + <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Дугме за репродукцију"</string> + <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Дугме за заустављање"</string> + <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string> + <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string> + <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string> + <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string> + <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Откажи"</string> + <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Избриши"</string> + <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Готово"</string> + <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Промена режима"</string> + <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string> + <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string> + <string name="description_target_unlock" msgid="2228524900439801453">"Откључај"</string> + <string name="description_target_camera" msgid="969071997552486814">"Камера"</string> + <string name="description_target_silent" msgid="893551287746522182">"Нечујно"</string> + <string name="description_target_soundon" msgid="30052466675500172">"Укључи звук"</string> + <string name="description_target_search" msgid="3091587249776033139">"Претрага"</string> + <string name="description_direction_up" msgid="7169032478259485180">"Превуците нагоре за <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_down" msgid="5087739728639014595">"Превуците надоле за <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_left" msgid="7207478719805562165">"Превуците улево за <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_right" msgid="8034433242579600980">"Превуците удесно за <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="user_switched" msgid="3768006783166984410">"Актуелни корисник <xliff:g id="NAME">%1$s</xliff:g>."</string> + <string name="kg_emergency_call_label" msgid="684946192523830531">"Хитни позив"</string> + <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Заборављени шаблон"</string> + <string name="kg_wrong_pattern" msgid="1850806070801358830">"Погрешан шаблон"</string> + <string name="kg_wrong_password" msgid="2333281762128113157">"Погрешна лозинка"</string> + <string name="kg_wrong_pin" msgid="1131306510833563801">"Погрешан PIN"</string> + <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"Покушајте поново за <xliff:g id="NUMBER">%d</xliff:g> секунде(и)."</string> + <string name="kg_pattern_instructions" msgid="398978611683075868">"Нацртајте шаблон"</string> + <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Унесите PIN SIM картице"</string> + <string name="kg_pin_instructions" msgid="2377242233495111557">"Унесите PIN"</string> + <string name="kg_password_instructions" msgid="5753646556186936819">"Унесите лозинку"</string> + <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"SIM картица је сада онемогућена. Унесите PUK кôд да бисте наставили. За детаље контактирајте оператера."</string> + <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Унесите жељени PIN кôд"</string> + <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Потврдите жељени PIN кôд"</string> + <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Откључавање SIM картице…"</string> + <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"PIN кôд је нетачан."</string> + <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Унесите PIN који има од 4 до 8 бројева."</string> + <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK кôд треба да има 8 или више бројева."</string> + <string name="kg_invalid_puk" msgid="3638289409676051243">"Поново унесите исправни PUK кôд. Поновљени покушаји ће трајно онемогућити SIM."</string> + <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN кодови се не подударају"</string> + <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Превише покушаја уноса шаблона"</string> + <string name="kg_login_instructions" msgid="1100551261265506448">"Да бисте откључали, пријавите се помоћу Google налога."</string> + <string name="kg_login_username_hint" msgid="5718534272070920364">"Корисничко име (адреса е-поште)"</string> + <string name="kg_login_password_hint" msgid="9057289103827298549">"Лозинка"</string> + <string name="kg_login_submit_button" msgid="5355904582674054702">"Пријави ме"</string> + <string name="kg_login_invalid_input" msgid="5754664119319872197">"Неважеће корисничко име или лозинка."</string> + <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Заборавили сте корисничко име или лозинку?"\n"Посетите адресу "<b>"google.com/accounts/recovery"</b>"."</string> + <string name="kg_login_checking_password" msgid="1052685197710252395">"Провера налога…"</string> + <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Унели сте PIN неисправно <xliff:g id="NUMBER_0">%d</xliff:g> пута. "\n\n"Покушајте поново за <xliff:g id="NUMBER_1">%d</xliff:g> секунде(и)."</string> + <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Унели сте лозинку неисправно <xliff:g id="NUMBER_0">%d</xliff:g> пута. "\n\n"Покушајте поново за <xliff:g id="NUMBER_1">%d</xliff:g> секунде(и)."</string> + <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Нацртали сте шаблон за откључавање неисправно <xliff:g id="NUMBER_0">%d</xliff:g> пута. "\n\n"Покушајте поново за <xliff:g id="NUMBER_1">%d</xliff:g> секунде(и)."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"Покушали сте да откључате таблет неисправно <xliff:g id="NUMBER_0">%d</xliff:g> пута. Након још <xliff:g id="NUMBER_1">%d</xliff:g> неуспешна(их) покушаја таблет ће бити враћен на подразумевана фабричка подешавања и сви кориснички подаци ће бити изгубљени."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"Покушали сте да откључате телефон неисправно <xliff:g id="NUMBER_0">%d</xliff:g> пута. После још <xliff:g id="NUMBER_1">%d</xliff:g> неуспешна(их) покушаја телефон ће бити враћен на подразумевана фабричка подешавања и сви кориснички подаци ће бити изгубљени."</string> + <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"Покушали сте да откључате таблет неисправно <xliff:g id="NUMBER">%d</xliff:g> пута. Таблет ће сада бити враћен на подразумевана фабричка подешавања."</string> + <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"Покушали сте да откључате телефон неисправно <xliff:g id="NUMBER">%d</xliff:g> пута. Телефон ће сада бити враћен на подразумевана фабричка подешавања."</string> + <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Нацртали сте шаблон за откључавање неисправно <xliff:g id="NUMBER_0">%d</xliff:g> пута. После још <xliff:g id="NUMBER_1">%d</xliff:g> неуспешна(их) покушаја, од вас ће бити затражено да откључате таблет помоћу налога е-поште."\n\n"Покушајте поново за <xliff:g id="NUMBER_2">%d</xliff:g> секунде(и)."</string> + <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Нацртали сте шаблон за откључавање неисправно <xliff:g id="NUMBER_0">%d</xliff:g> пута. После још <xliff:g id="NUMBER_1">%d</xliff:g> неуспешна(их) покушаја, од вас ће бити затражено да откључате телефон помоћу налога е-поште."\n\n"Покушајте поново за <xliff:g id="NUMBER_2">%d</xliff:g> секунде(и)."</string> + <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" – "</string> + <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Уклони"</string> + <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Дугме за претходну песму"</string> + <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Дугме за следећу песму"</string> + <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Дугме за паузу"</string> + <string name="keyguard_transport_play_description" msgid="2924628863741150956">"Дугме за репродукцију"</string> + <string name="keyguard_transport_stop_description" msgid="3084179324810575787">"Дугме за заустављање"</string> + <string name="keyguard_carrier_default" msgid="8700650403054042153">"Ван мреже сте."</string> +</resources> diff --git a/packages/Keyguard/res/values-sv/activitystrings.xml b/packages/Keyguard/res/values-sv/activitystrings.xml new file mode 100644 index 0000000..e664383 --- /dev/null +++ b/packages/Keyguard/res/values-sv/activitystrings.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string> + <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string> + <string name="none_menu_item" msgid="6156747285687551424">"Ingen säkerhet"</string> + <string name="pin_menu_item" msgid="1179756433268962311">"PIN-kod"</string> + <string name="password_menu_item" msgid="1959980499662153160">"Lösenord"</string> + <string name="pattern_menu_item" msgid="2987798152175140249">"Grafiskt lösenord"</string> + <string name="sim_pin_menu_item" msgid="3962286639645084880">"PIN-kod för SIM-kort"</string> + <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK-kod för SIM-kort"</string> + <string name="add_widget_item" msgid="279702152366857415">"Välj widget ..."</string> + <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string> + <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string> + <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string> + <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string> +</resources> diff --git a/packages/Keyguard/res/values-sv/strings.xml b/packages/Keyguard/res/values-sv/strings.xml new file mode 100644 index 0000000..a08cdfb --- /dev/null +++ b/packages/Keyguard/res/values-sv/strings.xml @@ -0,0 +1,138 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Ange PIN-kod"</string> + <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Ange PUK-koden och en ny PIN-kod"</string> + <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK-kod"</string> + <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Ny PIN-kod"</string> + <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Tryck om du vill ange lösenord"</font></string> + <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Ange lösenord för att låsa upp"</string> + <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Ange PIN-kod för att låsa upp"</string> + <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"Fel PIN-kod."</string> + <string name="keyguard_label_text" msgid="861796461028298424">"Tryck på Menu och sedan på 0 om du vill låsa upp."</string> + <string name="faceunlock_multiple_failures" msgid="754137583022792429">"Du har försökt låsa upp med Ansiktslås för många gånger"</string> + <string name="keyguard_charged" msgid="3272223906073492454">"Batteriet har laddats"</string> + <string name="keyguard_plugged_in" msgid="8117572000639998388">"Laddar, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string> + <string name="keyguard_low_battery" msgid="8143808018719173859">"Anslut din laddare."</string> + <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Tryck på Meny om du vill låsa upp."</string> + <string name="keyguard_network_locked_message" msgid="9169717779058037168">"Nätverk låst"</string> + <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"Inget SIM-kort"</string> + <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"Inget SIM-kort i surfplattan."</string> + <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"Inget SIM-kort i mobilen."</string> + <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"Sätt i ett SIM-kort."</string> + <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"SIM-kort saknas eller kan inte läsas. Sätt i ett SIM-kort."</string> + <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"Oanvändbart SIM-kort."</string> + <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"SIM-kortet har inaktiverats permanent."\n" Beställ ett nytt SIM-kort från din operatör."</string> + <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM-kortet är låst."</string> + <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM-kortet är PUK-låst."</string> + <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Låser upp SIM-kort …"</string> + <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. Widget %2$d av %3$d."</string> + <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"Lägg till en widget."</string> + <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"Tom"</string> + <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"Expanderad upplåsningsyta."</string> + <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"Komprimerad upplåsningsyta."</string> + <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"Widget för <xliff:g id="WIDGET_INDEX">%1$s</xliff:g>."</string> + <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"Användarväljare"</string> + <string name="keyguard_accessibility_status" msgid="8008264603935930611">"Status"</string> + <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"Kamera"</string> + <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"Mediereglage"</string> + <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"Ändring av widgetarnas ordning har påbörjats."</string> + <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"Ändring av widgetarnas ordning har avslutats."</string> + <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"Widgeten <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> har tagits bort."</string> + <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"Expandera upplåsningsytan."</string> + <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"Lås upp genom att dra."</string> + <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Lås upp med grafiskt lösenord."</string> + <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Lås upp med Ansiktslås."</string> + <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Lås upp med PIN-kod."</string> + <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Lås upp med lösenord."</string> + <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Fält för grafiskt lösenord."</string> + <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Fält med dragreglage."</string> + <string name="keyguard_accessibility_transport_prev_description" msgid="1337286538318543555">"Knapp för föregående spår"</string> + <string name="keyguard_accessibility_transport_next_description" msgid="7073928300444909320">"Knapp för nästa spår"</string> + <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Pausknappen"</string> + <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Uppspelningsknappen"</string> + <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Stoppknappen"</string> + <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string> + <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string> + <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string> + <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string> + <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Avbryt"</string> + <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Delete"</string> + <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Klar"</string> + <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Funktionsändring"</string> + <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Skift"</string> + <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Retur"</string> + <string name="description_target_unlock" msgid="2228524900439801453">"Lås upp"</string> + <string name="description_target_camera" msgid="969071997552486814">"Kamera"</string> + <string name="description_target_silent" msgid="893551287746522182">"Tyst"</string> + <string name="description_target_soundon" msgid="30052466675500172">"Ljud på"</string> + <string name="description_target_search" msgid="3091587249776033139">"Sök"</string> + <string name="description_direction_up" msgid="7169032478259485180">"Dra uppåt för <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ."</string> + <string name="description_direction_down" msgid="5087739728639014595">"Dra nedåt för <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_left" msgid="7207478719805562165">"Dra åt vänster för <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ."</string> + <string name="description_direction_right" msgid="8034433242579600980">"Dra åt höger för <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ."</string> + <string name="user_switched" msgid="3768006783166984410">"Nuvarande användare: <xliff:g id="NAME">%1$s</xliff:g>."</string> + <string name="kg_emergency_call_label" msgid="684946192523830531">"Nödsamtal"</string> + <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Har du glömt ditt grafiska lösenord?"</string> + <string name="kg_wrong_pattern" msgid="1850806070801358830">"Fel grafiskt lösenord"</string> + <string name="kg_wrong_password" msgid="2333281762128113157">"Fel lösenord"</string> + <string name="kg_wrong_pin" msgid="1131306510833563801">"Fel PIN-kod"</string> + <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"Försök igen om <xliff:g id="NUMBER">%d</xliff:g> sekunder."</string> + <string name="kg_pattern_instructions" msgid="398978611683075868">"Rita ditt grafiska lösenord"</string> + <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Ange PIN-kod för SIM-kortet"</string> + <string name="kg_pin_instructions" msgid="2377242233495111557">"Ange PIN-kod"</string> + <string name="kg_password_instructions" msgid="5753646556186936819">"Ange lösenord"</string> + <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"SIM-kortet är nu inaktiverat. Ange PUK-koden om du vill fortsätta. Kontakta operatören om du vill få mer information."</string> + <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Ange önskad PIN-kod"</string> + <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Bekräfta önskad PIN-kod"</string> + <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Låser upp SIM-kort …"</string> + <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Fel PIN-kod."</string> + <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Ange en PIN-kod med 4 till 8 siffror."</string> + <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK-koden ska vara minst åtta siffror."</string> + <string name="kg_invalid_puk" msgid="3638289409676051243">"Ange rätt PUK-kod igen. Om försöken upprepas inaktiveras SIM-kortet permanent."</string> + <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN-koderna stämmer inte överens"</string> + <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"För många försök med grafiskt lösenord"</string> + <string name="kg_login_instructions" msgid="1100551261265506448">"Logga in med ditt Google-konto om du vill låsa upp."</string> + <string name="kg_login_username_hint" msgid="5718534272070920364">"Användarnamn (e-post)"</string> + <string name="kg_login_password_hint" msgid="9057289103827298549">"Lösenord"</string> + <string name="kg_login_submit_button" msgid="5355904582674054702">"Logga in"</string> + <string name="kg_login_invalid_input" msgid="5754664119319872197">"Ogiltigt användarnamn eller lösenord."</string> + <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Har du glömt ditt användarnamn eller lösenord?"\n"Besök "<b>"google.com/accounts/recovery"</b>"."</string> + <string name="kg_login_checking_password" msgid="1052685197710252395">"Kontot kontrolleras …"</string> + <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Du har angett fel lösenord <xliff:g id="NUMBER_0">%d</xliff:g> gånger. "\n\n"Försök igen om <xliff:g id="NUMBER_1">%d</xliff:g> sekunder."</string> + <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Du har angett fel lösenord <xliff:g id="NUMBER_0">%d</xliff:g> gånger. "\n\n"Försök igen om <xliff:g id="NUMBER_1">%d</xliff:g> sekunder."</string> + <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Du har ritat ditt grafiska lösenord fel <xliff:g id="NUMBER_0">%d</xliff:g> gånger. "\n\n"Försök igen om <xliff:g id="NUMBER_1">%d</xliff:g> sekunder."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"Du har försökt låsa upp mobilen på fel sätt <xliff:g id="NUMBER_0">%d</xliff:g> gånger. Efter ytterligare <xliff:g id="NUMBER_1">%d</xliff:g> misslyckade försök återställs surfplattan till fabriksinställningarna. Du förlorar då alla användardata."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"Du har försökt låsa upp mobilen på fel sätt <xliff:g id="NUMBER_0">%d</xliff:g> gånger. Efter ytterligare <xliff:g id="NUMBER_1">%d</xliff:g> misslyckade försök återställs mobilen till fabriksinställningarna. Du förlorar då alla användardata."</string> + <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"Du har försökt låsa upp surfplattan på fel sätt <xliff:g id="NUMBER">%d</xliff:g> gånger. Surfplattan återställs nu till fabriksinställningarna."</string> + <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"Du har försökt låsa upp mobilen på fel sätt <xliff:g id="NUMBER">%d</xliff:g> gånger. Mobilen återställs nu till fabriksinställningarna."</string> + <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Du har ritat ditt grafiska lösenord fel <xliff:g id="NUMBER_0">%d</xliff:g> gånger. Efter ytterligare <xliff:g id="NUMBER_1">%d</xliff:g> försök ombeds du låsa upp surfplattan med ett e-postkonto."\n\n" Försök igen om <xliff:g id="NUMBER_2">%d</xliff:g> sekunder."</string> + <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Du har ritat ditt grafiska lösenord fel <xliff:g id="NUMBER_0">%d</xliff:g> gånger. Efter ytterligare <xliff:g id="NUMBER_1">%d</xliff:g> försök ombeds du låsa upp mobilen med hjälp av ett e-postkonto."\n\n" Försök igen om <xliff:g id="NUMBER_2">%d</xliff:g> sekunder."</string> + <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" – "</string> + <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Ta bort"</string> + <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Knapp för föregående spår"</string> + <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Knapp för nästa spår"</string> + <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Pausknappen"</string> + <string name="keyguard_transport_play_description" msgid="2924628863741150956">"Uppspelningsknappen"</string> + <string name="keyguard_transport_stop_description" msgid="3084179324810575787">"Stoppknappen"</string> + <string name="keyguard_carrier_default" msgid="8700650403054042153">"Ingen tjänst."</string> +</resources> diff --git a/packages/Keyguard/res/values-sw/activitystrings.xml b/packages/Keyguard/res/values-sw/activitystrings.xml new file mode 100644 index 0000000..357b911 --- /dev/null +++ b/packages/Keyguard/res/values-sw/activitystrings.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string> + <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string> + <string name="none_menu_item" msgid="6156747285687551424">"Hakuna usalama"</string> + <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string> + <string name="password_menu_item" msgid="1959980499662153160">"Nenosiri"</string> + <string name="pattern_menu_item" msgid="2987798152175140249">"Ruwaza"</string> + <string name="sim_pin_menu_item" msgid="3962286639645084880">"PIN ya SIM"</string> + <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK ya SIM"</string> + <string name="add_widget_item" msgid="279702152366857415">"Chagua wijeti..."</string> + <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string> + <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string> + <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string> + <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string> +</resources> diff --git a/packages/Keyguard/res/values-sw/strings.xml b/packages/Keyguard/res/values-sw/strings.xml new file mode 100644 index 0000000..f2a8fac --- /dev/null +++ b/packages/Keyguard/res/values-sw/strings.xml @@ -0,0 +1,138 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Ingiza msimbo wa PIN"</string> + <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Ingiza PUK na msimbo mpya wa PIN"</string> + <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"Msimbo wa PUK"</string> + <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Msimbo mpya wa PIN"</string> + <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Gusa kuingiza nenosiri "</font></string> + <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Charaza nenosiri ili kufungua"</string> + <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Ingiza PIN ili kufungua"</string> + <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"Msimbo wa PIN usio sahihi."</string> + <string name="keyguard_label_text" msgid="861796461028298424">"Ili kufungua, bofya Menyu kisha 0."</string> + <string name="faceunlock_multiple_failures" msgid="754137583022792429">"Majaribio ya Juu ya Kufungua Uso yamezidishwa"</string> + <string name="keyguard_charged" msgid="3272223906073492454">"Imechajiwa"</string> + <string name="keyguard_plugged_in" msgid="8117572000639998388">"Inachaji, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string> + <string name="keyguard_low_battery" msgid="8143808018719173859">"Unganisha chaja yako."</string> + <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Bonyeza Menyu ili kufungua."</string> + <string name="keyguard_network_locked_message" msgid="9169717779058037168">"Mtandao umefungwa"</string> + <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"Hakuna SIM kadi"</string> + <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"Hakuna SIM kadi katika kompyuta ndogo."</string> + <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"Hakuna SIM kadi kwenye simu."</string> + <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"Ingiza SIM kadi."</string> + <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"SIM kadi haiko au haisomeki. Ingiza SIM kadi."</string> + <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"SIM kadi isiyotumika."</string> + <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"SIM kadi yako imefungwa kabisa."\n" Wasiliana na mtoa huduma wako wa pasi waya ili upate SIM kadi nyingine."</string> + <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM kadi imefungwa."</string> + <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM kadi imefungwa na PUK."</string> + <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Inafungua SIM kadi..."</string> + <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. Wiji %2$d ya %3$d."</string> + <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"Ongeza wiji"</string> + <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"Tupu"</string> + <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"Eneo la kufungua limepanuliwa."</string> + <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"Eneo la kufungua limekunjwa."</string> + <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> ya wiji."</string> + <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"Kiteuzi cha mtumiaji"</string> + <string name="keyguard_accessibility_status" msgid="8008264603935930611">"Hali"</string> + <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"Kamera"</string> + <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"Vidhibiti vya media"</string> + <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"Upangaji upya wa wiji umeanza."</string> + <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"Upangaji upya wa wiji umekamilika."</string> + <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"Wiji <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> imefutwa."</string> + <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"Panua eneo la kufungua."</string> + <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"Kufungua slaidi."</string> + <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Kufungua kwa ruwaza."</string> + <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Kufungua kwa uso."</string> + <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Kufungua kwa PIN."</string> + <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Kufungua kwa nenosiri."</string> + <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Eneo la ruwaza."</string> + <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Eneo la slaidi."</string> + <string name="keyguard_accessibility_transport_prev_description" msgid="1337286538318543555">"Kitufe cha wimbo uliotangulia"</string> + <string name="keyguard_accessibility_transport_next_description" msgid="7073928300444909320">"Kitufe cha wimbo unaofuata"</string> + <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Kitufe cha kusitisha"</string> + <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Kitufe cha kucheza"</string> + <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Kitufe cha kusitisha"</string> + <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string> + <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string> + <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string> + <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string> + <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Ghairi"</string> + <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Futa"</string> + <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Imefanyika"</string> + <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Modi ya mabadiliko"</string> + <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Songa"</string> + <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Ingiza"</string> + <string name="description_target_unlock" msgid="2228524900439801453">"Fungua"</string> + <string name="description_target_camera" msgid="969071997552486814">"Kamera"</string> + <string name="description_target_silent" msgid="893551287746522182">"Kimya"</string> + <string name="description_target_soundon" msgid="30052466675500172">"Sauti imewashwa"</string> + <string name="description_target_search" msgid="3091587249776033139">"Tafuta"</string> + <string name="description_direction_up" msgid="7169032478259485180">"Sogeza juu kwa <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ."</string> + <string name="description_direction_down" msgid="5087739728639014595">"Sogeza chini kwa <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_left" msgid="7207478719805562165">"Sogeza kushoto kwa <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ."</string> + <string name="description_direction_right" msgid="8034433242579600980">"Sogeza kulika kwa <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ."</string> + <string name="user_switched" msgid="3768006783166984410">"Mtumiaji wa sasa <xliff:g id="NAME">%1$s</xliff:g>."</string> + <string name="kg_emergency_call_label" msgid="684946192523830531">"Simu ya dharura"</string> + <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Umesahau Ruwaza"</string> + <string name="kg_wrong_pattern" msgid="1850806070801358830">"Mchoro Usio sahihi"</string> + <string name="kg_wrong_password" msgid="2333281762128113157">"Nenosiri Lisilo sahihi"</string> + <string name="kg_wrong_pin" msgid="1131306510833563801">"PIN isiyo sahihi"</string> + <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"Jaribu tena baada ya sekunde <xliff:g id="NUMBER">%d</xliff:g>."</string> + <string name="kg_pattern_instructions" msgid="398978611683075868">"Chora ruwaza yako"</string> + <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Ingiza PIN ya SIM"</string> + <string name="kg_pin_instructions" msgid="2377242233495111557">"Ingiza PIN"</string> + <string name="kg_password_instructions" msgid="5753646556186936819">"Ingiza Nenosiri"</string> + <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"SIM sasa imelemazwa. Ingiza msimbo wa PUK ili kuendelea. Wasiliana na mtoa huduma kwa maelezo."</string> + <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Ingiza msimbo wa PIN unaopendelewa"</string> + <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Thibitisha msimbo wa PIN unaopendelewa"</string> + <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Inafungua kadi ya SIM..."</string> + <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Msimbo wa PIN usio sahihi."</string> + <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Charaza PIN iliyo na tarakimu kati ya 4 na 8."</string> + <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"Msimbo wa PUK unafaa kuwa na nambari 8 au zaidi."</string> + <string name="kg_invalid_puk" msgid="3638289409676051243">"Ingiza upya msimbo sahihi wa PUK. Majaribio yanayorudiwa yatalemaza SIM kabisa."</string> + <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"Misimbo ya PIN haifanani"</string> + <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Majaribio mengi mno ya mchoro"</string> + <string name="kg_login_instructions" msgid="1100551261265506448">"Ili kufungua, ingia kwa Akaunti yako ya Google."</string> + <string name="kg_login_username_hint" msgid="5718534272070920364">"Jina la mtumiaji (barua pepe)"</string> + <string name="kg_login_password_hint" msgid="9057289103827298549">"Nenosiri"</string> + <string name="kg_login_submit_button" msgid="5355904582674054702">"Ingia"</string> + <string name="kg_login_invalid_input" msgid="5754664119319872197">"Jina la mtumiaji au nenosiri batili."</string> + <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Je, umesahau jina lako la mtumiaji au nenosiri?"\n"Tembela "<b>"Bgoogle.com/accounts/recovery"</b>"."</string> + <string name="kg_login_checking_password" msgid="1052685197710252395">"Inakagua akaunti…"</string> + <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Umeingiza nenosiri lako kwa makosa mara <xliff:g id="NUMBER_0">%d</xliff:g>. "\n\n" Jaribu tena baada ya sekunde <xliff:g id="NUMBER_1">%d</xliff:g>."</string> + <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Umeingiza nenosiri lako kwa makosa mara <xliff:g id="NUMBER_0">%d</xliff:g>. "\n\n" Jaribu tena baada ya sekunde <xliff:g id="NUMBER_1">%d</xliff:g>."</string> + <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Umechora ruwaza yako ya kufunga kwa makosa mara <xliff:g id="NUMBER_0">%d</xliff:g>. "\n\n" Jaribu tena baada ya sekunde <xliff:g id="NUMBER_1">%d</xliff:g>."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"Umejaribu kufungua kompyuta ndogo kwa njia isiyo sahihi mara <xliff:g id="NUMBER_0">%d</xliff:g>. Baada ya majaribio <xliff:g id="NUMBER_1">%d</xliff:g> zaidi yasiyofaulu, kompyuta ndogo itarejeshwa katika mfumo chaguo-msingi ilivyotoka kiwandani data yote ya mtumiaji itapotea."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"Umejaribu kufungua simu kwa njia isiyo sahihi mara <xliff:g id="NUMBER_0">%d</xliff:g>. Baada ya majaribio <xliff:g id="NUMBER_1">%d</xliff:g> zaidi yasiyofaulu, simu itarejeshwa katika mfumo chaguo-msingi ilivyotoka kiwandani na data yote ya mtumiaji itapotea."</string> + <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"Umejaribu kufungua kompyuta ndogo kwa njia isiyo sahihi mara <xliff:g id="NUMBER">%d</xliff:g>. Sasa kompyuta ndogo itarejeshwa katika mfumo chaguo-msingi ilivyotoka kiwandani."</string> + <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"Umejaribu kufungua simu kwa njia isiyo sahihi mara <xliff:g id="NUMBER">%d</xliff:g>. Sasa simu itarejeshwa katika mfumo chaguo-msingi ilivyotoka kiwandani."</string> + <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Umekosea katika kuweka mchoro wako wa kufungua mara <xliff:g id="NUMBER_0">%d</xliff:g>. Baada ya majaribio <xliff:g id="NUMBER_1">%d</xliff:g> bila kufaulu, utaombwa kufungua kompyuta yako ndogo kwa kutumia akaunti yako ya barua pepe."\n\n" Jaribu tena baada ya sekunde <xliff:g id="NUMBER_2">%d</xliff:g>."</string> + <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Umekosea kuchora mchoro wako wa kufungua mara <xliff:g id="NUMBER_0">%d</xliff:g>. Baada ya majaribio <xliff:g id="NUMBER_1">%d</xliff:g> yasiyofaulu, utaombwa kufungua simu yako kwa kutumia akaunti ya barua pepe."\n\n" Jaribu tena baada ya sekunde <xliff:g id="NUMBER_2">%d</xliff:g>."</string> + <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string> + <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Ondoa"</string> + <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Kitufe cha wimbo wa awali"</string> + <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Kitufe cha wimbo unaofuata"</string> + <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Kitufe cha kusitisha"</string> + <string name="keyguard_transport_play_description" msgid="2924628863741150956">"Kitufe cha kucheza"</string> + <string name="keyguard_transport_stop_description" msgid="3084179324810575787">"Kitufe cha kusimamisha"</string> + <string name="keyguard_carrier_default" msgid="8700650403054042153">"Hakuna huduma."</string> +</resources> diff --git a/packages/Keyguard/res/values-sw380dp-land/dimens.xml b/packages/Keyguard/res/values-sw380dp-land/dimens.xml new file mode 100644 index 0000000..20eb1be --- /dev/null +++ b/packages/Keyguard/res/values-sw380dp-land/dimens.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* //device/apps/common/assets/res/any/dimens.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. +*/ +--> +<resources> + <!-- Top margin for the clock view --> + <dimen name="kg_clock_top_margin">48dp</dimen> +</resources> diff --git a/packages/Keyguard/res/values-sw380dp/dimens.xml b/packages/Keyguard/res/values-sw380dp/dimens.xml new file mode 100644 index 0000000..fc0e85d --- /dev/null +++ b/packages/Keyguard/res/values-sw380dp/dimens.xml @@ -0,0 +1,23 @@ +<?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. +*/ +--> + +<resources> + <!-- Width of the sliding KeyguardSecurityContainer (includes 2x keyguard_security_view_margin) --> + <dimen name="keyguard_security_width">340dp</dimen> +</resources>
\ No newline at end of file diff --git a/packages/Keyguard/res/values-sw600dp-land/arrays.xml b/packages/Keyguard/res/values-sw600dp-land/arrays.xml new file mode 100644 index 0000000..5550216 --- /dev/null +++ b/packages/Keyguard/res/values-sw600dp-land/arrays.xml @@ -0,0 +1,72 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* //device/apps/common/assets/res/any/colors.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ +--> +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + + <!-- Resources for GlowPadView in LockScreen --> + <array name="lockscreen_targets_when_silent"> + <item>@drawable/ic_lockscreen_unlock</item> + <item>@null</item> + <item>@drawable/ic_lockscreen_soundon</item> + <item>@null</item> + </array> + + <array name="lockscreen_target_descriptions_when_silent"> + <item>@string/description_target_unlock</item> + <item>@null</item> + <item>@string/description_target_soundon</item> + <item>@null</item> + </array> + + <array name="lockscreen_direction_descriptions"> + <item>@string/description_direction_right</item> + <item>@null</item> + <item>@string/description_direction_left</item> + <item>@null</item> + </array> + + <array name="lockscreen_targets_when_soundon"> + <item>@drawable/ic_lockscreen_unlock</item> + <item>@null</item> + <item>@drawable/ic_lockscreen_silent</item> + <item>@null</item> + </array> + + <array name="lockscreen_target_descriptions_when_soundon"> + <item>@string/description_target_unlock</item> + <item>@null</item> + <item>@string/description_target_silent</item> + <item>@null</item> + </array> + + <array name="lockscreen_targets_with_camera"> + <item>@drawable/ic_lockscreen_unlock</item> + <item>@drawable/ic_action_assist_generic</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>@string/description_target_search</item> + <item>@string/description_target_camera</item> + <item>@null</item> + </array> + +</resources> diff --git a/packages/Keyguard/res/values-sw600dp-land/dimens.xml b/packages/Keyguard/res/values-sw600dp-land/dimens.xml new file mode 100644 index 0000000..5507e5f --- /dev/null +++ b/packages/Keyguard/res/values-sw600dp-land/dimens.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* //device/apps/common/assets/res/any/dimens.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ +--> +<resources> + <!-- Top margin for the clock view --> + <dimen name="kg_clock_top_margin">85dp</dimen> + + <!-- Size of margin on the right of keyguard's status view --> + <dimen name="kg_status_line_font_right_margin">16dp</dimen> +</resources>
\ No newline at end of file diff --git a/packages/Keyguard/res/values-sw600dp-land/integers.xml b/packages/Keyguard/res/values-sw600dp-land/integers.xml new file mode 100644 index 0000000..b724c90 --- /dev/null +++ b/packages/Keyguard/res/values-sw600dp-land/integers.xml @@ -0,0 +1,23 @@ +<?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. +*/ +--> +<resources> + <integer name="kg_widget_region_weight">50</integer> + <integer name="kg_security_flipper_weight">50</integer> + <integer name="kg_glowpad_rotation_offset">0</integer> +</resources> diff --git a/core/res/res/layout/keyguard_sim_puk_pin_account_navigation.xml b/packages/Keyguard/res/values-sw600dp-port/integers.xml index 2e6fa37..65b854a 100644 --- a/core/res/res/layout/keyguard_sim_puk_pin_account_navigation.xml +++ b/packages/Keyguard/res/values-sw600dp-port/integers.xml @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="utf-8"?> <!-- -** +/* ** Copyright 2012, The Android Open Source Project ** -** Licensed under the Apache License, Version 2.0 (the "License") +** 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 ** @@ -16,6 +16,7 @@ ** limitations under the License. */ --> -<merge xmlns:android="http://schemas.android.com/apk/res/android"> - <include layout="@layout/default_navigation" /> -</merge> +<resources> + <integer name="kg_widget_region_weight">46</integer> + <integer name="kg_security_flipper_weight">54</integer> +</resources>
\ No newline at end of file diff --git a/core/res/res/values-land/alias.xml b/packages/Keyguard/res/values-sw600dp/alias.xml index eac5ece..c3ecbb9 100644 --- a/core/res/res/values-land/alias.xml +++ b/packages/Keyguard/res/values-sw600dp/alias.xml @@ -19,5 +19,5 @@ --> <resources> <!-- Alias used to reference one of two possible layouts in keyguard. --> - <item type="layout" name="keyguard_eca">@android:layout/keyguard_emergency_carrier_area_empty</item> + <item type="layout" name="keyguard_eca">@layout/keyguard_emergency_carrier_area</item> </resources> diff --git a/packages/Keyguard/res/values-sw600dp/bools.xml b/packages/Keyguard/res/values-sw600dp/bools.xml new file mode 100644 index 0000000..ddc48c5 --- /dev/null +++ b/packages/Keyguard/res/values-sw600dp/bools.xml @@ -0,0 +1,27 @@ +<?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> + <bool name="target_honeycomb_needs_options_menu">false</bool> + <bool name="show_ongoing_ime_switcher">true</bool> + <bool name="kg_share_status_area">false</bool> + <bool name="kg_sim_puk_account_full_screen">false</bool> + <bool name="kg_show_ime_at_screen_on">false</bool> + <!-- No camera for you, tablet user --> + <bool name="kg_enable_camera_default_widget">false</bool> + <bool name="kg_center_small_widgets_vertically">true</bool> + <bool name="kg_top_align_page_shrink_on_bouncer_visible">false</bool> +</resources> diff --git a/packages/Keyguard/res/values-sw600dp/dimens.xml b/packages/Keyguard/res/values-sw600dp/dimens.xml new file mode 100644 index 0000000..c0e3937 --- /dev/null +++ b/packages/Keyguard/res/values-sw600dp/dimens.xml @@ -0,0 +1,71 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* //device/apps/common/assets/res/any/dimens.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ +--> +<resources> + <!-- Size of clock font in LockScreen. --> + <dimen name="keyguard_pattern_unlock_clock_font_size">112sp</dimen> + + <!-- Size of lockscreen outerring on unsecure unlock LockScreen --> + <dimen name="keyguard_lockscreen_outerring_diameter">364dp</dimen> + + <!-- Height of FaceUnlock view in keyguard --> + <dimen name="face_unlock_height">430dip</dimen> + + <!-- target placement radius for GlowPadView. Should be 1/2 of outerring diameter. --> + <dimen name="glowpadview_target_placement_radius">182dip</dimen> + + <!-- Size of status line font in LockScreen. --> + <dimen name="keyguard_pattern_unlock_status_line_font_size">14sp</dimen> + + <!-- Keyguard dimensions --> + <!-- Size of the clock font in keyguard's status view --> + <dimen name="kg_status_clock_font_size">141dp</dimen> + + <!-- Size of the date font in keyguard's status view --> + <dimen name="kg_status_date_font_size">25.5dp</dimen> + + <!-- Size of the generic status lines keyguard's status view --> + <dimen name="kg_status_line_font_size">16sp</dimen> + + <!-- Top margin for the clock view --> + <dimen name="kg_clock_top_margin">0dp</dimen> + + <!-- Size of margin on the right of keyguard's status view --> + <dimen name="kg_status_line_font_right_margin">50dp</dimen> + + <!-- Horizontal padding for the widget pager --> + <dimen name="kg_widget_pager_horizontal_padding">24dp</dimen> + + <!-- Top padding for the widget pager --> + <dimen name="kg_widget_pager_top_padding">0dp</dimen> + + <!-- Bottom padding for the widget pager --> + <dimen name="kg_widget_pager_bottom_padding">0dp</dimen> + + <!-- Top margin for the runway lights. We add a negative margin in large + devices to account for the widget pager padding --> + <dimen name="kg_runway_lights_top_margin">-10dp</dimen> + + <!-- Margin around the various security views --> + <dimen name="keyguard_security_view_margin">12dp</dimen> + + <!-- Margin around the various security views --> + <dimen name="keyguard_muliuser_selector_margin">12dp</dimen> + +</resources> diff --git a/core/res/res/layout-sw600dp/keyguard_sim_puk_pin_navigation.xml b/packages/Keyguard/res/values-sw600dp/integers.xml index 2e6fa37..de9829c 100644 --- a/core/res/res/layout-sw600dp/keyguard_sim_puk_pin_navigation.xml +++ b/packages/Keyguard/res/values-sw600dp/integers.xml @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="utf-8"?> <!-- -** +/* ** Copyright 2012, The Android Open Source Project ** -** Licensed under the Apache License, Version 2.0 (the "License") +** 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 ** @@ -16,6 +16,6 @@ ** limitations under the License. */ --> -<merge xmlns:android="http://schemas.android.com/apk/res/android"> - <include layout="@layout/default_navigation" /> -</merge> +<resources> + <integer name="kg_carousel_angle">60</integer> +</resources> diff --git a/core/res/res/layout-land/keyguard_glow_pad_container.xml b/packages/Keyguard/res/values-sw720dp-land/dimens.xml index f8364f1..14726ab 100644 --- a/core/res/res/layout-land/keyguard_glow_pad_container.xml +++ b/packages/Keyguard/res/values-sw720dp-land/dimens.xml @@ -1,9 +1,10 @@ <?xml version="1.0" encoding="utf-8"?> <!-- +/* //device/apps/common/assets/res/any/dimens.xml ** ** Copyright 2012, The Android Open Source Project ** -** Licensed under the Apache License, Version 2.0 (the "License") +** 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 ** @@ -16,10 +17,13 @@ ** limitations under the License. */ --> +<resources> + <!-- Top margin for the clock view --> + <dimen name="kg_clock_top_margin">174dp</dimen> -<merge xmlns:android="http://schemas.android.com/apk/res/android"> - <include layout="@layout/keyguard_glow_pad_view" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="center" /> -</merge>
\ No newline at end of file + <!-- Size of margin on the right of keyguard's status view --> + <dimen name="kg_status_line_font_right_margin">16dp</dimen> + + <!-- Horizontal padding for the widget pager --> + <dimen name="kg_widget_pager_horizontal_padding">32dp</dimen> +</resources> diff --git a/core/res/res/layout-sw600dp/keyguard_navigation.xml b/packages/Keyguard/res/values-sw720dp-port/integers.xml index 2e6fa37..5f85f71 100644 --- a/core/res/res/layout-sw600dp/keyguard_navigation.xml +++ b/packages/Keyguard/res/values-sw720dp-port/integers.xml @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="utf-8"?> <!-- -** +/* ** Copyright 2012, The Android Open Source Project ** -** Licensed under the Apache License, Version 2.0 (the "License") +** 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 ** @@ -16,6 +16,7 @@ ** limitations under the License. */ --> -<merge xmlns:android="http://schemas.android.com/apk/res/android"> - <include layout="@layout/default_navigation" /> -</merge> +<resources> + <integer name="kg_widget_region_weight">48</integer> + <integer name="kg_security_flipper_weight">52</integer> +</resources>
\ No newline at end of file diff --git a/packages/Keyguard/res/values-sw720dp/dimens.xml b/packages/Keyguard/res/values-sw720dp/dimens.xml new file mode 100644 index 0000000..b29ac22 --- /dev/null +++ b/packages/Keyguard/res/values-sw720dp/dimens.xml @@ -0,0 +1,66 @@ +<?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. +*/ +--> +<resources> + <!-- Keyguard dimensions --> + <!-- Size of the clock font in keyguard's status view --> + <dimen name="kg_status_clock_font_size">188dp</dimen> + + <!-- Size of the date font in keyguard's status view --> + <dimen name="kg_status_date_font_size">34dp</dimen> + + <!-- Size of the generic status lines keyguard's status view --> + <dimen name="kg_status_line_font_size">19sp</dimen> + + <!-- Top margin for the clock view --> + <dimen name="kg_clock_top_margin">0dp</dimen> + + <!-- Size of margin on the right of keyguard's status view --> + <dimen name="kg_status_line_font_right_margin">32dp</dimen> + + <!-- Horizontal padding for the widget pager --> + <dimen name="kg_widget_pager_horizontal_padding">80dp</dimen> + + <!-- Top padding for the widget pager --> + <dimen name="kg_widget_pager_top_padding">0dp</dimen> + + <!-- Bottom padding for the widget pager --> + <dimen name="kg_widget_pager_bottom_padding">0dp</dimen> + + <!-- Top margin for the runway lights. We add a negative margin in large + devices to account for the widget pager padding --> + <dimen name="kg_runway_lights_top_margin">-30dp</dimen> + + <!-- Margin around the various security views --> + <dimen name="keyguard_muliuser_selector_margin">24dp</dimen> + + <!-- Stroke width of the frame for the circular avatars. --> + <dimen name="keyguard_avatar_frame_stroke_width">3dp</dimen> + + <!-- Size of the avator on the multiuser lockscreen. --> + <dimen name="keyguard_avatar_size">88dp</dimen> + + <!-- Size of the text under the avator on the multiuser lockscreen. --> + <dimen name="keyguard_avatar_name_size">12sp</dimen> + + <!-- Width of the sliding KeyguardSecurityContainer (includes 2x keyguard_security_view_margin) --> + <dimen name="keyguard_security_width">420dp</dimen> + + <!-- Height of the sliding KeyguardSecurityContainer (includes 2x keyguard_security_view_margin) --> + <dimen name="keyguard_security_height">420dp</dimen> +</resources> diff --git a/packages/Keyguard/res/values-th/activitystrings.xml b/packages/Keyguard/res/values-th/activitystrings.xml new file mode 100644 index 0000000..64f50cc --- /dev/null +++ b/packages/Keyguard/res/values-th/activitystrings.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string> + <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string> + <string name="none_menu_item" msgid="6156747285687551424">"ไม่มีการรักษาความปลอดภัย"</string> + <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string> + <string name="password_menu_item" msgid="1959980499662153160">"รหัสผ่าน"</string> + <string name="pattern_menu_item" msgid="2987798152175140249">"รูปแบบ"</string> + <string name="sim_pin_menu_item" msgid="3962286639645084880">"PIN ของซิม"</string> + <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK ของซิม"</string> + <string name="add_widget_item" msgid="279702152366857415">"เลือกวิดเจ็ต..."</string> + <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string> + <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string> + <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string> + <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string> +</resources> diff --git a/packages/Keyguard/res/values-th/strings.xml b/packages/Keyguard/res/values-th/strings.xml new file mode 100644 index 0000000..4df8cdd --- /dev/null +++ b/packages/Keyguard/res/values-th/strings.xml @@ -0,0 +1,138 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"พิมพ์รหัส PIN"</string> + <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"พิมพ์ PUK และรหัส PIN ใหม่"</string> + <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"รหัส PUK"</string> + <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"รหัส PIN ใหม่"</string> + <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"แตะเพื่อพิมพ์รหัสผ่าน"</font></string> + <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"พิมพ์รหัสผ่านเพื่อปลดล็อก"</string> + <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"พิมพ์ PIN เพื่อปลดล็อก"</string> + <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"รหัส PIN ไม่ถูกต้อง"</string> + <string name="keyguard_label_text" msgid="861796461028298424">"หากต้องการปลดล็อก กด เมนู ตามด้วย 0"</string> + <string name="faceunlock_multiple_failures" msgid="754137583022792429">"มีความพยายามที่จะใช้ Face Unlock เกินขีดจำกัด"</string> + <string name="keyguard_charged" msgid="3272223906073492454">"ชาร์จแล้ว"</string> + <string name="keyguard_plugged_in" msgid="8117572000639998388">"กำลังชาร์จ, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string> + <string name="keyguard_low_battery" msgid="8143808018719173859">"เสียบที่ชาร์จของคุณ"</string> + <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"กด \"เมนู\" เพื่อปลดล็อก"</string> + <string name="keyguard_network_locked_message" msgid="9169717779058037168">"เครือข่ายล็อก"</string> + <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"ไม่มีซิมการ์ด"</string> + <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"ไม่มีซิมการ์ดในแท็บเล็ต"</string> + <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"ไม่มีซิมการ์ดในโทรศัพท์"</string> + <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"ใส่ซิมการ์ด"</string> + <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"ไม่มีหรือไม่สามารถอ่านซิมการ์ดได้ โปรดใส่ซิมการ์ด"</string> + <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"ซิมการ์ดใช้ไม่ได้"</string> + <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"ซิมการ์ดของคุณถูกปิดใช้งานอย่างถาวร"\n"ติดต่อผู้ให้บริการระบบไร้สายของคุณเพื่อรับซิมการ์ดใหม่"</string> + <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"ซิมการ์ดถูกล็อก"</string> + <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"ซิมการ์ดถูกล็อกด้วย PUK"</string> + <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"กำลังปลดล็อกซิมการ์ด…"</string> + <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s วิดเจ็ต %2$d ของ %3$d"</string> + <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"เพิ่มวิดเจ็ต"</string> + <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"ว่าง"</string> + <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"ขยายพื้นที่ปลดล็อกแล้ว"</string> + <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"ยุบพื้นที่ปลดล็อกแล้ว"</string> + <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"วิดเจ็ต <xliff:g id="WIDGET_INDEX">%1$s</xliff:g>"</string> + <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"ตัวเลือกผู้ใช้"</string> + <string name="keyguard_accessibility_status" msgid="8008264603935930611">"สถานะ"</string> + <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"กล้องถ่ายรูป"</string> + <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"การควบคุมสื่อ"</string> + <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"เริ่มเรียงลำดับวิดเจ็ตใหม่"</string> + <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"เรียงลำดับวิดเจ็ตใหม่เสร็จแล้ว"</string> + <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"ลบวิดเจ็ต <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> แล้ว"</string> + <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"ขยายพื้นที่ปลดล็อก"</string> + <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"การปลดล็อกด้วยการเลื่อน"</string> + <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"การปลดล็อกด้วยรูปแบบ"</string> + <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"การปลดล็อกด้วยใบหน้า"</string> + <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"การปลดล็อกด้วย PIN"</string> + <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"การปลดล็อกด้วยรหัสผ่าน"</string> + <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"พื้นที่สำหรับรูปแบบ"</string> + <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"พื้นที่สำหรับการเลื่อน"</string> + <string name="keyguard_accessibility_transport_prev_description" msgid="1337286538318543555">"ปุ่มแทร็กก่อนหน้า"</string> + <string name="keyguard_accessibility_transport_next_description" msgid="7073928300444909320">"ปุ่มแทร็กถัดไป"</string> + <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"ปุ่มหยุดชั่วคราว"</string> + <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"ปุ่มเล่น"</string> + <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"ปุ่มหยุด"</string> + <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string> + <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string> + <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string> + <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string> + <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"ยกเลิก"</string> + <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"ลบ"</string> + <string name="keyboardview_keycode_done" msgid="1992571118466679775">"เสร็จสิ้น"</string> + <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"เปลี่ยนโหมด"</string> + <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string> + <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"ป้อน"</string> + <string name="description_target_unlock" msgid="2228524900439801453">"ปลดล็อก"</string> + <string name="description_target_camera" msgid="969071997552486814">"กล้อง"</string> + <string name="description_target_silent" msgid="893551287746522182">"ปิดเสียง"</string> + <string name="description_target_soundon" msgid="30052466675500172">"เปิดเสียง"</string> + <string name="description_target_search" msgid="3091587249776033139">"ค้นหา"</string> + <string name="description_direction_up" msgid="7169032478259485180">"เลื่อนขึ้นเพื่อ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>"</string> + <string name="description_direction_down" msgid="5087739728639014595">"เลื่อนลงเพื่อ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>"</string> + <string name="description_direction_left" msgid="7207478719805562165">"เลื่อนไปทางซ้ายเพื่อ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>"</string> + <string name="description_direction_right" msgid="8034433242579600980">"เลื่อนไปทางขวาเพื่อ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>"</string> + <string name="user_switched" msgid="3768006783166984410">"ผู้ใช้ปัจจุบัน <xliff:g id="NAME">%1$s</xliff:g>"</string> + <string name="kg_emergency_call_label" msgid="684946192523830531">"หมายเลขฉุกเฉิน"</string> + <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"ลืมรูปแบบใช่หรือไม่"</string> + <string name="kg_wrong_pattern" msgid="1850806070801358830">"รูปแบบไม่ถูกต้อง"</string> + <string name="kg_wrong_password" msgid="2333281762128113157">"รหัสผ่านไม่ถูกต้อง"</string> + <string name="kg_wrong_pin" msgid="1131306510833563801">"PIN ไม่ถูกต้อง"</string> + <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"ลองอีกครั้งในอีก <xliff:g id="NUMBER">%d</xliff:g> วินาที"</string> + <string name="kg_pattern_instructions" msgid="398978611683075868">"วาดรูปแบบของคุณ"</string> + <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"ป้อน PIN ของซิม"</string> + <string name="kg_pin_instructions" msgid="2377242233495111557">"ป้อน PIN"</string> + <string name="kg_password_instructions" msgid="5753646556186936819">"ป้อนรหัสผ่าน"</string> + <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"ซิมการ์ดถูกปิดใช้งานแล้วในตอนนี้ ป้อนรหัส PUK เพื่อดำเนินการต่อ โปรดติดต่อผู้ให้บริการสำหรับรายละเอียด"</string> + <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"ป้อนรหัส PIN ที่ต้องการ"</string> + <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"ยืนยันรหัส PIN ที่ต้องการ"</string> + <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"กำลังปลดล็อกซิมการ์ด…"</string> + <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"รหัส PIN ไม่ถูกต้อง"</string> + <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"พิมพ์ PIN ซึ่งเป็นเลข 4 ถึง 8 หลัก"</string> + <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"รหัส PUK ต้องเป็นตัวเลขอย่างน้อย 8 หลัก"</string> + <string name="kg_invalid_puk" msgid="3638289409676051243">"ใส่รหัส PUK ที่ถูกต้องอีกครั้ง การพยายามซ้ำหลายครั้งจะทำให้ซิมการ์ดถูกปิดใช้งานอย่างถาวร"</string> + <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"รหัส PIN ไม่ตรง"</string> + <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"ลองหลายรูปแบบมากเกินไป"</string> + <string name="kg_login_instructions" msgid="1100551261265506448">"หากต้องการปลดล็อก ให้ลงชื่อเข้าใช้ด้วยบัญชี Google ของคุณ"</string> + <string name="kg_login_username_hint" msgid="5718534272070920364">"ชื่อผู้ใช้ (อีเมล)"</string> + <string name="kg_login_password_hint" msgid="9057289103827298549">"รหัสผ่าน"</string> + <string name="kg_login_submit_button" msgid="5355904582674054702">"ลงชื่อเข้าใช้"</string> + <string name="kg_login_invalid_input" msgid="5754664119319872197">"ชื่อผู้ใช้หรือรหัสผ่านไม่ถูกต้อง"</string> + <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"หากลืมชื่อผู้ใช้หรือรหัสผ่าน"\n"โปรดไปที่ "<b>"google.com/accounts/recovery"</b></string> + <string name="kg_login_checking_password" msgid="1052685197710252395">"กำลังตรวจสอบบัญชี…"</string> + <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"คุณพิมพ์ PIN ไม่ถูกต้องไป <xliff:g id="NUMBER_0">%d</xliff:g> ครั้งแล้ว "\n\n"โปรดลองอีกครั้งใน <xliff:g id="NUMBER_1">%d</xliff:g> วินาที"</string> + <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"คุณพิมพ์รหัสผ่านไม่ถูกต้องไป <xliff:g id="NUMBER_0">%d</xliff:g> ครั้งแล้ว "\n\n"โปรดลองอีกครั้งใน <xliff:g id="NUMBER_1">%d</xliff:g> วินาที"</string> + <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"คุณวาดรูปแบบการปลดล็อกไม่ถูกต้องไป <xliff:g id="NUMBER_0">%d</xliff:g> ครั้งแล้ว "\n\n"โปรดลองอีกครั้งใน <xliff:g id="NUMBER_1">%d</xliff:g> วินาที"</string> + <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"คุณพยายามปลดล็อกแท็บเล็ตอย่างไม่ถูกต้อง <xliff:g id="NUMBER_0">%d</xliff:g> ครั้งแล้ว หากพยายามแล้วไม่สำเร็จอีก <xliff:g id="NUMBER_1">%d</xliff:g> ครั้ง แท็บเล็ตจะถูกรีเซ็ตเป็นค่าเริ่มต้นจากโรงงานและข้อมูลผู้ใช้ทั้งหมดจะหายไป"</string> + <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"คุณพยายามปลดล็อกโทรศัพท์อย่างไม่ถูกต้อง <xliff:g id="NUMBER_0">%d</xliff:g> ครั้งแล้ว หากพยายามแล้วไม่สำเร็จอีก <xliff:g id="NUMBER_1">%d</xliff:g> ครั้ง โทรศัพท์จะถูกรีเซ็ตเป็นค่าเริ่มต้นจากโรงงานและข้อมูลผู้ใช้ทั้งหมดจะหายไป"</string> + <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"คุณพยายามปลดล็อกแท็บเล็ตอย่างไม่ถูกต้อง <xliff:g id="NUMBER">%d</xliff:g> ครั้งแล้ว ขณะนี้แท็บเล็ตจะถูกรีเซ็ตเป็นค่าเริ่มต้นจากโรงงาน"</string> + <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"คุณพยายามปลดล็อกโทรศัพท์อย่างไม่ถูกต้อง <xliff:g id="NUMBER">%d</xliff:g> ครั้งแล้ว ขณะนี้โทรศัพท์จะถูกรีเซ็ตเป็นค่าเริ่มต้นจากโรงงาน"</string> + <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"คุณวาดรูปแบบการปลดล็อกไม่ถูกต้อง <xliff:g id="NUMBER_0">%d</xliff:g> ครั้งแล้ว หากทำไม่สำเร็จอีก <xliff:g id="NUMBER_1">%d</xliff:g> ครั้ง ระบบจะขอให้คุณปลดล็อกแท็บเล็ตโดยใช้บัญชีอีเมล"\n\n" โปรดลองอีกครั้งใน <xliff:g id="NUMBER_2">%d</xliff:g> วินาที"</string> + <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"คุณวาดรูปแบบการปลดล็อกไม่ถูกต้อง <xliff:g id="NUMBER_0">%d</xliff:g> ครั้งแล้ว หากทำไม่สำเร็จอีก <xliff:g id="NUMBER_1">%d</xliff:g> ครั้ง ระบบจะขอให้คุณปลดล็อกโทรศัพท์โดยใช้ับัญชีอีเมล"\n\n" โปรดลองอีกครั้งในอีก <xliff:g id="NUMBER_2">%d</xliff:g> วินาที"</string> + <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string> + <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"นำออก"</string> + <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"ปุ่มแทร็กก่อนหน้า"</string> + <string name="keyguard_transport_next_description" msgid="4299258300283778305">"ปุ่มแทร็กถัดไป"</string> + <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"ปุ่มหยุดชั่วคราว"</string> + <string name="keyguard_transport_play_description" msgid="2924628863741150956">"ปุ่มเล่น"</string> + <string name="keyguard_transport_stop_description" msgid="3084179324810575787">"ปุ่มหยุด"</string> + <string name="keyguard_carrier_default" msgid="8700650403054042153">"ไม่มีบริการ"</string> +</resources> diff --git a/packages/Keyguard/res/values-tl/activitystrings.xml b/packages/Keyguard/res/values-tl/activitystrings.xml new file mode 100644 index 0000000..71f3564 --- /dev/null +++ b/packages/Keyguard/res/values-tl/activitystrings.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string> + <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string> + <string name="none_menu_item" msgid="6156747285687551424">"Walang seguridad"</string> + <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string> + <string name="password_menu_item" msgid="1959980499662153160">"Password"</string> + <string name="pattern_menu_item" msgid="2987798152175140249">"Pattern"</string> + <string name="sim_pin_menu_item" msgid="3962286639645084880">"SIM PIN"</string> + <string name="sim_puk_menu_item" msgid="6190044133008392974">"SIM PUK"</string> + <string name="add_widget_item" msgid="279702152366857415">"Pumili ng widget..."</string> + <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenNaka-off"</string> + <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenNaka-on"</string> + <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string> + <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string> +</resources> diff --git a/packages/Keyguard/res/values-tl/strings.xml b/packages/Keyguard/res/values-tl/strings.xml new file mode 100644 index 0000000..4e6350b --- /dev/null +++ b/packages/Keyguard/res/values-tl/strings.xml @@ -0,0 +1,138 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"I-type ang PIN code"</string> + <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"I-type ang PUK at bagong PIN code"</string> + <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK code"</string> + <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Bagong PIN code"</string> + <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Pindutin upang i-type password"</font></string> + <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"I-type ang password upang i-unlock"</string> + <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"I-type ang PIN upang i-unlock"</string> + <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"Maling PIN code."</string> + <string name="keyguard_label_text" msgid="861796461028298424">"Upang i-unlock, pindutin ang Menu pagkatapos ay 0."</string> + <string name="faceunlock_multiple_failures" msgid="754137583022792429">"Nalagpasan na ang maximum na mga pagtatangka sa Face Unlock"</string> + <string name="keyguard_charged" msgid="3272223906073492454">"Na-charge"</string> + <string name="keyguard_plugged_in" msgid="8117572000639998388">"Nagcha-charge, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string> + <string name="keyguard_low_battery" msgid="8143808018719173859">"Ikonekta ang iyong charger."</string> + <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Pindutin ang Menu upang i-unlock."</string> + <string name="keyguard_network_locked_message" msgid="9169717779058037168">"Naka-lock ang network"</string> + <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"Walang SIM card"</string> + <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"Walang SIM card sa tablet."</string> + <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"Walang SIM card sa telepono."</string> + <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"Maglagay ng SIM card."</string> + <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"Wala o hindi nababasa ang SIM card. Maglagay ng SIM card."</string> + <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"Hindi nagagamit na SIM card."</string> + <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"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="keyguard_sim_locked_message" msgid="6875773413306380902">"Naka-lock ang SIM card."</string> + <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"Naka-lock ang SIM card gamit ang PUK."</string> + <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Ina-unlock ang SIM card…"</string> + <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. Widget %2$d ng %3$d."</string> + <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"Magdagdag ng widget."</string> + <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"Walang laman"</string> + <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"Pinalaki ang bahagi ng pag-unlock."</string> + <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"Pinaliit ang bahagi ng pag-unlock."</string> + <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> widget."</string> + <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"Tagapili ng user"</string> + <string name="keyguard_accessibility_status" msgid="8008264603935930611">"Katayuan"</string> + <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"Camera"</string> + <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"Mga kontrol ng media"</string> + <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"Nagsimula na ang pagbabago ng ayos ng widget."</string> + <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"Natapos na ang pagbabago ng ayos ng widget."</string> + <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"Tinanggal ang widget na <xliff:g id="WIDGET_INDEX">%1$s</xliff:g>."</string> + <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"Palakihin ang bahagi ng pag-unlock."</string> + <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"Pag-unlock ng slide."</string> + <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Pag-unlock ng pattern."</string> + <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Face unlock."</string> + <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Pag-unlock ng pin."</string> + <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Pag-unlock ng password."</string> + <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Bahagi ng pattern."</string> + <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Bahagi ng slide."</string> + <string name="keyguard_accessibility_transport_prev_description" msgid="1337286538318543555">"Button na Nakaraang track"</string> + <string name="keyguard_accessibility_transport_next_description" msgid="7073928300444909320">"Button na Susunod na track"</string> + <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Button na I-pause"</string> + <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Button na I-play"</string> + <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Button na Ihinto"</string> + <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string> + <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string> + <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string> + <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string> + <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Kanselahin"</string> + <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Tanggalin"</string> + <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Tapos na"</string> + <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Pagbabago ng Mode"</string> + <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string> + <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string> + <string name="description_target_unlock" msgid="2228524900439801453">"I-unlock"</string> + <string name="description_target_camera" msgid="969071997552486814">"Camera"</string> + <string name="description_target_silent" msgid="893551287746522182">"Tahimik"</string> + <string name="description_target_soundon" msgid="30052466675500172">"I-on ang tunog"</string> + <string name="description_target_search" msgid="3091587249776033139">"Maghanap"</string> + <string name="description_direction_up" msgid="7169032478259485180">"Mag-slide pataas para sa <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_down" msgid="5087739728639014595">"Mag-slide pababa para sa <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_left" msgid="7207478719805562165">"Mag-slide pakaliwa para sa <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_right" msgid="8034433242579600980">"Mag-slide pakanan para sa <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="user_switched" msgid="3768006783166984410">"Kasalukuyang user <xliff:g id="NAME">%1$s</xliff:g>."</string> + <string name="kg_emergency_call_label" msgid="684946192523830531">"Emergency na tawag"</string> + <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Nakalimutan ang Pattern"</string> + <string name="kg_wrong_pattern" msgid="1850806070801358830">"Maling Pattern"</string> + <string name="kg_wrong_password" msgid="2333281762128113157">"Maling Password"</string> + <string name="kg_wrong_pin" msgid="1131306510833563801">"Maling PIN"</string> + <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"Subukang muli sa loob ng <xliff:g id="NUMBER">%d</xliff:g> (na) segundo."</string> + <string name="kg_pattern_instructions" msgid="398978611683075868">"Iguhit ang iyong pattern"</string> + <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Ilagay ang SIM PIN"</string> + <string name="kg_pin_instructions" msgid="2377242233495111557">"Ilagay ang PIN"</string> + <string name="kg_password_instructions" msgid="5753646556186936819">"Ilagay ang Password"</string> + <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"Hindi na pinagana ang SIM ngayon. Maglagay ng PUK code upang magpatuloy. Makipag-ugnay sa carrier para sa mga detalye."</string> + <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Ilagay ang ninanais na PIN code"</string> + <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Kumpirmahin ang ninanais na PIN code"</string> + <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Ina-unlock ang SIM card…"</string> + <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Hindi tamang PIN code."</string> + <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Mag-type ng PIN na 4 hanggang 8 numero."</string> + <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"Dapat ay 8 numero o higit pa ang PUK code."</string> + <string name="kg_invalid_puk" msgid="3638289409676051243">"Muling ilagay ang tamang PUK code. Permanenteng hindi pagaganahin ang SIM ng mga paulit-ulit na pagtatangka."</string> + <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"Hindi tumutugma ang mga PIN code"</string> + <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Masyadong maraming pagtatangka sa pattern"</string> + <string name="kg_login_instructions" msgid="1100551261265506448">"Upang i-unlock, mag-sign in gamit ang iyong Google account."</string> + <string name="kg_login_username_hint" msgid="5718534272070920364">"Username (email)"</string> + <string name="kg_login_password_hint" msgid="9057289103827298549">"Password"</string> + <string name="kg_login_submit_button" msgid="5355904582674054702">"Mag-sign in"</string> + <string name="kg_login_invalid_input" msgid="5754664119319872197">"Di-wastong username o password."</string> + <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Nakalimutan ang iyong username o password?"\n"Bisitahin ang "<b>"google.com/accounts/recovery"</b>"."</string> + <string name="kg_login_checking_password" msgid="1052685197710252395">"Tinitingnan ang account…"</string> + <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Na-type mo nang hindi tama ang iyong PIN nang <xliff:g id="NUMBER_0">%d</xliff:g> (na) beses. "\n\n"Subukang muli sa loob ng <xliff:g id="NUMBER_1">%d</xliff:g> (na) segundo."</string> + <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Na-type mo nang hindi tama ang iyong password nang <xliff:g id="NUMBER_0">%d</xliff:g> (na) beses. "\n\n"Subukang muli sa loob ng <xliff:g id="NUMBER_1">%d</xliff:g> (na) segundo."</string> + <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Naguhit mo nang hindi tama ang iyong pattern sa pag-unlock nang <xliff:g id="NUMBER_0">%d</xliff:g> (na) beses. "\n\n"Subukang muli sa loob ng <xliff:g id="NUMBER_1">%d</xliff:g> (na) segundo."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"Tinangka mo sa hindi tamang paraan na i-unlock ang tabelt nang <xliff:g id="NUMBER_0">%d</xliff:g> (na) beses. Pagkatapos ng <xliff:g id="NUMBER_1">%d</xliff:g> pang hindi matagumpay na pagtatangka, ire-reset ang tablet sa factory default at mawawala ang lahat ng data ng user."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"Tinangka mo sa hindi tamang paraan na i-unlock ang telepono nang <xliff:g id="NUMBER_0">%d</xliff:g> (na) beses. Pagkatapos ng <xliff:g id="NUMBER_1">%d</xliff:g> pang hindi matagumpay na pagtatangka, ire-reset ang telepono sa factory default at mawawala ang lahat ng data ng user."</string> + <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"Tinangka mo sa hindi tamang paraan na i-unlock ang tablet nang <xliff:g id="NUMBER">%d</xliff:g> (na) beses. Ire-reset na ngayon ang tablet sa factory default."</string> + <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"Tinangka mo sa hindi tamang paraan na i-unlock ang telepono nang <xliff:g id="NUMBER">%d</xliff:g> (na) beses. Ire-reset na ngayon ang telepono sa factory default."</string> + <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Naguhit mo nang hindi tama ang iyong pattern sa pag-unlock nang <xliff:g id="NUMBER_0">%d</xliff:g> (na) beses. Pagkatapos ng <xliff:g id="NUMBER_1">%d</xliff:g> pang hindi matagumpay na pagtatangka, hihilingin sa iyong i-unlock ang tablet mo gamit ang isang email account."\n\n" Subukang muli sa loob ng <xliff:g id="NUMBER_2">%d</xliff:g> (na) segundo."</string> + <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Naguhit mo nang hindi tama ang iyong pattern sa pag-unlock nang <xliff:g id="NUMBER_0">%d</xliff:g> (na) beses. Pagkatapos ng <xliff:g id="NUMBER_1">%d</xliff:g> pang hindi matagumpay na pagtatangka, hihilingin sa iyong i-unlock ang telepono mo gamit ang isang email account."\n\n" Subukang muli sa loob ng <xliff:g id="NUMBER_2">%d</xliff:g> (na) segundo."</string> + <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string> + <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Alisin"</string> + <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Button na Nakaraang track"</string> + <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Button na Susunod na track"</string> + <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Button na I-pause"</string> + <string name="keyguard_transport_play_description" msgid="2924628863741150956">"Button na I-play"</string> + <string name="keyguard_transport_stop_description" msgid="3084179324810575787">"Button na Ihinto"</string> + <string name="keyguard_carrier_default" msgid="8700650403054042153">"Walang serbisyo."</string> +</resources> diff --git a/packages/Keyguard/res/values-tr/activitystrings.xml b/packages/Keyguard/res/values-tr/activitystrings.xml new file mode 100644 index 0000000..7f5a958 --- /dev/null +++ b/packages/Keyguard/res/values-tr/activitystrings.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string> + <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string> + <string name="none_menu_item" msgid="6156747285687551424">"Güvenlik yok"</string> + <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string> + <string name="password_menu_item" msgid="1959980499662153160">"Şifre"</string> + <string name="pattern_menu_item" msgid="2987798152175140249">"Desen"</string> + <string name="sim_pin_menu_item" msgid="3962286639645084880">"SIM PIN\'i"</string> + <string name="sim_puk_menu_item" msgid="6190044133008392974">"SIM PUK\'u"</string> + <string name="add_widget_item" msgid="279702152366857415">"Widget seç..."</string> + <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string> + <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string> + <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string> + <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string> +</resources> diff --git a/packages/Keyguard/res/values-tr/strings.xml b/packages/Keyguard/res/values-tr/strings.xml new file mode 100644 index 0000000..0f214ba --- /dev/null +++ b/packages/Keyguard/res/values-tr/strings.xml @@ -0,0 +1,138 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"PIN kodunu yazın"</string> + <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"PUK ve yeni PIN kodunu yazın"</string> + <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK kodu"</string> + <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Yeni PIN kodu"</string> + <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Şifre yazmak için dokunun"</font></string> + <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Kilidi açmak için şifreyi yazın"</string> + <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Kilidi açmak için PIN kodunu yazın"</string> + <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"Yanlış PIN kodu."</string> + <string name="keyguard_label_text" msgid="861796461028298424">"Kilidi açmak için önce Menü\'ye, sonra 0\'a basın."</string> + <string name="faceunlock_multiple_failures" msgid="754137583022792429">"Yüz Tanıma Kilidi için maksimum deneme sayısı aşıldı"</string> + <string name="keyguard_charged" msgid="3272223906073492454">"Şarj oldu"</string> + <string name="keyguard_plugged_in" msgid="8117572000639998388">"Şarj oluyor, <xliff:g id="PERCENT">%%</xliff:g><xliff:g id="NUMBER">%d</xliff:g>"</string> + <string name="keyguard_low_battery" msgid="8143808018719173859">"Şarj cihazınızı bağlayın."</string> + <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Kilidi açmak için Menü\'ye basın."</string> + <string name="keyguard_network_locked_message" msgid="9169717779058037168">"Ağ kilitli"</string> + <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"SIM kart yok"</string> + <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"Tablette SIM kart yok."</string> + <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"Telefonda SIM kart yok."</string> + <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"SIM kart takın."</string> + <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"SIM kart yok veya okunamıyor. Bir SIM kart takın."</string> + <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"Kullanılamayan SIM kart"</string> + <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"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="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM kart kilitli."</string> + <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM kart PUK kilidi devrede."</string> + <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"SIM kart kilidi açılıyor…"</string> + <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. Widget %2$d / %3$d."</string> + <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"Widget ekleyin."</string> + <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"Boş"</string> + <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"Kilit açma alanı genişletildi."</string> + <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"Kilit açma alanı daraltıldı."</string> + <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> widget\'ı."</string> + <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"Kullanıcı seçici"</string> + <string name="keyguard_accessibility_status" msgid="8008264603935930611">"Durum"</string> + <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"Kamera"</string> + <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"Medya denetimleri"</string> + <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"Widget\'ları yeniden sıralama işlemi başladı."</string> + <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"Widget\'ları yeniden sıralama işlemi bitti."</string> + <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> widget\'ı silindi."</string> + <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"Kilit açma alanını genişletin."</string> + <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"Kaydırarak kilit açma."</string> + <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Desenle kilit açma."</string> + <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Yüzle kilit açma."</string> + <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Pin koduyla kilit açma."</string> + <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Şifreyle kilit açma."</string> + <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Desen alanı."</string> + <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Kaydırma alanı."</string> + <string name="keyguard_accessibility_transport_prev_description" msgid="1337286538318543555">"Önceki parça düğmesi"</string> + <string name="keyguard_accessibility_transport_next_description" msgid="7073928300444909320">"Sonraki parça düğmesi"</string> + <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Duraklat düğmesi"</string> + <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Oynat düğmesi"</string> + <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Durdur düğmesi"</string> + <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string> + <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string> + <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string> + <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string> + <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"İptal"</string> + <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Sil"</string> + <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Bitti"</string> + <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Mod değiştirme"</string> + <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"ÜstKrkt"</string> + <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Giriş"</string> + <string name="description_target_unlock" msgid="2228524900439801453">"Kilidi aç"</string> + <string name="description_target_camera" msgid="969071997552486814">"Kamera"</string> + <string name="description_target_silent" msgid="893551287746522182">"Sessiz"</string> + <string name="description_target_soundon" msgid="30052466675500172">"Ses açık"</string> + <string name="description_target_search" msgid="3091587249776033139">"Ara"</string> + <string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> için yukarı kaydırın."</string> + <string name="description_direction_down" msgid="5087739728639014595">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> için aşağı kaydırın."</string> + <string name="description_direction_left" msgid="7207478719805562165">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> için sola kaydırın."</string> + <string name="description_direction_right" msgid="8034433242579600980">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> için sağa kaydırın."</string> + <string name="user_switched" msgid="3768006783166984410">"Geçerli kullanıcı: <xliff:g id="NAME">%1$s</xliff:g>."</string> + <string name="kg_emergency_call_label" msgid="684946192523830531">"Acil durum çağrısı"</string> + <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Deseni Unuttunuz mu?"</string> + <string name="kg_wrong_pattern" msgid="1850806070801358830">"Yanlış Desen"</string> + <string name="kg_wrong_password" msgid="2333281762128113157">"Yanlış Şifre"</string> + <string name="kg_wrong_pin" msgid="1131306510833563801">"Yanlış PIN"</string> + <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"<xliff:g id="NUMBER">%d</xliff:g> saniye içinde yeniden deneyin."</string> + <string name="kg_pattern_instructions" msgid="398978611683075868">"Deseninizi çizin"</string> + <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"SIM PIN kodunu girin"</string> + <string name="kg_pin_instructions" msgid="2377242233495111557">"PIN\'i girin"</string> + <string name="kg_password_instructions" msgid="5753646556186936819">"Şifreyi Girin"</string> + <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"SIM kart artık devre dışı bırakıldı. Devam etmek için PUK kodunu girin. Ayrıntılı bilgi için operatörle bağlantı kurun."</string> + <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"İstenen PIN kodunu girin"</string> + <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"İstenen PIN kodunu onaylayın"</string> + <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"SIM kart kilidi açılıyor…"</string> + <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Yanlış PIN kodu."</string> + <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"4-8 rakamdan oluşan bir PIN girin."</string> + <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK kodu 8 veya daha çok basamaklı bir sayı olmalıdır."</string> + <string name="kg_invalid_puk" msgid="3638289409676051243">"Doğru PUK kodunu tekrar girin. Çok sayıda deneme yapılırsa SIM kart kalıcı olarak devre dışı bırakılır."</string> + <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN kodları eşleşmiyor"</string> + <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Çok fazla sayıda desen denemesi yapıldı"</string> + <string name="kg_login_instructions" msgid="1100551261265506448">"Kilidi açmak için Google hesabınızla oturum açın."</string> + <string name="kg_login_username_hint" msgid="5718534272070920364">"Kullanıcı adı (e-posta)"</string> + <string name="kg_login_password_hint" msgid="9057289103827298549">"Şifre"</string> + <string name="kg_login_submit_button" msgid="5355904582674054702">"Oturum aç"</string> + <string name="kg_login_invalid_input" msgid="5754664119319872197">"Geçersiz kullanıcı adı veya şifre."</string> + <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Kullanıcı adınızı veya şifrenizi mi unuttunuz?"\n<b>"google.com/accounts/recovery"</b>" adresini ziyaret edin."</string> + <string name="kg_login_checking_password" msgid="1052685197710252395">"Hesap denetleniyor…"</string> + <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"PIN kodunuzu <xliff:g id="NUMBER_0">%d</xliff:g> kez yanlış girdiniz. "\n\n"<xliff:g id="NUMBER_1">%d</xliff:g> saniye içinde tekrar deneyin."</string> + <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Şifrenizi <xliff:g id="NUMBER_0">%d</xliff:g> kez yanlış yazdınız. "\n\n"<xliff:g id="NUMBER_1">%d</xliff:g> saniye içinde tekrar deneyin."</string> + <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Kilit açma deseninizi <xliff:g id="NUMBER_0">%d</xliff:g> kez yanlış çizdiniz. "\n\n"<xliff:g id="NUMBER_1">%d</xliff:g> saniye içinde tekrar deneyin."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"Tablet kilidini <xliff:g id="NUMBER_0">%d</xliff:g> defa yanlış bir şekilde açmaya çalıştınız. <xliff:g id="NUMBER_1">%d</xliff:g> defa daha başarısız deneme yapılırsa, tablet fabrika varsayılan değerine sıfırlanır ve tüm kullanıcı verileri kaybedilir."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"Telefonun kilidini <xliff:g id="NUMBER_0">%d</xliff:g> defa yanlış bir şekilde açmaya çalıştınız. <xliff:g id="NUMBER_1">%d</xliff:g> defa daha başarısız deneme yapılırsa, telefon fabrika varsayılan değerine sıfırlanır ve tüm kullanıcı verileri kaybedilir."</string> + <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"Tablet kilidini <xliff:g id="NUMBER">%d</xliff:g> defa yanlış bir şekilde açmaya çalıştınız. Tablet şimdi fabrika varsayılanına sıfırlanacak."</string> + <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"Telefon kilidini <xliff:g id="NUMBER">%d</xliff:g> defa yanlış bir şekilde açmaya çalıştınız. Telefon şimdi fabrika varsayılanına sıfırlanacak."</string> + <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Kilit açma deseninizi <xliff:g id="NUMBER_0">%d</xliff:g> kez yanlış çizdiniz. <xliff:g id="NUMBER_1">%d</xliff:g> başarısız denemeden sonra, tabletinizi bir e-posta hesabı kullanarak açmanız istenir."\n\n" <xliff:g id="NUMBER_2">%d</xliff:g> saniye içinde tekrar deneyin."</string> + <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Kilit açma deseninizi <xliff:g id="NUMBER_0">%d</xliff:g> kez yanlış çizdiniz. <xliff:g id="NUMBER_1">%d</xliff:g> başarısız denemeden sonra telefonunuzu bir e-posta hesabı kullanarak açmanız istenir."\n\n" <xliff:g id="NUMBER_2">%d</xliff:g> saniye içinde tekrar deneyin."</string> + <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string> + <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Kaldır"</string> + <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Önceki parça düğmesi"</string> + <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Sonraki parça düğmesi"</string> + <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Duraklat düğmesi"</string> + <string name="keyguard_transport_play_description" msgid="2924628863741150956">"Oynat düğmesi"</string> + <string name="keyguard_transport_stop_description" msgid="3084179324810575787">"Durdur düğmesi"</string> + <string name="keyguard_carrier_default" msgid="8700650403054042153">"Hizmet yok."</string> +</resources> diff --git a/packages/Keyguard/res/values-uk/activitystrings.xml b/packages/Keyguard/res/values-uk/activitystrings.xml new file mode 100644 index 0000000..d4d0a4d --- /dev/null +++ b/packages/Keyguard/res/values-uk/activitystrings.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string> + <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string> + <string name="none_menu_item" msgid="6156747285687551424">"Без захисту"</string> + <string name="pin_menu_item" msgid="1179756433268962311">"PIN-код"</string> + <string name="password_menu_item" msgid="1959980499662153160">"Пароль"</string> + <string name="pattern_menu_item" msgid="2987798152175140249">"Ключ"</string> + <string name="sim_pin_menu_item" msgid="3962286639645084880">"PIN-код SIM-карти"</string> + <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK-код SIM-карти"</string> + <string name="add_widget_item" msgid="279702152366857415">"Вибрати віджет…"</string> + <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string> + <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string> + <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string> + <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string> +</resources> diff --git a/packages/Keyguard/res/values-uk/strings.xml b/packages/Keyguard/res/values-uk/strings.xml new file mode 100644 index 0000000..273f0c9 --- /dev/null +++ b/packages/Keyguard/res/values-uk/strings.xml @@ -0,0 +1,138 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Введіть PIN-код"</string> + <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Введіть PUK-код і новий PIN-код"</string> + <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK-код"</string> + <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Новий PIN-код"</string> + <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Торкніться, щоб ввести пароль"</font></string> + <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Введіть пароль, щоб розблокувати"</string> + <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Введіть PIN-код, щоб розблокувати"</string> + <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"Неправильний PIN-код."</string> + <string name="keyguard_label_text" msgid="861796461028298424">"Щоб розбл., натисн. меню та 0."</string> + <string name="faceunlock_multiple_failures" msgid="754137583022792429">"Перевищено максимальну кількість спроб розблокування за допомогою функції \"Фейсконтроль\""</string> + <string name="keyguard_charged" msgid="3272223906073492454">"Заряджено"</string> + <string name="keyguard_plugged_in" msgid="8117572000639998388">"Заряджається, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string> + <string name="keyguard_low_battery" msgid="8143808018719173859">"Підключіть зарядний пристрій."</string> + <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Натисніть Меню, щоб розблокувати."</string> + <string name="keyguard_network_locked_message" msgid="9169717779058037168">"Мережу заблоковано"</string> + <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"Відсутня SIM-карта"</string> + <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"У планшетному ПК немає SIM-карти."</string> + <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"У телефоні немає SIM-карти."</string> + <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"Вставте SIM-карту."</string> + <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"SIM-карта відсутня або не доступна для читання. Вставте SIM-карту."</string> + <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"Непридатна SIM-карта."</string> + <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"Вашу SIM-карту вимкнено назавжди."\n" Зверніться до свого постачальника послуг бездротового зв’язку, щоб отримати іншу SIM-карту."</string> + <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM-карту заблоковано."</string> + <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM-карту заблоковано PUK-кодом."</string> + <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Розблокування SIM-карти…"</string> + <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. Віджет %2$d з %3$d."</string> + <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"Додати віджет."</string> + <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"Порожня область"</string> + <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"Область розблокування розгорнуто."</string> + <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"Область розблокування згорнуто."</string> + <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"Віджет <xliff:g id="WIDGET_INDEX">%1$s</xliff:g>."</string> + <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"Вибір користувача"</string> + <string name="keyguard_accessibility_status" msgid="8008264603935930611">"Статус"</string> + <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"Камера"</string> + <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"Елементи керування носієм"</string> + <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"Змінення порядку віджетів розпочато."</string> + <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"Змінення порядку віджетів закінчено."</string> + <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"Віджет <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> видалено."</string> + <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"Розгорнути область розблокування."</string> + <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"Розблокування повзунком."</string> + <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Розблокування ключем."</string> + <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Фейсконтроль"</string> + <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Розблокування PIN-кодом."</string> + <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Розблокування паролем."</string> + <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Область ключа."</string> + <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Область повзунка."</string> + <string name="keyguard_accessibility_transport_prev_description" msgid="1337286538318543555">"Кнопка \"Попередня композиція\""</string> + <string name="keyguard_accessibility_transport_next_description" msgid="7073928300444909320">"Кнопка \"Наступна композиція\""</string> + <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Кнопка \"Призупинити\""</string> + <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Кнопка \"Відтворити\""</string> + <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Кнопка \"Зупинити\""</string> + <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string> + <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string> + <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string> + <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string> + <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Скасувати"</string> + <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Delete"</string> + <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Готово"</string> + <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Зміна режиму"</string> + <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string> + <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string> + <string name="description_target_unlock" msgid="2228524900439801453">"Розблокувати"</string> + <string name="description_target_camera" msgid="969071997552486814">"Камера"</string> + <string name="description_target_silent" msgid="893551287746522182">"Без звуку"</string> + <string name="description_target_soundon" msgid="30052466675500172">"Увімкнути звук"</string> + <string name="description_target_search" msgid="3091587249776033139">"Пошук"</string> + <string name="description_direction_up" msgid="7169032478259485180">"Проведіть пальцем угору, щоб <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_down" msgid="5087739728639014595">"Проведіть пальцем униз, щоб <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_left" msgid="7207478719805562165">"Проведіть пальцем ліворуч, щоб <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_right" msgid="8034433242579600980">"Проведіть пальцем праворуч, щоб <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="user_switched" msgid="3768006783166984410">"Поточний користувач: <xliff:g id="NAME">%1$s</xliff:g>."</string> + <string name="kg_emergency_call_label" msgid="684946192523830531">"Екстрений виклик"</string> + <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Не пам’ятаю ключ"</string> + <string name="kg_wrong_pattern" msgid="1850806070801358830">"Неправильний ключ"</string> + <string name="kg_wrong_password" msgid="2333281762128113157">"Неправильний пароль"</string> + <string name="kg_wrong_pin" msgid="1131306510833563801">"Неправильний PIN-код"</string> + <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"Повторіть спробу через <xliff:g id="NUMBER">%d</xliff:g> с."</string> + <string name="kg_pattern_instructions" msgid="398978611683075868">"Намалюйте ключ"</string> + <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Введіть PIN-код SIM-карти"</string> + <string name="kg_pin_instructions" msgid="2377242233495111557">"Введіть PIN-код"</string> + <string name="kg_password_instructions" msgid="5753646556186936819">"Введіть пароль"</string> + <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"Зараз SIM-карту вимкнено. Введіть PUK-код, щоб продовжити. Зв’яжіться з оператором, щоб дізнатися більше."</string> + <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Введіть потрібний PIN-код"</string> + <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Підтвердьте потрібний PIN-код"</string> + <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Розблокування SIM-карти…"</string> + <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Неправильний PIN-код."</string> + <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Введіть PIN-код із 4–8 цифр."</string> + <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK-код має складатися зі щонайменше 8 цифр."</string> + <string name="kg_invalid_puk" msgid="3638289409676051243">"Повторно введіть правильний PUK-код. Численні спроби назавжди вимкнуть SIM-карту."</string> + <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN-коди не збігаються"</string> + <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Забагато спроб намалювати ключ"</string> + <string name="kg_login_instructions" msgid="1100551261265506448">"Щоб розблокувати, увійдіть, використовуючи дані облікового запису Google."</string> + <string name="kg_login_username_hint" msgid="5718534272070920364">"Ім’я користувача (електронна адреса)"</string> + <string name="kg_login_password_hint" msgid="9057289103827298549">"Пароль"</string> + <string name="kg_login_submit_button" msgid="5355904582674054702">"Увійти"</string> + <string name="kg_login_invalid_input" msgid="5754664119319872197">"Недійсне ім’я користувача чи пароль."</string> + <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Не пам’ятаєте ім’я користувача чи пароль?"\n"Відвідайте сторінку "<b>"google.com/accounts/recovery"</b>"."</string> + <string name="kg_login_checking_password" msgid="1052685197710252395">"Перевірка облікового запису…"</string> + <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"PIN-код неправильно введено стільки разів: <xliff:g id="NUMBER_0">%d</xliff:g>. "\n\n"Повторіть спробу через <xliff:g id="NUMBER_1">%d</xliff:g> с."</string> + <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Пароль неправильно введено стільки разів: <xliff:g id="NUMBER_0">%d</xliff:g>. "\n\n"Повторіть спробу через <xliff:g id="NUMBER_1">%d</xliff:g> с."</string> + <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Ключ розблокування неправильно намальовано стільки разів: <xliff:g id="NUMBER_0">%d</xliff:g>. "\n\n"Повторіть спробу через <xliff:g id="NUMBER_1">%d</xliff:g> с."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"Кількість невдалих спроб розблокувати планшетний ПК: <xliff:g id="NUMBER_0">%d</xliff:g>. У вас є ще стільки спроб: <xliff:g id="NUMBER_1">%d</xliff:g>. У разі невдачі налаштування планшетного ПК буде змінено на заводські за умовчанням, а всі дані користувача – втрачено."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"Кількість невдалих спроб розблокувати телефон: <xliff:g id="NUMBER_0">%d</xliff:g>. У вас є ще стільки спроб: <xliff:g id="NUMBER_1">%d</xliff:g>. У разі невдачі налаштування телефону буде змінено на заводські за умовчанням, а всі дані користувача – втрачено."</string> + <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"Кількість невдалих спроб розблокувати планшетний ПК: <xliff:g id="NUMBER">%d</xliff:g>. Налаштування планшетного ПК буде змінено на заводські за умовчанням."</string> + <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"Кількість невдалих спроб розблокувати телефон: <xliff:g id="NUMBER">%d</xliff:g>. Налаштування телефону буде змінено на заводські за умовчанням."</string> + <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Ключ розблокування неправильно намальовано стільки разів: <xliff:g id="NUMBER_0">%d</xliff:g>. У вас є ще стільки спроб: <xliff:g id="NUMBER_1">%d</xliff:g>. У разі невдачі з’явиться запит розблокувати планшетний ПК за допомогою облікового запису електронної пошти."\n\n" Повторіть спробу через <xliff:g id="NUMBER_2">%d</xliff:g> сек."</string> + <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Ключ розблокування неправильно намальовано стільки разів: <xliff:g id="NUMBER_0">%d</xliff:g>. У вас є ще стільки спроб: <xliff:g id="NUMBER_1">%d</xliff:g>. У разі невдачі з’явиться запит розблокувати телефон за допомогою облікового запису електронної пошти."\n\n" Повторіть спробу через <xliff:g id="NUMBER_2">%d</xliff:g> сек."</string> + <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" – "</string> + <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Вилучити"</string> + <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Кнопка \"Попередня композиція\""</string> + <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Кнопка \"Наступна композиція\""</string> + <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Кнопка \"Призупинити\""</string> + <string name="keyguard_transport_play_description" msgid="2924628863741150956">"Кнопка \"Відтворити\""</string> + <string name="keyguard_transport_stop_description" msgid="3084179324810575787">"Кнопка \"Зупинити\""</string> + <string name="keyguard_carrier_default" msgid="8700650403054042153">"Зв’язку немає."</string> +</resources> diff --git a/packages/Keyguard/res/values-vi/activitystrings.xml b/packages/Keyguard/res/values-vi/activitystrings.xml new file mode 100644 index 0000000..009c3bd --- /dev/null +++ b/packages/Keyguard/res/values-vi/activitystrings.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string> + <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string> + <string name="none_menu_item" msgid="6156747285687551424">"Không có bảo mật"</string> + <string name="pin_menu_item" msgid="1179756433268962311">"Mã PIN"</string> + <string name="password_menu_item" msgid="1959980499662153160">"Mật khẩu"</string> + <string name="pattern_menu_item" msgid="2987798152175140249">"Hình"</string> + <string name="sim_pin_menu_item" msgid="3962286639645084880">"Mã PIN của SIM"</string> + <string name="sim_puk_menu_item" msgid="6190044133008392974">"Mã PUK của SIM"</string> + <string name="add_widget_item" msgid="279702152366857415">"Chọn tiện ích..."</string> + <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string> + <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string> + <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string> + <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string> +</resources> diff --git a/packages/Keyguard/res/values-vi/strings.xml b/packages/Keyguard/res/values-vi/strings.xml new file mode 100644 index 0000000..7b57fc7 --- /dev/null +++ b/packages/Keyguard/res/values-vi/strings.xml @@ -0,0 +1,138 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Nhập mã PIN"</string> + <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Nhập PUK và mã PIN mới"</string> + <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"Mã PUK"</string> + <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Mã PIN mới"</string> + <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Chạm để nhập mật khẩu"</font></string> + <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Nhập mật khẩu để mở khóa"</string> + <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Nhập mã PIN để mở khóa"</string> + <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"Mã PIN không chính xác."</string> + <string name="keyguard_label_text" msgid="861796461028298424">"Để mở khóa, hãy nhấn vào Trình đơn sau đó nhấn 0."</string> + <string name="faceunlock_multiple_failures" msgid="754137583022792429">"Đã vượt quá số lần Mở khóa bằng khuôn mặt tối đa"</string> + <string name="keyguard_charged" msgid="3272223906073492454">"Pin đầy"</string> + <string name="keyguard_plugged_in" msgid="8117572000639998388">"Đang sạc, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string> + <string name="keyguard_low_battery" msgid="8143808018719173859">"Kết nối bộ sạc của bạn."</string> + <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Nhấn vào Trình đơn để mở khóa."</string> + <string name="keyguard_network_locked_message" msgid="9169717779058037168">"Mạng đã bị khóa"</string> + <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"Không có thẻ SIM nào"</string> + <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"Không có thẻ SIM nào trong máy tính bảng."</string> + <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"Không có thẻ SIM nào trong điện thoại."</string> + <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"Vui lòng lắp thẻ SIM."</string> + <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"Thẻ SIM bị thiếu hoặc không thể đọc được. Vui lòng lắp thẻ SIM."</string> + <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"Thẻ SIM không sử dụng được."</string> + <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"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="keyguard_sim_locked_message" msgid="6875773413306380902">"Thẻ SIM đã bị khóa."</string> + <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"Thẻ SIM đã bị khóa PUK."</string> + <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Đang mở khóa thẻ SIM…"</string> + <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. Tiện ích %2$d trong số %3$d."</string> + <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"Thêm tiện ích."</string> + <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"Trống"</string> + <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"Đã mở rộng vùng khóa."</string> + <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"Đã thu gọn vùng khóa."</string> + <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> tiện ích."</string> + <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"Bộ chọn người dùng"</string> + <string name="keyguard_accessibility_status" msgid="8008264603935930611">"Trạng thái"</string> + <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"Máy ảnh"</string> + <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"Điều khiển phương tiện"</string> + <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"Đã bắt đầu xắp xếp lại tiện ích."</string> + <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"Đã kết thúc sắp xếp lại tiện ích."</string> + <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"Đã xóa tiện ích <xliff:g id="WIDGET_INDEX">%1$s</xliff:g>."</string> + <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"Mở rộng vùng khóa."</string> + <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"Mở khóa bằng cách trượt."</string> + <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Mở khóa bằng hình."</string> + <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Mở khóa bằng khuôn mặt."</string> + <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Mở khóa bằng mã pin."</string> + <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Mở khóa bằng mật khẩu."</string> + <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Khu vực hình."</string> + <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Khu vực trượt."</string> + <string name="keyguard_accessibility_transport_prev_description" msgid="1337286538318543555">"Nút bản nhạc trước"</string> + <string name="keyguard_accessibility_transport_next_description" msgid="7073928300444909320">"Nút bản nhạc tiếp theo"</string> + <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Nút tạm dừng"</string> + <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Nút phát"</string> + <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Nút dừng"</string> + <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string> + <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string> + <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string> + <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string> + <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Hủy"</string> + <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Xóa"</string> + <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Xong"</string> + <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Thay đổi chế độ"</string> + <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string> + <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string> + <string name="description_target_unlock" msgid="2228524900439801453">"Mở khóa"</string> + <string name="description_target_camera" msgid="969071997552486814">"Máy ảnh"</string> + <string name="description_target_silent" msgid="893551287746522182">"Im lặng"</string> + <string name="description_target_soundon" msgid="30052466675500172">"Bật âm thanh"</string> + <string name="description_target_search" msgid="3091587249776033139">"Tìm kiếm"</string> + <string name="description_direction_up" msgid="7169032478259485180">"Trượt lên để <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_down" msgid="5087739728639014595">"Trượt xuống để <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_left" msgid="7207478719805562165">"Trượt sang trái để <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_right" msgid="8034433242579600980">"Trượt sang phải để <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="user_switched" msgid="3768006783166984410">"Người dùng hiện tại <xliff:g id="NAME">%1$s</xliff:g>."</string> + <string name="kg_emergency_call_label" msgid="684946192523830531">"Cuộc gọi khẩn cấp"</string> + <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Đã quên hình"</string> + <string name="kg_wrong_pattern" msgid="1850806070801358830">"Hình sai"</string> + <string name="kg_wrong_password" msgid="2333281762128113157">"Mật khẩu sai"</string> + <string name="kg_wrong_pin" msgid="1131306510833563801">"PIN sai"</string> + <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"Hãy thử lại sau <xliff:g id="NUMBER">%d</xliff:g> giây."</string> + <string name="kg_pattern_instructions" msgid="398978611683075868">"Vẽ hình của bạn"</string> + <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Nhập PIN của SIM"</string> + <string name="kg_pin_instructions" msgid="2377242233495111557">"Nhập PIN"</string> + <string name="kg_password_instructions" msgid="5753646556186936819">"Nhập mật khẩu"</string> + <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"SIM hiện bị vô hiệu hóa. Nhập mã PUK để tiếp tục. Liên hệ với nhà cung cấp dịch vụ để biết chi tiết."</string> + <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Nhập mã PIN mong muốn"</string> + <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Xác nhận mã PIN mong muốn"</string> + <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Đang mở khóa thẻ SIM…"</string> + <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Mã PIN không chính xác."</string> + <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Nhập mã PIN có từ 4 đến 8 số."</string> + <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"Mã PUK phải có từ 8 số trở lên."</string> + <string name="kg_invalid_puk" msgid="3638289409676051243">"Hãy nhập lại mã PUK chính xác. Nhiều lần lặp lại sẽ vô hiệu hóa vĩnh viễn thẻ SIM."</string> + <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"Mã PIN không khớp"</string> + <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Quá nhiều lần nhập hình"</string> + <string name="kg_login_instructions" msgid="1100551261265506448">"Để mở khóa, hãy đăng nhập bằng tài khoản Google của bạn."</string> + <string name="kg_login_username_hint" msgid="5718534272070920364">"Tên người dùng (email)"</string> + <string name="kg_login_password_hint" msgid="9057289103827298549">"Mật khẩu"</string> + <string name="kg_login_submit_button" msgid="5355904582674054702">"Đăng nhập"</string> + <string name="kg_login_invalid_input" msgid="5754664119319872197">"Tên người dùng hoặc mật khẩu không hợp lệ."</string> + <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Bạn quên tên người dùng hoặc mật khẩu?"\n"Hãy truy cập "<b>"google.com/accounts/recovery"</b>"."</string> + <string name="kg_login_checking_password" msgid="1052685197710252395">"Đang kiểm tra tài khoản…"</string> + <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Bạn đã <xliff:g id="NUMBER_0">%d</xliff:g> lần nhập sai mã PIN của mình. Hãy "\n\n"thử lại sau <xliff:g id="NUMBER_1">%d</xliff:g> giây."</string> + <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Bạn đã <xliff:g id="NUMBER_0">%d</xliff:g> lần nhập sai mật khẩu của mình. Hãy "\n\n"thử lại sau <xliff:g id="NUMBER_1">%d</xliff:g> giây."</string> + <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Bạn đã <xliff:g id="NUMBER_0">%d</xliff:g> lần vẽ không chính xác hình mở khóa của mình. Hãy "\n\n"thử lại sau <xliff:g id="NUMBER_1">%d</xliff:g> giây."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"Bạn đã <xliff:g id="NUMBER_0">%d</xliff:g> lần mở khóa máy tính bảng không đúng cách. Sau <xliff:g id="NUMBER_1">%d</xliff:g> lần mở khóa không thành công nữa, máy tính bảng sẽ được đặt lại về mặc định ban đầu và tất cả dữ liệu người dùng sẽ bị mất."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"Bạn đã <xliff:g id="NUMBER_0">%d</xliff:g> lần mở khóa điện thoại không đúng cách. Sau <xliff:g id="NUMBER_1">%d</xliff:g> lần mở khóa không thành công nữa, điện thoại sẽ được đặt lại về mặc định ban đầu và tất cả dữ liệu người dùng sẽ bị mất."</string> + <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"Bạn đã <xliff:g id="NUMBER">%d</xliff:g> lần mở khóa máy tính bảng không đúng cách. Bây giờ, máy tính bảng sẽ được đặt lại về mặc định ban đầu."</string> + <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"Bạn đã <xliff:g id="NUMBER">%d</xliff:g> lần mở khóa điện thoại không đúng cách. Bây giờ, điện thoại sẽ được đặt lại về mặc định ban đầu."</string> + <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Bạn đã <xliff:g id="NUMBER_0">%d</xliff:g> lần vẽ không chính xác hình mở khóa của mình. Sau <xliff:g id="NUMBER_1">%d</xliff:g> lần thử không thành công nữa, bạn sẽ được yêu cầu mở khóa máy tính bảng bằng tài khoản email."\n\n" Vui lòng thử lại sau <xliff:g id="NUMBER_2">%d</xliff:g> giây."</string> + <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Bạn đã <xliff:g id="NUMBER_0">%d</xliff:g> lần vẽ không chính xác hình mở khóa của mình. Sau <xliff:g id="NUMBER_1">%d</xliff:g> lần thử không thành công nữa, bạn sẽ được yêu cầu mở khóa điện thoại bằng tài khoản email."\n\n" Vui lòng thử lại sau <xliff:g id="NUMBER_2">%d</xliff:g> giây."</string> + <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string> + <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Xóa"</string> + <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Nút bản nhạc trước"</string> + <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Nút bản nhạc tiếp theo"</string> + <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Nút tạm dừng"</string> + <string name="keyguard_transport_play_description" msgid="2924628863741150956">"Nút phát"</string> + <string name="keyguard_transport_stop_description" msgid="3084179324810575787">"Nút dừng"</string> + <string name="keyguard_carrier_default" msgid="8700650403054042153">"Không có dịch vụ."</string> +</resources> diff --git a/packages/Keyguard/res/values-xlarge/dimens.xml b/packages/Keyguard/res/values-xlarge/dimens.xml new file mode 100644 index 0000000..b8cf287 --- /dev/null +++ b/packages/Keyguard/res/values-xlarge/dimens.xml @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* //device/apps/common/assets/res/any/dimens.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ +--> +<resources> + <!-- Default height of a key in the password keyboard for alpha --> + <dimen name="password_keyboard_key_height_alpha">75dip</dimen> + <!-- Default height of a key in the password keyboard for numeric --> + <dimen name="password_keyboard_key_height_numeric">75dip</dimen> + <!-- keyboardHeight = key_height*4 + key_bottom_gap*3 --> + <dimen name="password_keyboard_height">48.0mm</dimen> +</resources> diff --git a/packages/Keyguard/res/values-zh-rCN/activitystrings.xml b/packages/Keyguard/res/values-zh-rCN/activitystrings.xml new file mode 100644 index 0000000..d9b99e0 --- /dev/null +++ b/packages/Keyguard/res/values-zh-rCN/activitystrings.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string> + <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string> + <string name="none_menu_item" msgid="6156747285687551424">"无安全措施"</string> + <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string> + <string name="password_menu_item" msgid="1959980499662153160">"密码"</string> + <string name="pattern_menu_item" msgid="2987798152175140249">"图案"</string> + <string name="sim_pin_menu_item" msgid="3962286639645084880">"SIM 卡 PIN"</string> + <string name="sim_puk_menu_item" msgid="6190044133008392974">"SIM 卡 PUK"</string> + <string name="add_widget_item" msgid="279702152366857415">"选择小部件..."</string> + <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string> + <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string> + <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string> + <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string> +</resources> diff --git a/packages/Keyguard/res/values-zh-rCN/strings.xml b/packages/Keyguard/res/values-zh-rCN/strings.xml new file mode 100644 index 0000000..9e7c088 --- /dev/null +++ b/packages/Keyguard/res/values-zh-rCN/strings.xml @@ -0,0 +1,138 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"输入 PIN 码"</string> + <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"请输入 PUK 码和新的 PIN 码"</string> + <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK 码"</string> + <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"新的 PIN 码"</string> + <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"触摸可输入密码"</font></string> + <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"输入密码以解锁"</string> + <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"输入 PIN 进行解锁"</string> + <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"PIN 码有误。"</string> + <string name="keyguard_label_text" msgid="861796461028298424">"要解锁,请先按 MENU 再按 0。"</string> + <string name="faceunlock_multiple_failures" msgid="754137583022792429">"已超过“人脸解锁”尝试次数上限"</string> + <string name="keyguard_charged" msgid="3272223906073492454">"充电完成"</string> + <string name="keyguard_plugged_in" msgid="8117572000639998388">"正在充电 (<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>)"</string> + <string name="keyguard_low_battery" msgid="8143808018719173859">"请连接充电器。"</string> + <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"按“菜单”键解锁。"</string> + <string name="keyguard_network_locked_message" msgid="9169717779058037168">"网络已锁定"</string> + <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"无 SIM 卡"</string> + <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"平板电脑中没有 SIM 卡。"</string> + <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"手机中没有 SIM 卡。"</string> + <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"请插入 SIM 卡。"</string> + <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"SIM 卡缺失或无法读取,请插入 SIM 卡。"</string> + <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"SIM 卡无法使用。"</string> + <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"您的 SIM 卡已永久停用。"\n"请与您的无线服务提供商联系,以便重新获取一张 SIM 卡。"</string> + <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM 卡已被锁定。"</string> + <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM 卡已被 PUK 锁定。"</string> + <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"正在解锁 SIM 卡..."</string> + <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s。%3$d的小部件%2$d。"</string> + <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"添加小部件。"</string> + <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"空白"</string> + <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"已展开解锁区域。"</string> + <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"已折叠解锁区域。"</string> + <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g>小部件。"</string> + <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"用户选择器"</string> + <string name="keyguard_accessibility_status" msgid="8008264603935930611">"状态"</string> + <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"相机"</string> + <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"媒体控制"</string> + <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"已开始将小部件重新排序。"</string> + <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"已完成小部件重新排序。"</string> + <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"已删除小部件<xliff:g id="WIDGET_INDEX">%1$s</xliff:g>。"</string> + <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"展开解锁区域。"</string> + <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"滑动解锁。"</string> + <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"图案解锁。"</string> + <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"人脸解锁。"</string> + <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"PIN 解锁。"</string> + <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"密码解锁。"</string> + <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"图案区域。"</string> + <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"滑动区域。"</string> + <string name="keyguard_accessibility_transport_prev_description" msgid="1337286538318543555">"上一曲按钮"</string> + <string name="keyguard_accessibility_transport_next_description" msgid="7073928300444909320">"下一曲按钮"</string> + <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"暂停按钮"</string> + <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"播放按钮"</string> + <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"停止按钮"</string> + <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string> + <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string> + <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string> + <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string> + <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"取消"</string> + <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Delete"</string> + <string name="keyboardview_keycode_done" msgid="1992571118466679775">"完成"</string> + <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"模式更改"</string> + <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string> + <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string> + <string name="description_target_unlock" msgid="2228524900439801453">"解锁"</string> + <string name="description_target_camera" msgid="969071997552486814">"相机"</string> + <string name="description_target_silent" msgid="893551287746522182">"静音"</string> + <string name="description_target_soundon" msgid="30052466675500172">"打开声音"</string> + <string name="description_target_search" msgid="3091587249776033139">"搜索"</string> + <string name="description_direction_up" msgid="7169032478259485180">"向上滑动以<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>。"</string> + <string name="description_direction_down" msgid="5087739728639014595">"向下滑动以<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>。"</string> + <string name="description_direction_left" msgid="7207478719805562165">"向左滑动以<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>。"</string> + <string name="description_direction_right" msgid="8034433242579600980">"向右滑动以<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>。"</string> + <string name="user_switched" msgid="3768006783166984410">"当前用户是<xliff:g id="NAME">%1$s</xliff:g>。"</string> + <string name="kg_emergency_call_label" msgid="684946192523830531">"紧急呼救"</string> + <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"忘记了图案"</string> + <string name="kg_wrong_pattern" msgid="1850806070801358830">"图案错误"</string> + <string name="kg_wrong_password" msgid="2333281762128113157">"密码错误"</string> + <string name="kg_wrong_pin" msgid="1131306510833563801">"PIN 有误"</string> + <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"请在 <xliff:g id="NUMBER">%d</xliff:g> 秒后重试。"</string> + <string name="kg_pattern_instructions" msgid="398978611683075868">"绘制您的图案"</string> + <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"输入 SIM PIN"</string> + <string name="kg_pin_instructions" msgid="2377242233495111557">"输入 PIN"</string> + <string name="kg_password_instructions" msgid="5753646556186936819">"输入密码"</string> + <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"SIM 卡已被停用,需要输入 PUK 码才能继续使用。有关详情,请联系您的运营商。"</string> + <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"请输入所需 PIN 码"</string> + <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"请确认所需 PIN 码"</string> + <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"正在解锁 SIM 卡..."</string> + <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"PIN 码有误。"</string> + <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"请输入 4 至 8 位数的 PIN。"</string> + <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK 码应至少包含 8 位数字。"</string> + <string name="kg_invalid_puk" msgid="3638289409676051243">"请重新输入正确的 PUK 码。如果尝试错误次数过多,SIM 卡将永久停用。"</string> + <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN 码不匹配"</string> + <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"图案尝试次数过多"</string> + <string name="kg_login_instructions" msgid="1100551261265506448">"要解锁,请登录您的 Google 帐户。"</string> + <string name="kg_login_username_hint" msgid="5718534272070920364">"用户名(电子邮件地址)"</string> + <string name="kg_login_password_hint" msgid="9057289103827298549">"密码"</string> + <string name="kg_login_submit_button" msgid="5355904582674054702">"登录"</string> + <string name="kg_login_invalid_input" msgid="5754664119319872197">"用户名或密码无效。"</string> + <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"忘记了用户名或密码?"\n"请访问 "<b>"google.com/accounts/recovery"</b>"。"</string> + <string name="kg_login_checking_password" msgid="1052685197710252395">"正在检查帐户…"</string> + <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"您已经 <xliff:g id="NUMBER_0">%d</xliff:g> 次错误地输入了 PIN。"\n\n"请在 <xliff:g id="NUMBER_1">%d</xliff:g> 秒后重试。"</string> + <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"您已经 <xliff:g id="NUMBER_0">%d</xliff:g> 次错误地输入了密码。"\n\n"请在 <xliff:g id="NUMBER_1">%d</xliff:g> 秒后重试。"</string> + <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"您已经 <xliff:g id="NUMBER_0">%d</xliff:g> 次错误地绘制了解锁图案。"\n\n"请在 <xliff:g id="NUMBER_1">%d</xliff:g> 秒后重试。"</string> + <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"您已经 <xliff:g id="NUMBER_0">%d</xliff:g> 次错误地尝试解锁平板电脑。如果再尝试 <xliff:g id="NUMBER_1">%d</xliff:g> 次后仍不成功,平板电脑就会重置为出厂默认设置,而且所有用户数据都会丢失。"</string> + <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"您已经 <xliff:g id="NUMBER_0">%d</xliff:g> 次错误地尝试解锁手机。如果再尝试 <xliff:g id="NUMBER_1">%d</xliff:g> 次后仍不成功,手机就会重置为出厂默认设置,而且所有用户数据都会丢失。"</string> + <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"您已经 <xliff:g id="NUMBER">%d</xliff:g> 次错误地尝试解锁平板电脑。平板电脑现在将重置为出厂默认设置。"</string> + <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"您已经 <xliff:g id="NUMBER">%d</xliff:g> 次错误地尝试解锁手机。手机现在将重置为出厂默认设置。"</string> + <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"您已经 <xliff:g id="NUMBER_0">%d</xliff:g> 次错误地绘制了解锁图案。如果再尝试 <xliff:g id="NUMBER_1">%d</xliff:g> 次后仍不成功,系统就会要求您使用自己的电子邮件帐户解锁平板电脑。"\n\n"请在 <xliff:g id="NUMBER_2">%d</xliff:g> 秒后重试。"</string> + <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"您已经 <xliff:g id="NUMBER_0">%d</xliff:g> 次错误地绘制了解锁图案。如果再尝试 <xliff:g id="NUMBER_1">%d</xliff:g> 次后仍不成功,系统就会要求您使用自己的电子邮件帐户解锁手机。"\n\n"请在 <xliff:g id="NUMBER_2">%d</xliff:g> 秒后重试。"</string> + <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string> + <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"删除"</string> + <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"“上一曲”按钮"</string> + <string name="keyguard_transport_next_description" msgid="4299258300283778305">"“下一曲”按钮"</string> + <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"“暂停”按钮"</string> + <string name="keyguard_transport_play_description" msgid="2924628863741150956">"“播放”按钮"</string> + <string name="keyguard_transport_stop_description" msgid="3084179324810575787">"“停止”按钮"</string> + <string name="keyguard_carrier_default" msgid="8700650403054042153">"无服务。"</string> +</resources> diff --git a/packages/Keyguard/res/values-zh-rTW/activitystrings.xml b/packages/Keyguard/res/values-zh-rTW/activitystrings.xml new file mode 100644 index 0000000..42c2a51 --- /dev/null +++ b/packages/Keyguard/res/values-zh-rTW/activitystrings.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="app_name" msgid="3352888186674981593">"Keyguard 測試活動"</string> + <string name="secure_app_name" msgid="7955498742816868049">"整合式相機"</string> + <string name="none_menu_item" msgid="6156747285687551424">"無安全性設定"</string> + <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string> + <string name="password_menu_item" msgid="1959980499662153160">"密碼"</string> + <string name="pattern_menu_item" msgid="2987798152175140249">"圖形"</string> + <string name="sim_pin_menu_item" msgid="3962286639645084880">"SIM PIN"</string> + <string name="sim_puk_menu_item" msgid="6190044133008392974">"SIM PUK"</string> + <string name="add_widget_item" msgid="279702152366857415">"選擇小工具..."</string> + <string name="on_screen_turned_off" msgid="8761396329770508367">"在螢幕上關閉"</string> + <string name="on_screen_turned_on" msgid="9222926818030728999">"在螢幕上開啟"</string> + <string name="do_keyguard" msgid="9210936977823118796">"執行 Keyguard"</string> + <string name="verify_unlock" msgid="8508722273329306968">"驗證解鎖"</string> +</resources> diff --git a/packages/Keyguard/res/values-zh-rTW/strings.xml b/packages/Keyguard/res/values-zh-rTW/strings.xml new file mode 100644 index 0000000..4c181d1 --- /dev/null +++ b/packages/Keyguard/res/values-zh-rTW/strings.xml @@ -0,0 +1,138 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"輸入 PIN 碼"</string> + <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"輸入 PUK 碼和新 PIN 碼"</string> + <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK 碼"</string> + <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"新 PIN 碼"</string> + <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"輕觸即可輸入密碼"</font></string> + <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"輸入密碼即可解鎖"</string> + <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"輸入 PIN 即可解鎖"</string> + <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"PIN 碼不正確。"</string> + <string name="keyguard_label_text" msgid="861796461028298424">"如要解鎖,請按 Menu 鍵,然後按 0。"</string> + <string name="faceunlock_multiple_failures" msgid="754137583022792429">"已超過人臉解鎖嘗試次數上限"</string> + <string name="keyguard_charged" msgid="3272223906073492454">"充電完成"</string> + <string name="keyguard_plugged_in" msgid="8117572000639998388">"充電中 (<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>)"</string> + <string name="keyguard_low_battery" msgid="8143808018719173859">"連接充電器。"</string> + <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"按選單鍵解鎖。"</string> + <string name="keyguard_network_locked_message" msgid="9169717779058037168">"網路已鎖定"</string> + <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"找不到 SIM 卡"</string> + <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"平板電腦中沒有 SIM 卡。"</string> + <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"手機中沒有 SIM 卡。"</string> + <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"插入 SIM 卡。"</string> + <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"找不到或無法讀取 SIM 卡。請插入 SIM 卡。"</string> + <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"SIM 卡無法使用。"</string> + <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"您的 SIM 卡已遭永久停用。"\n"請與您的無線網路服務供應商聯絡,以取得別張 SIM 卡。"</string> + <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM 卡處於鎖定狀態。"</string> + <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM 卡處於 PUK 鎖定狀態"</string> + <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"正在解除 SIM 卡鎖定..."</string> + <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s。第 %2$d 個小工具,共 %3$d 個。"</string> + <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"新增小工具。"</string> + <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"空白"</string> + <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"解鎖區域已展開。"</string> + <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"解鎖區域已收合。"</string> + <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g>小工具。"</string> + <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"使用者選取工具"</string> + <string name="keyguard_accessibility_status" msgid="8008264603935930611">"狀態"</string> + <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"相機"</string> + <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"媒體控制項"</string> + <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"已開始將小工具重新排序。"</string> + <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"小工具重新排序已完成。"</string> + <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g>小工具已刪除。"</string> + <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"展開解鎖區域。"</string> + <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"滑動解鎖。"</string> + <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"圖形解鎖。"</string> + <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"人臉解鎖。"</string> + <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"PIN 解鎖。"</string> + <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"密碼解鎖。"</string> + <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"圖形區域。"</string> + <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"滑動區域。"</string> + <string name="keyguard_accessibility_transport_prev_description" msgid="1337286538318543555">"[上一首曲目] 按鈕"</string> + <string name="keyguard_accessibility_transport_next_description" msgid="7073928300444909320">"[下一首曲目] 按鈕"</string> + <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"[暫停] 按鈕"</string> + <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"[播放] 按鈕"</string> + <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"[停止] 按鈕"</string> + <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string> + <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string> + <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string> + <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt 鍵"</string> + <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"取消"</string> + <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Delete 鍵"</string> + <string name="keyboardview_keycode_done" msgid="1992571118466679775">"完成"</string> + <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"模式變更"</string> + <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift 鍵"</string> + <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter 鍵"</string> + <string name="description_target_unlock" msgid="2228524900439801453">"解除鎖定"</string> + <string name="description_target_camera" msgid="969071997552486814">"相機"</string> + <string name="description_target_silent" msgid="893551287746522182">"靜音"</string> + <string name="description_target_soundon" msgid="30052466675500172">"開啟音效"</string> + <string name="description_target_search" msgid="3091587249776033139">"搜尋"</string> + <string name="description_direction_up" msgid="7169032478259485180">"向上滑動即可<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>。"</string> + <string name="description_direction_down" msgid="5087739728639014595">"向下滑動即可<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>。"</string> + <string name="description_direction_left" msgid="7207478719805562165">"向左滑動即可<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>。"</string> + <string name="description_direction_right" msgid="8034433242579600980">"向右滑動即可<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>。"</string> + <string name="user_switched" msgid="3768006783166984410">"目前的使用者是 <xliff:g id="NAME">%1$s</xliff:g>。"</string> + <string name="kg_emergency_call_label" msgid="684946192523830531">"緊急電話"</string> + <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"忘記圖形"</string> + <string name="kg_wrong_pattern" msgid="1850806070801358830">"圖形錯誤"</string> + <string name="kg_wrong_password" msgid="2333281762128113157">"密碼錯誤"</string> + <string name="kg_wrong_pin" msgid="1131306510833563801">"PIN 錯誤"</string> + <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"請在 <xliff:g id="NUMBER">%d</xliff:g> 秒後再試一次。"</string> + <string name="kg_pattern_instructions" msgid="398978611683075868">"畫出圖形"</string> + <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"輸入 SIM PIN"</string> + <string name="kg_pin_instructions" msgid="2377242233495111557">"輸入 PIN"</string> + <string name="kg_password_instructions" msgid="5753646556186936819">"輸入密碼"</string> + <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"SIM 卡已遭停用,必須輸入 PUK 碼才能繼續使用。詳情請洽您的行動通訊業者。"</string> + <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"輸入所需的 PIN 碼"</string> + <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"確認所需的 PIN 碼"</string> + <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"正在解除 SIM 卡鎖定..."</string> + <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"PIN 碼不正確。"</string> + <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"請輸入 4 到 8 碼的 PIN。"</string> + <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK 碼至少必須為 8 碼。"</string> + <string name="kg_invalid_puk" msgid="3638289409676051243">"重新輸入正確的 PUK 碼。如果錯誤次數過多,SIM 卡將會永久停用。"</string> + <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN 碼不符"</string> + <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"圖形嘗試次數過多"</string> + <string name="kg_login_instructions" msgid="1100551261265506448">"如要解除鎖定,請使用 Google 帳戶登入。"</string> + <string name="kg_login_username_hint" msgid="5718534272070920364">"使用者名稱 (電子郵件)"</string> + <string name="kg_login_password_hint" msgid="9057289103827298549">"密碼"</string> + <string name="kg_login_submit_button" msgid="5355904582674054702">"登入"</string> + <string name="kg_login_invalid_input" msgid="5754664119319872197">"使用者名稱或密碼無效。"</string> + <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"忘了使用者名稱或密碼?"\n"請前往 "<b>"google.com/accounts/recovery"</b>"。"</string> + <string name="kg_login_checking_password" msgid="1052685197710252395">"正在檢查帳戶…"</string> + <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"您的 PIN 已輸錯 <xliff:g id="NUMBER_0">%d</xliff:g> 次。"\n\n"請在 <xliff:g id="NUMBER_1">%d</xliff:g> 秒後再試一次。"</string> + <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"您的密碼已輸錯 <xliff:g id="NUMBER_0">%d</xliff:g> 次。"\n\n"請在 <xliff:g id="NUMBER_1">%d</xliff:g> 秒後再試一次。"</string> + <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"您的解鎖圖形已畫錯 <xliff:g id="NUMBER_0">%d</xliff:g> 次。"\n\n"請在 <xliff:g id="NUMBER_1">%d</xliff:g> 秒後再試一次。"</string> + <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"您嘗試解除這個平板電腦的鎖定已失敗 <xliff:g id="NUMBER_0">%d</xliff:g> 次,目前還剩 <xliff:g id="NUMBER_1">%d</xliff:g> 次機會。如果失敗次數超過限制,平板電腦將恢復原廠設定,所有使用者資料都會遺失。"</string> + <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"您嘗試解除這支手機的鎖定已失敗 <xliff:g id="NUMBER_0">%d</xliff:g> 次,目前還剩 <xliff:g id="NUMBER_1">%d</xliff:g> 次機會。如果失敗次數超過限制,手機將恢復原廠設定,所有使用者資料都會遺失。"</string> + <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"您嘗試解除這個平板電腦的鎖定已失敗 <xliff:g id="NUMBER">%d</xliff:g> 次,平板電腦現在將恢復原廠設定。"</string> + <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"您嘗試解除這支手機的鎖定已失敗 <xliff:g id="NUMBER">%d</xliff:g> 次,手機現在將恢復原廠設定。"</string> + <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"您的解鎖圖形已畫錯 <xliff:g id="NUMBER_0">%d</xliff:g> 次,如果再嘗試 <xliff:g id="NUMBER_1">%d</xliff:g> 次仍未成功,系統就會要求您透過電子郵件帳戶解除平板電腦的鎖定狀態。"\n\n"請在 <xliff:g id="NUMBER_2">%d</xliff:g> 秒後再試一次。"</string> + <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"您的解鎖圖形已畫錯 <xliff:g id="NUMBER_0">%d</xliff:g> 次,如果再嘗試 <xliff:g id="NUMBER_1">%d</xliff:g> 次仍未成功,系統就會要求您透過電子郵件帳戶解除手機的鎖定狀態。"\n\n"請在 <xliff:g id="NUMBER_2">%d</xliff:g> 秒後再試一次。"</string> + <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string> + <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"移除"</string> + <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"[上一首曲目] 按鈕"</string> + <string name="keyguard_transport_next_description" msgid="4299258300283778305">"[下一首曲目] 按鈕"</string> + <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"[暫停] 按鈕"</string> + <string name="keyguard_transport_play_description" msgid="2924628863741150956">"[播放] 按鈕"</string> + <string name="keyguard_transport_stop_description" msgid="3084179324810575787">"[停止] 按鈕"</string> + <string name="keyguard_carrier_default" msgid="8700650403054042153">"沒有服務。"</string> +</resources> diff --git a/packages/Keyguard/res/values-zu/activitystrings.xml b/packages/Keyguard/res/values-zu/activitystrings.xml new file mode 100644 index 0000000..0031a8b --- /dev/null +++ b/packages/Keyguard/res/values-zu/activitystrings.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="app_name" msgid="3352888186674981593">"I-KeyguardTestActivity"</string> + <string name="secure_app_name" msgid="7955498742816868049">"I-UnifiedCamera"</string> + <string name="none_menu_item" msgid="6156747285687551424">"Akukho ukuphepha"</string> + <string name="pin_menu_item" msgid="1179756433268962311">"I-PIN"</string> + <string name="password_menu_item" msgid="1959980499662153160">"Iphasiwedi"</string> + <string name="pattern_menu_item" msgid="2987798152175140249">"Iphethini"</string> + <string name="sim_pin_menu_item" msgid="3962286639645084880">"I-PIN ye-SIM"</string> + <string name="sim_puk_menu_item" msgid="6190044133008392974">"I-PUK YE-SIM"</string> + <string name="add_widget_item" msgid="279702152366857415">"Khetha iwijethi..."</string> + <string name="on_screen_turned_off" msgid="8761396329770508367">"I-onScreenTurnedOff"</string> + <string name="on_screen_turned_on" msgid="9222926818030728999">"I-onScreenTurnedOn"</string> + <string name="do_keyguard" msgid="9210936977823118796">"I-doKeyguard"</string> + <string name="verify_unlock" msgid="8508722273329306968">"I-verifyUnlock"</string> +</resources> diff --git a/packages/Keyguard/res/values-zu/strings.xml b/packages/Keyguard/res/values-zu/strings.xml new file mode 100644 index 0000000..4424faf --- /dev/null +++ b/packages/Keyguard/res/values-zu/strings.xml @@ -0,0 +1,138 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Faka ikhodi ye-PIN"</string> + <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Faka i-PUK nephinikhodi entsha"</string> + <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"Ikhodi le-PUK"</string> + <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Iphinikhodi entsha"</string> + <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Thinta ukubhala iphasiwedi"</font></string> + <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Bhala iphasiwedi ukuze kuvuleke"</string> + <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Faka i-PIN ukuvula"</string> + <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"Ikhodi ye-PIN engalungile!"</string> + <string name="keyguard_label_text" msgid="861796461028298424">"Ukuvula, chofoza Menyu bese 0."</string> + <string name="faceunlock_multiple_failures" msgid="754137583022792429">"Ukuzama Kokuvula Ubuso Okuningi kudluliwe"</string> + <string name="keyguard_charged" msgid="3272223906073492454">"Kushajiwe"</string> + <string name="keyguard_plugged_in" msgid="8117572000639998388">"Iyashaja, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string> + <string name="keyguard_low_battery" msgid="8143808018719173859">"Xhuma ishaja yakho."</string> + <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Chofoza imenyu ukuze uvule."</string> + <string name="keyguard_network_locked_message" msgid="9169717779058037168">"Inethiwekhi ikhiyiwe"</string> + <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"Alikho ikhadi le-SIM"</string> + <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"Alikho ikhadi le-SIM kuthebulethi."</string> + <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"Alikho ikhadi le-SIM kufoni."</string> + <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"Faka ikhadi le-SIM."</string> + <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"Ikhadi le-SIM alitholakali noma alifundeki. Faka ikhadi le-SIM."</string> + <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"Ikhadi le-SIM elingasebenziseki."</string> + <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"I-SIM khadi yakho ikhutshazwe unomphela."\n" Xhumana nomhlinzeki wakho wokuxhumana okungenazintambo ukuze uthole enye i-SIM khadi."</string> + <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"Ikhadi le-SIM likhiyiwe."</string> + <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"Ikhadi le-SIM likhiywe nge-PUK."</string> + <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Ivula ikhadi le-SIM..."</string> + <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. iwijethi %2$d ye-%3$d."</string> + <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"Engeza iwijethi."</string> + <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"Akunalutho"</string> + <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"Indawo yokuvula inwetshisiwe."</string> + <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"Indawo yokuvula inciphisiwe."</string> + <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> iwijethi."</string> + <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"Isikhethi somsebenzisi"</string> + <string name="keyguard_accessibility_status" msgid="8008264603935930611">"Isimo"</string> + <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"Ikhamera"</string> + <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"Izilawuli zemidiya"</string> + <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"Ukuhlelwa kabusha kwewijethi kuqalile"</string> + <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"Ukuhlelwa kabusha kwewijethi kuphelile."</string> + <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"Iwijethi <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> isusiwe."</string> + <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"Nwebisa indawo yokuvula."</string> + <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"Ukuvula ngokuslayida."</string> + <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Ukuvula ngephethini."</string> + <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Vula ngobuso"</string> + <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Ukuvula ngephinikhodi."</string> + <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Ukuvula ngephasiwedi."</string> + <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Indawo yephethini."</string> + <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Indawo yokushelelisa."</string> + <string name="keyguard_accessibility_transport_prev_description" msgid="1337286538318543555">"Inkinombo yethrekhi yangaphambilini"</string> + <string name="keyguard_accessibility_transport_next_description" msgid="7073928300444909320">"Inkinobho yethrekhi elandelayo"</string> + <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Inkinobho yokumiswa isikhashana"</string> + <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Inkinobho yokudlala"</string> + <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Inkinobho yokumisa"</string> + <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string> + <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string> + <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string> + <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"i-ALT"</string> + <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Khansela"</string> + <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Susa"</string> + <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Kwenziwe"</string> + <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Ukushintsha kwendlela esetshenziswayo"</string> + <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Beka kwenye indawo"</string> + <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Faka"</string> + <string name="description_target_unlock" msgid="2228524900439801453">"Vula"</string> + <string name="description_target_camera" msgid="969071997552486814">"Ikhamera"</string> + <string name="description_target_silent" msgid="893551287746522182">"Thulile"</string> + <string name="description_target_soundon" msgid="30052466675500172">"Umsindo uvuliwe"</string> + <string name="description_target_search" msgid="3091587249776033139">"Sesha"</string> + <string name="description_direction_up" msgid="7169032478259485180">"Shelelisela ngenhla ku-<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_down" msgid="5087739728639014595">"Shelelisela ngezansi ku-<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_left" msgid="7207478719805562165">"Shelelisela ngakwesokunxele ku-<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_right" msgid="8034433242579600980">"Shelelisela ngakwesokudla ku-<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="user_switched" msgid="3768006783166984410">"Umsebenzisi wamanje <xliff:g id="NAME">%1$s</xliff:g>."</string> + <string name="kg_emergency_call_label" msgid="684946192523830531">"Ucingo lwezimo eziphuthumayo"</string> + <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Ukhohlwe iphethini?"</string> + <string name="kg_wrong_pattern" msgid="1850806070801358830">"Iphatheni engalungile"</string> + <string name="kg_wrong_password" msgid="2333281762128113157">"Iphasiwedi engalungile"</string> + <string name="kg_wrong_pin" msgid="1131306510833563801">"Iphinikhodi engalungile"</string> + <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"Zama futhi emasekhondini angu-<xliff:g id="NUMBER">%d</xliff:g>."</string> + <string name="kg_pattern_instructions" msgid="398978611683075868">"Dweba iphethini"</string> + <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Faka iphinikhodi ye-SIM"</string> + <string name="kg_pin_instructions" msgid="2377242233495111557">"Faka iphinikhodi"</string> + <string name="kg_password_instructions" msgid="5753646556186936819">"Faka iphasiwedi"</string> + <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"I-SIM manje ikhutshaziwe. Faka ikhodi ye-PUK ukuze uqhubeke. Xhumana nenkampani yenethiwekhi ngemininingwane."</string> + <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Faka iphinikhodi oyithandayo"</string> + <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Qiniseka iphinikhodi oyithandayo"</string> + <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Ivula ikhadi le-SIM..."</string> + <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Iphinikhodi engalungile."</string> + <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Thayipha iphinikhodi enezinombolo ezingu-4 kuya kwezingu-8."</string> + <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"Ikhodi ye-PUK kufanele ibe yizinombolo ezingu-8 noma eziningi."</string> + <string name="kg_invalid_puk" msgid="3638289409676051243">"Faka kabusha ikhodi ye-PUK elungile. Imizamo ephindiwe izokhubaza unaphakade i-SIM."</string> + <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"Iphinikhodi ayifani"</string> + <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Kunemizamo eminingi kakhulu yephathini"</string> + <string name="kg_login_instructions" msgid="1100551261265506448">"Ukuvula, ngena ngemvume kwi-akhawunti ye-Google"</string> + <string name="kg_login_username_hint" msgid="5718534272070920364">"Igama lomsebenzisi (i-imeyli)"</string> + <string name="kg_login_password_hint" msgid="9057289103827298549">"Iphasiwedi"</string> + <string name="kg_login_submit_button" msgid="5355904582674054702">"Ngena ngemvume"</string> + <string name="kg_login_invalid_input" msgid="5754664119319872197">"Igama lomsebezisi elingalungile noma iphasiwedi."</string> + <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Ukhohlwe igama lomsebenzisi noma iphasiwedi?"\n"Vakashela"<b>"google.com/accounts/recovery"</b></string> + <string name="kg_login_checking_password" msgid="1052685197710252395">"Ukuhlola i-akhawunti…"</string> + <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Ubhale iphinikhodi ykho ngendlela engafanele izikhathi ezingu-<xliff:g id="NUMBER_0">%d</xliff:g>. "\n\n"Zama futhi emasekhondini angu-<xliff:g id="NUMBER_1">%d</xliff:g>."</string> + <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Ubhale iphasiwedi yakho ngendlela engafanele <xliff:g id="NUMBER_0">%d</xliff:g> izikhathi. "\n\n"Zama futhi emasekhondini angu-<xliff:g id="NUMBER_1">%d</xliff:g>."</string> + <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Udwebe iphathini yakho yokuvula ngendlela engafanele-<xliff:g id="NUMBER_0">%d</xliff:g>. "\n\n" Zama futhi emasekhondini angu-<xliff:g id="NUMBER_1">%d</xliff:g>"</string> + <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"Uzame ngokusebenzisa indlela engafanele ukuvula ithebhulethi izikhathi ezingu-<xliff:g id="NUMBER_0">%d</xliff:g>. Ngemuva kokuzama ngaphandle kwempumelelo okungu-<xliff:g id="NUMBER_1">%d</xliff:g>, ithebhulethi izobuyiselwa kwizimiso zasembonini futhi yonke imininingwane yomsebenzisi izolahleka."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"Uzame ngokusebenzisa indlela engafanele ukuvula ifoni izikhathi ezingu-<xliff:g id="NUMBER_0">%d</xliff:g>. Ngemuva kokuzama ngaphandle kwempumelelo okungu-<xliff:g id="NUMBER_1">%d</xliff:g>, ifoni izobuyiselwa kwizimiso zasembonini futhi yonke imininingwane yomsebenzisi izolahleka."</string> + <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"Uzame ukuvula ngendlela engafanele ifoni izikhathi ezingu-<xliff:g id="NUMBER">%d</xliff:g>. Ithebhulethi manje isizosethwa kabusha ibe yizimiso ezizenzakalelayo."</string> + <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"Uzame ukuvula ngendlela engafanele ifoni izikhathi ezingu-<xliff:g id="NUMBER">%d</xliff:g>. Ifoni manje isizosethwa kabusha ibe yizimiso ezizenzakalelayo."</string> + <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Udwebe ngokungalungile iphathini yakho yokuvula izikhathi ezingu-<xliff:g id="NUMBER_0">%d</xliff:g>. Emva <xliff:g id="NUMBER_1">%d</xliff:g> kweminye imizamo engaphumelelanga, uzocelwa ukuvula ithebhulethi yakho usebenzisa ukungena ngemvume kwi-Google."\n\n" Sicela uzame futhi kwengu-<xliff:g id="NUMBER_2">%d</xliff:g> imizuzwana."</string> + <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Ukulayisha ungenisa iphathini yakho yokuvula ngendlela engalungile izikhathi ezi-<xliff:g id="NUMBER_0">%d</xliff:g> Emva kweminye imizamo engu-<xliff:g id="NUMBER_1">%d</xliff:g>, uzocelwa ukuvula ifoni yakho usebenzisa ukungena ngemvume ku-Google"\n\n" Zame futhi emumva kwengu- <xliff:g id="NUMBER_2">%d</xliff:g> imizuzwana."</string> + <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string> + <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Susa"</string> + <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Inkinombo yethrekhi yangaphambilini"</string> + <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Inkinobho yethrekhi elandelayo"</string> + <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Inkinobho yokumiswa isikhashana"</string> + <string name="keyguard_transport_play_description" msgid="2924628863741150956">"Inkinobho yokudlala"</string> + <string name="keyguard_transport_stop_description" msgid="3084179324810575787">"Inkinobho yokumisa"</string> + <string name="keyguard_carrier_default" msgid="8700650403054042153">"Ayikho isevisi."</string> +</resources> diff --git a/packages/Keyguard/res/values/activitystrings.xml b/packages/Keyguard/res/values/activitystrings.xml new file mode 100644 index 0000000..5af9dea --- /dev/null +++ b/packages/Keyguard/res/values/activitystrings.xml @@ -0,0 +1,34 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ +--> +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="app_name">KeyguardTestActivity</string> + <string name="secure_app_name">UnifiedCamera</string> + <string name="none_menu_item">No security</string> + <string name="pin_menu_item">PIN</string> + <string name="password_menu_item">Password</string> + <string name="pattern_menu_item">Pattern</string> + <string name="sim_pin_menu_item">SIM PIN</string> + <string name="sim_puk_menu_item">SIM PUK</string> + <string name="add_widget_item">Choose widget...</string> + <string name="on_screen_turned_off">onScreenTurnedOff</string> + <string name="on_screen_turned_on">onScreenTurnedOn</string> + <string name="do_keyguard">doKeyguard</string> + <string name="verify_unlock">verifyUnlock</string> +</resources> diff --git a/packages/Keyguard/res/values/alias.xml b/packages/Keyguard/res/values/alias.xml new file mode 100644 index 0000000..47291b2 --- /dev/null +++ b/packages/Keyguard/res/values/alias.xml @@ -0,0 +1,52 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* //device/apps/common/assets/res/any/colors.xml +** +** Copyright 2013, 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> + + <!-- Alias used to reference framework color for transparency. --> + <item type="color" name="transparent">@android:color/transparent</item> + + <!-- Alias used to reference framework drawable in keyguard. --> + <item type="drawable" name="stat_sys_warning">@android:drawable/stat_sys_warning</item> + + <!-- Alias used to reference framework drawable in keyguard. --> + <item type="drawable" name="ic_media_pause">@android:drawable/ic_media_pause</item> + + <!-- Alias used to reference framework drawable in keyguard. --> + <item type="drawable" name="ic_media_stop">@*android:drawable/ic_media_stop</item> + + <!-- Alias used to reference framework drawable in keyguard. --> + <item type="drawable" name="ic_contact_picture">@*android:drawable/ic_contact_picture</item> + + <!-- Alias used to reference framework drawable in keyguard. --> + <item type="drawable" name="ic_lock_idle_alarm">@*android:drawable/ic_lock_idle_alarm</item> + + <!-- Alias used to reference framework "OK" string in keyguard. --> + <item type="string" name="ok">@*android:string/ok</item> + + <!-- Alias used to reference framework "OK" string in keyguard. --> + <item type="string" name="system_ui_date_pattern">@*android:string/system_ui_date_pattern</item> + + <!-- Alias used to reference framework configuration for screen rotation. --> + <item type="bool" name="config_enableLockScreenRotation">@*android:bool/config_enableLockScreenRotation</item> + + <!-- Alias used to reference framework activity duration. --> + <item type="integer" name="config_activityDefaultDur">@*android:integer/config_activityDefaultDur</item> + +</resources>
\ No newline at end of file diff --git a/packages/Keyguard/res/values/arrays.xml b/packages/Keyguard/res/values/arrays.xml new file mode 100644 index 0000000..550f80c --- /dev/null +++ b/packages/Keyguard/res/values/arrays.xml @@ -0,0 +1,93 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* //device/apps/common/assets/res/any/colors.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ +--> +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + + <!-- Resources for GlowPadView in LockScreen --> + <array name="lockscreen_targets_when_silent"> + <item>@drawable/ic_lockscreen_unlock</item> + <item>@drawable/ic_action_assist_generic</item> + <item>@drawable/ic_lockscreen_soundon</item> + <item>@null</item> + </array> + + <array name="lockscreen_target_descriptions_when_silent"> + <item>@string/description_target_unlock</item> + <item>@string/description_target_search</item> + <item>@string/description_target_soundon</item> + <item>@null</item> + </array> + + <array name="lockscreen_direction_descriptions"> + <item>@string/description_direction_right</item> + <item>@string/description_direction_up</item> + <item>@string/description_direction_left</item> + <item>@null</item> + </array> + + <array name="lockscreen_targets_when_soundon"> + <item>@drawable/ic_lockscreen_unlock</item> + <item>@drawable/ic_action_assist_generic</item> + <item>@drawable/ic_lockscreen_silent</item> + <item>@null</item> + </array> + + <array name="lockscreen_target_descriptions_when_soundon"> + <item>@string/description_target_unlock</item> + <item>@string/description_target_search</item> + <item>@string/description_target_silent</item> + <item>@null</item> + </array> + + <array name="lockscreen_targets_with_camera"> + <item>@drawable/ic_lockscreen_unlock</item> + <item>@drawable/ic_action_assist_generic</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>@string/description_target_search</item> + <item>@string/description_target_camera</item> + <item>@null</item> + </array> + + <array name="lockscreen_targets_unlock_only"> + <item>@drawable/ic_lockscreen_unlock</item> + </array> + + <array name="lockscreen_target_descriptions_unlock_only"> + <item>@string/description_target_unlock</item> + </array> + + <!-- list of 3- or 4-letter mnemonics for a 10-key numeric keypad --> + <string-array translatable="false" name="lockscreen_num_pad_klondike"> + <item></item><!-- 0 --> + <item></item><!-- 1 --> + <item>ABC</item><!-- 2 --> + <item>DEF</item><!-- 3 --> + <item>GHI</item><!-- 4 --> + <item>JKL</item><!-- 5 --> + <item>MNO</item><!-- 6 --> + <item>PQRS</item><!-- 7 --> + <item>TUV</item><!-- 8 --> + <item>WXYZ</item><!-- 9 --> + </string-array> +</resources> diff --git a/packages/Keyguard/res/values/attrs.xml b/packages/Keyguard/res/values/attrs.xml new file mode 100644 index 0000000..e045dd2 --- /dev/null +++ b/packages/Keyguard/res/values/attrs.xml @@ -0,0 +1,136 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2006 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<!-- Formatting note: terminate all comments with a period, to avoid breaking + the documentation output. To suppress comment lines from the documentation + output, insert an eat-comment element after the comment lines. +--> + +<resources> + <!-- Standard gravity constant that a child supplies to its parent. + Defines how the child view should be positioned, on both the X and Y axes, within its enclosing layout. --> + <attr name="layout_gravity"> + <!-- Push object to the top of its container, not changing its size. --> + <flag name="top" value="0x30" /> + <!-- Push object to the bottom of its container, not changing its size. --> + <flag name="bottom" value="0x50" /> + <!-- Push object to the left of its container, not changing its size. --> + <flag name="left" value="0x03" /> + <!-- Push object to the right of its container, not changing its size. --> + <flag name="right" value="0x05" /> + <!-- Place object in the vertical center of its container, not changing its size. --> + <flag name="center_vertical" value="0x10" /> + <!-- Grow the vertical size of the object if needed so it completely fills its container. --> + <flag name="fill_vertical" value="0x70" /> + <!-- Place object in the horizontal center of its container, not changing its size. --> + <flag name="center_horizontal" value="0x01" /> + <!-- Grow the horizontal size of the object if needed so it completely fills its container. --> + <flag name="fill_horizontal" value="0x07" /> + <!-- Place the object in the center of its container in both the vertical and horizontal axis, not changing its size. --> + <flag name="center" value="0x11" /> + <!-- Grow the horizontal and vertical size of the object if needed so it completely fills its container. --> + <flag name="fill" value="0x77" /> + <!-- Additional option that can be set to have the top and/or bottom edges of + the child clipped to its container's bounds. + The clip will be based on the vertical gravity: a top gravity will clip the bottom + edge, a bottom gravity will clip the top edge, and neither will clip both edges. --> + <flag name="clip_vertical" value="0x80" /> + <!-- Additional option that can be set to have the left and/or right edges of + the child clipped to its container's bounds. + The clip will be based on the horizontal gravity: a left gravity will clip the right + edge, a right gravity will clip the left edge, and neither will clip both edges. --> + <flag name="clip_horizontal" value="0x08" /> + <!-- Push object to the beginning of its container, not changing its size. --> + <flag name="start" value="0x00800003" /> + <!-- Push object to the end of its container, not changing its size. --> + <flag name="end" value="0x00800005" /> + </attr> + + + <!-- PagedView specific attributes. These attributes are used to customize + a PagedView view in XML files. --> + <declare-styleable name="PagedView"> + <!-- The space between adjacent pages of the PagedView. --> + <attr name="pageSpacing" format="dimension" /> + <!-- The padding for the scroll indicator area --> + <attr name="scrollIndicatorPaddingLeft" format="dimension" /> + <attr name="scrollIndicatorPaddingRight" format="dimension" /> + </declare-styleable> + + <declare-styleable name="KeyguardGlowStripView"> + <attr name="dotSize" format="dimension" /> + <attr name="numDots" format="integer" /> + <attr name="glowDot" format="reference" /> + <attr name="leftToRight" format="boolean" /> + </declare-styleable> + + <!-- Some child types have special behavior. --> + <attr name="layout_childType"> + <!-- No special behavior. Layout will proceed as normal. --> + <enum name="none" value="0" /> + <!-- Widget container. + This will be resized in response to certain events. --> + <enum name="widget" value="1" /> + <!-- Security challenge container. + This will be dismissed/shown in response to certain events, + possibly obscuring widget elements. --> + <enum name="challenge" value="2" /> + <!-- User switcher. + This will consume space from the total layout area. --> + <enum name="userSwitcher" value="3" /> + <!-- Scrim. This will block access to child views that + come before it in the child list in bouncer mode. --> + <enum name="scrim" value="4" /> + <!-- The home for widgets. All widgets will be descendents of this. --> + <enum name="widgets" value="5" /> + <!-- This is a handle that is used for expanding the + security challenge container when it is collapsed. --> + <enum name="expandChallengeHandle" value="6" /> + <!-- Delete drop target. This will be the drop target to delete pages. --> + <enum name="pageDeleteDropTarget" value="7" /> + </attr> + + <declare-styleable name="SlidingChallengeLayout_Layout"> + <attr name="layout_childType" /> + <attr name="layout_maxHeight" format="dimension" /> + </declare-styleable> + + <declare-styleable name="MultiPaneChallengeLayout"> + <!-- Influences how layout_centerWithinArea behaves --> + <attr name="android:orientation" /> + </declare-styleable> + + <declare-styleable name="MultiPaneChallengeLayout_Layout"> + <!-- Percentage of the screen this child should consume or center within. + If 0/default, the view will be measured by standard rules + as if this were a FrameLayout. --> + <attr name="layout_centerWithinArea" format="float" /> + <attr name="layout_childType" /> + <attr name="layout_gravity" /> + <attr name="layout_maxWidth" format="dimension" /> + <attr name="layout_maxHeight" /> + </declare-styleable> + + <declare-styleable name="KeyguardSecurityViewFlipper_Layout"> + <attr name="layout_maxWidth" /> + <attr name="layout_maxHeight" /> + </declare-styleable> + + <declare-styleable name="NumPadKey"> + <attr name="digit" format="integer" /> + <attr name="textView" format="reference" /> + </declare-styleable> +</resources> diff --git a/packages/Keyguard/res/values/bools.xml b/packages/Keyguard/res/values/bools.xml new file mode 100644 index 0000000..a9f69e5 --- /dev/null +++ b/packages/Keyguard/res/values/bools.xml @@ -0,0 +1,22 @@ +<?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> + <bool name="kg_enable_camera_default_widget">true</bool> + <bool name="kg_center_small_widgets_vertically">false</bool> + <bool name="kg_top_align_page_shrink_on_bouncer_visible">true</bool> + <bool name="kg_show_ime_at_screen_on">true</bool> +</resources> diff --git a/packages/Keyguard/res/values/colors.xml b/packages/Keyguard/res/values/colors.xml new file mode 100644 index 0000000..0c56a43 --- /dev/null +++ b/packages/Keyguard/res/values/colors.xml @@ -0,0 +1,26 @@ +<?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> + <!-- Keyguard colors --> + <color name="keyguard_avatar_frame_color">#ffffffff</color> + <color name="keyguard_avatar_frame_shadow_color">#80000000</color> + <color name="keyguard_avatar_nick_color">#ffffffff</color> + <color name="keyguard_avatar_frame_pressed_color">#ff35b5e5</color> + <color name="kg_widget_pager_gradient">#ffffffff</color> + + <!-- FaceLock --> + <color name="facelock_spotlight_mask">#CC000000</color> +</resources> diff --git a/core/res/res/layout/keyguard_multi_user_selector_widget.xml b/packages/Keyguard/res/values/config.xml index fc126fe..de17c4b 100644 --- a/core/res/res/layout/keyguard_multi_user_selector_widget.xml +++ b/packages/Keyguard/res/values/config.xml @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="utf-8"?> <!-- -** +/* ** Copyright 2009, The Android Open Source Project ** -** Licensed under the Apache License, Version 2.0 (the "License") +** 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 ** @@ -17,10 +17,16 @@ */ --> -<!-- This is a view that shows general status information in Keyguard. --> -<com.android.internal.policy.impl.keyguard.KeyguardWidgetFrame - xmlns:android="http://schemas.android.com/apk/res/android" - android:id="@+id/keyguard_multi_user_selector" - android:layout_width="match_parent" - android:layout_height="match_parent"> -</com.android.internal.policy.impl.keyguard.KeyguardWidgetFrame>
\ No newline at end of file +<!-- These resources are around just to allow their values to be customized --> +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + + <!-- Package name for default keyguard appwidget [DO NOT TRANSLATE] --> + <string name="widget_default_package_name"></string> + + <!-- Class name for default keyguard appwidget [DO NOT TRANSLATE] --> + <string name="widget_default_class_name"></string> + + <!-- Allow the menu hard key to be disabled in LockScreen on some devices [DO NOT TRANSLATE] --> + <bool name="config_disableMenuKeyInLockScreen">false</bool> + +</resources> diff --git a/packages/Keyguard/res/values/dimens.xml b/packages/Keyguard/res/values/dimens.xml new file mode 100644 index 0000000..fde63c4 --- /dev/null +++ b/packages/Keyguard/res/values/dimens.xml @@ -0,0 +1,167 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* //device/apps/common/assets/res/any/dimens.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ +--> +<resources> + <!-- Default height of a key in the password keyboard for alpha (used by keyguard) --> + <dimen name="password_keyboard_key_height_alpha">56dip</dimen> + <!-- Default height of a key in the password keyboard for numeric (used by keyguard) --> + <dimen name="password_keyboard_key_height_numeric">56dip</dimen> + <!-- Default correction for the space key in the password keyboard (used by keyguard) --> + <dimen name="password_keyboard_spacebar_vertical_correction">4dip</dimen> + <!-- Default horizontal gap between keys in the password keyboard (used by keyguard) --> + <dimen name="password_keyboard_horizontalGap">3dip</dimen> + <!-- Default vertical gap between keys in the password keyboard (used by keyguard) --> + <dimen name="password_keyboard_verticalGap">9dip</dimen> + + <!-- Size of lockscreen outerring on unsecure unlock LockScreen --> + <dimen name="keyguard_lockscreen_outerring_diameter">270dp</dimen> + + <!-- Default target placement radius for GlowPadView. Should be 1/2 of outerring diameter. --> + <dimen name="glowpadview_target_placement_radius">135dip</dimen> + + <!-- Default glow radius for GlowPadView --> + <dimen name="glowpadview_glow_radius">75dip</dimen> + + <!-- Default distance beyond which GlowPadView snaps to the matching target --> + <dimen name="glowpadview_snap_margin">40dip</dimen> + + <!-- Default distance from each snap target that GlowPadView considers a "hit" --> + <dimen name="glowpadview_inner_radius">15dip</dimen> + + <!-- Size of clock font in LockScreen on Unsecure unlock screen. --> + <dimen name="keyguard_lockscreen_clock_font_size">80dip</dimen> + + <!-- Size of status line font on Unsecure unlock LockScreen. --> + <dimen name="keyguard_lockscreen_status_line_font_size">14dip</dimen> + + <!-- Size of right margin on Unsecure unlock LockScreen --> + <dimen name="keyguard_lockscreen_status_line_font_right_margin">42dip</dimen> + + <!-- Size of top margin on Clock font to edge on unlock LockScreen --> + <dimen name="keyguard_lockscreen_status_line_clockfont_top_margin">22dip</dimen> + + <!-- Size of top margin on Clock font to edge on unlock LockScreen --> + <dimen name="keyguard_lockscreen_status_line_clockfont_bottom_margin">12dip</dimen> + + <!-- Padding on left margin of PIN text entry field to center it when del button is showing --> + <dimen name="keyguard_lockscreen_pin_margin_left">40dip</dimen> + + <!-- Height of FaceUnlock view in keyguard --> + <dimen name="face_unlock_height">330dip</dimen> + + <!-- Keyguard dimensions --> + <!-- TEMP --> + <dimen name="kg_security_panel_height">600dp</dimen> + + <!-- Height of security view in keyguard. --> + <dimen name="kg_security_view_height">480dp</dimen> + + <!-- Width of widget view in keyguard. --> + <dimen name="kg_widget_view_width">0dp</dimen> + + <!-- Height of widget view in keyguard. --> + <dimen name="kg_widget_view_height">0dp</dimen> + + <!-- Size of the clock font in keyguard's status view --> + <dimen name="kg_status_clock_font_size">75dp</dimen> + + <!-- Size of the date font in keyguard's status view --> + <dimen name="kg_status_date_font_size">15dp</dimen> + + <!-- Size of the generic status lines keyguard's status view --> + <dimen name="kg_status_line_font_size">13dp</dimen> + + <!-- Size of margin on the right of keyguard's status view --> + <dimen name="kg_status_line_font_right_margin">16dp</dimen> + + <!-- Top margin for the clock view --> + <dimen name="kg_clock_top_margin">-16dp</dimen> + + <!-- Horizontal gap between keys in PIN and SIM PIN numeric keyboards in keyguard --> + <dimen name="kg_key_horizontal_gap">0dp</dimen> + + <!-- Horizontal gap between keys in PIN and SIM PIN numeric keyboards in keyguard --> + <dimen name="kg_key_vertical_gap">0dp</dimen> + + <!-- Horizontal gap between keys in PIN and SIM PIN numeric keyboards in keyguard --> + <dimen name="kg_pin_key_height">60dp</dimen> + + <!-- Space reserved at the bottom of secure views (pin/pattern/password/SIM pin/SIM puk) --> + <dimen name="kg_secure_padding_height">46dp</dimen> + + <!-- The height of the runway lights strip --> + <dimen name="kg_runway_lights_height">7dp</dimen> + + <!-- The height of the runway lights strip --> + <dimen name="kg_runway_lights_vertical_padding">2dp</dimen> + + <!-- Horizontal padding for the widget pager --> + <dimen name="kg_widget_pager_horizontal_padding">16dp</dimen> + + <!-- Top padding for the widget pager --> + <dimen name="kg_widget_pager_top_padding">0dp</dimen> + + <!-- Bottom padding for the widget pager --> + <dimen name="kg_widget_pager_bottom_padding">64dp</dimen> + + <!-- Top margin for the runway lights. We add a negative margin in large + devices to account for the widget pager padding --> + <dimen name="kg_runway_lights_top_margin">0dp</dimen> + + <!-- Touch slop for the global toggle accessibility gesture --> + <dimen name="accessibility_touch_slop">80dip</dimen> + + <!-- Width of the sliding KeyguardSecurityContainer (includes 2x keyguard_security_view_margin) --> + <dimen name="keyguard_security_width">320dp</dimen> + + <!-- Height of the sliding KeyguardSecurityContainer (includes 2x keyguard_security_view_margin) --> + <dimen name="keyguard_security_height">400dp</dimen> + + <!-- Margin around the various security views --> + <dimen name="keyguard_security_view_margin">8dp</dimen> + + <!-- Margin around the various security views --> + <dimen name="keyguard_muliuser_selector_margin">8dp</dimen> + + <!-- Stroke width of the frame for the circular avatars. --> + <dimen name="keyguard_avatar_frame_stroke_width">2dp</dimen> + + <!-- Shadow radius under the frame for the circular avatars. --> + <dimen name="keyguard_avatar_frame_shadow_radius">1dp</dimen> + + <!-- Size of the avator on hte multiuser lockscreen. --> + <dimen name="keyguard_avatar_size">66dp</dimen> + + <!-- Size of the text under the avator on the multiuser lockscreen. --> + <dimen name="keyguard_avatar_name_size">10sp</dimen> + + <!-- Size of the region along the edge of the screen that will accept + swipes to scroll the widget area. --> + <dimen name="kg_edge_swipe_region_size">24dp</dimen> + + <!-- If the height if keyguard drops below this threshold (most likely + due to the appearance of the IME), then drop the multiuser selector. --> + <dimen name="kg_squashed_layout_threshold">600dp</dimen> + + <!-- The height of widgets which do not support vertical resizing. This is only + used on tablets; on phones, this size is determined by the space left by the + security mode. --> + <dimen name="kg_small_widget_height">160dp</dimen> + +</resources> diff --git a/packages/Keyguard/res/values/integers.xml b/packages/Keyguard/res/values/integers.xml new file mode 100644 index 0000000..053fc85 --- /dev/null +++ b/packages/Keyguard/res/values/integers.xml @@ -0,0 +1,24 @@ +<?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. +*/ +--> +<resources> + <integer name="kg_carousel_angle">75</integer> + <integer name="kg_security_flip_duration">100</integer> + <integer name="kg_security_fade_duration">100</integer> + <integer name="kg_glowpad_rotation_offset">0</integer> +</resources> diff --git a/packages/Keyguard/res/values/strings.xml b/packages/Keyguard/res/values/strings.xml new file mode 100644 index 0000000..5cf05f8 --- /dev/null +++ b/packages/Keyguard/res/values/strings.xml @@ -0,0 +1,327 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ +--> +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- Instructions telling the user to enter their SIM PIN to unlock the keyguard. + Displayed in one line in a large font. --> + <string name="keyguard_password_enter_pin_code">Type PIN code</string> + + <!-- Instructions telling the user to enter their SIM PUK to unlock the keyguard. + Displayed in one line in a large font. --> + <string name="keyguard_password_enter_puk_code">Type PUK and new PIN code</string> + + <!-- Prompt to enter SIM PUK in Edit Text Box in unlock screen --> + <string name="keyguard_password_enter_puk_prompt">PUK code</string> + <!-- Prompt to enter New SIM PIN in Edit Text Box in unlock screen --> + <string name="keyguard_password_enter_pin_prompt">New PIN code</string> + + <!-- Displayed as hint in passwordEntry EditText on PasswordUnlockScreen [CHAR LIMIT=30]--> + <string name="keyguard_password_entry_touch_hint"><font size="17">Touch to type password</font></string> + + <!-- Instructions telling the user to enter their text password to unlock the keyguard. + Displayed in one line in a large font. --> + <string name="keyguard_password_enter_password_code">Type password to unlock</string> + + <!-- Instructions telling the user to enter their PIN password to unlock the keyguard. + Displayed in one line in a large font. --> + <string name="keyguard_password_enter_pin_password_code">Type PIN to unlock</string> + + <!-- Instructions telling the user that they entered the wrong pin while trying + to unlock the keyguard. Displayed in one line in a large font. --> + <string name="keyguard_password_wrong_pin_code">Incorrect PIN code.</string> + + <!-- Instructions telling the user how to unlock the phone. --> + <string name="keyguard_label_text">To unlock, press Menu then 0.</string> + + <!-- Shown when face unlock failed multiple times so we're just using the backup --> + <string name="faceunlock_multiple_failures">Maximum Face Unlock attempts exceeded</string> + + <!-- When the lock screen is showing, the phone is plugged in and the battery is fully + charged, say that it is charged. --> + <string name="keyguard_charged">Charged</string> + + <!-- When the lock screen is showing and the phone plugged in, and the battery + is not fully charged, show the current charge %. --> + <string name="keyguard_plugged_in">Charging, <xliff:g id="number">%d</xliff:g><xliff:g id="percent">%%</xliff:g></string> + + <!-- When the lock screen is showing and the battery is low, warn user to plug + in the phone soon. --> + <string name="keyguard_low_battery">Connect your charger.</string> + + <!-- On the keyguard screen, when pattern lock is disabled, only tell them to press menu to unlock. This is shown in small font at the bottom. --> + <string name="keyguard_instructions_when_pattern_disabled">Press Menu to unlock.</string> + + <!-- SIM messages --><skip /> + <!-- When the user inserts a sim card from an unsupported network, it becomes network locked --> + <string name="keyguard_network_locked_message">Network locked</string> + <!-- Shown when there is no SIM card. --> + <string name="keyguard_missing_sim_message_short">No SIM card</string> + <!-- Shown when there is no SIM card. --> + <string name="keyguard_missing_sim_message" product="tablet">No SIM card in tablet.</string> + <!-- Shown when there is no SIM card. --> + <string name="keyguard_missing_sim_message" product="default">No SIM card in phone.</string> + <!-- Shown to ask the user to insert a SIM card. --> + <string name="keyguard_missing_sim_instructions">Insert a SIM card.</string> + <!-- Shown to ask the user to insert a SIM card when sim is missing or not readable. --> + <string name="keyguard_missing_sim_instructions_long">The SIM card is missing or not readable. Insert a SIM card.</string> + <!-- Shown when SIM card is permanently disabled. --> + <string name="keyguard_permanent_disabled_sim_message_short">Unusable SIM card.</string> + <!-- Shown to inform the user to SIM card is permanently disabled. --> + <string name="keyguard_permanent_disabled_sim_instructions">Your SIM card has been permanently disabled.\n + Contact your wireless service provider for another SIM card.</string> + <!-- Shown to tell the user that their SIM is locked and they must unlock it. --> + <string name="keyguard_sim_locked_message">SIM card is locked.</string> + <!-- When the user enters a wrong sim pin too many times, it becomes PUK locked (Pin Unlock Kode) --> + <string name="keyguard_sim_puk_locked_message">SIM card is PUK-locked.</string> + <!-- For the unlock screen, When the user enters a sim unlock code, it takes a little while to check + whether it is valid, and to unlock the sim if it is valid. we display a + progress dialog in the meantime. this is the emssage. --> + <string name="keyguard_sim_unlock_progress_dialog_message">Unlocking SIM card\u2026</string> + + + <!-- Accessibility description sent when user changes the current lock screen widget. [CHAR_LIMIT=none] --> + <string name="keyguard_accessibility_widget_changed">%1$s. Widget %2$d of %3$d.</string> + <!-- Accessibility description of the add widget button. [CHAR_LIMIT=none] --> + <string name="keyguard_accessibility_add_widget">Add widget.</string> + <!-- Accessibility description of the empty sidget slot (place holder for a new widget). [CHAR_LIMIT=none] --> + <string name="keyguard_accessibility_widget_empty_slot">Empty</string> + <!-- Accessibility description of the event of expanding an unlock area. [CHAR_LIMIT=none] --> + <string name="keyguard_accessibility_unlock_area_expanded">Unlock area expanded.</string> + <!-- Accessibility description of the event of collapsing an unlock area. [CHAR_LIMIT=none] --> + <string name="keyguard_accessibility_unlock_area_collapsed">Unlock area collapsed.</string> + <!-- Accessibility description of a lock screen widget. [CHAR_LIMIT=none] --> + <string name="keyguard_accessibility_widget"><xliff:g id="widget_index">%1$s</xliff:g> widget.</string> + <!-- Accessibility description of the lock screen user selector widget. [CHAR_LIMIT=none] --> + <string name="keyguard_accessibility_user_selector">User selector</string> + <!-- Accessibility description of the lock screen status widget. [CHAR_LIMIT=none] --> + <string name="keyguard_accessibility_status">Status</string> + <!-- Accessibility description of the camera widget. [CHAR_LIMIT=none] --> + <string name="keyguard_accessibility_camera">Camera</string> + <!-- Accessibility description of the lock media control widget. [CHAR_LIMIT=none] --> + <string name="keygaurd_accessibility_media_controls">Media controls</string> + <!-- Accessibility description of widget reordering start. [CHAR_LIMIT=none] --> + <string name="keyguard_accessibility_widget_reorder_start">Widget reordering started.</string> + <!-- Accessibility description of widget reordering end. [CHAR_LIMIT=none] --> + <string name="keyguard_accessibility_widget_reorder_end">Widget reordering ended.</string> + <!-- Accessibility description of the a widget deletion event. [CHAR_LIMIT=none] --> + <string name="keyguard_accessibility_widget_deleted">Widget <xliff:g id="widget_index">%1$s</xliff:g> deleted.</string> + <!-- Accessibility description of the button to expand the lock area. [CHAR_LIMIT=none] --> + <string name="keyguard_accessibility_expand_lock_area">Expand unlock area.</string> + <!-- Accessibility description of the slide unlock. [CHAR_LIMIT=none] --> + <string name="keyguard_accessibility_slide_unlock">Slide unlock.</string> + <!-- Accessibility description of the pattern unlock. [CHAR_LIMIT=none] --> + <string name="keyguard_accessibility_pattern_unlock">Pattern unlock.</string> + <!-- Accessibility description of the face unlock. [CHAR_LIMIT=none] --> + <string name="keyguard_accessibility_face_unlock">Face unlock.</string> + <!-- Accessibility description of the pin lock. [CHAR_LIMIT=none] --> + <string name="keyguard_accessibility_pin_unlock">Pin unlock.</string> + <!-- Accessibility description of the password lock. [CHAR_LIMIT=none] --> + <string name="keyguard_accessibility_password_unlock">Password unlock.</string> + <!-- Accessibility description of the unlock pattern area. [CHAR_LIMIT=none] --> + <string name="keyguard_accessibility_pattern_area">Pattern area.</string> + <!-- Accessibility description of the unlock slide area. [CHAR_LIMIT=none] --> + <string name="keyguard_accessibility_slide_area">Slide area.</string> + + <!-- Shown on transport control of lockscreen. Pressing button goes to previous track. --> + <string name="keyguard_accessibility_transport_prev_description">Previous track button</string> + <!-- Shown on transport control of lockscreen. Pressing button goes to next track. --> + <string name="keyguard_accessibility_transport_next_description">Next track button</string> + <!-- Shown on transport control of lockscreen. Pressing button pauses playback --> + <string name="keyguard_accessibility_transport_pause_description">Pause button</string> + <!-- Shown on transport control of lockscreen. Pressing button pauses playback --> + <string name="keyguard_accessibility_transport_play_description">Play button</string> + <!-- Shown on transport control of lockscreen. Pressing button pauses playback --> + <string name="keyguard_accessibility_transport_stop_description">Stop button</string> + + <!-- Password keyboard strings. Used by LockScreen and Settings --><skip /> + <!-- Label for "switch to symbols" key. Must be short to fit on key! --> + <string name="password_keyboard_label_symbol_key">\?123</string> + <!-- Label for "switch to alphabetic" key. Must be short to fit on key! --> + <string name="password_keyboard_label_alpha_key">ABC</string> + <!-- Label for ALT modifier key. Must be short to fit on key! --> + <string name="password_keyboard_label_alt_key">ALT</string> + + <!-- KeyboardView - accessibility support --><skip /> + <!-- Description of the Alt button in a KeyboardView. [CHAR LIMIT=NONE] --> + <string name="keyboardview_keycode_alt">Alt</string> + <!-- Description of the Cancel button in a KeyboardView. [CHAR LIMIT=NONE] --> + <string name="keyboardview_keycode_cancel">Cancel</string> + <!-- Description of the Delete button in a KeyboardView. [CHAR LIMIT=NONE] --> + <string name="keyboardview_keycode_delete">Delete</string> + <!-- Description of the Done button in a KeyboardView. [CHAR LIMIT=NONE] --> + <string name="keyboardview_keycode_done">Done</string> + <!-- Description of the Mode change button in a KeyboardView. [CHAR LIMIT=NONE] --> + <string name="keyboardview_keycode_mode_change">Mode change</string> + <!-- Description of the Shift button in a KeyboardView. [CHAR LIMIT=NONE] --> + <string name="keyboardview_keycode_shift">Shift</string> + <!-- Description of the Enter button in a KeyboardView. [CHAR LIMIT=NONE] --> + <string name="keyboardview_keycode_enter">Enter</string> + + <!-- Description of the unlock target in the Slide unlock screen. [CHAR LIMIT=NONE] --> + <string name="description_target_unlock">Unlock</string> + <!-- Description of the camera target in the Slide unlock screen. [CHAR LIMIT=NONE] --> + <string name="description_target_camera">Camera</string> + <!-- Description of the silent target in the Slide unlock screen. [CHAR LIMIT=NONE] --> + <string name="description_target_silent">Silent</string> + <!-- Description of the sound on target in the Slide unlock screen. [CHAR LIMIT=NONE] --> + <string name="description_target_soundon">Sound on</string> + <!-- Description of the unlock target in the Slide unlock screen. [CHAR LIMIT=NONE] --> + <string name="description_target_search">Search</string> + + <!-- Description of the up direction in which one can to slide the handle in the Slide unlock screen. [CHAR LIMIT=NONE] --> + <string name="description_direction_up">Slide up for <xliff:g id="target_description" example="Unlock">%s</xliff:g>.</string> + <!-- Description of the down direction in which one can to slide the handle in the Slide unlock screen. [CHAR LIMIT=NONE] --> + <string name="description_direction_down">Slide down for <xliff:g id="target_description" example="Unlock">%s</xliff:g>.</string> + <!-- Description of the left direction in which one can to slide the handle in the Slide unlock screen. [CHAR LIMIT=NONE] --> + <string name="description_direction_left">"Slide left for <xliff:g id="target_description" example="Unlock">%s</xliff:g>.</string> + <!-- Description of the right direction in which one can to slide the handle in the Slide unlock screen. [CHAR LIMIT=NONE] --> + <string name="description_direction_right">Slide right for <xliff:g id="target_description" example="Unlock">%s</xliff:g>.</string> + + <!-- Text spoken when the current user is switched if accessibility is enabled. [CHAR LIMIT=none] --> + <string name="user_switched">Current user <xliff:g id="name" example="Bob">%1$s</xliff:g>.</string> + + <!-- Label shown on emergency call button in keyguard --> + <string name="kg_emergency_call_label">Emergency call</string> + <!-- Message shown in pattern unlock after some number of unsuccessful attempts --> + <string name="kg_forgot_pattern_button_text">Forgot Pattern</string> + <!-- Message shown when user enters wrong pattern --> + <string name="kg_wrong_pattern">Wrong Pattern</string> + <!-- Message shown when user enters wrong password --> + <string name="kg_wrong_password">Wrong Password</string> + <!-- Message shown when user enters wrong PIN --> + <string name="kg_wrong_pin">Wrong PIN</string> + <!-- Countdown message shown after too many failed unlock attempts --> + <string name="kg_too_many_failed_attempts_countdown">Try again in <xliff:g id="number">%d</xliff:g> seconds.</string> + <!-- Instructions for using the pattern unlock screen --> + <string name="kg_pattern_instructions">Draw your pattern</string> + <!-- Instructions for using the SIM PIN unlock screen --> + <string name="kg_sim_pin_instructions">Enter SIM PIN</string> + <!-- Instructions for using the PIN unlock screen --> + <string name="kg_pin_instructions">Enter PIN</string> + <!-- Instructions for using the password unlock screen --> + <string name="kg_password_instructions">Enter Password</string> + <!-- Hint shown in the PUK screen that asks the user to enter the PUK code given to them by their provider --> + <string name="kg_puk_enter_puk_hint">SIM is now disabled. Enter PUK code to continue. Contact carrier for details.</string> + <!-- Hint shown in the PUK unlock screen PIN TextView --> + <string name="kg_puk_enter_pin_hint">Enter desired PIN code</string> + <!-- Message shown when the user needs to confirm the PIN they just entered in the PUK screen --> + <string name="kg_enter_confirm_pin_hint">Confirm desired PIN code</string> + <!-- Message shown in dialog while the device is unlocking the SIM card --> + <string name="kg_sim_unlock_progress_dialog_message">Unlocking SIM card\u2026</string> + <!-- Message shown when the user enters the wrong PIN code --> + <string name="kg_password_wrong_pin_code">Incorrect PIN code.</string> + <!-- Message shown when the user enters an invalid SIM pin password in PUK screen --> + <string name="kg_invalid_sim_pin_hint">Type a PIN that is 4 to 8 numbers.</string> + <!-- Message shown when the user enters an invalid PUK code in the PUK screen --> + <string name="kg_invalid_sim_puk_hint">PUK code should be 8 numbers or more.</string> + <!-- Message shown when the user enters an invalid PUK code --> + <string name="kg_invalid_puk">Re-enter the correct PUK code. Repeated attempts will permanently disable the SIM.</string> + <!-- String shown in PUK screen when PIN codes don't match --> + <string name="kg_invalid_confirm_pin_hint" product="default">PIN codes does not match</string> + <!-- Message shown when the user exceeds the maximum number of pattern attempts --> + <string name="kg_login_too_many_attempts">Too many pattern attempts</string> + <!-- Instructions show in account unlock screen allowing user to enter their email password --> + <string name="kg_login_instructions">To unlock, sign in with your Google account.</string> + <!-- Hint shown in TextView in account unlock screen of keyguard --> + <string name="kg_login_username_hint">Username (email)</string> + <!-- Hint shown in TextView in account unlock screen of keyguard --> + <string name="kg_login_password_hint">Password</string> + <!-- Label shown on sign in button on account unlock screen of keyguard --> + <string name="kg_login_submit_button">Sign in</string> + <!-- Message shown when the user enters an invalid username/password combination in account unlock screen of keyguard --> + <string name="kg_login_invalid_input">Invalid username or password.</string> + <!-- Hint text shown when user has too many failed password attempts in account unlock screen of keyguard --> + <string name="kg_login_account_recovery_hint">Forgot your username or password\?\nVisit <b>google.com/accounts/recovery</b>.</string> + <!-- Message shown while device checks username/password in account unlock screen of keyguard --> + <string name="kg_login_checking_password">Checking account\u2026</string> + <!-- Message shown in dialog when max number of attempts are reached for PIN screen of keyguard --> + <string name="kg_too_many_failed_pin_attempts_dialog_message"> + You have incorrectly typed your PIN <xliff:g id="number">%d</xliff:g> times. + \n\nTry again in <xliff:g id="number">%d</xliff:g> seconds. + </string> + <!-- Message shown in dialog when max number of attempts are reached for password screen of keyguard --> + <string name="kg_too_many_failed_password_attempts_dialog_message"> + You have incorrectly typed your password <xliff:g id="number">%d</xliff:g> times. + \n\nTry again in <xliff:g id="number">%d</xliff:g> seconds. + </string> + <string name="kg_too_many_failed_pattern_attempts_dialog_message"> + You have incorrectly drawn your unlock pattern <xliff:g id="number">%d</xliff:g> times. + \n\nTry again in <xliff:g id="number">%d</xliff:g> seconds. + </string> + <!-- Message shown when user is almost at the limit of password attempts where the device will be wiped. --> + <string name="kg_failed_attempts_almost_at_wipe" product="tablet"> + You have incorrectly attempted to unlock the tablet <xliff:g id="number">%d</xliff:g> times. + After <xliff:g id="number">%d</xliff:g> more unsuccessful attempts, + the tablet will be reset to factory default and all user data will be lost. + </string> + <!-- Message shown when user is almost at the limit of password attempts where the device will be wiped. --> + <string name="kg_failed_attempts_almost_at_wipe" product="default"> + You have incorrectly attempted to unlock the phone <xliff:g id="number">%d</xliff:g> times. + After <xliff:g id="number">%d</xliff:g> more unsuccessful attempts, + the phone will be reset to factory default and all user data will be lost. + </string> + <!-- Message shown in dialog when user has exceeded the maximum attempts and the device will now be wiped --> + <string name="kg_failed_attempts_now_wiping" product="tablet"> + You have incorrectly attempted to unlock the tablet <xliff:g id="number">%d</xliff:g> times. + The tablet will now be reset to factory default. + </string> + <!-- Message shown in dialog when user has exceeded the maximum attempts and the device will now be wiped --> + <string name="kg_failed_attempts_now_wiping" product="default"> + You have incorrectly attempted to unlock the phone <xliff:g id="number">%d</xliff:g> times. + The phone will now be reset to factory default. + </string> + <!-- Message shown in dialog when user is almost at the limit where they will be + locked out and may have to enter an alternate username/password to unlock the phone --> + <string name="kg_failed_attempts_almost_at_login" product="tablet"> + You have incorrectly drawn your unlock pattern <xliff:g id="number">%d</xliff:g> times. + After <xliff:g id="number">%d</xliff:g> more unsuccessful attempts, + you will be asked to unlock your tablet using an email account.\n\n + Try again in <xliff:g id="number">%d</xliff:g> seconds. + </string> + <!-- Message shown in dialog when user is almost at the limit where they will be + locked out and may have to enter an alternate username/password to unlock the phone --> + <string name="kg_failed_attempts_almost_at_login" product="default"> + You have incorrectly drawn your unlock pattern <xliff:g id="number">%d</xliff:g> times. + After <xliff:g id="number">%d</xliff:g> more unsuccessful attempts, + you will be asked to unlock your phone using an email account.\n\n + Try again in <xliff:g id="number">%d</xliff:g> seconds. + </string> + <!-- Sequence of characters used to separate message strings in keyguard. Typically just em-dash + with spaces on either side. [CHAR LIMIT=3] --> + <string name="kg_text_message_separator" product="default">" \u2014 "</string> + <!-- The delete-widget drop target button text --> + <string name="kg_reordering_delete_drop_target_text">Remove</string> + + <!-- Transport control strings --> + <!-- Shown on transport control of lockscreen. Pressing button goes to previous track. --> + <string name="keyguard_transport_prev_description">Previous track button</string> + <!-- Shown on transport control of lockscreen. Pressing button goes to next track. --> + <string name="keyguard_transport_next_description">Next track button</string> + <!-- Shown on transport control of lockscreen. Pressing button pauses playback --> + <string name="keyguard_transport_pause_description">Pause button</string> + <!-- Shown on transport control of lockscreen. Pressing button pauses playback --> + <string name="keyguard_transport_play_description">Play button</string> + <!-- Shown on transport control of lockscreen. Pressing button pauses playback --> + <string name="keyguard_transport_stop_description">Stop button</string> + + <!-- On the keyguard screen, it shows the carrier the phone is connected to. + This is displayed if the phone is not connected to a carrier.--> + <string name="keyguard_carrier_default">No service.</string> + +</resources> diff --git a/packages/Keyguard/res/values/styles.xml b/packages/Keyguard/res/values/styles.xml new file mode 100644 index 0000000..16a3f3f --- /dev/null +++ b/packages/Keyguard/res/values/styles.xml @@ -0,0 +1,55 @@ +<?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. +*/ +--> + +<resources> + <!-- Keyguard PIN pad styles --> + <style name="Widget.Button.NumPadKey" + parent="@android:style/Widget.Button"> + <item name="android:singleLine">true</item> + <item name="android:padding">6dip</item> + <item name="android:gravity">left|center_vertical</item> + <item name="android:background">?android:attr/selectableItemBackground</item> + <item name="android:textSize">34dp</item> + <item name="android:fontFamily">sans-serif</item> + <item name="android:textStyle">normal</item> + <item name="android:textColor">#ffffff</item> + <item name="android:paddingBottom">10dp</item> + <item name="android:paddingLeft">20dp</item> + </style> + <style name="TextAppearance.NumPadKey" + parent="@android:style/TextAppearance"> + <item name="android:textSize">34dp</item> + <item name="android:fontFamily">sans-serif</item> + <item name="android:textStyle">normal</item> + <item name="android:textColor">#ffffff</item> + </style> + <style name="TextAppearance.NumPadKey.Klondike"> + <item name="android:textSize">20dp</item> + <item name="android:fontFamily">sans-serif-condensed</item> + <item name="android:textStyle">normal</item> + <item name="android:textColor">#80ffffff</item> + </style> + + <!-- Standard animations for a non-full-screen window or activity. --> + <style name="Animation.LockScreen" parent="@android:style/Animation"> + <item name="android:windowEnterAnimation">@anim/lock_screen_enter</item> + <item name="android:windowExitAnimation">@anim/lock_screen_exit</item> + </style> + +</resources> diff --git a/packages/Keyguard/scripts/copy_profile_icons.sh b/packages/Keyguard/scripts/copy_profile_icons.sh new file mode 100755 index 0000000..5416101 --- /dev/null +++ b/packages/Keyguard/scripts/copy_profile_icons.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +for user in `adb $* shell ls /data/system/users | grep -v xml` +do + user=${user/$'\r'/} + adb shell mkdir /data/user/${user}/users + for photo in `adb $* shell ls /data/system/users | grep -v xml` + do + photo=${photo/$'\r'/} + adb shell mkdir /data/user/${user}/users/${photo} + adb pull /data/system/users/${photo}/photo.png + adb push photo.png /data/user/${user}/users/${photo} + done +done diff --git a/packages/Keyguard/scripts/new_merge.py b/packages/Keyguard/scripts/new_merge.py new file mode 100755 index 0000000..70fafec --- /dev/null +++ b/packages/Keyguard/scripts/new_merge.py @@ -0,0 +1,165 @@ +#!/usr/bin/env python + +import os +import sys +import difflib +import filecmp +import tempfile +from optparse import OptionParser +from subprocess import call +from subprocess import Popen +from subprocess import PIPE + +def which(program): + def executable(path): + return os.path.isfile(path) and os.access(path, os.X_OK) + + path, file = os.path.split(program) + if path and executable(program): + return program + else: + for path in os.environ["PATH"].split(os.pathsep): + exe = os.path.join(path, program) + if executable(exe): + return exe + return "" + +DIFF_TOOLS=["meld", "kdiff3", "xdiff", "diffmerge.sh", "diff"] + +PROTO_SRC="./src/com/android/keyguard/" +PROTO_RES="./res/" + +TEMP_FILE1="/tmp/tempFile1.txt" +TEMP_FILE2="/tmp/tempFile2.txt" + +FW_SRC="../../../../frameworks/base/policy/src/com/android/internal/policy/impl/keyguard/" +FW_RES="../../../../frameworks/base/core/res/res/" + +FW_PKG="com.android.internal.policy.impl.keyguard" +PROTO_PKG="com.android.keyguard" + +FW_RES_IMPORT="import com.android.internal.R;" + +# Find a differ +DIFF_TOOL="" +if ("DIFF_TOOL" in os.environ and len(os.environ["DIFF_TOOL"]) > 0): + DIFF_TOOL=which(os.environ["DIFF_TOOL"]) +if len(DIFF_TOOL) == 0: + for differ in DIFF_TOOLS: + DIFF_TOOL=which(differ) + if len(DIFF_TOOL) > 0: + break + +print "Using differ", DIFF_TOOL + +#Anything file which contains any string in this list as a substring will be ommitted +IGNORE=["LockHotnessActivity.java", "unified_lock_activity.xml", "optionmenu.xml"] +WATCH=[] + +def dirCompare(sourceDir, destDir, ext, run_in_reverse): + sourceFiles = getFileList(sourceDir, ext) + destFiles = getFileList(destDir, ext) + for file in sourceFiles: + print file + destFile = destDir + file + sourceFile = sourceDir + file + if (file in destFiles): + if run_in_reverse: + prepareFileForCompare(sourceFile, TEMP_FILE1, FW_RES_IMPORT, FW_PKG, PROTO_PKG) + prepareFileForCompare(destFile, TEMP_FILE2, FW_RES_IMPORT,) + else: + prepareFileForCompare(destFile, TEMP_FILE1, FW_RES_IMPORT, FW_PKG, PROTO_PKG) + prepareFileForCompare(sourceFile, TEMP_FILE2, FW_RES_IMPORT,) + if (filecmp.cmp(TEMP_FILE1, TEMP_FILE2)): + print "File %s is the same in proto and framework" %(file) + else: + print "Running diff for: %s" %(file) + diff(sourceFile, destFile) + else: + print "File %s does not exist in framework" %(file) + if not run_in_reverse: + diff(sourceFile, destFile) + +def main(argv): + run_in_reverse = False + if len(argv) > 1: + if argv[1] == '--help' or argv[1] == '-h': + print ('Usage: %s [<commit>]' % argv[0]) + print ('\tdiff to framework, ' + + 'optionally restricting to files in <commit>') + sys.exit(0) + elif argv[1] == '--reverse': + print "Running in reverse" + run_in_reverse = True + else: + print ("**** Pulling file list from: %s" % argv[1]) + pipe = Popen(['git', 'diff', '--name-only', argv[1]], stdout=PIPE).stdout + for line in iter(pipe.readline,''): + path = line.rstrip() + file = path[path.rfind('/') + 1:] + print '**** watching: %s' % file + WATCH.append(file); + pipe.close() + + if run_in_reverse: + #dirCompare(FW_RES, PROTO_RES, ".xml", run_in_reverse) + print ("**** Source files:") + dirCompare(FW_SRC, PROTO_SRC, ".java", run_in_reverse) + else: + #dirCompare(PROTO_RES, FW_RES, ".xml", run_in_reverse) + print ("**** Source files:") + dirCompare(PROTO_SRC, FW_SRC, ".java", run_in_reverse) + + if (os.path.exists(TEMP_FILE1)): + os.remove(TEMP_FILE1) + + if (os.path.exists(TEMP_FILE2)): + os.remove(TEMP_FILE2) + +def getFileList(rootdir, extension): + fileList = [] + + for root, subFolders, files in os.walk(rootdir): + for file in files: + f = os.path.join(root,file) + if (os.path.splitext(f)[1] == extension and (not inIgnore(f))): + fileList.append(f[len(rootdir):]) + return fileList + + +def prepareFileForCompare(inFile, outFile, skip="", replace="", withText=""): + # Delete the outfile, so we're starting with a new file + if (os.path.exists(outFile)): + os.remove(outFile) + + fin = open(inFile) + fout = open(outFile, "w") + for line in fin: + # Ignore any lines containing the ignore string ("import com.android.internal.R;) and + # ignore any lines containing only whitespace. + if (line.find(skip) < 0 and len(line.strip(' \t\n\r')) > 0): + # For comparison, for framework files, we replace the fw package with the + # proto package, since these aren't relevant. + if len(replace) > 0: + fout.write(line.replace(replace, withText)) + else: + fout.write(line) + fin.close() + fout.close() + +def diff(file1, file2): + call([DIFF_TOOL, file1, file2]) + +def inIgnore(file): + for ignore in IGNORE: + if file.find(ignore) >= 0: + return True + if len(WATCH) > 0: + for watch in WATCH: + if file.find(watch) >= 0: + return False + return True + return False + +if __name__=="__main__": + main(sys.argv) diff --git a/policy/src/com/android/internal/policy/impl/keyguard/BiometricSensorUnlock.java b/packages/Keyguard/src/com/android/keyguard/BiometricSensorUnlock.java index e65a716..230ef81 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/BiometricSensorUnlock.java +++ b/packages/Keyguard/src/com/android/keyguard/BiometricSensorUnlock.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.internal.policy.impl.keyguard; +package com.android.keyguard; import android.view.View; diff --git a/policy/src/com/android/internal/policy/impl/keyguard/CameraWidgetFrame.java b/packages/Keyguard/src/com/android/keyguard/CameraWidgetFrame.java index 762711d..146c092 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/CameraWidgetFrame.java +++ b/packages/Keyguard/src/com/android/keyguard/CameraWidgetFrame.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.internal.policy.impl.keyguard; +package com.android.keyguard; import android.content.Context; import android.content.pm.PackageManager.NameNotFoundException; @@ -33,8 +33,7 @@ import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.ImageView.ScaleType; -import com.android.internal.R; -import com.android.internal.policy.impl.keyguard.KeyguardActivityLauncher.CameraWidgetInfo; +import com.android.keyguard.KeyguardActivityLauncher.CameraWidgetInfo; public class CameraWidgetFrame extends KeyguardWidgetFrame implements View.OnClickListener { private static final String TAG = CameraWidgetFrame.class.getSimpleName(); @@ -204,7 +203,7 @@ public class CameraWidgetFrame extends KeyguardWidgetFrame implements View.OnCli private static View inflateGenericWidgetView(Context context) { if (DEBUG) Log.d(TAG, "inflateGenericWidgetView"); ImageView iv = new ImageView(context); - iv.setImageResource(com.android.internal.R.drawable.ic_lockscreen_camera); + iv.setImageResource(R.drawable.ic_lockscreen_camera); iv.setScaleType(ScaleType.CENTER); iv.setBackgroundColor(Color.argb(127, 0, 0, 0)); return iv; @@ -423,7 +422,7 @@ public class CameraWidgetFrame extends KeyguardWidgetFrame implements View.OnCli if (!(lp instanceof WindowManager.LayoutParams)) return; WindowManager.LayoutParams wlp = (WindowManager.LayoutParams) lp; - int newWindowAnimations = isEnabled ? com.android.internal.R.style.Animation_LockScreen : 0; + int newWindowAnimations = isEnabled ? R.style.Animation_LockScreen : 0; if (newWindowAnimations != wlp.windowAnimations) { if (DEBUG) Log.d(TAG, "setting windowAnimations to: " + newWindowAnimations + " at " + SystemClock.uptimeMillis()); diff --git a/policy/src/com/android/internal/policy/impl/keyguard/CarrierText.java b/packages/Keyguard/src/com/android/keyguard/CarrierText.java index a38e86d..9f0a042 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/CarrierText.java +++ b/packages/Keyguard/src/com/android/keyguard/CarrierText.java @@ -14,14 +14,13 @@ * limitations under the License. */ -package com.android.internal.policy.impl.keyguard; +package com.android.keyguard; import android.content.Context; import android.text.TextUtils; import android.util.AttributeSet; import android.widget.TextView; -import com.android.internal.R; import com.android.internal.telephony.IccCardConstants; import com.android.internal.telephony.IccCardConstants.State; import com.android.internal.widget.LockPatternUtils; @@ -124,7 +123,7 @@ public class CarrierText extends TextView { case NetworkLocked: carrierText = makeCarrierStringOnEmergencyCapable( - mContext.getText(R.string.lockscreen_network_locked_message), plmn); + mContext.getText(R.string.keyguard_network_locked_message), plmn); break; case SimMissing: @@ -133,30 +132,30 @@ public class CarrierText extends TextView { // has some connectivity. Otherwise, it should be null or empty and just show // "No SIM card" carrierText = makeCarrierStringOnEmergencyCapable( - getContext().getText(R.string.lockscreen_missing_sim_message_short), + getContext().getText(R.string.keyguard_missing_sim_message_short), plmn); break; case SimPermDisabled: carrierText = getContext().getText( - R.string.lockscreen_permanent_disabled_sim_message_short); + R.string.keyguard_permanent_disabled_sim_message_short); break; case SimMissingLocked: carrierText = makeCarrierStringOnEmergencyCapable( - getContext().getText(R.string.lockscreen_missing_sim_message_short), + getContext().getText(R.string.keyguard_missing_sim_message_short), plmn); break; case SimLocked: carrierText = makeCarrierStringOnEmergencyCapable( - getContext().getText(R.string.lockscreen_sim_locked_message), + getContext().getText(R.string.keyguard_sim_locked_message), plmn); break; case SimPukLocked: carrierText = makeCarrierStringOnEmergencyCapable( - getContext().getText(R.string.lockscreen_sim_puk_locked_message), + getContext().getText(R.string.keyguard_sim_puk_locked_message), plmn); break; } @@ -232,19 +231,19 @@ public class CarrierText extends TextView { StatusMode status = getStatusForIccState(simState); switch (status) { case NetworkLocked: - carrierHelpTextId = R.string.lockscreen_instructions_when_pattern_disabled; + carrierHelpTextId = R.string.keyguard_instructions_when_pattern_disabled; break; case SimMissing: - carrierHelpTextId = R.string.lockscreen_missing_sim_instructions_long; + carrierHelpTextId = R.string.keyguard_missing_sim_instructions_long; break; case SimPermDisabled: - carrierHelpTextId = R.string.lockscreen_permanent_disabled_sim_instructions; + carrierHelpTextId = R.string.keyguard_permanent_disabled_sim_instructions; break; case SimMissingLocked: - carrierHelpTextId = R.string.lockscreen_missing_sim_instructions; + carrierHelpTextId = R.string.keyguard_missing_sim_instructions; break; case Normal: diff --git a/policy/src/com/android/internal/policy/impl/keyguard/ChallengeLayout.java b/packages/Keyguard/src/com/android/keyguard/ChallengeLayout.java index 8ece559..677f1f1 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/ChallengeLayout.java +++ b/packages/Keyguard/src/com/android/keyguard/ChallengeLayout.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.internal.policy.impl.keyguard; +package com.android.keyguard; /** * Interface implemented by ViewGroup-derived layouts that implement diff --git a/policy/src/com/android/internal/policy/impl/keyguard/CheckLongPressHelper.java b/packages/Keyguard/src/com/android/keyguard/CheckLongPressHelper.java index 4825e23..52e7cd5 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/CheckLongPressHelper.java +++ b/packages/Keyguard/src/com/android/keyguard/CheckLongPressHelper.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.internal.policy.impl.keyguard; +package com.android.keyguard; import android.view.MotionEvent; import android.view.View; diff --git a/policy/src/com/android/internal/policy/impl/keyguard/ClockView.java b/packages/Keyguard/src/com/android/keyguard/ClockView.java index 6c701c7..c2930cb 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/ClockView.java +++ b/packages/Keyguard/src/com/android/keyguard/ClockView.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.internal.policy.impl.keyguard; +package com.android.keyguard; import android.content.BroadcastReceiver; import android.content.Context; @@ -34,7 +34,6 @@ import android.widget.TextView; import java.lang.ref.WeakReference; import java.text.DateFormatSymbols; import java.util.Calendar; -import com.android.internal.R; /** * Displays the time diff --git a/policy/src/com/android/internal/policy/impl/keyguard/EmergencyButton.java b/packages/Keyguard/src/com/android/keyguard/EmergencyButton.java index c68bab5..6badaaf 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/EmergencyButton.java +++ b/packages/Keyguard/src/com/android/keyguard/EmergencyButton.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.internal.policy.impl.keyguard; +package com.android.keyguard; import android.content.Context; import android.content.Intent; diff --git a/policy/src/com/android/internal/policy/impl/keyguard/EmergencyCarrierArea.java b/packages/Keyguard/src/com/android/keyguard/EmergencyCarrierArea.java index cfe1ef4..6d392fc 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/EmergencyCarrierArea.java +++ b/packages/Keyguard/src/com/android/keyguard/EmergencyCarrierArea.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.internal.policy.impl.keyguard; +package com.android.keyguard; import android.content.Context; import android.util.AttributeSet; @@ -22,7 +22,7 @@ import android.view.MotionEvent; import android.view.View; import android.widget.LinearLayout; -import com.android.internal.R; +import com.android.keyguard.R; public class EmergencyCarrierArea extends LinearLayout { diff --git a/policy/src/com/android/internal/policy/impl/keyguard/FaceUnlock.java b/packages/Keyguard/src/com/android/keyguard/FaceUnlock.java index e58eb5b..689366b 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/FaceUnlock.java +++ b/packages/Keyguard/src/com/android/keyguard/FaceUnlock.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.internal.policy.impl.keyguard; +package com.android.keyguard; import com.android.internal.policy.IFaceLockCallback; import com.android.internal.policy.IFaceLockInterface; diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardAbsKeyInputView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardAbsKeyInputView.java index cc520dc..fb2eeda 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardAbsKeyInputView.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardAbsKeyInputView.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.internal.policy.impl.keyguard; +package com.android.keyguard; import android.content.Context; import android.graphics.Rect; @@ -32,7 +32,6 @@ import android.widget.LinearLayout; import android.widget.TextView; import android.widget.TextView.OnEditorActionListener; -import com.android.internal.R; import com.android.internal.widget.LockPatternUtils; /** diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardAccountView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardAccountView.java index e0e7128..6b8be69 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardAccountView.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardAccountView.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.android.internal.policy.impl.keyguard; +package com.android.keyguard; import android.accounts.Account; import android.accounts.AccountManager; @@ -41,7 +41,6 @@ import android.widget.EditText; import android.widget.LinearLayout; import com.android.internal.widget.LockPatternUtils; -import com.android.internal.R; import java.io.IOException; diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardActivityLauncher.java b/packages/Keyguard/src/com/android/keyguard/KeyguardActivityLauncher.java index 6539db3..9a1aa5b 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardActivityLauncher.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardActivityLauncher.java @@ -14,7 +14,9 @@ * limitations under the License. */ -package com.android.internal.policy.impl.keyguard; +package com.android.keyguard; + +import com.android.internal.widget.LockPatternUtils; import android.app.ActivityManagerNative; import android.app.ActivityOptions; @@ -35,8 +37,7 @@ import android.provider.MediaStore; import android.util.Log; import android.view.WindowManager; -import com.android.internal.policy.impl.keyguard.KeyguardHostView.OnDismissAction; -import com.android.internal.widget.LockPatternUtils; +import com.android.keyguard.KeyguardHostView.OnDismissAction; import java.util.List; diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardCircleFramedDrawable.java b/packages/Keyguard/src/com/android/keyguard/KeyguardCircleFramedDrawable.java index 79b66f4..ed3faea 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardCircleFramedDrawable.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardCircleFramedDrawable.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.internal.policy.impl.keyguard; +package com.android.keyguard; import android.graphics.Bitmap; import android.graphics.Canvas; diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardFaceUnlockView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardFaceUnlockView.java index 965e378..55e8c7c 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardFaceUnlockView.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardFaceUnlockView.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.android.internal.policy.impl.keyguard; +package com.android.keyguard; import android.content.Context; import android.graphics.drawable.Drawable; @@ -29,7 +29,6 @@ import android.view.View; import android.widget.ImageButton; import android.widget.LinearLayout; -import com.android.internal.R; import com.android.internal.widget.LockPatternUtils; import java.lang.Math; diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardGlowStripView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardGlowStripView.java index e1c95f0..98a44a6 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardGlowStripView.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardGlowStripView.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.android.internal.policy.impl.keyguard; +package com.android.keyguard; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; @@ -29,8 +29,6 @@ import android.view.animation.Interpolator; import android.view.animation.LinearInterpolator; import android.widget.LinearLayout; -import com.android.internal.R; - /** * A layout which animates a strip of horizontal, pulsing dots on request. This is used * to indicate the presence of pages to the left / right. diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardHostView.java index 4885407..d63f696 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardHostView.java @@ -14,7 +14,11 @@ * limitations under the License. */ -package com.android.internal.policy.impl.keyguard; +package com.android.keyguard; + +import com.android.internal.widget.LockPatternUtils; +import com.android.keyguard.KeyguardSecurityModel.SecurityMode; +import com.android.keyguard.KeyguardUpdateMonitor.DisplayClientState; import android.app.Activity; import android.app.ActivityManager; @@ -54,11 +58,6 @@ import android.view.WindowManager; import android.view.animation.AnimationUtils; import android.widget.RemoteViews.OnClickHandler; -import com.android.internal.R; -import com.android.internal.policy.impl.keyguard.KeyguardSecurityModel.SecurityMode; -import com.android.internal.policy.impl.keyguard.KeyguardUpdateMonitor.DisplayClientState; -import com.android.internal.widget.LockPatternUtils; - import java.io.File; import java.util.List; @@ -564,7 +563,7 @@ public class KeyguardHostView extends KeyguardViewBase { final AlertDialog dialog = new AlertDialog.Builder(mContext) .setTitle(title) .setMessage(message) - .setNeutralButton(com.android.internal.R.string.ok, null) + .setNeutralButton(R.string.ok, null) .create(); if (!(mContext instanceof Activity)) { dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG); @@ -915,8 +914,7 @@ public class KeyguardHostView extends KeyguardViewBase { KeyguardSecurityView newView = getSecurityView(securityMode); // Enter full screen mode if we're in SIM or Account screen - boolean fullScreenEnabled = getResources().getBoolean( - com.android.internal.R.bool.kg_sim_puk_account_full_screen); + boolean fullScreenEnabled = getResources().getBoolean(R.bool.kg_sim_puk_account_full_screen); boolean isSimOrAccount = securityMode == SecurityMode.SimPin || securityMode == SecurityMode.SimPuk || securityMode == SecurityMode.Account; @@ -1572,19 +1570,12 @@ public class KeyguardHostView extends KeyguardViewBase { private static final String ENABLE_MENU_KEY_FILE = "/data/local/enable_menu_key"; private boolean shouldEnableMenuKey() { final Resources res = getResources(); - final boolean configDisabled = res.getBoolean( - com.android.internal.R.bool.config_disableMenuKeyInLockScreen); + final boolean configDisabled = res.getBoolean(R.bool.config_disableMenuKeyInLockScreen); final boolean isTestHarness = ActivityManager.isRunningInTestHarness(); final boolean fileOverride = (new File(ENABLE_MENU_KEY_FILE)).exists(); return !configDisabled || isTestHarness || fileOverride; } - - - public void goToUserSwitcher() { - mAppWidgetContainer.setCurrentPage(getWidgetPosition(R.id.keyguard_multi_user_selector)); - } - public void goToWidget(int appWidgetId) { mAppWidgetToShow = appWidgetId; mSwitchPageRunnable.run(); diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardLinearLayout.java b/packages/Keyguard/src/com/android/keyguard/KeyguardLinearLayout.java index 0fc54cd..343fdcb 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardLinearLayout.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardLinearLayout.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.android.internal.policy.impl.keyguard; +package com.android.keyguard; import android.content.Context; import android.util.AttributeSet; diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardMessageArea.java b/packages/Keyguard/src/com/android/keyguard/KeyguardMessageArea.java index 77359ff..194162a 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardMessageArea.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardMessageArea.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.internal.policy.impl.keyguard; +package com.android.keyguard; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; @@ -35,9 +35,6 @@ import android.widget.TextView; import libcore.util.MutableInt; import java.lang.ref.WeakReference; - -import com.android.internal.R; - /*** * Manages a number of views inside of the given layout. See below for a list of widgets. */ @@ -242,13 +239,12 @@ class KeyguardMessageArea extends TextView { if (mCharging) { // Charging, charged or waiting to charge. string = getContext().getString(mBatteryCharged - ? com.android.internal.R.string.lockscreen_charged - : com.android.internal.R.string.lockscreen_plugged_in, mBatteryLevel); + ? R.string.keyguard_charged + : R.string.keyguard_plugged_in, mBatteryLevel); icon.value = CHARGING_ICON; } else if (mBatteryIsLow) { // Battery is low - string = getContext().getString( - com.android.internal.R.string.lockscreen_low_battery); + string = getContext().getString(R.string.keyguard_low_battery); icon.value = BATTERY_LOW_ICON; } } diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardMultiUserAvatar.java b/packages/Keyguard/src/com/android/keyguard/KeyguardMultiUserAvatar.java index 9d1f041..7ef5b26 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardMultiUserAvatar.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardMultiUserAvatar.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.internal.policy.impl.keyguard; +package com.android.keyguard; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; @@ -26,6 +26,7 @@ import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Color; +import android.os.UserManager; import android.util.AttributeSet; import android.util.Log; import android.view.LayoutInflater; @@ -34,8 +35,6 @@ import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.TextView; -import com.android.internal.R; - class KeyguardMultiUserAvatar extends FrameLayout { private static final String TAG = KeyguardMultiUserAvatar.class.getSimpleName(); private static final boolean DEBUG = KeyguardHostView.DEBUG; @@ -70,6 +69,7 @@ class KeyguardMultiUserAvatar extends FrameLayout { private KeyguardMultiUserSelectorView mUserSelector; private KeyguardCircleFramedDrawable mFramed; private boolean mPressLock; + private UserManager mUserManager; public static KeyguardMultiUserAvatar fromXml(int resId, Context context, KeyguardMultiUserSelectorView userSelector, UserInfo info) { @@ -104,6 +104,7 @@ class KeyguardMultiUserAvatar extends FrameLayout { mActiveScale = ACTIVE_SCALE; mActiveAlpha = ACTIVE_ALPHA; mInactiveAlpha = INACTIVE_ALPHA; + mUserManager = (UserManager) mContext.getSystemService(Context.USER_SERVICE); mTouched = false; @@ -111,9 +112,6 @@ class KeyguardMultiUserAvatar extends FrameLayout { } protected String rewriteIconPath(String path) { - if (!this.getClass().getName().contains("internal")) { - return path.replace("system", "data"); - } return path; } @@ -124,16 +122,12 @@ class KeyguardMultiUserAvatar extends FrameLayout { mUserImage = (ImageView) findViewById(R.id.keyguard_user_avatar); mUserName = (TextView) findViewById(R.id.keyguard_user_name); - Bitmap icon = null; - try { - icon = BitmapFactory.decodeFile(rewriteIconPath(user.iconPath)); - } catch (Exception e) { - if (DEBUG) Log.d(TAG, "failed to open profile icon " + user.iconPath, e); - } + Bitmap icon = mUserManager.getUserIcon(user.id); if (icon == null) { + if (DEBUG) Log.w(TAG, "Couldn't get user icon for user id " + user.id); icon = BitmapFactory.decodeResource(mContext.getResources(), - com.android.internal.R.drawable.ic_contact_picture); + R.drawable.ic_contact_picture); } mFramed = new KeyguardCircleFramedDrawable(icon, (int) mIconSize, mFrameColor, mStroke, diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardMultiUserSelectorView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardMultiUserSelectorView.java index f9ea5bb..7975d8e 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardMultiUserSelectorView.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardMultiUserSelectorView.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.internal.policy.impl.keyguard; +package com.android.keyguard; import android.app.ActivityManagerNative; import android.content.Context; @@ -27,8 +27,6 @@ import android.view.View; import android.view.ViewGroup; import android.widget.FrameLayout; -import com.android.internal.R; - import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -154,15 +152,11 @@ public class KeyguardMultiUserSelectorView extends FrameLayout implements View.O @Override public void run() { mActiveUserAvatar = avatar; - if (this.getClass().getName().contains("internal")) { - try { - ActivityManagerNative.getDefault() - .switchUser(avatar.getUserInfo().id); - } catch (RemoteException re) { - Log.e(TAG, "Couldn't switch user " + re); - } - } else { - setAllClickable(true); + try { + ActivityManagerNative.getDefault() + .switchUser(avatar.getUserInfo().id); + } catch (RemoteException re) { + Log.e(TAG, "Couldn't switch user " + re); } } }); diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardPINView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardPINView.java index fa80352..3d1c3f3 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardPINView.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardPINView.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.internal.policy.impl.keyguard; +package com.android.keyguard; import android.content.Context; import android.text.Editable; @@ -25,8 +25,6 @@ import android.util.AttributeSet; import android.view.View; import android.widget.TextView.OnEditorActionListener; -import com.android.internal.R; - /** * Displays a PIN pad for unlocking. */ diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardPasswordView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardPasswordView.java index d52c993..4e3568b 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardPasswordView.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardPasswordView.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.internal.policy.impl.keyguard; +package com.android.keyguard; import android.app.admin.DevicePolicyManager; import android.content.Context; @@ -31,7 +31,6 @@ import android.view.inputmethod.InputMethodManager; import android.view.inputmethod.InputMethodSubtype; import android.widget.TextView.OnEditorActionListener; -import com.android.internal.R; import com.android.internal.widget.PasswordEntryKeyboardHelper; import com.android.internal.widget.PasswordEntryKeyboardView; diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardPatternView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardPatternView.java index e114b78..e7f1259 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardPatternView.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardPatternView.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.android.internal.policy.impl.keyguard; +package com.android.keyguard; import android.accounts.Account; import android.accounts.AccountManager; @@ -37,7 +37,6 @@ import android.widget.LinearLayout; import com.android.internal.widget.LockPatternUtils; import com.android.internal.widget.LockPatternView; -import com.android.internal.R; import java.io.IOException; import java.util.List; diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardSecurityCallback.java b/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityCallback.java index 7e6c108..4f139ad 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardSecurityCallback.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityCallback.java @@ -13,9 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.android.internal.policy.impl.keyguard; +package com.android.keyguard; -import com.android.internal.policy.impl.keyguard.KeyguardHostView.OnDismissAction; +import com.android.keyguard.KeyguardHostView.OnDismissAction; public interface KeyguardSecurityCallback { diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardSecurityContainer.java b/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityContainer.java index 375a96a..9d03c6a 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardSecurityContainer.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityContainer.java @@ -1,12 +1,10 @@ -package com.android.internal.policy.impl.keyguard; +package com.android.keyguard; import android.content.Context; import android.util.AttributeSet; import android.view.View; import android.widget.FrameLayout; -import com.android.internal.R; - public class KeyguardSecurityContainer extends FrameLayout { public KeyguardSecurityContainer(Context context, AttributeSet attrs) { this(context, attrs, 0); diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardSecurityModel.java b/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityModel.java index 7a69586..4129e33 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardSecurityModel.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityModel.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.android.internal.policy.impl.keyguard; +package com.android.keyguard; import android.app.admin.DevicePolicyManager; import android.content.Context; diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardSecurityView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityView.java index a3ac39c..dfeacf3 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardSecurityView.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityView.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.android.internal.policy.impl.keyguard; +package com.android.keyguard; import com.android.internal.widget.LockPatternUtils; diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardSecurityViewFlipper.java b/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityViewFlipper.java index aa31b00..70a0e44 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardSecurityViewFlipper.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityViewFlipper.java @@ -14,10 +14,7 @@ * limitations under the License. */ -package com.android.internal.policy.impl.keyguard; - -import com.android.internal.R; -import com.android.internal.widget.LockPatternUtils; +package com.android.keyguard; import android.content.Context; import android.content.res.TypedArray; @@ -32,6 +29,8 @@ import android.view.WindowManager; import android.widget.FrameLayout; import android.widget.ViewFlipper; +import com.android.internal.widget.LockPatternUtils; + /** * Subclass of the current view flipper that allows us to overload dispatchTouchEvent() so * we can emulate {@link WindowManager.LayoutParams#FLAG_SLIPPERY} within a view hierarchy. diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardSecurityViewHelper.java b/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityViewHelper.java index 3d59f8d..67a6f52 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardSecurityViewHelper.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityViewHelper.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.internal.policy.impl.keyguard; +package com.android.keyguard; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardSelectorView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardSelectorView.java index 6859042..4d891be 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardSelectorView.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardSelectorView.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.android.internal.policy.impl.keyguard; +package com.android.keyguard; import android.animation.ObjectAnimator; import android.app.SearchManager; @@ -34,7 +34,6 @@ import com.android.internal.telephony.IccCardConstants.State; import com.android.internal.widget.LockPatternUtils; import com.android.internal.widget.multiwaveview.GlowPadView; import com.android.internal.widget.multiwaveview.GlowPadView.OnTriggerListener; -import com.android.internal.R; public class KeyguardSelectorView extends LinearLayout implements KeyguardSecurityView { private static final boolean DEBUG = KeyguardHostView.DEBUG; @@ -58,7 +57,7 @@ public class KeyguardSelectorView extends LinearLayout implements KeyguardSecuri public void onTrigger(View v, int target) { final int resId = mGlowPadView.getResourceIdForTarget(target); switch (resId) { - case com.android.internal.R.drawable.ic_action_assist_generic: + case R.drawable.ic_action_assist_generic: Intent assistIntent = ((SearchManager) mContext.getSystemService(Context.SEARCH_SERVICE)) .getAssistIntent(mContext, true, UserHandle.USER_CURRENT); @@ -70,13 +69,13 @@ public class KeyguardSelectorView extends LinearLayout implements KeyguardSecuri mCallback.userActivity(0); break; - case com.android.internal.R.drawable.ic_lockscreen_camera: + case R.drawable.ic_lockscreen_camera: mActivityLauncher.launchCamera(null, null); mCallback.userActivity(0); break; - case com.android.internal.R.drawable.ic_lockscreen_unlock_phantom: - case com.android.internal.R.drawable.ic_lockscreen_unlock: + case R.drawable.ic_lockscreen_unlock_phantom: + case R.drawable.ic_lockscreen_unlock: mCallback.userActivity(0); mCallback.dismiss(false); break; @@ -179,9 +178,9 @@ public class KeyguardSelectorView extends LinearLayout implements KeyguardSecuri final KeyguardUpdateMonitor monitor = KeyguardUpdateMonitor.getInstance(getContext()); boolean disabledBySimState = monitor.isSimLocked(); boolean cameraTargetPresent = - isTargetPresent(com.android.internal.R.drawable.ic_lockscreen_camera); + isTargetPresent(R.drawable.ic_lockscreen_camera); boolean searchTargetPresent = - isTargetPresent(com.android.internal.R.drawable.ic_action_assist_generic); + isTargetPresent(R.drawable.ic_action_assist_generic); if (cameraDisabledByAdmin) { Log.v(TAG, "Camera disabled by Device Policy"); @@ -214,21 +213,17 @@ public class KeyguardSelectorView extends LinearLayout implements KeyguardSecuri // DON'T USE IT! ComponentName component = intent.getComponent(); boolean replaced = mGlowPadView.replaceTargetDrawablesIfPresent(component, - ASSIST_ICON_METADATA_NAME + "_google", - com.android.internal.R.drawable.ic_action_assist_generic); + ASSIST_ICON_METADATA_NAME + "_google", R.drawable.ic_action_assist_generic); if (!replaced && !mGlowPadView.replaceTargetDrawablesIfPresent(component, - ASSIST_ICON_METADATA_NAME, - com.android.internal.R.drawable.ic_action_assist_generic)) { + ASSIST_ICON_METADATA_NAME, R.drawable.ic_action_assist_generic)) { Slog.w(TAG, "Couldn't grab icon from package " + component); } } } - mGlowPadView.setEnableTarget(com.android.internal.R.drawable - .ic_lockscreen_camera, !mCameraDisabled); - mGlowPadView.setEnableTarget(com.android.internal.R.drawable - .ic_action_assist_generic, !mSearchDisabled); + mGlowPadView.setEnableTarget(R.drawable.ic_lockscreen_camera, !mCameraDisabled); + mGlowPadView.setEnableTarget(R.drawable.ic_action_assist_generic, !mSearchDisabled); } void doTransition(View view, float to) { diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardService.java b/packages/Keyguard/src/com/android/keyguard/KeyguardService.java new file mode 100644 index 0000000..9fa4790 --- /dev/null +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardService.java @@ -0,0 +1,120 @@ +/* + * Copyright (C) 2013 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 com.android.keyguard; + +import java.io.FileDescriptor; +import java.io.PrintWriter; + +import android.app.Service; +import android.content.Intent; +import android.os.Bundle; +import android.os.IBinder; +import android.util.Log; + +import com.android.internal.policy.IKeyguardService; +import com.android.internal.policy.IKeyguardExitCallback; +import com.android.internal.policy.IKeyguardShowCallback; +import com.android.internal.widget.LockPatternUtils; + +public class KeyguardService extends Service { + static final String TAG = "KeyguardService"; + private KeyguardViewMediator mKeyguardViewMediator; + + @Override + public void onCreate() { + if (mKeyguardViewMediator == null) { + mKeyguardViewMediator = new KeyguardViewMediator( + KeyguardService.this, new LockPatternUtils(KeyguardService.this)); + } + Log.v(TAG, "onCreate()"); + } + + @Override + public IBinder onBind(Intent intent) { + return mBinder; + } + + @Override + protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) { + // TODO + } + + private final IKeyguardService.Stub mBinder = new IKeyguardService.Stub() { + public boolean isShowing() { + return mKeyguardViewMediator.isShowing(); + } + public boolean isSecure() { + return mKeyguardViewMediator.isSecure(); + } + public boolean isShowingAndNotHidden() { + return mKeyguardViewMediator.isShowingAndNotHidden(); + } + public boolean isInputRestricted() { + return mKeyguardViewMediator.isInputRestricted(); + } + public void verifyUnlock(IKeyguardExitCallback callback) { + mKeyguardViewMediator.verifyUnlock(callback); + } + public void keyguardDone(boolean authenticated, boolean wakeup) { + mKeyguardViewMediator.keyguardDone(authenticated, wakeup); + } + public void setHidden(boolean isHidden) { + mKeyguardViewMediator.setHidden(isHidden); + } + public void dismiss() { + mKeyguardViewMediator.dismiss(); + } + public void onWakeKeyWhenKeyguardShowing(int keyCode) { + mKeyguardViewMediator.onWakeKeyWhenKeyguardShowing(keyCode); + } + public void onWakeMotionWhenKeyguardShowing() { + mKeyguardViewMediator.onWakeMotionWhenKeyguardShowing(); + } + public void onDreamingStarted() { + mKeyguardViewMediator.onDreamingStarted(); + } + public void onDreamingStopped() { + mKeyguardViewMediator.onDreamingStopped(); + } + public void onScreenTurnedOff(int reason) { + mKeyguardViewMediator.onScreenTurnedOff(reason); + } + public void onScreenTurnedOn(IKeyguardShowCallback callback) { + mKeyguardViewMediator.onScreenTurnedOn(callback); + } + public void setKeyguardEnabled(boolean enabled) { + mKeyguardViewMediator.setKeyguardEnabled(enabled); + } + public boolean isDismissable() { + return mKeyguardViewMediator.isDismissable(); + } + public void onSystemReady() { + mKeyguardViewMediator.onSystemReady(); + } + public void doKeyguardTimeout(Bundle options) { + mKeyguardViewMediator.doKeyguardTimeout(options); + } + public void setCurrentUser(int userId) { + mKeyguardViewMediator.setCurrentUser(userId); + } + public void showAssistant() { + mKeyguardViewMediator.showAssistant(); + } + }; + +} + diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardSimPinView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardSimPinView.java index ab364ee..865a7c4 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardSimPinView.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardSimPinView.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.internal.policy.impl.keyguard; +package com.android.keyguard; import com.android.internal.telephony.ITelephony; @@ -33,8 +33,6 @@ import android.view.View; import android.view.WindowManager; import android.widget.TextView.OnEditorActionListener; -import com.android.internal.R; - /** * Displays a PIN pad for unlocking. */ diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardSimPukView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardSimPukView.java index e5b4b73..7424fab 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardSimPukView.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardSimPukView.java @@ -13,12 +13,15 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.android.internal.policy.impl.keyguard; +package com.android.keyguard; + +import com.android.internal.telephony.ITelephony; + +import android.content.Context; import android.app.Activity; import android.app.Dialog; import android.app.ProgressDialog; -import android.content.Context; import android.os.RemoteException; import android.os.ServiceManager; import android.text.Editable; @@ -30,10 +33,6 @@ import android.view.View; import android.view.WindowManager; import android.widget.TextView.OnEditorActionListener; -import com.android.internal.telephony.ITelephony; - -import com.android.internal.R; - /** * Displays a PIN pad for entering a PUK (Pin Unlock Kode) provided by a carrier. */ @@ -72,8 +71,7 @@ public class KeyguardSimPukView extends KeyguardAbsKeyInputView } else if (state == CONFIRM_PIN) { if (confirmPin()) { state = DONE; - msg = - com.android.internal.R.string.lockscreen_sim_unlock_progress_dialog_message; + msg = R.string.keyguard_sim_unlock_progress_dialog_message; updateSim(); } else { state = ENTER_PIN; // try again? diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardStatusView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardStatusView.java index d938cec..29f76f3 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardStatusView.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardStatusView.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.internal.policy.impl.keyguard; +package com.android.keyguard; import android.content.Context; import android.content.res.Resources; @@ -26,7 +26,6 @@ import android.view.View; import android.widget.GridLayout; import android.widget.TextView; -import com.android.internal.R; import com.android.internal.widget.LockPatternUtils; import java.text.SimpleDateFormat; @@ -40,7 +39,7 @@ public class KeyguardStatusView extends GridLayout { private static final String TAG = "KeyguardStatusView"; public static final int LOCK_ICON = 0; // R.drawable.ic_lock_idle_lock; - public static final int ALARM_ICON = com.android.internal.R.drawable.ic_lock_idle_alarm; + public static final int ALARM_ICON = R.drawable.ic_lock_idle_alarm; public static final int CHARGING_ICON = 0; //R.drawable.ic_lock_idle_charging; public static final int BATTERY_LOW_ICON = 0; //R.drawable.ic_lock_idle_low_battery; @@ -84,8 +83,7 @@ public class KeyguardStatusView extends GridLayout { super.onFinishInflate(); Resources res = getContext().getResources(); final Locale locale = Locale.getDefault(); - final String datePattern = - res.getString(com.android.internal.R.string.system_ui_date_pattern); + final String datePattern = res.getString(R.string.system_ui_date_pattern); final String bestFormat = ICU.getBestDateTimePattern(datePattern, locale.toString()); mDateFormat = new SimpleDateFormat(bestFormat, locale); mDateView = (TextView) findViewById(R.id.date); diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardStatusViewManager.java b/packages/Keyguard/src/com/android/keyguard/KeyguardStatusViewManager.java new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardStatusViewManager.java diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardTestActivity.java b/packages/Keyguard/src/com/android/keyguard/KeyguardTestActivity.java new file mode 100644 index 0000000..0ff00e3 --- /dev/null +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardTestActivity.java @@ -0,0 +1,356 @@ +/* + * 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 com.android.keyguard; + +import com.android.internal.policy.IKeyguardShowCallback; +import com.android.internal.policy.IKeyguardExitCallback; +import com.android.internal.policy.IKeyguardService; + +import android.app.Activity; +import android.app.AlertDialog; +import android.app.admin.DevicePolicyManager; +import android.content.ComponentName; +import android.content.Context; +import android.content.Intent; +import android.content.ServiceConnection; +import android.os.Bundle; +import android.os.IBinder; +import android.os.RemoteException; +import android.os.SystemClock; +import android.provider.Settings; +import android.util.Log; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.WindowManagerPolicy; + +import com.android.internal.widget.LockPatternUtils; +import com.android.internal.widget.LockPatternView.Cell; + +import java.util.List; + +public class KeyguardTestActivity extends Activity implements OnClickListener { + private static final String KEYGUARD_PACKAGE = "com.android.keyguard"; + private static final String KEYGUARD_CLASS = "com.android.keyguard.KeyguardService"; + private static final String TAG = "LockScreenTestActivity"; + private static final int MODE_NONE = 0; + private static final int MODE_PIN = 1; + private static final int MODE_PASSWORD = 2; + private static final int MODE_PATTERN = 3; + private static final int MODE_SIM_PIN = 4; + private static final int MODE_SIM_PUK = 5; + private static final String SECURITY_MODE = "security_mode"; + + IKeyguardService mService = null; + + KeyguardShowCallback mKeyguardShowCallback = new KeyguardShowCallback(); + KeyguardExitCallback mKeyguardExitCallback = new KeyguardExitCallback(); + + RemoteServiceConnection mConnection; + private boolean mSentSystemReady; + + class KeyguardShowCallback extends IKeyguardShowCallback.Stub { + + @Override + public void onShown(IBinder windowToken) throws RemoteException { + Log.v(TAG, "Keyguard is shown, windowToken = " + windowToken); + } + } + + class KeyguardExitCallback extends IKeyguardExitCallback.Stub { + + @Override + public void onKeyguardExitResult(boolean success) throws RemoteException { + new AlertDialog.Builder(KeyguardTestActivity.this) + .setMessage("Result: " + success) + .setPositiveButton("OK", null) + .show(); + } + + }; + + private class RemoteServiceConnection implements ServiceConnection { + public void onServiceConnected(ComponentName className, IBinder service) { + Log.v(TAG, "onServiceConnected()"); + mService = IKeyguardService.Stub.asInterface(service); + try { + mService.asBinder().linkToDeath(new IBinder.DeathRecipient() { + @Override + public void binderDied() { + new AlertDialog.Builder(KeyguardTestActivity.this) + .setMessage("Oops! Keygued died") + .setPositiveButton("OK", null) + .show(); + } + }, 0); + } catch (RemoteException e) { + Log.w(TAG, "Couldn't linkToDeath"); + e.printStackTrace(); + } +// try { +// mService.onSystemReady(); +// } catch (RemoteException e) { +// Log.v(TAG, "Remote service died trying to call onSystemReady"); +// e.printStackTrace(); +// } + } + + public void onServiceDisconnected(ComponentName className) { + Log.v(TAG, "onServiceDisconnected()"); + mService = null; + } + }; + + private void bindService() { + if (mConnection == null) { + mConnection = new RemoteServiceConnection(); + Intent intent = new Intent(); + intent.setClassName(KEYGUARD_PACKAGE, KEYGUARD_CLASS); + Log.v(TAG, "BINDING SERVICE: " + KEYGUARD_CLASS); + if (!bindService(intent, mConnection, Context.BIND_AUTO_CREATE)) { + Log.v(TAG, "FAILED TO BIND TO KEYGUARD!"); + } + } else { + Log.v(TAG, "Service already bound"); + } + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.keyguard_test_activity); + final int[] buttons = { + R.id.on_screen_turned_off, R.id.on_screen_turned_on, + R.id.do_keyguard, R.id.verify_unlock + }; + for (int i = 0; i < buttons.length; i++) { + findViewById(buttons[i]).setOnClickListener(this); + } + Log.v(TAG, "Binding service..."); + bindService(); + } + + @Override + protected void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + outState.putInt(SECURITY_MODE, mSecurityMode); + } + + @Override + protected void onRestoreInstanceState(Bundle savedInstanceState) { + super.onRestoreInstanceState(savedInstanceState); + setMode(savedInstanceState.getInt(SECURITY_MODE)); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + MenuInflater inflater = getMenuInflater(); + inflater.inflate(R.menu.optionmenu, menu); + return true; + } + + private void setMode(int mode) { + mTestSimPin = false; + mTestSimPuk = false; + mLockPasswordEnabled = false; + mLockPatternEnabled = false; + switch(mode) { + case MODE_NONE: + mSecurityModeMock = DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED; + break; + case MODE_PIN: + mSecurityModeMock = DevicePolicyManager.PASSWORD_QUALITY_NUMERIC; + mLockPasswordEnabled = true; + break; + case MODE_PASSWORD: + mSecurityModeMock = DevicePolicyManager.PASSWORD_QUALITY_ALPHABETIC; + mLockPasswordEnabled = true; + break; + case MODE_PATTERN: + mSecurityModeMock = DevicePolicyManager.PASSWORD_QUALITY_SOMETHING; + mLockPatternEnabled = true; + break; + case MODE_SIM_PIN: + mTestSimPin = true; + break; + case MODE_SIM_PUK: + mTestSimPuk = true; + break; + } + mSecurityMode = mode; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // Handle item selection + switch (item.getItemId()) { + case R.id.none_menu_item: + setMode(MODE_NONE); + break; + case R.id.pin_menu_item: + setMode(MODE_PIN); + break; + case R.id.password_menu_item: + setMode(MODE_PASSWORD); + break; + case R.id.pattern_menu_item: + setMode(MODE_PATTERN); + break; + case R.id.sim_pin_menu_item: + setMode(MODE_SIM_PIN); + break; + case R.id.sim_puk_menu_item: + setMode(MODE_SIM_PUK); + break; + case R.id.add_widget_item: + startWidgetPicker(); + break; + default: + return super.onOptionsItemSelected(item); + } + try { + mService.doKeyguardTimeout(null); + } catch (RemoteException e) { + Log.e(TAG, "Remote service died"); + e.printStackTrace(); + } + return true; + } + + private void startWidgetPicker() { + startActivity(new Intent(Settings.ACTION_SECURITY_SETTINGS)); + } + + @Override + public void onClick(View v) { + try { + switch (v.getId()) { + case R.id.on_screen_turned_on: + mService.onScreenTurnedOn(mKeyguardShowCallback); + break; + case R.id.on_screen_turned_off: + mService.onScreenTurnedOff(WindowManagerPolicy.OFF_BECAUSE_OF_USER); + break; + case R.id.do_keyguard: + if (!mSentSystemReady) { + mSentSystemReady = true; + mService.onSystemReady(); + } + mService.doKeyguardTimeout(null); + break; + case R.id.verify_unlock: + mService.verifyUnlock(mKeyguardExitCallback); + break; + } + } catch (RemoteException e) { + Log.e(TAG, "Remote service died"); + e.printStackTrace(); + } + } + + @Override + protected void onPause() { + super.onPause(); + try { + if (mService != null) { + mService.setHidden(true); + } + } catch (RemoteException e) { + Log.e(TAG, "Remote service died"); + e.printStackTrace(); + } + } + + protected void onResume() { + super.onResume(); + try { + if (mService != null) { + mService.setHidden(false); + } + } catch (RemoteException e) { + Log.e(TAG, "Remote service died"); + e.printStackTrace(); + } + } + + public int mSecurityModeMock; + private boolean mTestSimPin; + private boolean mTestSimPuk; + private boolean mLockPasswordEnabled; + public boolean mLockPatternEnabled; + private int mSecurityMode; + + class LockPatternUtilsMock extends LockPatternUtils { + private long mDeadline; + public LockPatternUtilsMock(Context context) { + super(context); + } + + @Override + public boolean checkPattern(List<Cell> pattern) { + return pattern.size() > 4; + } + + @Override + public boolean checkPassword(String password) { + return password.length() > 4; + } + @Override + public long setLockoutAttemptDeadline() { + final long deadline = SystemClock.elapsedRealtime() + FAILED_ATTEMPT_TIMEOUT_MS; + mDeadline = deadline; + return deadline; + } + @Override + public boolean isLockScreenDisabled() { + return false; + } + @Override + public long getLockoutAttemptDeadline() { + return mDeadline; + } + @Override + public void reportFailedPasswordAttempt() { + // Ignored + } + @Override + public void reportSuccessfulPasswordAttempt() { + // Ignored + } + @Override + public boolean isLockPatternEnabled() { + return mLockPatternEnabled; + } + + @Override + public boolean isLockPasswordEnabled() { + return mLockPasswordEnabled; + } + + @Override + public int getKeyguardStoredPasswordQuality() { + return mSecurityModeMock; + } + + public boolean isSecure() { + return mLockPatternEnabled || mLockPasswordEnabled || mTestSimPin || mTestSimPuk; + } + + } +} diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardTransportControlView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardTransportControlView.java index d5798d7..99d4f63 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardTransportControlView.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardTransportControlView.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.internal.policy.impl.keyguard; +package com.android.keyguard; import android.app.PendingIntent; import android.app.PendingIntent.CanceledException; @@ -44,8 +44,6 @@ import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.TextView; -import com.android.internal.R; - import java.lang.ref.WeakReference; /** * This is the widget responsible for showing music controls in keyguard. @@ -333,26 +331,26 @@ public class KeyguardTransportControlView extends FrameLayout implements OnClick final int imageDescId; switch (state) { case RemoteControlClient.PLAYSTATE_ERROR: - imageResId = com.android.internal.R.drawable.stat_sys_warning; + imageResId = R.drawable.stat_sys_warning; // TODO use more specific image description string for warning, but here the "play" // message is still valid because this button triggers a play command. - imageDescId = com.android.internal.R.string.lockscreen_transport_play_description; + imageDescId = R.string.keyguard_transport_play_description; break; case RemoteControlClient.PLAYSTATE_PLAYING: - imageResId = com.android.internal.R.drawable.ic_media_pause; - imageDescId = com.android.internal.R.string.lockscreen_transport_pause_description; + imageResId = R.drawable.ic_media_pause; + imageDescId = R.string.keyguard_transport_pause_description; break; case RemoteControlClient.PLAYSTATE_BUFFERING: - imageResId = com.android.internal.R.drawable.ic_media_stop; - imageDescId = com.android.internal.R.string.lockscreen_transport_stop_description; + imageResId = R.drawable.ic_media_stop; + imageDescId = R.string.keyguard_transport_stop_description; break; case RemoteControlClient.PLAYSTATE_PAUSED: default: - imageResId = com.android.internal.R.drawable.ic_media_play; - imageDescId = com.android.internal.R.string.lockscreen_transport_play_description; + imageResId = R.drawable.ic_media_play; + imageDescId = R.string.keyguard_transport_play_description; break; } mBtnPlay.setImageResource(imageResId); diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardUpdateMonitor.java b/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java index e958e9a..bd0aacb 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardUpdateMonitor.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.internal.policy.impl.keyguard; +package com.android.keyguard; import android.app.ActivityManagerNative; import android.app.IUserSwitchObserver; @@ -42,7 +42,6 @@ import android.os.Handler; import android.os.IRemoteCallback; import android.os.Message; import android.os.RemoteException; -import android.os.UserHandle; import android.provider.Settings; import com.android.internal.telephony.IccCardConstants; @@ -50,7 +49,6 @@ import com.android.internal.telephony.TelephonyIntents; import android.telephony.TelephonyManager; import android.util.Log; -import com.android.internal.R; import com.google.android.collect.Lists; import java.lang.ref.WeakReference; @@ -766,7 +764,7 @@ public class KeyguardUpdateMonitor { * @return The default plmn (no service) */ private CharSequence getDefaultPlmn() { - return mContext.getResources().getText(R.string.lockscreen_carrier_default); + return mContext.getResources().getText(R.string.keyguard_carrier_default); } /** diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardUpdateMonitorCallback.java b/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitorCallback.java index 368ccb3..d3a582f 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardUpdateMonitorCallback.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitorCallback.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.android.internal.policy.impl.keyguard; +package com.android.keyguard; import android.app.PendingIntent; import android.app.admin.DevicePolicyManager; diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewBase.java b/packages/Keyguard/src/com/android/keyguard/KeyguardViewBase.java index 6fcacd3..200fb3c 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewBase.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardViewBase.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.internal.policy.impl.keyguard; +package com.android.keyguard; import android.app.Activity; import android.content.Context; @@ -260,5 +260,4 @@ public abstract class KeyguardViewBase extends FrameLayout { KeyguardViewMediator.ViewMediatorCallback viewMediatorCallback) { mViewMediatorCallback = viewMediatorCallback; } - } diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewManager.java b/packages/Keyguard/src/com/android/keyguard/KeyguardViewManager.java index 30c95fb..b6c35bd 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewManager.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardViewManager.java @@ -14,7 +14,10 @@ * limitations under the License. */ -package com.android.internal.policy.impl.keyguard; +package com.android.keyguard; + +import com.android.internal.policy.IKeyguardShowCallback; +import com.android.internal.widget.LockPatternUtils; import android.app.Activity; import android.app.ActivityManager; @@ -28,6 +31,7 @@ import android.graphics.Rect; import android.os.Bundle; import android.os.IBinder; import android.os.Parcelable; +import android.os.RemoteException; import android.os.SystemProperties; import android.util.Log; import android.util.Slog; @@ -40,9 +44,6 @@ import android.view.ViewManager; import android.view.WindowManager; import android.widget.FrameLayout; -import com.android.internal.R; -import com.android.internal.widget.LockPatternUtils; - /** * Manages creating, showing, hiding and resetting the keyguard. Calls back * via {@link KeyguardViewMediator.ViewMediatorCallback} to poke @@ -119,7 +120,7 @@ public class KeyguardViewManager { private boolean shouldEnableScreenRotation() { Resources res = mContext.getResources(); return SystemProperties.getBoolean("lockscreen.rot_override",false) - || res.getBoolean(com.android.internal.R.bool.config_enableLockScreenRotation); + || res.getBoolean(R.bool.config_enableLockScreenRotation); } class ViewManagerHost extends FrameLayout { @@ -194,12 +195,11 @@ public class KeyguardViewManager { } final int stretch = ViewGroup.LayoutParams.MATCH_PARENT; - final int type = isActivity ? WindowManager.LayoutParams.TYPE_APPLICATION - : WindowManager.LayoutParams.TYPE_KEYGUARD; + final int type = WindowManager.LayoutParams.TYPE_KEYGUARD; WindowManager.LayoutParams lp = new WindowManager.LayoutParams( stretch, stretch, type, flags, PixelFormat.TRANSLUCENT); lp.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE; - lp.windowAnimations = com.android.internal.R.style.Animation_LockScreen; + lp.windowAnimations = R.style.Animation_LockScreen; lp.screenOrientation = enableScreenRotation ? ActivityInfo.SCREEN_ORIENTATION_USER : ActivityInfo.SCREEN_ORIENTATION_NOSENSOR; @@ -334,8 +334,7 @@ public class KeyguardViewManager { } } - public synchronized void onScreenTurnedOn( - final KeyguardViewManager.ShowListener showListener) { + public synchronized void onScreenTurnedOn(final IKeyguardShowCallback callback) { if (DEBUG) Log.d(TAG, "onScreenTurnedOn()"); mScreenOn = true; if (mKeyguardView != null) { @@ -343,26 +342,38 @@ public class KeyguardViewManager { // Caller should wait for this window to be shown before turning // on the screen. - if (showListener != null) { + if (callback != null) { if (mKeyguardHost.getVisibility() == View.VISIBLE) { // Keyguard may be in the process of being shown, but not yet // updated with the window manager... give it a chance to do so. mKeyguardHost.post(new Runnable() { @Override public void run() { + IBinder token = null; if (mKeyguardHost.getVisibility() == View.VISIBLE) { - showListener.onShown(mKeyguardHost.getWindowToken()); - } else { - showListener.onShown(null); + token = mKeyguardHost.getWindowToken(); + } + try { + callback.onShown(token); + } catch (RemoteException e) { + Slog.w(TAG, "Exception calling onShown():", e); } } }); } else { - showListener.onShown(null); + try { + callback.onShown(null); + } catch (RemoteException e) { + Slog.w(TAG, "Exception calling onShown():", e); + } } } - } else if (showListener != null) { - showListener.onShown(null); + } else if (callback != null) { + try { + callback.onShown(null); + } catch (RemoteException e) { + Slog.w(TAG, "Exception calling onShown():", e); + } } } diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewMediator.java b/packages/Keyguard/src/com/android/keyguard/KeyguardViewMediator.java index 8e10528..0146781 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewMediator.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardViewMediator.java @@ -14,8 +14,10 @@ * limitations under the License. */ -package com.android.internal.policy.impl.keyguard; +package com.android.keyguard; +import com.android.internal.policy.IKeyguardExitCallback; +import com.android.internal.policy.IKeyguardShowCallback; import static android.provider.Settings.System.SCREEN_OFF_TIMEOUT; import android.app.Activity; @@ -45,6 +47,7 @@ import android.provider.Settings; import android.telephony.TelephonyManager; import android.util.EventLog; import android.util.Log; +import android.util.Slog; import android.view.KeyEvent; import android.view.WindowManager; import android.view.WindowManagerPolicy; @@ -219,7 +222,7 @@ public class KeyguardViewMediator { * how we'll ultimately let them know whether it was successful. We use this * var being non-null as an indicator that there is an in progress request. */ - private WindowManagerPolicy.OnKeyguardExitResult mExitSecureCallback; + private IKeyguardExitCallback mExitSecureCallback; // the properties of the keyguard @@ -233,7 +236,9 @@ public class KeyguardViewMediator { /** * we send this intent when the keyguard is dismissed. */ - private Intent mUserPresentIntent; + private static final Intent USER_PRESENT_INTENT = new Intent(Intent.ACTION_USER_PRESENT) + .addFlags(Intent.FLAG_RECEIVER_REPLACE_PENDING + | Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT); /** * {@link #setKeyguardEnabled} waits on this condition when it reenables @@ -347,7 +352,7 @@ public class KeyguardViewMediator { // flicker while turning back on the screen and disabling the keyguard again). if (DEBUG) Log.d(TAG, "screen is off and call ended, let's make sure the " + "keyguard is showing"); - doKeyguardLocked(); + doKeyguardLocked(null); } } }; @@ -377,7 +382,7 @@ public class KeyguardViewMediator { if (DEBUG) Log.d(TAG, "ICC_ABSENT isn't showing," + " we need to show the keyguard since the " + "device isn't provisioned yet."); - doKeyguardLocked(); + doKeyguardLocked(null); } else { resetStateLocked(null); } @@ -390,7 +395,7 @@ public class KeyguardViewMediator { if (!isShowing()) { if (DEBUG) Log.d(TAG, "INTENT_VALUE_ICC_LOCKED and keygaurd isn't " + "showing; need to show keyguard so user can enter sim pin"); - doKeyguardLocked(); + doKeyguardLocked(null); } else { resetStateLocked(null); } @@ -401,7 +406,7 @@ public class KeyguardViewMediator { if (!isShowing()) { if (DEBUG) Log.d(TAG, "PERM_DISABLED and " + "keygaurd isn't showing."); - doKeyguardLocked(); + doKeyguardLocked(null); } else { if (DEBUG) Log.d(TAG, "PERM_DISABLED, resetStateLocked to" + "show permanently disabled message in lockscreen."); @@ -462,7 +467,7 @@ public class KeyguardViewMediator { mPM.wakeUp(SystemClock.uptimeMillis()); } - public void userActivity() { + private void userActivity() { userActivity(AWAKE_INTERVAL_DEFAULT_MS); } @@ -502,10 +507,6 @@ public class KeyguardViewMediator { mKeyguardViewManager = new KeyguardViewManager(context, wm, mViewMediatorCallback, mLockPatternUtils); - mUserPresentIntent = new Intent(Intent.ACTION_USER_PRESENT); - mUserPresentIntent.addFlags(Intent.FLAG_RECEIVER_REPLACE_PENDING - | Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT); - final ContentResolver cr = mContext.getContentResolver(); mShowLockIcon = (Settings.System.getInt(cr, "show_status_bar_lock", 0) == 1); @@ -558,7 +559,7 @@ public class KeyguardViewMediator { mUpdateMonitor.setAlternateUnlockEnabled(true); } - doKeyguardLocked(); + doKeyguardLocked(null); } // Most services aren't available until the system reaches the ready state, so we // send it here when the device first boots. @@ -586,7 +587,11 @@ public class KeyguardViewMediator { if (mExitSecureCallback != null) { if (DEBUG) Log.d(TAG, "pending exit secure callback cancelled"); - mExitSecureCallback.onKeyguardExitResult(false); + try { + mExitSecureCallback.onKeyguardExitResult(false); + } catch (RemoteException e) { + Slog.w(TAG, "Failed to call onKeyguardExitResult(false)", e); + } mExitSecureCallback = null; if (!mExternallyEnabled) { hideLocked(); @@ -600,7 +605,7 @@ public class KeyguardViewMediator { } else if (why == WindowManagerPolicy.OFF_BECAUSE_OF_PROX_SENSOR) { // Do not enable the keyguard if the prox sensor forced the screen off. } else { - doKeyguardLocked(); + doKeyguardLocked(null); } } } @@ -638,7 +643,7 @@ public class KeyguardViewMediator { if (timeout <= 0) { // Lock now mSuppressNextLockSound = true; - doKeyguardLocked(); + doKeyguardLocked(null); } else { // Lock in the future long when = SystemClock.elapsedRealtime() + timeout; @@ -659,13 +664,13 @@ public class KeyguardViewMediator { /** * Let's us know the screen was turned on. */ - public void onScreenTurnedOn(KeyguardViewManager.ShowListener showListener) { + public void onScreenTurnedOn(IKeyguardShowCallback callback) { synchronized (this) { mScreenOn = true; cancelDoKeyguardLaterLocked(); if (DEBUG) Log.d(TAG, "onScreenTurnedOn, seq = " + mDelayedShowingSequence); - if (showListener != null) { - notifyScreenOnLocked(showListener); + if (callback != null) { + notifyScreenOnLocked(callback); } } maybeSendUserPresentBroadcast(); @@ -736,7 +741,11 @@ public class KeyguardViewMediator { if (mExitSecureCallback != null) { if (DEBUG) Log.d(TAG, "onKeyguardExitResult(false), resetting"); - mExitSecureCallback.onKeyguardExitResult(false); + try { + mExitSecureCallback.onKeyguardExitResult(false); + } catch (RemoteException e) { + Slog.w(TAG, "Failed to call onKeyguardExitResult(false)", e); + } mExitSecureCallback = null; resetStateLocked(null); } else { @@ -764,22 +773,34 @@ public class KeyguardViewMediator { /** * @see android.app.KeyguardManager#exitKeyguardSecurely */ - public void verifyUnlock(WindowManagerPolicy.OnKeyguardExitResult callback) { + public void verifyUnlock(IKeyguardExitCallback callback) { synchronized (this) { if (DEBUG) Log.d(TAG, "verifyUnlock"); if (!mUpdateMonitor.isDeviceProvisioned()) { // don't allow this api when the device isn't provisioned if (DEBUG) Log.d(TAG, "ignoring because device isn't provisioned"); - callback.onKeyguardExitResult(false); + try { + callback.onKeyguardExitResult(false); + } catch (RemoteException e) { + Slog.w(TAG, "Failed to call onKeyguardExitResult(false)", e); + } } else if (mExternallyEnabled) { // this only applies when the user has externally disabled the // keyguard. this is unexpected and means the user is not // using the api properly. Log.w(TAG, "verifyUnlock called when not externally disabled"); - callback.onKeyguardExitResult(false); + try { + callback.onKeyguardExitResult(false); + } catch (RemoteException e) { + Slog.w(TAG, "Failed to call onKeyguardExitResult(false)", e); + } } else if (mExitSecureCallback != null) { // already in progress with someone else - callback.onKeyguardExitResult(false); + try { + callback.onKeyguardExitResult(false); + } catch (RemoteException e) { + Slog.w(TAG, "Failed to call onKeyguardExitResult(false)", e); + } } else { mExitSecureCallback = callback; verifyUnlockLocked(); @@ -844,10 +865,6 @@ public class KeyguardViewMediator { return mShowing || mNeedToReshowWhenReenabled || !mUpdateMonitor.isDeviceProvisioned(); } - private void doKeyguardLocked() { - doKeyguardLocked(null); - } - /** * Enable the keyguard if the settings are appropriate. */ @@ -945,9 +962,9 @@ public class KeyguardViewMediator { * @see #onScreenTurnedOn() * @see #handleNotifyScreenOn */ - private void notifyScreenOnLocked(KeyguardViewManager.ShowListener showListener) { + private void notifyScreenOnLocked(IKeyguardShowCallback result) { if (DEBUG) Log.d(TAG, "notifyScreenOnLocked"); - Message msg = mHandler.obtainMessage(NOTIFY_SCREEN_ON, showListener); + Message msg = mHandler.obtainMessage(NOTIFY_SCREEN_ON, result); mHandler.sendMessage(msg); } @@ -956,7 +973,7 @@ public class KeyguardViewMediator { * its state accordingly and then poke the wake lock when it is ready. * @param keyCode The wake key. * @see #handleWakeWhenReady - * @see #onWakeKeyWhenKeyguardShowingTq(int) + * @see #onWakeKeyWhenKeyguardShowing(int) */ private void wakeWhenReady(int keyCode) { if (DBG_WAKE) Log.d(TAG, "wakeWhenReady(" + keyCode + ")"); @@ -1020,7 +1037,7 @@ public class KeyguardViewMediator { if (mDelayedShowingSequence == sequence) { // Don't play lockscreen SFX if the screen went off due to timeout. mSuppressNextLockSound = true; - doKeyguardLocked(); + doKeyguardLocked(null); } } } @@ -1038,7 +1055,7 @@ public class KeyguardViewMediator { * * @param keyCode The keycode of the key that woke the device */ - public void onWakeKeyWhenKeyguardShowingTq(int keyCode) { + public void onWakeKeyWhenKeyguardShowing(int keyCode) { if (DEBUG) Log.d(TAG, "onWakeKeyWhenKeyguardShowing(" + keyCode + ")"); // give the keyguard view manager a chance to adjust the state of the @@ -1057,7 +1074,7 @@ public class KeyguardViewMediator { * Be sure not to take any action that takes a long time; any significant * action should be posted to a handler. */ - public void onWakeMotionWhenKeyguardShowingTq() { + public void onWakeMotionWhenKeyguardShowing() { if (DEBUG) Log.d(TAG, "onWakeMotionWhenKeyguardShowing()"); // give the keyguard view manager a chance to adjust the state of the @@ -1080,7 +1097,12 @@ public class KeyguardViewMediator { } if (mExitSecureCallback != null) { - mExitSecureCallback.onKeyguardExitResult(authenticated); + try { + mExitSecureCallback.onKeyguardExitResult(authenticated); + } catch (RemoteException e) { + Slog.w(TAG, "Failed to call onKeyguardExitResult(" + authenticated + ")", e); + } + mExitSecureCallback = null; if (authenticated) { @@ -1120,7 +1142,7 @@ public class KeyguardViewMediator { handleNotifyScreenOff(); return; case NOTIFY_SCREEN_ON: - handleNotifyScreenOn((KeyguardViewManager.ShowListener)msg.obj); + handleNotifyScreenOn((IKeyguardShowCallback) msg.obj); return; case WAKE_WHEN_READY: handleWakeWhenReady(msg.arg1); @@ -1164,10 +1186,8 @@ public class KeyguardViewMediator { } private void sendUserPresentBroadcast() { - if (!(mContext instanceof Activity)) { - final UserHandle currentUser = new UserHandle(mLockPatternUtils.getCurrentUser()); - mContext.sendBroadcastAsUser(mUserPresentIntent, currentUser); - } + final UserHandle currentUser = new UserHandle(mLockPatternUtils.getCurrentUser()); + mContext.sendBroadcastAsUser(USER_PRESENT_INTENT, currentUser); } /** @@ -1176,7 +1196,7 @@ public class KeyguardViewMediator { */ private void handleKeyguardDoneDrawing() { synchronized(this) { - if (false) Log.d(TAG, "handleKeyguardDoneDrawing"); + if (DEBUG) Log.d(TAG, "handleKeyguardDoneDrawing"); if (mWaitingUntilKeyguardVisible) { if (DEBUG) Log.d(TAG, "handleKeyguardDoneDrawing: notifying mWaitingUntilKeyguardVisible"); mWaitingUntilKeyguardVisible = false; @@ -1232,8 +1252,12 @@ public class KeyguardViewMediator { */ private void handleShow(Bundle options) { synchronized (KeyguardViewMediator.this) { - if (DEBUG) Log.d(TAG, "handleShow"); - if (!mSystemReady) return; + if (!mSystemReady) { + if (DEBUG) Log.d(TAG, "ignoring handleShow because system is not ready."); + return; + } else { + if (DEBUG) Log.d(TAG, "handleShow"); + } mKeyguardViewManager.show(options); mShowing = true; @@ -1406,10 +1430,10 @@ public class KeyguardViewMediator { * Handle message sent by {@link #notifyScreenOnLocked()} * @see #NOTIFY_SCREEN_ON */ - private void handleNotifyScreenOn(KeyguardViewManager.ShowListener showListener) { + private void handleNotifyScreenOn(IKeyguardShowCallback callback) { synchronized (KeyguardViewMediator.this) { if (DEBUG) Log.d(TAG, "handleNotifyScreenOn"); - mKeyguardViewManager.onScreenTurnedOn(showListener); + mKeyguardViewManager.onScreenTurnedOn(callback); } } diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewStateManager.java b/packages/Keyguard/src/com/android/keyguard/KeyguardViewStateManager.java index 4410063..e85f6df 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewStateManager.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardViewStateManager.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.android.internal.policy.impl.keyguard; +package com.android.keyguard; import android.os.Handler; import android.os.Looper; diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetCarousel.java b/packages/Keyguard/src/com/android/keyguard/KeyguardWidgetCarousel.java index 257fd27..98b31b7 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetCarousel.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardWidgetCarousel.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.android.internal.policy.impl.keyguard; +package com.android.keyguard; import android.animation.Animator; import android.animation.AnimatorSet; @@ -26,8 +26,6 @@ import android.view.animation.AccelerateInterpolator; import android.view.animation.DecelerateInterpolator; import android.view.animation.Interpolator; -import com.android.internal.R; - import java.util.ArrayList; public class KeyguardWidgetCarousel extends KeyguardWidgetPager { diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetFrame.java b/packages/Keyguard/src/com/android/keyguard/KeyguardWidgetFrame.java index babb9cb..81f6221 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetFrame.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardWidgetFrame.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.internal.policy.impl.keyguard; +package com.android.keyguard; import android.animation.Animator; import android.animation.ObjectAnimator; @@ -37,8 +37,6 @@ import android.view.MotionEvent; import android.view.View; import android.widget.FrameLayout; -import com.android.internal.R; - public class KeyguardWidgetFrame extends FrameLayout { private final static PorterDuffXfermode sAddBlendMode = new PorterDuffXfermode(PorterDuff.Mode.ADD); @@ -114,9 +112,9 @@ public class KeyguardWidgetFrame extends FrameLayout { // This will be overriden on phones based on the current security mode, however on tablets // we need to specify a height. mSmallWidgetHeight = - res.getDimensionPixelSize(com.android.internal.R.dimen.kg_small_widget_height); + res.getDimensionPixelSize(R.dimen.kg_small_widget_height); mBackgroundDrawable = res.getDrawable(R.drawable.kg_widget_bg_padded); - mGradientColor = res.getColor(com.android.internal.R.color.kg_widget_pager_gradient); + mGradientColor = res.getColor(R.color.kg_widget_pager_gradient); mGradientPaint.setXfermode(sAddBlendMode); } diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetPager.java b/packages/Keyguard/src/com/android/keyguard/KeyguardWidgetPager.java index ad5e257..0d92e11 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetPager.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardWidgetPager.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.android.internal.policy.impl.keyguard; +package com.android.keyguard; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; @@ -350,7 +350,7 @@ public class KeyguardWidgetPager extends PagedView implements PagedView.PageSwit View content = (widget == frame) ? frame.getContent() : widget; if (content != null) { String contentDescription = mContext.getString( - com.android.internal.R.string.keyguard_accessibility_widget, + R.string.keyguard_accessibility_widget, content.getContentDescription()); frame.setContentDescription(contentDescription); } @@ -846,7 +846,7 @@ public class KeyguardWidgetPager extends PagedView implements PagedView.PageSwit setCurrentPage(mCurrentPage + 1); mAddWidgetView = null; } else if (mAddWidgetView == null && !enabled) { - View addWidget = findViewById(com.android.internal.R.id.keyguard_add_widget); + View addWidget = findViewById(R.id.keyguard_add_widget); if (addWidget != null) { mAddWidgetView = addWidget; removeView(addWidget); @@ -856,7 +856,7 @@ public class KeyguardWidgetPager extends PagedView implements PagedView.PageSwit boolean isAddPage(int pageIndex) { View v = getChildAt(pageIndex); - return v != null && v.getId() == com.android.internal.R.id.keyguard_add_widget; + return v != null && v.getId() == R.id.keyguard_add_widget; } boolean isCameraPage(int pageIndex) { diff --git a/policy/src/com/android/internal/policy/impl/keyguard/LiftToActivateListener.java b/packages/Keyguard/src/com/android/keyguard/LiftToActivateListener.java index 818108c..e59602b 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/LiftToActivateListener.java +++ b/packages/Keyguard/src/com/android/keyguard/LiftToActivateListener.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.internal.policy.impl.keyguard; +package com.android.keyguard; import android.content.Context; import android.view.MotionEvent; diff --git a/policy/src/com/android/internal/policy/impl/keyguard/MultiPaneChallengeLayout.java b/packages/Keyguard/src/com/android/keyguard/MultiPaneChallengeLayout.java index 0ca46c3..8fd39c0 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/MultiPaneChallengeLayout.java +++ b/packages/Keyguard/src/com/android/keyguard/MultiPaneChallengeLayout.java @@ -14,9 +14,7 @@ * limitations under the License. */ -package com.android.internal.policy.impl.keyguard; - -import com.android.internal.R; +package com.android.keyguard; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; @@ -72,7 +70,7 @@ public class MultiPaneChallengeLayout extends ViewGroup implements ChallengeLayo final TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.MultiPaneChallengeLayout, defStyleAttr, 0); - mOrientation = a.getInt(R.styleable.MultiPaneChallengeLayout_orientation, + mOrientation = a.getInt(R.styleable.MultiPaneChallengeLayout_android_orientation, HORIZONTAL); a.recycle(); diff --git a/policy/src/com/android/internal/policy/impl/keyguard/NumPadKey.java b/packages/Keyguard/src/com/android/keyguard/NumPadKey.java index a0038bc..532670f 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/NumPadKey.java +++ b/packages/Keyguard/src/com/android/keyguard/NumPadKey.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.internal.policy.impl.keyguard; +package com.android.keyguard; import android.content.Context; import android.content.res.TypedArray; @@ -26,7 +26,6 @@ import android.view.View; import android.widget.Button; import android.widget.TextView; -import com.android.internal.R; import com.android.internal.widget.LockPatternUtils; public class NumPadKey extends Button { diff --git a/policy/src/com/android/internal/policy/impl/keyguard/ObscureSpeechDelegate.java b/packages/Keyguard/src/com/android/keyguard/ObscureSpeechDelegate.java index af043ab..573122a 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/ObscureSpeechDelegate.java +++ b/packages/Keyguard/src/com/android/keyguard/ObscureSpeechDelegate.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.internal.policy.impl.keyguard; +package com.android.keyguard; import android.content.ContentResolver; import android.content.Context; diff --git a/policy/src/com/android/internal/policy/impl/keyguard/PagedView.java b/packages/Keyguard/src/com/android/keyguard/PagedView.java index 539ec1a..5c2413a 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/PagedView.java +++ b/packages/Keyguard/src/com/android/keyguard/PagedView.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.internal.policy.impl.keyguard; +package com.android.keyguard; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; @@ -53,8 +53,6 @@ import android.view.animation.Interpolator; import android.view.animation.LinearInterpolator; import android.widget.Scroller; -import com.android.internal.R; - import java.util.ArrayList; /** diff --git a/policy/src/com/android/internal/policy/impl/keyguard/SecurityMessageDisplay.java b/packages/Keyguard/src/com/android/keyguard/SecurityMessageDisplay.java index 7760279..e2f91e3 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/SecurityMessageDisplay.java +++ b/packages/Keyguard/src/com/android/keyguard/SecurityMessageDisplay.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.internal.policy.impl.keyguard; +package com.android.keyguard; public interface SecurityMessageDisplay { public void setMessage(CharSequence msg, boolean important); diff --git a/policy/src/com/android/internal/policy/impl/keyguard/SlidingChallengeLayout.java b/packages/Keyguard/src/com/android/keyguard/SlidingChallengeLayout.java index 073225f..05b35a1 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/SlidingChallengeLayout.java +++ b/packages/Keyguard/src/com/android/keyguard/SlidingChallengeLayout.java @@ -14,9 +14,7 @@ * limitations under the License. */ -package com.android.internal.policy.impl.keyguard; - -import com.android.internal.R; +package com.android.keyguard; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; diff --git a/packages/SystemUI/AndroidManifest.xml b/packages/SystemUI/AndroidManifest.xml index 66080f3..4bb44af 100644 --- a/packages/SystemUI/AndroidManifest.xml +++ b/packages/SystemUI/AndroidManifest.xml @@ -1,6 +1,7 @@ <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:androidprv="http://schemas.android.com/apk/prv/res/android" package="com.android.systemui" + android:sharedUserId="android.uid.systemui" coreApp="true"> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> @@ -71,6 +72,7 @@ android:hardwareAccelerated="true" android:label="@string/app_label" android:icon="@*android:drawable/platlogo" + android:process="com.android.systemui" android:supportsRtl="true"> <!-- Broadcast receiver that gets the broadcast at boot time and starts diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml index c40e26d..48edc73 100644 --- a/packages/SystemUI/res/values-ar/strings.xml +++ b/packages/SystemUI/res/values-ar/strings.xml @@ -189,7 +189,7 @@ <string name="quick_settings_location_label" msgid="3292451598267467545">"الموقع المستخدم"</string> <string name="quick_settings_media_device_label" msgid="1302906836372603762">"جهاز الوسائط"</string> <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string> - <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"مكالمات الطوارئ فقط"</string> + <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"مكالمات طوارئ فقط"</string> <string name="quick_settings_settings_label" msgid="5326556592578065401">"الإعدادات"</string> <string name="quick_settings_time_label" msgid="4635969182239736408">"الوقت"</string> <string name="quick_settings_user_label" msgid="5238995632130897840">"أنا"</string> diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml index 8c2dd8e..580bfe7 100644 --- a/packages/SystemUI/res/values-ca/strings.xml +++ b/packages/SystemUI/res/values-ca/strings.xml @@ -147,7 +147,7 @@ <string name="accessibility_ringer_silent" msgid="9061243307939135383">"Mode silenci."</string> <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"S\'ha omès <xliff:g id="APP">%s</xliff:g>."</string> <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Notificació omesa."</string> - <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Capa de notificació."</string> + <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Àrea de notificacions"</string> <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Configuració ràpida."</string> <string name="accessibility_desc_recent_apps" msgid="9014032916410590027">"Aplicacions recents."</string> <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"Usuari <xliff:g id="USER">%s</xliff:g>."</string> diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml index d619de1..0789b29 100644 --- a/packages/SystemUI/res/values-es-rUS/strings.xml +++ b/packages/SystemUI/res/values-es-rUS/strings.xml @@ -133,7 +133,7 @@ <string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string> <string name="accessibility_no_sim" msgid="8274017118472455155">"No hay tarjeta SIM."</string> <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Conexión mediante Bluetooth"</string> - <string name="accessibility_airplane_mode" msgid="834748999790763092">"Modo de avión"</string> + <string name="accessibility_airplane_mode" msgid="834748999790763092">"Modo avión"</string> <!-- String.format failed for translation --> <!-- no translation found for accessibility_battery_level (7451474187113371965) --> <skip /> @@ -154,7 +154,7 @@ <string name="accessibility_quick_settings_wifi" msgid="6099781031669728709">"<xliff:g id="SIGNAL">%1$s</xliff:g>. <xliff:g id="NETWORK">%2$s</xliff:g>"</string> <string name="accessibility_quick_settings_mobile" msgid="4876806564086241341">"Móvil <xliff:g id="SIGNAL">%1$s</xliff:g>. <xliff:g id="TYPE">%2$s</xliff:g>. <xliff:g id="NETWORK">%3$s</xliff:g>."</string> <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Batería <xliff:g id="STATE">%s</xliff:g>"</string> - <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Modo de avión <xliff:g id="STATE">%s</xliff:g>"</string> + <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Modo avión <xliff:g id="STATE">%s</xliff:g>"</string> <string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth <xliff:g id="STATE">%s</xliff:g>"</string> <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Alarma: <xliff:g id="TIME">%s</xliff:g>"</string> <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Datos de 2G-3G inhabilitados"</string> diff --git a/packages/SystemUI/res/values-in/strings.xml b/packages/SystemUI/res/values-in/strings.xml index 26151dd..581c56c 100644 --- a/packages/SystemUI/res/values-in/strings.xml +++ b/packages/SystemUI/res/values-in/strings.xml @@ -42,7 +42,7 @@ <string name="status_bar_settings_settings_button" msgid="3023889916699270224">"Setelan"</string> <string name="status_bar_settings_wifi_button" msgid="1733928151698311923">"Wi-Fi"</string> <string name="status_bar_settings_airplane" msgid="4879879698500955300">"Mode pesawat"</string> - <string name="status_bar_settings_auto_rotation" msgid="3790482541357798421">"Putar layar secara otomatis"</string> + <string name="status_bar_settings_auto_rotation" msgid="3790482541357798421">"Rotasi layar otomatis"</string> <string name="status_bar_settings_mute_label" msgid="554682549917429396">"BUNGKAM"</string> <string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"AUTO"</string> <string name="status_bar_settings_notifications" msgid="397146176280905137">"Pemberitahuan"</string> diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml index c454bb1..fff1aa0 100644 --- a/packages/SystemUI/res/values-pl/strings.xml +++ b/packages/SystemUI/res/values-pl/strings.xml @@ -157,14 +157,14 @@ <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Alarm ustawiony na <xliff:g id="TIME">%s</xliff:g>."</string> <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Wyłączono transmisję danych 2G/3G"</string> <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Wyłączono transmisję danych 4G"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Wyłączono komórkową transmisję danych"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Transmisja danych została wyłączona"</string> <string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"Wyłączono transmisję danych"</string> - <string name="data_usage_disabled_dialog" msgid="3853117269051806280">"Osiągnięto określony limit wykorzystania transmisji danych."\n\n"Jeśli ponownie włączysz przesyłanie danych, operator może naliczyć opłaty."</string> + <string name="data_usage_disabled_dialog" msgid="3853117269051806280">"Ustawiony limit transmisji danych został osiągnięty."\n\n"Jeśli ponownie włączysz przesyłanie danych, operator może naliczyć dodatkowe opłaty."</string> <string name="data_usage_disabled_dialog_enable" msgid="7729772039208664606">"Włącz transmisję danych"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Brak internetu"</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi: połączono"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"Wyszukiwanie sygnału GPS"</string> - <string name="gps_notification_found_text" msgid="4619274244146446464">"Lokalizacja ustawiona według GPS"</string> + <string name="gps_notification_found_text" msgid="4619274244146446464">"Lokalizacja z GPSa"</string> <string name="accessibility_clear_all" msgid="5235938559247164925">"Usuń wszystkie powiadomienia."</string> <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"O aplikacji"</string> <string name="close_universe" msgid="3736513750241754348">"Zamknij"</string> diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml index 4618559..44b4b4e 100644 --- a/packages/SystemUI/res/values-ro/strings.xml +++ b/packages/SystemUI/res/values-ro/strings.xml @@ -20,7 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7164937344850004466">"UI sistem"</string> - <string name="status_bar_clear_all_button" msgid="7774721344716731603">"Ştergeţi"</string> + <string name="status_bar_clear_all_button" msgid="7774721344716731603">"Ștergeţi"</string> <string name="status_bar_do_not_disturb_button" msgid="5812628897510997853">"Nu deranjaţi"</string> <string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Afişaţi notificări"</string> <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Eliminaţi din listă"</string> @@ -47,7 +47,7 @@ <string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"AUTOM."</string> <string name="status_bar_settings_notifications" msgid="397146176280905137">"Notificări"</string> <string name="bluetooth_tethered" msgid="7094101612161133267">"Conectat prin tethering prin Bluetooth"</string> - <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"Configuraţi metode de intrare"</string> + <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"Setaţi metode introducere text"</string> <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"Tastatură fizică"</string> <string name="usb_device_permission_prompt" msgid="834698001271562057">"Permiteţi aplicaţiei <xliff:g id="APPLICATION">%1$s</xliff:g> să acceseze dispozitivul USB?"</string> <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"Permiteţi aplicaţiei <xliff:g id="APPLICATION">%1$s</xliff:g> să acceseze accesoriul USB?"</string> @@ -137,7 +137,7 @@ <string name="accessibility_battery_level" msgid="7451474187113371965">"Baterie: <xliff:g id="NUMBER">%d</xliff:g> procente."</string> <string name="accessibility_settings_button" msgid="799583911231893380">"Setări de sistem."</string> <string name="accessibility_notifications_button" msgid="4498000369779421892">"Notificări."</string> - <string name="accessibility_remove_notification" msgid="3603099514902182350">"Ştergeţi notificarea."</string> + <string name="accessibility_remove_notification" msgid="3603099514902182350">"Ștergeţi notificarea."</string> <string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS activat."</string> <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Se obţine GPS."</string> <string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter activat."</string> @@ -165,7 +165,7 @@ <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi conectat"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"Se caută GPS"</string> <string name="gps_notification_found_text" msgid="4619274244146446464">"Locaţie setată prin GPS"</string> - <string name="accessibility_clear_all" msgid="5235938559247164925">"Ştergeţi toate notificările."</string> + <string name="accessibility_clear_all" msgid="5235938559247164925">"Ștergeţi toate notificările."</string> <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Informaţii despre aplicaţie"</string> <string name="close_universe" msgid="3736513750241754348">"Închideţi"</string> <string name="notifications_off_title" msgid="8936620513608443224">"Notificările sunt dezactivate"</string> diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml index ccf4fd4..3d0ddd4 100644 --- a/packages/SystemUI/res/values-ru/strings.xml +++ b/packages/SystemUI/res/values-ru/strings.xml @@ -77,7 +77,7 @@ <string name="use_ptp_button_title" msgid="7517127540301625751">"Установить как камеру (PTP)"</string> <string name="installer_cd_button_title" msgid="2312667578562201583">"Установить приложение"</string> <string name="accessibility_back" msgid="567011538994429120">"Назад"</string> - <string name="accessibility_home" msgid="8217216074895377641">"Главная страница"</string> + <string name="accessibility_home" msgid="8217216074895377641">"Домой"</string> <string name="accessibility_menu" msgid="316839303324695949">"Меню"</string> <string name="accessibility_recent" msgid="8571350598987952883">"Недавние приложения"</string> <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Кнопка переключения способа ввода."</string> @@ -118,8 +118,8 @@ <string name="accessibility_two_bars" msgid="6437363648385206679">"два деления"</string> <string name="accessibility_three_bars" msgid="2648241415119396648">"три деления"</string> <string name="accessibility_signal_full" msgid="9122922886519676839">"надежный сигнал"</string> - <string name="accessibility_desc_on" msgid="2385254693624345265">"ВКЛ"</string> - <string name="accessibility_desc_off" msgid="6475508157786853157">"ВЫКЛ"</string> + <string name="accessibility_desc_on" msgid="2385254693624345265">"Вкл."</string> + <string name="accessibility_desc_off" msgid="6475508157786853157">"Выкл."</string> <string name="accessibility_desc_connected" msgid="8366256693719499665">"Подключено"</string> <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string> <string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string> diff --git a/packages/SystemUI/res/values-sv/strings.xml b/packages/SystemUI/res/values-sv/strings.xml index 91214d1..a58c9a0 100644 --- a/packages/SystemUI/res/values-sv/strings.xml +++ b/packages/SystemUI/res/values-sv/strings.xml @@ -181,7 +181,7 @@ <string name="quick_settings_battery_charged_label" msgid="8865413079414246081">"Laddat"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> enheter)"</string> - <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth inaktivt"</string> + <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth av"</string> <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Ljusstyrka"</string> <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Rotera automatiskt"</string> <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Rotationen har låsts"</string> @@ -196,9 +196,9 @@ <string name="quick_settings_wifi_label" msgid="9135344704899546041">"Wi-Fi"</string> <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Ej ansluten"</string> <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Inget nätverk"</string> - <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi är inaktiverat"</string> - <string name="quick_settings_wifi_display_label" msgid="6893592964463624333">"Wi-Fi visas"</string> - <string name="quick_settings_wifi_display_no_connection_label" msgid="2355298740765736918">"Trådlös visning"</string> + <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi av"</string> + <string name="quick_settings_wifi_display_label" msgid="6893592964463624333">"Trådlös skärm"</string> + <string name="quick_settings_wifi_display_no_connection_label" msgid="2355298740765736918">"Trådlös skärm"</string> <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Ljusstyrka"</string> <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTO"</string> <string name="status_bar_help_title" msgid="1199237744086469217">"Meddelanden visas här"</string> diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml index 7750e77..f43eabe 100644 --- a/packages/SystemUI/res/values-uk/strings.xml +++ b/packages/SystemUI/res/values-uk/strings.xml @@ -35,10 +35,10 @@ <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Поточні"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Сповіщення"</string> <string name="battery_low_title" msgid="2783104807551211639">"Підключіть зарядний пристрій"</string> - <string name="battery_low_subtitle" msgid="1752040062087829196">"Батарея виснажується."</string> + <string name="battery_low_subtitle" msgid="1752040062087829196">"Акумулятор розряджається."</string> <string name="battery_low_percent_format" msgid="1077244949318261761">"Залишилося <xliff:g id="NUMBER">%d%%</xliff:g>"</string> <string name="invalid_charger" msgid="4549105996740522523">"Заряджання USB не підтримується."\n"Використовуйте лише наданий у комплекті зарядний пристрій."</string> - <string name="battery_low_why" msgid="7279169609518386372">"Викор. батареї"</string> + <string name="battery_low_why" msgid="7279169609518386372">"Використання акумулятора"</string> <string name="status_bar_settings_settings_button" msgid="3023889916699270224">"Налаштування"</string> <string name="status_bar_settings_wifi_button" msgid="1733928151698311923">"Wi-Fi"</string> <string name="status_bar_settings_airplane" msgid="4879879698500955300">"Режим польоту"</string> @@ -85,11 +85,11 @@ <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Збільшення екрана."</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth під’єднано."</string> <string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"Bluetooth від’єднано."</string> - <string name="accessibility_no_battery" msgid="358343022352820946">"Немає заряду батареї."</string> - <string name="accessibility_battery_one_bar" msgid="7774887721891057523">"Одна смужка заряду батареї."</string> - <string name="accessibility_battery_two_bars" msgid="8500650438735009973">"Дві смужки заряду батареї."</string> - <string name="accessibility_battery_three_bars" msgid="2302983330865040446">"Три смужки заряду батареї."</string> - <string name="accessibility_battery_full" msgid="8909122401720158582">"Повний заряд батареї"</string> + <string name="accessibility_no_battery" msgid="358343022352820946">"Акумулятор розряджений."</string> + <string name="accessibility_battery_one_bar" msgid="7774887721891057523">"Заряд акумулятора: одна смужка."</string> + <string name="accessibility_battery_two_bars" msgid="8500650438735009973">"Заряд акумулятора: дві смужки."</string> + <string name="accessibility_battery_three_bars" msgid="2302983330865040446">"Заряд акумулятора: три смужки."</string> + <string name="accessibility_battery_full" msgid="8909122401720158582">"Акумулятор заряджений."</string> <string name="accessibility_no_phone" msgid="4894708937052611281">"Немає сигналу телефону."</string> <string name="accessibility_phone_one_bar" msgid="687699278132664115">"Одна смужка сигналу телефону."</string> <string name="accessibility_phone_two_bars" msgid="8384905382804815201">"Дві смужки сигналу телефону."</string> @@ -134,7 +134,7 @@ <string name="accessibility_no_sim" msgid="8274017118472455155">"Немає SIM-карти."</string> <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Прив’язка Bluetooth."</string> <string name="accessibility_airplane_mode" msgid="834748999790763092">"Режим польоту."</string> - <string name="accessibility_battery_level" msgid="7451474187113371965">"Відсотків батареї: <xliff:g id="NUMBER">%d</xliff:g>."</string> + <string name="accessibility_battery_level" msgid="7451474187113371965">"Заряд акумулятора: <xliff:g id="NUMBER">%d</xliff:g>."</string> <string name="accessibility_settings_button" msgid="799583911231893380">"Налаштування системи."</string> <string name="accessibility_notifications_button" msgid="4498000369779421892">"Сповіщення."</string> <string name="accessibility_remove_notification" msgid="3603099514902182350">"Очистити сповіщення."</string> diff --git a/packages/SystemUI/src/com/android/systemui/SystemUIService.java b/packages/SystemUI/src/com/android/systemui/SystemUIService.java index 1f3e942..e1aed82 100644 --- a/packages/SystemUI/src/com/android/systemui/SystemUIService.java +++ b/packages/SystemUI/src/com/android/systemui/SystemUIService.java @@ -20,19 +20,13 @@ import java.io.FileDescriptor; import java.io.PrintWriter; import android.app.Service; -import android.content.BroadcastReceiver; -import android.content.Context; import android.content.Intent; -import android.content.pm.PackageManager; import android.content.res.Configuration; -import android.os.Binder; import android.os.IBinder; import android.os.RemoteException; -import android.os.ServiceManager; import android.util.Slog; import android.view.IWindowManager; import android.view.WindowManagerGlobal; -import android.view.accessibility.AccessibilityManager; public class SystemUIService extends Service { static final String TAG = "SystemUIService"; @@ -69,10 +63,6 @@ public class SystemUIService extends Service { @Override public void onCreate() { - // Tell the accessibility layer that this process will - // run as the current user, i.e. run across users. - AccessibilityManager.createAsSharedAcrossUsers(this); - // Pick status bar or system bar. IWindowManager wm = WindowManagerGlobal.getWindowManagerService(); try { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/FixedSizeDrawable.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/FixedSizeDrawable.java index 8f2f5f9..0e8095c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/FixedSizeDrawable.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/FixedSizeDrawable.java @@ -60,6 +60,10 @@ public class FixedSizeDrawable extends Drawable { mDrawable.setAlpha(alpha); } + public int getAlpha() { + return mDrawable.getAlpha(); + } + public void setColorFilter(ColorFilter cf) { mDrawable.setColorFilter(cf); } diff --git a/policy/src/com/android/internal/policy/impl/KeyguardServiceWrapper.java b/policy/src/com/android/internal/policy/impl/KeyguardServiceWrapper.java new file mode 100644 index 0000000..e649125 --- /dev/null +++ b/policy/src/com/android/internal/policy/impl/KeyguardServiceWrapper.java @@ -0,0 +1,211 @@ +/* + * Copyright (C) 2013 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 com.android.internal.policy.impl; + +import android.os.Bundle; +import android.os.IBinder; +import android.os.RemoteException; +import android.util.Slog; + +import com.android.internal.policy.IKeyguardShowCallback; +import com.android.internal.policy.IKeyguardExitCallback; +import com.android.internal.policy.IKeyguardService; + +/** + * A wrapper class for KeyguardService. It implements IKeyguardService to ensure the interface + * remains consistent. + * + */ +public class KeyguardServiceWrapper implements IKeyguardService { + private IKeyguardService mService; + private String TAG = "KeyguardServiceWrapper"; + + public KeyguardServiceWrapper(IKeyguardService service) { + mService = service; + } + + public boolean isShowing() { + try { + return mService.isShowing(); + } catch (RemoteException e) { + Slog.w(TAG , "Remote Exception", e); + } + return false; + } + + public boolean isSecure() { + try { + return mService.isSecure(); + } catch (RemoteException e) { + Slog.w(TAG , "Remote Exception", e); + } + return false; // TODO cache state + } + + public boolean isShowingAndNotHidden() { + try { + return mService.isShowingAndNotHidden(); + } catch (RemoteException e) { + Slog.w(TAG , "Remote Exception", e); + } + return false; // TODO cache state + } + + public boolean isInputRestricted() { + try { + return mService.isInputRestricted(); + } catch (RemoteException e) { + Slog.w(TAG , "Remote Exception", e); + } + return false; // TODO cache state + } + + public boolean isDismissable() { + try { + return mService.isDismissable(); + } catch (RemoteException e) { + Slog.w(TAG , "Remote Exception", e); + } + return true; // TODO cache state + } + + public void verifyUnlock(IKeyguardExitCallback callback) { + try { + mService.verifyUnlock(callback); + } catch (RemoteException e) { + Slog.w(TAG , "Remote Exception", e); + } + } + + public void keyguardDone(boolean authenticated, boolean wakeup) { + try { + mService.keyguardDone(authenticated, wakeup); + } catch (RemoteException e) { + Slog.w(TAG , "Remote Exception", e); + } + } + + public void setHidden(boolean isHidden) { + try { + mService.setHidden(isHidden); + } catch (RemoteException e) { + Slog.w(TAG , "Remote Exception", e); + } + } + + public void dismiss() { + try { + mService.dismiss(); + } catch (RemoteException e) { + Slog.w(TAG , "Remote Exception", e); + } + } + + public void onWakeKeyWhenKeyguardShowing(int keyCode) { + try { + mService.onWakeKeyWhenKeyguardShowing(keyCode); + } catch (RemoteException e) { + Slog.w(TAG , "Remote Exception", e); + } + } + + public void onWakeMotionWhenKeyguardShowing() { + try { + mService.onWakeMotionWhenKeyguardShowing(); + } catch (RemoteException e) { + Slog.w(TAG , "Remote Exception", e); + } + } + + public void onDreamingStarted() { + try { + mService.onDreamingStarted(); + } catch (RemoteException e) { + Slog.w(TAG , "Remote Exception", e); + } + } + + public void onDreamingStopped() { + try { + mService.onDreamingStopped(); + } catch (RemoteException e) { + Slog.w(TAG , "Remote Exception", e); + } + } + + public void onScreenTurnedOff(int reason) { + try { + mService.onScreenTurnedOff(reason); + } catch (RemoteException e) { + Slog.w(TAG , "Remote Exception", e); + } + } + + public void onScreenTurnedOn(IKeyguardShowCallback result) { + try { + mService.onScreenTurnedOn(result); + } catch (RemoteException e) { + Slog.w(TAG , "Remote Exception", e); + } + } + + public void setKeyguardEnabled(boolean enabled) { + try { + mService.setKeyguardEnabled(enabled); + } catch (RemoteException e) { + Slog.w(TAG , "Remote Exception", e); + } + } + + public void onSystemReady() { + try { + mService.onSystemReady(); + } catch (RemoteException e) { + Slog.w(TAG , "Remote Exception", e); + } + } + + public void doKeyguardTimeout(Bundle options) { + try { + mService.doKeyguardTimeout(options); + } catch (RemoteException e) { + Slog.w(TAG , "Remote Exception", e); + } + } + + public void setCurrentUser(int userId) { + try { + mService.setCurrentUser(userId); + } catch (RemoteException e) { + Slog.w(TAG , "Remote Exception", e); + } + } + + public void showAssistant() { + try { + mService.showAssistant(); + } catch (RemoteException e) { + Slog.w(TAG , "Remote Exception", e); + } + } + + @Override + public IBinder asBinder() { + return mService.asBinder(); + } + +}
\ No newline at end of file diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java index bb05325..46f0fd2 100644 --- a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java +++ b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java @@ -85,13 +85,13 @@ import android.view.WindowManager; import android.view.WindowManagerGlobal; import android.view.WindowManagerPolicy; import android.view.accessibility.AccessibilityEvent; +import android.view.accessibility.AccessibilityManager; import android.view.animation.Animation; import android.view.animation.AnimationUtils; import com.android.internal.R; import com.android.internal.policy.PolicyManager; -import com.android.internal.policy.impl.keyguard.KeyguardViewManager; -import com.android.internal.policy.impl.keyguard.KeyguardViewMediator; +import com.android.internal.policy.impl.keyguard.KeyguardServiceDelegate; import com.android.internal.statusbar.IStatusBarService; import com.android.internal.telephony.ITelephony; import com.android.internal.widget.PointerLocationView; @@ -151,6 +151,11 @@ public class PhoneWindowManager implements WindowManagerPolicy { static final int SYSTEM_UI_CHANGING_LAYOUT = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN; + /** + * Keyguard stuff + */ + private WindowState mKeyguardScrim; + /* Table of Application Launch keys. Maps from key codes to intent categories. * * These are special keys that are used to launch particular kinds of applications, @@ -222,7 +227,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { int[] mNavigationBarWidthForRotation = new int[4]; WindowState mKeyguard = null; - KeyguardViewMediator mKeyguardMediator; + KeyguardServiceDelegate mKeyguardDelegate; GlobalActions mGlobalActions; volatile boolean mPowerKeyHandled; // accessed from input reader and handler thread boolean mPendingPowerKeyUpCanceled; @@ -436,6 +441,9 @@ public class PhoneWindowManager implements WindowManagerPolicy { private boolean mPowerKeyTriggered; private long mPowerKeyTime; + /* The number of steps between min and max brightness */ + private static final int BRIGHTNESS_STEPS = 10; + SettingsObserver mSettingsObserver; ShortcutManager mShortcutManager; PowerManager.WakeLock mBroadcastWakeLock; @@ -656,7 +664,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { } private long getScreenshotChordLongPressDelay() { - if (mKeyguardMediator.isShowing()) { + if (mKeyguardDelegate.isShowing()) { // Double the time it takes to take a screenshot from the keyguard return (long) (KEYGUARD_SCREENSHOT_CHORD_DELAY_MULTIPLIER * ViewConfiguration.getGlobalActionKeyTimeout()); @@ -719,7 +727,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { if (keyguardShowing) { // since it took two seconds of long press to bring this up, // poke the wake lock so they have some time to see the dialog. - mKeyguardMediator.userActivity(); + mPowerManager.userActivity(SystemClock.uptimeMillis(), false); } } @@ -813,10 +821,6 @@ public class PhoneWindowManager implements WindowManagerPolicy { mWindowManager = windowManager; mWindowManagerFuncs = windowManagerFuncs; mHeadless = "1".equals(SystemProperties.get("ro.config.headless", "0")); - if (!mHeadless) { - // don't create KeyguardViewMediator if headless - mKeyguardMediator = new KeyguardViewMediator(context, null); - } mHandler = new PolicyHandler(); mOrientationListener = new MyOrientationListener(mContext, mHandler); try { @@ -1228,6 +1232,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { case TYPE_DISPLAY_OVERLAY: case TYPE_HIDDEN_NAV_CONSUMER: case TYPE_KEYGUARD: + case TYPE_KEYGUARD_SCRIM: case TYPE_KEYGUARD_DIALOG: case TYPE_MAGNIFICATION_OVERLAY: case TYPE_NAVIGATION_BAR: @@ -1344,54 +1349,57 @@ public class PhoneWindowManager implements WindowManagerPolicy { case TYPE_INPUT_METHOD_DIALOG: // on-screen keyboards and other such input method user interfaces go here. return 11; + case TYPE_KEYGUARD_SCRIM: + // the safety window that shows behind keyguard while keyguard is starting + return 12; case TYPE_KEYGUARD: // the keyguard; nothing on top of these can take focus, since they are // responsible for power management when displayed. - return 12; - case TYPE_KEYGUARD_DIALOG: return 13; - case TYPE_STATUS_BAR_SUB_PANEL: + case TYPE_KEYGUARD_DIALOG: return 14; - case TYPE_STATUS_BAR: + case TYPE_STATUS_BAR_SUB_PANEL: return 15; - case TYPE_STATUS_BAR_PANEL: + case TYPE_STATUS_BAR: return 16; + case TYPE_STATUS_BAR_PANEL: + return 17; case TYPE_VOLUME_OVERLAY: // the on-screen volume indicator and controller shown when the user // changes the device volume - return 17; + return 18; case TYPE_SYSTEM_OVERLAY: // the on-screen volume indicator and controller shown when the user // changes the device volume - return 18; + return 19; case TYPE_NAVIGATION_BAR: // the navigation bar, if available, shows atop most things - return 19; + return 20; case TYPE_NAVIGATION_BAR_PANEL: // some panels (e.g. search) need to show on top of the navigation bar - return 20; + return 21; case TYPE_SYSTEM_ERROR: // system-level error dialogs - return 21; + return 22; case TYPE_MAGNIFICATION_OVERLAY: // used to highlight the magnified portion of a display - return 22; + return 23; case TYPE_DISPLAY_OVERLAY: // used to simulate secondary display devices - return 23; + return 24; case TYPE_DRAG: // the drag layer: input for drag-and-drop is associated with this window, // which sits above all other focusable windows - return 24; - case TYPE_SECURE_SYSTEM_OVERLAY: return 25; - case TYPE_BOOT_PROGRESS: + case TYPE_SECURE_SYSTEM_OVERLAY: return 26; + case TYPE_BOOT_PROGRESS: + return 27; case TYPE_POINTER: // the (mouse) pointer layer - return 27; - case TYPE_HIDDEN_NAV_CONSUMER: return 28; + case TYPE_HIDDEN_NAV_CONSUMER: + return 29; } Log.e(TAG, "Unknown window type: " + type); return 2; @@ -1482,6 +1490,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { case TYPE_DREAM: case TYPE_UNIVERSE_BACKGROUND: case TYPE_KEYGUARD: + case TYPE_KEYGUARD_SCRIM: return false; default: return true; @@ -1677,7 +1686,15 @@ public class PhoneWindowManager implements WindowManagerPolicy { return WindowManagerGlobal.ADD_MULTIPLE_SINGLETON; } mKeyguard = win; + hideKeyguardScrim(); + break; + case TYPE_KEYGUARD_SCRIM: + if (mKeyguardScrim != null) { + return WindowManagerGlobal.ADD_MULTIPLE_SINGLETON; + } + mKeyguardScrim = win; break; + } return WindowManagerGlobal.ADD_OKAY; } @@ -1687,12 +1704,25 @@ public class PhoneWindowManager implements WindowManagerPolicy { if (mStatusBar == win) { mStatusBar = null; } else if (mKeyguard == win) { + Log.v(TAG, "Removing keyguard window (Did it crash?)"); mKeyguard = null; - } else if (mNavigationBar == win) { + showKeyguardScrimLw(); + } else if (mKeyguardScrim == win) { + Log.v(TAG, "Removing keyguard scrim"); + mKeyguardScrim = null; + } if (mNavigationBar == win) { mNavigationBar = null; } } + private void showKeyguardScrimLw() { + Log.v(TAG, "*** SHOWING KEYGUARD SCRIM ***"); + } + + private void hideKeyguardScrim() { + Log.v(TAG, "*** HIDING KEYGUARD SCRIM ***"); + } + static final boolean PRINT_ANIM = false; /** {@inheritDoc} */ @@ -1916,6 +1946,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { if (attrs != null) { final int type = attrs.type; if (type == WindowManager.LayoutParams.TYPE_KEYGUARD + || type == WindowManager.LayoutParams.TYPE_KEYGUARD_SCRIM || type == WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG) { // the "app" is keyguard, so give it the key return 0; @@ -2034,6 +2065,43 @@ public class PhoneWindowManager implements WindowManagerPolicy { mHandler.post(mScreenshotRunnable); } return -1; + } else if (keyCode == KeyEvent.KEYCODE_BRIGHTNESS_UP + || keyCode == KeyEvent.KEYCODE_BRIGHTNESS_DOWN) { + if (down) { + int direction = keyCode == KeyEvent.KEYCODE_BRIGHTNESS_UP ? 1 : -1; + + // Disable autobrightness if it's on + int auto = Settings.System.getIntForUser( + mContext.getContentResolver(), + Settings.System.SCREEN_BRIGHTNESS_MODE, + Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL, + UserHandle.USER_CURRENT_OR_SELF); + if (auto != 0) { + Settings.System.putIntForUser(mContext.getContentResolver(), + Settings.System.SCREEN_BRIGHTNESS_MODE, + Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL, + UserHandle.USER_CURRENT_OR_SELF); + } + + int min = mPowerManager.getMinimumScreenBrightnessSetting(); + int max = mPowerManager.getMaximumScreenBrightnessSetting(); + int step = (max - min + BRIGHTNESS_STEPS - 1) / BRIGHTNESS_STEPS * direction; + int brightness = Settings.System.getIntForUser(mContext.getContentResolver(), + Settings.System.SCREEN_BRIGHTNESS, + mPowerManager.getDefaultScreenBrightnessSetting(), + UserHandle.USER_CURRENT_OR_SELF); + brightness += step; + // Make sure we don't go beyond the limits. + brightness = Math.min(max, brightness); + brightness = Math.max(min, brightness); + + Settings.System.putIntForUser(mContext.getContentResolver(), + Settings.System.SCREEN_BRIGHTNESS, brightness, + UserHandle.USER_CURRENT_OR_SELF); + Intent intent = new Intent(Intent.ACTION_SHOW_BRIGHTNESS_DIALOG); + mContext.sendBroadcastAsUser(intent, UserHandle.CURRENT_OR_SELF); + } + return -1; } // Shortcuts are invoked through Search+key, so intercept those here @@ -2272,12 +2340,12 @@ public class PhoneWindowManager implements WindowManagerPolicy { * given the situation with the keyguard. */ void launchHomeFromHotKey() { - if (mKeyguardMediator != null && mKeyguardMediator.isShowingAndNotHidden()) { + if (mKeyguardDelegate != null && mKeyguardDelegate.isShowingAndNotHidden()) { // don't launch home if keyguard showing - } else if (!mHideLockScreen && mKeyguardMediator.isInputRestricted()) { + } else if (!mHideLockScreen && mKeyguardDelegate.isInputRestricted()) { // when in keyguard restricted mode, must first verify unlock // before launching home - mKeyguardMediator.verifyUnlock(new OnKeyguardExitResult() { + mKeyguardDelegate.verifyUnlock(new OnKeyguardExitResult() { public void onKeyguardExitResult(boolean success) { if (success) { try { @@ -3259,17 +3327,17 @@ public class PhoneWindowManager implements WindowManagerPolicy { if (mKeyguard != null) { if (localLOGV) Log.v(TAG, "finishPostLayoutPolicyLw: mHideKeyguard=" + mHideLockScreen); - if (mDismissKeyguard != DISMISS_KEYGUARD_NONE && !mKeyguardMediator.isSecure()) { + if (mDismissKeyguard != DISMISS_KEYGUARD_NONE && !mKeyguardDelegate.isSecure()) { if (mKeyguard.hideLw(true)) { changes |= FINISH_LAYOUT_REDO_LAYOUT | FINISH_LAYOUT_REDO_CONFIG | FINISH_LAYOUT_REDO_WALLPAPER; } - if (mKeyguardMediator.isShowing()) { + if (mKeyguardDelegate.isShowing()) { mHandler.post(new Runnable() { @Override public void run() { - mKeyguardMediator.keyguardDone(false, false); + mKeyguardDelegate.keyguardDone(false, false); } }); } @@ -3279,7 +3347,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { | FINISH_LAYOUT_REDO_CONFIG | FINISH_LAYOUT_REDO_WALLPAPER; } - mKeyguardMediator.setHidden(true); + mKeyguardDelegate.setHidden(true); } else if (mDismissKeyguard != DISMISS_KEYGUARD_NONE) { // This is the case of keyguard isSecure() and not mHideLockScreen. if (mDismissKeyguard == DISMISS_KEYGUARD_START) { @@ -3289,11 +3357,11 @@ public class PhoneWindowManager implements WindowManagerPolicy { | FINISH_LAYOUT_REDO_CONFIG | FINISH_LAYOUT_REDO_WALLPAPER; } - mKeyguardMediator.setHidden(false); + mKeyguardDelegate.setHidden(false); mHandler.post(new Runnable() { @Override public void run() { - mKeyguardMediator.dismiss(); + mKeyguardDelegate.dismiss(); } }); } @@ -3304,7 +3372,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { | FINISH_LAYOUT_REDO_CONFIG | FINISH_LAYOUT_REDO_WALLPAPER; } - mKeyguardMediator.setHidden(false); + mKeyguardDelegate.setHidden(false); } } @@ -3355,7 +3423,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { if (lidOpen) { if (keyguardIsShowingTq()) { - mKeyguardMediator.onWakeKeyWhenKeyguardShowingTq(KeyEvent.KEYCODE_POWER); + mKeyguardDelegate.onWakeKeyWhenKeyguardShowingTq(KeyEvent.KEYCODE_POWER); } else { mPowerManager.wakeUp(SystemClock.uptimeMillis()); } @@ -3535,10 +3603,10 @@ public class PhoneWindowManager implements WindowManagerPolicy { // the same as if it were open and in front. // This will prevent any keys other than the power button from waking the screen // when the keyguard is hidden by another activity. - final boolean keyguardActive = (mKeyguardMediator == null ? false : + final boolean keyguardActive = (mKeyguardDelegate == null ? false : (isScreenOn ? - mKeyguardMediator.isShowingAndNotHidden() : - mKeyguardMediator.isShowing())); + mKeyguardDelegate.isShowingAndNotHidden() : + mKeyguardDelegate.isShowing())); if (keyCode == KeyEvent.KEYCODE_POWER) { policyFlags |= WindowManagerPolicy.FLAG_WAKE; @@ -3577,7 +3645,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { if (down && isWakeKey && isWakeKeyWhenScreenOff(keyCode)) { if (keyguardActive) { // If the keyguard is showing, let it wake the device when ready. - mKeyguardMediator.onWakeKeyWhenKeyguardShowingTq(keyCode); + mKeyguardDelegate.onWakeKeyWhenKeyguardShowingTq(keyCode); } else { // Otherwise, wake the device ourselves. result |= ACTION_WAKE_UP; @@ -3841,9 +3909,9 @@ public class PhoneWindowManager implements WindowManagerPolicy { final boolean isWakeMotion = (policyFlags & (WindowManagerPolicy.FLAG_WAKE | WindowManagerPolicy.FLAG_WAKE_DROPPED)) != 0; if (isWakeMotion) { - if (mKeyguardMediator != null && mKeyguardMediator.isShowing()) { + if (mKeyguardDelegate != null && mKeyguardDelegate.isShowing()) { // If the keyguard is showing, let it decide what to do with the wake motion. - mKeyguardMediator.onWakeMotionWhenKeyguardShowingTq(); + mKeyguardDelegate.onWakeMotionWhenKeyguardShowing(); } else { // Otherwise, wake the device ourselves. result |= ACTION_WAKE_UP; @@ -3926,12 +3994,12 @@ public class PhoneWindowManager implements WindowManagerPolicy { @Override public void onReceive(Context context, Intent intent) { if (Intent.ACTION_DREAMING_STARTED.equals(intent.getAction())) { - if (mKeyguardMediator != null) { - mKeyguardMediator.onDreamingStarted(); + if (mKeyguardDelegate != null) { + mKeyguardDelegate.onDreamingStarted(); } } else if (Intent.ACTION_DREAMING_STOPPED.equals(intent.getAction())) { - if (mKeyguardMediator != null) { - mKeyguardMediator.onDreamingStopped(); + if (mKeyguardDelegate != null) { + mKeyguardDelegate.onDreamingStopped(); } } } @@ -3965,8 +4033,8 @@ public class PhoneWindowManager implements WindowManagerPolicy { mScreenOnEarly = false; mScreenOnFully = false; } - if (mKeyguardMediator != null) { - mKeyguardMediator.onScreenTurnedOff(why); + if (mKeyguardDelegate != null) { + mKeyguardDelegate.onScreenTurnedOff(why); } synchronized (mLock) { updateOrientationListenerLp(); @@ -3993,9 +4061,9 @@ public class PhoneWindowManager implements WindowManagerPolicy { } private void waitForKeyguard(final ScreenOnListener screenOnListener) { - if (mKeyguardMediator != null) { + if (mKeyguardDelegate != null) { if (screenOnListener != null) { - mKeyguardMediator.onScreenTurnedOn(new KeyguardViewManager.ShowListener() { + mKeyguardDelegate.onScreenTurnedOn(new KeyguardServiceDelegate.ShowListener() { @Override public void onShown(IBinder windowToken) { waitForKeyguardWindowDrawn(windowToken, screenOnListener); @@ -4003,10 +4071,10 @@ public class PhoneWindowManager implements WindowManagerPolicy { }); return; } else { - mKeyguardMediator.onScreenTurnedOn(null); + mKeyguardDelegate.onScreenTurnedOn(null); } } else { - Slog.i(TAG, "No keyguard mediator!"); + Slog.i(TAG, "No keyguard interface!"); } finishScreenTurningOn(screenOnListener); } @@ -4061,21 +4129,21 @@ public class PhoneWindowManager implements WindowManagerPolicy { /** {@inheritDoc} */ public void enableKeyguard(boolean enabled) { - if (mKeyguardMediator != null) { - mKeyguardMediator.setKeyguardEnabled(enabled); + if (mKeyguardDelegate != null) { + mKeyguardDelegate.setKeyguardEnabled(enabled); } } /** {@inheritDoc} */ public void exitKeyguardSecurely(OnKeyguardExitResult callback) { - if (mKeyguardMediator != null) { - mKeyguardMediator.verifyUnlock(callback); + if (mKeyguardDelegate != null) { + mKeyguardDelegate.verifyUnlock(callback); } } private boolean keyguardIsShowingTq() { - if (mKeyguardMediator == null) return false; - return mKeyguardMediator.isShowingAndNotHidden(); + if (mKeyguardDelegate == null) return false; + return mKeyguardDelegate.isShowingAndNotHidden(); } @@ -4086,26 +4154,26 @@ public class PhoneWindowManager implements WindowManagerPolicy { /** {@inheritDoc} */ public boolean isKeyguardSecure() { - if (mKeyguardMediator == null) return false; - return mKeyguardMediator.isSecure(); + if (mKeyguardDelegate == null) return false; + return mKeyguardDelegate.isSecure(); } /** {@inheritDoc} */ public boolean inKeyguardRestrictedKeyInputMode() { - if (mKeyguardMediator == null) return false; - return mKeyguardMediator.isInputRestricted(); + if (mKeyguardDelegate == null) return false; + return mKeyguardDelegate.isInputRestricted(); } public void dismissKeyguardLw() { - if (mKeyguardMediator.isShowing()) { + if (mKeyguardDelegate != null && mKeyguardDelegate.isShowing()) { mHandler.post(new Runnable() { public void run() { - if (mKeyguardMediator.isDismissable()) { + if (mKeyguardDelegate.isDismissable()) { // Can we just finish the keyguard straight away? - mKeyguardMediator.keyguardDone(false, true); + mKeyguardDelegate.keyguardDone(false, true); } else { // ask the keyguard to prompt the user to authenticate if necessary - mKeyguardMediator.dismiss(); + mKeyguardDelegate.dismiss(); } } }); @@ -4346,9 +4414,9 @@ public class PhoneWindowManager implements WindowManagerPolicy { /** {@inheritDoc} */ public void systemReady() { - if (mKeyguardMediator != null) { - // tell the keyguard - mKeyguardMediator.onSystemReady(); + if (!mHeadless) { + mKeyguardDelegate = new KeyguardServiceDelegate(mContext, null); + mKeyguardDelegate.onSystemReady(); } synchronized (mLock) { updateOrientationListenerLp(); @@ -4460,8 +4528,8 @@ public class PhoneWindowManager implements WindowManagerPolicy { public void run() { synchronized (this) { if (localLOGV) Log.v(TAG, "mScreenLockTimeout activating keyguard"); - if (mKeyguardMediator != null) { - mKeyguardMediator.doKeyguardTimeout(options); + if (mKeyguardDelegate != null) { + mKeyguardDelegate.doKeyguardTimeout(options); } mLockScreenTimerActive = false; options = null; @@ -4489,7 +4557,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { private void updateLockScreenTimeout() { synchronized (mScreenLockTimeout) { boolean enable = (mAllowLockscreenWhenOn && mScreenOnEarly && - mKeyguardMediator != null && mKeyguardMediator.isSecure()); + mKeyguardDelegate != null && mKeyguardDelegate.isSecure()); if (mLockScreenTimerActive != enable) { if (enable) { if (localLOGV) Log.v(TAG, "setting lockscreen timer"); @@ -4613,7 +4681,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { } final boolean hapticsDisabled = Settings.System.getIntForUser(mContext.getContentResolver(), Settings.System.HAPTIC_FEEDBACK_ENABLED, 0, UserHandle.USER_CURRENT) == 0; - if (!always && (hapticsDisabled || mKeyguardMediator.isShowingAndNotHidden())) { + if (!always && (hapticsDisabled || mKeyguardDelegate.isShowingAndNotHidden())) { return false; } long[] pattern = null; @@ -4661,9 +4729,9 @@ public class PhoneWindowManager implements WindowManagerPolicy { @Override public void keepScreenOnStoppedLw() { - if (mKeyguardMediator != null && !mKeyguardMediator.isShowingAndNotHidden()) { + if (mKeyguardDelegate != null && !mKeyguardDelegate.isShowingAndNotHidden()) { long curTime = SystemClock.uptimeMillis(); - mPowerManager.userActivity(curTime, false); + mPowerManager.userActivity(SystemClock.uptimeMillis(), false); } } @@ -4729,8 +4797,8 @@ public class PhoneWindowManager implements WindowManagerPolicy { @Override public void setCurrentUserLw(int newUserId) { - if (mKeyguardMediator != null) { - mKeyguardMediator.setCurrentUser(newUserId); + if (mKeyguardDelegate != null) { + mKeyguardDelegate.setCurrentUser(newUserId); } if (mStatusBarService != null) { try { @@ -4744,7 +4812,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { @Override public void showAssistant() { - mKeyguardMediator.showAssistant(); + mKeyguardDelegate.showAssistant(); } @Override diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardServiceDelegate.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardServiceDelegate.java new file mode 100644 index 0000000..bf18b99 --- /dev/null +++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardServiceDelegate.java @@ -0,0 +1,260 @@ +package com.android.internal.policy.impl.keyguard; + +import android.content.ComponentName; +import android.content.Context; +import android.content.Intent; +import android.content.ServiceConnection; +import android.os.Bundle; +import android.os.IBinder; +import android.os.RemoteException; +import android.os.UserHandle; +import android.util.Log; +import android.util.Slog; +import android.view.WindowManagerPolicy.OnKeyguardExitResult; + +import com.android.internal.policy.IKeyguardExitCallback; +import com.android.internal.policy.IKeyguardShowCallback; +import com.android.internal.policy.IKeyguardService; +import com.android.internal.widget.LockPatternUtils; +import com.android.internal.policy.impl.KeyguardServiceWrapper; + +/** + * A local class that keeps a cache of keyguard state that can be restored in the event + * keyguard crashes. It currently also allows runtime-selectable + * local or remote instances of keyguard. + */ +public class KeyguardServiceDelegate { + private static final String KEYGUARD_PACKAGE = "com.android.keyguard"; + private static final String KEYGUARD_CLASS = "com.android.keyguard.KeyguardService"; + private static final String TAG = "KeyguardServiceDelegate"; + private static final boolean DEBUG = true; + protected KeyguardServiceWrapper mKeyguardService; + private KeyguardState mKeyguardState = new KeyguardState(); + + /* package */ static final class KeyguardState { + boolean showing; + boolean showingAndNotHidden; + boolean inputRestricted; + boolean hidden; + boolean secure; + boolean dreaming; + boolean systemIsReady; + public boolean enabled; + public boolean dismissable; + public int offReason; + public int currentUser; + public boolean screenIsOn; + }; + + public interface ShowListener { + public void onShown(IBinder windowToken); + } + + // A delegate class to map a particular invocation with a ShowListener object. + private final class KeyguardShowDelegate extends IKeyguardShowCallback.Stub { + private ShowListener mShowListener; + + KeyguardShowDelegate(ShowListener showListener) { + mShowListener = showListener; + } + + @Override + public void onShown(IBinder windowToken) throws RemoteException { + if (DEBUG) Log.v(TAG, "**** SHOWN CALLED ****"); + if (mShowListener != null) { + mShowListener.onShown(windowToken); + } + } + }; + + // A delegate class to map a particular invocation with an OnKeyguardExitResult object. + private final class KeyguardExitDelegate extends IKeyguardExitCallback.Stub { + private OnKeyguardExitResult mOnKeyguardExitResult; + + KeyguardExitDelegate(OnKeyguardExitResult onKeyguardExitResult) { + mOnKeyguardExitResult = onKeyguardExitResult; + } + + @Override + public void onKeyguardExitResult(boolean success) throws RemoteException { + if (DEBUG) Log.v(TAG, "**** onKeyguardExitResult(" + success +") CALLED ****"); + if (mOnKeyguardExitResult != null) { + mOnKeyguardExitResult.onKeyguardExitResult(success); + } + } + }; + + public KeyguardServiceDelegate(Context context, LockPatternUtils lockPatternUtils) { + Intent intent = new Intent(); + intent.setClassName(KEYGUARD_PACKAGE, KEYGUARD_CLASS); + if (!context.bindServiceAsUser(intent, mKeyguardConnection, + Context.BIND_AUTO_CREATE, UserHandle.OWNER)) { + if (DEBUG) Log.v(TAG, "*** Keyguard: can't bind to " + KEYGUARD_CLASS); + } else { + if (DEBUG) Log.v(TAG, "*** Keyguard started"); + } + } + + private final ServiceConnection mKeyguardConnection = new ServiceConnection() { + @Override + public void onServiceConnected(ComponentName name, IBinder service) { + if (DEBUG) Log.v(TAG, "*** Keyguard connected (yay!)"); + mKeyguardService = new KeyguardServiceWrapper( + IKeyguardService.Stub.asInterface(service)); + if (mKeyguardState.systemIsReady) { + mKeyguardService.onSystemReady(); + } + } + + @Override + public void onServiceDisconnected(ComponentName name) { + if (DEBUG) Log.v(TAG, "*** Keyguard disconnected (boo!)"); + mKeyguardService = null; + } + + }; + + public boolean isShowing() { + if (mKeyguardService != null) { + mKeyguardState.showing = mKeyguardService.isShowing(); + } + return mKeyguardState.showing; + } + + public boolean isShowingAndNotHidden() { + if (mKeyguardService != null) { + mKeyguardState.showingAndNotHidden = mKeyguardService.isShowingAndNotHidden(); + } + return mKeyguardState.showingAndNotHidden; + } + + public boolean isInputRestricted() { + if (mKeyguardService != null) { + mKeyguardState.inputRestricted = mKeyguardService.isInputRestricted(); + } + return mKeyguardState.inputRestricted; + } + + public void verifyUnlock(final OnKeyguardExitResult onKeyguardExitResult) { + if (mKeyguardService != null) { + mKeyguardService.verifyUnlock(new KeyguardExitDelegate(onKeyguardExitResult)); + } + } + + public void keyguardDone(boolean authenticated, boolean wakeup) { + if (mKeyguardService != null) { + mKeyguardService.keyguardDone(authenticated, wakeup); + } + } + + public void setHidden(boolean isHidden) { + if (mKeyguardService != null) { + mKeyguardService.setHidden(isHidden); + } + mKeyguardState.hidden = isHidden; + } + + public void dismiss() { + if (mKeyguardService != null) { + mKeyguardService.dismiss(); + } + } + + public boolean isSecure() { + if (mKeyguardService != null) { + mKeyguardState.secure = mKeyguardService.isSecure(); + } + return mKeyguardState.secure; + } + + public void onWakeKeyWhenKeyguardShowingTq(int keycodePower) { + if (mKeyguardService != null) { + mKeyguardService.onWakeKeyWhenKeyguardShowing(keycodePower); + } + } + + public void onWakeMotionWhenKeyguardShowing() { + if (mKeyguardService != null) { + mKeyguardService.onWakeMotionWhenKeyguardShowing(); + } + } + + public void onDreamingStarted() { + if (mKeyguardService != null) { + mKeyguardService.onDreamingStarted(); + } + mKeyguardState.dreaming = true; + } + + public void onDreamingStopped() { + if (mKeyguardService != null) { + mKeyguardService.onDreamingStopped(); + } + mKeyguardState.dreaming = false; + } + + public void onScreenTurnedOn(final ShowListener showListener) { + if (mKeyguardService != null) { + if (DEBUG) Log.v(TAG, "onScreenTurnedOn(showListener = " + showListener + ")"); + mKeyguardService.onScreenTurnedOn(new KeyguardShowDelegate(showListener)); + } else { + // try again when we establish a connection + Slog.w(TAG, "onScreenTurnedOn(): no keyguard service!"); + // This shouldn't happen, but if it does, invoke the listener immediately + // to avoid a dark screen... + showListener.onShown(null); + } + mKeyguardState.screenIsOn = true; + } + + public void onScreenTurnedOff(int why) { + if (mKeyguardService != null) { + mKeyguardService.onScreenTurnedOff(why); + } + mKeyguardState.offReason = why; + mKeyguardState.screenIsOn = false; + } + + public void setKeyguardEnabled(boolean enabled) { + if (mKeyguardService != null) { + mKeyguardService.setKeyguardEnabled(enabled); + } + mKeyguardState.enabled = enabled; + } + + public boolean isDismissable() { + if (mKeyguardService != null) { + mKeyguardState.dismissable = mKeyguardService.isDismissable(); + } + return mKeyguardState.dismissable; + } + + public void onSystemReady() { + if (mKeyguardService != null) { + mKeyguardService.onSystemReady(); + } else { + if (DEBUG) Log.v(TAG, "onSystemReady() called before keyguard service was ready"); + mKeyguardState.systemIsReady = true; + } + } + + public void doKeyguardTimeout(Bundle options) { + if (mKeyguardService != null) { + mKeyguardService.doKeyguardTimeout(options); + } + } + + public void showAssistant() { + if (mKeyguardService != null) { + mKeyguardService.showAssistant(); + } + } + + public void setCurrentUser(int newUserId) { + if (mKeyguardService != null) { + mKeyguardService.setCurrentUser(newUserId); + } + mKeyguardState.currentUser = newUserId; + } + +} diff --git a/services/java/com/android/server/AppWidgetServiceImpl.java b/services/java/com/android/server/AppWidgetServiceImpl.java index fb2828b..69ae846 100644 --- a/services/java/com/android/server/AppWidgetServiceImpl.java +++ b/services/java/com/android/server/AppWidgetServiceImpl.java @@ -86,9 +86,12 @@ import java.util.Set; class AppWidgetServiceImpl { + private static final String KEYGUARD_HOST_PACKAGE = "com.android.keyguard"; + private static final int KEYGUARD_HOST_ID = 0x4b455947; private static final String TAG = "AppWidgetServiceImpl"; private static final String SETTINGS_FILENAME = "appwidgets.xml"; private static final int MIN_UPDATE_PERIOD = 30 * 60 * 1000; // 30 minutes + private static final int CURRENT_VERSION = 1; // Bump if the stored widgets need to be upgraded. private static boolean DBG = false; @@ -1654,7 +1657,7 @@ class AppWidgetServiceImpl { out.setOutput(stream, "utf-8"); out.startDocument(null, true); out.startTag(null, "gs"); - + out.attribute(null, "version", String.valueOf(CURRENT_VERSION)); int providerIndex = 0; N = mInstalledProviders.size(); for (int i = 0; i < N; i++) { @@ -1723,6 +1726,7 @@ class AppWidgetServiceImpl { @SuppressWarnings("unused") void readStateFromFileLocked(FileInputStream stream) { boolean success = false; + int version = 0; try { XmlPullParser parser = Xml.newPullParser(); parser.setInput(stream, null); @@ -1734,7 +1738,14 @@ class AppWidgetServiceImpl { type = parser.next(); if (type == XmlPullParser.START_TAG) { String tag = parser.getName(); - if ("p".equals(tag)) { + if ("gs".equals(tag)) { + String attributeValue = parser.getAttributeValue(null, "version"); + try { + version = Integer.parseInt(attributeValue); + } catch (NumberFormatException e) { + version = 0; + } + } else if ("p".equals(tag)) { // TODO: do we need to check that this package has the same signature // as before? String pkg = parser.getAttributeValue(null, "pkg"); @@ -1873,6 +1884,8 @@ class AppWidgetServiceImpl { for (int i = mHosts.size() - 1; i >= 0; i--) { pruneHostLocked(mHosts.get(i)); } + // upgrade the database if needed + performUpgrade(version); } else { // failed reading, clean up Slog.w(TAG, "Failed to read state, clearing widgets and hosts."); @@ -1886,6 +1899,31 @@ class AppWidgetServiceImpl { } } + private void performUpgrade(int fromVersion) { + if (fromVersion < CURRENT_VERSION) { + Slog.v(TAG, "Upgrading widget database from " + fromVersion + " to " + CURRENT_VERSION + + " for user " + mUserId); + } + + int version = fromVersion; + + // Update 1: keyguard moved from package "android" to "com.android.keyguard" + if (version == 0) { + for (int i = 0; i < mHosts.size(); i++) { + Host host = mHosts.get(i); + if (host != null && "android".equals(host.packageName) + && host.hostId == KEYGUARD_HOST_ID) { + host.packageName = KEYGUARD_HOST_PACKAGE; + } + } + version = 1; + } + + if (version != CURRENT_VERSION) { + throw new IllegalStateException("Failed to upgrade widget database"); + } + } + static File getSettingsFile(int userId) { return new File(Environment.getUserSystemDirectory(userId), SETTINGS_FILENAME); } diff --git a/services/java/com/android/server/InputMethodManagerService.java b/services/java/com/android/server/InputMethodManagerService.java index 3b541ec..d2dba58 100644 --- a/services/java/com/android/server/InputMethodManagerService.java +++ b/services/java/com/android/server/InputMethodManagerService.java @@ -792,10 +792,15 @@ public class InputMethodManagerService extends IInputMethodManager.Stub mFileManager = new InputMethodFileManager(mMethodMap, newUserId); final String defaultImiId = mSettings.getSelectedInputMethod(); final boolean needsToResetDefaultIme = TextUtils.isEmpty(defaultImiId); + // For secondary users, the list of enabled IMEs may not have been updated since the + // callbacks to PackageMonitor are ignored for the secondary user. Here, defaultImiId may + // not be empty even if the IME has been uninstalled by the primary user. + // Even in such cases, IMMS works fine because it will find the most applicable + // IME for that user. if (DEBUG) { Slog.d(TAG, "Switch user: " + newUserId + " current ime = " + defaultImiId); } - resetAllInternalStateLocked(false /* updateOnlyWhenLocaleChanged */, + resetAllInternalStateLocked(false /* updateOnlyWhenLocaleChanged */, needsToResetDefaultIme); } diff --git a/services/java/com/android/server/LockSettingsService.java b/services/java/com/android/server/LockSettingsService.java index e20a21f..f8e9ff7 100644 --- a/services/java/com/android/server/LockSettingsService.java +++ b/services/java/com/android/server/LockSettingsService.java @@ -49,6 +49,7 @@ import java.util.Arrays; */ public class LockSettingsService extends ILockSettings.Stub { + private static final String PERMISSION = "android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"; private final DatabaseHelper mOpenHelper; private static final String TAG = "LockSettingsService"; @@ -99,29 +100,12 @@ public class LockSettingsService extends ILockSettings.Stub { } } - private static final void checkWritePermission(int userId) { - final int callingUid = Binder.getCallingUid(); - if (UserHandle.getAppId(callingUid) != android.os.Process.SYSTEM_UID) { - throw new SecurityException("uid=" + callingUid - + " not authorized to write lock settings"); - } + private final void checkWritePermission(int userId) { + mContext.checkCallingOrSelfPermission(PERMISSION); } - private static final void checkPasswordReadPermission(int userId) { - final int callingUid = Binder.getCallingUid(); - if (UserHandle.getAppId(callingUid) != android.os.Process.SYSTEM_UID) { - throw new SecurityException("uid=" + callingUid - + " not authorized to read lock password"); - } - } - - private static final void checkReadPermission(int userId) { - final int callingUid = Binder.getCallingUid(); - if (UserHandle.getAppId(callingUid) != android.os.Process.SYSTEM_UID - && UserHandle.getUserId(callingUid) != userId) { - throw new SecurityException("uid=" + callingUid - + " not authorized to read settings of user " + userId); - } + private final void checkPasswordReadPermission(int userId) { + mContext.checkCallingOrSelfPermission(PERMISSION); } @Override diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java index a30fc3b..6cd67d6 100644 --- a/services/java/com/android/server/SystemServer.java +++ b/services/java/com/android/server/SystemServer.java @@ -725,7 +725,7 @@ class ServerThread extends Thread { } catch (Throwable e) { reportWtf("starting CertBlacklister", e); } - + if (context.getResources().getBoolean( com.android.internal.R.bool.config_dreamsSupported)) { try { @@ -867,7 +867,9 @@ class ServerThread extends Thread { } catch (Throwable e) { reportWtf("observing native crashes", e); } - if (!headless) startSystemUi(contextF); + if (!headless) { + startSystemUi(contextF); + } try { if (mountServiceF != null) mountServiceF.systemReady(); } catch (Throwable e) { diff --git a/services/java/com/android/server/accounts/AccountManagerService.java b/services/java/com/android/server/accounts/AccountManagerService.java index 14d808f..e8251d6 100644 --- a/services/java/com/android/server/accounts/AccountManagerService.java +++ b/services/java/com/android/server/accounts/AccountManagerService.java @@ -1495,7 +1495,10 @@ public class AccountManagerService int userId) { // Only allow the system process to read accounts of other users if (userId != UserHandle.getCallingUserId() - && Binder.getCallingUid() != Process.myUid()) { + && Binder.getCallingUid() != Process.myUid() + && mContext.checkCallingOrSelfPermission( + android.Manifest.permission.INTERACT_ACROSS_USERS_FULL) + != PackageManager.PERMISSION_GRANTED) { throw new SecurityException("User " + UserHandle.getCallingUserId() + " trying to confirm account credentials for " + userId); } @@ -1764,7 +1767,10 @@ public class AccountManagerService int callingUid = Binder.getCallingUid(); // Only allow the system process to read accounts of other users if (userId != UserHandle.getCallingUserId() - && callingUid != Process.myUid()) { + && callingUid != Process.myUid() + && mContext.checkCallingOrSelfPermission( + android.Manifest.permission.INTERACT_ACROSS_USERS_FULL) + != PackageManager.PERMISSION_GRANTED) { throw new SecurityException("User " + UserHandle.getCallingUserId() + " trying to get account for " + userId); } diff --git a/services/java/com/android/server/am/ActiveServices.java b/services/java/com/android/server/am/ActiveServices.java index 5c24e67..10db70f 100644 --- a/services/java/com/android/server/am/ActiveServices.java +++ b/services/java/com/android/server/am/ActiveServices.java @@ -439,7 +439,7 @@ public class ActiveServices { ActivityRecord activity = null; if (token != null) { - activity = mAm.mMainStack.isInStackLocked(token); + activity = ActivityRecord.isInStackLocked(token); if (activity == null) { Slog.w(TAG, "Binding with unknown activity: " + token); return 0; diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java index 97fbb9c..de3d09f 100644 --- a/services/java/com/android/server/am/ActivityManagerService.java +++ b/services/java/com/android/server/am/ActivityManagerService.java @@ -32,12 +32,14 @@ import com.android.server.Watchdog; import com.android.server.am.ActivityStack.ActivityState; import com.android.server.pm.UserManagerService; import com.android.server.wm.AppTransition; +import com.android.server.wm.StackBox; import com.android.server.wm.WindowManagerService; import dalvik.system.Zygote; import android.app.Activity; import android.app.ActivityManager; +import android.app.ActivityManager.RunningTaskInfo; import android.app.ActivityManagerNative; import android.app.ActivityOptions; import android.app.ActivityThread; @@ -197,9 +199,9 @@ public final class ActivityManagerService extends ActivityManagerNative static final boolean DEBUG_POWER_QUICK = DEBUG_POWER || false; static final boolean DEBUG_MU = localLOGV || false; static final boolean DEBUG_IMMERSIVE = localLOGV || false; - static final boolean VALIDATE_TOKENS = false; + static final boolean VALIDATE_TOKENS = true; static final boolean SHOW_ACTIVITY_START_TIME = true; - + // Control over CPU and battery monitoring. static final long BATTERY_STATS_TIME = 30*60*1000; // write battery stats every 30 minutes. static final boolean MONITOR_CPU_USAGE = true; @@ -207,16 +209,18 @@ public final class ActivityManagerService extends ActivityManagerNative static final long MONITOR_CPU_MAX_TIME = 0x0fffffff; // wait possibly forever for next cpu sample. static final boolean MONITOR_THREAD_CPU_USAGE = false; + static final int HOME_ACTIVITY_STACK = 0; + // The flags that are set for all calls we make to the package manager. static final int STOCK_PM_FLAGS = PackageManager.GET_SHARED_LIBRARY_FILES; - + private static final String SYSTEM_DEBUGGABLE = "ro.debuggable"; static final boolean IS_USER_BUILD = "user".equals(Build.TYPE); // Maximum number of recent tasks that we can remember. static final int MAX_RECENT_TASKS = 20; - + // Amount of time after a call to stopAppSwitches() during which we will // prevent further untrusted switches from happening. static final long APP_SWITCH_DELAY_TIME = 5*1000; @@ -269,10 +273,11 @@ public final class ActivityManagerService extends ActivityManagerNative static final int PENDING_ACTIVITY_RESULT_TIMEOUT = 2*2000; static final int MY_PID = Process.myPid(); - + static final String[] EMPTY_STRING_ARRAY = new String[0]; - public ActivityStack mMainStack; + /** Run all ActivityStacks through this */ + ActivityStackSupervisor mStackSupervisor; private final boolean mHeadless; @@ -286,14 +291,22 @@ public final class ActivityManagerService extends ActivityManagerNative * due to app switches being disabled. */ static class PendingActivityLaunch { - ActivityRecord r; - ActivityRecord sourceRecord; - int startFlags; + final ActivityRecord r; + final ActivityRecord sourceRecord; + final int startFlags; + final ActivityStack stack; + + public PendingActivityLaunch(ActivityRecord _r, ActivityRecord _sourceRecord, + int _startFlags, ActivityStack _stack) { + r = _r; + sourceRecord = _sourceRecord; + startFlags = _startFlags; + stack = _stack; + } } - + final ArrayList<PendingActivityLaunch> mPendingActivityLaunches = new ArrayList<PendingActivityLaunch>(); - BroadcastQueue mFgBroadcastQueue; BroadcastQueue mBgBroadcastQueue; @@ -329,7 +342,7 @@ public final class ActivityManagerService extends ActivityManagerNative /** * List of intents that were used to start the most recent tasks. */ - final ArrayList<TaskRecord> mRecentTasks = new ArrayList<TaskRecord>(); + private final ArrayList<TaskRecord> mRecentTasks = new ArrayList<TaskRecord>(); public class PendingActivityExtras extends Binder implements Runnable { public final ActivityRecord activity; @@ -379,7 +392,7 @@ public final class ActivityManagerService extends ActivityManagerNative * The currently running heavy-weight process, if any. */ ProcessRecord mHeavyWeightProcess = null; - + /** * The last time that various processes have crashed. */ @@ -415,7 +428,7 @@ public final class ActivityManagerService extends ActivityManagerNative } final SparseArray<ForegroundToken> mForegroundProcesses = new SparseArray<ForegroundToken>(); - + /** * List of records for processes that someone had tried to start before the * system was ready. We don't start them at that point, but ensure they @@ -457,7 +470,7 @@ public final class ActivityManagerService extends ActivityManagerNative * the "home" activity. */ ProcessRecord mHomeProcess; - + /** * This is the process holding the activity the user last visited that * is in a different process from the one they are currently in. @@ -502,11 +515,6 @@ public final class ActivityManagerService extends ActivityManagerNative final CompatModePackages mCompatModePackages; /** - * Set of PendingResultRecord objects that are currently active. - */ - final HashSet mPendingResultRecords = new HashSet(); - - /** * Set of IntentSenderRecord objects that are currently active. */ final HashMap<PendingIntentRecord.Key, WeakReference<PendingIntentRecord>> mIntentSenderRecords @@ -535,7 +543,8 @@ public final class ActivityManagerService extends ActivityManagerNative * broadcasts. Hash keys are the receiver IBinder, hash value is * a ReceiverList. */ - final HashMap mRegisteredReceivers = new HashMap(); + final HashMap<IBinder, ReceiverList> mRegisteredReceivers = + new HashMap<IBinder, ReceiverList>(); /** * Resolver for broadcast intents to registered receivers. @@ -597,13 +606,8 @@ public final class ActivityManagerService extends ActivityManagerNative * List of PendingThumbnailsRecord objects of clients who are still * waiting to receive all of the thumbnails for a task. */ - final ArrayList mPendingThumbnails = new ArrayList(); - - /** - * List of HistoryRecord objects that have been finished and must - * still report back to a pending thumbnail receiver. - */ - final ArrayList mCancelledThumbnails = new ArrayList(); + final ArrayList<PendingThumbnailsRecord> mPendingThumbnails = + new ArrayList<PendingThumbnailsRecord>(); final ProviderMap mProviderMap; @@ -644,12 +648,12 @@ public final class ActivityManagerService extends ActivityManagerNative * any user id that can impact battery performance. */ final BatteryStatsService mBatteryStatsService; - + /** * Information about component usage */ final UsageStatsService mUsageStatsService; - + /** * Information about and control over application operations */ @@ -667,7 +671,7 @@ public final class ActivityManagerService extends ActivityManagerNative * configurations. */ int mConfigurationSeq = 0; - + /** * Hardware-reported OpenGLES version. */ @@ -683,7 +687,7 @@ public final class ActivityManagerService extends ActivityManagerNative * Temporary to avoid allocations. Protected by main lock. */ final StringBuilder mStringBuilder = new StringBuilder(256); - + /** * Used to control how we initialize the service. */ @@ -704,7 +708,7 @@ public final class ActivityManagerService extends ActivityManagerNative int mFactoryTest; boolean mCheckedForSetup; - + /** * The time at which we will allow normal application switches again, * after a call to {@link #stopAppSwitches()}. @@ -716,7 +720,7 @@ public final class ActivityManagerService extends ActivityManagerNative * is set; any switches after that will clear the time. */ boolean mDidAppSwitch; - + /** * Last time (in realtime) at which we checked for power usage. */ @@ -749,14 +753,6 @@ public final class ActivityManagerService extends ActivityManagerNative boolean mShuttingDown = false; /** - * Task identifier that activities are currently being started - * in. Incremented each time a new task is created. - * todo: Replace this with a TokenSpace class that generates non-repeating - * integers that won't wrap. - */ - int mCurTask = 1; - - /** * Current sequence id for oom_adj computation traversal. */ int mAdjSeq = 0; @@ -790,13 +786,13 @@ public final class ActivityManagerService extends ActivityManagerNative * N procs were started. */ int[] mProcDeaths = new int[20]; - + /** * This is set if we had to do a delayed dexopt of an app before launching * it, to increasing the ANR timeouts in that case. */ boolean mDidDexOpt; - + String mDebugApp = null; boolean mWaitForDebugger = false; boolean mDebugTransient = false; @@ -836,7 +832,7 @@ public final class ActivityManagerService extends ActivityManagerNative * protect all related state. */ final Thread mProcessStatsThread; - + /** * Used to collect process stats when showing not responding dialog. * Protected by mProcessStatsThread. @@ -868,7 +864,6 @@ public final class ActivityManagerService extends ActivityManagerNative static ActivityThread mSystemThread; private int mCurrentUserId = 0; - private int[] mCurrentUserArray = new int[] { 0 }; private UserManagerService mUserManager; private final class AppDeathRecipient implements IBinder.DeathRecipient { @@ -886,6 +881,7 @@ public final class ActivityManagerService extends ActivityManagerNative mAppThread = thread; } + @Override public void binderDied() { if (localLOGV) Slog.v( TAG, "Death received in " + this @@ -938,10 +934,11 @@ public final class ActivityManagerService extends ActivityManagerNative // if (localLOGV) Slog.v(TAG, "Handler started!"); //} + @Override public void handleMessage(Message msg) { switch (msg.what) { case SHOW_ERROR_MSG: { - HashMap data = (HashMap) msg.obj; + HashMap<String, Object> data = (HashMap<String, Object>) msg.obj; boolean showBackground = Settings.Secure.getInt(mContext.getContentResolver(), Settings.Secure.ANR_SHOW_BACKGROUND, 0) != 0; synchronized (ActivityManagerService.this) { @@ -976,18 +973,18 @@ public final class ActivityManagerService extends ActivityManagerNative } } } - + ensureBootCompleted(); } break; case SHOW_NOT_RESPONDING_MSG: { synchronized (ActivityManagerService.this) { - HashMap data = (HashMap) msg.obj; + HashMap<String, Object> data = (HashMap<String, Object>) msg.obj; ProcessRecord proc = (ProcessRecord)data.get("app"); if (proc != null && proc.anrDialog != null) { Slog.e(TAG, "App already has anr dialog: " + proc); return; } - + Intent intent = new Intent("android.intent.action.ANR"); if (!mProcessesReady) { intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY @@ -1008,7 +1005,7 @@ public final class ActivityManagerService extends ActivityManagerNative killAppAtUsersRequest(proc, null); } } - + ensureBootCompleted(); } break; case SHOW_STRICT_MODE_VIOLATION_MSG: { @@ -1193,13 +1190,13 @@ public final class ActivityManagerService extends ActivityManagerNative if (inm == null) { return; } - + ActivityRecord root = (ActivityRecord)msg.obj; ProcessRecord process = root.app; if (process == null) { return; } - + try { Context context = mContext.createPackageContext(process.info.packageName, 0); String text = mContext.getString(R.string.heavy_weight_notification, @@ -1217,7 +1214,7 @@ public final class ActivityManagerService extends ActivityManagerNative PendingIntent.getActivityAsUser(mContext, 0, root.intent, PendingIntent.FLAG_CANCEL_CURRENT, null, new UserHandle(root.userId))); - + try { int[] outId = new int[1]; inm.enqueueNotificationWithTag("android", "android", null, @@ -1421,7 +1418,7 @@ public final class ActivityManagerService extends ActivityManagerNative mSelf.mContext.getPackageManager().getApplicationInfo( "android", STOCK_PM_FLAGS); mSystemThread.installSystemApplicationInfo(info); - + synchronized (mSelf) { ProcessRecord app = mSelf.newProcessRecordLocked( mSystemThread.getApplicationThread(), info, @@ -1443,6 +1440,7 @@ public final class ActivityManagerService extends ActivityManagerNative public void setWindowManager(WindowManagerService wm) { mWindowManager = wm; + wm.createStack(HOME_ACTIVITY_STACK, -1, StackBox.TASK_STACK_GOES_OVER, 1.0f); } public void startObservingNativeCrashes() { @@ -1471,8 +1469,10 @@ public final class ActivityManagerService extends ActivityManagerNative context.setTheme(android.R.style.Theme_Holo); m.mContext = context; m.mFactoryTest = factoryTest; - m.mMainStack = new ActivityStack(m, context, true, thr.mLooper); - + + m.mStackSupervisor = new ActivityStackSupervisor(m, context, thr.mLooper); + m.mStackSupervisor.init(m.mCurrentUserId); + m.mBatteryStatsService.publish(context); m.mUsageStatsService.publish(context); m.mAppOpsService.publish(context); @@ -1483,14 +1483,14 @@ public final class ActivityManagerService extends ActivityManagerNative } m.startRunning(null, null, null, null); - + return context; } public static ActivityManagerService self() { return mSelf; } - + static class AThread extends Thread { ActivityManagerService mService; Looper mLooper; @@ -1500,6 +1500,7 @@ public final class ActivityManagerService extends ActivityManagerNative super("ActivityManager"); } + @Override public void run() { Looper.prepare(); @@ -1620,7 +1621,7 @@ public final class ActivityManagerService extends ActivityManagerNative private ActivityManagerService() { Slog.i(TAG, "Memory class: " + ActivityManager.staticGetMemoryClass()); - + mFgBroadcastQueue = new BroadcastQueue(this, "foreground", BROADCAST_FG_TIMEOUT); mBgBroadcastQueue = new BroadcastQueue(this, "background", BROADCAST_BG_TIMEOUT); mBroadcastQueues[0] = mFgBroadcastQueue; @@ -1658,13 +1659,14 @@ public final class ActivityManagerService extends ActivityManagerNative mConfigurationSeq = mConfiguration.seq = 1; mProcessStats.init(); - + mCompatModePackages = new CompatModePackages(this, systemDir); // Add ourself to the Watchdog monitors. Watchdog.getInstance().addMonitor(this); mProcessStatsThread = new Thread("ProcessStats") { + @Override public void run() { while (true) { try { @@ -1783,7 +1785,7 @@ public final class ActivityManagerService extends ActivityManagerNative (softIrq * 100) / total); } } - + long[] cpuSpeedTimes = mProcessStats.getLastCpuSpeedTimes(); final BatteryStatsImpl bstats = mBatteryStatsService.getActiveStatistics(); synchronized(bstats) { @@ -1833,7 +1835,7 @@ public final class ActivityManagerService extends ActivityManagerNative } } } - + @Override public void batteryNeedsCpuUpdate() { updateCpuStatsNow(); @@ -1889,16 +1891,23 @@ public final class ActivityManagerService extends ActivityManagerNative mHandler.obtainMessage(IMMERSIVE_MODE_LOCK_MSG, (nextState) ? 1 : 0, 0, r)); } + final void showAskCompatModeDialogLocked(ActivityRecord r) { + Message msg = Message.obtain(); + msg.what = SHOW_COMPAT_MODE_DIALOG_MSG; + msg.obj = r.task.askedCompatMode ? null : r; + mHandler.sendMessage(msg); + } + private final void updateLruProcessInternalLocked(ProcessRecord app, int bestPos) { // put it on the LRU to keep track of when it should be exited. int lrui = mLruProcesses.indexOf(app); if (lrui >= 0) mLruProcesses.remove(lrui); - + int i = mLruProcesses.size()-1; int skipTop = 0; - + app.lruSeq = mLruSeq; - + // compute the new weight for this process. app.lastActivityTime = SystemClock.uptimeMillis(); if (app.activities.size() > 0) { @@ -1936,7 +1945,7 @@ public final class ActivityManagerService extends ActivityManagerNative if (i < 0) { mLruProcesses.add(0, app); } - + // If the app is currently using a content provider or service, // bump those processes as well. if (app.connections.size() > 0) { @@ -1994,14 +2003,14 @@ public final class ActivityManagerService extends ActivityManagerNative } catch (RemoteException e) { } } - + boolean isNextTransitionForward() { int transit = mWindowManager.getPendingAppTransition(); return transit == AppTransition.TRANSIT_ACTIVITY_OPEN || transit == AppTransition.TRANSIT_TASK_OPEN || transit == AppTransition.TRANSIT_TASK_TO_FRONT; } - + final ProcessRecord startProcessLocked(String processName, ApplicationInfo info, boolean knownToBeDead, int intentFlags, String hostingType, ComponentName hostingName, boolean allowWhileBooting, @@ -2031,12 +2040,12 @@ public final class ActivityManagerService extends ActivityManagerNative // If this is a new package in the process, add the package to the list app.addPackage(info.packageName); return app; - } else { - // An application record is attached to a previous process, - // clean it up now. - if (DEBUG_PROCESSES || DEBUG_CLEANUP) Slog.v(TAG, "App died: " + app); - handleAppDiedLocked(app, true, true); } + + // An application record is attached to a previous process, + // clean it up now. + if (DEBUG_PROCESSES || DEBUG_CLEANUP) Slog.v(TAG, "App died: " + app); + handleAppDiedLocked(app, true, true); } String hostingNameStr = hostingName != null @@ -2106,7 +2115,7 @@ public final class ActivityManagerService extends ActivityManagerNative boolean isAllowedWhileBooting(ApplicationInfo ai) { return (ai.flags&ApplicationInfo.FLAG_PERSISTENT) != 0; } - + private final void startProcessLocked(ProcessRecord app, String hostingType, String hostingNameStr) { if (app.pid > 0 && app.pid != MY_PID) { @@ -2122,10 +2131,10 @@ public final class ActivityManagerService extends ActivityManagerNative mProcessesOnHold.remove(app); updateCpuStats(); - + System.arraycopy(mProcDeaths, 0, mProcDeaths, 1, mProcDeaths.length-1); mProcDeaths[0] = 0; - + try { int uid = app.uid; @@ -2208,16 +2217,16 @@ public final class ActivityManagerService extends ActivityManagerNative app.batteryStats.incStartsLocked(); } } - + EventLog.writeEvent(EventLogTags.AM_PROC_START, UserHandle.getUserId(uid), startResult.pid, uid, app.processName, hostingType, hostingNameStr != null ? hostingNameStr : ""); - + if (app.persistent) { Watchdog.getInstance().processStarted(app.processName, startResult.pid); } - + StringBuilder buf = mStringBuilder; buf.setLength(0); buf.append("Start proc "); @@ -2302,8 +2311,7 @@ public final class ActivityManagerService extends ActivityManagerNative aInfo.applicationInfo.uid); if (app == null || app.instrumentationClass == null) { intent.setFlags(intent.getFlags() | Intent.FLAG_ACTIVITY_NEW_TASK); - mMainStack.startActivityLocked(null, intent, null, aInfo, - null, null, 0, 0, 0, null, 0, null, false, null); + mStackSupervisor.startHomeActivity(intent, aInfo); } } @@ -2321,7 +2329,7 @@ public final class ActivityManagerService extends ActivityManagerNative intent, intent.resolveTypeIfNeeded(mContext.getContentResolver()), flags, userId); - + if (info != null) { ai = info.activityInfo; } @@ -2341,7 +2349,7 @@ public final class ActivityManagerService extends ActivityManagerNative if (mCheckedForSetup) { return; } - + // We will show this screen if the current one is a different // version than the last one shown, and we are not running in // low-level factory test mode. @@ -2350,12 +2358,12 @@ public final class ActivityManagerService extends ActivityManagerNative Settings.Global.getInt(resolver, Settings.Global.DEVICE_PROVISIONED, 0) != 0) { mCheckedForSetup = true; - + // See if we should be showing the platform update setup UI. Intent intent = new Intent(Intent.ACTION_UPGRADE_SETUP); List<ResolveInfo> ris = mSelf.mContext.getPackageManager() .queryIntentActivities(intent, PackageManager.GET_META_DATA); - + // We don't allow third party apps to replace this. ResolveInfo ri = null; for (int i=0; ris != null && i<ris.size(); i++) { @@ -2365,7 +2373,7 @@ public final class ActivityManagerService extends ActivityManagerNative break; } } - + if (ri != null) { String vers = ri.activityInfo.metaData != null ? ri.activityInfo.metaData.getString(Intent.METADATA_SETUP_VERSION) @@ -2380,13 +2388,13 @@ public final class ActivityManagerService extends ActivityManagerNative intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setComponent(new ComponentName( ri.activityInfo.packageName, ri.activityInfo.name)); - mMainStack.startActivityLocked(null, intent, null, ri.activityInfo, + getMainStack().startActivityLocked(null, intent, null, ri.activityInfo, null, null, 0, 0, 0, null, 0, null, false, null); } } } } - + CompatibilityInfo compatibilityInfoForPackageLocked(ApplicationInfo ai) { return mCompatModePackages.compatibilityInfoForPackageLocked(ai); } @@ -2397,6 +2405,7 @@ public final class ActivityManagerService extends ActivityManagerNative } } + @Override public int getFrontActivityScreenCompatMode() { enforceNotIsolatedCaller("getFrontActivityScreenCompatMode"); synchronized (this) { @@ -2404,6 +2413,7 @@ public final class ActivityManagerService extends ActivityManagerNative } } + @Override public void setFrontActivityScreenCompatMode(int mode) { enforceCallingPermission(android.Manifest.permission.SET_SCREEN_COMPATIBILITY, "setFrontActivityScreenCompatMode"); @@ -2412,6 +2422,7 @@ public final class ActivityManagerService extends ActivityManagerNative } } + @Override public int getPackageScreenCompatMode(String packageName) { enforceNotIsolatedCaller("getPackageScreenCompatMode"); synchronized (this) { @@ -2419,6 +2430,7 @@ public final class ActivityManagerService extends ActivityManagerNative } } + @Override public void setPackageScreenCompatMode(String packageName, int mode) { enforceCallingPermission(android.Manifest.permission.SET_SCREEN_COMPATIBILITY, "setPackageScreenCompatMode"); @@ -2427,6 +2439,7 @@ public final class ActivityManagerService extends ActivityManagerNative } } + @Override public boolean getPackageAskScreenCompat(String packageName) { enforceNotIsolatedCaller("getPackageAskScreenCompat"); synchronized (this) { @@ -2434,6 +2447,7 @@ public final class ActivityManagerService extends ActivityManagerNative } } + @Override public void setPackageAskScreenCompat(String packageName, boolean ask) { enforceCallingPermission(android.Manifest.permission.SET_SCREEN_COMPATIBILITY, "setPackageAskScreenCompat"); @@ -2510,12 +2524,13 @@ public final class ActivityManagerService extends ActivityManagerNative } for (int i=0; i<N; i++) { PendingActivityLaunch pal = mPendingActivityLaunches.get(i); - mMainStack.startActivityUncheckedLocked(pal.r, pal.sourceRecord, - pal.startFlags, doResume && i == (N-1), null); + pal.stack.startActivityUncheckedLocked(pal.r, pal.sourceRecord, pal.startFlags, + doResume && i == (N-1), null); } mPendingActivityLaunches.clear(); } + @Override public final int startActivity(IApplicationThread caller, String callingPackage, Intent intent, String resolvedType, IBinder resultTo, String resultWho, int requestCode, int startFlags, @@ -2525,6 +2540,7 @@ public final class ActivityManagerService extends ActivityManagerNative startFlags, profileFile, profileFd, options, UserHandle.getCallingUserId()); } + @Override public final int startActivityAsUser(IApplicationThread caller, String callingPackage, Intent intent, String resolvedType, IBinder resultTo, String resultWho, int requestCode, int startFlags, @@ -2532,11 +2548,13 @@ public final class ActivityManagerService extends ActivityManagerNative enforceNotIsolatedCaller("startActivity"); userId = handleIncomingUser(Binder.getCallingPid(), Binder.getCallingUid(), userId, false, true, "startActivity", null); - return mMainStack.startActivityMayWait(caller, -1, callingPackage, intent, resolvedType, + // TODO: Switch to user app stacks here. + return mStackSupervisor.startActivityMayWait(caller, -1, callingPackage, intent, resolvedType, resultTo, resultWho, requestCode, startFlags, profileFile, profileFd, null, null, options, userId); } + @Override public final WaitResult startActivityAndWait(IApplicationThread caller, String callingPackage, Intent intent, String resolvedType, IBinder resultTo, String resultWho, int requestCode, int startFlags, String profileFile, @@ -2545,12 +2563,14 @@ public final class ActivityManagerService extends ActivityManagerNative userId = handleIncomingUser(Binder.getCallingPid(), Binder.getCallingUid(), userId, false, true, "startActivityAndWait", null); WaitResult res = new WaitResult(); - mMainStack.startActivityMayWait(caller, -1, callingPackage, intent, resolvedType, + // TODO: Switch to user app stacks here. + mStackSupervisor.startActivityMayWait(caller, -1, callingPackage, intent, resolvedType, resultTo, resultWho, requestCode, startFlags, profileFile, profileFd, res, null, options, UserHandle.getCallingUserId()); return res; } + @Override public final int startActivityWithConfig(IApplicationThread caller, String callingPackage, Intent intent, String resolvedType, IBinder resultTo, String resultWho, int requestCode, int startFlags, Configuration config, @@ -2558,12 +2578,14 @@ public final class ActivityManagerService extends ActivityManagerNative enforceNotIsolatedCaller("startActivityWithConfig"); userId = handleIncomingUser(Binder.getCallingPid(), Binder.getCallingUid(), userId, false, true, "startActivityWithConfig", null); - int ret = mMainStack.startActivityMayWait(caller, -1, callingPackage, intent, resolvedType, - resultTo, resultWho, requestCode, startFlags, + // TODO: Switch to user app stacks here. + int ret = mStackSupervisor.startActivityMayWait(caller, -1, callingPackage, intent, + resolvedType, resultTo, resultWho, requestCode, startFlags, null, null, null, config, options, userId); return ret; } + @Override public int startActivityIntentSender(IApplicationThread caller, IntentSender intent, Intent fillInIntent, String resolvedType, IBinder resultTo, String resultWho, int requestCode, @@ -2584,9 +2606,9 @@ public final class ActivityManagerService extends ActivityManagerNative synchronized (this) { // If this is coming from the currently resumed activity, it is // effectively saying that app switches are allowed at this point. - if (mMainStack.mResumedActivity != null - && mMainStack.mResumedActivity.info.applicationInfo.uid == - Binder.getCallingUid()) { + final ActivityStack stack = getMainStack(); + if (stack.mResumedActivity != null && + stack.mResumedActivity.info.applicationInfo.uid == Binder.getCallingUid()) { mAppSwitchesAllowedTime = 0; } } @@ -2595,6 +2617,7 @@ public final class ActivityManagerService extends ActivityManagerNative return ret; } + @Override public boolean startNextMatchingActivity(IBinder callingActivity, Intent intent, Bundle options) { // Refuse possible leaked file descriptors @@ -2603,7 +2626,7 @@ public final class ActivityManagerService extends ActivityManagerNative } synchronized (this) { - ActivityRecord r = mMainStack.isInStackLocked(callingActivity); + final ActivityRecord r = ActivityRecord.isInStackLocked(callingActivity); if (r == null) { ActivityOptions.abort(options); return false; @@ -2677,7 +2700,7 @@ public final class ActivityManagerService extends ActivityManagerNative } final long origId = Binder.clearCallingIdentity(); - int res = mMainStack.startActivityLocked(r.app.thread, intent, + int res = r.task.stack.startActivityLocked(r.app.thread, intent, r.resolvedType, aInfo, resultTo != null ? resultTo.appToken : null, resultWho, requestCode, -1, r.launchedFromUid, r.launchedFromPackage, 0, options, false, null); @@ -2698,19 +2721,22 @@ public final class ActivityManagerService extends ActivityManagerNative userId = handleIncomingUser(Binder.getCallingPid(), Binder.getCallingUid(), userId, false, true, "startActivityInPackage", null); - int ret = mMainStack.startActivityMayWait(null, uid, callingPackage, intent, resolvedType, + // TODO: Switch to user app stacks here. + int ret = mStackSupervisor.startActivityMayWait(null, uid, callingPackage, intent, resolvedType, resultTo, resultWho, requestCode, startFlags, null, null, null, null, options, userId); return ret; } + @Override public final int startActivities(IApplicationThread caller, String callingPackage, Intent[] intents, String[] resolvedTypes, IBinder resultTo, Bundle options, int userId) { enforceNotIsolatedCaller("startActivities"); userId = handleIncomingUser(Binder.getCallingPid(), Binder.getCallingUid(), userId, false, true, "startActivity", null); - int ret = mMainStack.startActivities(caller, -1, callingPackage, intents, + // TODO: Switch to user app stacks here. + int ret = mStackSupervisor.startActivities(caller, -1, callingPackage, intents, resolvedTypes, resultTo, options, userId); return ret; } @@ -2721,7 +2747,8 @@ public final class ActivityManagerService extends ActivityManagerNative userId = handleIncomingUser(Binder.getCallingPid(), Binder.getCallingUid(), userId, false, true, "startActivityInPackage", null); - int ret = mMainStack.startActivities(null, uid, callingPackage, intents, resolvedTypes, + // TODO: Switch to user app stacks here. + int ret = mStackSupervisor.startActivities(null, uid, callingPackage, intents, resolvedTypes, resultTo, options, userId); return ret; } @@ -2754,10 +2781,11 @@ public final class ActivityManagerService extends ActivityManagerNative mRecentTasks.add(0, task); } + @Override public void setRequestedOrientation(IBinder token, int requestedOrientation) { synchronized (this) { - ActivityRecord r = mMainStack.isInStackLocked(token); + ActivityRecord r = ActivityRecord.isInStackLocked(token); if (r == null) { return; } @@ -2769,16 +2797,17 @@ public final class ActivityManagerService extends ActivityManagerNative if (config != null) { r.frozenBeforeDestroy = true; if (!updateConfigurationLocked(config, r, false, false)) { - mMainStack.resumeTopActivityLocked(null); + r.task.stack.resumeTopActivityLocked(null); } } Binder.restoreCallingIdentity(origId); } } + @Override public int getRequestedOrientation(IBinder token) { synchronized (this) { - ActivityRecord r = mMainStack.isInStackLocked(token); + ActivityRecord r = ActivityRecord.isInStackLocked(token); if (r == null) { return ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED; } @@ -2795,6 +2824,7 @@ public final class ActivityManagerService extends ActivityManagerNative * * @return Returns true if the activity successfully finished, or false if it is still running. */ + @Override public final boolean finishActivity(IBinder token, int resultCode, Intent resultData) { // Refuse possible leaked file descriptors if (resultData != null && resultData.hasFileDescriptors() == true) { @@ -2802,9 +2832,13 @@ public final class ActivityManagerService extends ActivityManagerNative } synchronized(this) { + ActivityRecord r = ActivityRecord.isInStackLocked(token); + if (r == null) { + return true; + } if (mController != null) { // Find the first activity that is not finishing. - ActivityRecord next = mMainStack.topRunningActivityLocked(token, 0); + ActivityRecord next = r.task.stack.topRunningActivityLocked(token, 0); if (next != null) { // ask watcher if this is allowed boolean resumeOK = true; @@ -2820,13 +2854,14 @@ public final class ActivityManagerService extends ActivityManagerNative } } final long origId = Binder.clearCallingIdentity(); - boolean res = mMainStack.requestFinishActivityLocked(token, resultCode, + boolean res = r.task.stack.requestFinishActivityLocked(token, resultCode, resultData, "app-request", true); Binder.restoreCallingIdentity(origId); return res; } } + @Override public final void finishHeavyWeightApp() { if (checkCallingPermission(android.Manifest.permission.FORCE_STOP_PACKAGES) != PackageManager.PERMISSION_GRANTED) { @@ -2848,11 +2883,8 @@ public final class ActivityManagerService extends ActivityManagerNative for (int i=0; i<activities.size(); i++) { ActivityRecord r = activities.get(i); if (!r.finishing) { - int index = mMainStack.indexOfTokenLocked(r.appToken); - if (index >= 0) { - mMainStack.finishActivityLocked(r, index, Activity.RESULT_CANCELED, - null, "finish-heavy", true); - } + r.task.stack.finishActivityLocked(r, Activity.RESULT_CANCELED, + null, "finish-heavy", true); } } @@ -2862,6 +2894,7 @@ public final class ActivityManagerService extends ActivityManagerNative } } + @Override public void crashApplication(int uid, int initialPid, String packageName, String message) { if (checkCallingPermission(android.Manifest.permission.FORCE_STOP_PACKAGES) @@ -2920,44 +2953,49 @@ public final class ActivityManagerService extends ActivityManagerNative } } + @Override public final void finishSubActivity(IBinder token, String resultWho, int requestCode) { synchronized(this) { final long origId = Binder.clearCallingIdentity(); - mMainStack.finishSubActivityLocked(token, resultWho, requestCode); + ActivityRecord r = ActivityRecord.isInStackLocked(token); + if (r != null) { + r.task.stack.finishSubActivityLocked(r, resultWho, requestCode); + } Binder.restoreCallingIdentity(origId); } } + @Override public boolean finishActivityAffinity(IBinder token) { synchronized(this) { final long origId = Binder.clearCallingIdentity(); - boolean res = mMainStack.finishActivityAffinityLocked(token); + ActivityRecord r = ActivityRecord.isInStackLocked(token); + boolean res = false; + if (r != null) { + res = r.task.stack.finishActivityAffinityLocked(r); + } Binder.restoreCallingIdentity(origId); return res; } } + @Override public boolean willActivityBeVisible(IBinder token) { synchronized(this) { - int i; - for (i=mMainStack.mHistory.size()-1; i>=0; i--) { - ActivityRecord r = (ActivityRecord)mMainStack.mHistory.get(i); - if (r.appToken == token) { - return true; - } - if (r.fullscreen && !r.finishing) { - return false; - } + ActivityStack stack = ActivityRecord.getStackLocked(token); + if (stack != null) { + return stack.willActivityBeVisibleLocked(token); } - return true; + return false; } } - + + @Override public void overridePendingTransition(IBinder token, String packageName, int enterAnim, int exitAnim) { synchronized(this) { - ActivityRecord self = mMainStack.isInStackLocked(token); + ActivityRecord self = ActivityRecord.isInStackLocked(token); if (self == null) { return; } @@ -2990,21 +3028,10 @@ public final class ActivityManagerService extends ActivityManagerNative clearProfilerLocked(); } - // Just in case... - if (mMainStack.mPausingActivity != null && mMainStack.mPausingActivity.app == app) { - if (DEBUG_PAUSE || DEBUG_CLEANUP) Slog.v(TAG, - "App died while pausing: " + mMainStack.mPausingActivity); - mMainStack.mPausingActivity = null; - } - if (mMainStack.mLastPausedActivity != null && mMainStack.mLastPausedActivity.app == app) { - mMainStack.mLastPausedActivity = null; - } - - // Remove this application's activities from active lists. - boolean hasVisibleActivities = mMainStack.removeHistoryRecordsForAppLocked(app); + mStackSupervisor.handleAppDiedLocked(app, restarting); app.activities.clear(); - + if (app.instrumentationClass != null) { Slog.w(TAG, "Crash of app " + app.processName + " running instrumentation " + app.instrumentationClass); @@ -3012,19 +3039,6 @@ public final class ActivityManagerService extends ActivityManagerNative info.putString("shortMsg", "Process crashed."); finishInstrumentationLocked(app, Activity.RESULT_CANCELED, info); } - - if (!restarting) { - if (!mMainStack.resumeTopActivityLocked(null)) { - // If there was nothing to resume, and we are not already - // restarting this process, but there is a visible activity that - // is hosted by the process... then make sure all visible - // activities are running, taking care of restarting this - // process. - if (hasVisibleActivities) { - mMainStack.ensureActivitiesVisibleLocked(null, 0); - } - } - } } private final int getLRURecordIndexForAppLocked(IApplicationThread thread) { @@ -3167,6 +3181,7 @@ public final class ActivityManagerService extends ActivityManagerNative // Use a FileObserver to detect when traces finish writing. // The order of traces is considered important to maintain for legibility. FileObserver observer = new FileObserver(tracesPath, FileObserver.CLOSE_WRITE) { + @Override public synchronized void onEvent(int event, String path) { notify(); } }; @@ -3331,7 +3346,7 @@ public final class ActivityManagerService extends ActivityManagerNative if (MONITOR_CPU_USAGE) { updateCpuStatsNow(); } - + synchronized (this) { // PowerManager.reboot() can block for a long time, so ignore ANRs while shutting down. if (mShuttingDown) { @@ -3344,7 +3359,7 @@ public final class ActivityManagerService extends ActivityManagerNative Slog.i(TAG, "Crashing app skipping ANR: " + app + " " + annotation); return; } - + // In case we come through here for the same app before completing // this one, mark as anring now so we will bail out. app.notResponding = true; @@ -3355,11 +3370,11 @@ public final class ActivityManagerService extends ActivityManagerNative // Dump thread traces as quickly as we can, starting with "interesting" processes. firstPids.add(app.pid); - + int parentPid = app.pid; if (parent != null && parent.app != null && parent.app.pid > 0) parentPid = parent.app.pid; if (parentPid != app.pid) firstPids.add(parentPid); - + if (MY_PID != app.pid && MY_PID != parentPid) firstPids.add(MY_PID); for (int i = mLruProcesses.size() - 1; i >= 0; i--) { @@ -3442,16 +3457,16 @@ public final class ActivityManagerService extends ActivityManagerNative Process.killProcessQuiet(app.pid); return; } - + // Set the app's notResponding state, and look up the errorReportReceiver makeAppNotRespondingLocked(app, activity != null ? activity.shortComponentName : null, annotation != null ? "ANR " + annotation : "ANR", info.toString()); - + // Bring up the infamous App Not Responding dialog Message msg = Message.obtain(); - HashMap map = new HashMap(); + HashMap<String, Object> map = new HashMap<String, Object>(); msg.what = SHOW_NOT_RESPONDING_MSG; msg.obj = map; msg.arg1 = aboveSystem ? 1 : 0; @@ -3459,7 +3474,7 @@ public final class ActivityManagerService extends ActivityManagerNative if (activity != null) { map.put("activity", activity); } - + mHandler.sendMessage(msg); } } @@ -3487,7 +3502,8 @@ public final class ActivityManagerService extends ActivityManagerNative }); } } - + + @Override public boolean clearApplicationUserData(final String packageName, final IPackageDataObserver observer, int userId) { enforceNotIsolatedCaller("clearApplicationUserData"); @@ -3543,6 +3559,7 @@ public final class ActivityManagerService extends ActivityManagerNative return true; } + @Override public void killBackgroundProcesses(final String packageName, int userId) { if (checkCallingPermission(android.Manifest.permission.KILL_BACKGROUND_PROCESSES) != PackageManager.PERMISSION_GRANTED && @@ -3579,6 +3596,7 @@ public final class ActivityManagerService extends ActivityManagerNative } } + @Override public void killAllBackgroundProcesses() { if (checkCallingPermission(android.Manifest.permission.KILL_BACKGROUND_PROCESSES) != PackageManager.PERMISSION_GRANTED) { @@ -3730,13 +3748,7 @@ public final class ActivityManagerService extends ActivityManagerNative } mWindowManager.closeSystemDialogs(reason); - for (int i=mMainStack.mHistory.size()-1; i>=0; i--) { - ActivityRecord r = (ActivityRecord)mMainStack.mHistory.get(i); - if ((r.info.flags&ActivityInfo.FLAG_FINISH_ON_CLOSE_SYSTEM_DIALOGS) != 0) { - r.stack.finishActivityLocked(r, i, - Activity.RESULT_CANCELED, null, "close-sys", true); - } - } + mStackSupervisor.closeSystemDialogsLocked(); broadcastIntentLocked(null, null, intent, null, null, 0, null, null, null, AppOpsManager.OP_NONE, false, false, -1, @@ -3943,37 +3955,12 @@ public final class ActivityManagerService extends ActivityManagerNative boolean didSomething = killPackageProcessesLocked(name, appId, userId, -100, callerWillRestart, true, doit, evenPersistent, name == null ? ("force stop user " + userId) : ("force stop " + name)); - - TaskRecord lastTask = null; - for (i=0; i<mMainStack.mHistory.size(); i++) { - ActivityRecord r = (ActivityRecord)mMainStack.mHistory.get(i); - final boolean samePackage = r.packageName.equals(name) - || (name == null && r.userId == userId); - if ((userId == UserHandle.USER_ALL || r.userId == userId) - && (samePackage || r.task == lastTask) - && (r.app == null || evenPersistent || !r.app.persistent)) { - if (!doit) { - if (r.finishing) { - // If this activity is just finishing, then it is not - // interesting as far as something to stop. - continue; - } - return true; - } - didSomething = true; - Slog.i(TAG, " Force finishing activity " + r); - if (samePackage) { - if (r.app != null) { - r.app.removed = true; - } - r.app = null; - } - lastTask = r.task; - if (r.stack.finishActivityLocked(r, i, Activity.RESULT_CANCELED, - null, "force-stop", true)) { - i--; - } + + if (mStackSupervisor.forceStopPackageLocked(name, doit, evenPersistent, userId)) { + if (!doit) { + return true; } + didSomething = true; } if (mServices.forceStopLocked(name, userId, evenPersistent, doit)) { @@ -4061,11 +4048,11 @@ public final class ActivityManagerService extends ActivityManagerNative } } if (mBooted) { - mMainStack.resumeTopActivityLocked(null); - mMainStack.scheduleIdleLocked(); + mStackSupervisor.resumeTopActivityLocked(); + mStackSupervisor.scheduleIdleLocked(); } } - + return didSomething; } @@ -4200,7 +4187,7 @@ public final class ActivityManagerService extends ActivityManagerNative if (localLOGV) Slog.v( TAG, "Binding process pid " + pid + " to record " + app); - String processName = app.processName; + final String processName = app.processName; try { AppDeathRecipient adr = new AppDeathRecipient( app, pid, thread); @@ -4315,23 +4302,13 @@ public final class ActivityManagerService extends ActivityManagerNative boolean didSomething = false; // See if the top visible activity is waiting to run in this process... - ActivityRecord hr = mMainStack.topRunningActivityLocked(null); - if (hr != null && normalMode) { - if (hr.app == null && app.uid == hr.info.applicationInfo.uid - && processName.equals(hr.processName)) { - try { - if (mHeadless) { - Slog.e(TAG, "Starting activities not supported on headless device: " + hr); - } else if (mMainStack.realStartActivityLocked(hr, app, true, true)) { - didSomething = true; - } - } catch (Exception e) { - Slog.w(TAG, "Exception in new application when starting activity " - + hr.intent.getComponent().flattenToShortString(), e); - badApp = true; + if (normalMode) { + try { + if (mStackSupervisor.attachApplicationLocked(app, mHeadless)) { + didSomething = true; } - } else { - mMainStack.ensureActivitiesVisibleLocked(hr, null, processName, 0); + } catch (Exception e) { + badApp = true; } } @@ -4347,7 +4324,7 @@ public final class ActivityManagerService extends ActivityManagerNative // Check if a next-broadcast receiver is in this process... if (!badApp && isPendingBroadcastProcessLocked(pid)) { try { - didSomething = sendPendingBroadcastsLocked(app); + didSomething |= sendPendingBroadcastsLocked(app); } catch (Exception e) { // If the app died trying to launch the receiver we declare it 'bad' badApp = true; @@ -4391,13 +4368,15 @@ public final class ActivityManagerService extends ActivityManagerNative } } + @Override public final void activityIdle(IBinder token, Configuration config, boolean stopProfiling) { final long origId = Binder.clearCallingIdentity(); - ActivityRecord r = mMainStack.activityIdleInternal(token, false, config); if (stopProfiling) { synchronized (this) { - if (mProfileProc == r.app) { - if (mProfileFd != null) { + ActivityStack stack = ActivityRecord.getStackLocked(token); + if (stack != null) { + ActivityRecord r = stack.activityIdleInternalLocked(token, false, config); + if ((mProfileProc == r.app) && (mProfileFd != null)) { try { mProfileFd.close(); } catch (IOException e) { @@ -4420,11 +4399,13 @@ public final class ActivityManagerService extends ActivityManagerNative } } + @Override public void showBootMessage(final CharSequence msg, final boolean always) { enforceNotIsolatedCaller("showBootMessage"); mWindowManager.showBootMessage(msg, always); } + @Override public void dismissKeyguardOnNextActivity() { enforceNotIsolatedCaller("dismissKeyguardOnNextActivity"); final long token = Binder.clearCallingIdentity(); @@ -4434,7 +4415,7 @@ public final class ActivityManagerService extends ActivityManagerNative mLockScreenShown = false; comeOutOfSleepIfNeededLocked(); } - mMainStack.dismissKeyguardOnNextActivityLocked(); + mStackSupervisor.setDismissKeyguard(true); } } finally { Binder.restoreCallingIdentity(token); @@ -4520,18 +4501,31 @@ public final class ActivityManagerService extends ActivityManagerNative } } + @Override public final void activityResumed(IBinder token) { final long origId = Binder.clearCallingIdentity(); - mMainStack.activityResumed(token); + synchronized(this) { + ActivityStack stack = ActivityRecord.getStackLocked(token); + if (stack != null) { + stack.activityResumedLocked(token); + } + } Binder.restoreCallingIdentity(origId); } + @Override public final void activityPaused(IBinder token) { final long origId = Binder.clearCallingIdentity(); - mMainStack.activityPaused(token, false); + synchronized(this) { + ActivityStack stack = ActivityRecord.getStackLocked(token); + if (stack != null) { + stack.activityPausedLocked(token, false); + } + } Binder.restoreCallingIdentity(origId); } + @Override public final void activityStopped(IBinder token, Bundle icicle, Bitmap thumbnail, CharSequence description) { if (localLOGV) Slog.v( @@ -4547,9 +4541,9 @@ public final class ActivityManagerService extends ActivityManagerNative final long origId = Binder.clearCallingIdentity(); synchronized (this) { - r = mMainStack.isInStackLocked(token); + r = ActivityRecord.isInStackLocked(token); if (r != null) { - r.stack.activityStoppedLocked(r, icicle, thumbnail, description); + r.task.stack.activityStoppedLocked(r, icicle, thumbnail, description); } } @@ -4562,9 +4556,15 @@ public final class ActivityManagerService extends ActivityManagerNative Binder.restoreCallingIdentity(origId); } + @Override public final void activityDestroyed(IBinder token) { if (DEBUG_SWITCH) Slog.v(TAG, "ACTIVITY DESTROYED: " + token); - mMainStack.activityDestroyed(token); + synchronized (this) { + ActivityStack stack = ActivityRecord.getStackLocked(token); + if (stack != null) { + stack.activityDestroyedLocked(token); + } + } } public String getCallingPackage(IBinder token) { @@ -4582,16 +4582,17 @@ public final class ActivityManagerService extends ActivityManagerNative } private ActivityRecord getCallingRecordLocked(IBinder token) { - ActivityRecord r = mMainStack.isInStackLocked(token); + ActivityRecord r = ActivityRecord.isInStackLocked(token); if (r == null) { return null; } return r.resultTo; } + @Override public ComponentName getActivityClassForToken(IBinder token) { synchronized(this) { - ActivityRecord r = mMainStack.isInStackLocked(token); + ActivityRecord r = ActivityRecord.isInStackLocked(token); if (r == null) { return null; } @@ -4601,7 +4602,7 @@ public final class ActivityManagerService extends ActivityManagerNative public String getPackageForToken(IBinder token) { synchronized(this) { - ActivityRecord r = mMainStack.isInStackLocked(token); + ActivityRecord r = ActivityRecord.isInStackLocked(token); if (r == null) { return null; } @@ -4679,7 +4680,7 @@ public final class ActivityManagerService extends ActivityManagerNative } } } - + IIntentSender getIntentSenderLocked(int type, String packageName, int callingUid, int userId, IBinder token, String resultWho, int requestCode, Intent[] intents, String[] resolvedTypes, int flags, @@ -4688,7 +4689,7 @@ public final class ActivityManagerService extends ActivityManagerNative Slog.v(TAG_MU, "getIntentSenderLocked(): uid=" + callingUid); ActivityRecord activity = null; if (type == ActivityManager.INTENT_SENDER_ACTIVITY_RESULT) { - activity = mMainStack.isInStackLocked(token); + activity = ActivityRecord.isInStackLocked(token); if (activity == null) { return null; } @@ -5683,12 +5684,12 @@ public final class ActivityManagerService extends ActivityManagerNative // TASK MANAGEMENT // ========================================================= - public List getTasks(int maxNum, int flags, + @Override + public List<RunningTaskInfo> getTasks(int maxNum, int flags, IThumbnailReceiver receiver) { - ArrayList list = new ArrayList(); + ArrayList<RunningTaskInfo> list = new ArrayList<RunningTaskInfo>(); - PendingThumbnailsRecord pending = null; - IApplicationThread topThumbnail = null; + PendingThumbnailsRecord pending = new PendingThumbnailsRecord(receiver); ActivityRecord topRecord = null; synchronized(this) { @@ -5714,88 +5715,20 @@ public final class ActivityManagerService extends ActivityManagerNative throw new SecurityException(msg); } - int pos = mMainStack.mHistory.size()-1; - ActivityRecord next = - pos >= 0 ? (ActivityRecord)mMainStack.mHistory.get(pos) : null; - ActivityRecord top = null; - TaskRecord curTask = null; - int numActivities = 0; - int numRunning = 0; - while (pos >= 0 && maxNum > 0) { - final ActivityRecord r = next; - pos--; - next = pos >= 0 ? (ActivityRecord)mMainStack.mHistory.get(pos) : null; - - // Initialize state for next task if needed. - if (top == null || - (top.state == ActivityState.INITIALIZING - && top.task == r.task)) { - top = r; - curTask = r.task; - numActivities = numRunning = 0; - } - - // Add 'r' into the current task. - numActivities++; - if (r.app != null && r.app.thread != null) { - numRunning++; - } - - if (localLOGV) Slog.v( - TAG, r.intent.getComponent().flattenToShortString() - + ": task=" + r.task); - - // If the next one is a different task, generate a new - // TaskInfo entry for what we have. - if (next == null || next.task != curTask) { - ActivityManager.RunningTaskInfo ci - = new ActivityManager.RunningTaskInfo(); - ci.id = curTask.taskId; - ci.baseActivity = r.intent.getComponent(); - ci.topActivity = top.intent.getComponent(); - if (top.thumbHolder != null) { - ci.description = top.thumbHolder.lastDescription; - } - ci.numActivities = numActivities; - ci.numRunning = numRunning; - //System.out.println( - // "#" + maxNum + ": " + " descr=" + ci.description); - if (ci.thumbnail == null && receiver != null) { - if (localLOGV) Slog.v( - TAG, "State=" + top.state + "Idle=" + top.idle - + " app=" + top.app - + " thr=" + (top.app != null ? top.app.thread : null)); - if (top.state == ActivityState.RESUMED - || top.state == ActivityState.PAUSING) { - if (top.idle && top.app != null - && top.app.thread != null) { - topRecord = top; - topThumbnail = top.app.thread; - } else { - top.thumbnailNeeded = true; - } - } - if (pending == null) { - pending = new PendingThumbnailsRecord(receiver); - } - pending.pendingRecords.add(top); - } - list.add(ci); - maxNum--; - top = null; - } - } + // TODO: Improve with MRU list from all ActivityStacks. + topRecord = mStackSupervisor.getTasksLocked(maxNum, receiver, pending, list); - if (pending != null) { + if (!pending.pendingRecords.isEmpty()) { mPendingThumbnails.add(pending); } } if (localLOGV) Slog.v(TAG, "We have pending thumbnails: " + pending); - if (topThumbnail != null) { + if (topRecord != null) { if (localLOGV) Slog.v(TAG, "Requesting top thumbnail"); try { + IApplicationThread topThumbnail = topRecord.app.thread; topThumbnail.requestThumbnail(topRecord.appToken); } catch (Exception e) { Slog.w(TAG, "Exception thrown when requesting thumbnail", e); @@ -5889,49 +5822,56 @@ public final class ActivityManagerService extends ActivityManagerNative } } - private TaskRecord taskForIdLocked(int id) { + private TaskRecord recentTaskForIdLocked(int id) { final int N = mRecentTasks.size(); - for (int i=0; i<N; i++) { - TaskRecord tr = mRecentTasks.get(i); - if (tr.taskId == id) { - return tr; + for (int i=0; i<N; i++) { + TaskRecord tr = mRecentTasks.get(i); + if (tr.taskId == id) { + return tr; + } } - } - return null; + return null; } + @Override public ActivityManager.TaskThumbnails getTaskThumbnails(int id) { synchronized (this) { enforceCallingPermission(android.Manifest.permission.READ_FRAME_BUFFER, "getTaskThumbnails()"); - TaskRecord tr = taskForIdLocked(id); + TaskRecord tr = recentTaskForIdLocked(id); if (tr != null) { - return mMainStack.getTaskThumbnailsLocked(tr); + return tr.stack.getTaskThumbnailsLocked(tr); } } return null; } + @Override public Bitmap getTaskTopThumbnail(int id) { synchronized (this) { enforceCallingPermission(android.Manifest.permission.READ_FRAME_BUFFER, "getTaskTopThumbnail()"); - TaskRecord tr = taskForIdLocked(id); + TaskRecord tr = recentTaskForIdLocked(id); if (tr != null) { - return mMainStack.getTaskTopThumbnailLocked(tr); + return tr.stack.getTaskTopThumbnailLocked(tr); } } return null; } + @Override public boolean removeSubTask(int taskId, int subTaskIndex) { synchronized (this) { enforceCallingPermission(android.Manifest.permission.REMOVE_TASKS, "removeSubTask()"); long ident = Binder.clearCallingIdentity(); try { - return mMainStack.removeTaskActivitiesLocked(taskId, subTaskIndex, - true) != null; + TaskRecord tr = recentTaskForIdLocked(taskId); + if (tr != null) { + return tr.stack.removeTaskActivitiesLocked(taskId, subTaskIndex, + true) != null; + } + return false; } finally { Binder.restoreCallingIdentity(ident); } @@ -5985,43 +5925,32 @@ public final class ActivityManagerService extends ActivityManagerNative } } + @Override public boolean removeTask(int taskId, int flags) { synchronized (this) { enforceCallingPermission(android.Manifest.permission.REMOVE_TASKS, "removeTask()"); long ident = Binder.clearCallingIdentity(); try { - ActivityRecord r = mMainStack.removeTaskActivitiesLocked(taskId, -1, - false); - if (r != null) { - mRecentTasks.remove(r.task); - cleanUpRemovedTaskLocked(r.task, flags); - return true; - } else { - TaskRecord tr = null; - int i=0; - while (i < mRecentTasks.size()) { - TaskRecord t = mRecentTasks.get(i); - if (t.taskId == taskId) { - tr = t; - break; - } - i++; + TaskRecord tr = recentTaskForIdLocked(taskId); + if (tr != null) { + ActivityRecord r = tr.stack.removeTaskActivitiesLocked(taskId, -1, false); + if (r != null) { + mRecentTasks.remove(tr); + cleanUpRemovedTaskLocked(tr, flags); + return true; } - if (tr != null) { - if (tr.numActivities <= 0) { - // Caller is just removing a recent task that is - // not actively running. That is easy! - mRecentTasks.remove(i); - cleanUpRemovedTaskLocked(tr, flags); - return true; - } else { - Slog.w(TAG, "removeTask: task " + taskId - + " does not have activities to remove, " - + " but numActivities=" + tr.numActivities - + ": " + tr); - } + if (tr.mActivities.size() == 0) { + // Caller is just removing a recent task that is + // not actively running. That is easy! + mRecentTasks.remove(tr); + cleanUpRemovedTaskLocked(tr, flags); + return true; } + Slog.w(TAG, "removeTask: task " + taskId + + " does not have activities to remove, " + + " but numActivities=" + tr.numActivities + + ": " + tr); } } finally { Binder.restoreCallingIdentity(ident); @@ -6030,46 +5959,10 @@ public final class ActivityManagerService extends ActivityManagerNative return false; } - private final int findAffinityTaskTopLocked(int startIndex, String affinity) { - int j; - TaskRecord startTask = ((ActivityRecord)mMainStack.mHistory.get(startIndex)).task; - TaskRecord jt = startTask; - - // First look backwards - for (j=startIndex-1; j>=0; j--) { - ActivityRecord r = (ActivityRecord)mMainStack.mHistory.get(j); - if (r.task != jt) { - jt = r.task; - if (affinity.equals(jt.affinity)) { - return j; - } - } - } - - // Now look forwards - final int N = mMainStack.mHistory.size(); - jt = startTask; - for (j=startIndex+1; j<N; j++) { - ActivityRecord r = (ActivityRecord)mMainStack.mHistory.get(j); - if (r.task != jt) { - if (affinity.equals(jt.affinity)) { - return j; - } - jt = r.task; - } - } - - // Might it be at the top? - if (affinity.equals(((ActivityRecord)mMainStack.mHistory.get(N-1)).task.affinity)) { - return N-1; - } - - return -1; - } - /** * TODO: Add mController hook */ + @Override public void moveTaskToFront(int task, int flags, Bundle options) { enforceCallingPermission(android.Manifest.permission.REORDER_TASKS, "moveTaskToFront()"); @@ -6082,34 +5975,7 @@ public final class ActivityManagerService extends ActivityManagerNative } final long origId = Binder.clearCallingIdentity(); try { - TaskRecord tr = taskForIdLocked(task); - if (tr != null) { - if ((flags&ActivityManager.MOVE_TASK_NO_USER_ACTION) == 0) { - mMainStack.mUserLeaving = true; - } - if ((flags&ActivityManager.MOVE_TASK_WITH_HOME) != 0) { - // Caller wants the home activity moved with it. To accomplish this, - // we'll just move the home task to the top first. - mMainStack.moveHomeToFrontLocked(); - } - mMainStack.moveTaskToFrontLocked(tr, null, options); - return; - } - for (int i=mMainStack.mHistory.size()-1; i>=0; i--) { - ActivityRecord hr = (ActivityRecord)mMainStack.mHistory.get(i); - if (hr.task.taskId == task) { - if ((flags&ActivityManager.MOVE_TASK_NO_USER_ACTION) == 0) { - mMainStack.mUserLeaving = true; - } - if ((flags&ActivityManager.MOVE_TASK_WITH_HOME) != 0) { - // Caller wants the home activity moved with it. To accomplish this, - // we'll just move the home task to the top first. - mMainStack.moveHomeToFrontLocked(); - } - mMainStack.moveTaskToFrontLocked(hr.task, null, options); - return; - } - } + mStackSupervisor.findTaskToMoveToFrontLocked(task, flags, options); } finally { Binder.restoreCallingIdentity(origId); } @@ -6117,21 +5983,25 @@ public final class ActivityManagerService extends ActivityManagerNative } } + @Override public void moveTaskToBack(int task) { enforceCallingPermission(android.Manifest.permission.REORDER_TASKS, "moveTaskToBack()"); synchronized(this) { - if (mMainStack.mResumedActivity != null - && mMainStack.mResumedActivity.task.taskId == task) { - if (!checkAppSwitchAllowedLocked(Binder.getCallingPid(), - Binder.getCallingUid(), "Task to back")) { - return; + TaskRecord tr = recentTaskForIdLocked(task); + if (tr != null) { + ActivityStack stack = tr.stack; + if (stack.mResumedActivity != null && stack.mResumedActivity.task == tr) { + if (!checkAppSwitchAllowedLocked(Binder.getCallingPid(), + Binder.getCallingUid(), "Task to back")) { + return; + } } + final long origId = Binder.clearCallingIdentity(); + stack.moveTaskToBackLocked(task, null); + Binder.restoreCallingIdentity(origId); } - final long origId = Binder.clearCallingIdentity(); - mMainStack.moveTaskToBackLocked(task, null); - Binder.restoreCallingIdentity(origId); } } @@ -6144,19 +6014,21 @@ public final class ActivityManagerService extends ActivityManagerNative * of a task; if true it will work for any activity in a task. * @return Returns true if the move completed, false if not. */ + @Override public boolean moveActivityTaskToBack(IBinder token, boolean nonRoot) { enforceNotIsolatedCaller("moveActivityTaskToBack"); synchronized(this) { final long origId = Binder.clearCallingIdentity(); - int taskId = getTaskForActivityLocked(token, !nonRoot); + int taskId = ActivityRecord.getTaskForActivityLocked(token, !nonRoot); if (taskId >= 0) { - return mMainStack.moveTaskToBackLocked(taskId, null); + return ActivityRecord.getStackLocked(token).moveTaskToBackLocked(taskId, null); } Binder.restoreCallingIdentity(origId); } return false; } + @Override public void moveTaskBackwards(int task) { enforceCallingPermission(android.Manifest.permission.REORDER_TASKS, "moveTaskBackwards()"); @@ -6176,27 +6048,33 @@ public final class ActivityManagerService extends ActivityManagerNative Slog.e(TAG, "moveTaskBackwards not yet implemented!"); } - public int getTaskForActivity(IBinder token, boolean onlyRoot) { - synchronized(this) { - return getTaskForActivityLocked(token, onlyRoot); + @Override + public int createStack(int relativeStackId, int position, float weight) { + synchronized (this) { + int stackId = mStackSupervisor.createStack(relativeStackId, position, weight); + mWindowManager.createStack(stackId, position, relativeStackId, weight); + return stackId; } } - int getTaskForActivityLocked(IBinder token, boolean onlyRoot) { - final int N = mMainStack.mHistory.size(); - TaskRecord lastTask = null; - for (int i=0; i<N; i++) { - ActivityRecord r = (ActivityRecord)mMainStack.mHistory.get(i); - if (r.appToken == token) { - if (!onlyRoot || lastTask != r.task) { - return r.task.taskId; - } - return -1; - } - lastTask = r.task; + @Override + public void moveTaskToStack(int taskId, int stackId, boolean toTop) { + synchronized (this) { + mStackSupervisor.moveTaskToStack(taskId, stackId, toTop); + mWindowManager.moveTaskToStack(taskId, stackId, toTop); } + } - return -1; + @Override + public void resizeStack(int stackId, float weight) { + mWindowManager.resizeStack(stackId, weight); + } + + @Override + public int getTaskForActivity(IBinder token, boolean onlyRoot) { + synchronized(this) { + return ActivityRecord.getTaskForActivityLocked(token, onlyRoot); + } } // ========================================================= @@ -6220,7 +6098,7 @@ public final class ActivityManagerService extends ActivityManagerNative synchronized(this) { if (r == null) { - r = mMainStack.isInStackLocked(token); + r = ActivityRecord.isInStackLocked(token); if (r == null) { return; } @@ -7104,13 +6982,10 @@ public final class ActivityManagerService extends ActivityManagerNative "unhandledBack()"); synchronized(this) { - int count = mMainStack.mHistory.size(); - if (DEBUG_SWITCH) Slog.d( - TAG, "Performing unhandledBack(): stack size = " + count); - if (count > 1) { - final long origId = Binder.clearCallingIdentity(); - mMainStack.finishActivityLocked((ActivityRecord)mMainStack.mHistory.get(count-1), - count-1, Activity.RESULT_CANCELED, null, "unhandled-back", true); + final long origId = Binder.clearCallingIdentity(); + try { + getMainStack().unhandledBackLocked(); + } finally { Binder.restoreCallingIdentity(origId); } } @@ -7151,7 +7026,7 @@ public final class ActivityManagerService extends ActivityManagerNative // Actually is sleeping or shutting down or whatever else in the future // is an inactive state. - public boolean isSleeping() { + public boolean isSleepingOrShuttingDown() { return mSleeping || mShuttingDown; } @@ -7168,7 +7043,7 @@ public final class ActivityManagerService extends ActivityManagerNative if (!mSleeping) { mSleeping = true; - mMainStack.stopIfSleepingLocked(); + mStackSupervisor.goingToSleepLocked(); // Initialize the wake times of all processes. checkExcessivePowerUsageLocked(false); @@ -7179,42 +7054,26 @@ public final class ActivityManagerService extends ActivityManagerNative } } + @Override public boolean shutdown(int timeout) { if (checkCallingPermission(android.Manifest.permission.SHUTDOWN) != PackageManager.PERMISSION_GRANTED) { throw new SecurityException("Requires permission " + android.Manifest.permission.SHUTDOWN); } - + boolean timedout = false; - + synchronized(this) { mShuttingDown = true; updateEventDispatchingLocked(); - - if (mMainStack.mResumedActivity != null) { - mMainStack.stopIfSleepingLocked(); - final long endTime = System.currentTimeMillis() + timeout; - while (mMainStack.mResumedActivity != null - || mMainStack.mPausingActivity != null) { - long delay = endTime - System.currentTimeMillis(); - if (delay <= 0) { - Slog.w(TAG, "Activity manager shutdown timed out"); - timedout = true; - break; - } - try { - this.wait(); - } catch (InterruptedException e) { - } - } - } + timedout = mStackSupervisor.shutdownLocked(timeout); } mAppOpsService.shutdown(); mUsageStatsService.shutdown(); mBatteryStatsService.shutdown(); - + return timedout; } @@ -7227,9 +7086,9 @@ public final class ActivityManagerService extends ActivityManagerNative final long origId = Binder.clearCallingIdentity(); synchronized (this) { - r = mMainStack.isInStackLocked(token); + r = ActivityRecord.isInStackLocked(token); if (r != null) { - mMainStack.activitySleptLocked(r); + r.task.stack.activitySleptLocked(r); } } @@ -7240,8 +7099,7 @@ public final class ActivityManagerService extends ActivityManagerNative if (!mWentToSleep && !mLockScreenShown) { if (mSleeping) { mSleeping = false; - mMainStack.awakeFromSleepingLocked(); - mMainStack.resumeTopActivityLocked(null); + mStackSupervisor.comeOutOfSleepIfNeededLocked(); } } } @@ -7516,7 +7374,7 @@ public final class ActivityManagerService extends ActivityManagerNative PendingActivityExtras pae; Bundle extras = new Bundle(); synchronized (this) { - ActivityRecord activity = mMainStack.mResumedActivity; + ActivityRecord activity = getMainStack().mResumedActivity; if (activity == null) { Slog.w(TAG, "getTopActivityExtras failed: no resumed activity"); return null; @@ -7583,7 +7441,7 @@ public final class ActivityManagerService extends ActivityManagerNative public void setImmersive(IBinder token, boolean immersive) { synchronized(this) { - final ActivityRecord r = mMainStack.isInStackLocked(token); + final ActivityRecord r = ActivityRecord.isInStackLocked(token); if (r == null) { throw new IllegalArgumentException(); } @@ -7601,7 +7459,7 @@ public final class ActivityManagerService extends ActivityManagerNative public boolean isImmersive(IBinder token) { synchronized (this) { - ActivityRecord r = mMainStack.isInStackLocked(token); + ActivityRecord r = ActivityRecord.isInStackLocked(token); if (r == null) { throw new IllegalArgumentException(); } @@ -7612,7 +7470,7 @@ public final class ActivityManagerService extends ActivityManagerNative public boolean isTopActivityImmersive() { enforceNotIsolatedCaller("startActivity"); synchronized (this) { - ActivityRecord r = mMainStack.topRunningActivityLocked(null); + ActivityRecord r = getMainStack().topRunningActivityLocked(null); return (r != null) ? r.immersive : false; } } @@ -8110,7 +7968,7 @@ public final class ActivityManagerService extends ActivityManagerNative } finally { Binder.restoreCallingIdentity(ident); } - mMainStack.resumeTopActivityLocked(null); + mStackSupervisor.resumeTopActivityLocked(); sendUserSwitchBroadcastsLocked(-1, mCurrentUserId); } } @@ -8205,15 +8063,7 @@ public final class ActivityManagerService extends ActivityManagerNative + " has crashed too many times: killing!"); EventLog.writeEvent(EventLogTags.AM_PROCESS_CRASHED_TOO_MUCH, app.userId, app.info.processName, app.uid); - for (int i=mMainStack.mHistory.size()-1; i>=0; i--) { - ActivityRecord r = (ActivityRecord)mMainStack.mHistory.get(i); - if (r.app == app) { - Slog.w(TAG, " Force finishing activity " - + r.intent.getComponent().flattenToShortString()); - r.stack.finishActivityLocked(r, i, Activity.RESULT_CANCELED, - null, "crashed", false); - } - } + mStackSupervisor.handleAppCrashLocked(app); if (!app.persistent) { // We don't want to start this process again until the user // explicitly does so... but for persistent process, we really @@ -8233,38 +8083,12 @@ public final class ActivityManagerService extends ActivityManagerNative // annoy the user repeatedly. Unless it is persistent, since those // processes run critical code. removeProcessLocked(app, false, false, "crash"); - mMainStack.resumeTopActivityLocked(null); + mStackSupervisor.resumeTopActivityLocked(); return false; } - mMainStack.resumeTopActivityLocked(null); + mStackSupervisor.resumeTopActivityLocked(); } else { - ActivityRecord r = mMainStack.topRunningActivityLocked(null); - if (r != null && r.app == app) { - // If the top running activity is from this crashing - // process, then terminate it to avoid getting in a loop. - Slog.w(TAG, " Force finishing activity " - + r.intent.getComponent().flattenToShortString()); - int index = mMainStack.indexOfActivityLocked(r); - r.stack.finishActivityLocked(r, index, - Activity.RESULT_CANCELED, null, "crashed", false); - // Also terminate any activities below it that aren't yet - // stopped, to avoid a situation where one will get - // re-start our crashing activity once it gets resumed again. - index--; - if (index >= 0) { - r = (ActivityRecord)mMainStack.mHistory.get(index); - if (r.state == ActivityState.RESUMED - || r.state == ActivityState.PAUSING - || r.state == ActivityState.PAUSED) { - if (!r.isHomeActivity || mHomeProcess != r.app) { - Slog.w(TAG, " Force finishing activity " - + r.intent.getComponent().flattenToShortString()); - r.stack.finishActivityLocked(r, index, - Activity.RESULT_CANCELED, null, "crashed", false); - } - } - } - } + mStackSupervisor.finishTopRunningActivityLocked(app); } // Bump up the crash count of any services currently running in the proc. @@ -8284,9 +8108,9 @@ public final class ActivityManagerService extends ActivityManagerNative // from blocking the user to manually clear the list. if (app == mHomeProcess && mHomeProcess.activities.size() > 0 && (mHomeProcess.info.flags & ApplicationInfo.FLAG_SYSTEM) == 0) { - Iterator it = mHomeProcess.activities.iterator(); + Iterator<ActivityRecord> it = mHomeProcess.activities.iterator(); while (it.hasNext()) { - ActivityRecord r = (ActivityRecord)it.next(); + ActivityRecord r = it.next(); if (r.isHomeActivity) { Log.i(TAG, "Clearing package preferred activities from " + r.packageName); try { @@ -9290,50 +9114,14 @@ public final class ActivityManagerService extends ActivityManagerNative boolean dumpActivitiesLocked(FileDescriptor fd, PrintWriter pw, String[] args, int opti, boolean dumpAll, boolean dumpClient, String dumpPackage) { pw.println("ACTIVITY MANAGER ACTIVITIES (dumpsys activity activities)"); - pw.println(" Main stack:"); - dumpHistoryList(fd, pw, mMainStack.mHistory, " ", "Hist", true, !dumpAll, dumpClient, - dumpPackage); - pw.println(" "); - pw.println(" Running activities (most recent first):"); - dumpHistoryList(fd, pw, mMainStack.mLRUActivities, " ", "Run", false, !dumpAll, false, - dumpPackage); - if (mMainStack.mWaitingVisibleActivities.size() > 0) { - pw.println(" "); - pw.println(" Activities waiting for another to become visible:"); - dumpHistoryList(fd, pw, mMainStack.mWaitingVisibleActivities, " ", "Wait", false, - !dumpAll, false, dumpPackage); - } - if (mMainStack.mStoppingActivities.size() > 0) { - pw.println(" "); - pw.println(" Activities waiting to stop:"); - dumpHistoryList(fd, pw, mMainStack.mStoppingActivities, " ", "Stop", false, - !dumpAll, false, dumpPackage); - } - if (mMainStack.mGoingToSleepActivities.size() > 0) { - pw.println(" "); - pw.println(" Activities waiting to sleep:"); - dumpHistoryList(fd, pw, mMainStack.mGoingToSleepActivities, " ", "Sleep", false, - !dumpAll, false, dumpPackage); - } - if (mMainStack.mFinishingActivities.size() > 0) { - pw.println(" "); - pw.println(" Activities waiting to finish:"); - dumpHistoryList(fd, pw, mMainStack.mFinishingActivities, " ", "Fin", false, - !dumpAll, false, dumpPackage); - } + + mStackSupervisor.dumpActivitiesLocked(fd, pw, dumpAll, dumpClient, dumpPackage); pw.println(" "); - if (mMainStack.mPausingActivity != null) { - pw.println(" mPausingActivity: " + mMainStack.mPausingActivity); - } - pw.println(" mResumedActivity: " + mMainStack.mResumedActivity); pw.println(" mFocusedActivity: " + mFocusedActivity); - if (dumpAll) { - pw.println(" mLastPausedActivity: " + mMainStack.mLastPausedActivity); - pw.println(" mSleepTimeout: " + mMainStack.mSleepTimeout); - pw.println(" mDismissKeyguardOnNextActivity: " - + mMainStack.mDismissKeyguardOnNextActivity); - } + pw.println(" "); + + mStackSupervisor.dump(pw, " "); if (mRecentTasks.size() > 0) { pw.println(); @@ -9355,12 +9143,7 @@ public final class ActivityManagerService extends ActivityManagerNative } } } - - if (dumpAll) { - pw.println(" "); - pw.println(" mCurTask: " + mCurTask); - } - + return true; } @@ -9577,7 +9360,7 @@ public final class ActivityManagerService extends ActivityManagerNative } pw.println(" mConfiguration: " + mConfiguration); if (dumpAll) { - pw.println(" mConfigWillChange: " + mMainStack.mConfigWillChange); + pw.println(" mConfigWillChange: " + getMainStack().mConfigWillChange); if (mCompatModePackages.getPackages().size() > 0) { boolean printed = false; for (Map.Entry<String, Integer> entry @@ -9637,8 +9420,8 @@ public final class ActivityManagerService extends ActivityManagerNative pw.print(" mLastPowerCheckUptime="); TimeUtils.formatDuration(mLastPowerCheckUptime, pw); pw.println(""); - pw.println(" mGoingToSleep=" + mMainStack.mGoingToSleep); - pw.println(" mLaunchingActivity=" + mMainStack.mLaunchingActivity); + pw.println(" mGoingToSleep=" + getMainStack().mGoingToSleep); + pw.println(" mLaunchingActivity=" + getMainStack().mLaunchingActivity); pw.println(" mAdjSeq=" + mAdjSeq + " mLruSeq=" + mLruSeq); pw.println(" mNumNonHiddenProcs=" + mNumNonHiddenProcs + " mNumHiddenProcs=" + mNumHiddenProcs @@ -9822,32 +9605,10 @@ public final class ActivityManagerService extends ActivityManagerNative */ protected boolean dumpActivity(FileDescriptor fd, PrintWriter pw, String name, String[] args, int opti, boolean dumpAll) { - ArrayList<ActivityRecord> activities = new ArrayList<ActivityRecord>(); - - if ("all".equals(name)) { - synchronized (this) { - for (ActivityRecord r1 : (ArrayList<ActivityRecord>)mMainStack.mHistory) { - activities.add(r1); - } - } - } else if ("top".equals(name)) { - synchronized (this) { - final int N = mMainStack.mHistory.size(); - if (N > 0) { - activities.add((ActivityRecord)mMainStack.mHistory.get(N-1)); - } - } - } else { - ItemMatcher matcher = new ItemMatcher(); - matcher.build(name); - - synchronized (this) { - for (ActivityRecord r1 : (ArrayList<ActivityRecord>)mMainStack.mHistory) { - if (matcher.match(r1, r1.intent.getComponent())) { - activities.add(r1); - } - } - } + ArrayList<ActivityRecord> activities; + + synchronized (this) { + activities = mStackSupervisor.getDumpActivitiesLocked(name); } if (activities.size() <= 0) { @@ -10099,75 +9860,6 @@ public final class ActivityManagerService extends ActivityManagerNative return needSep; } - private static final void dumpHistoryList(FileDescriptor fd, PrintWriter pw, List list, - String prefix, String label, boolean complete, boolean brief, boolean client, - String dumpPackage) { - TaskRecord lastTask = null; - boolean needNL = false; - final String innerPrefix = prefix + " "; - final String[] args = new String[0]; - for (int i=list.size()-1; i>=0; i--) { - final ActivityRecord r = (ActivityRecord)list.get(i); - if (dumpPackage != null && !dumpPackage.equals(r.packageName)) { - continue; - } - final boolean full = !brief && (complete || !r.isInHistory()); - if (needNL) { - pw.println(" "); - needNL = false; - } - if (lastTask != r.task) { - lastTask = r.task; - pw.print(prefix); - pw.print(full ? "* " : " "); - pw.println(lastTask); - if (full) { - lastTask.dump(pw, prefix + " "); - } else if (complete) { - // Complete + brief == give a summary. Isn't that obvious?!? - if (lastTask.intent != null) { - pw.print(prefix); pw.print(" "); - pw.println(lastTask.intent.toInsecureStringWithClip()); - } - } - } - pw.print(prefix); pw.print(full ? " * " : " "); pw.print(label); - pw.print(" #"); pw.print(i); pw.print(": "); - pw.println(r); - if (full) { - r.dump(pw, innerPrefix); - } else if (complete) { - // Complete + brief == give a summary. Isn't that obvious?!? - pw.print(innerPrefix); pw.println(r.intent.toInsecureString()); - if (r.app != null) { - pw.print(innerPrefix); pw.println(r.app); - } - } - if (client && r.app != null && r.app.thread != null) { - // flush anything that is already in the PrintWriter since the thread is going - // to write to the file descriptor directly - pw.flush(); - try { - TransferPipe tp = new TransferPipe(); - try { - r.app.thread.dumpActivity(tp.getWriteFd().getFileDescriptor(), - r.appToken, innerPrefix, args); - // Short timeout, since blocking here can - // deadlock with the application. - tp.go(fd, 2000); - } finally { - tp.kill(); - } - } catch (IOException e) { - pw.println(innerPrefix + "Failure while dumping the activity: " + e); - } catch (RemoteException e) { - pw.println(innerPrefix + "Got a RemoteException while dumping the activity"); - } - needNL = true; - } - } - } - private static String buildOomTag(String prefix, String space, int val, int base) { if (val == base) { if (space == null) return prefix; @@ -12462,6 +12154,10 @@ public final class ActivityManagerService extends ActivityManagerNative return config; } + ActivityStack getMainStack() { + return mStackSupervisor.getMainStack(); + } + public Configuration getConfiguration() { Configuration ci; synchronized(this) { @@ -12603,21 +12299,9 @@ public final class ActivityManagerService extends ActivityManagerNative } } } - - if (changes != 0 && starting == null) { - // If the configuration changed, and the caller is not already - // in the process of starting an activity, then find the top - // activity to check if its configuration needs to change. - starting = mMainStack.topRunningActivityLocked(null); - } - - if (starting != null) { - kept = mMainStack.ensureActivityConfigurationLocked(starting, changes); - // And we need to make sure at this point that all other activities - // are made visible with the correct configuration. - mMainStack.ensureActivitiesVisibleLocked(starting, changes); - } - + + kept = mStackSupervisor.updateConfigurationLocked(changes, starting); + if (values != null && mWindowManager != null) { mWindowManager.setNewConfiguration(mConfiguration); } @@ -12663,95 +12347,13 @@ public final class ActivityManagerService extends ActivityManagerNative public boolean navigateUpTo(IBinder token, Intent destIntent, int resultCode, Intent resultData) { - ComponentName dest = destIntent.getComponent(); synchronized (this) { - ActivityRecord srec = ActivityRecord.forToken(token); - if (srec == null) { - return false; - } - ArrayList<ActivityRecord> history = srec.stack.mHistory; - final int start = history.indexOf(srec); - if (start < 0) { - // Current activity is not in history stack; do nothing. - return false; - } - int finishTo = start - 1; - ActivityRecord parent = null; - boolean foundParentInTask = false; - if (dest != null) { - TaskRecord tr = srec.task; - for (int i = start - 1; i >= 0; i--) { - ActivityRecord r = history.get(i); - if (tr != r.task) { - // Couldn't find parent in the same task; stop at the one above this. - // (Root of current task; in-app "home" behavior) - // Always at least finish the current activity. - finishTo = Math.min(start - 1, i + 1); - parent = history.get(finishTo); - break; - } else if (r.info.packageName.equals(dest.getPackageName()) && - r.info.name.equals(dest.getClassName())) { - finishTo = i; - parent = r; - foundParentInTask = true; - break; - } - } - } - - if (mController != null) { - ActivityRecord next = mMainStack.topRunningActivityLocked(token, 0); - if (next != null) { - // ask watcher if this is allowed - boolean resumeOK = true; - try { - resumeOK = mController.activityResuming(next.packageName); - } catch (RemoteException e) { - mController = null; - } - - if (!resumeOK) { - return false; - } - } - } - final long origId = Binder.clearCallingIdentity(); - for (int i = start; i > finishTo; i--) { - ActivityRecord r = history.get(i); - mMainStack.requestFinishActivityLocked(r.appToken, resultCode, resultData, - "navigate-up", true); - // Only return the supplied result for the first activity finished - resultCode = Activity.RESULT_CANCELED; - resultData = null; - } - - if (parent != null && foundParentInTask) { - final int parentLaunchMode = parent.info.launchMode; - final int destIntentFlags = destIntent.getFlags(); - if (parentLaunchMode == ActivityInfo.LAUNCH_SINGLE_INSTANCE || - parentLaunchMode == ActivityInfo.LAUNCH_SINGLE_TASK || - parentLaunchMode == ActivityInfo.LAUNCH_SINGLE_TOP || - (destIntentFlags & Intent.FLAG_ACTIVITY_CLEAR_TOP) != 0) { - parent.deliverNewIntentLocked(srec.info.applicationInfo.uid, destIntent); - } else { - try { - ActivityInfo aInfo = AppGlobals.getPackageManager().getActivityInfo( - destIntent.getComponent(), 0, srec.userId); - int res = mMainStack.startActivityLocked(srec.app.thread, destIntent, - null, aInfo, parent.appToken, null, - 0, -1, parent.launchedFromUid, parent.launchedFromPackage, - 0, null, true, null); - foundParentInTask = res == ActivityManager.START_SUCCESS; - } catch (RemoteException e) { - foundParentInTask = false; - } - mMainStack.requestFinishActivityLocked(parent.appToken, resultCode, - resultData, "navigate-up", true); - } + final ActivityStack stack = ActivityRecord.getStackLocked(token); + if (stack != null) { + return stack.navigateUpToLocked(token, destIntent, resultCode, resultData); } - Binder.restoreCallingIdentity(origId); - return foundParentInTask; + return false; } } @@ -13492,8 +13094,7 @@ public final class ActivityManagerService extends ActivityManagerNative } } return !processingBroadcasts - && (mSleeping || (mMainStack.mResumedActivity != null && - mMainStack.mResumedActivity.idle)); + && (mSleeping || mStackSupervisor.allResumedActivitiesIdle()); } /** @@ -13777,11 +13378,12 @@ public final class ActivityManagerService extends ActivityManagerNative } private final ActivityRecord resumedAppLocked() { - ActivityRecord resumedActivity = mMainStack.mResumedActivity; + final ActivityStack stack = mStackSupervisor.getMainStack(); + ActivityRecord resumedActivity = stack.mResumedActivity; if (resumedActivity == null || resumedActivity.app == null) { - resumedActivity = mMainStack.mPausingActivity; + resumedActivity = stack.mPausingActivity; if (resumedActivity == null || resumedActivity.app == null) { - resumedActivity = mMainStack.topRunningActivityLocked(null); + resumedActivity = stack.topRunningActivityLocked(null); } } return resumedActivity; @@ -14027,7 +13629,7 @@ public final class ActivityManagerService extends ActivityManagerNative // be in a consistent state at this point. // For these apps we will also finish their activities // to help them free memory. - mMainStack.scheduleDestroyActivities(app, false, "trim"); + mStackSupervisor.scheduleDestroyAllActivities(app, "trim"); } } } @@ -14101,7 +13703,7 @@ public final class ActivityManagerService extends ActivityManagerNative if (mAlwaysFinishActivities) { // 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"); + mStackSupervisor.scheduleDestroyAllActivities(null, "always-finish"); } } @@ -14401,7 +14003,6 @@ public final class ActivityManagerService extends ActivityManagerNative } mCurrentUserId = userId; - mCurrentUserArray = new int[] { userId }; final Integer userIdInt = Integer.valueOf(userId); mUserLru.remove(userIdInt); mUserLru.add(userIdInt); @@ -14467,7 +14068,7 @@ public final class ActivityManagerService extends ActivityManagerNative } } - boolean haveActivities = mMainStack.switchUserLocked(userId, uss); + boolean haveActivities = mStackSupervisor.switchUserLocked(userId, uss); if (!haveActivities) { startHomeActivityLocked(userId); } diff --git a/services/java/com/android/server/am/ActivityRecord.java b/services/java/com/android/server/am/ActivityRecord.java index 054d213..3384c20 100644 --- a/services/java/com/android/server/am/ActivityRecord.java +++ b/services/java/com/android/server/am/ActivityRecord.java @@ -20,8 +20,8 @@ import com.android.internal.app.ResolverActivity; import com.android.server.AttributeCache; import com.android.server.am.ActivityStack.ActivityState; -import android.app.Activity; import android.app.ActivityOptions; +import android.app.ResultInfo; import android.content.ComponentName; import android.content.Intent; import android.content.pm.ActivityInfo; @@ -55,7 +55,6 @@ import java.util.HashSet; */ final class ActivityRecord { final ActivityManagerService service; // owner - final ActivityStack stack; // owner final IApplicationToken.Stub appToken; // window manager token final ActivityInfo info; // all about me final int launchedFromUid; // always the uid who started the activity. @@ -95,9 +94,9 @@ final class ActivityRecord { ActivityRecord resultTo; // who started this entry, so will get our reply final String resultWho; // additional identifier for use by resultTo. final int requestCode; // code given by requester (resultTo) - ArrayList results; // pending ActivityResult objs we have received + ArrayList<ResultInfo> results; // pending ActivityResult objs we have received HashSet<WeakReference<PendingIntentRecord>> pendingResults; // all pending intents for this act - ArrayList newIntents; // any pending new intents for single-top mode + ArrayList<Intent> newIntents; // any pending new intents for single-top mode ActivityOptions pendingOptions; // most recently given options HashSet<ConnectionRecord> connections; // All ConnectionRecord we hold UriPermissionOwner uriPermissions; // current special URI access perms. @@ -136,7 +135,7 @@ final class ActivityRecord { pw.print(prefix); pw.print("packageName="); pw.print(packageName); pw.print(" processName="); pw.println(processName); pw.print(prefix); pw.print("launchedFromUid="); pw.print(launchedFromUid); - pw.print(" launchedFromPackage="); pw.println(launchedFromPackage); + pw.print(" launchedFromPackage="); pw.print(launchedFromPackage); pw.print(" userId="); pw.println(userId); pw.print(prefix); pw.print("app="); pw.println(app); pw.print(prefix); pw.println(intent.toInsecureStringWithClip()); @@ -182,7 +181,7 @@ final class ActivityRecord { if (newIntents != null && newIntents.size() > 0) { pw.print(prefix); pw.println("Pending New Intents:"); for (int i=0; i<newIntents.size(); i++) { - Intent intent = (Intent)newIntents.get(i); + Intent intent = newIntents.get(i); pw.print(prefix); pw.print(" - "); if (intent == null) { pw.println("null"); @@ -326,13 +325,12 @@ final class ActivityRecord { } } - ActivityRecord(ActivityManagerService _service, ActivityStack _stack, ProcessRecord _caller, + ActivityRecord(ActivityManagerService _service, ProcessRecord _caller, int _launchedFromUid, String _launchedFromPackage, Intent _intent, String _resolvedType, ActivityInfo aInfo, Configuration _configuration, ActivityRecord _resultTo, String _resultWho, int _reqCode, boolean _componentSpecified) { service = _service; - stack = _stack; appToken = new Token(this); info = aInfo; launchedFromUid = _launchedFromUid; @@ -504,6 +502,7 @@ final class ActivityRecord { inHistory = false; if (task != null && !finishing) { task.numActivities--; + task = null; } clearOptionsLocked(); } @@ -538,7 +537,7 @@ final class ActivityRecord { ActivityResult r = new ActivityResult(from, resultWho, requestCode, resultCode, resultData); if (results == null) { - results = new ArrayList(); + results = new ArrayList<ResultInfo>(); } results.add(r); } @@ -563,7 +562,7 @@ final class ActivityRecord { void addNewIntentLocked(Intent intent) { if (newIntents == null) { - newIntents = new ArrayList(); + newIntents = new ArrayList<Intent>(); } newIntents.add(intent); } @@ -583,7 +582,7 @@ final class ActivityRecord { // case we will deliver it if this is the current top activity on its // stack. if ((state == ActivityState.RESUMED || (service.mSleeping - && stack.topRunningActivityLocked(null) == this)) + && task.stack.topRunningActivityLocked(null) == this)) && app != null && app.thread != null) { try { ArrayList<Intent> ar = new ArrayList<Intent>(); @@ -727,6 +726,7 @@ final class ActivityRecord { boolean continueLaunchTickingLocked() { if (launchTickTime != 0) { + final ActivityStack stack = task.stack; Message msg = stack.mHandler.obtainMessage(ActivityStack.LAUNCH_TICK_MSG); msg.obj = this; stack.mHandler.removeMessages(ActivityStack.LAUNCH_TICK_MSG); @@ -738,7 +738,7 @@ final class ActivityRecord { void finishLaunchTickingLocked() { launchTickTime = 0; - stack.mHandler.removeMessages(ActivityStack.LAUNCH_TICK_MSG); + task.stack.mHandler.removeMessages(ActivityStack.LAUNCH_TICK_MSG); } // IApplicationToken @@ -767,6 +767,7 @@ final class ActivityRecord { public void windowsDrawn() { synchronized(service) { if (launchTime != 0) { + final ActivityStack stack = task.stack; final long curTime = SystemClock.uptimeMillis(); final long thisTime = curTime - launchTime; final long totalTime = stack.mInitialStartTime != 0 @@ -802,6 +803,7 @@ final class ActivityRecord { public void windowsVisible() { synchronized(service) { + final ActivityStack stack = task.stack; stack.reportActivityVisibleLocked(this); if (ActivityManagerService.DEBUG_SWITCH) Log.v( ActivityManagerService.TAG, "windowsVisible(): " + this); @@ -822,8 +824,7 @@ final class ActivityRecord { final int N = stack.mWaitingVisibleActivities.size(); if (N > 0) { for (int i=0; i<N; i++) { - ActivityRecord r = (ActivityRecord) - stack.mWaitingVisibleActivities.get(i); + ActivityRecord r = stack.mWaitingVisibleActivities.get(i); r.waitingVisible = false; if (ActivityManagerService.DEBUG_SWITCH) Log.v( ActivityManagerService.TAG, @@ -851,6 +852,7 @@ final class ActivityRecord { // for another app to start, then we have paused dispatching // for this activity. ActivityRecord r = this; + final ActivityStack stack = task.stack; if (r.waitingVisible) { // Hmmm, who might we be waiting for? r = stack.mResumedActivity; @@ -900,6 +902,7 @@ final class ActivityRecord { if (app != null && app.thread != null) { try { app.thread.scheduleSleeping(appToken, _sleeping); + final ActivityStack stack = task.stack; if (sleeping && !stack.mGoingToSleepActivities.contains(this)) { stack.mGoingToSleepActivities.add(this); } @@ -910,10 +913,40 @@ final class ActivityRecord { } } } - + + static int getTaskForActivityLocked(IBinder token, boolean onlyRoot) { + final ActivityRecord r = ActivityRecord.forToken(token); + if (r == null) { + return -1; + } + final TaskRecord task = r.task; + switch (task.mActivities.indexOf(r)) { + case -1: return -1; + case 0: return task.taskId; + default: return onlyRoot ? -1 : task.taskId; + } + } + + static ActivityRecord isInStackLocked(IBinder token) { + final ActivityRecord r = ActivityRecord.forToken(token); + if (r != null) { + return r.task.stack.isInStackLocked(token); + } + return null; + } + + static final ActivityStack getStackLocked(IBinder token) { + final ActivityRecord r = ActivityRecord.isInStackLocked(token); + if (r != null) { + return r.task.stack; + } + return null; + } + + @Override public String toString() { if (stringName != null) { - return stringName; + return stringName + " t" + task.taskId + (finishing ? " f}" : "}"); } StringBuilder sb = new StringBuilder(128); sb.append("ActivityRecord{"); @@ -922,7 +955,7 @@ final class ActivityRecord { sb.append(userId); sb.append(' '); sb.append(intent.getComponent().flattenToShortString()); - sb.append('}'); - return stringName = sb.toString(); + stringName = sb.toString(); + return toString(); } } diff --git a/services/java/com/android/server/am/ActivityStack.java b/services/java/com/android/server/am/ActivityStack.java index 526b24f..ad895b1 100644 --- a/services/java/com/android/server/am/ActivityStack.java +++ b/services/java/com/android/server/am/ActivityStack.java @@ -19,30 +19,30 @@ package com.android.server.am; import static android.Manifest.permission.START_ANY_ACTIVITY; import static android.content.pm.PackageManager.PERMISSION_GRANTED; -import com.android.internal.app.HeavyWeightSwitcherActivity; import com.android.internal.os.BatteryStatsImpl; +import com.android.internal.util.Objects; +import com.android.server.am.ActivityManagerService.ItemMatcher; import com.android.server.am.ActivityManagerService.PendingActivityLaunch; import com.android.server.wm.AppTransition; +import com.android.server.wm.TaskGroup; import android.app.Activity; import android.app.ActivityManager; import android.app.ActivityOptions; import android.app.AppGlobals; +import android.app.IActivityController; import android.app.IActivityManager; +import android.app.IThumbnailReceiver; import android.app.IThumbnailRetriever; import android.app.IApplicationThread; -import android.app.PendingIntent; import android.app.ResultInfo; +import android.app.ActivityManager.RunningTaskInfo; import android.app.IActivityManager.WaitResult; import android.content.ComponentName; import android.content.Context; -import android.content.IIntentSender; import android.content.Intent; -import android.content.IntentSender; import android.content.pm.ActivityInfo; -import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; -import android.content.pm.ResolveInfo; import android.content.res.Configuration; import android.content.res.Resources; import android.graphics.Bitmap; @@ -53,17 +53,16 @@ import android.os.Handler; import android.os.IBinder; import android.os.Looper; import android.os.Message; -import android.os.ParcelFileDescriptor; import android.os.PowerManager; import android.os.RemoteException; import android.os.SystemClock; import android.os.UserHandle; import android.util.EventLog; -import android.util.Log; import android.util.Slog; import android.view.Display; -import java.io.IOException; +import java.io.FileDescriptor; +import java.io.PrintWriter; import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.Iterator; @@ -84,14 +83,14 @@ final class ActivityStack { static final boolean DEBUG_CONFIGURATION = ActivityManagerService.DEBUG_CONFIGURATION; static final boolean DEBUG_TASKS = ActivityManagerService.DEBUG_TASKS; static final boolean DEBUG_CLEANUP = ActivityManagerService.DEBUG_CLEANUP; - - static final boolean DEBUG_STATES = false; - static final boolean DEBUG_ADD_REMOVE = false; - static final boolean DEBUG_SAVED_STATE = false; - static final boolean DEBUG_APP = false; + + static final boolean DEBUG_STATES = ActivityStackSupervisor.DEBUG_STATES; + static final boolean DEBUG_ADD_REMOVE = ActivityStackSupervisor.DEBUG_ADD_REMOVE; + static final boolean DEBUG_SAVED_STATE = ActivityStackSupervisor.DEBUG_SAVED_STATE; + static final boolean DEBUG_APP = ActivityStackSupervisor.DEBUG_APP; static final boolean VALIDATE_TOKENS = ActivityManagerService.VALIDATE_TOKENS; - + // How long we wait until giving up on the last activity telling us it // is idle. static final int IDLE_TIMEOUT = 10*1000; @@ -118,19 +117,19 @@ final class ActivityStack { // How long we wait until giving up on an activity telling us it has // finished destroying itself. static final int DESTROY_TIMEOUT = 10*1000; - + // How long until we reset a task when the user returns to it. Currently // disabled. static final long ACTIVITY_INACTIVE_RESET_TIME = 0; - + // How long between activity launches that we consider safe to not warn // the user about an unexpected activity being launched on top. static final long START_WARN_TIME = 5*1000; - + // Set to false to disable the preview that is shown while a new activity // is being started. static final boolean SHOW_APP_STARTING_PREVIEW = true; - + enum ActivityState { INITIALIZING, RESUMED, @@ -144,20 +143,19 @@ final class ActivityStack { } final ActivityManagerService mService; - final boolean mMainStack; - + final Context mContext; - + /** * The back history of all previous (and possibly still - * running) activities. It contains HistoryRecord objects. + * running) activities. It contains #TaskRecord objects. */ - final ArrayList<ActivityRecord> mHistory = new ArrayList<ActivityRecord>(); + private ArrayList<TaskRecord> mTaskHistory = new ArrayList<TaskRecord>(); /** * Used for validating app tokens with window manager. */ - final ArrayList<IBinder> mValidateAppTokens = new ArrayList<IBinder>(); + final ArrayList<TaskGroup> mValidateAppTokens = new ArrayList<TaskGroup>(); /** * List of running activities, sorted by recent usage. @@ -202,13 +200,13 @@ final class ActivityStack { */ final ArrayList<ActivityRecord> mFinishingActivities = new ArrayList<ActivityRecord>(); - + /** * List of people waiting to find out about the next launched activity. */ final ArrayList<IActivityManager.WaitResult> mWaitingActivityLaunched = new ArrayList<IActivityManager.WaitResult>(); - + /** * List of people waiting to find out about the next visible activity. */ @@ -250,14 +248,14 @@ final class ActivityStack { * Current activity that is resumed, or null if there is none. */ ActivityRecord mResumedActivity = null; - + /** * This is the last activity that has been started. It is only used to * identify when multiple activities are started at once so that the user * can be warned they may not be in the activity they think they are. */ ActivityRecord mLastStartedActivity = null; - + /** * Set when we know we are going to be calling updateConfiguration() * soon, so want to skip intermediate config checks. @@ -269,31 +267,37 @@ final class ActivityStack { * newly launched activity is being brought in front of us. */ boolean mUserLeaving = false; - + long mInitialStartTime = 0; - + /** * Set when we have taken too long waiting to go to sleep. */ boolean mSleepTimeout = false; /** - * Dismiss the keyguard after the next activity is displayed? - */ - boolean mDismissKeyguardOnNextActivity = false; - - /** * Save the most recent screenshot for reuse. This keeps Recents from taking two identical * screenshots, one for the Recents thumbnail and one for the pauseActivity thumbnail. */ private ActivityRecord mLastScreenshotActivity = null; private Bitmap mLastScreenshotBitmap = null; + /** + * List of ActivityRecord objects that have been finished and must + * still report back to a pending thumbnail receiver. + */ + private final ArrayList<ActivityRecord> mCancelledThumbnails = new ArrayList<ActivityRecord>(); + int mThumbnailWidth = -1; int mThumbnailHeight = -1; private int mCurrentUser; + final int mStackId; + + /** Run all ActivityStacks through this */ + final ActivityStackSupervisor mStackSupervisor; + static final int SLEEP_TIMEOUT_MSG = ActivityManagerService.FIRST_ACTIVITY_STACK_MSG; static final int PAUSE_TIMEOUT_MSG = ActivityManagerService.FIRST_ACTIVITY_STACK_MSG + 1; static final int IDLE_TIMEOUT_MSG = ActivityManagerService.FIRST_ACTIVITY_STACK_MSG + 2; @@ -331,7 +335,7 @@ final class ActivityStack { switch (msg.what) { case SLEEP_TIMEOUT_MSG: { synchronized (mService) { - if (mService.isSleeping()) { + if (mService.isSleepingOrShuttingDown()) { Slog.w(TAG, "Sleep timeout! Sleeping now."); mSleepTimeout = true; checkReadyForSleepLocked(); @@ -348,9 +352,9 @@ final class ActivityStack { mService.logAppTooSlow(r.app, r.pauseTime, "pausing " + r); } - } - activityPaused(r != null ? r.appToken : null, true); + activityPausedLocked(r != null ? r.appToken : null, true); + } } break; case IDLE_TIMEOUT_MSG: { if (mService.mDidDexOpt) { @@ -364,7 +368,9 @@ final class ActivityStack { // so we need to be conservative and assume it isn't. ActivityRecord r = (ActivityRecord)msg.obj; Slog.w(TAG, "Activity idle timeout for " + r); - activityIdleInternal(r != null ? r.appToken : null, true, null); + synchronized (mService) { + activityIdleInternalLocked(r != null ? r.appToken : null, true, null); + } } break; case LAUNCH_TICK_MSG: { ActivityRecord r = (ActivityRecord)msg.obj; @@ -380,11 +386,15 @@ final class ActivityStack { // We don't at this point know if the activity is fullscreen, // so we need to be conservative and assume it isn't. Slog.w(TAG, "Activity destroy timeout for " + r); - activityDestroyed(r != null ? r.appToken : null); + synchronized (mService) { + activityDestroyedLocked(r != null ? r.appToken : null); + } } break; case IDLE_NOW_MSG: { ActivityRecord r = (ActivityRecord)msg.obj; - activityIdleInternal(r != null ? r.appToken : null, false, null); + synchronized (mService) { + activityIdleInternalLocked(r != null ? r.appToken : null, false, null); + } } break; case LAUNCH_TIMEOUT_MSG: { if (mService.mDidDexOpt) { @@ -426,16 +436,27 @@ final class ActivityStack { } } - ActivityStack(ActivityManagerService service, Context context, boolean mainStack, Looper looper) { + private int numActivities() { + int count = 0; + for (int taskNdx = mTaskHistory.size() - 1; taskNdx >= 0; --taskNdx) { + count += mTaskHistory.get(taskNdx).mActivities.size(); + } + return count; + } + + ActivityStack(ActivityManagerService service, Context context, Looper looper, int stackId, + ActivityStackSupervisor supervisor, int userId) { mHandler = new ActivityStackHandler(looper); mService = service; mContext = context; - mMainStack = mainStack; PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE); mGoingToSleep = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "ActivityManager-Sleep"); mLaunchingActivity = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "ActivityManager-Launch"); mLaunchingActivity.setReferenceCounted(false); + mStackId = stackId; + mStackSupervisor = supervisor; + mCurrentUser = userId; } private boolean okToShow(ActivityRecord r) { @@ -444,25 +465,29 @@ final class ActivityStack { } final ActivityRecord topRunningActivityLocked(ActivityRecord notTop) { - int i = mHistory.size()-1; - while (i >= 0) { - ActivityRecord r = mHistory.get(i); - if (!r.finishing && r != notTop && okToShow(r)) { - return r; + for (int taskNdx = mTaskHistory.size() - 1; taskNdx >= 0; --taskNdx) { + final TaskRecord task = mTaskHistory.get(taskNdx); + final ArrayList<ActivityRecord> activities = task.mActivities; + for (int activityNdx = activities.size() - 1; activityNdx >= 0; --activityNdx) { + ActivityRecord r = activities.get(activityNdx); + if (!r.finishing && r != notTop && okToShow(r)) { + return r; + } } - i--; } return null; } final ActivityRecord topRunningNonDelayedActivityLocked(ActivityRecord notTop) { - int i = mHistory.size()-1; - while (i >= 0) { - ActivityRecord r = mHistory.get(i); - if (!r.finishing && !r.delayedResume && r != notTop && okToShow(r)) { - return r; + for (int taskNdx = mTaskHistory.size() - 1; taskNdx >= 0; --taskNdx) { + final TaskRecord task = mTaskHistory.get(taskNdx); + final ArrayList<ActivityRecord> activities = task.mActivities; + for (int activityNdx = activities.size() - 1; activityNdx >= 0; --activityNdx) { + ActivityRecord r = activities.get(activityNdx); + if (!r.finishing && !r.delayedResume && r != notTop && okToShow(r)) { + return r; + } } - i--; } return null; } @@ -470,43 +495,54 @@ final class ActivityStack { /** * This is a simplified version of topRunningActivityLocked that provides a number of * optional skip-over modes. It is intended for use with the ActivityController hook only. - * + * * @param token If non-null, any history records matching this token will be skipped. * @param taskId If non-zero, we'll attempt to skip over records with the same task ID. - * + * * @return Returns the HistoryRecord of the next activity on the stack. */ final ActivityRecord topRunningActivityLocked(IBinder token, int taskId) { - int i = mHistory.size()-1; - while (i >= 0) { - ActivityRecord r = mHistory.get(i); - // Note: the taskId check depends on real taskId fields being non-zero - if (!r.finishing && (token != r.appToken) && (taskId != r.task.taskId) - && okToShow(r)) { - return r; + for (int taskNdx = mTaskHistory.size() - 1; taskNdx >= 0; --taskNdx) { + TaskRecord task = mTaskHistory.get(taskNdx); + if (task.taskId == taskId) { + continue; + } + ArrayList<ActivityRecord> activities = task.mActivities; + for (int i = activities.size() - 1; i >= 0; --i) { + final ActivityRecord r = activities.get(i); + // Note: the taskId check depends on real taskId fields being non-zero + if (!r.finishing && (token != r.appToken) && okToShow(r)) { + return r; + } } - i--; } return null; } - final int indexOfTokenLocked(IBinder token) { - return mHistory.indexOf(ActivityRecord.forToken(token)); - } - - final int indexOfActivityLocked(ActivityRecord r) { - return mHistory.indexOf(r); + TaskRecord taskForIdLocked(int id) { + for (int taskNdx = mTaskHistory.size() - 1; taskNdx >= 0; --taskNdx) { + final TaskRecord task = mTaskHistory.get(taskNdx); + if (task.taskId == id) { + return task; + } + } + return null; } - final ActivityRecord isInStackLocked(IBinder token) { - ActivityRecord r = ActivityRecord.forToken(token); - if (mHistory.contains(r)) { - return r; + ActivityRecord isInStackLocked(IBinder token) { + final ActivityRecord r = ActivityRecord.forToken(token); + if (r != null) { + final TaskRecord task = r.task; + if (task.mActivities.contains(r) && mTaskHistory.contains(task)) { + if (task.stack != this) Slog.w(TAG, + "Illegal state! task does not point to stack it is in."); + return r; + } } return null; } - private final boolean updateLRUListLocked(ActivityRecord r) { + final boolean updateLRUListLocked(ActivityRecord r) { final boolean hadit = mLRUActivities.remove(r); mLRUActivities.add(r); return hadit; @@ -521,37 +557,35 @@ final class ActivityStack { if (info.targetActivity != null) { cls = new ComponentName(info.packageName, info.targetActivity); } + final int userId = UserHandle.getUserId(info.applicationInfo.uid); - TaskRecord cp = null; + for (int taskNdx = mTaskHistory.size() - 1; taskNdx >= 0; --taskNdx) { + final TaskRecord task = mTaskHistory.get(taskNdx); + final ActivityRecord r = task.getTopActivity(); + if (r == null || r.finishing || r.userId != userId || + r.launchMode == ActivityInfo.LAUNCH_SINGLE_INSTANCE) { + continue; + } - final int userId = UserHandle.getUserId(info.applicationInfo.uid); - final int N = mHistory.size(); - for (int i=(N-1); i>=0; i--) { - ActivityRecord r = mHistory.get(i); - if (!r.finishing && r.task != cp && r.userId == userId - && r.launchMode != ActivityInfo.LAUNCH_SINGLE_INSTANCE) { - cp = r.task; - //Slog.i(TAG, "Comparing existing cls=" + r.task.intent.getComponent().flattenToShortString() - // + "/aff=" + r.task.affinity + " to new cls=" - // + intent.getComponent().flattenToShortString() + "/aff=" + taskAffinity); - if (r.task.affinity != null) { - if (r.task.affinity.equals(info.taskAffinity)) { - //Slog.i(TAG, "Found matching affinity!"); - return r; - } - } else if (r.task.intent != null - && r.task.intent.getComponent().equals(cls)) { - //Slog.i(TAG, "Found matching class!"); - //dump(); - //Slog.i(TAG, "For Intent " + intent + " bringing to top: " + r.intent); - return r; - } else if (r.task.affinityIntent != null - && r.task.affinityIntent.getComponent().equals(cls)) { - //Slog.i(TAG, "Found matching class!"); - //dump(); - //Slog.i(TAG, "For Intent " + intent + " bringing to top: " + r.intent); + //Slog.i(TAG, "Comparing existing cls=" + r.task.intent.getComponent().flattenToShortString() + // + "/aff=" + r.task.affinity + " to new cls=" + // + intent.getComponent().flattenToShortString() + "/aff=" + taskAffinity); + if (task.affinity != null) { + if (task.affinity.equals(info.taskAffinity)) { + //Slog.i(TAG, "Found matching affinity!"); return r; } + } else if (task.intent != null && task.intent.getComponent().equals(cls)) { + //Slog.i(TAG, "Found matching class!"); + //dump(); + //Slog.i(TAG, "For Intent " + intent + " bringing to top: " + r.intent); + return r; + } else if (task.affinityIntent != null + && task.affinityIntent.getComponent().equals(cls)) { + //Slog.i(TAG, "Found matching class!"); + //dump(); + //Slog.i(TAG, "For Intent " + intent + " bringing to top: " + r.intent); + return r; } } @@ -570,11 +604,11 @@ final class ActivityStack { } final int userId = UserHandle.getUserId(info.applicationInfo.uid); - final int N = mHistory.size(); - for (int i=(N-1); i>=0; i--) { - ActivityRecord r = mHistory.get(i); - if (!r.finishing) { - if (r.intent.getComponent().equals(cls) && r.userId == userId) { + for (int taskNdx = mTaskHistory.size() - 1; taskNdx >= 0; --taskNdx) { + final ArrayList<ActivityRecord> activities = mTaskHistory.get(taskNdx).mActivities; + for (int activityNdx = activities.size() - 1; activityNdx >= 0; --activityNdx) { + ActivityRecord r = activities.get(activityNdx); + if (!r.finishing && r.intent.getComponent().equals(cls) && r.userId == userId) { //Slog.i(TAG, "Found matching class!"); //dump(); //Slog.i(TAG, "For Intent " + intent + " bringing to top: " + r.intent); @@ -586,227 +620,54 @@ final class ActivityStack { return null; } - final void showAskCompatModeDialogLocked(ActivityRecord r) { - Message msg = Message.obtain(); - msg.what = ActivityManagerService.SHOW_COMPAT_MODE_DIALOG_MSG; - msg.obj = r.task.askedCompatMode ? null : r; - mService.mHandler.sendMessage(msg); - } - /* * Move the activities around in the stack to bring a user to the foreground. * @return whether there are any activities for the specified user. */ final boolean switchUserLocked(int userId, UserStartedState uss) { - mCurrentUser = userId; + if (VALIDATE_TOKENS) { + validateAppTokensLocked(); + } mStartingUsers.add(uss); + if (mCurrentUser == userId) { + return true; + } + mCurrentUser = userId; - // Only one activity? Nothing to do... - if (mHistory.size() < 2) - return false; - + // Move userId's tasks to the top. boolean haveActivities = false; - // Check if the top activity is from the new user. - ActivityRecord top = mHistory.get(mHistory.size() - 1); - if (top.userId == userId) return true; - // Otherwise, move the user's activities to the top. - int N = mHistory.size(); - int i = 0; - while (i < N) { - ActivityRecord r = mHistory.get(i); - if (r.userId == userId) { - ActivityRecord moveToTop = mHistory.remove(i); - mHistory.add(moveToTop); - // No need to check the top one now - N--; + TaskRecord task = null; + int index = mTaskHistory.size(); + for (int i = 0; i < index; ++i) { + task = mTaskHistory.get(i); + if (task.userId == userId) { haveActivities = true; - } else { - i++; + mTaskHistory.remove(i); + mTaskHistory.add(task); + --index; } } - // Transition from the old top to the new top + + // task is now the original topmost TaskRecord. Transition from the old top to the new top. + ActivityRecord top = task != null ? task.getTopActivity() : null; resumeTopActivityLocked(top); return haveActivities; } - final boolean realStartActivityLocked(ActivityRecord r, - ProcessRecord app, boolean andResume, boolean checkConfig) - throws RemoteException { - - r.startFreezingScreenLocked(app, 0); - mService.mWindowManager.setAppVisibility(r.appToken, true); - - // schedule launch ticks to collect information about slow apps. - r.startLaunchTickingLocked(); - - // Have the window manager re-evaluate the orientation of - // the screen based on the new activity order. Note that - // as a result of this, it can call back into the activity - // manager with a new orientation. We don't care about that, - // because the activity is not currently running so we are - // just restarting it anyway. - if (checkConfig) { - Configuration config = mService.mWindowManager.updateOrientationFromAppTokens( - mService.mConfiguration, - r.mayFreezeScreenLocked(app) ? r.appToken : null); - mService.updateConfigurationLocked(config, r, false, false); - } - - r.app = app; - app.waitingToKill = null; - r.launchCount++; - r.lastLaunchTime = SystemClock.uptimeMillis(); - - if (localLOGV) Slog.v(TAG, "Launching: " + r); - - int idx = app.activities.indexOf(r); - if (idx < 0) { - app.activities.add(r); - } - mService.updateLruProcessLocked(app, true); - - try { - if (app.thread == null) { - throw new RemoteException(); - } - List<ResultInfo> results = null; - List<Intent> newIntents = null; - if (andResume) { - results = r.results; - newIntents = r.newIntents; - } - if (DEBUG_SWITCH) Slog.v(TAG, "Launching: " + r - + " icicle=" + r.icicle - + " with results=" + results + " newIntents=" + newIntents - + " andResume=" + andResume); - if (andResume) { - EventLog.writeEvent(EventLogTags.AM_RESTART_ACTIVITY, - r.userId, System.identityHashCode(r), - r.task.taskId, r.shortComponentName); - } - if (r.isHomeActivity) { - mService.mHomeProcess = app; - } - mService.ensurePackageDexOpt(r.intent.getComponent().getPackageName()); - r.sleeping = false; - r.forceNewConfig = false; - showAskCompatModeDialogLocked(r); - r.compat = mService.compatibilityInfoForPackageLocked(r.info.applicationInfo); - String profileFile = null; - ParcelFileDescriptor profileFd = null; - boolean profileAutoStop = false; - if (mService.mProfileApp != null && mService.mProfileApp.equals(app.processName)) { - if (mService.mProfileProc == null || mService.mProfileProc == app) { - mService.mProfileProc = app; - profileFile = mService.mProfileFile; - profileFd = mService.mProfileFd; - profileAutoStop = mService.mAutoStopProfiler; - } - } - app.hasShownUi = true; - app.pendingUiClean = true; - if (profileFd != null) { - try { - profileFd = profileFd.dup(); - } catch (IOException e) { - profileFd = null; - } - } - app.thread.scheduleLaunchActivity(new Intent(r.intent), r.appToken, - System.identityHashCode(r), r.info, - new Configuration(mService.mConfiguration), - r.compat, r.icicle, results, newIntents, !andResume, - mService.isNextTransitionForward(), profileFile, profileFd, - profileAutoStop); - - if ((app.info.flags&ApplicationInfo.FLAG_CANT_SAVE_STATE) != 0) { - // This may be a heavy-weight process! Note that the package - // manager will ensure that only activity can run in the main - // process of the .apk, which is the only thing that will be - // considered heavy-weight. - if (app.processName.equals(app.info.packageName)) { - if (mService.mHeavyWeightProcess != null - && mService.mHeavyWeightProcess != app) { - Log.w(TAG, "Starting new heavy weight process " + app - + " when already running " - + mService.mHeavyWeightProcess); - } - mService.mHeavyWeightProcess = app; - Message msg = mService.mHandler.obtainMessage( - ActivityManagerService.POST_HEAVY_NOTIFICATION_MSG); - msg.obj = r; - mService.mHandler.sendMessage(msg); - } - } - - } catch (RemoteException e) { - if (r.launchFailed) { - // This is the second time we failed -- finish activity - // and give up. - Slog.e(TAG, "Second failure launching " - + r.intent.getComponent().flattenToShortString() - + ", giving up", e); - mService.appDiedLocked(app, app.pid, app.thread); - requestFinishActivityLocked(r.appToken, Activity.RESULT_CANCELED, null, - "2nd-crash", false); - return false; - } - - // This is the first time we failed -- restart process and - // retry. - app.activities.remove(r); - throw e; - } - - r.launchFailed = false; - if (updateLRUListLocked(r)) { - Slog.w(TAG, "Activity " + r - + " being launched, but already in LRU list"); - } - - if (andResume) { - // As part of the process of launching, ActivityThread also performs - // a resume. - r.state = ActivityState.RESUMED; - if (DEBUG_STATES) Slog.v(TAG, "Moving to RESUMED: " + r - + " (starting new instance)"); - r.stopped = false; - mResumedActivity = r; - r.task.touchActiveTime(); - if (mMainStack) { - mService.addRecentTaskLocked(r.task); - } - completeResumeLocked(r); - checkReadyForSleepLocked(); - if (DEBUG_SAVED_STATE) Slog.i(TAG, "Launch completed; removing icicle of " + r.icicle); - } else { - // This activity is not starting in the resumed state... which - // should look like we asked it to pause+stop (but remain visible), - // and it has done so and reported back the current icicle and - // other state. - if (DEBUG_STATES) Slog.v(TAG, "Moving to STOPPED: " + r - + " (starting in stopped state)"); - r.state = ActivityState.STOPPED; - r.stopped = true; - } - - // Launch the new version setup screen if needed. We do this -after- - // launching the initial activity (that is, home), so that it can have - // a chance to initialize itself while in the background, making the - // switch back to it faster and look better. - if (mMainStack) { - mService.startSetupActivityLocked(); - } - - return true; + void minimalResumeActivityLocked(ActivityRecord r) { + r.state = ActivityState.RESUMED; + if (DEBUG_STATES) Slog.v(TAG, "Moving to RESUMED: " + r + + " (starting new instance)"); + r.stopped = false; + mResumedActivity = r; + r.task.touchActiveTime(); + mService.addRecentTaskLocked(r.task); + completeResumeLocked(r); + checkReadyForSleepLocked(); + if (DEBUG_SAVED_STATE) Slog.i(TAG, "Launch completed; removing icicle of " + r.icicle); } - private final void startSpecificActivityLocked(ActivityRecord r, - boolean andResume, boolean checkConfig) { - // Is this activity's application already running? - ProcessRecord app = mService.getProcessRecordLocked(r.processName, - r.info.applicationInfo.uid); - + void setLaunchTime(ActivityRecord r) { if (r.launchTime == 0) { r.launchTime = SystemClock.uptimeMillis(); if (mInitialStartTime == 0) { @@ -815,27 +676,10 @@ final class ActivityStack { } else if (mInitialStartTime == 0) { mInitialStartTime = SystemClock.uptimeMillis(); } - - if (app != null && app.thread != null) { - try { - app.addPackage(r.info.packageName); - realStartActivityLocked(r, app, andResume, checkConfig); - return; - } catch (RemoteException e) { - Slog.w(TAG, "Exception when starting activity " - + r.intent.getComponent().flattenToShortString(), e); - } - - // If a dead object exception was thrown -- fall through to - // restart the application. - } - - mService.startProcessLocked(r.processName, r.info.applicationInfo, true, 0, - "activity", r.intent.getComponent(), false, false); } - + void stopIfSleepingLocked() { - if (mService.isSleeping()) { + if (mService.isSleepingOrShuttingDown()) { if (!mGoingToSleep.isHeld()) { mGoingToSleep.acquire(); if (mLaunchingActivity.isHeld()) { @@ -857,9 +701,11 @@ final class ActivityStack { mGoingToSleep.release(); } // Ensure activities are no longer sleeping. - for (int i=mHistory.size()-1; i>=0; i--) { - ActivityRecord r = mHistory.get(i); - r.setSleeping(false); + for (int taskNdx = mTaskHistory.size() - 1; taskNdx >= 0; --taskNdx) { + final ArrayList<ActivityRecord> activities = mTaskHistory.get(taskNdx).mActivities; + for (int activityNdx = activities.size() - 1; activityNdx >= 0; --activityNdx) { + activities.get(activityNdx).setSleeping(false); + } } mGoingToSleepActivities.clear(); } @@ -869,8 +715,9 @@ final class ActivityStack { checkReadyForSleepLocked(); } + // Checked. void checkReadyForSleepLocked() { - if (!mService.isSleeping()) { + if (!mService.isSleepingOrShuttingDown()) { // Do not care. return; } @@ -901,10 +748,13 @@ final class ActivityStack { // Make sure any stopped but visible activities are now sleeping. // This ensures that the activity's onStop() is called. - for (int i=mHistory.size()-1; i>=0; i--) { - ActivityRecord r = mHistory.get(i); - if (r.state == ActivityState.STOPPING || r.state == ActivityState.STOPPED) { - r.setSleeping(true); + for (int taskNdx = mTaskHistory.size() - 1; taskNdx >= 0; --taskNdx) { + final ArrayList<ActivityRecord> activities = mTaskHistory.get(taskNdx).mActivities; + for (int activityNdx = activities.size() - 1; activityNdx >= 0; --activityNdx) { + final ActivityRecord r = activities.get(activityNdx); + if (r.state == ActivityState.STOPPING || r.state == ActivityState.STOPPED) { + r.setSleeping(true); + } } } @@ -930,7 +780,7 @@ final class ActivityStack { if (who.noDisplay) { return null; } - + Resources res = mService.mContext.getResources(); int w = mThumbnailWidth; int h = mThumbnailHeight; @@ -958,14 +808,13 @@ final class ActivityStack { private final void startPausingLocked(boolean userLeaving, boolean uiSleeping) { if (mPausingActivity != null) { - RuntimeException e = new RuntimeException(); Slog.e(TAG, "Trying to pause when pause is already pending for " - + mPausingActivity, e); + + mPausingActivity, new RuntimeException("here").fillInStackTrace()); } ActivityRecord prev = mResumedActivity; if (prev == null) { - RuntimeException e = new RuntimeException(); - Slog.e(TAG, "Trying to pause when nothing is resumed", e); + Slog.e(TAG, "Trying to pause when nothing is resumed", + new RuntimeException("here").fillInStackTrace()); resumeTopActivityLocked(null); return; } @@ -979,7 +828,7 @@ final class ActivityStack { prev.updateThumbnail(screenshotActivities(prev), null); mService.updateCpuStats(); - + if (prev.app != null && prev.app.thread != null) { if (DEBUG_PAUSE) Slog.v(TAG, "Enqueueing pending pause: " + prev); try { @@ -988,7 +837,7 @@ final class ActivityStack { prev.shortComponentName); prev.app.thread.schedulePauseActivity(prev.appToken, prev.finishing, userLeaving, prev.configChangeFlags); - if (mMainStack) { + if (mStackSupervisor.isMainStack(this)) { mService.updateUsageStats(prev, false); } } catch (Exception e) { @@ -1004,7 +853,7 @@ final class ActivityStack { // If we are not going to sleep, we want to ensure the device is // awake until the next activity is started. - if (!mService.mSleeping && !mService.mShuttingDown) { + if (!mService.isSleepingOrShuttingDown()) { mLaunchingActivity.acquire(); if (!mHandler.hasMessages(LAUNCH_TIMEOUT_MSG)) { // To be safe, don't allow the wake lock to be held for too long. @@ -1013,7 +862,6 @@ final class ActivityStack { } } - if (mPausingActivity != null) { // Have the window manager pause its key dispatching until the new // activity has started. If we're pausing the activity just because @@ -1041,42 +889,30 @@ final class ActivityStack { } } - final void activityResumed(IBinder token) { - ActivityRecord r = null; - - synchronized (mService) { - int index = indexOfTokenLocked(token); - if (index >= 0) { - r = mHistory.get(index); - if (DEBUG_SAVED_STATE) Slog.i(TAG, "Resumed activity; dropping state of: " + r); - r.icicle = null; - r.haveState = false; - } - } + final void activityResumedLocked(IBinder token) { + final ActivityRecord r = ActivityRecord.forToken(token); + if (DEBUG_SAVED_STATE) Slog.i(TAG, "Resumed activity; dropping state of: " + r); + r.icicle = null; + r.haveState = false; } - final void activityPaused(IBinder token, boolean timeout) { + final void activityPausedLocked(IBinder token, boolean timeout) { if (DEBUG_PAUSE) Slog.v( TAG, "Activity paused: token=" + token + ", timeout=" + timeout); - ActivityRecord r = null; - - synchronized (mService) { - int index = indexOfTokenLocked(token); - if (index >= 0) { - r = mHistory.get(index); - mHandler.removeMessages(PAUSE_TIMEOUT_MSG, r); - if (mPausingActivity == r) { - if (DEBUG_STATES) Slog.v(TAG, "Moving to PAUSED: " + r - + (timeout ? " (due to timeout)" : " (pause complete)")); - r.state = ActivityState.PAUSED; - completePauseLocked(); - } else { - EventLog.writeEvent(EventLogTags.AM_FAILED_TO_PAUSE, - r.userId, System.identityHashCode(r), r.shortComponentName, - mPausingActivity != null - ? mPausingActivity.shortComponentName : "(none)"); - } + final ActivityRecord r = isInStackLocked(token); + if (r != null) { + mHandler.removeMessages(PAUSE_TIMEOUT_MSG, r); + if (mPausingActivity == r) { + if (DEBUG_STATES) Slog.v(TAG, "Moving to PAUSED: " + r + + (timeout ? " (due to timeout)" : " (pause complete)")); + r.state = ActivityState.PAUSED; + completePauseLocked(); + } else { + EventLog.writeEvent(EventLogTags.AM_FAILED_TO_PAUSE, + r.userId, System.identityHashCode(r), r.shortComponentName, + mPausingActivity != null + ? mPausingActivity.shortComponentName : "(none)"); } } } @@ -1132,7 +968,7 @@ final class ActivityStack { private final void completePauseLocked() { ActivityRecord prev = mPausingActivity; if (DEBUG_PAUSE) Slog.v(TAG, "Complete pause: " + prev); - + if (prev != null) { if (prev.finishing) { if (DEBUG_PAUSE) Slog.v(TAG, "Executing finish of activity: " + prev); @@ -1172,7 +1008,7 @@ final class ActivityStack { mPausingActivity = null; } - if (!mService.isSleeping()) { + if (!mService.isSleepingOrShuttingDown()) { resumeTopActivityLocked(prev); } else { checkReadyForSleepLocked(); @@ -1186,7 +1022,7 @@ final class ActivityStack { resumeTopActivityLocked(null); } } - + if (prev != null) { prev.resumeKeyDispatchingLocked(); } @@ -1213,6 +1049,7 @@ final class ActivityStack { prev.cpuTimeAtResume = 0; // reset it } + // Checked. /** * Once we know that we have asked an application to put an activity in * the resumed state (either by launching it or explicitly telling it), @@ -1238,11 +1075,12 @@ final class ActivityStack { mHandler.sendMessage(msg); } - if (mMainStack) { + if (mStackSupervisor.isMainStack(this)) { + // Should this be done for all stacks, not just mMainStack? mService.reportResumedActivityLocked(next); } - if (mMainStack) { + if (mStackSupervisor.isMainStack(this)) { mService.setFocusedActivityLocked(next); } next.resumeKeyDispatchingLocked(); @@ -1262,6 +1100,7 @@ final class ActivityStack { } } + // Checked. /** * Make sure that all activities that need to be visible (that is, they * currently can be seen by the user) actually are. @@ -1274,106 +1113,95 @@ final class ActivityStack { // If the top activity is not fullscreen, then we need to // make sure any activities under it are now visible. - final int count = mHistory.size(); - int i = count-1; - while (mHistory.get(i) != top) { - i--; - } - ActivityRecord r; + boolean aboveTop = true; boolean behindFullscreen = false; - for (; i>=0; i--) { - r = mHistory.get(i); - if (DEBUG_VISBILITY) Slog.v( - TAG, "Make visible? " + r + " finishing=" + r.finishing - + " state=" + r.state); - if (r.finishing) { - continue; - } - - final boolean doThisProcess = onlyThisProcess == null - || onlyThisProcess.equals(r.processName); - - // First: if this is not the current activity being started, make - // sure it matches the current configuration. - if (r != starting && doThisProcess) { - ensureActivityConfigurationLocked(r, 0); - } - - if (r.app == null || r.app.thread == null) { - if (onlyThisProcess == null - || onlyThisProcess.equals(r.processName)) { - // This activity needs to be visible, but isn't even - // running... get it started, but don't resume it - // at this point. + for (int taskNdx = mTaskHistory.size() - 1; taskNdx >= 0; --taskNdx) { + final ArrayList<ActivityRecord> activities = mTaskHistory.get(taskNdx).mActivities; + for (int activityNdx = activities.size() - 1; activityNdx >= 0; --activityNdx) { + final ActivityRecord r = activities.get(activityNdx); + if (r.finishing) { + continue; + } + if (aboveTop && r != top) { + continue; + } + aboveTop = false; + if (!behindFullscreen) { if (DEBUG_VISBILITY) Slog.v( - TAG, "Start and freeze screen for " + r); - if (r != starting) { - r.startFreezingScreenLocked(r.app, configChanges); - } - if (!r.visible) { - if (DEBUG_VISBILITY) Slog.v( - TAG, "Starting and making visible: " + r); - mService.mWindowManager.setAppVisibility(r.appToken, true); - } - if (r != starting) { - startSpecificActivityLocked(r, false, false); + TAG, "Make visible? " + r + " finishing=" + r.finishing + + " state=" + r.state); + + final boolean doThisProcess = onlyThisProcess == null + || onlyThisProcess.equals(r.processName); + + // First: if this is not the current activity being started, make + // sure it matches the current configuration. + if (r != starting && doThisProcess) { + ensureActivityConfigurationLocked(r, 0); } - } - } else if (r.visible) { - // If this activity is already visible, then there is nothing - // else to do here. - if (DEBUG_VISBILITY) Slog.v( - TAG, "Skipping: already visible at " + r); - r.stopFreezingScreenLocked(false); - - } else if (onlyThisProcess == null) { - // This activity is not currently visible, but is running. - // Tell it to become visible. - r.visible = true; - if (r.state != ActivityState.RESUMED && r != starting) { - // If this activity is paused, tell it - // to now show its window. - if (DEBUG_VISBILITY) Slog.v( - TAG, "Making visible and scheduling visibility: " + r); - try { - mService.mWindowManager.setAppVisibility(r.appToken, true); - r.sleeping = false; - r.app.pendingUiClean = true; - r.app.thread.scheduleWindowVisibility(r.appToken, true); + if (r.app == null || r.app.thread == null) { + if (onlyThisProcess == null + || onlyThisProcess.equals(r.processName)) { + // This activity needs to be visible, but isn't even + // running... get it started, but don't resume it + // at this point. + if (DEBUG_VISBILITY) Slog.v( + TAG, "Start and freeze screen for " + r); + if (r != starting) { + r.startFreezingScreenLocked(r.app, configChanges); + } + if (!r.visible) { + if (DEBUG_VISBILITY) Slog.v( + TAG, "Starting and making visible: " + r); + mService.mWindowManager.setAppVisibility(r.appToken, true); + } + if (r != starting) { + mStackSupervisor.startSpecificActivityLocked(r, false, false); + } + } + + } else if (r.visible) { + // If this activity is already visible, then there is nothing + // else to do here. + if (DEBUG_VISBILITY) Slog.v( + TAG, "Skipping: already visible at " + r); r.stopFreezingScreenLocked(false); - } catch (Exception e) { - // Just skip on any failure; we'll make it - // visible when it next restarts. - Slog.w(TAG, "Exception thrown making visibile: " - + r.intent.getComponent(), e); - } - } - } - // Aggregate current change flags. - configChanges |= r.configChangeFlags; + } else if (onlyThisProcess == null) { + // This activity is not currently visible, but is running. + // Tell it to become visible. + r.visible = true; + if (r.state != ActivityState.RESUMED && r != starting) { + // If this activity is paused, tell it + // to now show its window. + if (DEBUG_VISBILITY) Slog.v( + TAG, "Making visible and scheduling visibility: " + r); + try { + mService.mWindowManager.setAppVisibility(r.appToken, true); + r.sleeping = false; + r.app.pendingUiClean = true; + r.app.thread.scheduleWindowVisibility(r.appToken, true); + r.stopFreezingScreenLocked(false); + } catch (Exception e) { + // Just skip on any failure; we'll make it + // visible when it next restarts. + Slog.w(TAG, "Exception thrown making visibile: " + + r.intent.getComponent(), e); + } + } + } - if (r.fullscreen) { - // At this point, nothing else needs to be shown - if (DEBUG_VISBILITY) Slog.v( - TAG, "Stopping: fullscreen at " + r); - behindFullscreen = true; - i--; - break; - } - } + // Aggregate current change flags. + configChanges |= r.configChangeFlags; - // Now for any activities that aren't visible to the user, make - // sure they no longer are keeping the screen frozen. - while (i >= 0) { - r = mHistory.get(i); - if (DEBUG_VISBILITY) Slog.v( - TAG, "Make invisible? " + r + " finishing=" + r.finishing - + " state=" + r.state - + " behindFullscreen=" + behindFullscreen); - if (!r.finishing) { - if (behindFullscreen) { + if (r.fullscreen) { + // At this point, nothing else needs to be shown + if (DEBUG_VISBILITY) Slog.v( + TAG, "Stopping: fullscreen at " + r); + behindFullscreen = true; + } + } else { if (r.visible) { if (DEBUG_VISBILITY) Slog.v( TAG, "Making invisible: " + r); @@ -1397,16 +1225,12 @@ final class ActivityStack { if (DEBUG_VISBILITY) Slog.v( TAG, "Already invisible: " + r); } - } else if (r.fullscreen) { - if (DEBUG_VISBILITY) Slog.v( - TAG, "Now behindFullscreen: " + r); - behindFullscreen = true; } } - i--; } } + // Checked. /** * Version of ensureActivitiesVisible that can easily be called anywhere. */ @@ -1417,7 +1241,7 @@ final class ActivityStack { ensureActivitiesVisibleLocked(r, starting, null, configChanges); } } - + /** * Ensure that the top activity in the stack is resumed. * @@ -1443,14 +1267,14 @@ final class ActivityStack { if (next == null) { // There are no more activities! Let's just start up the // Launcher... - if (mMainStack) { + if (mStackSupervisor.isMainStack(this)) { ActivityOptions.abort(options); return mService.startHomeActivityLocked(mCurrentUser); } } next.delayedResume = false; - + // If the top activity is the resumed one, nothing to do. if (mResumedActivity == next && next.state == ActivityState.RESUMED) { // Make sure we have executed any pending transitions, since there @@ -1532,7 +1356,7 @@ final class ActivityStack { mLastStartedActivity = next; } } - + // We need to start pausing the current activity so the top one // can be resumed... if (mResumedActivity != null) { @@ -1641,7 +1465,7 @@ final class ActivityStack { mService.mWindowManager.setAppWillBeHidden(prev.appToken); mService.mWindowManager.setAppVisibility(prev.appToken, false); } - } else if (mHistory.size() > 1) { + } else if (numActivities() > 1) { if (DEBUG_TRANSITION) Slog.v(TAG, "Prepare open transition: no previous"); if (mNoAnimActivities.contains(next)) { @@ -1672,31 +1496,28 @@ final class ActivityStack { ActivityState lastState = next.state; mService.updateCpuStats(); - + if (DEBUG_STATES) Slog.v(TAG, "Moving to RESUMED: " + next + " (in existing)"); next.state = ActivityState.RESUMED; mResumedActivity = next; next.task.touchActiveTime(); - if (mMainStack) { - mService.addRecentTaskLocked(next.task); - } + mService.addRecentTaskLocked(next.task); mService.updateLruProcessLocked(next.app, true); updateLRUListLocked(next); // Have the window manager re-evaluate the orientation of // the screen based on the new activity order. boolean updated = false; - if (mMainStack) { - synchronized (mService) { - Configuration config = mService.mWindowManager.updateOrientationFromAppTokens( - mService.mConfiguration, - next.mayFreezeScreenLocked(next.app) ? next.appToken : null); - if (config != null) { - next.frozenBeforeDestroy = true; - } - updated = mService.updateConfigurationLocked(config, next, false, false); + if (mStackSupervisor.isMainStack(this)) { + Configuration config = mService.mWindowManager.updateOrientationFromAppTokens( + mService.mConfiguration, + next.mayFreezeScreenLocked(next.app) ? next.appToken : null); + if (config != null) { + next.frozenBeforeDestroy = true; } + updated = mService.updateConfigurationLocked(config, next, false, false); } + if (!updated) { // The configuration update wasn't able to keep the existing // instance of the activity, and instead started a new one. @@ -1711,7 +1532,7 @@ final class ActivityStack { // Do over! mHandler.sendEmptyMessage(RESUME_TOP_ACTIVITY_MSG); } - if (mMainStack) { + if (mStackSupervisor.isMainStack(this)) { mService.setFocusedActivityLocked(next); } ensureActivitiesVisibleLocked(null, 0); @@ -1719,10 +1540,10 @@ final class ActivityStack { mNoAnimActivities.clear(); return true; } - + try { // Deliver all pending results. - ArrayList a = next.results; + ArrayList<ResultInfo> a = next.results; if (a != null) { final int N = a.size(); if (!next.finishing && N > 0) { @@ -1740,13 +1561,13 @@ final class ActivityStack { EventLog.writeEvent(EventLogTags.AM_RESUME_ACTIVITY, next.userId, System.identityHashCode(next), next.task.taskId, next.shortComponentName); - + next.sleeping = false; - showAskCompatModeDialogLocked(next); + mService.showAskCompatModeDialogLocked(next); next.app.pendingUiClean = true; next.app.thread.scheduleResumeActivity(next.appToken, mService.isNextTransitionForward()); - + checkReadyForSleepLocked(); } catch (Exception e) { @@ -1759,7 +1580,7 @@ final class ActivityStack { if (!next.hasBeenLaunched) { next.hasBeenLaunched = true; } else { - if (SHOW_APP_STARTING_PREVIEW && mMainStack) { + if (SHOW_APP_STARTING_PREVIEW && mStackSupervisor.isMainStack(this)) { mService.mWindowManager.setAppStartingWindow( next.appToken, next.packageName, next.theme, mService.compatibilityInfoForPackageLocked( @@ -1769,7 +1590,7 @@ final class ActivityStack { null, true); } } - startSpecificActivityLocked(next, true, false); + mStackSupervisor.startSpecificActivityLocked(next, true, false); return true; } @@ -1804,42 +1625,44 @@ final class ActivityStack { } if (DEBUG_SWITCH) Slog.v(TAG, "Restarting: " + next); } - startSpecificActivityLocked(next, true, true); + mStackSupervisor.startSpecificActivityLocked(next, true, true); } return true; } + private final void startActivityLocked(ActivityRecord r, boolean newTask, boolean doResume, boolean keepCurTransition, Bundle options) { - final int NH = mHistory.size(); - - int addPos = -1; - + TaskRecord task = null; + TaskRecord rTask = r.task; + final int taskId = rTask.taskId; + if (taskForIdLocked(taskId) == null || newTask) { + // Last activity in task had been removed or ActivityManagerService is reusing task. + // Insert or replace. + // Might not even be in. + mTaskHistory.remove(rTask); + // Now put task at top. + mTaskHistory.add(rTask); + mService.mWindowManager.moveTaskToTop(taskId); + } if (!newTask) { // If starting in an existing task, find where that is... boolean startIt = true; - for (int i = NH-1; i >= 0; i--) { - ActivityRecord p = mHistory.get(i); - if (p.finishing) { - continue; - } - if (p.task == r.task) { + for (int taskNdx = mTaskHistory.size() - 1; taskNdx >= 0; --taskNdx) { + task = mTaskHistory.get(taskNdx); + if (task == r.task) { // Here it is! Now, if this is not yet visible to the // user, then just add it without starting; it will // get started when the user navigates back to it. - addPos = i+1; if (!startIt) { - if (DEBUG_ADD_REMOVE) { - RuntimeException here = new RuntimeException("here"); - here.fillInStackTrace(); - Slog.i(TAG, "Adding activity " + r + " to stack at " + addPos, - here); - } - mHistory.add(addPos, r); + if (DEBUG_ADD_REMOVE) Slog.i(TAG, "Adding activity " + r + " to task " + + task, new RuntimeException("here").fillInStackTrace()); + task.addActivityToTop(r); r.putInHistory(); - mService.mWindowManager.addAppToken(addPos, r.appToken, r.task.taskId, - r.info.screenOrientation, r.fullscreen, + mService.mWindowManager.addAppToken(task.mActivities.indexOf(r), + r.appToken, r.task.taskId, mStackId, r.info.screenOrientation, + r.fullscreen, (r.info.flags & ActivityInfo.FLAG_SHOW_ON_LOCK_SCREEN) != 0); if (VALIDATE_TOKENS) { validateAppTokensLocked(); @@ -1848,8 +1671,7 @@ final class ActivityStack { return; } break; - } - if (p.fullscreen) { + } else if (task.numFullscreen > 0) { startIt = false; } } @@ -1857,28 +1679,26 @@ final class ActivityStack { // Place a new activity at top of stack, so it is next to interact // with the user. - if (addPos < 0) { - addPos = NH; - } - + // If we are not placing the new activity frontmost, we do not want // to deliver the onUserLeaving callback to the actual frontmost // activity - if (addPos < NH) { + if (task == r.task && mTaskHistory.indexOf(task) != (mTaskHistory.size() - 1)) { mUserLeaving = false; - if (DEBUG_USER_LEAVING) Slog.v(TAG, "startActivity() behind front, mUserLeaving=false"); + if (DEBUG_USER_LEAVING) Slog.v(TAG, + "startActivity() behind front, mUserLeaving=false"); } - + + task = r.task; + // Slot the activity into the history stack and proceed - if (DEBUG_ADD_REMOVE) { - RuntimeException here = new RuntimeException("here"); - here.fillInStackTrace(); - Slog.i(TAG, "Adding activity " + r + " to stack at " + addPos, here); - } - mHistory.add(addPos, r); + if (DEBUG_ADD_REMOVE) Slog.i(TAG, "Adding activity " + r + " to stack to task " + task, + new RuntimeException("here").fillInStackTrace()); + task.addActivityToTop(r); + r.putInHistory(); r.frontOfTask = newTask; - if (NH > 0) { + if (numActivities() > 1) { // We want to show the starting preview window if we are // switching to a new task, or the next activity's process is // not currently running. @@ -1903,8 +1723,8 @@ final class ActivityStack { mNoAnimActivities.remove(r); } r.updateOptionsLocked(options); - mService.mWindowManager.addAppToken( - addPos, r.appToken, r.task.taskId, r.info.screenOrientation, r.fullscreen, + mService.mWindowManager.addAppToken(task.mActivities.indexOf(r), + r.appToken, r.task.taskId, mStackId, r.info.screenOrientation, r.fullscreen, (r.info.flags & ActivityInfo.FLAG_SHOW_ON_LOCK_SCREEN) != 0); boolean doShow = true; if (newTask) { @@ -1942,8 +1762,8 @@ final class ActivityStack { } else { // If this is the first activity, don't do any fancy animations, // because there is nothing for it to animate on top of. - mService.mWindowManager.addAppToken(addPos, r.appToken, r.task.taskId, - r.info.screenOrientation, r.fullscreen, + mService.mWindowManager.addAppToken(task.mActivities.indexOf(r), r.appToken, + r.task.taskId, mStackId, r.info.screenOrientation, r.fullscreen, (r.info.flags & ActivityInfo.FLAG_SHOW_ON_LOCK_SCREEN) != 0); ActivityOptions.abort(options); } @@ -1958,227 +1778,214 @@ final class ActivityStack { final void validateAppTokensLocked() { mValidateAppTokens.clear(); - mValidateAppTokens.ensureCapacity(mHistory.size()); - for (int i=0; i<mHistory.size(); i++) { - mValidateAppTokens.add(mHistory.get(i).appToken); + mValidateAppTokens.ensureCapacity(numActivities()); + final int numTasks = mTaskHistory.size(); + for (int taskNdx = 0; taskNdx < numTasks; ++taskNdx) { + TaskRecord task = mTaskHistory.get(taskNdx); + final ArrayList<ActivityRecord> activities = task.mActivities; + if (activities.size() == 0) { + continue; + } + TaskGroup group = new TaskGroup(); + group.taskId = task.taskId; + mValidateAppTokens.add(group); + final int numActivities = activities.size(); + for (int activityNdx = 0; activityNdx < numActivities; ++activityNdx) { + final ActivityRecord r = activities.get(activityNdx); + group.tokens.add(r.appToken); + } } - mService.mWindowManager.validateAppTokens(mValidateAppTokens); + mService.mWindowManager.validateAppTokens(mStackId, mValidateAppTokens); } /** * Perform a reset of the given task, if needed as part of launching it. * Returns the new HistoryRecord at the top of the task. */ - private final ActivityRecord resetTaskIfNeededLocked(ActivityRecord taskTop, - ActivityRecord newActivity) { - boolean forceReset = (newActivity.info.flags - &ActivityInfo.FLAG_CLEAR_TASK_ON_LAUNCH) != 0; - if (ACTIVITY_INACTIVE_RESET_TIME > 0 - && taskTop.task.getInactiveDuration() > ACTIVITY_INACTIVE_RESET_TIME) { - if ((newActivity.info.flags - &ActivityInfo.FLAG_ALWAYS_RETAIN_TASK_STATE) == 0) { - forceReset = true; - } - } - - final TaskRecord task = taskTop.task; - - // We are going to move through the history list so that we can look - // at each activity 'target' with 'below' either the interesting - // activity immediately below it in the stack or null. - ActivityRecord target = null; - int targetI = 0; - int taskTopI = -1; - int replyChainEnd = -1; - int lastReparentPos = -1; + /** + * Helper method for #resetTaskIfNeededLocked. + * We are inside of the task being reset... we'll either finish this activity, push it out + * for another task, or leave it as-is. + * @param task The task containing the Activity (taskTop) that might be reset. + * @param forceReset + * @return An ActivityOptions that needs to be processed. + */ + private final ActivityOptions resetTargetTaskIfNeededLocked(TaskRecord task, + boolean forceReset) { ActivityOptions topOptions = null; + + int replyChainEnd = -1; boolean canMoveOptions = true; - for (int i=mHistory.size()-1; i>=-1; i--) { - ActivityRecord below = i >= 0 ? mHistory.get(i) : null; - - if (below != null && below.finishing) { - continue; - } - // Don't check any lower in the stack if we're crossing a user boundary. - if (below != null && below.userId != taskTop.userId) { - break; - } - if (target == null) { - target = below; - targetI = i; - // If we were in the middle of a reply chain before this - // task, it doesn't appear like the root of the chain wants - // anything interesting, so drop it. - replyChainEnd = -1; - continue; - } - + + // We only do this for activities that are not the root of the task (since if we finish + // the root, we may no longer have the task!). + final ArrayList<ActivityRecord> activities = task.mActivities; + final int numActivities = activities.size(); + for (int i = numActivities - 1; i > 0; --i ) { + ActivityRecord target = activities.get(i); + final int flags = target.info.flags; - final boolean finishOnTaskLaunch = - (flags&ActivityInfo.FLAG_FINISH_ON_TASK_LAUNCH) != 0; + (flags & ActivityInfo.FLAG_FINISH_ON_TASK_LAUNCH) != 0; final boolean allowTaskReparenting = - (flags&ActivityInfo.FLAG_ALLOW_TASK_REPARENTING) != 0; - - if (target.task == task) { - // We are inside of the task being reset... we'll either - // finish this activity, push it out for another task, - // or leave it as-is. We only do this - // for activities that are not the root of the task (since - // if we finish the root, we may no longer have the task!). - if (taskTopI < 0) { - taskTopI = targetI; + (flags & ActivityInfo.FLAG_ALLOW_TASK_REPARENTING) != 0; + final boolean clearWhenTaskReset = + (target.intent.getFlags() & Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET) != 0; + + if (!finishOnTaskLaunch + && !clearWhenTaskReset + && target.resultTo != null) { + // If this activity is sending a reply to a previous + // activity, we can't do anything with it now until + // we reach the start of the reply chain. + // XXX note that we are assuming the result is always + // to the previous activity, which is almost always + // the case but we really shouldn't count on. + if (replyChainEnd < 0) { + replyChainEnd = i; } - if (below != null && below.task == task) { - final boolean clearWhenTaskReset = - (target.intent.getFlags() - &Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET) != 0; - if (!finishOnTaskLaunch && !clearWhenTaskReset && target.resultTo != null) { - // If this activity is sending a reply to a previous - // activity, we can't do anything with it now until - // we reach the start of the reply chain. - // XXX note that we are assuming the result is always - // to the previous activity, which is almost always - // the case but we really shouldn't count on. - if (replyChainEnd < 0) { - replyChainEnd = targetI; - } - } else if (!finishOnTaskLaunch && !clearWhenTaskReset && allowTaskReparenting - && target.taskAffinity != null - && !target.taskAffinity.equals(task.affinity)) { - // If this activity has an affinity for another - // task, then we need to move it out of here. We will - // move it as far out of the way as possible, to the - // bottom of the activity stack. This also keeps it - // correctly ordered with any activities we previously - // moved. - ActivityRecord p = mHistory.get(0); - if (target.taskAffinity != null - && target.taskAffinity.equals(p.task.affinity)) { - // If the activity currently at the bottom has the - // same task affinity as the one we are moving, - // then merge it into the same task. - target.setTask(p.task, p.thumbHolder, false); - if (DEBUG_TASKS) Slog.v(TAG, "Start pushing activity " + target - + " out to bottom task " + p.task); - } else { - mService.mCurTask++; - if (mService.mCurTask <= 0) { - mService.mCurTask = 1; - } - target.setTask(new TaskRecord(mService.mCurTask, target.info, null), - null, false); - target.task.affinityIntent = target.intent; - if (DEBUG_TASKS) Slog.v(TAG, "Start pushing activity " + target - + " out to new task " + target.task); - } - mService.mWindowManager.setAppGroupId(target.appToken, task.taskId); - if (replyChainEnd < 0) { - replyChainEnd = targetI; - } - int dstPos = 0; - ThumbnailHolder curThumbHolder = target.thumbHolder; - boolean gotOptions = !canMoveOptions; - for (int srcPos=targetI; srcPos<=replyChainEnd; srcPos++) { - p = mHistory.get(srcPos); - if (p.finishing) { - continue; - } - if (DEBUG_TASKS) Slog.v(TAG, "Pushing next activity " + p - + " out to target's task " + target.task); - p.setTask(target.task, curThumbHolder, false); - curThumbHolder = p.thumbHolder; - canMoveOptions = false; - if (!gotOptions && topOptions == null) { - topOptions = p.takeOptionsLocked(); - if (topOptions != null) { - gotOptions = true; - } - } - if (DEBUG_ADD_REMOVE) { - RuntimeException here = new RuntimeException("here"); - here.fillInStackTrace(); - Slog.i(TAG, "Removing and adding activity " + p + " to stack at " - + dstPos, here); - } - mHistory.remove(srcPos); - mHistory.add(dstPos, p); - mService.mWindowManager.moveAppToken(dstPos, p.appToken); - mService.mWindowManager.setAppGroupId(p.appToken, p.task.taskId); - dstPos++; - if (VALIDATE_TOKENS) { - validateAppTokensLocked(); - } - i++; - } - if (taskTop == p) { - taskTop = below; - } - if (taskTopI == replyChainEnd) { - taskTopI = -1; - } - replyChainEnd = -1; - } else if (forceReset || finishOnTaskLaunch - || clearWhenTaskReset) { - // If the activity should just be removed -- either - // because it asks for it, or the task should be - // cleared -- then finish it and anything that is - // part of its reply chain. - if (clearWhenTaskReset) { - // In this case, we want to finish this activity - // and everything above it, so be sneaky and pretend - // like these are all in the reply chain. - replyChainEnd = targetI+1; - while (replyChainEnd < mHistory.size() && - (mHistory.get( - replyChainEnd)).task == task) { - replyChainEnd++; - } - replyChainEnd--; - } else if (replyChainEnd < 0) { - replyChainEnd = targetI; - } - ActivityRecord p = null; - boolean gotOptions = !canMoveOptions; - for (int srcPos=targetI; srcPos<=replyChainEnd; srcPos++) { - p = mHistory.get(srcPos); - if (p.finishing) { - continue; - } - canMoveOptions = false; - if (!gotOptions && topOptions == null) { - topOptions = p.takeOptionsLocked(); - if (topOptions != null) { - gotOptions = true; - } - } - if (finishActivityLocked(p, srcPos, - Activity.RESULT_CANCELED, null, "reset", false)) { - replyChainEnd--; - srcPos--; - } - } - if (taskTop == p) { - taskTop = below; - } - if (taskTopI == replyChainEnd) { - taskTopI = -1; + } else if (!finishOnTaskLaunch + && !clearWhenTaskReset + && allowTaskReparenting + && target.taskAffinity != null + && !target.taskAffinity.equals(task.affinity)) { + // If this activity has an affinity for another + // task, then we need to move it out of here. We will + // move it as far out of the way as possible, to the + // bottom of the activity stack. This also keeps it + // correctly ordered with any activities we previously + // moved. + TaskRecord bottomTask = mTaskHistory.get(0); + ActivityRecord p = bottomTask.mActivities.get(0); + if (target.taskAffinity != null + && target.taskAffinity.equals(p.task.affinity)) { + // If the activity currently at the bottom has the + // same task affinity as the one we are moving, + // then merge it into the same task. + setTask(target, p.task, p.thumbHolder, false); + if (DEBUG_TASKS) Slog.v(TAG, "Start pushing activity " + target + + " out to bottom task " + p.task); + } else { + setTask(target, createTaskRecord(mStackSupervisor.getNextTaskId(), target.info, + null, false), null, false); + target.task.affinityIntent = target.intent; + if (DEBUG_TASKS) Slog.v(TAG, "Start pushing activity " + target + + " out to new task " + target.task); + } + + final TaskRecord targetTask = target.task; + final int targetTaskId = targetTask.taskId; + mService.mWindowManager.setAppGroupId(target.appToken, targetTaskId); + + ThumbnailHolder curThumbHolder = target.thumbHolder; + boolean gotOptions = !canMoveOptions; + + final int start = replyChainEnd < 0 ? i : replyChainEnd; + for (int srcPos = start; srcPos >= i; --srcPos) { + p = activities.get(srcPos); + if (p.finishing) { + continue; + } + + curThumbHolder = p.thumbHolder; + canMoveOptions = false; + if (!gotOptions && topOptions == null) { + topOptions = p.takeOptionsLocked(); + if (topOptions != null) { + gotOptions = true; } - replyChainEnd = -1; - } else { - // If we were in the middle of a chain, well the - // activity that started it all doesn't want anything - // special, so leave it all as-is. - replyChainEnd = -1; } + if (DEBUG_ADD_REMOVE) Slog.i(TAG, "Removing activity " + p + " from task=" + + task + " adding to task=" + targetTask, + new RuntimeException("here").fillInStackTrace()); + if (DEBUG_TASKS) Slog.v(TAG, "Pushing next activity " + p + + " out to target's task " + target.task); + setTask(p, targetTask, curThumbHolder, false); + targetTask.addActivityAtBottom(p); + + mService.mWindowManager.setAppGroupId(p.appToken, targetTaskId); + } + + mService.mWindowManager.moveTaskToBottom(targetTaskId); + if (VALIDATE_TOKENS) { + validateAppTokensLocked(); + } + + replyChainEnd = -1; + } else if (forceReset || finishOnTaskLaunch || clearWhenTaskReset) { + // If the activity should just be removed -- either + // because it asks for it, or the task should be + // cleared -- then finish it and anything that is + // part of its reply chain. + int end; + if (clearWhenTaskReset) { + // In this case, we want to finish this activity + // and everything above it, so be sneaky and pretend + // like these are all in the reply chain. + end = numActivities - 1; + } else if (replyChainEnd < 0) { + end = i; } else { - // Reached the bottom of the task -- any reply chain - // should be left as-is. - replyChainEnd = -1; + end = replyChainEnd; + } + ActivityRecord p = null; + boolean gotOptions = !canMoveOptions; + for (int srcPos = i; srcPos <= end; srcPos++) { + p = activities.get(srcPos); + if (p.finishing) { + continue; + } + canMoveOptions = false; + if (!gotOptions && topOptions == null) { + topOptions = p.takeOptionsLocked(); + if (topOptions != null) { + gotOptions = true; + } + } + if (DEBUG_TASKS) Slog.w(TAG, + "resetTaskIntendedTask: calling finishActivity on " + p); + if (finishActivityLocked(p, Activity.RESULT_CANCELED, null, "reset", false)) { + end--; + srcPos--; + } } + replyChainEnd = -1; + } else { + // If we were in the middle of a chain, well the + // activity that started it all doesn't want anything + // special, so leave it all as-is. + replyChainEnd = -1; + } + } + + return topOptions; + } + + /** + * Helper method for #resetTaskIfNeededLocked. Processes all of the activities in a given + * TaskRecord looking for an affinity with the task of resetTaskIfNeededLocked.taskTop. + * @param affinityTask The task we are looking for an affinity to. + * @param task Task that resetTaskIfNeededLocked.taskTop belongs to. + * @param topTaskIsHigher True if #task has already been processed by resetTaskIfNeededLocked. + * @param forceReset Flag passed in to resetTaskIfNeededLocked. + */ + private final int resetAffinityTaskIfNeededLocked(TaskRecord affinityTask, TaskRecord task, + boolean topTaskIsHigher, boolean forceReset, int taskInsertionPoint) { + int replyChainEnd = -1; + final int taskId = task.taskId; + final String taskAffinity = task.affinity; + + final ArrayList<ActivityRecord> activities = affinityTask.mActivities; + final int numActivities = activities.size(); + // Do not operate on the root Activity. + for (int i = numActivities - 1; i > 0; --i) { + ActivityRecord target = activities.get(i); - } else if (target.resultTo != null && (below == null - || below.task == target.task)) { + final int flags = target.info.flags; + boolean finishOnTaskLaunch = (flags & ActivityInfo.FLAG_FINISH_ON_TASK_LAUNCH) != 0; + boolean allowTaskReparenting = (flags & ActivityInfo.FLAG_ALLOW_TASK_REPARENTING) != 0; + + if (target.resultTo != null) { // If this activity is sending a reply to a previous // activity, we can't do anything with it now until // we reach the start of the reply chain. @@ -2186,14 +1993,13 @@ final class ActivityStack { // to the previous activity, which is almost always // the case but we really shouldn't count on. if (replyChainEnd < 0) { - replyChainEnd = targetI; + replyChainEnd = i; } - - } else if (taskTopI >= 0 && allowTaskReparenting - && task.affinity != null - && task.affinity.equals(target.taskAffinity)) { - // We are inside of another task... if this activity has - // an affinity for our task, then either remove it if we are + } else if (topTaskIsHigher + && allowTaskReparenting + && taskAffinity != null + && taskAffinity.equals(target.taskAffinity)) { + // This activity has an affinity for our task. Either remove it if we are // clearing or move it over to our task. Note that // we currently punt on the case where we are resetting a // task that is not at the top but who has activities above @@ -2204,280 +2010,150 @@ final class ActivityStack { // someone starts an activity in a new task from an activity // in a task that is not currently on top.) if (forceReset || finishOnTaskLaunch) { - if (replyChainEnd < 0) { - replyChainEnd = targetI; - } - ActivityRecord p = null; - if (DEBUG_TASKS) Slog.v(TAG, "Finishing task at index " - + targetI + " to " + replyChainEnd); - for (int srcPos=targetI; srcPos<=replyChainEnd; srcPos++) { - p = mHistory.get(srcPos); + final int start = replyChainEnd >= 0 ? replyChainEnd : i; + if (DEBUG_TASKS) Slog.v(TAG, "Finishing task at index " + start + " to " + i); + for (int srcPos = start; srcPos >= i; --srcPos) { + final ActivityRecord p = activities.get(srcPos); if (p.finishing) { continue; } - if (finishActivityLocked(p, srcPos, - Activity.RESULT_CANCELED, null, "reset", false)) { - taskTopI--; - lastReparentPos--; - replyChainEnd--; - srcPos--; - } + finishActivityLocked(p, Activity.RESULT_CANCELED, null, "reset", false); } - replyChainEnd = -1; } else { - if (replyChainEnd < 0) { - replyChainEnd = targetI; + if (taskInsertionPoint < 0) { + taskInsertionPoint = task.mActivities.size(); + } - if (DEBUG_TASKS) Slog.v(TAG, "Reparenting task at index " - + targetI + " to " + replyChainEnd); - for (int srcPos=replyChainEnd; srcPos>=targetI; srcPos--) { - ActivityRecord p = mHistory.get(srcPos); - if (p.finishing) { - continue; - } - if (lastReparentPos < 0) { - lastReparentPos = taskTopI; - taskTop = p; - } else { - lastReparentPos--; - } - if (DEBUG_ADD_REMOVE) { - RuntimeException here = new RuntimeException("here"); - here.fillInStackTrace(); - Slog.i(TAG, "Removing and adding activity " + p + " to stack at " - + lastReparentPos, here); - } - mHistory.remove(srcPos); - p.setTask(task, null, false); - mHistory.add(lastReparentPos, p); - if (DEBUG_TASKS) Slog.v(TAG, "Pulling activity " + p - + " from " + srcPos + " to " + lastReparentPos + + final int start = replyChainEnd >= 0 ? replyChainEnd : i; + if (DEBUG_TASKS) Slog.v(TAG, "Reparenting from task=" + affinityTask + ":" + + start + "-" + i + " to task=" + task + ":" + taskInsertionPoint); + for (int srcPos = start; srcPos >= i; --srcPos) { + final ActivityRecord p = activities.get(srcPos); + setTask(p, task, null, false); + task.addActivityAtIndex(taskInsertionPoint, p); + + if (DEBUG_ADD_REMOVE) Slog.i(TAG, "Removing and adding activity " + p + + " to stack at " + task, + new RuntimeException("here").fillInStackTrace()); + if (DEBUG_TASKS) Slog.v(TAG, "Pulling activity " + p + " from " + srcPos + " in to resetting task " + task); - mService.mWindowManager.moveAppToken(lastReparentPos, p.appToken); - mService.mWindowManager.setAppGroupId(p.appToken, p.task.taskId); - if (VALIDATE_TOKENS) { - validateAppTokensLocked(); - } + mService.mWindowManager.setAppGroupId(p.appToken, taskId); } - replyChainEnd = -1; - + mService.mWindowManager.moveTaskToTop(taskId); + if (VALIDATE_TOKENS) { + validateAppTokensLocked(); + } + // Now we've moved it in to place... but what if this is // a singleTop activity and we have put it on top of another // instance of the same activity? Then we drop the instance // below so it remains singleTop. if (target.info.launchMode == ActivityInfo.LAUNCH_SINGLE_TOP) { - for (int j=lastReparentPos-1; j>=0; j--) { - ActivityRecord p = mHistory.get(j); - if (p.finishing) { - continue; - } + ArrayList<ActivityRecord> taskActivities = task.mActivities; + boolean found = false; + int targetNdx = taskActivities.indexOf(target); + if (targetNdx > 0) { + ActivityRecord p = taskActivities.get(targetNdx - 1); if (p.intent.getComponent().equals(target.intent.getComponent())) { - if (finishActivityLocked(p, j, - Activity.RESULT_CANCELED, null, "replace", false)) { - taskTopI--; - lastReparentPos--; - } + finishActivityLocked(p, Activity.RESULT_CANCELED, null, "replace", + false); } } } } - } else if (below != null && below.task != target.task) { - // We hit the botton of a task; the reply chain can't - // pass through it. replyChainEnd = -1; } - - target = below; - targetI = i; } + return taskInsertionPoint; + } - if (topOptions != null) { - // If we got some ActivityOptions from an activity on top that - // was removed from the task, propagate them to the new real top. - if (taskTop != null) { - taskTop.updateOptionsLocked(topOptions); - } else { - topOptions.abort(); + private final ActivityRecord resetTaskIfNeededLocked(ActivityRecord taskTop, + ActivityRecord newActivity) { + boolean forceReset = + (newActivity.info.flags & ActivityInfo.FLAG_CLEAR_TASK_ON_LAUNCH) != 0; + if (ACTIVITY_INACTIVE_RESET_TIME > 0 + && taskTop.task.getInactiveDuration() > ACTIVITY_INACTIVE_RESET_TIME) { + if ((newActivity.info.flags & ActivityInfo.FLAG_ALWAYS_RETAIN_TASK_STATE) == 0) { + forceReset = true; } } - return taskTop; - } - - /** - * Perform clear operation as requested by - * {@link Intent#FLAG_ACTIVITY_CLEAR_TOP}: search from the top of the - * stack to the given task, then look for - * an instance of that activity in the stack and, if found, finish all - * activities on top of it and return the instance. - * - * @param newR Description of the new activity being started. - * @return Returns the old activity that should be continued to be used, - * or null if none was found. - */ - private final ActivityRecord performClearTaskLocked(int taskId, - ActivityRecord newR, int launchFlags) { - int i = mHistory.size(); - - // First find the requested task. - while (i > 0) { - i--; - ActivityRecord r = mHistory.get(i); - if (r.task.taskId == taskId) { - i++; - break; - } - } - - // Now clear it. - while (i > 0) { - i--; - ActivityRecord r = mHistory.get(i); - if (r.finishing) { - continue; - } - if (r.task.taskId != taskId) { - return null; - } - if (r.realActivity.equals(newR.realActivity)) { - // Here it is! Now finish everything in front... - ActivityRecord ret = r; - while (i < (mHistory.size()-1)) { - i++; - r = mHistory.get(i); - if (r.task.taskId != taskId) { - break; - } - if (r.finishing) { - continue; - } - ActivityOptions opts = r.takeOptionsLocked(); - if (opts != null) { - ret.updateOptionsLocked(opts); - } - if (finishActivityLocked(r, i, Activity.RESULT_CANCELED, - null, "clear", false)) { - i--; - } - } - - // Finally, if this is a normal launch mode (that is, not - // expecting onNewIntent()), then we will finish the current - // instance of the activity so a new fresh one can be started. - if (ret.launchMode == ActivityInfo.LAUNCH_MULTIPLE - && (launchFlags&Intent.FLAG_ACTIVITY_SINGLE_TOP) == 0) { - if (!ret.finishing) { - int index = indexOfTokenLocked(ret.appToken); - if (index >= 0) { - finishActivityLocked(ret, index, Activity.RESULT_CANCELED, - null, "clear", false); - } - return null; - } - } - - return ret; - } - } + final TaskRecord task = taskTop.task; - return null; - } + /** False until we evaluate the TaskRecord associated with taskTop. Switches to true + * for remaining tasks. Used for later tasks to reparent to task. */ + boolean taskFound = false; - /** - * Completely remove all activities associated with an existing - * task starting at a specified index. - */ - private final void performClearTaskAtIndexLocked(int taskId, int i) { - while (i < mHistory.size()) { - ActivityRecord r = mHistory.get(i); - if (r.task.taskId != taskId) { - // Whoops hit the end. - return; - } - if (r.finishing) { - i++; - continue; - } - if (!finishActivityLocked(r, i, Activity.RESULT_CANCELED, - null, "clear", false)) { - i++; - } - } - } + /** If ActivityOptions are moved out and need to be aborted or moved to taskTop. */ + ActivityOptions topOptions = null; - /** - * Completely remove all activities associated with an existing task. - */ - private final void performClearTaskLocked(int taskId) { - int i = mHistory.size(); + // Preserve the location for reparenting in the new task. + int reparentInsertionPoint = -1; - // First find the requested task. - while (i > 0) { - i--; - ActivityRecord r = mHistory.get(i); - if (r.task.taskId == taskId) { - i++; - break; + for (int i = mTaskHistory.size() - 1; i >= 0; --i) { + final TaskRecord targetTask = mTaskHistory.get(i); + + if (targetTask == task) { + topOptions = resetTargetTaskIfNeededLocked(task, forceReset); + taskFound = true; + } else { + reparentInsertionPoint = resetAffinityTaskIfNeededLocked(targetTask, task, + taskFound, forceReset, reparentInsertionPoint); } } - // Now find the start and clear it. - while (i > 0) { - i--; - ActivityRecord r = mHistory.get(i); - if (r.finishing) { - continue; - } - if (r.task.taskId != taskId) { - // We hit the bottom. Now finish it all... - performClearTaskAtIndexLocked(taskId, i+1); - return; + int taskNdx = mTaskHistory.indexOf(task); + do { + taskTop = mTaskHistory.get(taskNdx--).getTopActivity(); + } while (taskTop == null && taskNdx >= 0); + + if (topOptions != null) { + // If we got some ActivityOptions from an activity on top that + // was removed from the task, propagate them to the new real top. + if (taskTop != null) { + taskTop.updateOptionsLocked(topOptions); + } else { + topOptions.abort(); } } + + return taskTop; } /** * Find the activity in the history stack within the given task. Returns * the index within the history at which it's found, or < 0 if not found. */ - private final int findActivityInHistoryLocked(ActivityRecord r, int task) { - int i = mHistory.size(); - while (i > 0) { - i--; - ActivityRecord candidate = mHistory.get(i); + private final ActivityRecord findActivityInHistoryLocked(ActivityRecord r, TaskRecord task) { + final ComponentName realActivity = r.realActivity; + ArrayList<ActivityRecord> activities = task.mActivities; + for (int activityNdx = activities.size() - 1; activityNdx >= 0; --activityNdx) { + ActivityRecord candidate = activities.get(activityNdx); if (candidate.finishing) { continue; } - if (candidate.task.taskId != task) { - break; - } - if (candidate.realActivity.equals(r.realActivity)) { - return i; + if (candidate.realActivity.equals(realActivity)) { + return candidate; } } - - return -1; + return null; } /** * Reorder the history stack so that the activity at the given index is * brought to the front. */ - private final ActivityRecord moveActivityToFrontLocked(int where) { - ActivityRecord newTop = mHistory.remove(where); - int top = mHistory.size(); - ActivityRecord oldTop = mHistory.get(top-1); - if (DEBUG_ADD_REMOVE) { - RuntimeException here = new RuntimeException("here"); - here.fillInStackTrace(); - Slog.i(TAG, "Removing and adding activity " + newTop + " to stack at " - + top, here); - } - mHistory.add(top, newTop); - oldTop.frontOfTask = false; + private final void moveActivityToFrontLocked(ActivityRecord newTop) { + if (DEBUG_ADD_REMOVE) Slog.i(TAG, "Removing and adding activity " + newTop + + " to stack at top", new RuntimeException("here").fillInStackTrace()); + + final TaskRecord task = newTop.task; + task.getTopActivity().frontOfTask = false; + task.mActivities.remove(newTop); + task.mActivities.add(newTop); newTop.frontOfTask = true; - return newTop; } final int startActivityLocked(IApplicationThread caller, @@ -2485,7 +2161,6 @@ final class ActivityStack { String resultWho, int requestCode, int callingPid, int callingUid, String callingPackage, int startFlags, Bundle options, boolean componentSpecified, ActivityRecord[] outActivity) { - int err = ActivityManager.START_SUCCESS; ProcessRecord callerApp = null; @@ -2511,11 +2186,10 @@ final class ActivityStack { ActivityRecord sourceRecord = null; ActivityRecord resultRecord = null; if (resultTo != null) { - int index = indexOfTokenLocked(resultTo); + sourceRecord = isInStackLocked(resultTo); if (DEBUG_RESULTS) Slog.v( - TAG, "Will send result to " + resultTo + " (index " + index + ")"); - if (index >= 0) { - sourceRecord = mHistory.get(index); + TAG, "Will send result to " + resultTo + " " + sourceRecord); + if (sourceRecord != null) { if (requestCode >= 0 && !sourceRecord.finishing) { resultRecord = sourceRecord; } @@ -2560,7 +2234,7 @@ final class ActivityStack { resultRecord, resultWho, requestCode, Activity.RESULT_CANCELED, null); } - mDismissKeyguardOnNextActivity = false; + mStackSupervisor.setDismissKeyguard(false); ActivityOptions.abort(options); return err; } @@ -2575,7 +2249,7 @@ final class ActivityStack { resultRecord, resultWho, requestCode, Activity.RESULT_CANCELED, null); } - mDismissKeyguardOnNextActivity = false; + mStackSupervisor.setDismissKeyguard(false); String msg; if (!aInfo.exported) { msg = "Permission Denial: starting " + intent.toString() @@ -2592,7 +2266,7 @@ final class ActivityStack { throw new SecurityException(msg); } - if (mMainStack) { + if (mStackSupervisor.isMainStack(this)) { if (mService.mController != null) { boolean abort = false; try { @@ -2604,44 +2278,41 @@ final class ActivityStack { } catch (RemoteException e) { mService.mController = null; } - + if (abort) { if (resultRecord != null) { - sendActivityResultLocked(-1, - resultRecord, resultWho, requestCode, + sendActivityResultLocked(-1, resultRecord, resultWho, requestCode, Activity.RESULT_CANCELED, null); } // We pretend to the caller that it was really started, but // they will just get a cancel result. - mDismissKeyguardOnNextActivity = false; + mStackSupervisor.setDismissKeyguard(false); ActivityOptions.abort(options); return ActivityManager.START_SUCCESS; } } } - ActivityRecord r = new ActivityRecord(mService, this, callerApp, callingUid, callingPackage, + ActivityRecord r = new ActivityRecord(mService, callerApp, callingUid, callingPackage, intent, resolvedType, aInfo, mService.mConfiguration, resultRecord, resultWho, requestCode, componentSpecified); if (outActivity != null) { outActivity[0] = r; } - if (mMainStack) { + if (mStackSupervisor.isMainStack(this)) { if (mResumedActivity == null || mResumedActivity.info.applicationInfo.uid != callingUid) { if (!mService.checkAppSwitchAllowedLocked(callingPid, callingUid, "Activity start")) { - PendingActivityLaunch pal = new PendingActivityLaunch(); - pal.r = r; - pal.sourceRecord = sourceRecord; - pal.startFlags = startFlags; + PendingActivityLaunch pal = + new PendingActivityLaunch(r, sourceRecord, startFlags, this); mService.mPendingActivityLaunches.add(pal); - mDismissKeyguardOnNextActivity = false; + mStackSupervisor.setDismissKeyguard(false); ActivityOptions.abort(options); return ActivityManager.START_SWITCHES_CANCELED; } } - + if (mService.mDidAppSwitch) { // This is the second allowed switch since we stopped switches, // so now just generally allow switches. Use case: user presses @@ -2652,23 +2323,22 @@ final class ActivityStack { } else { mService.mDidAppSwitch = true; } - - mService.doPendingActivityLaunchesLocked(false); } - + + mService.doPendingActivityLaunchesLocked(false); + err = startActivityUncheckedLocked(r, sourceRecord, startFlags, true, options); - if (mDismissKeyguardOnNextActivity && mPausingActivity == null) { + if (mPausingActivity == null) { // Someone asked to have the keyguard dismissed on the next // activity start, but we are not actually doing an activity // switch... just dismiss the keyguard now, because we // probably want to see whatever is behind it. - mDismissKeyguardOnNextActivity = false; - mService.mWindowManager.dismissKeyguard(); + mStackSupervisor.dismissKeyguard(); } return err; } - + final void moveHomeToFrontFromLaunchLocked(int launchFlags) { if ((launchFlags & (Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_TASK_ON_HOME)) @@ -2686,20 +2356,20 @@ final class ActivityStack { final int callingUid = r.launchedFromUid; int launchFlags = intent.getFlags(); - + // We'll invoke onUserLeaving before onPause only if the launching // activity did not explicitly state that this is an automated launch. mUserLeaving = (launchFlags&Intent.FLAG_ACTIVITY_NO_USER_ACTION) == 0; if (DEBUG_USER_LEAVING) Slog.v(TAG, "startActivity() => mUserLeaving=" + mUserLeaving); - + // If the caller has asked not to resume at this point, we make note // of this in the record so that we can skip it when trying to find // the top running activity. if (!doResume) { r.delayedResume = true; } - + ActivityRecord notTop = (launchFlags&Intent.FLAG_ACTIVITY_PREVIOUS_IS_TOP) != 0 ? r : null; @@ -2821,7 +2491,7 @@ final class ActivityStack { // existing task with its new activity. Well that should // not be too hard... reuseTask = taskTop.task; - performClearTaskLocked(taskTop.task.taskId); + taskTop.task.performClearTaskLocked(); reuseTask.setIntent(r.intent, r.info); } else if ((launchFlags&Intent.FLAG_ACTIVITY_CLEAR_TOP) != 0 || r.launchMode == ActivityInfo.LAUNCH_SINGLE_TASK @@ -2830,8 +2500,7 @@ final class ActivityStack { // from the task up to the one being started. In most // cases this means we are resetting the task to its // initial state. - ActivityRecord top = performClearTaskLocked( - taskTop.task.taskId, r, launchFlags); + ActivityRecord top = taskTop.task.performClearTaskLocked(r, launchFlags); if (top != null) { if (top.frontOfTask) { // Activity aliases may mean we use different @@ -2962,30 +2631,25 @@ final class ActivityStack { if (r.resultTo == null && !addingToTask && (launchFlags&Intent.FLAG_ACTIVITY_NEW_TASK) != 0) { if (reuseTask == null) { - // todo: should do better management of integers. - mService.mCurTask++; - if (mService.mCurTask <= 0) { - mService.mCurTask = 1; - } - r.setTask(new TaskRecord(mService.mCurTask, r.info, intent), null, true); + setTask(r, createTaskRecord(mStackSupervisor.getNextTaskId(), r.info, intent, + true), null, true); if (DEBUG_TASKS) Slog.v(TAG, "Starting new activity " + r + " in new task " + r.task); } else { - r.setTask(reuseTask, reuseTask, true); + setTask(r, reuseTask, reuseTask, true); } newTask = true; if (!movedHome) { moveHomeToFrontFromLaunchLocked(launchFlags); } - + } else if (sourceRecord != null) { if (!addingToTask && (launchFlags&Intent.FLAG_ACTIVITY_CLEAR_TOP) != 0) { // In this case, we are adding the activity to an existing // task, but the caller has asked to clear that task if the // activity is already running. - ActivityRecord top = performClearTaskLocked( - sourceRecord.task.taskId, r, launchFlags); + ActivityRecord top = sourceRecord.task.performClearTaskLocked(r, launchFlags); keepCurTransition = true; if (top != null) { logStartActivity(EventLogTags.AM_NEW_INTENT, r, top.task); @@ -3003,9 +2667,9 @@ final class ActivityStack { // In this case, we are launching an activity in our own task // that may already be running somewhere in the history, and // we want to shuffle it to the front of the stack if so. - int where = findActivityInHistoryLocked(r, sourceRecord.task.taskId); - if (where >= 0) { - ActivityRecord top = moveActivityToFrontLocked(where); + final ActivityRecord top = findActivityInHistoryLocked(r, sourceRecord.task); + if (top != null) { + moveActivityToFrontLocked(top); logStartActivity(EventLogTags.AM_NEW_INTENT, r, top.task); top.updateOptionsLocked(options); top.deliverNewIntentLocked(callingUid, r.intent); @@ -3018,7 +2682,7 @@ final class ActivityStack { // An existing activity is starting this new activity, so we want // to keep the new one in the same task as the one that is starting // it. - r.setTask(sourceRecord.task, sourceRecord.thumbHolder, false); + setTask(r, sourceRecord.task, sourceRecord.thumbHolder, false); if (DEBUG_TASKS) Slog.v(TAG, "Starting new activity " + r + " in existing task " + r.task); @@ -3026,12 +2690,20 @@ final class ActivityStack { // This not being started from an existing activity, and not part // of a new task... just put it in the top task, though these days // this case should never happen. - final int N = mHistory.size(); - ActivityRecord prev = - N > 0 ? mHistory.get(N-1) : null; - r.setTask(prev != null + ActivityRecord prev = null; + // Iterate to find the first non-empty task stack. Note that this code can + // go away once we stop storing tasks with empty mActivities lists. + for (int taskNdx = mTaskHistory.size() - 1; taskNdx >= 0; --taskNdx) { + ArrayList<ActivityRecord> activities = mTaskHistory.get(taskNdx).mActivities; + for (int activityNdx = activities.size() - 1; activityNdx >= 0; --activityNdx) { + prev = activities.get(activityNdx); + break; + } + } + setTask(r, prev != null ? prev.task - : new TaskRecord(mService.mCurTask, r.info, intent), null, true); + : createTaskRecord(mStackSupervisor.getNextTaskId(), r.info, intent, true), + null, true); if (DEBUG_TASKS) Slog.v(TAG, "Starting new activity " + r + " in new guessed " + r.task); } @@ -3047,291 +2719,6 @@ final class ActivityStack { return ActivityManager.START_SUCCESS; } - ActivityInfo resolveActivity(Intent intent, String resolvedType, int startFlags, - String profileFile, ParcelFileDescriptor profileFd, int userId) { - // Collect information about the target of the Intent. - ActivityInfo aInfo; - try { - ResolveInfo rInfo = - AppGlobals.getPackageManager().resolveIntent( - intent, resolvedType, - PackageManager.MATCH_DEFAULT_ONLY - | ActivityManagerService.STOCK_PM_FLAGS, userId); - aInfo = rInfo != null ? rInfo.activityInfo : null; - } catch (RemoteException e) { - aInfo = null; - } - - if (aInfo != null) { - // Store the found target back into the intent, because now that - // we have it we never want to do this again. For example, if the - // user navigates back to this point in the history, we should - // always restart the exact same activity. - intent.setComponent(new ComponentName( - aInfo.applicationInfo.packageName, aInfo.name)); - - // Don't debug things in the system process - if ((startFlags&ActivityManager.START_FLAG_DEBUG) != 0) { - if (!aInfo.processName.equals("system")) { - mService.setDebugApp(aInfo.processName, true, false); - } - } - - if ((startFlags&ActivityManager.START_FLAG_OPENGL_TRACES) != 0) { - if (!aInfo.processName.equals("system")) { - mService.setOpenGlTraceApp(aInfo.applicationInfo, aInfo.processName); - } - } - - if (profileFile != null) { - if (!aInfo.processName.equals("system")) { - mService.setProfileApp(aInfo.applicationInfo, aInfo.processName, - profileFile, profileFd, - (startFlags&ActivityManager.START_FLAG_AUTO_STOP_PROFILER) != 0); - } - } - } - return aInfo; - } - - final int startActivityMayWait(IApplicationThread caller, int callingUid, - String callingPackage, Intent intent, String resolvedType, IBinder resultTo, - String resultWho, int requestCode, int startFlags, String profileFile, - ParcelFileDescriptor profileFd, WaitResult outResult, Configuration config, - Bundle options, int userId) { - // Refuse possible leaked file descriptors - if (intent != null && intent.hasFileDescriptors()) { - throw new IllegalArgumentException("File descriptors passed in Intent"); - } - boolean componentSpecified = intent.getComponent() != null; - - // Don't modify the client's object! - intent = new Intent(intent); - - // Collect information about the target of the Intent. - ActivityInfo aInfo = resolveActivity(intent, resolvedType, startFlags, - profileFile, profileFd, userId); - - synchronized (mService) { - int callingPid; - if (callingUid >= 0) { - callingPid = -1; - } else if (caller == null) { - callingPid = Binder.getCallingPid(); - callingUid = Binder.getCallingUid(); - } else { - callingPid = callingUid = -1; - } - - mConfigWillChange = config != null - && mService.mConfiguration.diff(config) != 0; - if (DEBUG_CONFIGURATION) Slog.v(TAG, - "Starting activity when config will change = " + mConfigWillChange); - - final long origId = Binder.clearCallingIdentity(); - - if (mMainStack && aInfo != null && - (aInfo.applicationInfo.flags&ApplicationInfo.FLAG_CANT_SAVE_STATE) != 0) { - // This may be a heavy-weight process! Check to see if we already - // have another, different heavy-weight process running. - if (aInfo.processName.equals(aInfo.applicationInfo.packageName)) { - if (mService.mHeavyWeightProcess != null && - (mService.mHeavyWeightProcess.info.uid != aInfo.applicationInfo.uid || - !mService.mHeavyWeightProcess.processName.equals(aInfo.processName))) { - int realCallingPid = callingPid; - int realCallingUid = callingUid; - if (caller != null) { - ProcessRecord callerApp = mService.getRecordForAppLocked(caller); - if (callerApp != null) { - realCallingPid = callerApp.pid; - realCallingUid = callerApp.info.uid; - } else { - Slog.w(TAG, "Unable to find app for caller " + caller - + " (pid=" + realCallingPid + ") when starting: " - + intent.toString()); - ActivityOptions.abort(options); - return ActivityManager.START_PERMISSION_DENIED; - } - } - - IIntentSender target = mService.getIntentSenderLocked( - ActivityManager.INTENT_SENDER_ACTIVITY, "android", - realCallingUid, userId, null, null, 0, new Intent[] { intent }, - new String[] { resolvedType }, PendingIntent.FLAG_CANCEL_CURRENT - | PendingIntent.FLAG_ONE_SHOT, null); - - Intent newIntent = new Intent(); - if (requestCode >= 0) { - // Caller is requesting a result. - newIntent.putExtra(HeavyWeightSwitcherActivity.KEY_HAS_RESULT, true); - } - newIntent.putExtra(HeavyWeightSwitcherActivity.KEY_INTENT, - new IntentSender(target)); - if (mService.mHeavyWeightProcess.activities.size() > 0) { - ActivityRecord hist = mService.mHeavyWeightProcess.activities.get(0); - newIntent.putExtra(HeavyWeightSwitcherActivity.KEY_CUR_APP, - hist.packageName); - newIntent.putExtra(HeavyWeightSwitcherActivity.KEY_CUR_TASK, - hist.task.taskId); - } - newIntent.putExtra(HeavyWeightSwitcherActivity.KEY_NEW_APP, - aInfo.packageName); - newIntent.setFlags(intent.getFlags()); - newIntent.setClassName("android", - HeavyWeightSwitcherActivity.class.getName()); - intent = newIntent; - resolvedType = null; - caller = null; - callingUid = Binder.getCallingUid(); - callingPid = Binder.getCallingPid(); - componentSpecified = true; - try { - ResolveInfo rInfo = - AppGlobals.getPackageManager().resolveIntent( - intent, null, - PackageManager.MATCH_DEFAULT_ONLY - | ActivityManagerService.STOCK_PM_FLAGS, userId); - aInfo = rInfo != null ? rInfo.activityInfo : null; - aInfo = mService.getActivityInfoForUser(aInfo, userId); - } catch (RemoteException e) { - aInfo = null; - } - } - } - } - - int res = startActivityLocked(caller, intent, resolvedType, - aInfo, resultTo, resultWho, requestCode, callingPid, callingUid, - callingPackage, startFlags, options, componentSpecified, null); - - if (mConfigWillChange && mMainStack) { - // If the caller also wants to switch to a new configuration, - // do so now. This allows a clean switch, as we are waiting - // for the current activity to pause (so we will not destroy - // it), and have not yet started the next activity. - mService.enforceCallingPermission(android.Manifest.permission.CHANGE_CONFIGURATION, - "updateConfiguration()"); - mConfigWillChange = false; - if (DEBUG_CONFIGURATION) Slog.v(TAG, - "Updating to new configuration after starting activity."); - mService.updateConfigurationLocked(config, null, false, false); - } - - Binder.restoreCallingIdentity(origId); - - if (outResult != null) { - outResult.result = res; - if (res == ActivityManager.START_SUCCESS) { - mWaitingActivityLaunched.add(outResult); - do { - try { - mService.wait(); - } catch (InterruptedException e) { - } - } while (!outResult.timeout && outResult.who == null); - } else if (res == ActivityManager.START_TASK_TO_FRONT) { - ActivityRecord r = this.topRunningActivityLocked(null); - if (r.nowVisible) { - outResult.timeout = false; - outResult.who = new ComponentName(r.info.packageName, r.info.name); - outResult.totalTime = 0; - outResult.thisTime = 0; - } else { - outResult.thisTime = SystemClock.uptimeMillis(); - mWaitingActivityVisible.add(outResult); - do { - try { - mService.wait(); - } catch (InterruptedException e) { - } - } while (!outResult.timeout && outResult.who == null); - } - } - } - - return res; - } - } - - final int startActivities(IApplicationThread caller, int callingUid, String callingPackage, - Intent[] intents, String[] resolvedTypes, IBinder resultTo, - Bundle options, int userId) { - if (intents == null) { - throw new NullPointerException("intents is null"); - } - if (resolvedTypes == null) { - throw new NullPointerException("resolvedTypes is null"); - } - if (intents.length != resolvedTypes.length) { - throw new IllegalArgumentException("intents are length different than resolvedTypes"); - } - - ActivityRecord[] outActivity = new ActivityRecord[1]; - - int callingPid; - if (callingUid >= 0) { - callingPid = -1; - } else if (caller == null) { - callingPid = Binder.getCallingPid(); - callingUid = Binder.getCallingUid(); - } else { - callingPid = callingUid = -1; - } - final long origId = Binder.clearCallingIdentity(); - try { - synchronized (mService) { - - for (int i=0; i<intents.length; i++) { - Intent intent = intents[i]; - if (intent == null) { - continue; - } - - // Refuse possible leaked file descriptors - if (intent != null && intent.hasFileDescriptors()) { - throw new IllegalArgumentException("File descriptors passed in Intent"); - } - - boolean componentSpecified = intent.getComponent() != null; - - // Don't modify the client's object! - intent = new Intent(intent); - - // Collect information about the target of the Intent. - ActivityInfo aInfo = resolveActivity(intent, resolvedTypes[i], - 0, null, null, userId); - // TODO: New, check if this is correct - aInfo = mService.getActivityInfoForUser(aInfo, userId); - - if (mMainStack && aInfo != null && (aInfo.applicationInfo.flags - & ApplicationInfo.FLAG_CANT_SAVE_STATE) != 0) { - throw new IllegalArgumentException( - "FLAG_CANT_SAVE_STATE not supported here"); - } - - Bundle theseOptions; - if (options != null && i == intents.length-1) { - theseOptions = options; - } else { - theseOptions = null; - } - int res = startActivityLocked(caller, intent, resolvedTypes[i], - aInfo, resultTo, null, -1, callingPid, callingUid, callingPackage, - 0, theseOptions, componentSpecified, outActivity); - if (res < 0) { - return res; - } - - resultTo = outActivity[0] != null ? outActivity[0].appToken : null; - } - } - } finally { - Binder.restoreCallingIdentity(origId); - } - - return ActivityManager.START_SUCCESS; - } - void reportActivityLaunchedLocked(boolean timeout, ActivityRecord r, long thisTime, long totalTime) { for (int i=mWaitingActivityLaunched.size()-1; i>=0; i--) { @@ -3345,7 +2732,7 @@ final class ActivityStack { } mService.notifyAll(); } - + void reportActivityVisibleLocked(ActivityRecord r) { for (int i=mWaitingActivityVisible.size()-1; i>=0; i--) { WaitResult w = mWaitingActivityVisible.get(i); @@ -3357,11 +2744,7 @@ final class ActivityStack { w.thisTime = w.totalTime; } mService.notifyAll(); - - if (mDismissKeyguardOnNextActivity) { - mDismissKeyguardOnNextActivity = false; - mService.mWindowManager.dismissKeyguard(); - } + mStackSupervisor.dismissKeyguard(); } void sendActivityResultLocked(int callingUid, ActivityRecord r, @@ -3409,7 +2792,7 @@ final class ActivityStack { } if (r.app != null && r.app.thread != null) { - if (mMainStack) { + if (mStackSupervisor.isMainStack(this)) { if (mService.mFocusedActivity == r) { mService.setFocusedActivityLocked(topRunningActivityLocked(null)); } @@ -3426,7 +2809,7 @@ final class ActivityStack { mService.mWindowManager.setAppVisibility(r.appToken, false); } r.app.thread.scheduleStopActivity(r.appToken, r.visible, r.configChangeFlags); - if (mService.isSleeping()) { + if (mService.isSleepingOrShuttingDown()) { r.setSleeping(true); } Message msg = mHandler.obtainMessage(STOP_TIMEOUT_MSG); @@ -3447,7 +2830,7 @@ final class ActivityStack { } } } - + final ArrayList<ActivityRecord> processStoppingActivitiesLocked( boolean remove) { int N = mStoppingActivities.size(); @@ -3476,7 +2859,7 @@ final class ActivityStack { mService.mWindowManager.setAppVisibility(s.appToken, false); } } - if ((!s.waitingVisible || mService.isSleeping()) && remove) { + if ((!s.waitingVisible || mService.isSleepingOrShuttingDown()) && remove) { if (localLOGV) Slog.v(TAG, "Ready to stop: " + s); if (stops == null) { stops = new ArrayList<ActivityRecord>(); @@ -3497,7 +2880,8 @@ final class ActivityStack { mHandler.sendMessage(msg); } - final ActivityRecord activityIdleInternal(IBinder token, boolean fromTimeout, + // Checked. + final ActivityRecord activityIdleInternalLocked(IBinder token, boolean fromTimeout, Configuration config) { if (localLOGV) Slog.v(TAG, "Activity idle: " + token); @@ -3515,83 +2899,79 @@ final class ActivityStack { boolean enableScreen = false; boolean activityRemoved = false; - synchronized (mService) { - ActivityRecord r = ActivityRecord.forToken(token); - if (r != null) { - mHandler.removeMessages(IDLE_TIMEOUT_MSG, r); - r.finishLaunchTickingLocked(); + ActivityRecord r = ActivityRecord.forToken(token); + if (r != null) { + mHandler.removeMessages(IDLE_TIMEOUT_MSG, r); + r.finishLaunchTickingLocked(); + } + + // Get the activity record. + if (isInStackLocked(token) != null) { + res = r; + + if (fromTimeout) { + reportActivityLaunchedLocked(fromTimeout, r, -1, -1); } - // Get the activity record. - int index = indexOfActivityLocked(r); - if (index >= 0) { - res = r; + // This is a hack to semi-deal with a race condition + // in the client where it can be constructed with a + // newer configuration from when we asked it to launch. + // We'll update with whatever configuration it now says + // it used to launch. + if (config != null) { + r.configuration = config; + } - if (fromTimeout) { - reportActivityLaunchedLocked(fromTimeout, r, -1, -1); - } - - // This is a hack to semi-deal with a race condition - // in the client where it can be constructed with a - // newer configuration from when we asked it to launch. - // We'll update with whatever configuration it now says - // it used to launch. - if (config != null) { - r.configuration = config; - } - - // No longer need to keep the device awake. - if (mResumedActivity == r && mLaunchingActivity.isHeld()) { - mHandler.removeMessages(LAUNCH_TIMEOUT_MSG); - mLaunchingActivity.release(); - } + // No longer need to keep the device awake. + if (mResumedActivity == r && mLaunchingActivity.isHeld()) { + mHandler.removeMessages(LAUNCH_TIMEOUT_MSG); + mLaunchingActivity.release(); + } - // We are now idle. If someone is waiting for a thumbnail from - // us, we can now deliver. - r.idle = true; - mService.scheduleAppGcsLocked(); - if (r.thumbnailNeeded && r.app != null && r.app.thread != null) { - sendThumbnail = r.app.thread; - r.thumbnailNeeded = false; - } + // We are now idle. If someone is waiting for a thumbnail from + // us, we can now deliver. + r.idle = true; + mService.scheduleAppGcsLocked(); + if (r.thumbnailNeeded && r.app != null && r.app.thread != null) { + sendThumbnail = r.app.thread; + r.thumbnailNeeded = false; + } - // If this activity is fullscreen, set up to hide those under it. + // If this activity is fullscreen, set up to hide those under it. - if (DEBUG_VISBILITY) Slog.v(TAG, "Idle activity for " + r); - ensureActivitiesVisibleLocked(null, 0); + if (DEBUG_VISBILITY) Slog.v(TAG, "Idle activity for " + r); + ensureActivitiesVisibleLocked(null, 0); - //Slog.i(TAG, "IDLE: mBooted=" + mBooted + ", fromTimeout=" + fromTimeout); - if (mMainStack) { - if (!mService.mBooted) { - mService.mBooted = true; - enableScreen = true; - } + //Slog.i(TAG, "IDLE: mBooted=" + mBooted + ", fromTimeout=" + fromTimeout); + if (mStackSupervisor.isMainStack(this)) { + if (!mService.mBooted) { + mService.mBooted = true; + enableScreen = true; } - - } else if (fromTimeout) { - reportActivityLaunchedLocked(fromTimeout, null, -1, -1); } + } else if (fromTimeout) { + reportActivityLaunchedLocked(fromTimeout, null, -1, -1); + } - // Atomically retrieve all of the other things to do. - stops = processStoppingActivitiesLocked(true); - NS = stops != null ? stops.size() : 0; - if ((NF=mFinishingActivities.size()) > 0) { - finishes = new ArrayList<ActivityRecord>(mFinishingActivities); - mFinishingActivities.clear(); - } - if ((NT=mService.mCancelledThumbnails.size()) > 0) { - thumbnails = new ArrayList<ActivityRecord>(mService.mCancelledThumbnails); - mService.mCancelledThumbnails.clear(); - } + // Atomically retrieve all of the other things to do. + stops = processStoppingActivitiesLocked(true); + NS = stops != null ? stops.size() : 0; + if ((NF=mFinishingActivities.size()) > 0) { + finishes = new ArrayList<ActivityRecord>(mFinishingActivities); + mFinishingActivities.clear(); + } + if ((NT=mCancelledThumbnails.size()) > 0) { + thumbnails = new ArrayList<ActivityRecord>(mCancelledThumbnails); + mCancelledThumbnails.clear(); + } - if (mMainStack) { - booting = mService.mBooting; - mService.mBooting = false; - } - if (mStartingUsers.size() > 0) { - startingUsers = new ArrayList<UserStartedState>(mStartingUsers); - mStartingUsers.clear(); - } + if (mStackSupervisor.isMainStack(this)) { + booting = mService.mBooting; + mService.mBooting = false; + } + if (mStartingUsers.size() > 0) { + startingUsers = new ArrayList<UserStartedState>(mStartingUsers); + mStartingUsers.clear(); } int i; @@ -3609,7 +2989,7 @@ final class ActivityStack { // Stop any activities that are scheduled to do so but have been // waiting for the next one to start. for (i=0; i<NS; i++) { - ActivityRecord r = (ActivityRecord)stops.get(i); + r = stops.get(i); synchronized (mService) { if (r.finishing) { finishCurrentActivityLocked(r, FINISH_IMMEDIATELY, false); @@ -3622,7 +3002,7 @@ final class ActivityStack { // Finish any activities that are scheduled to do so but have been // waiting for the next one to start. for (i=0; i<NF; i++) { - ActivityRecord r = (ActivityRecord)finishes.get(i); + r = finishes.get(i); synchronized (mService) { activityRemoved = destroyActivityLocked(r, true, false, "finish-idle"); } @@ -3630,7 +3010,7 @@ final class ActivityStack { // Report back to any thumbnail receivers. for (i=0; i<NT; i++) { - ActivityRecord r = (ActivityRecord)thumbnails.get(i); + r = thumbnails.get(i); mService.sendPendingThumbnail(r, null, null, null, true); } @@ -3663,63 +3043,83 @@ final class ActivityStack { */ final boolean requestFinishActivityLocked(IBinder token, int resultCode, Intent resultData, String reason, boolean oomAdj) { - int index = indexOfTokenLocked(token); + ActivityRecord r = isInStackLocked(token); if (DEBUG_RESULTS || DEBUG_STATES) Slog.v( - TAG, "Finishing activity @" + index + ": token=" + token + TAG, "Finishing activity token=" + token + " r=" + ", result=" + resultCode + ", data=" + resultData + ", reason=" + reason); - if (index < 0) { + if (r == null) { return false; } - ActivityRecord r = mHistory.get(index); - finishActivityLocked(r, index, resultCode, resultData, reason, oomAdj); + finishActivityLocked(r, resultCode, resultData, reason, oomAdj); return true; } - final void finishSubActivityLocked(IBinder token, String resultWho, int requestCode) { - ActivityRecord self = isInStackLocked(token); - if (self == null) { - return; - } - - int i; - for (i=mHistory.size()-1; i>=0; i--) { - ActivityRecord r = (ActivityRecord)mHistory.get(i); - if (r.resultTo == self && r.requestCode == requestCode) { - if ((r.resultWho == null && resultWho == null) || - (r.resultWho != null && r.resultWho.equals(resultWho))) { - finishActivityLocked(r, i, - Activity.RESULT_CANCELED, null, "request-sub", false); + final void finishSubActivityLocked(ActivityRecord self, String resultWho, int requestCode) { + for (int taskNdx = mTaskHistory.size() - 1; taskNdx >= 0; --taskNdx) { + ArrayList<ActivityRecord> activities = mTaskHistory.get(taskNdx).mActivities; + for (int activityNdx = activities.size() - 1; activityNdx >= 0; --activityNdx) { + ActivityRecord r = activities.get(activityNdx); + if (r.resultTo == self && r.requestCode == requestCode) { + if ((r.resultWho == null && resultWho == null) || + (r.resultWho != null && r.resultWho.equals(resultWho))) { + finishActivityLocked(r, Activity.RESULT_CANCELED, null, "request-sub", + false); + } } } } mService.updateOomAdjLocked(); } - final boolean finishActivityAffinityLocked(IBinder token) { - int index = indexOfTokenLocked(token); - if (DEBUG_RESULTS) Slog.v( - TAG, "Finishing activity affinity @" + index + ": token=" + token); - if (index < 0) { - return false; + final void finishTopRunningActivityLocked(ProcessRecord app) { + ActivityRecord r = topRunningActivityLocked(null); + if (r != null && r.app == app) { + // If the top running activity is from this crashing + // process, then terminate it to avoid getting in a loop. + Slog.w(TAG, " Force finishing activity " + + r.intent.getComponent().flattenToShortString()); + int taskNdx = mTaskHistory.indexOf(r.task); + int activityNdx = r.task.mActivities.indexOf(r); + finishActivityLocked(r, Activity.RESULT_CANCELED, null, "crashed", false); + // Also terminate any activities below it that aren't yet + // stopped, to avoid a situation where one will get + // re-start our crashing activity once it gets resumed again. + --activityNdx; + if (activityNdx < 0) { + do { + --taskNdx; + if (taskNdx < 0) { + break; + } + activityNdx = mTaskHistory.get(taskNdx).mActivities.size() - 1; + } while (activityNdx < 0); + } + if (activityNdx >= 0) { + r = mTaskHistory.get(taskNdx).mActivities.get(activityNdx); + if (r.state == ActivityState.RESUMED + || r.state == ActivityState.PAUSING + || r.state == ActivityState.PAUSED) { + if (!r.isHomeActivity || mService.mHomeProcess != r.app) { + Slog.w(TAG, " Force finishing activity " + + r.intent.getComponent().flattenToShortString()); + finishActivityLocked(r, Activity.RESULT_CANCELED, null, "crashed", false); + } + } + } } - ActivityRecord r = mHistory.get(index); + } - while (index >= 0) { - ActivityRecord cur = mHistory.get(index); - if (cur.task != r.task) { - break; - } - if (cur.taskAffinity == null && r.taskAffinity != null) { + final boolean finishActivityAffinityLocked(ActivityRecord r) { + ArrayList<ActivityRecord> activities = r.task.mActivities; + for (int index = activities.indexOf(r); index >= 0; --index) { + ActivityRecord cur = activities.get(index); + if (!Objects.equal(cur.taskAffinity, r.taskAffinity)) { break; } - if (cur.taskAffinity != null && !cur.taskAffinity.equals(r.taskAffinity)) { - break; - } - finishActivityLocked(cur, index, Activity.RESULT_CANCELED, null, - "request-affinity", true); - index--; + finishActivityLocked(cur, Activity.RESULT_CANCELED, null, "request-affinity", + true); } return true; } @@ -3755,17 +3155,17 @@ final class ActivityStack { * @return Returns true if this activity has been removed from the history * list, or false if it is still in the list and will be removed later. */ - final boolean finishActivityLocked(ActivityRecord r, int index, - int resultCode, Intent resultData, String reason, boolean oomAdj) { - return finishActivityLocked(r, index, resultCode, resultData, reason, false, oomAdj); + final boolean finishActivityLocked(ActivityRecord r, int resultCode, + Intent resultData, String reason, boolean oomAdj) { + return finishActivityLocked(r, resultCode, resultData, reason, false, oomAdj); } /** * @return Returns true if this activity has been removed from the history * list, or false if it is still in the list and will be removed later. */ - final boolean finishActivityLocked(ActivityRecord r, int index, int resultCode, - Intent resultData, String reason, boolean immediate, boolean oomAdj) { + final boolean finishActivityLocked(ActivityRecord r, int resultCode, Intent resultData, + String reason, boolean immediate, boolean oomAdj) { if (r.finishing) { Slog.w(TAG, "Duplicate finish request for " + r); return false; @@ -3775,50 +3175,48 @@ final class ActivityStack { EventLog.writeEvent(EventLogTags.AM_FINISH_ACTIVITY, r.userId, System.identityHashCode(r), r.task.taskId, r.shortComponentName, reason); - if (index < (mHistory.size()-1)) { - ActivityRecord next = mHistory.get(index+1); - if (next.task == r.task) { - if (r.frontOfTask) { - // The next activity is now the front of the task. - next.frontOfTask = true; - } - if ((r.intent.getFlags()&Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET) != 0) { - // If the caller asked that this activity (and all above it) - // be cleared when the task is reset, don't lose that information, - // but propagate it up to the next activity. - next.intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); - } + final ArrayList<ActivityRecord> activities = r.task.mActivities; + final int index = activities.indexOf(r); + if (index < (activities.size() - 1)) { + ActivityRecord next = activities.get(index+1); + if (r.frontOfTask) { + // The next activity is now the front of the task. + next.frontOfTask = true; + } + if ((r.intent.getFlags()&Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET) != 0) { + // If the caller asked that this activity (and all above it) + // be cleared when the task is reset, don't lose that information, + // but propagate it up to the next activity. + next.intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); } } r.pauseKeyDispatchingLocked(); - if (mMainStack) { + if (mStackSupervisor.isMainStack(this)) { if (mService.mFocusedActivity == r) { mService.setFocusedActivityLocked(topRunningActivityLocked(null)); } } finishActivityResultsLocked(r, resultCode, resultData); - + if (mService.mPendingThumbnails.size() > 0) { // There are clients waiting to receive thumbnails so, in case // this is an activity that someone is waiting for, add it // to the pending list so we can correctly update the clients. - mService.mCancelledThumbnails.add(r); + mCancelledThumbnails.add(r); } if (immediate) { - return finishCurrentActivityLocked(r, index, - FINISH_IMMEDIATELY, oomAdj) == null; + return finishCurrentActivityLocked(r, FINISH_IMMEDIATELY, oomAdj) == null; } else if (mResumedActivity == r) { - boolean endTask = index <= 0 - || (mHistory.get(index-1)).task != r.task; + boolean endTask = index <= 0; if (DEBUG_TRANSITION) Slog.v(TAG, "Prepare close transition: finishing " + r); mService.mWindowManager.prepareAppTransition(endTask ? AppTransition.TRANSIT_TASK_CLOSE : AppTransition.TRANSIT_ACTIVITY_CLOSE, false); - + // Tell window manager to prepare for this one to be removed. mService.mWindowManager.setAppVisibility(r.appToken, false); @@ -3832,8 +3230,7 @@ final class ActivityStack { // If the activity is PAUSING, we will complete the finish once // it is done pausing; else we can just directly finish it here. if (DEBUG_PAUSE) Slog.v(TAG, "Finish not pausing: " + r); - return finishCurrentActivityLocked(r, index, - FINISH_AFTER_PAUSE, oomAdj) == null; + return finishCurrentActivityLocked(r, FINISH_AFTER_PAUSE, oomAdj) == null; } else { if (DEBUG_PAUSE) Slog.v(TAG, "Finish waiting for pause of: " + r); } @@ -3847,16 +3244,6 @@ final class ActivityStack { private final ActivityRecord finishCurrentActivityLocked(ActivityRecord r, int mode, boolean oomAdj) { - final int index = indexOfActivityLocked(r); - if (index < 0) { - return null; - } - - return finishCurrentActivityLocked(r, index, mode, oomAdj); - } - - private final ActivityRecord finishCurrentActivityLocked(ActivityRecord r, - int index, int mode, boolean oomAdj) { // First things first: if this activity is currently visible, // and the resumed activity is not yet visible, then hold off on // finishing until the resumed one becomes visible. @@ -3903,16 +3290,95 @@ final class ActivityStack { resumeTopActivityLocked(null); } return activityRemoved ? null : r; - } else { - // Need to go through the full pause cycle to get this - // activity into the stopped state and then finish it. - if (localLOGV) Slog.v(TAG, "Enqueueing pending finish: " + r); - mFinishingActivities.add(r); - resumeTopActivityLocked(null); } + + // Need to go through the full pause cycle to get this + // activity into the stopped state and then finish it. + if (localLOGV) Slog.v(TAG, "Enqueueing pending finish: " + r); + mFinishingActivities.add(r); + resumeTopActivityLocked(null); return r; } + final boolean navigateUpToLocked(IBinder token, Intent destIntent, int resultCode, + Intent resultData) { + final ActivityRecord srec = ActivityRecord.forToken(token); + final TaskRecord task = srec.task; + final ArrayList<ActivityRecord> activities = task.mActivities; + final int start = activities.indexOf(srec); + if (!mTaskHistory.contains(task) || (start < 0)) { + return false; + } + int finishTo = start - 1; + ActivityRecord parent = finishTo < 0 ? null : activities.get(finishTo); + boolean foundParentInTask = false; + final ComponentName dest = destIntent.getComponent(); + if (start > 0 && dest != null) { + for (int i = finishTo; i >= 0; i--) { + ActivityRecord r = activities.get(i); + if (r.info.packageName.equals(dest.getPackageName()) && + r.info.name.equals(dest.getClassName())) { + finishTo = i; + parent = r; + foundParentInTask = true; + break; + } + } + } + + IActivityController controller = mService.mController; + if (controller != null) { + ActivityRecord next = topRunningActivityLocked(srec.appToken, 0); + if (next != null) { + // ask watcher if this is allowed + boolean resumeOK = true; + try { + resumeOK = controller.activityResuming(next.packageName); + } catch (RemoteException e) { + mService.mController = null; + } + + if (!resumeOK) { + return false; + } + } + } + final long origId = Binder.clearCallingIdentity(); + for (int i = start; i > finishTo; i--) { + ActivityRecord r = activities.get(i); + requestFinishActivityLocked(r.appToken, resultCode, resultData, "navigate-up", true); + // Only return the supplied result for the first activity finished + resultCode = Activity.RESULT_CANCELED; + resultData = null; + } + + if (parent != null && foundParentInTask) { + final int parentLaunchMode = parent.info.launchMode; + final int destIntentFlags = destIntent.getFlags(); + if (parentLaunchMode == ActivityInfo.LAUNCH_SINGLE_INSTANCE || + parentLaunchMode == ActivityInfo.LAUNCH_SINGLE_TASK || + parentLaunchMode == ActivityInfo.LAUNCH_SINGLE_TOP || + (destIntentFlags & Intent.FLAG_ACTIVITY_CLEAR_TOP) != 0) { + parent.deliverNewIntentLocked(srec.info.applicationInfo.uid, destIntent); + } else { + try { + ActivityInfo aInfo = AppGlobals.getPackageManager().getActivityInfo( + destIntent.getComponent(), 0, srec.userId); + int res = startActivityLocked(srec.app.thread, destIntent, + null, aInfo, parent.appToken, null, + 0, -1, parent.launchedFromUid, parent.launchedFromPackage, + 0, null, true, null); + foundParentInTask = res == ActivityManager.START_SUCCESS; + } catch (RemoteException e) { + foundParentInTask = false; + } + requestFinishActivityLocked(parent.appToken, resultCode, + resultData, "navigate-up", true); + } + } + Binder.restoreCallingIdentity(origId); + return foundParentInTask; + } /** * Perform the common clean-up of an activity record. This is called both * as part of destroyActivityLocked() (when destroying the client-side @@ -3944,7 +3410,7 @@ final class ActivityStack { // down to the max limit while they are still waiting to finish. mFinishingActivities.remove(r); mWaitingVisibleActivities.remove(r); - + // Remove any pending results. if (r.finishing && r.pendingResults != null) { for (WeakReference<PendingIntentRecord> apr : r.pendingResults) { @@ -3957,14 +3423,14 @@ final class ActivityStack { } if (cleanServices) { - cleanUpActivityServicesLocked(r); + cleanUpActivityServicesLocked(r); } if (mService.mPendingThumbnails.size() > 0) { // There are clients waiting to receive thumbnails so, in case // this is an activity that someone is waiting for, add it // to the pending list so we can correctly update the clients. - mService.mCancelledThumbnails.add(r); + mCancelledThumbnails.add(r); } // Get rid of any pending idle timeouts. @@ -3987,11 +3453,12 @@ final class ActivityStack { here.fillInStackTrace(); Slog.i(TAG, "Removing activity " + r + " from stack"); } - mHistory.remove(r); + if (r.task != null) { + removeActivity(r); + } r.takeFromHistory(); removeTimeoutsForActivityLocked(r); - if (DEBUG_STATES) Slog.v(TAG, "Moving to DESTROYED: " + r - + " (removed from history)"); + if (DEBUG_STATES) Slog.v(TAG, "Moving to DESTROYED: " + r + " (removed from history)"); r.state = ActivityState.DESTROYED; if (DEBUG_APP) Slog.v(TAG, "Clearing app during remove for activity " + r); r.app = null; @@ -4027,31 +3494,34 @@ final class ActivityStack { final void destroyActivitiesLocked(ProcessRecord owner, boolean oomAdj, String reason) { boolean lastIsOpaque = false; boolean activityRemoved = 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 != mResumedActivity && r != mPausingActivity - && r.haveState && !r.visible && r.stopped - && r.state != ActivityState.DESTROYING - && r.state != ActivityState.DESTROYED) { - if (DEBUG_SWITCH) Slog.v(TAG, "Destroying " + r + " in state " + r.state - + " resumed=" + mResumedActivity - + " pausing=" + mPausingActivity); - if (destroyActivityLocked(r, true, oomAdj, reason)) { - activityRemoved = true; + for (int taskNdx = mTaskHistory.size() - 1; taskNdx >= 0; --taskNdx) { + final ArrayList<ActivityRecord> activities = mTaskHistory.get(taskNdx).mActivities; + for (int activityNdx = activities.size() - 1; activityNdx >= 0; --activityNdx) { + final ActivityRecord r = activities.get(activityNdx); + 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 != mResumedActivity && r != mPausingActivity + && r.haveState && !r.visible && r.stopped + && r.state != ActivityState.DESTROYING + && r.state != ActivityState.DESTROYED) { + if (DEBUG_SWITCH) Slog.v(TAG, "Destroying " + r + " in state " + r.state + + " resumed=" + mResumedActivity + + " pausing=" + mPausingActivity); + if (destroyActivityLocked(r, true, oomAdj, reason)) { + activityRemoved = true; + } } } } @@ -4083,10 +3553,7 @@ final class ActivityStack { if (hadApp) { if (removeFromApp) { - int idx = r.app.activities.indexOf(r); - if (idx >= 0) { - r.app.activities.remove(idx); - } + r.app.activities.remove(r); if (mService.mHeavyWeightProcess == r.app && r.app.activities.size() <= 0) { mService.mHeavyWeightProcess = null; mService.mHandler.sendEmptyMessage( @@ -4162,38 +3629,35 @@ final class ActivityStack { return removedFromHistory; } - final void activityDestroyed(IBinder token) { - synchronized (mService) { - final long origId = Binder.clearCallingIdentity(); - try { - ActivityRecord r = ActivityRecord.forToken(token); - if (r != null) { - mHandler.removeMessages(DESTROY_TIMEOUT_MSG, r); - } + final void activityDestroyedLocked(IBinder token) { + final long origId = Binder.clearCallingIdentity(); + try { + ActivityRecord r = ActivityRecord.forToken(token); + if (r != null) { + mHandler.removeMessages(DESTROY_TIMEOUT_MSG, r); + } - int index = indexOfActivityLocked(r); - if (index >= 0) { - if (r.state == ActivityState.DESTROYING) { - cleanUpActivityLocked(r, true, false); - removeActivityFromHistoryLocked(r); - } + if (isInStackLocked(token) != null) { + if (r.state == ActivityState.DESTROYING) { + cleanUpActivityLocked(r, true, false); + removeActivityFromHistoryLocked(r); } - resumeTopActivityLocked(null); - } finally { - Binder.restoreCallingIdentity(origId); } + resumeTopActivityLocked(null); + } finally { + Binder.restoreCallingIdentity(origId); } } - private void removeHistoryRecordsForAppLocked(ArrayList list, ProcessRecord app, - String listName) { + private void removeHistoryRecordsForAppLocked(ArrayList<ActivityRecord> list, + ProcessRecord app, String listName) { int i = list.size(); if (DEBUG_CLEANUP) Slog.v( TAG, "Removing app " + app + " from list " + listName + " with " + i + " entries"); while (i > 0) { i--; - ActivityRecord r = (ActivityRecord)list.get(i); + ActivityRecord r = list.get(i); if (DEBUG_CLEANUP) Slog.v(TAG, "Record #" + i + " " + r); if (r.app == app) { if (DEBUG_CLEANUP) Slog.v(TAG, "---> REMOVING this entry!"); @@ -4214,90 +3678,93 @@ final class ActivityStack { boolean hasVisibleActivities = false; // Clean out the history list. - int i = mHistory.size(); + int i = numActivities(); if (DEBUG_CLEANUP) Slog.v( TAG, "Removing app " + app + " from history with " + i + " entries"); - while (i > 0) { - i--; - ActivityRecord r = (ActivityRecord)mHistory.get(i); - if (DEBUG_CLEANUP) Slog.v( - TAG, "Record #" + i + " " + r + ": app=" + r.app); - if (r.app == app) { - boolean remove; - if ((!r.haveState && !r.stateNotNeeded) || r.finishing) { - // Don't currently have state for the activity, or - // it is finishing -- always remove it. - remove = true; - } else if (r.launchCount > 2 && - r.lastLaunchTime > (SystemClock.uptimeMillis()-60000)) { - // We have launched this activity too many times since it was - // able to run, so give up and remove it. - remove = true; - } else { - // The process may be gone, but the activity lives on! - remove = false; - } - if (remove) { - if (ActivityStack.DEBUG_ADD_REMOVE || DEBUG_CLEANUP) { - RuntimeException here = new RuntimeException("here"); - here.fillInStackTrace(); - Slog.i(TAG, "Removing activity " + r + " from stack at " + i - + ": haveState=" + r.haveState - + " stateNotNeeded=" + r.stateNotNeeded - + " finishing=" + r.finishing - + " state=" + r.state, here); - } - if (!r.finishing) { - Slog.w(TAG, "Force removing " + r + ": app died, no saved state"); - EventLog.writeEvent(EventLogTags.AM_FINISH_ACTIVITY, - r.userId, System.identityHashCode(r), - r.task.taskId, r.shortComponentName, - "proc died without state saved"); + for (int taskNdx = mTaskHistory.size() - 1; taskNdx >= 0; --taskNdx) { + final ArrayList<ActivityRecord> activities = mTaskHistory.get(taskNdx).mActivities; + for (int activityNdx = activities.size() - 1; activityNdx >= 0; --activityNdx) { + final ActivityRecord r = activities.get(activityNdx); + --i; + if (DEBUG_CLEANUP) Slog.v( + TAG, "Record #" + i + " " + r + ": app=" + r.app); + if (r.app == app) { + boolean remove; + if ((!r.haveState && !r.stateNotNeeded) || r.finishing) { + // Don't currently have state for the activity, or + // it is finishing -- always remove it. + remove = true; + } else if (r.launchCount > 2 && + r.lastLaunchTime > (SystemClock.uptimeMillis()-60000)) { + // We have launched this activity too many times since it was + // able to run, so give up and remove it. + remove = true; + } else { + // The process may be gone, but the activity lives on! + remove = false; } - removeActivityFromHistoryLocked(r); + if (remove) { + if (ActivityStack.DEBUG_ADD_REMOVE || DEBUG_CLEANUP) { + RuntimeException here = new RuntimeException("here"); + here.fillInStackTrace(); + Slog.i(TAG, "Removing activity " + r + " from stack at " + i + + ": haveState=" + r.haveState + + " stateNotNeeded=" + r.stateNotNeeded + + " finishing=" + r.finishing + + " state=" + r.state, here); + } + if (!r.finishing) { + Slog.w(TAG, "Force removing " + r + ": app died, no saved state"); + EventLog.writeEvent(EventLogTags.AM_FINISH_ACTIVITY, + r.userId, System.identityHashCode(r), + r.task.taskId, r.shortComponentName, + "proc died without state saved"); + } + removeActivityFromHistoryLocked(r); - } else { - // We have the current state for this activity, so - // it can be restarted later when needed. - if (localLOGV) Slog.v( - TAG, "Keeping entry, setting app to null"); - if (r.visible) { - hasVisibleActivities = true; - } - if (DEBUG_APP) Slog.v(TAG, "Clearing app during removeHistory for activity " - + r); - r.app = null; - r.nowVisible = false; - if (!r.haveState) { - if (ActivityStack.DEBUG_SAVED_STATE) Slog.i(TAG, - "App died, clearing saved state of " + r); - r.icicle = null; + } else { + // We have the current state for this activity, so + // it can be restarted later when needed. + if (localLOGV) Slog.v( + TAG, "Keeping entry, setting app to null"); + if (r.visible) { + hasVisibleActivities = true; + } + if (DEBUG_APP) Slog.v(TAG, "Clearing app during removeHistory for activity " + + r); + r.app = null; + r.nowVisible = false; + if (!r.haveState) { + if (ActivityStack.DEBUG_SAVED_STATE) Slog.i(TAG, + "App died, clearing saved state of " + r); + r.icicle = null; + } } - } - r.stack.cleanUpActivityLocked(r, true, true); + cleanUpActivityLocked(r, true, true); + } } } return hasVisibleActivities; } - + /** * Move the current home activity's task (if one exists) to the front * of the stack. */ final void moveHomeToFrontLocked() { - TaskRecord homeTask = null; - for (int i=mHistory.size()-1; i>=0; i--) { - ActivityRecord hr = mHistory.get(i); - if (hr.isHomeActivity) { - homeTask = hr.task; - break; + for (int taskNdx = mTaskHistory.size() - 1; taskNdx >= 0; --taskNdx) { + final TaskRecord task = mTaskHistory.get(taskNdx); + final ArrayList<ActivityRecord> activities = task.mActivities; + for (int activityNdx = activities.size() - 1; activityNdx >= 0; --activityNdx) { + final ActivityRecord r = activities.get(activityNdx); + if (r.isHomeActivity) { + moveTaskToFrontLocked(task, null, null); + return; + } } } - if (homeTask != null) { - moveTaskToFrontLocked(homeTask, null, null); - } } final void updateTransitLocked(int transit, Bundle options) { @@ -4312,13 +3779,29 @@ final class ActivityStack { mService.mWindowManager.prepareAppTransition(transit, false); } + final boolean findTaskToMoveToFrontLocked(int taskId, int flags, Bundle options) { + final TaskRecord task = taskForIdLocked(taskId); + if (task != null) { + if ((flags & ActivityManager.MOVE_TASK_NO_USER_ACTION) == 0) { + mUserLeaving = true; + } + if ((flags & ActivityManager.MOVE_TASK_WITH_HOME) != 0) { + // Caller wants the home activity moved with it. To accomplish this, + // we'll just move the home task to the top first. + moveHomeToFrontLocked(); + } + moveTaskToFrontLocked(task, null, options); + return true; + } + return false; + } + final void moveTaskToFrontLocked(TaskRecord tr, ActivityRecord reason, Bundle options) { if (DEBUG_SWITCH) Slog.v(TAG, "moveTaskToFront: " + tr); - final int task = tr.taskId; - int top = mHistory.size()-1; - - if (top < 0 || (mHistory.get(top)).task.taskId == task) { + final int numTasks = mTaskHistory.size(); + final int index = mTaskHistory.indexOf(tr); + if (numTasks == 0 || index < 0 || index == numTasks - 1) { // nothing to do! if (reason != null && (reason.intent.getFlags()&Intent.FLAG_ACTIVITY_NO_ANIMATION) != 0) { @@ -4329,40 +3812,15 @@ final class ActivityStack { return; } - ArrayList<IBinder> moved = new ArrayList<IBinder>(); - - // Applying the affinities may have removed entries from the history, - // so get the size again. - top = mHistory.size()-1; - int pos = top; - // Shift all activities with this task up to the top // of the stack, keeping them in the same internal order. - while (pos >= 0) { - ActivityRecord r = mHistory.get(pos); - if (localLOGV) Slog.v( - TAG, "At " + pos + " ckp " + r.task + ": " + r); - if (r.task.taskId == task) { - if (localLOGV) Slog.v(TAG, "Removing and adding at " + top); - if (DEBUG_ADD_REMOVE) { - RuntimeException here = new RuntimeException("here"); - here.fillInStackTrace(); - Slog.i(TAG, "Removing and adding activity " + r + " to stack at " + top, here); - } - mHistory.remove(pos); - mHistory.add(top, r); - moved.add(0, r.appToken); - top--; - } - pos--; - } + mTaskHistory.remove(tr); + mTaskHistory.add(tr); - if (DEBUG_TRANSITION) Slog.v(TAG, - "Prepare to front transition: task=" + tr); + if (DEBUG_TRANSITION) Slog.v(TAG, "Prepare to front transition: task=" + tr); if (reason != null && (reason.intent.getFlags()&Intent.FLAG_ACTIVITY_NO_ANIMATION) != 0) { - mService.mWindowManager.prepareAppTransition( - AppTransition.TRANSIT_NONE, false); + mService.mWindowManager.prepareAppTransition(AppTransition.TRANSIT_NONE, false); ActivityRecord r = topRunningActivityLocked(null); if (r != null) { mNoAnimActivities.add(r); @@ -4371,18 +3829,15 @@ final class ActivityStack { } else { updateTransitLocked(AppTransition.TRANSIT_TASK_TO_FRONT, options); } - - mService.mWindowManager.moveAppTokensToTop(moved); - if (VALIDATE_TOKENS) { - validateAppTokensLocked(); - } - finishTaskMoveLocked(task); - EventLog.writeEvent(EventLogTags.AM_TASK_TO_FRONT, tr.userId, task); - } + mService.mWindowManager.moveTaskToTop(tr.taskId); - private final void finishTaskMoveLocked(int task) { resumeTopActivityLocked(null); + EventLog.writeEvent(EventLogTags.AM_TASK_TO_FRONT, tr.userId, tr.taskId); + + if (VALIDATE_TOKENS) { + validateAppTokensLocked(); + } } /** @@ -4398,11 +3853,11 @@ final class ActivityStack { */ final boolean moveTaskToBackLocked(int task, ActivityRecord reason) { Slog.i(TAG, "moveTaskToBack: " + task); - + // If we have a watcher, preflight the move before committing to it. First check // for *other* available tasks, but if none are available, then try again allowing the // current task to be selected. - if (mMainStack && mService.mController != null) { + if (mStackSupervisor.isMainStack(this) && mService.mController != null) { ActivityRecord next = topRunningActivityLocked(null, task); if (next == null) { next = topRunningActivityLocked(null, 0); @@ -4421,41 +3876,19 @@ final class ActivityStack { } } - ArrayList<IBinder> moved = new ArrayList<IBinder>(); - if (DEBUG_TRANSITION) Slog.v(TAG, "Prepare to back transition: task=" + task); - - final int N = mHistory.size(); - int bottom = 0; - int pos = 0; - // Shift all activities with this task down to the bottom - // of the stack, keeping them in the same internal order. - while (pos < N) { - ActivityRecord r = mHistory.get(pos); - if (localLOGV) Slog.v( - TAG, "At " + pos + " ckp " + r.task + ": " + r); - if (r.task.taskId == task) { - if (localLOGV) Slog.v(TAG, "Removing and adding at " + (N-1)); - if (DEBUG_ADD_REMOVE) { - RuntimeException here = new RuntimeException("here"); - here.fillInStackTrace(); - Slog.i(TAG, "Removing and adding activity " + r + " to stack at " - + bottom, here); - } - mHistory.remove(pos); - mHistory.add(bottom, r); - moved.add(r.appToken); - bottom++; - } - pos++; + final TaskRecord tr = taskForIdLocked(task); + if (tr == null) { + return false; } + mTaskHistory.remove(tr); + mTaskHistory.add(0, tr); if (reason != null && (reason.intent.getFlags()&Intent.FLAG_ACTIVITY_NO_ANIMATION) != 0) { - mService.mWindowManager.prepareAppTransition( - AppTransition.TRANSIT_NONE, false); + mService.mWindowManager.prepareAppTransition(AppTransition.TRANSIT_NONE, false); ActivityRecord r = topRunningActivityLocked(null); if (r != null) { mNoAnimActivities.add(r); @@ -4464,20 +3897,21 @@ final class ActivityStack { mService.mWindowManager.prepareAppTransition( AppTransition.TRANSIT_TASK_TO_BACK, false); } - mService.mWindowManager.moveAppTokensToBottom(moved); + mService.mWindowManager.moveTaskToBottom(task); + if (VALIDATE_TOKENS) { validateAppTokensLocked(); } - finishTaskMoveLocked(task); + resumeTopActivityLocked(null); return true; } public ActivityManager.TaskThumbnails getTaskThumbnailsLocked(TaskRecord tr) { - TaskAccessInfo info = getTaskAccessInfoLocked(tr.taskId, true); + TaskAccessInfo info = getTaskAccessInfoLocked(tr, true); ActivityRecord resumed = mResumedActivity; if (resumed != null && resumed.thumbHolder == tr) { - info.mainThumbnail = resumed.stack.screenshotActivities(resumed); + info.mainThumbnail = screenshotActivities(resumed); } if (info.mainThumbnail == null) { info.mainThumbnail = tr.lastThumbnail; @@ -4490,21 +3924,24 @@ final class ActivityStack { if (resumed != null && resumed.task == tr) { // This task is the current resumed task, we just need to take // a screenshot of it and return that. - return resumed.stack.screenshotActivities(resumed); + return screenshotActivities(resumed); } // Return the information about the task, to figure out the top // thumbnail to return. - TaskAccessInfo info = getTaskAccessInfoLocked(tr.taskId, true); + TaskAccessInfo info = getTaskAccessInfoLocked(tr, true); if (info.numSubThumbbails <= 0) { return info.mainThumbnail != null ? info.mainThumbnail : tr.lastThumbnail; - } else { - return info.subtasks.get(info.numSubThumbbails-1).holder.lastThumbnail; } + return info.subtasks.get(info.numSubThumbbails-1).holder.lastThumbnail; } public ActivityRecord removeTaskActivitiesLocked(int taskId, int subTaskIndex, boolean taskRequired) { - TaskAccessInfo info = getTaskAccessInfoLocked(taskId, false); + final TaskRecord task = taskForIdLocked(taskId); + if (task == null) { + return null; + } + TaskAccessInfo info = getTaskAccessInfoLocked(task, false); if (info.root == null) { if (taskRequired) { Slog.w(TAG, "removeTaskLocked: unknown taskId " + taskId); @@ -4514,7 +3951,7 @@ final class ActivityStack { if (subTaskIndex < 0) { // Just remove the entire task. - performClearTaskAtIndexLocked(taskId, info.rootIndex); + task.performClearTaskAtIndexLocked(info.rootIndex); return info.root; } @@ -4527,19 +3964,20 @@ final class ActivityStack { // Remove all of this task's activities starting at the sub task. TaskAccessInfo.SubTask subtask = info.subtasks.get(subTaskIndex); - performClearTaskAtIndexLocked(taskId, subtask.index); + task.performClearTaskAtIndexLocked(subtask.index); return subtask.activity; } - public TaskAccessInfo getTaskAccessInfoLocked(int taskId, boolean inclThumbs) { + public TaskAccessInfo getTaskAccessInfoLocked(TaskRecord task, boolean inclThumbs) { final TaskAccessInfo thumbs = new TaskAccessInfo(); // How many different sub-thumbnails? - final int NA = mHistory.size(); + final ArrayList<ActivityRecord> activities = task.mActivities; + final int NA = activities.size(); int j = 0; ThumbnailHolder holder = null; while (j < NA) { - ActivityRecord ar = mHistory.get(j); - if (!ar.finishing && ar.task.taskId == taskId) { + ActivityRecord ar = activities.get(j); + if (!ar.finishing) { thumbs.root = ar; thumbs.rootIndex = j; holder = ar.thumbHolder; @@ -4559,14 +3997,11 @@ final class ActivityStack { ArrayList<TaskAccessInfo.SubTask> subtasks = new ArrayList<TaskAccessInfo.SubTask>(); thumbs.subtasks = subtasks; while (j < NA) { - ActivityRecord ar = mHistory.get(j); + ActivityRecord ar = activities.get(j); j++; if (ar.finishing) { continue; } - if (ar.task.taskId != taskId) { - break; - } if (ar.thumbHolder != holder && holder != null) { thumbs.numSubThumbbails++; holder = ar.thumbHolder; @@ -4579,6 +4014,7 @@ final class ActivityStack { } if (thumbs.numSubThumbbails > 0) { thumbs.retriever = new IThumbnailRetriever.Stub() { + @Override public Bitmap getThumbnail(int index) { if (index < 0 || index >= thumbs.subtasks.size()) { return null; @@ -4586,7 +4022,7 @@ final class ActivityStack { TaskAccessInfo.SubTask sub = thumbs.subtasks.get(index); ActivityRecord resumed = mResumedActivity; if (resumed != null && resumed.thumbHolder == sub.holder) { - return resumed.stack.screenshotActivities(resumed); + return screenshotActivities(resumed); } return sub.holder.lastThumbnail; } @@ -4762,7 +4198,7 @@ final class ActivityStack { if (andResume) { r.results = null; r.newIntents = null; - if (mMainStack) { + if (mStackSupervisor.isMainStack(this)) { mService.reportResumedActivityLocked(r); } r.state = ActivityState.RESUMED; @@ -4773,8 +4209,300 @@ final class ActivityStack { return true; } - - public void dismissKeyguardOnNextActivityLocked() { - mDismissKeyguardOnNextActivity = true; + + boolean willActivityBeVisibleLocked(IBinder token) { + for (int taskNdx = mTaskHistory.size() - 1; taskNdx >= 0; --taskNdx) { + final ArrayList<ActivityRecord> activities = mTaskHistory.get(taskNdx).mActivities; + for (int activityNdx = activities.size() - 1; activityNdx >= 0; --activityNdx) { + final ActivityRecord r = activities.get(activityNdx); + if (r.appToken == token) { + return true; + } + if (r.fullscreen && !r.finishing) { + return false; + } + } + } + return true; + } + + void closeSystemDialogsLocked() { + for (int taskNdx = mTaskHistory.size() - 1; taskNdx >= 0; --taskNdx) { + final ArrayList<ActivityRecord> activities = mTaskHistory.get(taskNdx).mActivities; + for (int activityNdx = activities.size() - 1; activityNdx >= 0; --activityNdx) { + final ActivityRecord r = activities.get(activityNdx); + if ((r.info.flags&ActivityInfo.FLAG_FINISH_ON_CLOSE_SYSTEM_DIALOGS) != 0) { + finishActivityLocked(r, Activity.RESULT_CANCELED, null, "close-sys", true); + } + } + } + } + + boolean forceStopPackageLocked(String name, boolean doit, boolean evenPersistent, int userId) { + boolean didSomething = false; + TaskRecord lastTask = null; + for (int taskNdx = mTaskHistory.size() - 1; taskNdx >= 0; --taskNdx) { + final ArrayList<ActivityRecord> activities = mTaskHistory.get(taskNdx).mActivities; + int numActivities = activities.size(); + for (int activityNdx = 0; activityNdx < numActivities; ++activityNdx) { + ActivityRecord r = activities.get(activityNdx); + final boolean samePackage = r.packageName.equals(name) + || (name == null && r.userId == userId); + if ((userId == UserHandle.USER_ALL || r.userId == userId) + && (samePackage || r.task == lastTask) + && (r.app == null || evenPersistent || !r.app.persistent)) { + if (!doit) { + if (r.finishing) { + // If this activity is just finishing, then it is not + // interesting as far as something to stop. + continue; + } + return true; + } + didSomething = true; + Slog.i(TAG, " Force finishing activity " + r); + if (samePackage) { + if (r.app != null) { + r.app.removed = true; + } + r.app = null; + } + lastTask = r.task; + finishActivityLocked(r, Activity.RESULT_CANCELED, null, "force-stop", true); + } + } + } + return didSomething; + } + + ActivityRecord getTasksLocked(int maxNum, IThumbnailReceiver receiver, + PendingThumbnailsRecord pending, List<RunningTaskInfo> list) { + ActivityRecord topRecord = null; + for (int taskNdx = mTaskHistory.size() - 1; maxNum > 0 && taskNdx >= 0; + --maxNum, --taskNdx) { + final TaskRecord task = mTaskHistory.get(taskNdx); + ActivityRecord r = null; + ActivityRecord top = null; + int numActivities = 0; + int numRunning = 0; + final ArrayList<ActivityRecord> activities = task.mActivities; + for (int activityNdx = activities.size() - 1; activityNdx >= 0; --activityNdx) { + r = activities.get(activityNdx); + + // Initialize state for next task if needed. + if (top == null || (top.state == ActivityState.INITIALIZING)) { + top = r; + numActivities = numRunning = 0; + } + + // Add 'r' into the current task. + numActivities++; + if (r.app != null && r.app.thread != null) { + numRunning++; + } + + if (localLOGV) Slog.v( + TAG, r.intent.getComponent().flattenToShortString() + + ": task=" + r.task); + } + + RunningTaskInfo ci = new RunningTaskInfo(); + ci.id = task.taskId; + ci.baseActivity = r.intent.getComponent(); + ci.topActivity = top.intent.getComponent(); + if (top.thumbHolder != null) { + ci.description = top.thumbHolder.lastDescription; + } + ci.numActivities = numActivities; + ci.numRunning = numRunning; + //System.out.println( + // "#" + maxNum + ": " + " descr=" + ci.description); + if (receiver != null) { + if (localLOGV) Slog.v( + TAG, "State=" + top.state + "Idle=" + top.idle + + " app=" + top.app + + " thr=" + (top.app != null ? top.app.thread : null)); + if (top.state == ActivityState.RESUMED || top.state == ActivityState.PAUSING) { + if (top.idle && top.app != null && top.app.thread != null) { + topRecord = top; + } else { + top.thumbnailNeeded = true; + } + } + pending.pendingRecords.add(top); + } + list.add(ci); + } + return topRecord; + } + + public void unhandledBackLocked() { + final int top = mTaskHistory.size() - 1; + if (DEBUG_SWITCH) Slog.d( + TAG, "Performing unhandledBack(): top activity at " + top); + if (top >= 0) { + final ArrayList<ActivityRecord> activities = mTaskHistory.get(top).mActivities; + int activityTop = activities.size() - 1; + if (activityTop > 0) { + finishActivityLocked(activities.get(activityTop), Activity.RESULT_CANCELED, null, + "unhandled-back", true); + } + } + } + + void handleAppDiedLocked(ProcessRecord app, boolean restarting) { + if (mPausingActivity != null && mPausingActivity.app == app) { + if (DEBUG_PAUSE || DEBUG_CLEANUP) Slog.v(TAG, + "App died while pausing: " + mPausingActivity); + mPausingActivity = null; + } + if (mLastPausedActivity != null && mLastPausedActivity.app == app) { + mLastPausedActivity = null; + } + + // Remove this application's activities from active lists. + boolean hasVisibleActivities = removeHistoryRecordsForAppLocked(app); + + if (!restarting) { + if (!resumeTopActivityLocked(null)) { + // If there was nothing to resume, and we are not already + // restarting this process, but there is a visible activity that + // is hosted by the process... then make sure all visible + // activities are running, taking care of restarting this + // process. + if (hasVisibleActivities) { + ensureActivitiesVisibleLocked(null, 0); + } + } + } + } + + void handleAppCrashLocked(ProcessRecord app) { + for (int taskNdx = mTaskHistory.size() - 1; taskNdx >= 0; --taskNdx) { + final ArrayList<ActivityRecord> activities = mTaskHistory.get(taskNdx).mActivities; + for (int activityNdx = activities.size() - 1; activityNdx >= 0; --activityNdx) { + final ActivityRecord r = activities.get(activityNdx); + if (r.app == app) { + Slog.w(TAG, " Force finishing activity " + + r.intent.getComponent().flattenToShortString()); + finishActivityLocked(r, Activity.RESULT_CANCELED, null, "crashed", false); + } + } + } + } + + void dumpActivitiesLocked(FileDescriptor fd, PrintWriter pw, boolean dumpAll, + boolean dumpClient, String dumpPackage) { + for (int taskNdx = mTaskHistory.size() - 1; taskNdx >= 0; --taskNdx) { + final TaskRecord task = mTaskHistory.get(taskNdx); + pw.print(" Task "); pw.print(taskNdx); pw.print(": id #"); pw.println(task.taskId); + ActivityStackSupervisor.dumpHistoryList(fd, pw, mTaskHistory.get(taskNdx).mActivities, + " ", "Hist", true, !dumpAll, dumpClient, dumpPackage); + } + } + + ArrayList<ActivityRecord> getDumpActivitiesLocked(String name) { + ArrayList<ActivityRecord> activities = new ArrayList<ActivityRecord>(); + + if ("all".equals(name)) { + for (int taskNdx = mTaskHistory.size() - 1; taskNdx >= 0; --taskNdx) { + activities.addAll(mTaskHistory.get(taskNdx).mActivities); + } + } else if ("top".equals(name)) { + final int top = mTaskHistory.size() - 1; + if (top >= 0) { + final ArrayList<ActivityRecord> list = mTaskHistory.get(top).mActivities; + int listTop = list.size() - 1; + if (listTop >= 0) { + activities.add(list.get(listTop)); + } + } + } else { + ItemMatcher matcher = new ItemMatcher(); + matcher.build(name); + + for (int taskNdx = mTaskHistory.size() - 1; taskNdx >= 0; --taskNdx) { + for (ActivityRecord r1 : mTaskHistory.get(taskNdx).mActivities) { + if (matcher.match(r1, r1.intent.getComponent())) { + activities.add(r1); + } + } + } + } + + return activities; + } + + ActivityRecord restartPackage(String packageName) { + ActivityRecord starting = topRunningActivityLocked(null); + + // All activities that came from the package must be + // restarted as if there was a config change. + for (int taskNdx = mTaskHistory.size() - 1; taskNdx >= 0; --taskNdx) { + final ArrayList<ActivityRecord> activities = mTaskHistory.get(taskNdx).mActivities; + for (int activityNdx = activities.size() - 1; activityNdx >= 0; --activityNdx) { + final ActivityRecord a = activities.get(activityNdx); + if (a.info.packageName.equals(packageName)) { + a.forceNewConfig = true; + if (starting != null && a == starting && a.visible) { + a.startFreezingScreenLocked(starting.app, + ActivityInfo.CONFIG_SCREEN_LAYOUT); + } + } + } + } + + return starting; + } + + private void removeActivity(ActivityRecord r) { + final TaskRecord task = r.task; + // TODO: use ActivityManagerService.removeTask to do this. + if (task.removeActivity(r)) { + if (DEBUG_ADD_REMOVE) Slog.i(TAG, "removeActivity: Removing from history, task=" + + task); + mTaskHistory.remove(task); + } + } + + private void setTask(ActivityRecord r, TaskRecord newTask, ThumbnailHolder newThumbHolder, + boolean isRoot) { + if (r.task != null) { + removeActivity(r); + } + r.setTask(newTask, newThumbHolder, isRoot); + } + + private TaskRecord createTaskRecord(int taskId, ActivityInfo info, Intent intent, + boolean toTop) { + TaskRecord task = new TaskRecord(taskId, info, intent, this); + if (toTop) { + mTaskHistory.add(task); + } else { + mTaskHistory.add(0, task); + } + return task; + } + + ArrayList<TaskRecord> getAllTasks() { + return new ArrayList<TaskRecord>(mTaskHistory); + } + + void moveTask(int taskId, boolean toTop) { + final TaskRecord task = mStackSupervisor.anyTaskForIdLocked(taskId); + if (task == null) { + return; + } + task.stack.mTaskHistory.remove(task); + task.stack = this; + if (toTop) { + mTaskHistory.add(task); + } else { + mTaskHistory.add(0, task); + } + } + + public int getStackId() { + return mStackId; } } diff --git a/services/java/com/android/server/am/ActivityStackSupervisor.java b/services/java/com/android/server/am/ActivityStackSupervisor.java new file mode 100644 index 0000000..f2811e7 --- /dev/null +++ b/services/java/com/android/server/am/ActivityStackSupervisor.java @@ -0,0 +1,1025 @@ +/* + * Copyright (C) 2013 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 com.android.server.am; + +import static com.android.server.am.ActivityManagerService.localLOGV; +import static com.android.server.am.ActivityManagerService.DEBUG_CONFIGURATION; +import static com.android.server.am.ActivityManagerService.DEBUG_SWITCH; +import static com.android.server.am.ActivityManagerService.TAG; + +import android.app.Activity; +import android.app.ActivityManager; +import android.app.ActivityOptions; +import android.app.AppGlobals; +import android.app.IApplicationThread; +import android.app.IThumbnailReceiver; +import android.app.PendingIntent; +import android.app.ActivityManager.RunningTaskInfo; +import android.app.IActivityManager.WaitResult; +import android.app.ResultInfo; +import android.content.ComponentName; +import android.content.Context; +import android.content.IIntentSender; +import android.content.Intent; +import android.content.IntentSender; +import android.content.pm.ActivityInfo; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; +import android.content.res.Configuration; +import android.os.Binder; +import android.os.Bundle; +import android.os.IBinder; +import android.os.Looper; +import android.os.Message; +import android.os.ParcelFileDescriptor; +import android.os.RemoteException; +import android.os.SystemClock; +import android.util.EventLog; +import android.util.Slog; + +import com.android.internal.app.HeavyWeightSwitcherActivity; +import com.android.server.am.ActivityStack.ActivityState; + +import java.io.FileDescriptor; +import java.io.IOException; +import java.io.PrintWriter; +import java.util.ArrayList; +import java.util.List; + +public class ActivityStackSupervisor { + static final boolean DEBUG_ADD_REMOVE = false; + static final boolean DEBUG_APP = false; + static final boolean DEBUG_SAVED_STATE = false; + static final boolean DEBUG_STATES = false; + + public static final int HOME_STACK_ID = 0; + + final ActivityManagerService mService; + final Context mContext; + final Looper mLooper; + + /** Dismiss the keyguard after the next activity is displayed? */ + private boolean mDismissKeyguardOnNextActivity = false; + + /** Identifier counter for all ActivityStacks */ + private int mLastStackId = 0; + + /** Task identifier that activities are currently being started in. Incremented each time a + * new task is created. */ + private int mCurTaskId = 0; + + /** The current user */ + private int mCurrentUser; + + /** The stack containing the launcher app */ + private ActivityStack mHomeStack; + + /** The stack currently receiving input or launching the next activity */ + private ActivityStack mMainStack; + + /** All the non-launcher stacks */ + private ArrayList<ActivityStack> mStacks = new ArrayList<ActivityStack>(); + + public ActivityStackSupervisor(ActivityManagerService service, Context context, + Looper looper) { + mService = service; + mContext = context; + mLooper = looper; + } + + void init(int userId) { + mHomeStack = new ActivityStack(mService, mContext, mLooper, HOME_STACK_ID, this, userId); + setMainStack(mHomeStack); + mStacks.add(mHomeStack); + } + + void dismissKeyguard() { + if (mDismissKeyguardOnNextActivity) { + mDismissKeyguardOnNextActivity = false; + mService.mWindowManager.dismissKeyguard(); + } + } + + boolean isHomeStackMain() { + return mHomeStack == mMainStack; + } + + boolean isMainStack(ActivityStack stack) { + return stack == mMainStack; + } + + ActivityStack getMainStack() { + return mMainStack; + } + + void setMainStack(ActivityStack stack) { + mMainStack = stack; + } + + void setDismissKeyguard(boolean dismiss) { + mDismissKeyguardOnNextActivity = dismiss; + } + + TaskRecord anyTaskForIdLocked(int id) { + for (int stackNdx = mStacks.size() - 1; stackNdx >= 0; --stackNdx) { + ActivityStack stack = mStacks.get(stackNdx); + TaskRecord task = stack.taskForIdLocked(id); + if (task != null) { + return task; + } + } + return null; + } + + int getNextTaskId() { + do { + mCurTaskId++; + if (mCurTaskId <= 0) { + mCurTaskId = 1; + } + } while (anyTaskForIdLocked(mCurTaskId) != null); + return mCurTaskId; + } + + boolean attachApplicationLocked(ProcessRecord app, boolean headless) throws Exception { + boolean didSomething = false; + final String processName = app.processName; + for (int stackNdx = mStacks.size() - 1; stackNdx >= 0; --stackNdx) { + final ActivityStack stack = mStacks.get(stackNdx); + ActivityRecord hr = stack.topRunningActivityLocked(null); + if (hr != null) { + if (hr.app == null && app.uid == hr.info.applicationInfo.uid + && processName.equals(hr.processName)) { + try { + if (headless) { + Slog.e(TAG, "Starting activities not supported on headless device: " + + hr); + } else if (realStartActivityLocked(hr, app, true, true)) { + didSomething = true; + } + } catch (Exception e) { + Slog.w(TAG, "Exception in new application when starting activity " + + hr.intent.getComponent().flattenToShortString(), e); + throw e; + } + } else { + stack.ensureActivitiesVisibleLocked(hr, null, processName, 0); + } + } + } + return didSomething; + } + + boolean allResumedActivitiesIdle() { + for (int stackNdx = mStacks.size() - 1; stackNdx >= 0; --stackNdx) { + if (mStacks.get(stackNdx).mResumedActivity == null || + !mStacks.get(stackNdx).mResumedActivity.idle) { + return false; + } + } + return true; + } + + ActivityRecord getTasksLocked(int maxNum, IThumbnailReceiver receiver, + PendingThumbnailsRecord pending, List<RunningTaskInfo> list) { + ActivityRecord r = null; + final int numStacks = mStacks.size(); + for (int stackNdx = mStacks.size() - 1; stackNdx >= 0; --stackNdx) { + final ActivityStack stack = mStacks.get(stackNdx); + final ActivityRecord ar = + stack.getTasksLocked(maxNum - list.size(), receiver, pending, list); + if (isMainStack(stack)) { + r = ar; + } + } + return r; + } + + ActivityInfo resolveActivity(Intent intent, String resolvedType, int startFlags, + String profileFile, ParcelFileDescriptor profileFd, int userId) { + // Collect information about the target of the Intent. + ActivityInfo aInfo; + try { + ResolveInfo rInfo = + AppGlobals.getPackageManager().resolveIntent( + intent, resolvedType, + PackageManager.MATCH_DEFAULT_ONLY + | ActivityManagerService.STOCK_PM_FLAGS, userId); + aInfo = rInfo != null ? rInfo.activityInfo : null; + } catch (RemoteException e) { + aInfo = null; + } + + if (aInfo != null) { + // Store the found target back into the intent, because now that + // we have it we never want to do this again. For example, if the + // user navigates back to this point in the history, we should + // always restart the exact same activity. + intent.setComponent(new ComponentName( + aInfo.applicationInfo.packageName, aInfo.name)); + + // Don't debug things in the system process + if ((startFlags&ActivityManager.START_FLAG_DEBUG) != 0) { + if (!aInfo.processName.equals("system")) { + mService.setDebugApp(aInfo.processName, true, false); + } + } + + if ((startFlags&ActivityManager.START_FLAG_OPENGL_TRACES) != 0) { + if (!aInfo.processName.equals("system")) { + mService.setOpenGlTraceApp(aInfo.applicationInfo, aInfo.processName); + } + } + + if (profileFile != null) { + if (!aInfo.processName.equals("system")) { + mService.setProfileApp(aInfo.applicationInfo, aInfo.processName, + profileFile, profileFd, + (startFlags&ActivityManager.START_FLAG_AUTO_STOP_PROFILER) != 0); + } + } + } + return aInfo; + } + + void startHomeActivity(Intent intent, ActivityInfo aInfo) { + mHomeStack.startActivityLocked(null, intent, null, aInfo, null, null, 0, 0, 0, null, 0, + null, false, null); + } + + final int startActivityMayWait(IApplicationThread caller, int callingUid, + String callingPackage, Intent intent, String resolvedType, IBinder resultTo, + String resultWho, int requestCode, int startFlags, String profileFile, + ParcelFileDescriptor profileFd, WaitResult outResult, Configuration config, + Bundle options, int userId) { + // Refuse possible leaked file descriptors + if (intent != null && intent.hasFileDescriptors()) { + throw new IllegalArgumentException("File descriptors passed in Intent"); + } + boolean componentSpecified = intent.getComponent() != null; + + // Don't modify the client's object! + intent = new Intent(intent); + + // Collect information about the target of the Intent. + ActivityInfo aInfo = resolveActivity(intent, resolvedType, startFlags, + profileFile, profileFd, userId); + + synchronized (mService) { + int callingPid; + if (callingUid >= 0) { + callingPid = -1; + } else if (caller == null) { + callingPid = Binder.getCallingPid(); + callingUid = Binder.getCallingUid(); + } else { + callingPid = callingUid = -1; + } + + mMainStack.mConfigWillChange = config != null + && mService.mConfiguration.diff(config) != 0; + if (DEBUG_CONFIGURATION) Slog.v(TAG, + "Starting activity when config will change = " + mMainStack.mConfigWillChange); + + final long origId = Binder.clearCallingIdentity(); + + if (aInfo != null && + (aInfo.applicationInfo.flags&ApplicationInfo.FLAG_CANT_SAVE_STATE) != 0) { + // This may be a heavy-weight process! Check to see if we already + // have another, different heavy-weight process running. + if (aInfo.processName.equals(aInfo.applicationInfo.packageName)) { + if (mService.mHeavyWeightProcess != null && + (mService.mHeavyWeightProcess.info.uid != aInfo.applicationInfo.uid || + !mService.mHeavyWeightProcess.processName.equals(aInfo.processName))) { + int realCallingPid = callingPid; + int realCallingUid = callingUid; + if (caller != null) { + ProcessRecord callerApp = mService.getRecordForAppLocked(caller); + if (callerApp != null) { + realCallingPid = callerApp.pid; + realCallingUid = callerApp.info.uid; + } else { + Slog.w(TAG, "Unable to find app for caller " + caller + + " (pid=" + realCallingPid + ") when starting: " + + intent.toString()); + ActivityOptions.abort(options); + return ActivityManager.START_PERMISSION_DENIED; + } + } + + IIntentSender target = mService.getIntentSenderLocked( + ActivityManager.INTENT_SENDER_ACTIVITY, "android", + realCallingUid, userId, null, null, 0, new Intent[] { intent }, + new String[] { resolvedType }, PendingIntent.FLAG_CANCEL_CURRENT + | PendingIntent.FLAG_ONE_SHOT, null); + + Intent newIntent = new Intent(); + if (requestCode >= 0) { + // Caller is requesting a result. + newIntent.putExtra(HeavyWeightSwitcherActivity.KEY_HAS_RESULT, true); + } + newIntent.putExtra(HeavyWeightSwitcherActivity.KEY_INTENT, + new IntentSender(target)); + if (mService.mHeavyWeightProcess.activities.size() > 0) { + ActivityRecord hist = mService.mHeavyWeightProcess.activities.get(0); + newIntent.putExtra(HeavyWeightSwitcherActivity.KEY_CUR_APP, + hist.packageName); + newIntent.putExtra(HeavyWeightSwitcherActivity.KEY_CUR_TASK, + hist.task.taskId); + } + newIntent.putExtra(HeavyWeightSwitcherActivity.KEY_NEW_APP, + aInfo.packageName); + newIntent.setFlags(intent.getFlags()); + newIntent.setClassName("android", + HeavyWeightSwitcherActivity.class.getName()); + intent = newIntent; + resolvedType = null; + caller = null; + callingUid = Binder.getCallingUid(); + callingPid = Binder.getCallingPid(); + componentSpecified = true; + try { + ResolveInfo rInfo = + AppGlobals.getPackageManager().resolveIntent( + intent, null, + PackageManager.MATCH_DEFAULT_ONLY + | ActivityManagerService.STOCK_PM_FLAGS, userId); + aInfo = rInfo != null ? rInfo.activityInfo : null; + aInfo = mService.getActivityInfoForUser(aInfo, userId); + } catch (RemoteException e) { + aInfo = null; + } + } + } + } + + int res = mMainStack.startActivityLocked(caller, intent, resolvedType, + aInfo, resultTo, resultWho, requestCode, callingPid, callingUid, + callingPackage, startFlags, options, componentSpecified, null); + + if (mMainStack.mConfigWillChange) { + // If the caller also wants to switch to a new configuration, + // do so now. This allows a clean switch, as we are waiting + // for the current activity to pause (so we will not destroy + // it), and have not yet started the next activity. + mService.enforceCallingPermission(android.Manifest.permission.CHANGE_CONFIGURATION, + "updateConfiguration()"); + mMainStack.mConfigWillChange = false; + if (DEBUG_CONFIGURATION) Slog.v(TAG, + "Updating to new configuration after starting activity."); + mService.updateConfigurationLocked(config, null, false, false); + } + + Binder.restoreCallingIdentity(origId); + + if (outResult != null) { + outResult.result = res; + if (res == ActivityManager.START_SUCCESS) { + mMainStack.mWaitingActivityLaunched.add(outResult); + do { + try { + mService.wait(); + } catch (InterruptedException e) { + } + } while (!outResult.timeout && outResult.who == null); + } else if (res == ActivityManager.START_TASK_TO_FRONT) { + ActivityRecord r = mMainStack.topRunningActivityLocked(null); + if (r.nowVisible) { + outResult.timeout = false; + outResult.who = new ComponentName(r.info.packageName, r.info.name); + outResult.totalTime = 0; + outResult.thisTime = 0; + } else { + outResult.thisTime = SystemClock.uptimeMillis(); + mMainStack.mWaitingActivityVisible.add(outResult); + do { + try { + mService.wait(); + } catch (InterruptedException e) { + } + } while (!outResult.timeout && outResult.who == null); + } + } + } + + return res; + } + } + + final int startActivities(IApplicationThread caller, int callingUid, String callingPackage, + Intent[] intents, String[] resolvedTypes, IBinder resultTo, + Bundle options, int userId) { + if (intents == null) { + throw new NullPointerException("intents is null"); + } + if (resolvedTypes == null) { + throw new NullPointerException("resolvedTypes is null"); + } + if (intents.length != resolvedTypes.length) { + throw new IllegalArgumentException("intents are length different than resolvedTypes"); + } + + ActivityRecord[] outActivity = new ActivityRecord[1]; + + int callingPid; + if (callingUid >= 0) { + callingPid = -1; + } else if (caller == null) { + callingPid = Binder.getCallingPid(); + callingUid = Binder.getCallingUid(); + } else { + callingPid = callingUid = -1; + } + final long origId = Binder.clearCallingIdentity(); + try { + synchronized (mService) { + + for (int i=0; i<intents.length; i++) { + Intent intent = intents[i]; + if (intent == null) { + continue; + } + + // Refuse possible leaked file descriptors + if (intent != null && intent.hasFileDescriptors()) { + throw new IllegalArgumentException("File descriptors passed in Intent"); + } + + boolean componentSpecified = intent.getComponent() != null; + + // Don't modify the client's object! + intent = new Intent(intent); + + // Collect information about the target of the Intent. + ActivityInfo aInfo = resolveActivity(intent, resolvedTypes[i], + 0, null, null, userId); + // TODO: New, check if this is correct + aInfo = mService.getActivityInfoForUser(aInfo, userId); + + if (aInfo != null && + (aInfo.applicationInfo.flags & ApplicationInfo.FLAG_CANT_SAVE_STATE) + != 0) { + throw new IllegalArgumentException( + "FLAG_CANT_SAVE_STATE not supported here"); + } + + Bundle theseOptions; + if (options != null && i == intents.length-1) { + theseOptions = options; + } else { + theseOptions = null; + } + int res = mMainStack.startActivityLocked(caller, intent, resolvedTypes[i], + aInfo, resultTo, null, -1, callingPid, callingUid, callingPackage, + 0, theseOptions, componentSpecified, outActivity); + if (res < 0) { + return res; + } + + resultTo = outActivity[0] != null ? outActivity[0].appToken : null; + } + } + } finally { + Binder.restoreCallingIdentity(origId); + } + + return ActivityManager.START_SUCCESS; + } + + final boolean realStartActivityLocked(ActivityRecord r, + ProcessRecord app, boolean andResume, boolean checkConfig) + throws RemoteException { + + r.startFreezingScreenLocked(app, 0); + mService.mWindowManager.setAppVisibility(r.appToken, true); + + // schedule launch ticks to collect information about slow apps. + r.startLaunchTickingLocked(); + + // Have the window manager re-evaluate the orientation of + // the screen based on the new activity order. Note that + // as a result of this, it can call back into the activity + // manager with a new orientation. We don't care about that, + // because the activity is not currently running so we are + // just restarting it anyway. + if (checkConfig) { + Configuration config = mService.mWindowManager.updateOrientationFromAppTokens( + mService.mConfiguration, + r.mayFreezeScreenLocked(app) ? r.appToken : null); + mService.updateConfigurationLocked(config, r, false, false); + } + + r.app = app; + app.waitingToKill = null; + r.launchCount++; + r.lastLaunchTime = SystemClock.uptimeMillis(); + + if (localLOGV) Slog.v(TAG, "Launching: " + r); + + int idx = app.activities.indexOf(r); + if (idx < 0) { + app.activities.add(r); + } + mService.updateLruProcessLocked(app, true); + + final ActivityStack stack = r.task.stack; + try { + if (app.thread == null) { + throw new RemoteException(); + } + List<ResultInfo> results = null; + List<Intent> newIntents = null; + if (andResume) { + results = r.results; + newIntents = r.newIntents; + } + if (DEBUG_SWITCH) Slog.v(TAG, "Launching: " + r + + " icicle=" + r.icicle + + " with results=" + results + " newIntents=" + newIntents + + " andResume=" + andResume); + if (andResume) { + EventLog.writeEvent(EventLogTags.AM_RESTART_ACTIVITY, + r.userId, System.identityHashCode(r), + r.task.taskId, r.shortComponentName); + } + if (r.isHomeActivity) { + mService.mHomeProcess = app; + } + mService.ensurePackageDexOpt(r.intent.getComponent().getPackageName()); + r.sleeping = false; + r.forceNewConfig = false; + mService.showAskCompatModeDialogLocked(r); + r.compat = mService.compatibilityInfoForPackageLocked(r.info.applicationInfo); + String profileFile = null; + ParcelFileDescriptor profileFd = null; + boolean profileAutoStop = false; + if (mService.mProfileApp != null && mService.mProfileApp.equals(app.processName)) { + if (mService.mProfileProc == null || mService.mProfileProc == app) { + mService.mProfileProc = app; + profileFile = mService.mProfileFile; + profileFd = mService.mProfileFd; + profileAutoStop = mService.mAutoStopProfiler; + } + } + app.hasShownUi = true; + app.pendingUiClean = true; + if (profileFd != null) { + try { + profileFd = profileFd.dup(); + } catch (IOException e) { + if (profileFd != null) { + try { + profileFd.close(); + } catch (IOException o) { + } + profileFd = null; + } + } + } + app.thread.scheduleLaunchActivity(new Intent(r.intent), r.appToken, + System.identityHashCode(r), r.info, + new Configuration(mService.mConfiguration), + r.compat, r.icicle, results, newIntents, !andResume, + mService.isNextTransitionForward(), profileFile, profileFd, + profileAutoStop); + + if ((app.info.flags&ApplicationInfo.FLAG_CANT_SAVE_STATE) != 0) { + // This may be a heavy-weight process! Note that the package + // manager will ensure that only activity can run in the main + // process of the .apk, which is the only thing that will be + // considered heavy-weight. + if (app.processName.equals(app.info.packageName)) { + if (mService.mHeavyWeightProcess != null + && mService.mHeavyWeightProcess != app) { + Slog.w(TAG, "Starting new heavy weight process " + app + + " when already running " + + mService.mHeavyWeightProcess); + } + mService.mHeavyWeightProcess = app; + Message msg = mService.mHandler.obtainMessage( + ActivityManagerService.POST_HEAVY_NOTIFICATION_MSG); + msg.obj = r; + mService.mHandler.sendMessage(msg); + } + } + + } catch (RemoteException e) { + if (r.launchFailed) { + // This is the second time we failed -- finish activity + // and give up. + Slog.e(TAG, "Second failure launching " + + r.intent.getComponent().flattenToShortString() + + ", giving up", e); + mService.appDiedLocked(app, app.pid, app.thread); + stack.requestFinishActivityLocked(r.appToken, Activity.RESULT_CANCELED, null, + "2nd-crash", false); + return false; + } + + // This is the first time we failed -- restart process and + // retry. + app.activities.remove(r); + throw e; + } + + r.launchFailed = false; + if (stack.updateLRUListLocked(r)) { + Slog.w(TAG, "Activity " + r + + " being launched, but already in LRU list"); + } + + if (andResume) { + // As part of the process of launching, ActivityThread also performs + // a resume. + stack.minimalResumeActivityLocked(r); + } else { + // This activity is not starting in the resumed state... which + // should look like we asked it to pause+stop (but remain visible), + // and it has done so and reported back the current icicle and + // other state. + if (DEBUG_STATES) Slog.v(TAG, "Moving to STOPPED: " + r + + " (starting in stopped state)"); + r.state = ActivityState.STOPPED; + r.stopped = true; + } + + // Launch the new version setup screen if needed. We do this -after- + // launching the initial activity (that is, home), so that it can have + // a chance to initialize itself while in the background, making the + // switch back to it faster and look better. + if (isMainStack(stack)) { + mService.startSetupActivityLocked(); + } + + return true; + } + + void startSpecificActivityLocked(ActivityRecord r, + boolean andResume, boolean checkConfig) { + // Is this activity's application already running? + ProcessRecord app = mService.getProcessRecordLocked(r.processName, + r.info.applicationInfo.uid); + + r.task.stack.setLaunchTime(r); + + if (app != null && app.thread != null) { + try { + app.addPackage(r.info.packageName); + realStartActivityLocked(r, app, andResume, checkConfig); + return; + } catch (RemoteException e) { + Slog.w(TAG, "Exception when starting activity " + + r.intent.getComponent().flattenToShortString(), e); + } + + // If a dead object exception was thrown -- fall through to + // restart the application. + } + + mService.startProcessLocked(r.processName, r.info.applicationInfo, true, 0, + "activity", r.intent.getComponent(), false, false); + } + + void handleAppDiedLocked(ProcessRecord app, boolean restarting) { + // Just in case. + final int numStacks = mStacks.size(); + for (int stackNdx = 0; stackNdx < numStacks; ++stackNdx) { + mStacks.get(stackNdx).handleAppDiedLocked(app, restarting); + } + } + + void closeSystemDialogsLocked() { + final int numStacks = mStacks.size(); + for (int stackNdx = 0; stackNdx < numStacks; ++stackNdx) { + final ActivityStack stack = mStacks.get(stackNdx); + stack.closeSystemDialogsLocked(); + } + } + + /** + * @return true if some activity was finished (or would have finished if doit were true). + */ + boolean forceStopPackageLocked(String name, boolean doit, boolean evenPersistent, int userId) { + boolean didSomething = false; + final int numStacks = mStacks.size(); + for (int stackNdx = 0; stackNdx < numStacks; ++stackNdx) { + final ActivityStack stack = mStacks.get(stackNdx); + if (stack.forceStopPackageLocked(name, doit, evenPersistent, userId)) { + didSomething = true; + } + } + return didSomething; + } + + void resumeTopActivityLocked() { + final int start, end; + if (isHomeStackMain()) { + start = 0; + end = 1; + } else { + start = 1; + end = mStacks.size(); + } + for (int stackNdx = start; stackNdx < end; ++stackNdx) { + mStacks.get(stackNdx).resumeTopActivityLocked(null); + } + } + + void finishTopRunningActivityLocked(ProcessRecord app) { + final int numStacks = mStacks.size(); + for (int stackNdx = 0; stackNdx < numStacks; ++stackNdx) { + final ActivityStack stack = mStacks.get(stackNdx); + stack.finishTopRunningActivityLocked(app); + } + } + + void scheduleIdleLocked() { + for (int stackNdx = mStacks.size() - 1; stackNdx >= 0; --stackNdx) { + mStacks.get(stackNdx).scheduleIdleLocked(); + } + } + + void findTaskToMoveToFrontLocked(int taskId, int flags, Bundle options) { + for (int stackNdx = mStacks.size() - 1; stackNdx >= 0; --stackNdx) { + if (mStacks.get(stackNdx).findTaskToMoveToFrontLocked(taskId, flags, options)) { + return; + } + } + } + + private ActivityStack getStack(int stackId) { + for (int stackNdx = mStacks.size() - 1; stackNdx >= 0; --stackNdx) { + final ActivityStack stack = mStacks.get(stackNdx); + if (stack.getStackId() == stackId) { + return stack; + } + } + return null; + } + + int createStack(int relativeStackId, int position, float weight) { + synchronized (this) { + while (true) { + if (++mLastStackId <= HOME_STACK_ID) { + mLastStackId = HOME_STACK_ID + 1; + } + if (getStack(mLastStackId) == null) { + break; + } + } + mStacks.add(new ActivityStack(mService, mContext, mLooper, mLastStackId, this, + mCurrentUser)); + return mLastStackId; + } + } + + void moveTaskToStack(int taskId, int stackId, boolean toTop) { + final ActivityStack stack = getStack(stackId); + if (stack == null) { + Slog.w(TAG, "moveTaskToStack: no stack for id=" + stackId); + return; + } + stack.moveTask(taskId, toTop); + } + + void goingToSleepLocked() { + for (int stackNdx = mStacks.size() - 1; stackNdx >= 0; --stackNdx) { + mStacks.get(stackNdx).stopIfSleepingLocked(); + } + } + + boolean shutdownLocked(int timeout) { + boolean timedout = false; + final int numStacks = mStacks.size(); + for (int stackNdx = 0; stackNdx < numStacks; ++stackNdx) { + final ActivityStack stack = mStacks.get(stackNdx); + if (stack.mResumedActivity != null) { + stack.stopIfSleepingLocked(); + final long endTime = System.currentTimeMillis() + timeout; + while (stack.mResumedActivity != null || stack.mPausingActivity != null) { + long delay = endTime - System.currentTimeMillis(); + if (delay <= 0) { + Slog.w(TAG, "Activity manager shutdown timed out"); + timedout = true; + break; + } + try { + mService.wait(); + } catch (InterruptedException e) { + } + } + } + } + return timedout; + } + + void comeOutOfSleepIfNeededLocked() { + final int numStacks = mStacks.size(); + for (int stackNdx = 0; stackNdx < numStacks; ++stackNdx) { + final ActivityStack stack = mStacks.get(stackNdx); + stack.awakeFromSleepingLocked(); + stack.resumeTopActivityLocked(null); + } + } + + void handleAppCrashLocked(ProcessRecord app) { + final int numStacks = mStacks.size(); + for (int stackNdx = 0; stackNdx < numStacks; ++stackNdx) { + final ActivityStack stack = mStacks.get(stackNdx); + stack.handleAppCrashLocked(app); + } + } + + boolean updateConfigurationLocked(int changes, ActivityRecord starting) { + boolean kept = true; + final int numStacks = mStacks.size(); + for (int stackNdx = 0; stackNdx < numStacks; ++stackNdx) { + final ActivityStack stack = mStacks.get(stackNdx); + if (changes != 0 && starting == null) { + // If the configuration changed, and the caller is not already + // in the process of starting an activity, then find the top + // activity to check if its configuration needs to change. + starting = stack.topRunningActivityLocked(null); + } + + if (starting != null) { + if (!stack.ensureActivityConfigurationLocked(starting, changes)) { + kept = false; + } + // And we need to make sure at this point that all other activities + // are made visible with the correct configuration. + stack.ensureActivitiesVisibleLocked(starting, changes); + } + } + return kept; + } + + void scheduleDestroyAllActivities(ProcessRecord app, String reason) { + final int numStacks = mStacks.size(); + for (int stackNdx = 0; stackNdx < numStacks; ++stackNdx) { + final ActivityStack stack = mStacks.get(stackNdx); + stack.scheduleDestroyActivities(app, false, reason); + } + } + + boolean switchUserLocked(int userId, UserStartedState uss) { + mCurrentUser = userId; + boolean haveActivities = false; + final int numStacks = mStacks.size(); + for (int stackNdx = 0; stackNdx < numStacks; ++stackNdx) { + final ActivityStack stack = mStacks.get(stackNdx); + haveActivities |= stack.switchUserLocked(userId, uss); + } + return haveActivities; + } + + public void dump(PrintWriter pw, String prefix) { + pw.print(prefix); pw.print("mDismissKeyguardOnNextActivity:"); + pw.println(mDismissKeyguardOnNextActivity); + } + + ArrayList<ActivityRecord> getDumpActivitiesLocked(String name) { + return mMainStack.getDumpActivitiesLocked(name); + } + + boolean dumpActivitiesLocked(FileDescriptor fd, PrintWriter pw, boolean dumpAll, + boolean dumpClient, String dumpPackage) { + final int numStacks = mStacks.size(); + for (int stackNdx = 0; stackNdx < numStacks; ++stackNdx) { + final ActivityStack stack = mStacks.get(stackNdx); + pw.print(" Stack #"); pw.print(mStacks.indexOf(stack)); pw.println(":"); + stack.dumpActivitiesLocked(fd, pw, dumpAll, dumpClient, dumpPackage); + pw.println(" "); + pw.println(" Running activities (most recent first):"); + dumpHistoryList(fd, pw, stack.mLRUActivities, " ", "Run", false, !dumpAll, false, + dumpPackage); + if (stack.mWaitingVisibleActivities.size() > 0) { + pw.println(" "); + pw.println(" Activities waiting for another to become visible:"); + dumpHistoryList(fd, pw, stack.mWaitingVisibleActivities, " ", "Wait", false, + !dumpAll, false, dumpPackage); + } + if (stack.mStoppingActivities.size() > 0) { + pw.println(" "); + pw.println(" Activities waiting to stop:"); + dumpHistoryList(fd, pw, stack.mStoppingActivities, " ", "Stop", false, + !dumpAll, false, dumpPackage); + } + if (stack.mGoingToSleepActivities.size() > 0) { + pw.println(" "); + pw.println(" Activities waiting to sleep:"); + dumpHistoryList(fd, pw, stack.mGoingToSleepActivities, " ", "Sleep", false, + !dumpAll, false, dumpPackage); + } + if (stack.mFinishingActivities.size() > 0) { + pw.println(" "); + pw.println(" Activities waiting to finish:"); + dumpHistoryList(fd, pw, stack.mFinishingActivities, " ", "Fin", false, + !dumpAll, false, dumpPackage); + } + } + + for (int stackNdx = 0; stackNdx < numStacks; ++stackNdx) { + final ActivityStack stack = mStacks.get(stackNdx); + pw.print(" Stack #"); pw.println(mStacks.indexOf(stack)); + if (stack.mPausingActivity != null) { + pw.println(" mPausingActivity: " + stack.mPausingActivity); + } + pw.println(" mResumedActivity: " + stack.mResumedActivity); + if (dumpAll) { + pw.println(" mLastPausedActivity: " + stack.mLastPausedActivity); + pw.println(" mSleepTimeout: " + stack.mSleepTimeout); + } + } + + if (dumpAll) { + pw.println(" "); + pw.println(" mCurTaskId: " + mCurTaskId); + } + return true; + } + + static final void dumpHistoryList(FileDescriptor fd, PrintWriter pw, List<ActivityRecord> list, + String prefix, String label, boolean complete, boolean brief, boolean client, + String dumpPackage) { + TaskRecord lastTask = null; + boolean needNL = false; + final String innerPrefix = prefix + " "; + final String[] args = new String[0]; + for (int i=list.size()-1; i>=0; i--) { + final ActivityRecord r = list.get(i); + if (dumpPackage != null && !dumpPackage.equals(r.packageName)) { + continue; + } + final boolean full = !brief && (complete || !r.isInHistory()); + if (needNL) { + pw.println(" "); + needNL = false; + } + if (lastTask != r.task) { + lastTask = r.task; + pw.print(prefix); + pw.print(full ? "* " : " "); + pw.println(lastTask); + if (full) { + lastTask.dump(pw, prefix + " "); + } else if (complete) { + // Complete + brief == give a summary. Isn't that obvious?!? + if (lastTask.intent != null) { + pw.print(prefix); pw.print(" "); + pw.println(lastTask.intent.toInsecureStringWithClip()); + } + } + } + pw.print(prefix); pw.print(full ? " * " : " "); pw.print(label); + pw.print(" #"); pw.print(i); pw.print(": "); + pw.println(r); + if (full) { + r.dump(pw, innerPrefix); + } else if (complete) { + // Complete + brief == give a summary. Isn't that obvious?!? + pw.print(innerPrefix); pw.println(r.intent.toInsecureString()); + if (r.app != null) { + pw.print(innerPrefix); pw.println(r.app); + } + } + if (client && r.app != null && r.app.thread != null) { + // flush anything that is already in the PrintWriter since the thread is going + // to write to the file descriptor directly + pw.flush(); + try { + TransferPipe tp = new TransferPipe(); + try { + r.app.thread.dumpActivity(tp.getWriteFd().getFileDescriptor(), + r.appToken, innerPrefix, args); + // Short timeout, since blocking here can + // deadlock with the application. + tp.go(fd, 2000); + } finally { + tp.kill(); + } + } catch (IOException e) { + pw.println(innerPrefix + "Failure while dumping the activity: " + e); + } catch (RemoteException e) { + pw.println(innerPrefix + "Got a RemoteException while dumping the activity"); + } + needNL = true; + } + } + } +} diff --git a/services/java/com/android/server/am/CompatModePackages.java b/services/java/com/android/server/am/CompatModePackages.java index 3a6492e..8638140 100644 --- a/services/java/com/android/server/am/CompatModePackages.java +++ b/services/java/com/android/server/am/CompatModePackages.java @@ -15,7 +15,6 @@ import com.android.internal.util.FastXmlSerializer; import android.app.ActivityManager; import android.app.AppGlobals; -import android.content.pm.ActivityInfo; import android.content.pm.ApplicationInfo; import android.content.pm.IPackageManager; import android.content.res.CompatibilityInfo; @@ -166,7 +165,7 @@ public class CompatModePackages { } public boolean getFrontActivityAskCompatModeLocked() { - ActivityRecord r = mService.mMainStack.topRunningActivityLocked(null); + ActivityRecord r = mService.getMainStack().topRunningActivityLocked(null); if (r == null) { return false; } @@ -178,7 +177,7 @@ public class CompatModePackages { } public void setFrontActivityAskCompatModeLocked(boolean ask) { - ActivityRecord r = mService.mMainStack.topRunningActivityLocked(null); + ActivityRecord r = mService.getMainStack().topRunningActivityLocked(null); if (r != null) { setPackageAskCompatModeLocked(r.packageName, ask); } @@ -200,7 +199,7 @@ public class CompatModePackages { } public int getFrontActivityScreenCompatModeLocked() { - ActivityRecord r = mService.mMainStack.topRunningActivityLocked(null); + ActivityRecord r = mService.getMainStack().topRunningActivityLocked(null); if (r == null) { return ActivityManager.COMPAT_MODE_UNKNOWN; } @@ -208,7 +207,7 @@ public class CompatModePackages { } public void setFrontActivityScreenCompatModeLocked(int mode) { - ActivityRecord r = mService.mMainStack.topRunningActivityLocked(null); + ActivityRecord r = mService.getMainStack().topRunningActivityLocked(null); if (r == null) { Slog.w(TAG, "setFrontActivityScreenCompatMode failed: no top activity"); return; @@ -295,20 +294,8 @@ public class CompatModePackages { Message msg = mHandler.obtainMessage(MSG_WRITE); mHandler.sendMessageDelayed(msg, 10000); - ActivityRecord starting = mService.mMainStack.topRunningActivityLocked(null); - - // All activities that came from the package must be - // restarted as if there was a config change. - for (int i=mService.mMainStack.mHistory.size()-1; i>=0; i--) { - ActivityRecord a = (ActivityRecord)mService.mMainStack.mHistory.get(i); - if (a.info.packageName.equals(packageName)) { - a.forceNewConfig = true; - if (starting != null && a == starting && a.visible) { - a.startFreezingScreenLocked(starting.app, - ActivityInfo.CONFIG_SCREEN_LAYOUT); - } - } - } + final ActivityStack stack = mService.getMainStack(); + ActivityRecord starting = stack.restartPackage(packageName); // Tell all processes that loaded this package about the change. for (int i=mService.mLruProcesses.size()-1; i>=0; i--) { @@ -327,10 +314,10 @@ public class CompatModePackages { } if (starting != null) { - mService.mMainStack.ensureActivityConfigurationLocked(starting, 0); + stack.ensureActivityConfigurationLocked(starting, 0); // And we need to make sure at this point that all other activities // are made visible with the correct configuration. - mService.mMainStack.ensureActivitiesVisibleLocked(starting, 0); + stack.ensureActivitiesVisibleLocked(starting, 0); } } } diff --git a/services/java/com/android/server/am/PendingIntentRecord.java b/services/java/com/android/server/am/PendingIntentRecord.java index 8ab71dd..28593fe 100644 --- a/services/java/com/android/server/am/PendingIntentRecord.java +++ b/services/java/com/android/server/am/PendingIntentRecord.java @@ -259,7 +259,7 @@ class PendingIntentRecord extends IIntentSender.Stub { } break; case ActivityManager.INTENT_SENDER_ACTIVITY_RESULT: - key.activity.stack.sendActivityResultLocked(-1, key.activity, + key.activity.task.stack.sendActivityResultLocked(-1, key.activity, key.who, key.requestCode, code, finalIntent); break; case ActivityManager.INTENT_SENDER_BROADCAST: diff --git a/services/java/com/android/server/am/PendingThumbnailsRecord.java b/services/java/com/android/server/am/PendingThumbnailsRecord.java index ed478c9..c460791 100644 --- a/services/java/com/android/server/am/PendingThumbnailsRecord.java +++ b/services/java/com/android/server/am/PendingThumbnailsRecord.java @@ -27,13 +27,13 @@ import java.util.HashSet; class PendingThumbnailsRecord { final IThumbnailReceiver receiver; // who is waiting. - HashSet pendingRecords; // HistoryRecord objects we still wait for. + final HashSet<ActivityRecord> pendingRecords; // HistoryRecord objects we still wait for. boolean finished; // Is pendingRecords empty? PendingThumbnailsRecord(IThumbnailReceiver _receiver) { receiver = _receiver; - pendingRecords = new HashSet(); + pendingRecords = new HashSet<ActivityRecord>(); finished = false; } } diff --git a/services/java/com/android/server/am/TaskRecord.java b/services/java/com/android/server/am/TaskRecord.java index 1bae9ca..9206e82 100644 --- a/services/java/com/android/server/am/TaskRecord.java +++ b/services/java/com/android/server/am/TaskRecord.java @@ -16,6 +16,8 @@ package com.android.server.am; +import android.app.Activity; +import android.app.ActivityOptions; import android.content.ComponentName; import android.content.Intent; import android.content.pm.ActivityInfo; @@ -23,6 +25,7 @@ import android.os.UserHandle; import android.util.Slog; import java.io.PrintWriter; +import java.util.ArrayList; class TaskRecord extends ThumbnailHolder { final int taskId; // Unique identifier for this task. @@ -39,11 +42,20 @@ class TaskRecord extends ThumbnailHolder { String stringName; // caching of toString() result. int userId; // user for which this task was created - - TaskRecord(int _taskId, ActivityInfo info, Intent _intent) { + + int numFullscreen; // Number of fullscreen activities. + + /** List of all activities in the task arranged in history order */ + final ArrayList<ActivityRecord> mActivities = new ArrayList<ActivityRecord>(); + + /** Current stack */ + ActivityStack stack; + + TaskRecord(int _taskId, ActivityInfo info, Intent _intent, ActivityStack _stack) { taskId = _taskId; affinity = info.taskAffinity; setIntent(_intent, info); + stack = _stack; } void touchActiveTime() { @@ -104,12 +116,139 @@ class TaskRecord extends ThumbnailHolder { userId = UserHandle.getUserId(info.applicationInfo.uid); } } - + + ActivityRecord getTopActivity() { + for (int i = mActivities.size() - 1; i >= 0; --i) { + final ActivityRecord r = mActivities.get(i); + if (r.finishing) { + continue; + } + return r; + } + return null; + } + + void addActivityAtBottom(ActivityRecord r) { + addActivityAtIndex(0, r); + } + + void addActivityToTop(ActivityRecord r) { + if (!mActivities.remove(r) && r.fullscreen) { + // Was not previously in list. + numFullscreen++; + } + mActivities.add(r); + } + + void addActivityAtIndex(int index, ActivityRecord r) { + if (!mActivities.remove(r) && r.fullscreen) { + // Was not previously in list. + numFullscreen++; + } + mActivities.add(index, r); + } + + /** @return true if this was the last activity in the task */ + boolean removeActivity(ActivityRecord r) { + if (mActivities.remove(r) && r.fullscreen) { + // Was previously in list. + numFullscreen--; + } + return mActivities.size() == 0; + } + + /** + * Completely remove all activities associated with an existing + * task starting at a specified index. + */ + final void performClearTaskAtIndexLocked(int activityNdx) { + final ArrayList<ActivityRecord> activities = mActivities; + int numActivities = activities.size(); + for ( ; activityNdx < numActivities; ++activityNdx) { + final ActivityRecord r = activities.get(activityNdx); + if (r.finishing) { + continue; + } + if (stack.finishActivityLocked(r, Activity.RESULT_CANCELED, null, "clear", false)) { + --activityNdx; + --numActivities; + } + } + } + + /** + * Completely remove all activities associated with an existing task. + */ + final void performClearTaskLocked() { + performClearTaskAtIndexLocked(0); + } + + /** + * Perform clear operation as requested by + * {@link Intent#FLAG_ACTIVITY_CLEAR_TOP}: search from the top of the + * stack to the given task, then look for + * an instance of that activity in the stack and, if found, finish all + * activities on top of it and return the instance. + * + * @param newR Description of the new activity being started. + * @return Returns the old activity that should be continued to be used, + * or null if none was found. + */ + final ActivityRecord performClearTaskLocked(ActivityRecord newR, int launchFlags) { + final ArrayList<ActivityRecord> activities = mActivities; + int numActivities = activities.size(); + for (int activityNdx = numActivities - 1; activityNdx >= 0; --activityNdx) { + ActivityRecord r = activities.get(activityNdx); + if (r.finishing) { + continue; + } + if (r.realActivity.equals(newR.realActivity)) { + // Here it is! Now finish everything in front... + ActivityRecord ret = r; + + for (++activityNdx; activityNdx < numActivities; ++activityNdx) { + r = activities.get(activityNdx); + if (r.finishing) { + continue; + } + ActivityOptions opts = r.takeOptionsLocked(); + if (opts != null) { + ret.updateOptionsLocked(opts); + } + if (stack.finishActivityLocked(r, Activity.RESULT_CANCELED, null, "clear", + false)) { + --activityNdx; + --numActivities; + } + } + + // Finally, if this is a normal launch mode (that is, not + // expecting onNewIntent()), then we will finish the current + // instance of the activity so a new fresh one can be started. + if (ret.launchMode == ActivityInfo.LAUNCH_MULTIPLE + && (launchFlags & Intent.FLAG_ACTIVITY_SINGLE_TOP) == 0) { + if (!ret.finishing) { + if (activities.contains(ret)) { + stack.finishActivityLocked(ret, Activity.RESULT_CANCELED, null, + "clear", false); + } + return null; + } + } + + return ret; + } + } + + return null; + } + void dump(PrintWriter pw, String prefix) { if (numActivities != 0 || rootWasReset || userId != 0) { pw.print(prefix); pw.print("numActivities="); pw.print(numActivities); pw.print(" rootWasReset="); pw.print(rootWasReset); - pw.print(" userId="); pw.println(userId); + pw.print(" userId="); pw.print(userId); + pw.print(" numFullscreen="); pw.println(numFullscreen); } if (affinity != null) { pw.print(prefix); pw.print("affinity="); pw.println(affinity); @@ -136,6 +275,7 @@ class TaskRecord extends ThumbnailHolder { pw.print(prefix); pw.print("realActivity="); pw.println(realActivity.flattenToShortString()); } + pw.print(prefix); pw.print("Activities="); pw.println(mActivities); if (!askedCompatMode) { pw.print(prefix); pw.print("askedCompatMode="); pw.println(askedCompatMode); } @@ -146,6 +286,7 @@ class TaskRecord extends ThumbnailHolder { pw.print((getInactiveDuration()/1000)); pw.println("s)"); } + @Override public String toString() { if (stringName != null) { return stringName; @@ -156,19 +297,21 @@ class TaskRecord extends ThumbnailHolder { sb.append(" #"); sb.append(taskId); if (affinity != null) { - sb.append(" A "); + sb.append(" A="); sb.append(affinity); } else if (intent != null) { - sb.append(" I "); + sb.append(" I="); sb.append(intent.getComponent().flattenToShortString()); } else if (affinityIntent != null) { - sb.append(" aI "); + sb.append(" aI="); sb.append(affinityIntent.getComponent().flattenToShortString()); } else { sb.append(" ??"); } - sb.append(" U "); + sb.append(" U="); sb.append(userId); + sb.append(" sz="); + sb.append(mActivities.size()); sb.append('}'); return stringName = sb.toString(); } diff --git a/services/java/com/android/server/pm/KeySetManager.java b/services/java/com/android/server/pm/KeySetManager.java new file mode 100644 index 0000000..f154ab3 --- /dev/null +++ b/services/java/com/android/server/pm/KeySetManager.java @@ -0,0 +1,555 @@ +/* + * Copyright (C) 2013 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 com.android.server.pm; + +import android.content.pm.KeySet; +import android.content.pm.PackageParser; +import android.os.Binder; +import android.util.Base64; +import android.util.Log; +import android.util.LongSparseArray; + +import java.io.IOException; +import java.io.PrintWriter; +import java.security.PublicKey; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +import org.xmlpull.v1.XmlPullParser; +import org.xmlpull.v1.XmlPullParserException; +import org.xmlpull.v1.XmlSerializer; + +/* + * Manages system-wide KeySet state. + */ +public class KeySetManager { + + static final String TAG = "KeySetManager"; + + private static final long KEYSET_NOT_FOUND = -1; + private static final long PUBLIC_KEY_NOT_FOUND = -1; + + private final Object mLockObject = new Object(); + + private final LongSparseArray<KeySet> mKeySets; + + private final LongSparseArray<PublicKey> mPublicKeys; + + private final LongSparseArray<Set<Long>> mKeySetMapping; + + private final Map<String, PackageSetting> mPackages; + + private static long lastIssuedKeySetId = 0; + + private static long lastIssuedKeyId = 0; + + public KeySetManager(Map<String, PackageSetting> packages) { + mKeySets = new LongSparseArray<KeySet>(); + mPublicKeys = new LongSparseArray<PublicKey>(); + mKeySetMapping = new LongSparseArray<Set<Long>>(); + mPackages = packages; + } + + /* + * Determine if a package is signed by the given KeySet. + * + * Returns false if the package was not signed by all the + * keys in the KeySet. + * + * Returns true if the package was signed by at least the + * keys in the given KeySet. + * + * Note that this can return true for multiple KeySets. + */ + public boolean packageIsSignedBy(String packageName, KeySet ks) { + synchronized (mLockObject) { + PackageSetting pkg = mPackages.get(packageName); + if (pkg == null) { + throw new NullPointerException("Invalid package name"); + } + if (pkg.keySetData == null) { + throw new NullPointerException("Package has no KeySet data"); + } + long id = getIdByKeySetLocked(ks); + return pkg.keySetData.packageIsSignedBy(id); + } + } + + /* + * This informs the system that the given package has defined a KeySet + * in its manifest that a) contains the given keys and b) is named + * alias by that package. + */ + public void addDefinedKeySetToPackage(String packageName, + Set<PublicKey> keys, String alias) { + if ((packageName == null) || (keys == null) || (alias == null)) { + Log.e(TAG, "Got null argument for a defined keyset, ignoring!"); + return; + } + synchronized (mLockObject) { + KeySet ks = addKeySetLocked(keys); + PackageSetting pkg = mPackages.get(packageName); + if (pkg == null) { + throw new NullPointerException("Unknown package"); + } + long id = getIdByKeySetLocked(ks); + pkg.keySetData.addDefinedKeySet(id, alias); + } + } + + /* + * Similar to the above, this informs the system that the given package + * was signed by the provided KeySet. + */ + public void addSigningKeySetToPackage(String packageName, + Set<PublicKey> signingKeys) { + if ((packageName == null) || (signingKeys == null)) { + Log.e(TAG, "Got null argument for a signing keyset, ignoring!"); + return; + } + synchronized (mLockObject) { + // add the signing KeySet + KeySet ks = addKeySetLocked(signingKeys); + long id = getIdByKeySetLocked(ks); + Set<Long> publicKeyIds = mKeySetMapping.get(id); + if (publicKeyIds == null) { + throw new NullPointerException("Got invalid KeySet id"); + } + + // attach it to the package + PackageSetting pkg = mPackages.get(packageName); + if (pkg == null) { + throw new NullPointerException("No such package!"); + } + pkg.keySetData.addSigningKeySet(id); + + // for each KeySet the package defines which is a subset of + // the one above, add the KeySet id to the package's signing KeySets + for (Long keySetID : pkg.keySetData.getDefinedKeySets()) { + Set<Long> definedKeys = mKeySetMapping.get(keySetID); + if (publicKeyIds.contains(definedKeys)) { + pkg.keySetData.addSigningKeySet(keySetID); + } + } + } + } + + /* + * Fetches the stable identifier associated with the given KeySet. + * + * Returns KEYSET_NOT_FOUND if the KeySet... wasn't found. + */ + public long getIdByKeySet(KeySet ks) { + synchronized (mLockObject) { + return getIdByKeySetLocked(ks); + } + } + + private long getIdByKeySetLocked(KeySet ks) { + for (int keySetIndex = 0; keySetIndex < mKeySets.size(); keySetIndex++) { + KeySet value = mKeySets.valueAt(keySetIndex); + if (ks.equals(value)) { + return mKeySets.keyAt(keySetIndex); + } + } + return KEYSET_NOT_FOUND; + } + + /* + * Fetches the KeySet corresponding to the given stable identifier. + * + * Returns KEYSET_NOT_FOUND if the identifier doesn't identify a KeySet. + */ + public KeySet getKeySetById(long id) { + synchronized (mLockObject) { + return mKeySets.get(id); + } + } + + /* + * Fetches the KeySet that a given package refers to by the provided alias. + * + * If the package isn't known to us, throws an IllegalArgumentException. + * Returns null if the alias isn't known to us. + */ + public KeySet getKeySetByAliasAndPackageName(String packageName, String alias) { + synchronized (mLockObject) { + PackageSetting p = mPackages.get(packageName); + if (p == null) { + throw new NullPointerException("Unknown package"); + } + if (p.keySetData == null) { + throw new IllegalArgumentException("Package has no keySet data"); + } + long keySetId = p.keySetData.getAliases().get(alias); + return mKeySets.get(keySetId); + } + } + + /* + * Fetches all the known KeySets that signed the given package. + * + * If the package is unknown to us, throws an IllegalArgumentException. + */ + public Set<KeySet> getSigningKeySetsByPackageName(String packageName) { + synchronized (mLockObject) { + Set<KeySet> signingKeySets = new HashSet<KeySet>(); + PackageSetting p = mPackages.get(packageName); + if (p == null) { + throw new NullPointerException("Unknown package"); + } + if (p.keySetData == null) { + throw new IllegalArgumentException("Package has no keySet data"); + } + for (long l : p.keySetData.getSigningKeySets()) { + signingKeySets.add(mKeySets.get(l)); + } + return signingKeySets; + } + } + + /* + * Creates a new KeySet corresponding to the given keys. + * + * If the PublicKeys aren't known to the system, this adds them. Otherwise, + * they're deduped. + * + * If the KeySet isn't known to the system, this adds that and creates the + * mapping to the PublicKeys. If it is known, then it's deduped. + * + * Throws if the provided set is null. + */ + private KeySet addKeySetLocked(Set<PublicKey> keys) { + if (keys == null) { + throw new NullPointerException("Provided keys cannot be null"); + } + // add each of the keys in the provided set + Set<Long> addedKeyIds = new HashSet<Long>(keys.size()); + for (PublicKey k : keys) { + long id = addPublicKeyLocked(k); + addedKeyIds.add(id); + } + + // check to see if the resulting keyset is new + long existingKeySetId = getIdFromKeyIdsLocked(addedKeyIds); + if (existingKeySetId != KEYSET_NOT_FOUND) { + return mKeySets.get(existingKeySetId); + } + + // create the KeySet object + KeySet ks = new KeySet(new Binder()); + // get the first unoccupied slot in mKeySets + long id = getFreeKeySetIDLocked(); + // add the KeySet object to it + mKeySets.put(id, ks); + // add the stable key ids to the mapping + mKeySetMapping.put(id, addedKeyIds); + // go home + return ks; + } + + /* + * Adds the given PublicKey to the system, deduping as it goes. + */ + private long addPublicKeyLocked(PublicKey key) { + // check if the public key is new + long existingKeyId = getIdForPublicKeyLocked(key); + if (existingKeyId != PUBLIC_KEY_NOT_FOUND) { + return existingKeyId; + } + // if it's new find the first unoccupied slot in the public keys + long id = getFreePublicKeyIdLocked(); + // add the public key to it + mPublicKeys.put(id, key); + // return the stable identifier + return id; + } + + /* + * Finds the stable identifier for a KeySet based on a set of PublicKey stable IDs. + * + * Returns KEYSET_NOT_FOUND if there isn't one. + */ + private long getIdFromKeyIdsLocked(Set<Long> publicKeyIds) { + for (int keyMapIndex = 0; keyMapIndex < mKeySetMapping.size(); keyMapIndex++) { + Set<Long> value = mKeySetMapping.valueAt(keyMapIndex); + if (value.equals(publicKeyIds)) { + return mKeySetMapping.keyAt(keyMapIndex); + } + } + return KEYSET_NOT_FOUND; + } + + /* + * Finds the stable identifier for a PublicKey or PUBLIC_KEY_NOT_FOUND. + */ + private long getIdForPublicKeyLocked(PublicKey k) { + String encodedPublicKey = new String(k.getEncoded()); + for (int publicKeyIndex = 0; publicKeyIndex < mPublicKeys.size(); publicKeyIndex++) { + PublicKey value = mPublicKeys.valueAt(publicKeyIndex); + String encodedExistingKey = new String(value.getEncoded()); + if (encodedPublicKey.equals(encodedExistingKey)) { + return mPublicKeys.keyAt(publicKeyIndex); + } + } + return PUBLIC_KEY_NOT_FOUND; + } + + /* + * Gets an unused stable identifier for a KeySet. + */ + private long getFreeKeySetIDLocked() { + lastIssuedKeySetId += 1; + return lastIssuedKeySetId; + } + + /* + * Same as above, but for public keys. + */ + private long getFreePublicKeyIdLocked() { + lastIssuedKeyId += 1; + return lastIssuedKeyId; + } + + public void removeAppKeySetData(String packageName) { + synchronized (mLockObject) { + // Get the package's known keys and KeySets + Set<Long> deletableKeySets = getKnownKeySetsByPackageNameLocked(packageName); + Set<Long> deletableKeys = new HashSet<Long>(); + Set<Long> knownKeys = null; + for (Long ks : deletableKeySets) { + knownKeys = mKeySetMapping.get(ks); + if (knownKeys != null) { + deletableKeys.addAll(knownKeys); + } + } + + // Now remove the keys and KeySets known to any other package + for (String pkgName : mPackages.keySet()) { + if (pkgName.equals(packageName)) { + continue; + } + Set<Long> knownKeySets = getKnownKeySetsByPackageNameLocked(pkgName); + deletableKeySets.removeAll(knownKeySets); + knownKeys = new HashSet<Long>(); + for (Long ks : knownKeySets) { + knownKeys = mKeySetMapping.get(ks); + if (knownKeys != null) { + deletableKeys.removeAll(knownKeys); + } + } + } + + // The remaining keys and KeySets are not known to any other + // application and so can be safely deleted. + for (Long ks : deletableKeySets) { + mKeySets.delete(ks); + mKeySetMapping.delete(ks); + } + for (Long keyId : deletableKeys) { + mPublicKeys.delete(keyId); + } + + // Now remove them from the KeySets known to each package + for (String pkgName : mPackages.keySet()) { + PackageSetting p = mPackages.get(packageName); + for (Long ks : deletableKeySets) { + p.keySetData.removeSigningKeySet(ks); + p.keySetData.removeDefinedKeySet(ks); + } + } + } + } + + private Set<Long> getKnownKeySetsByPackageNameLocked(String packageName) { + PackageSetting p = mPackages.get(packageName); + if (p == null) { + throw new NullPointerException("Unknown package"); + } + if (p.keySetData == null) { + throw new IllegalArgumentException("Package has no keySet data"); + } + Set<Long> knownKeySets = new HashSet<Long>(); + for (long ks : p.keySetData.getSigningKeySets()) { + knownKeySets.add(ks); + } + for (long ks : p.keySetData.getDefinedKeySets()) { + knownKeySets.add(ks); + } + return knownKeySets; + } + + public String encodePublicKey(PublicKey k) throws IOException { + return new String(Base64.encode(k.getEncoded(), 0)); + } + + public void dump(PrintWriter pw) { + synchronized (mLockObject) { + pw.println(" Dumping KeySetManager"); + for (Map.Entry<String, PackageSetting> e : mPackages.entrySet()) { + String packageName = e.getKey(); + PackageSetting pkg = e.getValue(); + pw.print(" ["); pw.print(packageName); pw.println("]"); + if (pkg.keySetData != null) { + pw.print(" Defined KeySets:"); + for (long keySetId : pkg.keySetData.getDefinedKeySets()) { + pw.print(" "); pw.print(Long.toString(keySetId)); + } + pw.println(""); + pw.print(" Signing KeySets:"); + for (long keySetId : pkg.keySetData.getSigningKeySets()) { + pw.print(" "); pw.print(Long.toString(keySetId)); + } + pw.println(""); + } + } + } + } + + void writeKeySetManagerLPr(XmlSerializer serializer) throws IOException { + serializer.startTag(null, "keyset-settings"); + writePublicKeysLPr(serializer); + writeKeySetsLPr(serializer); + serializer.startTag(null, "lastIssuedKeyId"); + serializer.attribute(null, "value", Long.toString(lastIssuedKeyId)); + serializer.endTag(null, "lastIssuedKeyId"); + serializer.startTag(null, "lastIssuedKeySetId"); + serializer.attribute(null, "value", Long.toString(lastIssuedKeySetId)); + serializer.endTag(null, "lastIssuedKeySetId"); + serializer.endTag(null, "keyset-settings"); + } + + void writePublicKeysLPr(XmlSerializer serializer) throws IOException { + serializer.startTag(null, "keys"); + for (int pKeyIndex = 0; pKeyIndex < mPublicKeys.size(); pKeyIndex++) { + long id = mPublicKeys.keyAt(pKeyIndex); + PublicKey key = mPublicKeys.valueAt(pKeyIndex); + String encodedKey = encodePublicKey(key); + serializer.startTag(null, "public-key"); + serializer.attribute(null, "identifier", Long.toString(id)); + serializer.attribute(null, "value", encodedKey); + serializer.endTag(null, "public-key"); + } + serializer.endTag(null, "keys"); + } + + void writeKeySetsLPr(XmlSerializer serializer) throws IOException { + serializer.startTag(null, "keysets"); + for (int keySetIndex = 0; keySetIndex < mKeySetMapping.size(); keySetIndex++) { + long id = mKeySetMapping.keyAt(keySetIndex); + Set<Long> keys = mKeySetMapping.valueAt(keySetIndex); + serializer.startTag(null, "keyset"); + serializer.attribute(null, "identifier", Long.toString(id)); + for (long keyId : keys) { + serializer.startTag(null, "key-id"); + serializer.attribute(null, "identifier", Long.toString(keyId)); + serializer.endTag(null, "key-id"); + } + serializer.endTag(null, "keyset"); + } + serializer.endTag(null, "keysets"); + } + + void readKeySetsLPw(XmlPullParser parser) + throws XmlPullParserException, IOException { + int type; + long currentKeySetId = 0; + while ((type = parser.next()) != XmlPullParser.END_DOCUMENT) { + if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) { + continue; + } + final String tagName = parser.getName(); + if (tagName.equals("keys")) { + readKeysLPw(parser); + } else if (tagName.equals("keysets")) { + readKeySetListLPw(parser); + } else { + PackageManagerService.reportSettingsProblem(Log.WARN, + "Could not read KeySets for KeySetManager!"); + } + } + } + + void readKeysLPw(XmlPullParser parser) + throws XmlPullParserException, IOException { + int outerDepth = parser.getDepth(); + int type; + while ((type = parser.next()) != XmlPullParser.END_DOCUMENT + && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) { + if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) { + continue; + } + final String tagName = parser.getName(); + if (tagName.equals("public-key")) { + readPublicKeyLPw(parser); + } else if (tagName.equals("lastIssuedKeyId")) { + lastIssuedKeyId = Long.parseLong(parser.getAttributeValue(null, "value")); + } else if (tagName.equals("lastIssuedKeySetId")) { + lastIssuedKeySetId = Long.parseLong(parser.getAttributeValue(null, "value")); + } else { + PackageManagerService.reportSettingsProblem(Log.WARN, + "Could not read keys for KeySetManager!"); + } + } + } + + void readKeySetListLPw(XmlPullParser parser) + throws XmlPullParserException, IOException { + int outerDepth = parser.getDepth(); + int type; + long currentKeySetId = 0; + while ((type = parser.next()) != XmlPullParser.END_DOCUMENT + && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) { + if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) { + continue; + } + final String tagName = parser.getName(); + if (tagName.equals("keyset")) { + currentKeySetId = readIdentifierLPw(parser); + mKeySets.put(currentKeySetId, new KeySet(new Binder())); + mKeySetMapping.put(currentKeySetId, new HashSet<Long>()); + } else if (tagName.equals("key-id")) { + long id = readIdentifierLPw(parser); + mKeySetMapping.get(currentKeySetId).add(id); + } else { + PackageManagerService.reportSettingsProblem(Log.WARN, + "Could not read KeySets for KeySetManager!"); + } + } + } + + long readIdentifierLPw(XmlPullParser parser) + throws XmlPullParserException { + return Long.parseLong(parser.getAttributeValue(null, "identifier")); + } + + void readPublicKeyLPw(XmlPullParser parser) + throws XmlPullParserException { + String encodedID = parser.getAttributeValue(null, "identifier"); + long identifier = Long.parseLong(encodedID); + String encodedPublicKey = parser.getAttributeValue(null, "value"); + PublicKey pub = PackageParser.parsePublicKey(encodedPublicKey); + if (pub == null) { + PackageManagerService.reportSettingsProblem(Log.WARN, + "Could not read public key for KeySetManager!"); + } else { + mPublicKeys.put(identifier, pub); + } + } +}
\ No newline at end of file diff --git a/services/java/com/android/server/pm/PackageKeySetData.java b/services/java/com/android/server/pm/PackageKeySetData.java new file mode 100644 index 0000000..cb60621 --- /dev/null +++ b/services/java/com/android/server/pm/PackageKeySetData.java @@ -0,0 +1,125 @@ +/* + * Copyright (C) 2013 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 com.android.server.pm; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +public class PackageKeySetData { + + private long[] mSigningKeySets; + + private long[] mDefinedKeySets; + + private final Map<String, Long> mKeySetAliases; + + PackageKeySetData() { + mSigningKeySets = new long[0]; + mDefinedKeySets = new long[0]; + mKeySetAliases = new HashMap<String, Long>(); + } + + PackageKeySetData(PackageKeySetData original) { + mSigningKeySets = original.getSigningKeySets().clone(); + mDefinedKeySets = original.getDefinedKeySets().clone(); + mKeySetAliases = new HashMap<String, Long>(); + mKeySetAliases.putAll(original.getAliases()); + } + + public void addSigningKeySet(long ks) { + // deduplicate + for (long knownKeySet : mSigningKeySets) { + if (ks == knownKeySet) { + return; + } + } + int end = mSigningKeySets.length; + mSigningKeySets = Arrays.copyOf(mSigningKeySets, end + 1); + mSigningKeySets[end] = ks; + } + + public void removeSigningKeySet(long ks) { + if (packageIsSignedBy(ks)) { + long[] keysets = new long[mSigningKeySets.length - 1]; + int index = 0; + for (long signingKeySet : mSigningKeySets) { + if (signingKeySet != ks) { + keysets[index] = signingKeySet; + index += 1; + } + } + mSigningKeySets = keysets; + } + } + + public void addDefinedKeySet(long ks, String alias) { + // deduplicate + for (long knownKeySet : mDefinedKeySets) { + if (ks == knownKeySet) { + return; + } + } + int end = mDefinedKeySets.length; + mDefinedKeySets = Arrays.copyOf(mDefinedKeySets, end + 1); + mDefinedKeySets[end] = ks; + mKeySetAliases.put(alias, ks); + } + + public void removeDefinedKeySet(long ks) { + if (mKeySetAliases.containsValue(ks)) { + long[] keysets = new long[mDefinedKeySets.length - 1]; + int index = 0; + for (long definedKeySet : mDefinedKeySets) { + if (definedKeySet != ks) { + keysets[index] = definedKeySet; + index += 1; + } + } + mDefinedKeySets = keysets; + for (String alias : mKeySetAliases.keySet()) { + if (mKeySetAliases.get(alias) == ks) { + mKeySetAliases.remove(alias); + break; + } + } + } + } + + public boolean packageIsSignedBy(long ks) { + for (long signingKeySet : mSigningKeySets) { + if (ks == signingKeySet) { + return true; + } + } + return false; + } + + public long[] getSigningKeySets() { + return mSigningKeySets; + } + + public long[] getDefinedKeySets() { + return mDefinedKeySets; + } + + public Map<String, Long> getAliases() { + return mKeySetAliases; + } +}
\ No newline at end of file diff --git a/services/java/com/android/server/pm/PackageManagerService.java b/services/java/com/android/server/pm/PackageManagerService.java index ae9260a..28bb637 100644 --- a/services/java/com/android/server/pm/PackageManagerService.java +++ b/services/java/com/android/server/pm/PackageManagerService.java @@ -70,6 +70,7 @@ import android.content.pm.IPackageManager; import android.content.pm.IPackageMoveObserver; import android.content.pm.IPackageStatsObserver; import android.content.pm.InstrumentationInfo; +import android.content.pm.KeySet; import android.content.pm.PackageCleanItem; import android.content.pm.PackageInfo; import android.content.pm.PackageInfoLite; @@ -113,10 +114,12 @@ import android.os.UserHandle; import android.os.UserManager; import android.os.Environment.UserEnvironment; import android.security.SystemKeyStore; +import android.util.Base64; import android.util.DisplayMetrics; import android.util.EventLog; import android.util.Log; import android.util.LogPrinter; +import android.util.LongSparseArray; import android.util.Slog; import android.util.SparseArray; import android.util.Xml; @@ -3302,10 +3305,12 @@ public class PackageManagerService extends IPackageManager.Stub { pp.setOnlyCoreApps(mOnlyCore); final PackageParser.Package pkg = pp.parsePackage(scanFile, scanPath, mMetrics, parseFlags); + if (pkg == null) { mLastScanError = pp.getParseError(); return null; } + PackageSetting ps = null; PackageSetting updatedPkg; // reader @@ -3452,6 +3457,7 @@ public class PackageManagerService extends IPackageManager.Stub { } else { resPath = pkg.mScanPath; } + codePath = pkg.mScanPath; // Set application objects path explicitly. setApplicationInfoPaths(pkg, codePath, resPath); @@ -4488,6 +4494,24 @@ public class PackageManagerService extends IPackageManager.Stub { } } + // Add the package's KeySets to the global KeySetManager + KeySetManager ksm = mSettings.mKeySetManager; + try { + ksm.addSigningKeySetToPackage(pkg.packageName, pkg.mSigningKeys); + if (pkg.mKeySetMapping != null) { + for (Map.Entry<String, Set<PublicKey>> entry : pkg.mKeySetMapping.entrySet()) { + if (entry.getValue() != null) { + ksm.addDefinedKeySetToPackage(pkg.packageName, + entry.getValue(), entry.getKey()); + } + } + } + } catch (NullPointerException e) { + Slog.e(TAG, "Could not add KeySet to " + pkg.packageName, e); + } catch (IllegalArgumentException e) { + Slog.e(TAG, "Could not add KeySet to malformed package" + pkg.packageName, e); + } + int N = pkg.providers.size(); StringBuilder r = null; int i; @@ -8802,7 +8826,9 @@ public class PackageManagerService extends IPackageManager.Stub { removePackageDataLI(ps, outInfo, flags, writeSettings); return true; } + boolean ret = false; + mSettings.mKeySetManager.removeAppKeySetData(packageName); if (isSystemApp(ps)) { if (DEBUG_REMOVE) Slog.d(TAG, "Removing system package:" + ps.name); // When an updated system application is deleted we delete the existing resources as well and @@ -8815,6 +8841,7 @@ public class PackageManagerService extends IPackageManager.Stub { ret = deleteInstalledPackageLI(ps, deleteCodeAndResources, flags, outInfo, writeSettings); } + return ret; } @@ -9624,6 +9651,8 @@ public class PackageManagerService extends IPackageManager.Stub { public static final int DUMP_PREFERRED_XML = 1 << 10; + public static final int DUMP_KEYSETS = 1 << 11; + public static final int OPTION_SHOW_FILTERS = 1 << 0; private int mTypes; @@ -9721,6 +9750,7 @@ public class PackageManagerService extends IPackageManager.Stub { pw.println(" m[essages]: print collected runtime messages"); pw.println(" v[erifiers]: print package verifier info"); pw.println(" <package.name>: info about given package"); + pw.println(" k[eysets]: print known keysets"); return; } else if ("-f".equals(opt)) { dumpState.setOptionEnabled(DumpState.OPTION_SHOW_FILTERS); @@ -9762,6 +9792,8 @@ public class PackageManagerService extends IPackageManager.Stub { dumpState.setDump(DumpState.DUMP_MESSAGES); } else if ("v".equals(cmd) || "verifiers".equals(cmd)) { dumpState.setDump(DumpState.DUMP_VERIFIERS); + } else if ("k".equals(cmd) || "keysets".equals(cmd)) { + dumpState.setDump(DumpState.DUMP_KEYSETS); } } @@ -9905,7 +9937,14 @@ public class PackageManagerService extends IPackageManager.Stub { } } } - + + if (dumpState.isDumping(DumpState.DUMP_KEYSETS)) { + if (dumpState.onTitlePrinted()) { + pw.println(" "); + } + mSettings.mKeySetManager.dump(pw); + } + if (dumpState.isDumping(DumpState.DUMP_PACKAGES)) { mSettings.dumpPackagesLPr(pw, packageName, dumpState); } diff --git a/services/java/com/android/server/pm/PackageSettingBase.java b/services/java/com/android/server/pm/PackageSettingBase.java index e64ec6d..b3fd60c 100644 --- a/services/java/com/android/server/pm/PackageSettingBase.java +++ b/services/java/com/android/server/pm/PackageSettingBase.java @@ -65,6 +65,8 @@ class PackageSettingBase extends GrantedPermissions { boolean permissionsFixed; boolean haveGids; + PackageKeySetData keySetData = new PackageKeySetData(); + private static final PackageUserState DEFAULT_USER_STATE = new PackageUserState(); // Whether this package is currently stopped, thus can not be @@ -120,6 +122,9 @@ class PackageSettingBase extends GrantedPermissions { origPackage = base.origPackage; installerPackageName = base.installerPackageName; + + keySetData = new PackageKeySetData(base.keySetData); + } void init(File codePath, File resourcePath, String nativeLibraryPathString, @@ -170,6 +175,7 @@ class PackageSettingBase extends GrantedPermissions { userState.put(base.userState.keyAt(i), base.userState.valueAt(i)); } installStatus = base.installStatus; + keySetData = base.keySetData; } private PackageUserState modifyUserState(int userId) { diff --git a/services/java/com/android/server/pm/Settings.java b/services/java/com/android/server/pm/Settings.java index 2e48074..a9c2ea1 100644 --- a/services/java/com/android/server/pm/Settings.java +++ b/services/java/com/android/server/pm/Settings.java @@ -43,6 +43,7 @@ import android.content.Context; import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.ComponentInfo; +import android.content.pm.KeySet; import android.content.pm.PackageCleanItem; import android.content.pm.PackageManager; import android.content.pm.PackageParser; @@ -57,6 +58,7 @@ import android.os.FileUtils; import android.os.Process; import android.os.UserHandle; import android.util.Log; +import android.util.LongSparseArray; import android.util.Slog; import android.util.SparseArray; import android.util.Xml; @@ -67,6 +69,7 @@ import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.PrintWriter; +import java.security.PublicKey; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; @@ -119,6 +122,8 @@ final class Settings { private final HashMap<String, PackageSetting> mDisabledSysPackages = new HashMap<String, PackageSetting>(); + private static int mFirstAvailableUid = 0; + // These are the last platform API version we were using for // the apps installed on internal and external storage. It is // used to grant newer permissions one time during a system upgrade. @@ -177,6 +182,9 @@ final class Settings { private final Context mContext; private final File mSystemDir; + + public final KeySetManager mKeySetManager = new KeySetManager(mPackages); + Settings(Context context) { this(context, Environment.getDataDirectory()); } @@ -729,6 +737,7 @@ final class Settings { } else { mOtherUserIds.remove(uid); } + setFirstAvailableUid(uid+1); } private void replaceUserIdLPw(int uid, Object obj) { @@ -1331,6 +1340,8 @@ final class Settings { } } + mKeySetManager.writeKeySetManagerLPr(serializer); + serializer.endTag(null, "packages"); serializer.endDocument(); @@ -1521,9 +1532,31 @@ final class Settings { serializer.endTag(null, "perms"); } + writeSigningKeySetsLPr(serializer, pkg.keySetData); + writeKeySetAliasesLPr(serializer, pkg.keySetData); + serializer.endTag(null, "package"); } + void writeSigningKeySetsLPr(XmlSerializer serializer, + PackageKeySetData data) throws IOException { + for (long id : data.getSigningKeySets()) { + serializer.startTag(null, "signing-keyset"); + serializer.attribute(null, "identifier", Long.toString(id)); + serializer.endTag(null, "signing-keyset"); + } + } + + void writeKeySetAliasesLPr(XmlSerializer serializer, + PackageKeySetData data) throws IOException { + for (Map.Entry<String, Long> e: data.getAliases().entrySet()) { + serializer.startTag(null, "defined-keyset"); + serializer.attribute(null, "alias", e.getKey()); + serializer.attribute(null, "identifier", Long.toString(e.getValue())); + serializer.endTag(null, "defined-keyset"); + } + } + void writePermissionLPr(XmlSerializer serializer, BasePermission bp) throws XmlPullParserException, java.io.IOException { if (bp.type != BasePermission.TYPE_BUILTIN && bp.sourcePackage != null) { @@ -1698,6 +1731,8 @@ final class Settings { } else if (TAG_READ_EXTERNAL_STORAGE.equals(tagName)) { final String enforcement = parser.getAttributeValue(null, ATTR_ENFORCEMENT); mReadExternalStorageEnforced = "1".equals(enforcement); + } else if (tagName.equals("keyset-settings")) { + mKeySetManager.readKeySetsLPw(parser); } else { Slog.w(PackageManagerService.TAG, "Unknown element under <packages>: " + parser.getName()); @@ -2293,12 +2328,22 @@ final class Settings { } else if (tagName.equals("perms")) { readGrantedPermissionsLPw(parser, packageSetting.grantedPermissions); packageSetting.permissionsFixed = true; + } else if (tagName.equals("signing-keyset")) { + long id = Long.parseLong(parser.getAttributeValue(null, "identifier")); + packageSetting.keySetData.addSigningKeySet(id); + Slog.e(TAG, "Adding signing keyset " + Long.toString(id) + " to " + name); + } else if (tagName.equals("defined-keyset")) { + long id = Long.parseLong(parser.getAttributeValue(null, "identifier")); + String alias = parser.getAttributeValue(null, "alias"); + packageSetting.keySetData.addDefinedKeySet(id, alias); } else { PackageManagerService.reportSettingsProblem(Log.WARN, "Unknown element under <package>: " + parser.getName()); XmlUtils.skipCurrentTag(parser); } } + + } else { XmlUtils.skipCurrentTag(parser); } @@ -2477,11 +2522,18 @@ final class Settings { file.delete(); } + // This should be called (at least) whenever an application is removed + private void setFirstAvailableUid(int uid) { + if (uid > mFirstAvailableUid) { + mFirstAvailableUid = uid; + } + } + // Returns -1 if we could not find an available UserId to assign private int newUserIdLPw(Object obj) { // Let's be stupidly inefficient for now... final int N = mUserIds.size(); - for (int i = 0; i < N; i++) { + for (int i = mFirstAvailableUid; i < N; i++) { if (mUserIds.get(i) == null) { mUserIds.set(i, obj); return Process.FIRST_APPLICATION_UID + i; diff --git a/services/java/com/android/server/wm/AppWindowAnimator.java b/services/java/com/android/server/wm/AppWindowAnimator.java index 297324b..bbfec97 100644 --- a/services/java/com/android/server/wm/AppWindowAnimator.java +++ b/services/java/com/android/server/wm/AppWindowAnimator.java @@ -5,7 +5,6 @@ package com.android.server.wm; import android.graphics.Matrix; import android.util.Slog; import android.view.Display; -import android.view.Surface; import android.view.SurfaceControl; import android.view.WindowManagerPolicy; import android.view.animation.Animation; diff --git a/services/java/com/android/server/wm/AppWindowToken.java b/services/java/com/android/server/wm/AppWindowToken.java index fbb5013..8cc1d02 100644 --- a/services/java/com/android/server/wm/AppWindowToken.java +++ b/services/java/com/android/server/wm/AppWindowToken.java @@ -30,6 +30,10 @@ import android.view.View; import android.view.WindowManager; import java.io.PrintWriter; +import java.util.ArrayList; + +class AppTokenList extends ArrayList<AppWindowToken> { +} /** * Version of WindowToken that is specifically for a particular application (or diff --git a/services/java/com/android/server/wm/DisplayContent.java b/services/java/com/android/server/wm/DisplayContent.java index 59e4b0e..bcefc41 100644 --- a/services/java/com/android/server/wm/DisplayContent.java +++ b/services/java/com/android/server/wm/DisplayContent.java @@ -16,6 +16,7 @@ package com.android.server.wm; +import android.graphics.Rect; import android.view.Display; import android.view.DisplayInfo; @@ -33,6 +34,7 @@ class DisplayContentList extends ArrayList<DisplayContent> { * WindowManagerService.mWindowMap. */ class DisplayContent { +// private final static String TAG = "DisplayContent"; /** Unique identifier of this stack. */ private final int mDisplayId; @@ -67,6 +69,25 @@ class DisplayContent { final boolean isDefaultDisplay; /** + * Window tokens that are in the process of exiting, but still + * on screen for animations. + */ + final ArrayList<WindowToken> mExitingTokens = new ArrayList<WindowToken>(); + + /** + * Application tokens that are in the process of exiting, but still + * on screen for animations. + */ + final AppTokenList mExitingAppTokens = new AppTokenList(); + + private ArrayList<StackBox> mStackBoxes = new ArrayList<StackBox>(); + + /** + * Sorted most recent at top, oldest at [0]. + */ + ArrayList<Task> mTmpTasks = new ArrayList<Task>(); + + /** * @param display May not be null. */ DisplayContent(Display display) { @@ -92,10 +113,104 @@ class DisplayContent { return mDisplayInfo; } + /** + * Retrieve the tasks on this display in stack order from the topmost TaskStack down. + * Note that the order of TaskStacks in the same StackBox is defined within StackBox. + * @return All the Tasks, in order, on this display. + */ + ArrayList<Task> getTasks() { + mTmpTasks.clear(); + int numBoxes = mStackBoxes.size(); + for (int boxNdx = 0; boxNdx < numBoxes; ++boxNdx) { + mTmpTasks.addAll(mStackBoxes.get(boxNdx).getTasks()); + } + return mTmpTasks; + } + public void updateDisplayInfo() { mDisplay.getDisplayInfo(mDisplayInfo); } + /** @return The number of tokens in all of the Tasks on this display. */ + int numTokens() { + getTasks(); + int count = 0; + for (int taskNdx = mTmpTasks.size() - 1; taskNdx >= 0; --taskNdx) { + count += mTmpTasks.get(taskNdx).mAppTokens.size(); + } + return count; + } + + /** Refer to {@link WindowManagerService#createStack(int, int, int, float)} */ + TaskStack createStack(int stackId, int relativeStackId, int position, float weight) { + TaskStack newStack = null; + if (mStackBoxes.isEmpty()) { + StackBox newBox = new StackBox(this, new Rect(0, 0, mDisplayInfo.logicalWidth, + mDisplayInfo.logicalHeight)); + mStackBoxes.add(newBox); + newStack = new TaskStack(stackId, newBox); + newBox.mStack = newStack; + } else { + int stackBoxNdx; + for (stackBoxNdx = mStackBoxes.size() - 1; stackBoxNdx >= 0; --stackBoxNdx) { + final StackBox box = mStackBoxes.get(stackBoxNdx); + if (position == StackBox.TASK_STACK_GOES_OVER + || position == StackBox.TASK_STACK_GOES_UNDER) { + // Position indicates a new box is added at top level only. + if (box.contains(relativeStackId)) { + final int offset = position == StackBox.TASK_STACK_GOES_OVER ? 1 : 0; + StackBox newBox = new StackBox(this, box.mBounds); + newStack = new TaskStack(stackId, newBox); + newBox.mStack = newStack; + mStackBoxes.add(stackBoxNdx + offset, newBox); + break; + } + } else { + // Remaining position values indicate a box must be split. + newStack = box.split(stackId, relativeStackId, position, weight); + if (newStack != null) { + break; + } + } + } + if (stackBoxNdx < 0) { + throw new IllegalArgumentException("createStack: stackId " + relativeStackId + + " not found."); + } + } + return newStack; + } + + /** Refer to {@link WindowManagerService#resizeStack(int, float)} */ + boolean resizeStack(int stackId, float weight) { + int stackBoxNdx; + for (stackBoxNdx = mStackBoxes.size() - 1; stackBoxNdx >= 0; --stackBoxNdx) { + final StackBox box = mStackBoxes.get(stackBoxNdx); + if (box.resize(stackId, weight)) { + return true; + } + } + return false; + } + + /** + * Reorder a StackBox within mStackBox. The StackBox to reorder is the one containing the + * specified TaskStack. + * @param stackId The TaskStack to reorder. + * @param toTop Move to the top of all StackBoxes if true, to the bottom if false. Only the + * topmost layer of StackBoxes, those in mStackBoxes can be reordered. + */ + void moveStackBox(int stackId, boolean toTop) { + for (int stackBoxNdx = mStackBoxes.size() - 1; stackBoxNdx >= 0; --stackBoxNdx) { + final StackBox box = mStackBoxes.get(stackBoxNdx); + if (box.contains(stackId)) { + mStackBoxes.remove(box); + mStackBoxes.add(toTop ? mStackBoxes.size() : 0, box); + return; + } + } + } + public void dump(String prefix, PrintWriter pw) { pw.print(prefix); pw.print("Display: mDisplayId="); pw.println(mDisplayId); final String subPrefix = " " + prefix; @@ -119,7 +234,48 @@ class DisplayContent { pw.print("x"); pw.print(mDisplayInfo.smallestNominalAppHeight); pw.print("-"); pw.print(mDisplayInfo.largestNominalAppWidth); pw.print("x"); pw.println(mDisplayInfo.largestNominalAppHeight); - pw.print(subPrefix); pw.print("layoutNeeded="); pw.print(layoutNeeded); + pw.print(subPrefix); pw.print("layoutNeeded="); pw.println(layoutNeeded); + for (int boxNdx = 0; boxNdx < mStackBoxes.size(); ++boxNdx) { + pw.print(prefix); pw.print("StackBox #"); pw.println(boxNdx); + mStackBoxes.get(boxNdx).dump(prefix + " ", pw); + } + int ndx = numTokens(); + if (ndx > 0) { + pw.println(); + pw.println(" Application tokens in Z order:"); + getTasks(); + for (int taskNdx = mTmpTasks.size() - 1; taskNdx >= 0; --taskNdx) { + AppTokenList tokens = mTmpTasks.get(taskNdx).mAppTokens; + for (int tokenNdx = tokens.size() - 1; tokenNdx >= 0; --tokenNdx) { + final AppWindowToken wtoken = tokens.get(tokenNdx); + pw.print(" App #"); pw.print(ndx--); + pw.print(' '); pw.print(wtoken); pw.println(":"); + wtoken.dump(pw, " "); + } + } + } + if (mExitingTokens.size() > 0) { + pw.println(); + pw.println(" Exiting tokens:"); + for (int i=mExitingTokens.size()-1; i>=0; i--) { + WindowToken token = mExitingTokens.get(i); + pw.print(" Exiting #"); pw.print(i); + pw.print(' '); pw.print(token); + pw.println(':'); + token.dump(pw, " "); + } + } + if (mExitingAppTokens.size() > 0) { + pw.println(); + pw.println(" Exiting application tokens:"); + for (int i=mExitingAppTokens.size()-1; i>=0; i--) { + WindowToken token = mExitingAppTokens.get(i); + pw.print(" Exiting App #"); pw.print(i); + pw.print(' '); pw.print(token); + pw.println(':'); + token.dump(pw, " "); + } + } pw.println(); } } diff --git a/services/java/com/android/server/wm/StackBox.java b/services/java/com/android/server/wm/StackBox.java new file mode 100644 index 0000000..4bdb406 --- /dev/null +++ b/services/java/com/android/server/wm/StackBox.java @@ -0,0 +1,234 @@ +/* + * Copyright (C) 2013 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 com.android.server.wm; + +import android.graphics.Rect; + +import java.io.PrintWriter; +import java.util.ArrayList; + +public class StackBox { + /** For use with {@link WindowManagerService#createStack} */ + public static final int TASK_STACK_GOES_BEFORE = 0; + public static final int TASK_STACK_GOES_AFTER = 1; + public static final int TASK_STACK_GOES_ABOVE = 2; + public static final int TASK_STACK_GOES_BELOW = 3; + public static final int TASK_STACK_GOES_OVER = 4; + public static final int TASK_STACK_GOES_UNDER = 5; + + /** The display this box sits in. */ + final DisplayContent mDisplayContent; + + /** Non-null indicates this is mFirst or mSecond of a parent StackBox. Null indicates this + * is this entire size of mDisplayContent. */ + StackBox mParent; + + /** First child, this is null exactly when mStack is non-null. */ + StackBox mFirst; + + /** Second child, this is null exactly when mStack is non-null. */ + StackBox mSecond; + + /** Stack of Tasks, this is null exactly when mFirst and mSecond are non-null. */ + TaskStack mStack; + + /** Content limits relative to the DisplayContent this sits in. */ + Rect mBounds; + + /** Relative orientation of mFirst and mSecond. */ + boolean mVertical; + + /** Dirty flag. Something inside this or some descendant of this has changed. */ + boolean layoutNeeded; + + /** Used to keep from reallocating a temporary array to hold the list of Tasks below */ + ArrayList<Task> mTmpTasks = new ArrayList<Task>(); + + StackBox(DisplayContent displayContent, Rect bounds) { + mDisplayContent = displayContent; + mBounds = bounds; + } + + /** Propagate #layoutNeeded bottom up. */ + void makeDirty() { + layoutNeeded = true; + if (mParent != null) { + mParent.makeDirty(); + } + } + + /** Propagate #layoutNeeded top down. */ + void makeClean() { + layoutNeeded = false; + if (mFirst != null) { + mFirst.makeClean(); + mSecond.makeClean(); + } + } + + /** + * Detremine if a particular TaskStack is in this StackBox or any of its descendants. + * @param stackId The TaskStack being considered. + * @return true if the specified TaskStack is in this box or its descendants. False otherwise. + */ + boolean contains(int stackId) { + if (mStack != null) { + return mStack.mStackId == stackId; + } + return mFirst.contains(stackId) || mSecond.contains(stackId); + } + + /** + * Create a new TaskStack relative to a specified one by splitting the StackBox containing + * the specified TaskStack into two children. The size and position each of the new StackBoxes + * is determined by the passed parameters. + * @param stackId The id of the new TaskStack to create. + * @param relativeStackId The id of the TaskStack to place the new one next to. + * @param position One of the static TASK_STACK_GOES_xxx positions defined in this class. + * @param weight The percentage size of the parent StackBox to devote to the new TaskStack. + * @return The new TaskStack. + */ + TaskStack split(int stackId, int relativeStackId, int position, float weight) { + if (mStack != null) { + if (mStack.mStackId == relativeStackId) { + // Found it! + TaskStack stack = new TaskStack(stackId, this); + TaskStack firstStack; + TaskStack secondStack; + int width, height, split; + switch (position) { + default: + case TASK_STACK_GOES_BEFORE: + case TASK_STACK_GOES_AFTER: + mVertical = false; + width = (int)(weight * mBounds.width()); + height = mBounds.height(); + if (position == TASK_STACK_GOES_BEFORE) { + firstStack = stack; + secondStack = mStack; + split = mBounds.left + width; + } else { + firstStack = mStack; + secondStack = stack; + split = mBounds.right - width; + } + break; + case TASK_STACK_GOES_ABOVE: + case TASK_STACK_GOES_BELOW: + mVertical = true; + width = mBounds.width(); + height = (int)(weight * mBounds.height()); + if (position == TASK_STACK_GOES_ABOVE) { + firstStack = stack; + secondStack = mStack; + split = mBounds.top + height; + } else { + firstStack = mStack; + secondStack = stack; + split = mBounds.bottom - height; + } + break; + } + mFirst = new StackBox(mDisplayContent, new Rect(mBounds.left, mBounds.top, + mVertical ? mBounds.right : split, mVertical ? split : mBounds.bottom)); + mFirst.mStack = firstStack; + mSecond = new StackBox(mDisplayContent, new Rect(mVertical ? mBounds.left : split, + mVertical ? split : mBounds.top, mBounds.right, mBounds.bottom)); + mSecond.mStack = secondStack; + mStack = null; + return stack; + } + // Not the intended TaskStack. + return null; + } + + // Propagate the split to see if the target task stack is in either sub box. + TaskStack stack = mFirst.split(stackId, relativeStackId, position, weight); + if (stack != null) { + return stack; + } + return mSecond.split(stackId, relativeStackId, position, weight); + } + + /** + * @return List of all Tasks underneath this StackBox. The order is currently mFirst followed + * by mSecond putting mSecond Tasks more recent than mFirst Tasks. + * TODO: Change to MRU ordering. + */ + ArrayList<Task> getTasks() { + mTmpTasks.clear(); + if (mStack != null) { + mTmpTasks.addAll(mStack.getTasks()); + } else { + mTmpTasks.addAll(mFirst.getTasks()); + mTmpTasks.addAll(mSecond.getTasks()); + } + return mTmpTasks; + } + + /** Combine a child StackBox into its parent. + * @param child The surviving child to be merge up into this StackBox. */ + void absorb(StackBox child) { + mFirst = child.mFirst; + mSecond = child.mSecond; + mStack = child.mStack; + layoutNeeded = true; + } + + /** Return the stackId of the first mFirst StackBox with a non-null mStack */ + int getStackId() { + if (mStack != null) { + return mStack.mStackId; + } + return mFirst.getStackId(); + } + + /** Remove this box and propagate its sibling's content up to their parent. + * @return The first stackId of the resulting StackBox. */ + int removeStack() { + if (mParent.mFirst == this) { + mParent.absorb(mParent.mSecond); + } else { + mParent.absorb(mParent.mFirst); + } + mParent.makeDirty(); + return getStackId(); + } + + /** TODO: */ + boolean resize(int stackId, float weight) { + return false; + } + + public void dump(String prefix, PrintWriter pw) { + pw.print(prefix); pw.print("mParent="); pw.println(mParent); + pw.print(prefix); pw.print("mFirst="); pw.println(mFirst); + pw.print(prefix); pw.print("mSecond="); pw.println(mSecond); + pw.print(prefix); pw.print("mBounds="); pw.print(mBounds.toShortString()); + pw.print("mVertical="); pw.print(mVertical); + pw.print("layoutNeeded="); pw.println(layoutNeeded); + if (mStack != null) { + pw.print(prefix); pw.print("mStack="); pw.println(mStack); + mStack.dump(prefix + " ", pw); + } else { + pw.print(prefix); pw.print("mFirst="); pw.println(mStack); + mFirst.dump(prefix + " ", pw); + pw.print(prefix); pw.print("mSecond="); pw.println(mStack); + mSecond.dump(prefix + " ", pw); + } + } +} diff --git a/services/java/com/android/server/wm/Task.java b/services/java/com/android/server/wm/Task.java new file mode 100644 index 0000000..81245c6 --- /dev/null +++ b/services/java/com/android/server/wm/Task.java @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2013 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 com.android.server.wm; + +class Task { +// private final String TAG = "TaskGroup"; + TaskStack mStack; + final AppTokenList mAppTokens = new AppTokenList(); + final int taskId; + + Task(AppWindowToken wtoken, TaskStack stack) { + taskId = wtoken.groupId; + mAppTokens.add(wtoken); + mStack = stack; + } + + DisplayContent getDisplayContent() { + return mStack.getDisplayContent(); + } + + void addAppToken(int addPos, AppWindowToken wtoken) { + mAppTokens.add(addPos, wtoken); + } + + boolean removeAppToken(AppWindowToken wtoken) { + mAppTokens.remove(wtoken); + if (mAppTokens.size() == 0) { + mStack.removeTask(this); + return true; + } + return false; + } + + @Override + public String toString() { + return "id=" + taskId + " appTokens=" + mAppTokens; + } +} diff --git a/services/java/com/android/server/wm/TaskGroup.java b/services/java/com/android/server/wm/TaskGroup.java new file mode 100644 index 0000000..1f1dd58 --- /dev/null +++ b/services/java/com/android/server/wm/TaskGroup.java @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2013 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 com.android.server.wm; + +import android.view.IApplicationToken; + +import java.util.ArrayList; + +public class TaskGroup { + public int taskId = -1; + public ArrayList<IApplicationToken> tokens = new ArrayList<IApplicationToken>(); + + @Override + public String toString() { + return "id=" + taskId + " tokens=" + tokens; + } +} diff --git a/services/java/com/android/server/wm/TaskStack.java b/services/java/com/android/server/wm/TaskStack.java new file mode 100644 index 0000000..753ef0d --- /dev/null +++ b/services/java/com/android/server/wm/TaskStack.java @@ -0,0 +1,113 @@ +/* + * Copyright (C) 2013 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 com.android.server.wm; + +import java.io.PrintWriter; +import java.util.ArrayList; + +public class TaskStack { + /** Unique identifier */ + final int mStackId; + + /** The display this stack sits under. */ + private final DisplayContent mDisplayContent; + + /** The Tasks that define this stack. Oldest Tasks are at the bottom. The ordering must match + * mTaskHistory in the ActivityStack with the same mStackId */ + private ArrayList<Task> mTasks = new ArrayList<Task>(); + + /** The StackBox this sits in. */ + private final StackBox mParent; + + TaskStack(int stackId, StackBox parent) { + mStackId = stackId; + mParent = parent; + mDisplayContent = mParent.mDisplayContent; + } + + DisplayContent getDisplayContent() { + return mDisplayContent; + } + + ArrayList<Task> getTasks() { + return mTasks; + } + + ArrayList<Task> merge(TaskStack stack) { + ArrayList<Task> taskLists = stack.mTasks; + taskLists.addAll(mTasks); + mTasks = taskLists; + return taskLists; + } + + /** + * Put a Task in this stack. Used for adding and moving. + * @param task The task to add. + * @param toTop Whether to add it to the top or bottom. + */ + void addTask(Task task, boolean toTop) { + mParent.makeDirty(); + mTasks.add(toTop ? mTasks.size() : 0, task); + mDisplayContent.moveStackBox(mStackId, toTop); + } + + void moveTaskToTop(Task task) { + mTasks.remove(task); + addTask(task, true); + } + + void moveTaskToBottom(Task task) { + mTasks.remove(task); + addTask(task, false); + } + + /** + * Delete a Task from this stack. If it is the last Task in the stack, remove this stack from + * its parent StackBox and merge the parent. + * @param task The Task to delete. + * @return True if #task was in this stack. + */ + boolean removeTask(Task task) { + mParent.makeDirty(); + if (mTasks.remove(task)) { + if (mTasks.size() == 0) { + mParent.removeStack(); + } + return true; + } + return false; + } + + int remove() { + return mParent.removeStack(); + } + + int numTokens() { + int count = 0; + for (int taskNdx = mTasks.size() - 1; taskNdx >= 0; --taskNdx) { + count += mTasks.get(taskNdx).mAppTokens.size(); + } + return count; + } + + public void dump(String prefix, PrintWriter pw) { + pw.print(prefix); pw.print("mStackId="); pw.println(mStackId); + for (int taskNdx = 0; taskNdx < mTasks.size(); ++taskNdx) { + pw.print(prefix); pw.println(mTasks.get(taskNdx)); + } + } +} diff --git a/services/java/com/android/server/wm/WindowAnimator.java b/services/java/com/android/server/wm/WindowAnimator.java index 3964782..b2aa8eb 100644 --- a/services/java/com/android/server/wm/WindowAnimator.java +++ b/services/java/com/android/server/wm/WindowAnimator.java @@ -21,7 +21,6 @@ import android.util.SparseIntArray; import android.util.TimeUtils; import android.util.TypedValue; import android.view.Display; -import android.view.Surface; import android.view.SurfaceControl; import android.view.WindowManagerPolicy; import android.view.animation.Animation; @@ -172,28 +171,34 @@ public class WindowAnimator { } } - private void updateAppWindowsLocked() { + private void updateAppWindowsLocked(int displayId) { int i; - final ArrayList<AppWindowToken> appTokens = mService.mAnimatingAppTokens; - final int NAT = appTokens.size(); - for (i=0; i<NAT; i++) { - final AppWindowAnimator appAnimator = appTokens.get(i).mAppAnimator; - final boolean wasAnimating = appAnimator.animation != null - && appAnimator.animation != AppWindowAnimator.sDummyAnimation; - if (appAnimator.stepAnimationLocked(mCurrentTime)) { - mAnimating = true; - } else if (wasAnimating) { - // stopped animating, do one more pass through the layout - setAppLayoutChanges(appAnimator, WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER, - "appToken " + appAnimator.mAppToken + " done"); - if (WindowManagerService.DEBUG_ANIM) Slog.v(TAG, - "updateWindowsApps...: done animating " + appAnimator.mAppToken); + final DisplayContent displayContent = mService.getDisplayContentLocked(displayId); + final ArrayList<Task> tasks = displayContent.getTasks(); + final int numTasks = tasks.size(); + for (int taskNdx = 0; taskNdx < numTasks; ++taskNdx) { + final AppTokenList tokens = tasks.get(taskNdx).mAppTokens; + final int numTokens = tokens.size(); + for (int tokenNdx = 0; tokenNdx < numTokens; ++tokenNdx) { + final AppWindowAnimator appAnimator = tokens.get(tokenNdx).mAppAnimator; + final boolean wasAnimating = appAnimator.animation != null + && appAnimator.animation != AppWindowAnimator.sDummyAnimation; + if (appAnimator.stepAnimationLocked(mCurrentTime)) { + mAnimating = true; + } else if (wasAnimating) { + // stopped animating, do one more pass through the layout + setAppLayoutChanges(appAnimator, WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER, + "appToken " + appAnimator.mAppToken + " done"); + if (WindowManagerService.DEBUG_ANIM) Slog.v(TAG, + "updateWindowsApps...: done animating " + appAnimator.mAppToken); + } } } - final int NEAT = mService.mExitingAppTokens.size(); + final AppTokenList exitingAppTokens = displayContent.mExitingAppTokens; + final int NEAT = exitingAppTokens.size(); for (i=0; i<NEAT; i++) { - final AppWindowAnimator appAnimator = mService.mExitingAppTokens.get(i).mAppAnimator; + final AppWindowAnimator appAnimator = exitingAppTokens.get(i).mAppAnimator; final boolean wasAnimating = appAnimator.animation != null && appAnimator.animation != AppWindowAnimator.sDummyAnimation; if (appAnimator.stepAnimationLocked(mCurrentTime)) { @@ -454,39 +459,43 @@ public class WindowAnimator { /** See if any windows have been drawn, so they (and others associated with them) can now be * shown. */ - private void testTokenMayBeDrawnLocked() { + private void testTokenMayBeDrawnLocked(int displayId) { // See if any windows have been drawn, so they (and others // associated with them) can now be shown. - final ArrayList<AppWindowToken> appTokens = mService.mAnimatingAppTokens; - final int NT = appTokens.size(); - for (int i=0; i<NT; i++) { - AppWindowToken wtoken = appTokens.get(i); - AppWindowAnimator appAnimator = wtoken.mAppAnimator; - final boolean allDrawn = wtoken.allDrawn; - if (allDrawn != appAnimator.allDrawn) { - appAnimator.allDrawn = allDrawn; - if (allDrawn) { - // The token has now changed state to having all - // windows shown... what to do, what to do? - if (appAnimator.freezingScreen) { - appAnimator.showAllWindowsLocked(); - mService.unsetAppFreezingScreenLocked(wtoken, false, true); - if (WindowManagerService.DEBUG_ORIENTATION) Slog.i(TAG, - "Setting mOrientationChangeComplete=true because wtoken " - + wtoken + " numInteresting=" + wtoken.numInterestingWindows - + " numDrawn=" + wtoken.numDrawnWindows); - // This will set mOrientationChangeComplete and cause a pass through layout. - setAppLayoutChanges(appAnimator, - WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER, - "testTokenMayBeDrawnLocked: freezingScreen"); - } else { - setAppLayoutChanges(appAnimator, - WindowManagerPolicy.FINISH_LAYOUT_REDO_ANIM, - "testTokenMayBeDrawnLocked"); - - // We can now show all of the drawn windows! - if (!mService.mOpeningApps.contains(wtoken)) { - mAnimating |= appAnimator.showAllWindowsLocked(); + final ArrayList<Task> tasks = mService.getDisplayContentLocked(displayId).getTasks(); + final int numTasks = tasks.size(); + for (int taskNdx = 0; taskNdx < numTasks; ++taskNdx) { + final AppTokenList tokens = tasks.get(taskNdx).mAppTokens; + final int numTokens = tokens.size(); + for (int tokenNdx = 0; tokenNdx < numTokens; ++tokenNdx) { + final AppWindowToken wtoken = tokens.get(tokenNdx); + AppWindowAnimator appAnimator = wtoken.mAppAnimator; + final boolean allDrawn = wtoken.allDrawn; + if (allDrawn != appAnimator.allDrawn) { + appAnimator.allDrawn = allDrawn; + if (allDrawn) { + // The token has now changed state to having all + // windows shown... what to do, what to do? + if (appAnimator.freezingScreen) { + appAnimator.showAllWindowsLocked(); + mService.unsetAppFreezingScreenLocked(wtoken, false, true); + if (WindowManagerService.DEBUG_ORIENTATION) Slog.i(TAG, + "Setting mOrientationChangeComplete=true because wtoken " + + wtoken + " numInteresting=" + wtoken.numInterestingWindows + + " numDrawn=" + wtoken.numDrawnWindows); + // This will set mOrientationChangeComplete and cause a pass through layout. + setAppLayoutChanges(appAnimator, + WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER, + "testTokenMayBeDrawnLocked: freezingScreen"); + } else { + setAppLayoutChanges(appAnimator, + WindowManagerPolicy.FINISH_LAYOUT_REDO_ANIM, + "testTokenMayBeDrawnLocked"); + + // We can now show all of the drawn windows! + if (!mService.mOpeningApps.contains(wtoken)) { + mAnimating |= appAnimator.showAllWindowsLocked(); + } } } } @@ -530,11 +539,10 @@ public class WindowAnimator { SurfaceControl.openTransaction(); SurfaceControl.setAnimationTransaction(); try { - updateAppWindowsLocked(); - final int numDisplays = mDisplayContentsAnimators.size(); for (int i = 0; i < numDisplays; i++) { final int displayId = mDisplayContentsAnimators.keyAt(i); + updateAppWindowsLocked(displayId); DisplayContentsAnimator displayAnimator = mDisplayContentsAnimators.valueAt(i); final ScreenRotationAnimation screenRotationAnimation = @@ -560,10 +568,11 @@ public class WindowAnimator { } } - testTokenMayBeDrawnLocked(); - for (int i = 0; i < numDisplays; i++) { final int displayId = mDisplayContentsAnimators.keyAt(i); + + testTokenMayBeDrawnLocked(displayId); + DisplayContentsAnimator displayAnimator = mDisplayContentsAnimators.valueAt(i); final ScreenRotationAnimation screenRotationAnimation = diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java index 9921f7c..71b0cb5 100644 --- a/services/java/com/android/server/wm/WindowManagerService.java +++ b/services/java/com/android/server/wm/WindowManagerService.java @@ -199,6 +199,7 @@ public class WindowManagerService extends IWindowManager.Stub static final boolean DEBUG_LAYOUT_REPEATS = true; static final boolean DEBUG_SURFACE_TRACE = false; static final boolean DEBUG_WINDOW_TRACE = false; + static final boolean DEBUG_TASK_MOVEMENT = false; static final boolean SHOW_SURFACE_ALLOC = false; static final boolean SHOW_TRANSACTIONS = false; static final boolean SHOW_LIGHT_TRANSACTIONS = false || SHOW_TRANSACTIONS; @@ -208,6 +209,9 @@ public class WindowManagerService extends IWindowManager.Stub static final boolean PROFILE_ORIENTATION = false; static final boolean localLOGV = DEBUG; + final static boolean REVERSE_ITERATOR = true; + final static boolean FORWARD_ITERATOR = false; + /** How much to multiply the policy's type layer, to reserve room * for multiple windows of the same type and Z-ordering adjustment * with TYPE_LAYER_OFFSET. */ @@ -336,34 +340,7 @@ public class WindowManagerService extends IWindowManager.Stub /** * Mapping from a token IBinder to a WindowToken object. */ - final HashMap<IBinder, WindowToken> mTokenMap = - new HashMap<IBinder, WindowToken>(); - - /** - * Window tokens that are in the process of exiting, but still - * on screen for animations. - */ - final ArrayList<WindowToken> mExitingTokens = new ArrayList<WindowToken>(); - - /** - * List controlling the ordering of windows in different applications which must - * be kept in sync with ActivityManager. - */ - final ArrayList<AppWindowToken> mAppTokens = new ArrayList<AppWindowToken>(); - - /** - * AppWindowTokens in the Z order they were in at the start of an animation. Between - * animations this list is maintained in the exact order of mAppTokens. If tokens - * are added to mAppTokens during an animation an attempt is made to insert them at the same - * logical location in this list. Note that this list is always in sync with mWindows. - */ - ArrayList<AppWindowToken> mAnimatingAppTokens = new ArrayList<AppWindowToken>(); - - /** - * Application tokens that are in the process of exiting, but still - * on screen for animations. - */ - final ArrayList<AppWindowToken> mExitingAppTokens = new ArrayList<AppWindowToken>(); + final HashMap<IBinder, WindowToken> mTokenMap = new HashMap<IBinder, WindowToken>(); /** * List of window tokens that have finished starting their application, @@ -448,9 +425,11 @@ public class WindowManagerService extends IWindowManager.Stub String mLastANRState; - /** All DisplayDontents in the world, kept here */ + /** All DisplayContents in the world, kept here */ private SparseArray<DisplayContent> mDisplayContents = new SparseArray<DisplayContent>(); + private final AllWindowsIterator mTmpWindowsIterator = new AllWindowsIterator(); + int mRotation = 0; int mForcedAppOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED; boolean mAltOrientation = false; @@ -626,6 +605,9 @@ public class WindowManagerService extends IWindowManager.Stub final WindowAnimator mAnimator; + SparseArray<Task> mTaskIdToTask = new SparseArray<Task>(); + SparseArray<TaskStack> mStackIdToStack = new SparseArray<TaskStack>(); + final class DragInputEventReceiver extends InputEventReceiver { public DragInputEventReceiver(InputChannel inputChannel, Looper looper) { super(inputChannel, looper); @@ -855,10 +837,14 @@ public class WindowManagerService extends IWindowManager.Stub private void placeWindowBefore(WindowState pos, WindowState window) { final WindowList windows = pos.getWindowList(); - final int i = windows.indexOf(pos); + int i = windows.indexOf(pos); if (DEBUG_FOCUS || DEBUG_WINDOW_MOVEMENT || DEBUG_ADD_REMOVE) Slog.v( TAG, "Adding window " + window + " at " + i + " of " + windows.size() + " (before " + pos + ")"); + if (i < 0) { + Slog.w(TAG, "placeWindowBefore: Unable to find " + pos + " in " + windows); + i = 0; + } windows.add(i, window); mWindowsChanged = true; } @@ -915,218 +901,260 @@ public class WindowManagerService extends IWindowManager.Stub return -1; } - private void addWindowToListInOrderLocked(WindowState win, boolean addToToken) { + private int addAppWindowToListLocked(final WindowState win) { final IWindow client = win.mClient; final WindowToken token = win.mToken; final DisplayContent displayContent = win.mDisplayContent; final WindowList windows = win.getWindowList(); final int N = windows.size(); - final WindowState attached = win.mAttachedWindow; - int i; WindowList tokenWindowList = getTokenWindowsOnDisplay(token, displayContent); - if (attached == null) { - int tokenWindowsPos = 0; - int windowListPos = tokenWindowList.size(); - if (token.appWindowToken != null) { - int index = windowListPos - 1; - if (index >= 0) { - // If this application has existing windows, we - // simply place the new window on top of them... but - // keep the starting window on top. - if (win.mAttrs.type == TYPE_BASE_APPLICATION) { - // Base windows go behind everything else. - WindowState lowestWindow = tokenWindowList.get(0); - placeWindowBefore(lowestWindow, win); - tokenWindowsPos = indexOfWinInWindowList(lowestWindow, token.windows); - } else { - AppWindowToken atoken = win.mAppToken; - WindowState lastWindow = tokenWindowList.get(index); - if (atoken != null && lastWindow == atoken.startingWindow) { - placeWindowBefore(lastWindow, win); - tokenWindowsPos = indexOfWinInWindowList(lastWindow, token.windows); - } else { - int newIdx = findIdxBasedOnAppTokens(win); - //there is a window above this one associated with the same - //apptoken note that the window could be a floating window - //that was created later or a window at the top of the list of - //windows associated with this token. - if (DEBUG_FOCUS || DEBUG_WINDOW_MOVEMENT || DEBUG_ADD_REMOVE) { - Slog.v(TAG, "Adding window " + win + " at " - + (newIdx + 1) + " of " + N); - } - windows.add(newIdx + 1, win); - if (newIdx < 0) { - // No window from token found on win's display. - tokenWindowsPos = 0; - } else { - tokenWindowsPos = indexOfWinInWindowList( - windows.get(newIdx), token.windows) + 1; - } - mWindowsChanged = true; - } - } + int tokenWindowsPos = 0; + int windowListPos = tokenWindowList.size(); + if (!tokenWindowList.isEmpty()) { + // If this application has existing windows, we + // simply place the new window on top of them... but + // keep the starting window on top. + if (win.mAttrs.type == TYPE_BASE_APPLICATION) { + // Base windows go behind everything else. + WindowState lowestWindow = tokenWindowList.get(0); + placeWindowBefore(lowestWindow, win); + tokenWindowsPos = indexOfWinInWindowList(lowestWindow, token.windows); + } else { + AppWindowToken atoken = win.mAppToken; + WindowState lastWindow = tokenWindowList.get(windowListPos - 1); + if (atoken != null && lastWindow == atoken.startingWindow) { + placeWindowBefore(lastWindow, win); + tokenWindowsPos = indexOfWinInWindowList(lastWindow, token.windows); } else { - // No windows from this token on this display - if (localLOGV) Slog.v( - TAG, "Figuring out where to add app window " - + client.asBinder() + " (token=" + token + ")"); - // Figure out where the window should go, based on the - // order of applications. - final int NA = mAnimatingAppTokens.size(); - WindowState pos = null; - for (i=NA-1; i>=0; i--) { - AppWindowToken t = mAnimatingAppTokens.get(i); - if (t == token) { - i--; - break; - } - - // We haven't reached the token yet; if this token - // is not going to the bottom and has windows on this display, we can - // use it as an anchor for when we do reach the token. - tokenWindowList = getTokenWindowsOnDisplay(t, win.mDisplayContent); - if (!t.sendingToBottom && tokenWindowList.size() > 0) { - pos = tokenWindowList.get(0); - } - } - // We now know the index into the apps. If we found - // an app window above, that gives us the position; else - // we need to look some more. - if (pos != null) { - // Move behind any windows attached to this one. - WindowToken atoken = mTokenMap.get(pos.mClient.asBinder()); - if (atoken != null) { - tokenWindowList = - getTokenWindowsOnDisplay(atoken, win.mDisplayContent); - final int NC = tokenWindowList.size(); - if (NC > 0) { - WindowState bottom = tokenWindowList.get(0); - if (bottom.mSubLayer < 0) { - pos = bottom; - } - } - } - placeWindowBefore(pos, win); + int newIdx = findIdxBasedOnAppTokens(win); + //there is a window above this one associated with the same + //apptoken note that the window could be a floating window + //that was created later or a window at the top of the list of + //windows associated with this token. + if (DEBUG_FOCUS || DEBUG_WINDOW_MOVEMENT || DEBUG_ADD_REMOVE) Slog.v(TAG, + "Adding window " + win + " at " + (newIdx + 1) + " of " + N); + windows.add(newIdx + 1, win); + if (newIdx < 0) { + // No window from token found on win's display. + tokenWindowsPos = 0; } else { - // Continue looking down until we find the first - // token that has windows on this display. - while (i >= 0) { - AppWindowToken t = mAnimatingAppTokens.get(i); - tokenWindowList = getTokenWindowsOnDisplay(t, win.mDisplayContent); - final int NW = tokenWindowList.size(); - if (NW > 0) { - pos = tokenWindowList.get(NW-1); - break; - } - i--; - } - if (pos != null) { - // Move in front of any windows attached to this - // one. - WindowToken atoken = mTokenMap.get(pos.mClient.asBinder()); - if (atoken != null) { - final int NC = atoken.windows.size(); - if (NC > 0) { - WindowState top = atoken.windows.get(NC-1); - if (top.mSubLayer >= 0) { - pos = top; - } - } - } - placeWindowAfter(pos, win); - } else { - // Just search for the start of this layer. - final int myLayer = win.mBaseLayer; - for (i=0; i<N; i++) { - WindowState w = windows.get(i); - if (w.mBaseLayer > myLayer) { - break; - } - } - if (DEBUG_FOCUS || DEBUG_WINDOW_MOVEMENT || DEBUG_ADD_REMOVE) { - Slog.v(TAG, "Adding window " + win + " at " - + i + " of " + N); - } - windows.add(i, win); - mWindowsChanged = true; - } + tokenWindowsPos = indexOfWinInWindowList( + windows.get(newIdx), token.windows) + 1; } + mWindowsChanged = true; } - } else { - // Figure out where window should go, based on layer. - final int myLayer = win.mBaseLayer; - for (i=N-1; i>=0; i--) { - if (windows.get(i).mBaseLayer <= myLayer) { - break; + } + return tokenWindowsPos; + } + + // No windows from this token on this display + if (localLOGV) Slog.v(TAG, "Figuring out where to add app window " + client.asBinder() + + " (token=" + token + ")"); + // Figure out where the window should go, based on the + // order of applications. + WindowState pos = null; + + final ArrayList<Task> tasks = win.getStack().getTasks(); + int taskNdx; + int tokenNdx = -1; + for (taskNdx = tasks.size() - 1; taskNdx >= 0; --taskNdx) { + AppTokenList tokens = tasks.get(taskNdx).mAppTokens; + for (tokenNdx = tokens.size() - 1; tokenNdx >= 0; --tokenNdx) { + final AppWindowToken t = tokens.get(tokenNdx); + if (t == token) { + --tokenNdx; + if (tokenNdx < 0) { + --taskNdx; + if (taskNdx >= 0) { + tokenNdx = tasks.get(taskNdx).mAppTokens.size() - 1; + } } + break; } - i++; - if (DEBUG_FOCUS || DEBUG_WINDOW_MOVEMENT || DEBUG_ADD_REMOVE) Slog.v( - TAG, "Adding window " + win + " at " - + i + " of " + N); - windows.add(i, win); - mWindowsChanged = true; + + // We haven't reached the token yet; if this token + // is not going to the bottom and has windows on this display, we can + // use it as an anchor for when we do reach the token. + tokenWindowList = getTokenWindowsOnDisplay(t, displayContent); + if (!t.sendingToBottom && tokenWindowList.size() > 0) { + pos = tokenWindowList.get(0); + } + } + if (tokenNdx >= 0) { + // early exit + break; } + } - if (addToToken) { - if (DEBUG_ADD_REMOVE) Slog.v(TAG, "Adding " + win + " to " + token); - token.windows.add(tokenWindowsPos, win); + // We now know the index into the apps. If we found + // an app window above, that gives us the position; else + // we need to look some more. + if (pos != null) { + // Move behind any windows attached to this one. + WindowToken atoken = mTokenMap.get(pos.mClient.asBinder()); + if (atoken != null) { + tokenWindowList = + getTokenWindowsOnDisplay(atoken, displayContent); + final int NC = tokenWindowList.size(); + if (NC > 0) { + WindowState bottom = tokenWindowList.get(0); + if (bottom.mSubLayer < 0) { + pos = bottom; + } + } + } + placeWindowBefore(pos, win); + return tokenWindowsPos; + } + + // Continue looking down until we find the first + // token that has windows on this display. + for ( ; taskNdx >= 0; --taskNdx) { + AppTokenList tokens = tasks.get(taskNdx).mAppTokens; + for ( ; tokenNdx >= 0; --tokenNdx) { + final AppWindowToken t = tokens.get(tokenNdx); + tokenWindowList = getTokenWindowsOnDisplay(t, displayContent); + final int NW = tokenWindowList.size(); + if (NW > 0) { + pos = tokenWindowList.get(NW-1); + break; + } } + if (tokenNdx >= 0) { + // found + break; + } + } - } else { - // Figure out this window's ordering relative to the window - // it is attached to. - final int NA = tokenWindowList.size(); - final int sublayer = win.mSubLayer; - int largestSublayer = Integer.MIN_VALUE; - WindowState windowWithLargestSublayer = null; - for (i=0; i<NA; i++) { - WindowState w = tokenWindowList.get(i); - final int wSublayer = w.mSubLayer; - if (wSublayer >= largestSublayer) { - largestSublayer = wSublayer; - windowWithLargestSublayer = w; - } - if (sublayer < 0) { - // For negative sublayers, we go below all windows - // in the same sublayer. - if (wSublayer >= sublayer) { - if (addToToken) { - if (DEBUG_ADD_REMOVE) Slog.v(TAG, "Adding " + win + " to " + token); - token.windows.add(i, win); - } - placeWindowBefore(wSublayer >= 0 ? attached : w, win); - break; - } - } else { - // For positive sublayers, we go above all windows - // in the same sublayer. - if (wSublayer > sublayer) { - if (addToToken) { - if (DEBUG_ADD_REMOVE) Slog.v(TAG, "Adding " + win + " to " + token); - token.windows.add(i, win); - } - placeWindowBefore(w, win); - break; + if (pos != null) { + // Move in front of any windows attached to this + // one. + WindowToken atoken = mTokenMap.get(pos.mClient.asBinder()); + if (atoken != null) { + final int NC = atoken.windows.size(); + if (NC > 0) { + WindowState top = atoken.windows.get(NC-1); + if (top.mSubLayer >= 0) { + pos = top; } } } - if (i >= NA) { - if (addToToken) { - if (DEBUG_ADD_REMOVE) Slog.v(TAG, "Adding " + win + " to " + token); - token.windows.add(win); + placeWindowAfter(pos, win); + return tokenWindowsPos; + } + + // Just search for the start of this layer. + final int myLayer = win.mBaseLayer; + int i; + for (i = 0; i < N; i++) { + WindowState w = windows.get(i); + if (w.mBaseLayer > myLayer) { + break; + } + } + if (DEBUG_FOCUS || DEBUG_WINDOW_MOVEMENT || DEBUG_ADD_REMOVE) Slog.v(TAG, + "Adding window " + win + " at " + i + " of " + N); + windows.add(i, win); + mWindowsChanged = true; + return tokenWindowsPos; + } + + private void addFreeWindowToListLocked(final WindowState win) { + final WindowList windows = win.getWindowList(); + + // Figure out where window should go, based on layer. + final int myLayer = win.mBaseLayer; + int i; + for (i = windows.size() - 1; i >= 0; i--) { + if (windows.get(i).mBaseLayer <= myLayer) { + break; + } + } + i++; + if (DEBUG_FOCUS || DEBUG_WINDOW_MOVEMENT || DEBUG_ADD_REMOVE) Slog.v(TAG, + "Adding window " + win + " at " + i + " of " + windows.size()); + windows.add(i, win); + mWindowsChanged = true; + } + + private void addAttachedWindowToListLocked(final WindowState win, boolean addToToken) { + final WindowToken token = win.mToken; + final DisplayContent displayContent = win.mDisplayContent; + final WindowState attached = win.mAttachedWindow; + + WindowList tokenWindowList = getTokenWindowsOnDisplay(token, displayContent); + + // Figure out this window's ordering relative to the window + // it is attached to. + final int NA = tokenWindowList.size(); + final int sublayer = win.mSubLayer; + int largestSublayer = Integer.MIN_VALUE; + WindowState windowWithLargestSublayer = null; + int i; + for (i = 0; i < NA; i++) { + WindowState w = tokenWindowList.get(i); + final int wSublayer = w.mSubLayer; + if (wSublayer >= largestSublayer) { + largestSublayer = wSublayer; + windowWithLargestSublayer = w; + } + if (sublayer < 0) { + // For negative sublayers, we go below all windows + // in the same sublayer. + if (wSublayer >= sublayer) { + if (addToToken) { + if (DEBUG_ADD_REMOVE) Slog.v(TAG, "Adding " + win + " to " + token); + token.windows.add(i, win); + } + placeWindowBefore(wSublayer >= 0 ? attached : w, win); + break; } - if (sublayer < 0) { - placeWindowBefore(attached, win); - } else { - placeWindowAfter(largestSublayer >= 0 - ? windowWithLargestSublayer - : attached, - win); + } else { + // For positive sublayers, we go above all windows + // in the same sublayer. + if (wSublayer > sublayer) { + if (addToToken) { + if (DEBUG_ADD_REMOVE) Slog.v(TAG, "Adding " + win + " to " + token); + token.windows.add(i, win); + } + placeWindowBefore(w, win); + break; } } } + if (i >= NA) { + if (addToToken) { + if (DEBUG_ADD_REMOVE) Slog.v(TAG, "Adding " + win + " to " + token); + token.windows.add(win); + } + if (sublayer < 0) { + placeWindowBefore(attached, win); + } else { + placeWindowAfter(largestSublayer >= 0 + ? windowWithLargestSublayer + : attached, + win); + } + } + } + + private void addWindowToListInOrderLocked(final WindowState win, boolean addToToken) { + if (win.mAttachedWindow == null) { + final WindowToken token = win.mToken; + int tokenWindowsPos = 0; + if (token.appWindowToken != null) { + tokenWindowsPos = addAppWindowToListLocked(win); + } else { + addFreeWindowToListLocked(win); + } + if (addToToken) { + if (DEBUG_ADD_REMOVE) Slog.v(TAG, "Adding " + win + " to " + token); + token.windows.add(tokenWindowsPos, win); + } + } else { + addAttachedWindowToListLocked(win, addToToken); + } if (win.mAppToken != null && addToToken) { win.mAppToken.allAppWindows.add(win); @@ -1541,10 +1569,6 @@ public class WindowManagerService extends IWindowManager.Stub return true; } - void adjustInputMethodDialogsLocked() { - moveInputMethodDialogsLocked(findDesiredInputMethodWindowIndexLocked(true)); - } - final boolean isWallpaperVisible(WindowState wallpaperTarget) { if (DEBUG_WALLPAPER) Slog.v(TAG, "Wallpaper vis: target " + wallpaperTarget + ", obscured=" + (wallpaperTarget != null ? Boolean.toString(wallpaperTarget.mObscured) : "??") @@ -2218,7 +2242,7 @@ public class WindowManagerService extends IWindowManager.Stub } else if (type == TYPE_INPUT_METHOD_DIALOG) { mInputMethodDialogs.add(win); addWindowToListInOrderLocked(win, true); - adjustInputMethodDialogsLocked(); + moveInputMethodDialogsLocked(findDesiredInputMethodWindowIndexLocked(true)); imMayMove = false; } else { addWindowToListInOrderLocked(win, true); @@ -2490,22 +2514,15 @@ public class WindowManagerService extends IWindowManager.Stub public void updateAppOpsState() { synchronized(mWindowMap) { - boolean changed = false; - for (int i=0; i<mDisplayContents.size(); i++) { - DisplayContent display = mDisplayContents.valueAt(i); - WindowList windows = display.getWindowList(); - for (int j=0; j<windows.size(); j++) { - final WindowState win = windows.get(j); - if (win.mAppOp != AppOpsManager.OP_NONE) { - changed |= win.setAppOpVisibilityLw(mAppOps.checkOpNoThrow(win.mAppOp, - win.getOwningUid(), - win.getOwningPackage()) == AppOpsManager.MODE_ALLOWED); - } + mTmpWindowsIterator.reset(FORWARD_ITERATOR); + while (mTmpWindowsIterator.hasNext()) { + final WindowState win = mTmpWindowsIterator.next(); + if (win.mAppOp != AppOpsManager.OP_NONE) { + final int mode = mAppOps.checkOpNoThrow(win.mAppOp, win.getOwningUid(), + win.getOwningPackage()); + win.setAppOpVisibilityLw(mode == AppOpsManager.MODE_ALLOWED); } } - if (changed) { - scheduleAnimationLocked(); - } } } @@ -3152,35 +3169,71 @@ public class WindowManagerService extends IWindowManager.Stub // Application Window Tokens // ------------------------------------------------------------- - public void validateAppTokens(List<IBinder> tokens) { - int v = tokens.size()-1; - int m = mAppTokens.size()-1; - while (v >= 0 && m >= 0) { - AppWindowToken atoken = mAppTokens.get(m); - if (atoken.removed) { - m--; - continue; + public void validateAppTokens(int stackId, List<TaskGroup> tasks) { + synchronized (mWindowMap) { + int t = tasks.size() - 1; + if (t < 0) { + Slog.w(TAG, "validateAppTokens: empty task list"); + return; } - if (tokens.get(v) != atoken.token) { - Slog.w(TAG, "Tokens out of sync: external is " + tokens.get(v) - + " @ " + v + ", internal is " + atoken.token + " @ " + m); + + TaskGroup task = tasks.get(0); + int taskId = task.taskId; + Task targetTask = mTaskIdToTask.get(taskId); + DisplayContent displayContent = targetTask.getDisplayContent(); + if (displayContent == null) { + Slog.w(TAG, "validateAppTokens: no Display for taskId=" + taskId); + return; } - v--; - m--; - } - while (v >= 0) { - Slog.w(TAG, "External token not found: " + tokens.get(v) + " @ " + v); - v--; - } - while (m >= 0) { - AppWindowToken atoken = mAppTokens.get(m); - if (!atoken.removed) { - Slog.w(TAG, "Invalid internal atoken: " + atoken.token + " @ " + m); + + final ArrayList<Task> localTasks = mStackIdToStack.get(stackId).getTasks(); + int taskNdx; + for (taskNdx = localTasks.size() - 1; taskNdx >= 0 && t >= 0; --taskNdx, --t) { + AppTokenList localTokens = localTasks.get(taskNdx).mAppTokens; + task = tasks.get(t); + List<IApplicationToken> tokens = task.tokens; + + DisplayContent lastDisplayContent = displayContent; + displayContent = mTaskIdToTask.get(taskId).getDisplayContent(); + if (displayContent != lastDisplayContent) { + Slog.w(TAG, "validateAppTokens: displayContent changed in TaskGroup list!"); + return; + } + + int tokenNdx; + int v; + for (tokenNdx = localTokens.size() - 1, v = task.tokens.size() - 1; + tokenNdx >= 0 && v >= 0; ) { + final AppWindowToken atoken = localTokens.get(tokenNdx); + if (atoken.removed) { + --tokenNdx; + continue; + } + if (tokens.get(v) != atoken.token) { + break; + } + --tokenNdx; + v--; + } + + if (tokenNdx >= 0 || v >= 0) { + break; + } + } + + if (taskNdx >= 0 || t >= 0) { + Slog.w(TAG, "validateAppTokens: Mismatch! ActivityManager=" + tasks); + Slog.w(TAG, "validateAppTokens: Mismatch! WindowManager=" + + displayContent.getTasks()); + Slog.w(TAG, "validateAppTokens: Mismatch! Callers=" + Debug.getCallers(4)); } - m--; } } + public void validateStackOrder(Integer[] remoteStackIds) { + // TODO: + } + boolean checkCallingPermission(String permission, String func) { // Quick check: if the calling permission is me, it's all okay. if (Binder.getCallingPid() == Process.myPid()) { @@ -3241,6 +3294,7 @@ public class WindowManagerService extends IWindowManager.Stub final long origId = Binder.clearCallingIdentity(); synchronized(mWindowMap) { + DisplayContent displayContent = null; WindowToken wtoken = mTokenMap.remove(token); if (wtoken != null) { boolean delayed = false; @@ -3250,6 +3304,7 @@ public class WindowManagerService extends IWindowManager.Stub for (int i=0; i<N; i++) { WindowState win = wtoken.windows.get(i); + displayContent = win.mDisplayContent; if (win.mWinAnimator.isAnimating()) { delayed = true; @@ -3259,13 +3314,12 @@ public class WindowManagerService extends IWindowManager.Stub win.mWinAnimator.applyAnimationLocked(WindowManagerPolicy.TRANSIT_EXIT, false); //TODO (multidisplay): Magnification is supported only for the default - if (mDisplayMagnifier != null - && win.getDisplayId() == Display.DEFAULT_DISPLAY) { + if (mDisplayMagnifier != null && win.isDefaultDisplay()) { mDisplayMagnifier.onWindowTransitionLocked(win, WindowManagerPolicy.TRANSIT_EXIT); } changed = true; - win.mDisplayContent.layoutNeeded = true; + displayContent.layoutNeeded = true; } } @@ -3278,7 +3332,7 @@ public class WindowManagerService extends IWindowManager.Stub } if (delayed) { - mExitingTokens.add(wtoken); + displayContent.mExitingTokens.add(wtoken); } else if (wtoken.windowType == TYPE_WALLPAPER) { mWallpaperTokens.remove(wtoken); } @@ -3292,27 +3346,9 @@ public class WindowManagerService extends IWindowManager.Stub Binder.restoreCallingIdentity(origId); } - /** - * Find the location to insert a new AppWindowToken into the window-ordered app token list. - * Note that mAppTokens.size() == mAnimatingAppTokens.size() + 1. - * @param addPos The location the token was inserted into in mAppTokens. - * @param atoken The token to insert. - */ - private void addAppTokenToAnimating(final int addPos, final AppWindowToken atoken) { - if (addPos == 0 || addPos == mAnimatingAppTokens.size()) { - // It was inserted into the beginning or end of mAppTokens. Honor that. - mAnimatingAppTokens.add(addPos, atoken); - return; - } - // Find the item immediately above the mAppTokens insertion point and put the token - // immediately below that one in mAnimatingAppTokens. - final AppWindowToken aboveAnchor = mAppTokens.get(addPos + 1); - mAnimatingAppTokens.add(mAnimatingAppTokens.indexOf(aboveAnchor), atoken); - } - @Override - public void addAppToken(int addPos, IApplicationToken token, - int groupId, int requestedOrientation, boolean fullscreen, boolean showWhenLocked) { + public void addAppToken(int addPos, IApplicationToken token, int taskId, int stackId, + int requestedOrientation, boolean fullscreen, boolean showWhenLocked) { if (!checkCallingPermission(android.Manifest.permission.MANAGE_APP_TOKENS, "addAppToken()")) { throw new SecurityException("Requires MANAGE_APP_TOKENS permission"); @@ -3340,14 +3376,26 @@ public class WindowManagerService extends IWindowManager.Stub } atoken = new AppWindowToken(this, token); atoken.inputDispatchingTimeoutNanos = inputDispatchingTimeoutNanos; - atoken.groupId = groupId; + atoken.groupId = taskId; atoken.appFullscreen = fullscreen; atoken.showWhenLocked = showWhenLocked; atoken.requestedOrientation = requestedOrientation; if (DEBUG_TOKEN_MOVEMENT || DEBUG_ADD_REMOVE) Slog.v(TAG, "addAppToken: " + atoken + " at " + addPos); - mAppTokens.add(addPos, atoken); - addAppTokenToAnimating(addPos, atoken); + + Task task = mTaskIdToTask.get(taskId); + if (task == null) { + TaskStack stack = mStackIdToStack.get(stackId); + if (stack == null) { + throw new IllegalArgumentException("addAppToken: invalid stackId=" + stackId); + } + task = new Task(atoken, stack); + stack.addTask(task, true); + mTaskIdToTask.put(taskId, task); + } else { + task.addAppToken(addPos, atoken); + } + mTokenMap.put(token.asBinder(), atoken); // Application tokens start out hidden. @@ -3366,12 +3414,21 @@ public class WindowManagerService extends IWindowManager.Stub } synchronized(mWindowMap) { - AppWindowToken atoken = findAppWindowToken(token); + final AppWindowToken atoken = findAppWindowToken(token); if (atoken == null) { Slog.w(TAG, "Attempted to set group id of non-existing app token: " + token); return; } + Task oldTask = mTaskIdToTask.get(atoken.groupId); + oldTask.removeAppToken(atoken); + atoken.groupId = groupId; + Task newTask = mTaskIdToTask.get(groupId); + if (newTask == null) { + throw new IllegalStateException("setAppGroupId: groupId=" + groupId + + " does not exist"); + } + newTask.mAppTokens.add(atoken); } } @@ -3412,72 +3469,76 @@ public class WindowManagerService extends IWindowManager.Stub } public int getOrientationFromAppTokensLocked() { - int curGroup = 0; int lastOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED; boolean findingBehind = false; - boolean haveGroup = false; boolean lastFullscreen = false; - for (int pos = mAppTokens.size() - 1; pos >= 0; pos--) { - AppWindowToken atoken = mAppTokens.get(pos); - - if (DEBUG_APP_ORIENTATION) Slog.v(TAG, "Checking app orientation: " + atoken); - - // if we're about to tear down this window and not seek for - // the behind activity, don't use it for orientation - if (!findingBehind - && (!atoken.hidden && atoken.hiddenRequested)) { - if (DEBUG_ORIENTATION) Slog.v(TAG, "Skipping " + atoken - + " -- going to hide"); - continue; - } - - if (haveGroup == true && curGroup != atoken.groupId) { - // If we have hit a new application group, and the bottom - // of the previous group didn't explicitly say to use - // the orientation behind it, and the last app was - // full screen, then we'll stick with the - // user's orientation. - if (lastOrientation != ActivityInfo.SCREEN_ORIENTATION_BEHIND - && lastFullscreen) { + // TODO: Multi window. + DisplayContent displayContent = getDefaultDisplayContentLocked(); + final ArrayList<Task> tasks = displayContent.getTasks(); + for (int taskNdx = tasks.size() - 1; taskNdx >= 0; --taskNdx) { + AppTokenList tokens = tasks.get(taskNdx).mAppTokens; + final int firstToken = tokens.size() - 1; + for (int tokenNdx = firstToken; tokenNdx >= 0; --tokenNdx) { + final AppWindowToken atoken = tokens.get(tokenNdx); + + if (DEBUG_APP_ORIENTATION) Slog.v(TAG, "Checking app orientation: " + atoken); + + // if we're about to tear down this window and not seek for + // the behind activity, don't use it for orientation + if (!findingBehind + && (!atoken.hidden && atoken.hiddenRequested)) { + if (DEBUG_ORIENTATION) Slog.v(TAG, "Skipping " + atoken + + " -- going to hide"); + continue; + } + + if (tokenNdx == firstToken) { + // If we have hit a new Task, and the bottom + // of the previous group didn't explicitly say to use + // the orientation behind it, and the last app was + // full screen, then we'll stick with the + // user's orientation. + if (lastOrientation != ActivityInfo.SCREEN_ORIENTATION_BEHIND + && lastFullscreen) { + if (DEBUG_ORIENTATION) Slog.v(TAG, "Done at " + atoken + + " -- end of group, return " + lastOrientation); + return lastOrientation; + } + } + + // We ignore any hidden applications on the top. + if (atoken.hiddenRequested || atoken.willBeHidden) { + if (DEBUG_ORIENTATION) Slog.v(TAG, "Skipping " + atoken + + " -- hidden on top"); + continue; + } + + if (tokenNdx == 0) { + // Last token in this task. + lastOrientation = atoken.requestedOrientation; + } + + int or = atoken.requestedOrientation; + // If this application is fullscreen, and didn't explicitly say + // to use the orientation behind it, then just take whatever + // orientation it has and ignores whatever is under it. + lastFullscreen = atoken.appFullscreen; + if (lastFullscreen + && or != ActivityInfo.SCREEN_ORIENTATION_BEHIND) { if (DEBUG_ORIENTATION) Slog.v(TAG, "Done at " + atoken - + " -- end of group, return " + lastOrientation); - return lastOrientation; + + " -- full screen, return " + or); + return or; } + // If this application has requested an explicit orientation, + // then use it. + if (or != ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED + && or != ActivityInfo.SCREEN_ORIENTATION_BEHIND) { + if (DEBUG_ORIENTATION) Slog.v(TAG, "Done at " + atoken + + " -- explicitly set, return " + or); + return or; + } + findingBehind |= (or == ActivityInfo.SCREEN_ORIENTATION_BEHIND); } - - // We ignore any hidden applications on the top. - if (atoken.hiddenRequested || atoken.willBeHidden) { - if (DEBUG_ORIENTATION) Slog.v(TAG, "Skipping " + atoken - + " -- hidden on top"); - continue; - } - - if (!haveGroup) { - haveGroup = true; - curGroup = atoken.groupId; - lastOrientation = atoken.requestedOrientation; - } - - int or = atoken.requestedOrientation; - // If this application is fullscreen, and didn't explicitly say - // to use the orientation behind it, then just take whatever - // orientation it has and ignores whatever is under it. - lastFullscreen = atoken.appFullscreen; - if (lastFullscreen - && or != ActivityInfo.SCREEN_ORIENTATION_BEHIND) { - if (DEBUG_ORIENTATION) Slog.v(TAG, "Done at " + atoken - + " -- full screen, return " + or); - return or; - } - // If this application has requested an explicit orientation, - // then use it. - if (or != ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED - && or != ActivityInfo.SCREEN_ORIENTATION_BEHIND) { - if (DEBUG_ORIENTATION) Slog.v(TAG, "Done at " + atoken - + " -- explicitly set, return " + or); - return or; - } - findingBehind |= (or == ActivityInfo.SCREEN_ORIENTATION_BEHIND); } if (DEBUG_ORIENTATION) Slog.v(TAG, "No app is requesting an orientation"); return ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED; @@ -4333,11 +4394,13 @@ public class WindowManagerService extends IWindowManager.Stub TAG, "Removing app " + wtoken + " delayed=" + delayed + " animation=" + wtoken.mAppAnimator.animation + " animating=" + wtoken.mAppAnimator.animating); + final Task task = mTaskIdToTask.get(wtoken.groupId); + DisplayContent displayContent = task.getDisplayContent(); if (delayed) { // set the token aside because it has an active animation to be finished if (DEBUG_ADD_REMOVE || DEBUG_TOKEN_MOVEMENT) Slog.v(TAG, "removeAppToken make exiting: " + wtoken); - mExitingAppTokens.add(wtoken); + displayContent.mExitingAppTokens.add(wtoken); } else { // Make sure there is no animation running on this token, // so any windows associated with it will be removed as @@ -4347,8 +4410,10 @@ public class WindowManagerService extends IWindowManager.Stub } if (DEBUG_ADD_REMOVE || DEBUG_TOKEN_MOVEMENT) Slog.v(TAG, "removeAppToken: " + wtoken); - mAppTokens.remove(wtoken); - mAnimatingAppTokens.remove(wtoken); + + if (task.removeAppToken(wtoken)) { + mTaskIdToTask.delete(wtoken.groupId); + } wtoken.removed = true; if (wtoken.startingData != null) { startingToken = wtoken; @@ -4400,78 +4465,91 @@ public class WindowManagerService extends IWindowManager.Stub } void dumpAppTokensLocked() { - for (int i=mAppTokens.size()-1; i>=0; i--) { - Slog.v(TAG, " #" + i + ": " + mAppTokens.get(i).token); - } - } - - void dumpAnimatingAppTokensLocked() { - for (int i=mAnimatingAppTokens.size()-1; i>=0; i--) { - Slog.v(TAG, " #" + i + ": " + mAnimatingAppTokens.get(i).token); + DisplayContentsIterator iterator = new DisplayContentsIterator(); + while (iterator.hasNext()) { + DisplayContent displayContent = iterator.next(); + Slog.v(TAG, " Display " + displayContent.getDisplayId()); + final ArrayList<Task> tasks = displayContent.getTasks(); + int i = displayContent.numTokens(); + for (int taskNdx = tasks.size() - 1; taskNdx >= 0; --taskNdx) { + AppTokenList tokens = tasks.get(taskNdx).mAppTokens; + for (int tokenNdx = tokens.size() - 1; tokenNdx >= 0; --tokenNdx) { + final AppWindowToken wtoken = tokens.get(tokenNdx); + Slog.v(TAG, " #" + --i + ": " + wtoken.token); + } + } } } void dumpWindowsLocked() { int i = 0; - final AllWindowsIterator iterator = new AllWindowsIterator(REVERSE_ITERATOR); - while (iterator.hasNext()) { - final WindowState w = iterator.next(); + mTmpWindowsIterator.reset(REVERSE_ITERATOR); + while (mTmpWindowsIterator.hasNext()) { + final WindowState w = mTmpWindowsIterator.next(); Slog.v(TAG, " #" + i++ + ": " + w); } } - private int findWindowOffsetLocked(WindowList windows, int tokenPos) { - final int NW = windows.size(); - - if (tokenPos >= mAnimatingAppTokens.size()) { - int i = NW; - while (i > 0) { - i--; - WindowState win = windows.get(i); - if (win.getAppToken() != null) { - return i+1; - } - } + private int findAppWindowInsertionPointLocked(AppWindowToken target) { + final int taskId = target.groupId; + Task targetTask = mTaskIdToTask.get(taskId); + if (targetTask == null) { + Slog.w(TAG, "findAppWindowInsertionPointLocked: no Task for " + target + " taskId=" + + taskId); + return 0; + } + DisplayContent displayContent = targetTask.getDisplayContent(); + if (displayContent == null) { + Slog.w(TAG, "findAppWindowInsertionPointLocked: no DisplayContent for " + target); + return 0; } + final WindowList windows = displayContent.getWindowList(); + final int NW = windows.size(); - while (tokenPos > 0) { - // Find the first app token below the new position that has - // a window displayed. - final AppWindowToken wtoken = mAppTokens.get(tokenPos-1); - if (DEBUG_REORDER) Slog.v(TAG, "Looking for lower windows @ " - + tokenPos + " -- " + wtoken.token); - if (wtoken.sendingToBottom) { - if (DEBUG_REORDER) Slog.v(TAG, - "Skipping token -- currently sending to bottom"); - tokenPos--; + boolean found = false; + final ArrayList<Task> tasks = displayContent.getTasks(); + for (int taskNdx = tasks.size() - 1; taskNdx >= 0; --taskNdx) { + final Task task = tasks.get(taskNdx); + if (!found && task.taskId != taskId) { continue; } - int i = wtoken.windows.size(); - while (i > 0) { - i--; - WindowState win = wtoken.windows.get(i); - int j = win.mChildWindows.size(); - while (j > 0) { - j--; - WindowState cwin = win.mChildWindows.get(j); - if (cwin.mSubLayer >= 0) { - for (int pos=NW-1; pos>=0; pos--) { - if (windows.get(pos) == cwin) { - if (DEBUG_REORDER) Slog.v(TAG, - "Found child win @" + (pos+1)); - return pos+1; + AppTokenList tokens = task.mAppTokens; + for (int tokenNdx = tokens.size() - 1; tokenNdx >= 0; --tokenNdx) { + final AppWindowToken wtoken = tokens.get(tokenNdx); + if (!found && wtoken == target) { + found = true; + } + if (found) { + // Find the first app token below the new position that has + // a window displayed. + if (DEBUG_REORDER) Slog.v(TAG, "Looking for lower windows in " + wtoken.token); + if (wtoken.sendingToBottom) { + if (DEBUG_REORDER) Slog.v(TAG, "Skipping token -- currently sending to bottom"); + continue; + } + for (int i = wtoken.windows.size() - 1; i >= 0; --i) { + WindowState win = wtoken.windows.get(i); + for (int j = win.mChildWindows.size() - 1; j >= 0; --j) { + WindowState cwin = win.mChildWindows.get(j); + if (cwin.mSubLayer >= 0) { + for (int pos = NW - 1; pos >= 0; pos--) { + if (windows.get(pos) == cwin) { + if (DEBUG_REORDER) Slog.v(TAG, + "Found child win @" + (pos + 1)); + return pos + 1; + } + } + } + } + for (int pos = NW - 1; pos >= 0; pos--) { + if (windows.get(pos) == win) { + if (DEBUG_REORDER) Slog.v(TAG, "Found win @" + (pos + 1)); + return pos + 1; } } - } - } - for (int pos=NW-1; pos>=0; pos--) { - if (windows.get(pos) == win) { - if (DEBUG_REORDER) Slog.v(TAG, "Found win @" + (pos+1)); - return pos+1; } } } - tokenPos--; } return 0; @@ -4520,198 +4598,132 @@ public class WindowManagerService extends IWindowManager.Stub return index; } - @Override - public void moveAppToken(int index, IBinder token) { - if (!checkCallingPermission(android.Manifest.permission.MANAGE_APP_TOKENS, - "moveAppToken()")) { - throw new SecurityException("Requires MANAGE_APP_TOKENS permission"); - } - - synchronized(mWindowMap) { - if (DEBUG_REORDER) Slog.v(TAG, "Initial app tokens:"); - if (DEBUG_REORDER) dumpAppTokensLocked(); - final AppWindowToken wtoken = findAppWindowToken(token); - final int oldIndex = mAppTokens.indexOf(wtoken); - if (DEBUG_TOKEN_MOVEMENT || DEBUG_REORDER) Slog.v(TAG, - "Start moving token " + wtoken + " initially at " - + oldIndex); - if (oldIndex > index && mAppTransition.isTransitionSet()) { - // animation towards back has not started, copy old list for duration of animation. - mAnimatingAppTokens.clear(); - mAnimatingAppTokens.addAll(mAppTokens); - } - if (wtoken == null || !mAppTokens.remove(wtoken)) { - Slog.w(TAG, "Attempting to reorder token that doesn't exist: " - + token + " (" + wtoken + ")"); - return; - } - mAppTokens.add(index, wtoken); - if (DEBUG_REORDER) Slog.v(TAG, "Moved " + token + " to " + index + ":"); - else if (DEBUG_TOKEN_MOVEMENT) Slog.v(TAG, "Moved " + token + " to " + index); - if (DEBUG_REORDER) dumpAppTokensLocked(); - if (!mAppTransition.isTransitionSet()) { - // Not animating, bring animating app list in line with mAppTokens. - mAnimatingAppTokens.clear(); - mAnimatingAppTokens.addAll(mAppTokens); - - // Bring window ordering, window focus and input window in line with new app token - final long origId = Binder.clearCallingIdentity(); - if (DEBUG_REORDER) Slog.v(TAG, "Removing windows in " + token + ":"); - if (DEBUG_REORDER) dumpWindowsLocked(); - if (tmpRemoveAppWindowsLocked(wtoken)) { - if (DEBUG_REORDER) Slog.v(TAG, "Adding windows back in:"); - if (DEBUG_REORDER) dumpWindowsLocked(); - DisplayContentsIterator iterator = new DisplayContentsIterator(); - while(iterator.hasNext()) { - final DisplayContent displayContent = iterator.next(); - final WindowList windows = displayContent.getWindowList(); - final int pos = findWindowOffsetLocked(windows, index); - final int newPos = reAddAppWindowsLocked(displayContent, pos, wtoken); - if (pos != newPos) { - displayContent.layoutNeeded = true; - } - } - if (DEBUG_REORDER) Slog.v(TAG, "Final window list:"); - if (DEBUG_REORDER) dumpWindowsLocked(); - updateFocusedWindowLocked(UPDATE_FOCUS_WILL_PLACE_SURFACES, - false /*updateInputWindows*/); - mInputMonitor.setUpdateInputWindowsNeededLw(); - performLayoutAndPlaceSurfacesLocked(); - mInputMonitor.updateInputWindowsLw(false /*force*/); - } - Binder.restoreCallingIdentity(origId); - } - } - } - - private void removeAppTokensLocked(List<IBinder> tokens) { - // XXX This should be done more efficiently! - // (take advantage of the fact that both lists should be - // ordered in the same way.) - int N = tokens.size(); - for (int i=0; i<N; i++) { - IBinder token = tokens.get(i); - final AppWindowToken wtoken = findAppWindowToken(token); - if (DEBUG_REORDER || DEBUG_TOKEN_MOVEMENT) Slog.v(TAG, - "Temporarily removing " + wtoken + " from " + mAppTokens.indexOf(wtoken)); - if (!mAppTokens.remove(wtoken)) { - Slog.w(TAG, "Attempting to reorder token that doesn't exist: " - + token + " (" + wtoken + ")"); - i--; - N--; - } - } - } + private void moveTaskWindowsLocked(Task task) { + DisplayContent displayContent = task.getDisplayContent(); - private void moveAppWindowsLocked(List<IBinder> tokens, int tokenPos) { // First remove all of the windows from the list. - final int N = tokens.size(); - int i; - for (i=0; i<N; i++) { - WindowToken token = mTokenMap.get(tokens.get(i)); - if (token != null) { - tmpRemoveAppWindowsLocked(token); - } + AppTokenList tokens = task.mAppTokens; + final int numTokens = tokens.size(); + for (int tokenNdx = numTokens - 1; tokenNdx >= 0; --tokenNdx) { + tmpRemoveAppWindowsLocked(tokens.get(tokenNdx)); } // And now add them back at the correct place. - DisplayContentsIterator iterator = new DisplayContentsIterator(); - while (iterator.hasNext()) { - final DisplayContent displayContent = iterator.next(); - final WindowList windows = displayContent.getWindowList(); - // Where to start adding? - int pos = findWindowOffsetLocked(windows, tokenPos); - for (i=0; i<N; i++) { - WindowToken token = mTokenMap.get(tokens.get(i)); - if (token != null) { - final int newPos = reAddAppWindowsLocked(displayContent, pos, token); - if (newPos != pos) { - displayContent.layoutNeeded = true; - } - pos = newPos; + // Where to start adding? + int pos = findAppWindowInsertionPointLocked(tokens.get(0)); + for (int tokenNdx = 0; tokenNdx < numTokens; ++tokenNdx) { + final AppWindowToken wtoken = tokens.get(tokenNdx); + if (wtoken != null) { + final int newPos = reAddAppWindowsLocked(displayContent, pos, wtoken); + if (newPos != pos) { + displayContent.layoutNeeded = true; } + pos = newPos; } - if (!updateFocusedWindowLocked(UPDATE_FOCUS_WILL_PLACE_SURFACES, - false /*updateInputWindows*/)) { - assignLayersLocked(windows); - } + } + if (!updateFocusedWindowLocked(UPDATE_FOCUS_WILL_PLACE_SURFACES, + false /*updateInputWindows*/)) { + assignLayersLocked(displayContent.getWindowList()); } + updateFocusedWindowLocked(UPDATE_FOCUS_WILL_PLACE_SURFACES, + false /*updateInputWindows*/); mInputMonitor.setUpdateInputWindowsNeededLw(); - - // Note that the above updateFocusedWindowLocked used to sit here. - performLayoutAndPlaceSurfacesLocked(); mInputMonitor.updateInputWindowsLw(false /*force*/); //dump(); } - @Override - public void moveAppTokensToTop(List<IBinder> tokens) { - if (!checkCallingPermission(android.Manifest.permission.MANAGE_APP_TOKENS, - "moveAppTokensToTop()")) { - throw new SecurityException("Requires MANAGE_APP_TOKENS permission"); + public void moveTaskToTop(int taskId) { + final long origId = Binder.clearCallingIdentity(); + try { + synchronized(mWindowMap) { + Task task = mTaskIdToTask.get(taskId); + if (task == null) { + Slog.e(TAG, "moveTaskToTop: taskId=" + taskId + " not found in mTaskIdToTask"); + return; + } + task.mStack.moveTaskToTop(task); + moveTaskWindowsLocked(task); + } + } finally { + Binder.restoreCallingIdentity(origId); } + } + public void moveTaskToBottom(int taskId) { final long origId = Binder.clearCallingIdentity(); - synchronized(mWindowMap) { - removeAppTokensLocked(tokens); - final int N = tokens.size(); - for (int i=0; i<N; i++) { - AppWindowToken wt = findAppWindowToken(tokens.get(i)); - if (wt != null) { - if (DEBUG_TOKEN_MOVEMENT || DEBUG_REORDER) Slog.v(TAG, - "Adding next to top: " + wt); - mAppTokens.add(wt); - if (mAppTransition.isTransitionSet()) { - wt.sendingToBottom = false; - } + try { + synchronized(mWindowMap) { + Task task = mTaskIdToTask.get(taskId); + if (task == null) { + Slog.e(TAG, "moveTaskToBottom: taskId=" + taskId + + " not found in mTaskIdToTask"); + return; } + task.mStack.moveTaskToBottom(task); + moveTaskWindowsLocked(task); } + } finally { + Binder.restoreCallingIdentity(origId); + } + } - mAnimatingAppTokens.clear(); - mAnimatingAppTokens.addAll(mAppTokens); - moveAppWindowsLocked(tokens, mAppTokens.size()); + /** + * Create a new TaskStack and place it next to an existing stack. + * @param stackId The unique identifier of the new stack. + * @param relativeStackId The existing stack that this stack goes before or after. + * @param position One of: + * {@link StackBox#TASK_STACK_GOES_BEFORE} + * {@link StackBox#TASK_STACK_GOES_AFTER} + * {@link StackBox#TASK_STACK_GOES_ABOVE} + * {@link StackBox#TASK_STACK_GOES_BELOW} + * {@link StackBox#TASK_STACK_GOES_UNDER} + * {@link StackBox#TASK_STACK_GOES_OVER} + * @param weight Relative weight for determining how big to make the new TaskStack. + */ + public void createStack(int stackId, int relativeStackId, int position, float weight) { + // TODO: Create a stack on other displays. + synchronized (mWindowMap) { + TaskStack stack = getDefaultDisplayContentLocked().createStack(stackId, + relativeStackId, position, weight); + mStackIdToStack.put(stackId, stack); } - Binder.restoreCallingIdentity(origId); } - @Override - public void moveAppTokensToBottom(List<IBinder> tokens) { - if (!checkCallingPermission(android.Manifest.permission.MANAGE_APP_TOKENS, - "moveAppTokensToBottom()")) { - throw new SecurityException("Requires MANAGE_APP_TOKENS permission"); + public int removeStack(int stackId) { + final TaskStack stack = mStackIdToStack.get(stackId); + if (stack != null) { + mStackIdToStack.delete(stackId); + return stack.remove(); } + return -1; + } - final long origId = Binder.clearCallingIdentity(); - synchronized(mWindowMap) { - final int N = tokens.size(); - if (N > 0) { - // animating towards back, hang onto old list for duration of animation. - mAnimatingAppTokens.clear(); - mAnimatingAppTokens.addAll(mAppTokens); - } - removeAppTokensLocked(tokens); - int pos = 0; - for (int i=0; i<N; i++) { - AppWindowToken wt = findAppWindowToken(tokens.get(i)); - if (wt != null) { - if (DEBUG_TOKEN_MOVEMENT) Slog.v(TAG, - "Adding next to bottom: " + wt + " at " + pos); - mAppTokens.add(pos, wt); - if (mAppTransition.isTransitionSet()) { - wt.sendingToBottom = true; - } - pos++; + public void moveTaskToStack(int taskId, int stackId, boolean toTop) { + synchronized (mWindowMap) { + Task task = mTaskIdToTask.get(taskId); + task.mStack.removeTask(task); + TaskStack newStack = mStackIdToStack.get(stackId); + newStack.addTask(task, toTop); + performLayoutAndPlaceSurfacesLocked(); + } + } + + public void resizeStack(int stackId, float weight) { + synchronized (mWindowMap) { + Task task = null; + DisplayContentsIterator iterator = new DisplayContentsIterator(); + while (iterator.hasNext()) { + if (iterator.next().resizeStack(stackId, weight)) { + break; + } else if (!iterator.hasNext()) { + throw new IllegalArgumentException("resizeStack: stackId " + stackId + + " not found."); } } - - mAnimatingAppTokens.clear(); - mAnimatingAppTokens.addAll(mAppTokens); - moveAppWindowsLocked(tokens, 0); } - Binder.restoreCallingIdentity(origId); } // ------------------------------------------------------------- @@ -4832,9 +4844,9 @@ public class WindowManagerService extends IWindowManager.Stub @Override public void closeSystemDialogs(String reason) { synchronized(mWindowMap) { - final AllWindowsIterator iterator = new AllWindowsIterator(); - while (iterator.hasNext()) { - final WindowState w = iterator.next(); + mTmpWindowsIterator.reset(FORWARD_ITERATOR); + while (mTmpWindowsIterator.hasNext()) { + final WindowState w = mTmpWindowsIterator.next(); if (w.mHasSurface) { try { w.mClient.closeSystemDialogs(reason); @@ -5228,9 +5240,9 @@ public class WindowManagerService extends IWindowManager.Stub // the background..) if (on) { boolean isVisible = false; - final AllWindowsIterator iterator = new AllWindowsIterator(); - while (iterator.hasNext()) { - final WindowState ws = iterator.next(); + mTmpWindowsIterator.reset(FORWARD_ITERATOR); + while (mTmpWindowsIterator.hasNext()) { + final WindowState ws = mTmpWindowsIterator.next(); if (ws.mSession.mPid == pid && ws.isVisibleLw()) { isVisible = true; break; @@ -6212,9 +6224,9 @@ public class WindowManagerService extends IWindowManager.Stub } synchronized (mWindowMap) { - final AllWindowsIterator iterator = new AllWindowsIterator(); - while (iterator.hasNext()) { - final WindowState w = iterator.next(); + mTmpWindowsIterator.reset(FORWARD_ITERATOR); + while (mTmpWindowsIterator.hasNext()) { + final WindowState w = mTmpWindowsIterator.next(); if (System.identityHashCode(w) == hashCode) { return w; } @@ -6763,10 +6775,10 @@ public class WindowManagerService extends IWindowManager.Stub // TODO(multidisplay): Call isScreenOn for each display. private void sendScreenStatusToClientsLocked() { final boolean on = mPowerManager.isScreenOn(); - final AllWindowsIterator iterator = new AllWindowsIterator(); - while (iterator.hasNext()) { + mTmpWindowsIterator.reset(FORWARD_ITERATOR); + while (mTmpWindowsIterator.hasNext()) { try { - iterator.next().mClient.dispatchScreenState(on); + mTmpWindowsIterator.next().mClient.dispatchScreenState(on); } catch (RemoteException e) { // Ignored } @@ -7050,8 +7062,6 @@ public class WindowManagerService extends IWindowManager.Stub if (mAppTransition.isTransitionSet()) { if (DEBUG_APP_TRANSITIONS) Slog.v(TAG, "*** APP TRANSITION TIMEOUT"); mAppTransition.setTimeout(); - mAnimatingAppTokens.clear(); - mAnimatingAppTokens.addAll(mAppTokens); performLayoutAndPlaceSurfacesLocked(); } } @@ -7096,13 +7106,16 @@ public class WindowManagerService extends IWindowManager.Stub case APP_FREEZE_TIMEOUT: { synchronized (mWindowMap) { Slog.w(TAG, "App freeze timeout expired."); - int i = mAppTokens.size(); - while (i > 0) { - i--; - AppWindowToken tok = mAppTokens.get(i); - if (tok.mAppAnimator.freezingScreen) { - Slog.w(TAG, "Force clearing freeze: " + tok); - unsetAppFreezingScreenLocked(tok, true, true); + DisplayContent displayContent = getDefaultDisplayContentLocked(); + final ArrayList<Task> tasks = displayContent.getTasks(); + for (int taskNdx = tasks.size() - 1; taskNdx >= 0; --taskNdx) { + AppTokenList tokens = tasks.get(taskNdx).mAppTokens; + for (int tokenNdx = tokens.size() - 1; tokenNdx >= 0; --tokenNdx) { + AppWindowToken tok = tokens.get(tokenNdx); + if (tok.mAppAnimator.freezingScreen) { + Slog.w(TAG, "Force clearing freeze: " + tok); + unsetAppFreezingScreenLocked(tok, true, true); + } } } } @@ -7657,15 +7670,22 @@ public class WindowManagerService extends IWindowManager.Stub // in the main app list, but still have windows shown. We put them // in the back because now that the animation is over we no longer // will care about them. - int NT = mExitingAppTokens.size(); + AppTokenList exitingAppTokens = displayContent.mExitingAppTokens; + int NT = exitingAppTokens.size(); for (int j=0; j<NT; j++) { - i = reAddAppWindowsLocked(displayContent, i, mExitingAppTokens.get(j)); + i = reAddAppWindowsLocked(displayContent, i, exitingAppTokens.get(j)); } // And add in the still active app tokens in Z order. - NT = mAnimatingAppTokens.size(); - for (int j=0; j<NT; j++) { - i = reAddAppWindowsLocked(displayContent, i, mAnimatingAppTokens.get(j)); + final ArrayList<Task> tasks = displayContent.getTasks(); + final int numTasks = tasks.size(); + for (int taskNdx = 0; taskNdx < numTasks; ++taskNdx) { + final AppTokenList tokens = tasks.get(taskNdx).mAppTokens; + final int numTokens = tokens.size(); + for (int tokenNdx = 0; tokenNdx < numTokens; ++tokenNdx) { + final AppWindowToken wtoken = tokens.get(tokenNdx); + i = reAddAppWindowsLocked(displayContent, i, wtoken); + } } i -= lastBelow; @@ -7685,7 +7705,7 @@ public class WindowManagerService extends IWindowManager.Stub } } Slog.w(TAG, "Current app token list:"); - dumpAnimatingAppTokensLocked(); + dumpAppTokensLocked(); Slog.w(TAG, "Final window list:"); dumpWindowsLocked(); } @@ -8335,11 +8355,17 @@ public class WindowManagerService extends IWindowManager.Stub mAppTransition.setIdle(); // Restore window app tokens to the ActivityManager views - for (int i = mAnimatingAppTokens.size() - 1; i >= 0; i--) { - mAnimatingAppTokens.get(i).sendingToBottom = false; + final DisplayContent displayContent = getDefaultDisplayContentLocked(); + final ArrayList<Task> tasks = displayContent.getTasks(); + final int numTasks = tasks.size(); + for (int taskNdx = 0; taskNdx < numTasks; ++taskNdx) { + final AppTokenList tokens = tasks.get(taskNdx).mAppTokens; + final int numTokens = tokens.size(); + for (int tokenNdx = 0; tokenNdx < numTokens; ++tokenNdx) { + final AppWindowToken wtoken = tokens.get(tokenNdx); + wtoken.sendingToBottom = false; + } } - mAnimatingAppTokens.clear(); - mAnimatingAppTokens.addAll(mAppTokens); rebuildAppWindowListLocked(); changes |= PhoneWindowManager.FINISH_LAYOUT_REDO_LAYOUT; @@ -8496,21 +8522,25 @@ public class WindowManagerService extends IWindowManager.Stub } } - private void updateAllDrawnLocked() { + private void updateAllDrawnLocked(DisplayContent displayContent) { // See if any windows have been drawn, so they (and others // associated with them) can now be shown. - final ArrayList<AppWindowToken> appTokens = mAnimatingAppTokens; - final int NT = appTokens.size(); - for (int i=0; i<NT; i++) { - AppWindowToken wtoken = appTokens.get(i); - if (!wtoken.allDrawn) { - int numInteresting = wtoken.numInterestingWindows; - if (numInteresting > 0 && wtoken.numDrawnWindows >= numInteresting) { - if (WindowManagerService.DEBUG_VISIBILITY) Slog.v(TAG, - "allDrawn: " + wtoken - + " interesting=" + numInteresting - + " drawn=" + wtoken.numDrawnWindows); - wtoken.allDrawn = true; + final ArrayList<Task> tasks = displayContent.getTasks(); + final int numTasks = tasks.size(); + for (int taskNdx = 0; taskNdx < numTasks; ++taskNdx) { + final AppTokenList tokens = tasks.get(taskNdx).mAppTokens; + final int numTokens = tokens.size(); + for (int tokenNdx = 0; tokenNdx < numTokens; ++tokenNdx) { + final AppWindowToken wtoken = tokens.get(tokenNdx); + if (!wtoken.allDrawn) { + int numInteresting = wtoken.numInterestingWindows; + if (numInteresting > 0 && wtoken.numDrawnWindows >= numInteresting) { + if (WindowManagerService.DEBUG_VISIBILITY) Slog.v(TAG, + "allDrawn: " + wtoken + + " interesting=" + numInteresting + + " drawn=" + wtoken.numDrawnWindows); + wtoken.allDrawn = true; + } } } } @@ -8534,13 +8564,17 @@ public class WindowManagerService extends IWindowManager.Stub } // Initialize state of exiting tokens. - for (i=mExitingTokens.size()-1; i>=0; i--) { - mExitingTokens.get(i).hasVisible = false; - } + DisplayContentsIterator iterator = new DisplayContentsIterator(); + while (iterator.hasNext()) { + final DisplayContent displayContent = iterator.next(); + for (i=displayContent.mExitingTokens.size()-1; i>=0; i--) { + displayContent.mExitingTokens.get(i).hasVisible = false; + } - // Initialize state of exiting applications. - for (i=mExitingAppTokens.size()-1; i>=0; i--) { - mExitingAppTokens.get(i).hasVisible = false; + // Initialize state of exiting applications. + for (i=displayContent.mExitingAppTokens.size()-1; i>=0; i--) { + displayContent.mExitingAppTokens.get(i).hasVisible = false; + } } mInnerFields.mHoldScreen = null; @@ -8569,10 +8603,10 @@ public class WindowManagerService extends IWindowManager.Stub } boolean focusDisplayed = false; - boolean updateAllDrawn = false; - DisplayContentsIterator iterator = new DisplayContentsIterator(); + iterator = new DisplayContentsIterator(); while (iterator.hasNext()) { + boolean updateAllDrawn = false; final DisplayContent displayContent = iterator.next(); WindowList windows = displayContent.getWindowList(); DisplayInfo displayInfo = displayContent.getDisplayInfo(); @@ -8816,10 +8850,10 @@ public class WindowManagerService extends IWindowManager.Stub if (!mInnerFields.mDimming && mAnimator.isDimmingLocked(displayId)) { stopDimmingLocked(displayId); } - } - if (updateAllDrawn) { - updateAllDrawnLocked(); + if (updateAllDrawn) { + updateAllDrawnLocked(displayContent); + } } if (focusDisplayed) { @@ -8987,30 +9021,38 @@ public class WindowManagerService extends IWindowManager.Stub } // Time to remove any exiting tokens? - for (i=mExitingTokens.size()-1; i>=0; i--) { - WindowToken token = mExitingTokens.get(i); - if (!token.hasVisible) { - mExitingTokens.remove(i); - if (token.windowType == TYPE_WALLPAPER) { - mWallpaperTokens.remove(token); + iterator = new DisplayContentsIterator(); + while (iterator.hasNext()) { + final DisplayContent displayContent = iterator.next(); + ArrayList<WindowToken> exitingTokens = displayContent.mExitingTokens; + for (i = exitingTokens.size() - 1; i >= 0; i--) { + WindowToken token = exitingTokens.get(i); + if (!token.hasVisible) { + exitingTokens.remove(i); + if (token.windowType == TYPE_WALLPAPER) { + mWallpaperTokens.remove(token); + } } } - } - // Time to remove any exiting applications? - for (i=mExitingAppTokens.size()-1; i>=0; i--) { - AppWindowToken token = mExitingAppTokens.get(i); - if (!token.hasVisible && !mClosingApps.contains(token)) { - // Make sure there is no animation running on this token, - // so any windows associated with it will be removed as - // soon as their animations are complete - token.mAppAnimator.clearAnimation(); - token.mAppAnimator.animating = false; - if (DEBUG_ADD_REMOVE || DEBUG_TOKEN_MOVEMENT) Slog.v(TAG, - "performLayout: App token exiting now removed" + token); - mAppTokens.remove(token); - mAnimatingAppTokens.remove(token); - mExitingAppTokens.remove(i); + // Time to remove any exiting applications? + AppTokenList exitingAppTokens = displayContent.mExitingAppTokens; + for (i = exitingAppTokens.size() - 1; i >= 0; i--) { + AppWindowToken token = exitingAppTokens.get(i); + if (!token.hasVisible && !mClosingApps.contains(token)) { + // Make sure there is no animation running on this token, + // so any windows associated with it will be removed as + // soon as their animations are complete + token.mAppAnimator.clearAnimation(); + token.mAppAnimator.animating = false; + if (DEBUG_ADD_REMOVE || DEBUG_TOKEN_MOVEMENT) Slog.v(TAG, + "performLayout: App token exiting now removed" + token); + final Task task = mTaskIdToTask.get(token.groupId); + if (task != null && task.removeAppToken(token)) { + mTaskIdToTask.delete(token.groupId); + } + exitingAppTokens.remove(i); + } } } @@ -9030,7 +9072,7 @@ public class WindowManagerService extends IWindowManager.Stub defaultDisplay.layoutNeeded = true; } - DisplayContentsIterator iterator = new DisplayContentsIterator(); + iterator = new DisplayContentsIterator(); while (iterator.hasNext()) { DisplayContent displayContent = iterator.next(); if (displayContent.pendingLayoutChanges != 0) { @@ -9281,10 +9323,10 @@ public class WindowManagerService extends IWindowManager.Stub // window list to make sure we haven't left any dangling surfaces // around. - AllWindowsIterator iterator = new AllWindowsIterator(); + mTmpWindowsIterator.reset(FORWARD_ITERATOR); Slog.i(TAG, "Out of memory for surface! Looking for leaks..."); - while (iterator.hasNext()) { - WindowState ws = iterator.next(); + while (mTmpWindowsIterator.hasNext()) { + WindowState ws = mTmpWindowsIterator.next(); WindowStateAnimator wsa = ws.mWinAnimator; if (wsa.mSurfaceControl != null) { if (!mSessions.contains(wsa.mSession)) { @@ -9317,9 +9359,9 @@ public class WindowManagerService extends IWindowManager.Stub if (!leakedSurface) { Slog.w(TAG, "No leaked surfaces; killing applicatons!"); SparseIntArray pidCandidates = new SparseIntArray(); - iterator = new AllWindowsIterator(); - while (iterator.hasNext()) { - WindowState ws = iterator.next(); + mTmpWindowsIterator.reset(FORWARD_ITERATOR); + while (mTmpWindowsIterator.hasNext()) { + WindowState ws = mTmpWindowsIterator.next(); if (mForceRemoves.contains(ws)) { continue; } @@ -9445,8 +9487,20 @@ public class WindowManagerService extends IWindowManager.Stub } private WindowState findFocusedWindowLocked(DisplayContent displayContent) { - int nextAppIndex = mAppTokens.size()-1; - WindowToken nextApp = nextAppIndex >= 0 ? mAppTokens.get(nextAppIndex) : null; + // Set nextApp to the first app and set taskNdx and tokenNdx to point to the app following. + final ArrayList<Task> tasks = displayContent.getTasks(); + int taskNdx = tasks.size() - 1; + AppTokenList tokens = taskNdx >= 0 ? tasks.get(taskNdx).mAppTokens : null; + int tokenNdx = tokens != null ? tokens.size() - 1 : -1; + WindowToken nextApp = tokenNdx >= 0 ? tokens.get(tokenNdx) : null; + --tokenNdx; + if (tokenNdx < 0) { + --taskNdx; + if (taskNdx >= 0) { + tokens = tasks.get(taskNdx).mAppTokens; + tokenNdx = tokens.size() - 1; + } + } final WindowList windows = displayContent.getWindowList(); for (int i = windows.size() - 1; i >= 0; i--) { @@ -9462,8 +9516,8 @@ public class WindowManagerService extends IWindowManager.Stub // If this window's application has been removed, just skip it. if (thisApp != null && (thisApp.removed || thisApp.sendingToBottom)) { - if (DEBUG_FOCUS) Slog.v(TAG, "Skipping app because " + (thisApp.removed - ? "removed" : "sendingToBottom")); + if (DEBUG_FOCUS) Slog.v(TAG, "Skipping " + thisApp + " because " + + (thisApp.removed ? "removed" : "sendingToBottom")); continue; } @@ -9472,18 +9526,25 @@ public class WindowManagerService extends IWindowManager.Stub // through the app tokens until we find its app. if (thisApp != null && nextApp != null && thisApp != nextApp && win.mAttrs.type != TYPE_APPLICATION_STARTING) { - int origAppIndex = nextAppIndex; - while (nextAppIndex > 0) { - if (nextApp == mFocusedApp) { - // Whoops, we are below the focused app... no focus - // for you! - if (localLOGV || DEBUG_FOCUS) Slog.v( - TAG, "Reached focused app: " + mFocusedApp); - return null; - } - nextAppIndex--; - nextApp = mAppTokens.get(nextAppIndex); - if (nextApp == thisApp) { + final WindowToken origAppToken = nextApp; + final int origTaskNdx = taskNdx; + final int origTokenNdx = tokenNdx; + for ( ; taskNdx >= 0; --taskNdx) { + tokens = tasks.get(taskNdx).mAppTokens; + for ( ; tokenNdx >= 0; --tokenNdx) { + if (nextApp == mFocusedApp) { + // Whoops, we are below the focused app... no focus + // for you! + if (localLOGV || DEBUG_FOCUS) Slog.v( + TAG, "Reached focused app: " + mFocusedApp); + return null; + } + nextApp = tokens.get(tokenNdx); + if (nextApp == thisApp) { + break; + } + } + if (thisApp == nextApp) { break; } } @@ -9491,8 +9552,10 @@ public class WindowManagerService extends IWindowManager.Stub // Uh oh, the app token doesn't exist! This shouldn't // happen, but if it does we can get totally hosed... // so restart at the original app. - nextAppIndex = origAppIndex; - nextApp = mAppTokens.get(nextAppIndex); + nextApp = origAppToken; + // return indices to same place. + taskNdx = origTaskNdx; + tokenNdx = origTokenNdx; } } @@ -9862,15 +9925,6 @@ public class WindowManagerService extends IWindowManager.Stub } } } - if (mAppTokens.size() > 0) { - pw.println(); - pw.println(" Application tokens in Z order:"); - for (int i=mAppTokens.size()-1; i>=0; i--) { - pw.print(" App #"); pw.print(i); - pw.print(' '); pw.print(mAppTokens.get(i)); pw.println(":"); - mAppTokens.get(i).dump(pw, " "); - } - } if (mFinishedStarting.size() > 0) { pw.println(); pw.println(" Finishing start of application tokens:"); @@ -9886,51 +9940,6 @@ public class WindowManagerService extends IWindowManager.Stub } } } - if (mExitingTokens.size() > 0) { - pw.println(); - pw.println(" Exiting tokens:"); - for (int i=mExitingTokens.size()-1; i>=0; i--) { - WindowToken token = mExitingTokens.get(i); - pw.print(" Exiting #"); pw.print(i); - pw.print(' '); pw.print(token); - if (dumpAll) { - pw.println(':'); - token.dump(pw, " "); - } else { - pw.println(); - } - } - } - if (mExitingAppTokens.size() > 0) { - pw.println(); - pw.println(" Exiting application tokens:"); - for (int i=mExitingAppTokens.size()-1; i>=0; i--) { - WindowToken token = mExitingAppTokens.get(i); - pw.print(" Exiting App #"); pw.print(i); - pw.print(' '); pw.print(token); - if (dumpAll) { - pw.println(':'); - token.dump(pw, " "); - } else { - pw.println(); - } - } - } - if (mAppTransition.isRunning() && mAnimatingAppTokens.size() > 0) { - pw.println(); - pw.println(" Application tokens during animation:"); - for (int i=mAnimatingAppTokens.size()-1; i>=0; i--) { - WindowToken token = mAnimatingAppTokens.get(i); - pw.print(" App moving to bottom #"); pw.print(i); - pw.print(' '); pw.print(token); - if (dumpAll) { - pw.println(':'); - token.dump(pw, " "); - } else { - pw.println(); - } - } - } if (mOpeningApps.size() > 0 || mClosingApps.size() > 0) { pw.println(); if (mOpeningApps.size() > 0) { @@ -9975,9 +9984,9 @@ public class WindowManagerService extends IWindowManager.Stub void dumpWindowsNoHeaderLocked(PrintWriter pw, boolean dumpAll, ArrayList<WindowState> windows) { int j = 0; - final AllWindowsIterator iterator = new AllWindowsIterator(REVERSE_ITERATOR); - while (iterator.hasNext()) { - final WindowState w = iterator.next(); + mTmpWindowsIterator.reset(REVERSE_ITERATOR); + while (mTmpWindowsIterator.hasNext()) { + final WindowState w = mTmpWindowsIterator.next(); if (windows == null || windows.contains(w)) { pw.print(" Window #"); pw.print(j++); pw.print(' '); pw.print(w); pw.println(":"); @@ -10163,9 +10172,9 @@ public class WindowManagerService extends IWindowManager.Stub WindowList windows = new WindowList(); if ("visible".equals(name)) { synchronized(mWindowMap) { - final AllWindowsIterator iterator = new AllWindowsIterator(REVERSE_ITERATOR); - while (iterator.hasNext()) { - final WindowState w = iterator.next(); + mTmpWindowsIterator.reset(REVERSE_ITERATOR); + while (mTmpWindowsIterator.hasNext()) { + final WindowState w = mTmpWindowsIterator.next(); if (w.mWinAnimator.mSurfaceShown) { windows.add(w); } @@ -10180,9 +10189,9 @@ public class WindowManagerService extends IWindowManager.Stub } catch (RuntimeException e) { } synchronized(mWindowMap) { - final AllWindowsIterator iterator = new AllWindowsIterator(REVERSE_ITERATOR); - while (iterator.hasNext()) { - final WindowState w = iterator.next(); + mTmpWindowsIterator.reset(REVERSE_ITERATOR); + while (mTmpWindowsIterator.hasNext()) { + final WindowState w = mTmpWindowsIterator.next(); if (name != null) { if (w.mAttrs.getTitle().toString().contains(name)) { windows.add(w); @@ -10435,6 +10444,10 @@ public class WindowManagerService extends IWindowManager.Stub class DisplayContentsIterator implements Iterator<DisplayContent> { private int cur; + void reset() { + cur = 0; + } + @Override public boolean hasNext() { return cur < mDisplayContents.size(); @@ -10454,7 +10467,6 @@ public class WindowManagerService extends IWindowManager.Stub } } - final static boolean REVERSE_ITERATOR = true; class AllWindowsIterator implements Iterator<WindowState> { private DisplayContent mDisplayContent; private DisplayContentsIterator mDisplayContentsIterator; @@ -10463,19 +10475,33 @@ public class WindowManagerService extends IWindowManager.Stub private boolean mReverse; AllWindowsIterator() { - mDisplayContentsIterator = new DisplayContentsIterator(); - mDisplayContent = mDisplayContentsIterator.next(); - mWindowList = mDisplayContent.getWindowList(); + this(false); } AllWindowsIterator(boolean reverse) { - this(); + mDisplayContentsIterator = new DisplayContentsIterator(); + reset(reverse); + } + + void reset(boolean reverse) { mReverse = reverse; - mWindowListIndex = reverse ? mWindowList.size() - 1 : 0; + mDisplayContentsIterator.reset(); + if (mDisplayContentsIterator.hasNext()) { + mDisplayContent = mDisplayContentsIterator.next(); + mWindowList = mDisplayContent.getWindowList(); + mWindowListIndex = reverse ? mWindowList.size() - 1 : 0; + } else { + mDisplayContent = null; + mWindowList = null; + mWindowListIndex = 0; + } } @Override public boolean hasNext() { + if (mDisplayContent == null) { + return false; + } if (mReverse) { return mWindowListIndex >= 0; } diff --git a/services/java/com/android/server/wm/WindowState.java b/services/java/com/android/server/wm/WindowState.java index 506fcec..e471e46 100644 --- a/services/java/com/android/server/wm/WindowState.java +++ b/services/java/com/android/server/wm/WindowState.java @@ -55,6 +55,12 @@ import java.io.PrintWriter; import java.util.ArrayList; class WindowList extends ArrayList<WindowState> { + WindowList() { + super(); + } + WindowList(WindowList windows) { + super(windows); + } } /** @@ -679,6 +685,13 @@ final class WindowState implements WindowManagerPolicy.WindowState { return mDisplayContent.getDisplayId(); } + TaskStack getStack() { + if (mAppToken != null) { + return mService.mTaskIdToTask.get(mAppToken.groupId).mStack; + } + return null; + } + public long getInputDispatchingTimeoutNanos() { return mAppToken != null ? mAppToken.inputDispatchingTimeoutNanos @@ -1109,7 +1122,7 @@ final class WindowState implements WindowManagerPolicy.WindowState { return true; } - public boolean setAppOpVisibilityLw(boolean state) { + public void setAppOpVisibilityLw(boolean state) { if (mAppOpVisibility != state) { mAppOpVisibility = state; if (state) { @@ -1119,13 +1132,11 @@ final class WindowState implements WindowManagerPolicy.WindowState { // ops modifies they should only be hidden by policy due to the // lock screen, and the user won't be changing this if locked. // Plus it will quickly be fixed the next time we do a layout. - showLw(true, false); + showLw(true, true); } else { - hideLw(true, false); + hideLw(true, true); } - return true; } - return false; } @Override diff --git a/services/java/com/android/server/wm/WindowToken.java b/services/java/com/android/server/wm/WindowToken.java index bd0ace8..2267123 100644 --- a/services/java/com/android/server/wm/WindowToken.java +++ b/services/java/com/android/server/wm/WindowToken.java @@ -19,7 +19,6 @@ package com.android.server.wm; import android.os.IBinder; import java.io.PrintWriter; -import java.util.ArrayList; /** * Container of a set of related windows in the window manager. Often this diff --git a/tests/permission/src/com/android/framework/permission/tests/WindowManagerPermissionTests.java b/tests/permission/src/com/android/framework/permission/tests/WindowManagerPermissionTests.java index 746ac06..10baac5 100644 --- a/tests/permission/src/com/android/framework/permission/tests/WindowManagerPermissionTests.java +++ b/tests/permission/src/com/android/framework/permission/tests/WindowManagerPermissionTests.java @@ -93,7 +93,7 @@ public class WindowManagerPermissionTests extends TestCase { } try { - mWm.addAppToken(0, null, 0, 0, false, false); + mWm.addAppToken(0, null, 0, 0, 0, false, false); fail("IWindowManager.addAppToken did not throw SecurityException as" + " expected"); } catch (SecurityException e) { @@ -222,37 +222,7 @@ public class WindowManagerPermissionTests extends TestCase { } catch (RemoteException e) { fail("Unexpected remote exception"); } - - try { - mWm.moveAppToken(0, null); - fail("IWindowManager.moveAppToken did not throw SecurityException as" - + " expected"); - } catch (SecurityException e) { - // expected - } catch (RemoteException e) { - fail("Unexpected remote exception"); - } - - try { - mWm.moveAppTokensToTop(null); - fail("IWindowManager.moveAppTokensToTop did not throw SecurityException as" - + " expected"); - } catch (SecurityException e) { - // expected - } catch (RemoteException e) { - fail("Unexpected remote exception"); - } - - try { - mWm.moveAppTokensToBottom(null); - fail("IWindowManager.moveAppTokensToBottom did not throw SecurityException as" - + " expected"); - } catch (SecurityException e) { - // expected - } catch (RemoteException e) { - fail("Unexpected remote exception"); - } - } + } @SmallTest public void testDISABLE_KEYGUARD() { diff --git a/tools/layoutlib/bridge/src/android/view/IWindowManagerImpl.java b/tools/layoutlib/bridge/src/android/view/IWindowManagerImpl.java index 434b131..0ca230c 100644 --- a/tools/layoutlib/bridge/src/android/view/IWindowManagerImpl.java +++ b/tools/layoutlib/bridge/src/android/view/IWindowManagerImpl.java @@ -87,8 +87,8 @@ public class IWindowManagerImpl implements IWindowManager { // ---- unused implementation of IWindowManager ---- @Override - public void addAppToken(int arg0, IApplicationToken arg1, int arg2, int arg3, boolean arg4, - boolean arg5) + public void addAppToken(int arg0, IApplicationToken arg1, int arg2, int arg3, int arg4, + boolean arg5, boolean arg6) throws RemoteException { // TODO Auto-generated method stub @@ -211,24 +211,6 @@ public class IWindowManagerImpl implements IWindowManager { } @Override - public void moveAppToken(int arg0, IBinder arg1) throws RemoteException { - // TODO Auto-generated method stub - - } - - @Override - public void moveAppTokensToBottom(List<IBinder> arg0) throws RemoteException { - // TODO Auto-generated method stub - - } - - @Override - public void moveAppTokensToTop(List<IBinder> arg0) throws RemoteException { - // TODO Auto-generated method stub - - } - - @Override public IWindowSession openSession(IInputMethodClient arg0, IInputContext arg1) throws RemoteException { // TODO Auto-generated method stub |