Merge "Update DimAnimator layer when its window changes." into jb-dev
diff --git a/api/current.txt b/api/current.txt
index a8bf949..4b10577 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -315,7 +315,6 @@
field public static final int cacheColorHint = 16843009; // 0x1010101
field public static final int calendarViewShown = 16843596; // 0x101034c
field public static final int calendarViewStyle = 16843613; // 0x101035d
- field public static final int canHandleGestures = 16843691; // 0x10103ab
field public static final int canRetrieveWindowContent = 16843653; // 0x1010385
field public static final int candidatesTextStyleSpans = 16843312; // 0x1010230
field public static final deprecated int capitalize = 16843113; // 0x1010169
@@ -754,7 +753,7 @@
field public static final int pathPrefix = 16842795; // 0x101002b
field public static final int permission = 16842758; // 0x1010006
field public static final int permissionGroup = 16842762; // 0x101000a
- field public static final int permissionGroupFlags = 16843692; // 0x10103ac
+ field public static final int permissionGroupFlags = 16843691; // 0x10103ab
field public static final int persistent = 16842765; // 0x101000d
field public static final int persistentDrawingCache = 16842990; // 0x10100ee
field public static final deprecated int phoneNumber = 16843111; // 0x1010167
@@ -2017,7 +2016,6 @@
method protected void onServiceConnected();
method public final boolean performGlobalAction(int);
method public final void setServiceInfo(android.accessibilityservice.AccessibilityServiceInfo);
- field public static final int GESTURE_DOUBLE_TAP = 17; // 0x11
field public static final int GESTURE_SWIPE_DOWN = 2; // 0x2
field public static final int GESTURE_SWIPE_DOWN_AND_LEFT = 15; // 0xf
field public static final int GESTURE_SWIPE_DOWN_AND_RIGHT = 16; // 0x10
@@ -2034,7 +2032,6 @@
field public static final int GESTURE_SWIPE_UP_AND_DOWN = 7; // 0x7
field public static final int GESTURE_SWIPE_UP_AND_LEFT = 13; // 0xd
field public static final int GESTURE_SWIPE_UP_AND_RIGHT = 14; // 0xe
- field public static final int GESTURE_TAP_AND_HOLD = 18; // 0x12
field public static final int GLOBAL_ACTION_BACK = 1; // 0x1
field public static final int GLOBAL_ACTION_HOME = 2; // 0x2
field public static final int GLOBAL_ACTION_NOTIFICATIONS = 4; // 0x4
@@ -2048,7 +2045,6 @@
method public int describeContents();
method public static java.lang.String feedbackTypeToString(int);
method public static java.lang.String flagToString(int);
- method public boolean getCanHandleGestures();
method public boolean getCanRetrieveWindowContent();
method public deprecated java.lang.String getDescription();
method public java.lang.String getId();
@@ -2064,7 +2060,8 @@
field public static final int FEEDBACK_HAPTIC = 2; // 0x2
field public static final int FEEDBACK_SPOKEN = 1; // 0x1
field public static final int FEEDBACK_VISUAL = 8; // 0x8
- field public static final int INCLUDE_NOT_IMPORTANT_VIEWS = 2; // 0x2
+ field public static final int FLAG_INCLUDE_NOT_IMPORTANT_VIEWS = 2; // 0x2
+ field public static final int FLAG_REQUEST_TOUCH_EXPLORATION_MODE = 4; // 0x4
field public int eventTypes;
field public int feedbackType;
field public int flags;
@@ -2823,6 +2820,7 @@
field public long availMem;
field public boolean lowMemory;
field public long threshold;
+ field public long totalMem;
}
public static class ActivityManager.ProcessErrorStateInfo implements android.os.Parcelable {
@@ -3724,10 +3722,6 @@
field public static final int FLAG_ONGOING_EVENT = 2; // 0x2
field public static final int FLAG_ONLY_ALERT_ONCE = 8; // 0x8
field public static final int FLAG_SHOW_LIGHTS = 1; // 0x1
- field public static final java.lang.String KIND_CALL = "android.call";
- field public static final java.lang.String KIND_EMAIL = "android.email";
- field public static final java.lang.String KIND_EVENT = "android.event";
- field public static final java.lang.String KIND_MESSAGE = "android.message";
field public static final java.lang.String KIND_PROMO = "android.promo";
field public static final int PRIORITY_DEFAULT = 0; // 0x0
field public static final int PRIORITY_HIGH = 1; // 0x1
@@ -3745,7 +3739,6 @@
field public android.app.PendingIntent fullScreenIntent;
field public int icon;
field public int iconLevel;
- field public java.lang.String[] kind;
field public android.graphics.Bitmap largeIcon;
field public int ledARGB;
field public int ledOffMS;
@@ -3780,7 +3773,6 @@
public static class Notification.Builder {
ctor public Notification.Builder(android.content.Context);
method public android.app.Notification.Builder addAction(int, java.lang.CharSequence, android.app.PendingIntent);
- method public android.app.Notification.Builder addKind(java.lang.String);
method public android.app.Notification build();
method public deprecated android.app.Notification getNotification();
method public android.app.Notification.Builder setAutoCancel(boolean);
@@ -5121,6 +5113,8 @@
ctor public ContentResolver(android.content.Context);
method public final android.content.ContentProviderClient acquireContentProviderClient(android.net.Uri);
method public final android.content.ContentProviderClient acquireContentProviderClient(java.lang.String);
+ method public final android.content.ContentProviderClient acquireUnstableContentProviderClient(android.net.Uri);
+ method public final android.content.ContentProviderClient acquireUnstableContentProviderClient(java.lang.String);
method public static void addPeriodicSync(android.accounts.Account, java.lang.String, android.os.Bundle, long);
method public static java.lang.Object addStatusChangeListener(int, android.content.SyncStatusObserver);
method public android.content.ContentProviderResult[] applyBatch(java.lang.String, java.util.ArrayList<android.content.ContentProviderOperation>) throws android.content.OperationApplicationException, android.os.RemoteException;
@@ -7016,9 +7010,9 @@
method public void unregisterDataSetObserver(android.database.DataSetObserver);
field protected boolean mClosed;
field protected android.content.ContentResolver mContentResolver;
- field protected java.lang.Long mCurrentRowID;
+ field protected deprecated java.lang.Long mCurrentRowID;
field protected int mPos;
- field protected int mRowIdColumnIndex;
+ field protected deprecated int mRowIdColumnIndex;
field protected deprecated java.util.HashMap mUpdatedRows;
}
@@ -11262,6 +11256,7 @@
field public static final java.lang.String KEY_CHANNEL_MASK = "channel-mask";
field public static final java.lang.String KEY_COLOR_FORMAT = "color-format";
field public static final java.lang.String KEY_DURATION = "durationUs";
+ field public static final java.lang.String KEY_FLAC_COMPRESSION_LEVEL = "flac-compression-level";
field public static final java.lang.String KEY_FRAME_RATE = "frame-rate";
field public static final java.lang.String KEY_HEIGHT = "height";
field public static final java.lang.String KEY_IS_ADTS = "is-adts";
@@ -12708,22 +12703,6 @@
package android.net.nsd {
- public class DnsSdTxtRecord implements android.os.Parcelable {
- ctor public DnsSdTxtRecord();
- ctor public DnsSdTxtRecord(byte[]);
- ctor public DnsSdTxtRecord(android.net.nsd.DnsSdTxtRecord);
- method public boolean contains(java.lang.String);
- method public int describeContents();
- method public java.lang.String get(java.lang.String);
- method public byte[] getRawData();
- method public int keyCount();
- method public int remove(java.lang.String);
- method public void set(java.lang.String, java.lang.String);
- method public int size();
- method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator CREATOR;
- }
-
public final class NsdManager {
method public void discoverServices(java.lang.String, int, android.net.nsd.NsdManager.DiscoveryListener);
method public void registerService(android.net.nsd.NsdServiceInfo, int, android.net.nsd.NsdManager.RegistrationListener);
@@ -13345,7 +13324,7 @@
}
public static abstract interface WifiP2pManager.DnsSdTxtRecordListener {
- method public abstract void onDnsSdTxtRecordAvailable(java.lang.String, android.net.nsd.DnsSdTxtRecord, android.net.wifi.p2p.WifiP2pDevice);
+ method public abstract void onDnsSdTxtRecordAvailable(java.lang.String, java.util.Map<java.lang.String, java.lang.String>, android.net.wifi.p2p.WifiP2pDevice);
}
public static abstract interface WifiP2pManager.GroupInfoListener {
@@ -13369,7 +13348,7 @@
package android.net.wifi.p2p.nsd {
public class WifiP2pDnsSdServiceInfo extends android.net.wifi.p2p.nsd.WifiP2pServiceInfo {
- method public static android.net.wifi.p2p.nsd.WifiP2pDnsSdServiceInfo newInstance(java.lang.String, java.lang.String, android.net.nsd.DnsSdTxtRecord);
+ method public static android.net.wifi.p2p.nsd.WifiP2pDnsSdServiceInfo newInstance(java.lang.String, java.lang.String, java.util.Map<java.lang.String, java.lang.String>);
}
public class WifiP2pDnsSdServiceRequest extends android.net.wifi.p2p.nsd.WifiP2pServiceRequest {
@@ -18410,7 +18389,6 @@
field public static final java.lang.String RADIO_NFC = "nfc";
field public static final java.lang.String RADIO_WIFI = "wifi";
field public static final java.lang.String RINGTONE = "ringtone";
- field public static final java.lang.String SCREEN_AUTO_BRIGHTNESS_ADJ = "screen_auto_brightness_adj";
field public static final java.lang.String SCREEN_BRIGHTNESS = "screen_brightness";
field public static final java.lang.String SCREEN_BRIGHTNESS_MODE = "screen_brightness_mode";
field public static final int SCREEN_BRIGHTNESS_MODE_AUTOMATIC = 1; // 0x1
@@ -25271,7 +25249,7 @@
ctor public AccessibilityNodeProvider();
method public android.view.accessibility.AccessibilityNodeInfo accessibilityFocusSearch(int, int);
method public android.view.accessibility.AccessibilityNodeInfo createAccessibilityNodeInfo(int);
- method public android.view.accessibility.AccessibilityNodeInfo findAccessibilitiyFocus(int);
+ method public android.view.accessibility.AccessibilityNodeInfo findAccessibilityFocus(int);
method public java.util.List<android.view.accessibility.AccessibilityNodeInfo> findAccessibilityNodeInfosByText(java.lang.String, int);
method public boolean performAction(int, int, android.os.Bundle);
}
diff --git a/cmds/input/src/com/android/commands/input/Input.java b/cmds/input/src/com/android/commands/input/Input.java
index fcf3c7e..341f30f 100755
--- a/cmds/input/src/com/android/commands/input/Input.java
+++ b/cmds/input/src/com/android/commands/input/Input.java
@@ -17,8 +17,6 @@
package com.android.commands.input;
import android.hardware.input.InputManager;
-import android.os.RemoteException;
-import android.os.ServiceManager;
import android.os.SystemClock;
import android.util.Log;
import android.view.InputDevice;
@@ -59,7 +57,11 @@
}
} else if (command.equals("keyevent")) {
if (args.length == 2) {
- sendKeyEvent(Integer.parseInt(args[1]));
+ int keyCode = KeyEvent.keyCodeFromString(args[1]);
+ if (keyCode == KeyEvent.KEYCODE_UNKNOWN) {
+ keyCode = KeyEvent.keyCodeFromString("KEYCODE_" + args[1]);
+ }
+ sendKeyEvent(keyCode);
return;
}
} else if (command.equals("tap")) {
@@ -163,7 +165,7 @@
private void showUsage() {
System.err.println("usage: input ...");
System.err.println(" input text <string>");
- System.err.println(" input keyevent <key code>");
+ System.err.println(" input keyevent <key code number or name>");
System.err.println(" input tap <x> <y>");
System.err.println(" input swipe <x1> <y1> <x2> <y2>");
}
diff --git a/core/java/android/accessibilityservice/AccessibilityService.java b/core/java/android/accessibilityservice/AccessibilityService.java
index c559e54..850fe48 100644
--- a/core/java/android/accessibilityservice/AccessibilityService.java
+++ b/core/java/android/accessibilityservice/AccessibilityService.java
@@ -284,16 +284,6 @@
public static final int GESTURE_SWIPE_DOWN_AND_RIGHT = 16;
/**
- * The user has performed a double tap gesture on the touch screen.
- */
- public static final int GESTURE_DOUBLE_TAP = 17;
-
- /**
- * The user has performed a tap and hold gesture on the touch screen.
- */
- public static final int GESTURE_TAP_AND_HOLD = 18;
-
- /**
* The {@link Intent} that must be declared as handled by the service.
*/
public static final String SERVICE_INTERFACE =
@@ -377,14 +367,12 @@
/**
* Called by the system when the user performs a specific gesture on the
- * touch screen. If the gesture is not handled in this callback the system
- * may provide default handing. Therefore, one should return true from this
- * function if overriding of default behavior is desired.
+ * touch screen.
*
- * <strong>Note:</strong> To receive gestures an accessibility service
- * must declare that it can handle such by specifying the
- * <code><{@link android.R.styleable#AccessibilityService_canHandleGestures
- * canHandleGestures}></code> attribute.
+ * <strong>Note:</strong> To receive gestures an accessibility service must
+ * request that the device is in touch exploration mode by setting the
+ * {@link android.accessibilityservice.AccessibilityServiceInfo#FLAG_INCLUDE_NOT_IMPORTANT_VIEWS}
+ * flag.
*
* @param gestureId The unique id of the performed gesture.
*
@@ -406,13 +394,8 @@
* @see #GESTURE_SWIPE_RIGHT_AND_UP
* @see #GESTURE_SWIPE_RIGHT_AND_LEFT
* @see #GESTURE_SWIPE_RIGHT_AND_DOWN
- * @see #GESTURE_CLOCKWISE_CIRCLE
- * @see #GESTURE_COUNTER_CLOCKWISE_CIRCLE
- * @see #GESTURE_DOUBLE_TAP
- * @see #GESTURE_TAP_AND_HOLD
*/
protected boolean onGesture(int gestureId) {
- // TODO: Describe the default gesture processing in the javaDoc once it is finalized.
return false;
}
diff --git a/core/java/android/accessibilityservice/AccessibilityServiceInfo.java b/core/java/android/accessibilityservice/AccessibilityServiceInfo.java
index 7e6786b..10ea0fe 100644
--- a/core/java/android/accessibilityservice/AccessibilityServiceInfo.java
+++ b/core/java/android/accessibilityservice/AccessibilityServiceInfo.java
@@ -131,7 +131,19 @@
* elements.
* </p>
*/
- public static final int INCLUDE_NOT_IMPORTANT_VIEWS = 0x0000002;
+ public static final int FLAG_INCLUDE_NOT_IMPORTANT_VIEWS = 0x0000002;
+
+ /**
+ * This flag requests that the system gets into touch exploration mode.
+ * In this mode a single finger moving on the screen behaves as a mouse
+ * pointer hovering over the user interface. The system will also detect
+ * certain gestures performed on the touch screen and notify this service.
+ * The system will enable touch exploration mode if there is at least one
+ * accessibility service that has this flag set. Hence, clearing this
+ * flag does not guarantee that the device will not be in touch exploration
+ * mode since there may be another enabled service that requested it.
+ */
+ public static final int FLAG_REQUEST_TOUCH_EXPLORATION_MODE= 0x0000004;
/**
* The event types an {@link AccessibilityService} is interested in.
@@ -198,7 +210,8 @@
* <strong>Can be dynamically set at runtime.</strong>
* </p>
* @see #DEFAULT
- * @see #INCLUDE_NOT_IMPORTANT_VIEWS
+ * @see #FLAG_INCLUDE_NOT_IMPORTANT_VIEWS
+ * @see #FLAG_REQUEST_TOUCH_EXPLORATION_MODE
*/
public int flags;
@@ -224,11 +237,6 @@
private boolean mCanRetrieveWindowContent;
/**
- * Flag whether this accessibility service can handle gestures.
- */
- private boolean mCanHandleGestures;
-
- /**
* Resource id of the description of the accessibility service.
*/
private int mDescriptionResId;
@@ -308,8 +316,6 @@
mCanRetrieveWindowContent = asAttributes.getBoolean(
com.android.internal.R.styleable.AccessibilityService_canRetrieveWindowContent,
false);
- mCanHandleGestures = asAttributes.getBoolean(
- com.android.internal.R.styleable.AccessibilityService_canHandleGestures, false);
TypedValue peekedValue = asAttributes.peekValue(
com.android.internal.R.styleable.AccessibilityService_description);
if (peekedValue != null) {
@@ -392,18 +398,6 @@
}
/**
- * Whether this service can handle gestures.
- * <p>
- * <strong>Statically set from
- * {@link AccessibilityService#SERVICE_META_DATA meta-data}.</strong>
- * </p>
- * @return True if the service can handle gestures.
- */
- public boolean getCanHandleGestures() {
- return mCanHandleGestures;
- }
-
- /**
* Gets the non-localized description of the accessibility service.
* <p>
* <strong>Statically set from
@@ -614,8 +608,10 @@
switch (flag) {
case DEFAULT:
return "DEFAULT";
- case INCLUDE_NOT_IMPORTANT_VIEWS:
- return "REGARD_VIEWS_NOT_IMPORTANT_FOR_ACCESSIBILITY";
+ case FLAG_INCLUDE_NOT_IMPORTANT_VIEWS:
+ return "FLAG_INCLUDE_NOT_IMPORTANT_VIEWS";
+ case FLAG_REQUEST_TOUCH_EXPLORATION_MODE:
+ return "FLAG_REQUEST_TOUCH_EXPLORATION_MODE";
default:
return null;
}
diff --git a/core/java/android/accessibilityservice/UiTestAutomationBridge.java b/core/java/android/accessibilityservice/UiTestAutomationBridge.java
index 30be374..6837386 100644
--- a/core/java/android/accessibilityservice/UiTestAutomationBridge.java
+++ b/core/java/android/accessibilityservice/UiTestAutomationBridge.java
@@ -189,7 +189,7 @@
final AccessibilityServiceInfo info = new AccessibilityServiceInfo();
info.eventTypes = AccessibilityEvent.TYPES_ALL_MASK;
info.feedbackType = AccessibilityServiceInfo.FEEDBACK_GENERIC;
- info.flags |= AccessibilityServiceInfo.INCLUDE_NOT_IMPORTANT_VIEWS;
+ info.flags |= AccessibilityServiceInfo.FLAG_INCLUDE_NOT_IMPORTANT_VIEWS;
try {
manager.registerUiTestAutomationService(mListener, info);
diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java
index 7746ca9..4e61c3c 100644
--- a/core/java/android/app/ActivityManager.java
+++ b/core/java/android/app/ActivityManager.java
@@ -1078,13 +1078,20 @@
*/
public static class MemoryInfo implements Parcelable {
/**
- * The total available memory on the system. This number should not
+ * The available memory on the system. This number should not
* be considered absolute: due to the nature of the kernel, a significant
* portion of this memory is actually in use and needed for the overall
* system to run well.
*/
public long availMem;
-
+
+ /**
+ * The total memory accessible by the kernel. This is basically the
+ * RAM size of the device, not including below-kernel fixed allocations
+ * like DMA buffers, RAM for the baseband CPU, etc.
+ */
+ public long totalMem;
+
/**
* The threshold of {@link #availMem} at which we consider memory to be
* low and start killing background services and other non-extraneous
@@ -1116,6 +1123,7 @@
public void writeToParcel(Parcel dest, int flags) {
dest.writeLong(availMem);
+ dest.writeLong(totalMem);
dest.writeLong(threshold);
dest.writeInt(lowMemory ? 1 : 0);
dest.writeLong(hiddenAppThreshold);
@@ -1126,6 +1134,7 @@
public void readFromParcel(Parcel source) {
availMem = source.readLong();
+ totalMem = source.readLong();
threshold = source.readLong();
lowMemory = source.readInt() != 0;
hiddenAppThreshold = source.readLong();
diff --git a/core/java/android/app/ActivityOptions.java b/core/java/android/app/ActivityOptions.java
index 3d0b7d8..523a78d 100644
--- a/core/java/android/app/ActivityOptions.java
+++ b/core/java/android/app/ActivityOptions.java
@@ -98,6 +98,8 @@
public static final int ANIM_SCALE_UP = 2;
/** @hide */
public static final int ANIM_THUMBNAIL = 3;
+ /** @hide */
+ public static final int ANIM_THUMBNAIL_DELAYED = 4;
private String mPackageName;
private int mAnimationType = ANIM_NONE;
@@ -219,9 +221,38 @@
*/
public static ActivityOptions makeThumbnailScaleUpAnimation(View source,
Bitmap thumbnail, int startX, int startY, OnAnimationStartedListener listener) {
+ return makeThumbnailScaleUpAnimation(source, thumbnail, startX, startY, listener, false);
+ }
+
+ /**
+ * Create an ActivityOptions specifying an animation where a thumbnail
+ * is scaled from a given position to the new activity window that is
+ * being started. Before the animation, there is a short delay.
+ *
+ * @param source The View that this thumbnail is animating from. This
+ * defines the coordinate space for <var>startX</var> and <var>startY</var>.
+ * @param thumbnail The bitmap that will be shown as the initial thumbnail
+ * of the animation.
+ * @param startX The x starting location of the bitmap, relative to <var>source</var>.
+ * @param startY The y starting location of the bitmap, relative to <var>source</var>.
+ * @param listener Optional OnAnimationStartedListener to find out when the
+ * requested animation has started running. If for some reason the animation
+ * is not executed, the callback will happen immediately.
+ * @return Returns a new ActivityOptions object that you can use to
+ * supply these options as the options Bundle when starting an activity.
+ * @hide
+ */
+ public static ActivityOptions makeDelayedThumbnailScaleUpAnimation(View source,
+ Bitmap thumbnail, int startX, int startY, OnAnimationStartedListener listener) {
+ return makeThumbnailScaleUpAnimation(source, thumbnail, startX, startY, listener, true);
+ }
+
+ private static ActivityOptions makeThumbnailScaleUpAnimation(View source,
+ Bitmap thumbnail, int startX, int startY, OnAnimationStartedListener listener,
+ boolean delayed) {
ActivityOptions opts = new ActivityOptions();
opts.mPackageName = source.getContext().getPackageName();
- opts.mAnimationType = ANIM_THUMBNAIL;
+ opts.mAnimationType = delayed ? ANIM_THUMBNAIL_DELAYED : ANIM_THUMBNAIL;
opts.mThumbnail = thumbnail;
int[] pts = new int[2];
source.getLocationOnScreen(pts);
@@ -258,7 +289,8 @@
mStartY = opts.getInt(KEY_ANIM_START_Y, 0);
mStartWidth = opts.getInt(KEY_ANIM_START_WIDTH, 0);
mStartHeight = opts.getInt(KEY_ANIM_START_HEIGHT, 0);
- } else if (mAnimationType == ANIM_THUMBNAIL) {
+ } else if (mAnimationType == ANIM_THUMBNAIL ||
+ mAnimationType == ANIM_THUMBNAIL_DELAYED) {
mThumbnail = (Bitmap)opts.getParcelable(KEY_ANIM_THUMBNAIL);
mStartX = opts.getInt(KEY_ANIM_START_X, 0);
mStartY = opts.getInt(KEY_ANIM_START_Y, 0);
@@ -359,6 +391,7 @@
mStartHeight = otherOptions.mStartHeight;
break;
case ANIM_THUMBNAIL:
+ case ANIM_THUMBNAIL_DELAYED:
mAnimationType = otherOptions.mAnimationType;
mThumbnail = otherOptions.mThumbnail;
mStartX = otherOptions.mStartX;
@@ -401,6 +434,7 @@
b.putInt(KEY_ANIM_START_HEIGHT, mStartHeight);
break;
case ANIM_THUMBNAIL:
+ case ANIM_THUMBNAIL_DELAYED:
b.putInt(KEY_ANIM_TYPE, mAnimationType);
b.putParcelable(KEY_ANIM_THUMBNAIL, mThumbnail);
b.putInt(KEY_ANIM_START_X, mStartX);
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java
index 8799194..e2ebeba 100644
--- a/core/java/android/app/ActivityThread.java
+++ b/core/java/android/app/ActivityThread.java
@@ -4278,6 +4278,14 @@
}
}
+ public final IContentProvider acquireUnstableProvider(Context c, String name) {
+ return acquireProvider(c, name);
+ }
+
+ public final boolean releaseUnstableProvider(IContentProvider provider) {
+ return releaseProvider(provider);
+ }
+
final void completeRemoveProvider(IContentProvider provider) {
IBinder jBinder = provider.asBinder();
String remoteProviderName = null;
diff --git a/core/java/android/app/ContextImpl.java b/core/java/android/app/ContextImpl.java
index 4943c9a..299e408 100644
--- a/core/java/android/app/ContextImpl.java
+++ b/core/java/android/app/ContextImpl.java
@@ -1692,6 +1692,16 @@
return mMainThread.releaseProvider(provider);
}
+ @Override
+ protected IContentProvider acquireUnstableProvider(Context c, String name) {
+ return mMainThread.acquireUnstableProvider(c, name);
+ }
+
+ @Override
+ public boolean releaseUnstableProvider(IContentProvider icp) {
+ return mMainThread.releaseUnstableProvider(icp);
+ }
+
private final ActivityThread mMainThread;
}
}
diff --git a/core/java/android/app/Notification.java b/core/java/android/app/Notification.java
index f962259..ed9babf 100644
--- a/core/java/android/app/Notification.java
+++ b/core/java/android/app/Notification.java
@@ -390,21 +390,25 @@
public int priority;
/**
+ * @hide
* Notification type: incoming call (voice or video) or similar synchronous communication request.
*/
public static final String KIND_CALL = "android.call";
/**
+ * @hide
* Notification type: incoming direct message (SMS, instant message, etc.).
*/
public static final String KIND_MESSAGE = "android.message";
/**
+ * @hide
* Notification type: asynchronous bulk message (email).
*/
public static final String KIND_EMAIL = "android.email";
/**
+ * @hide
* Notification type: calendar event.
*/
public static final String KIND_EVENT = "android.event";
@@ -415,6 +419,7 @@
public static final String KIND_PROMO = "android.promo";
/**
+ * @hide
* If this notification matches of one or more special types (see the <code>KIND_*</code>
* constants), add them here, best match first.
*/
@@ -796,6 +801,12 @@
if (this.icon != 0) {
contentView.setImageViewResource(R.id.icon, this.icon);
}
+ if (priority < PRIORITY_LOW) {
+ contentView.setInt(R.id.icon,
+ "setBackgroundResource", R.drawable.notification_template_icon_low_bg);
+ contentView.setInt(R.id.status_bar_latest_event_content,
+ "setBackgroundResource", R.drawable.notification_bg_low);
+ }
if (contentTitle != null) {
contentView.setTextViewText(R.id.title, contentTitle);
}
@@ -971,8 +982,14 @@
}
/**
- * Show the {@link Notification#when} field as a countdown (or count-up) timer instead of a timestamp.
+ * Show the {@link Notification#when} field as a stopwatch.
+ *
+ * Instead of presenting <code>when</code> as a timestamp, the notification will show an
+ * automatically updating display of the minutes and seconds since <code>when</code>.
*
+ * Useful when showing an elapsed time (like an ongoing phone call).
+ *
+ * @see android.widget.Chronometer
* @see Notification#when
*/
public Builder setUsesChronometer(boolean b) {
@@ -1297,6 +1314,8 @@
}
/**
+ * @hide
+ *
* Add a kind (category) to this notification. Optional.
*
* @see Notification#kind
@@ -1364,6 +1383,12 @@
contentView.setImageViewBitmap(R.id.icon, mLargeIcon);
smallIconImageViewId = R.id.right_icon;
}
+ if (mPriority < PRIORITY_LOW) {
+ contentView.setInt(R.id.icon,
+ "setBackgroundResource", R.drawable.notification_template_icon_low_bg);
+ contentView.setInt(R.id.status_bar_latest_event_content,
+ "setBackgroundResource", R.drawable.notification_bg_low);
+ }
if (mSmallIcon != 0) {
contentView.setImageViewResource(smallIconImageViewId, mSmallIcon);
contentView.setViewVisibility(smallIconImageViewId, View.VISIBLE);
diff --git a/core/java/android/content/ContentProviderClient.java b/core/java/android/content/ContentProviderClient.java
index da2ab94..423f1f6 100644
--- a/core/java/android/content/ContentProviderClient.java
+++ b/core/java/android/content/ContentProviderClient.java
@@ -37,13 +37,16 @@
public class ContentProviderClient {
private final IContentProvider mContentProvider;
private final ContentResolver mContentResolver;
+ private final boolean mStable;
/**
* @hide
*/
- ContentProviderClient(ContentResolver contentResolver, IContentProvider contentProvider) {
+ ContentProviderClient(ContentResolver contentResolver,
+ IContentProvider contentProvider, boolean stable) {
mContentProvider = contentProvider;
mContentResolver = contentResolver;
+ mStable = stable;
}
/** See {@link ContentProvider#query ContentProvider.query} */
@@ -141,7 +144,11 @@
* @return true if this was release, false if it was already released
*/
public boolean release() {
- return mContentResolver.releaseProvider(mContentProvider);
+ if (mStable) {
+ return mContentResolver.releaseProvider(mContentProvider);
+ } else {
+ return mContentResolver.releaseUnstableProvider(mContentProvider);
+ }
}
/**
diff --git a/core/java/android/content/ContentResolver.java b/core/java/android/content/ContentResolver.java
index d4bca0a..f509fd8 100644
--- a/core/java/android/content/ContentResolver.java
+++ b/core/java/android/content/ContentResolver.java
@@ -198,6 +198,10 @@
}
/** @hide */
public abstract boolean releaseProvider(IContentProvider icp);
+ /** @hide */
+ protected abstract IContentProvider acquireUnstableProvider(Context c, String name);
+ /** @hide */
+ public abstract boolean releaseUnstableProvider(IContentProvider icp);
/**
* Return the MIME type of the given content URL.
@@ -588,34 +592,48 @@
if ("r".equals(mode)) {
return openTypedAssetFileDescriptor(uri, "*/*", null);
} else {
- IContentProvider provider = acquireProvider(uri);
- if (provider == null) {
- throw new FileNotFoundException("No content provider: " + uri);
- }
- try {
- AssetFileDescriptor fd = provider.openAssetFile(uri, mode);
- if(fd == null) {
- // The provider will be released by the finally{} clause
- return null;
+ int n = 0;
+ while (true) {
+ n++;
+ IContentProvider provider = acquireUnstableProvider(uri);
+ if (provider == null) {
+ throw new FileNotFoundException("No content provider: " + uri);
}
- ParcelFileDescriptor pfd = new ParcelFileDescriptorInner(
- fd.getParcelFileDescriptor(), provider);
+ try {
+ AssetFileDescriptor fd = provider.openAssetFile(uri, mode);
+ if (fd == null) {
+ // The provider will be released by the finally{} clause
+ return null;
+ }
+ ParcelFileDescriptor pfd = new ParcelFileDescriptorInner(
+ fd.getParcelFileDescriptor(), provider);
- // Success! Don't release the provider when exiting, let
- // ParcelFileDescriptorInner do that when it is closed.
- provider = null;
+ // Success! Don't release the provider when exiting, let
+ // ParcelFileDescriptorInner do that when it is closed.
+ provider = null;
- return new AssetFileDescriptor(pfd, fd.getStartOffset(),
- fd.getDeclaredLength());
- } catch (RemoteException e) {
- // Somewhat pointless, as Activity Manager will kill this
- // process shortly anyway if the depdendent ContentProvider dies.
- throw new FileNotFoundException("Dead content provider: " + uri);
- } catch (FileNotFoundException e) {
- throw e;
- } finally {
- if (provider != null) {
- releaseProvider(provider);
+ return new AssetFileDescriptor(pfd, fd.getStartOffset(),
+ fd.getDeclaredLength());
+ } catch (RemoteException e) {
+ // The provider died for some reason. Since we are
+ // acquiring it unstable, its process could have gotten
+ // killed and need to be restarted. We'll retry a couple
+ // times and if still can't succeed then fail.
+ if (n <= 2) {
+ try {
+ Thread.sleep(100);
+ } catch (InterruptedException e1) {
+ }
+ continue;
+ }
+ // Whatever, whatever, we'll go away.
+ throw new FileNotFoundException("Dead content provider: " + uri);
+ } catch (FileNotFoundException e) {
+ throw e;
+ } finally {
+ if (provider != null) {
+ releaseUnstableProvider(provider);
+ }
}
}
}
@@ -652,32 +670,48 @@
*/
public final AssetFileDescriptor openTypedAssetFileDescriptor(Uri uri,
String mimeType, Bundle opts) throws FileNotFoundException {
- IContentProvider provider = acquireProvider(uri);
- if (provider == null) {
- throw new FileNotFoundException("No content provider: " + uri);
- }
- try {
- AssetFileDescriptor fd = provider.openTypedAssetFile(uri, mimeType, opts);
- if (fd == null) {
- // The provider will be released by the finally{} clause
- return null;
+ int n = 0;
+ while (true) {
+ n++;
+ IContentProvider provider = acquireUnstableProvider(uri);
+ if (provider == null) {
+ throw new FileNotFoundException("No content provider: " + uri);
}
- ParcelFileDescriptor pfd = new ParcelFileDescriptorInner(
- fd.getParcelFileDescriptor(), provider);
+ try {
+ AssetFileDescriptor fd = provider.openTypedAssetFile(uri, mimeType, opts);
+ if (fd == null) {
+ // The provider will be released by the finally{} clause
+ return null;
+ }
+ ParcelFileDescriptor pfd = new ParcelFileDescriptorInner(
+ fd.getParcelFileDescriptor(), provider);
- // Success! Don't release the provider when exiting, let
- // ParcelFileDescriptorInner do that when it is closed.
- provider = null;
+ // Success! Don't release the provider when exiting, let
+ // ParcelFileDescriptorInner do that when it is closed.
+ provider = null;
- return new AssetFileDescriptor(pfd, fd.getStartOffset(),
- fd.getDeclaredLength());
- } catch (RemoteException e) {
- throw new FileNotFoundException("Dead content provider: " + uri);
- } catch (FileNotFoundException e) {
- throw e;
- } finally {
- if (provider != null) {
- releaseProvider(provider);
+ return new AssetFileDescriptor(pfd, fd.getStartOffset(),
+ fd.getDeclaredLength());
+ } catch (RemoteException e) {
+ // The provider died for some reason. Since we are
+ // acquiring it unstable, its process could have gotten
+ // killed and need to be restarted. We'll retry a couple
+ // times and if still can't succeed then fail.
+ if (n <= 2) {
+ try {
+ Thread.sleep(100);
+ } catch (InterruptedException e1) {
+ }
+ continue;
+ }
+ // Whatever, whatever, we'll go away.
+ throw new FileNotFoundException("Dead content provider: " + uri);
+ } catch (FileNotFoundException e) {
+ throw e;
+ } finally {
+ if (provider != null) {
+ releaseUnstableProvider(provider);
+ }
}
}
}
@@ -1003,6 +1037,34 @@
}
/**
+ * Returns the content provider for the given content URI.
+ *
+ * @param uri The URI to a content provider
+ * @return The ContentProvider for the given URI, or null if no content provider is found.
+ * @hide
+ */
+ public final IContentProvider acquireUnstableProvider(Uri uri) {
+ if (!SCHEME_CONTENT.equals(uri.getScheme())) {
+ return null;
+ }
+ String auth = uri.getAuthority();
+ if (auth != null) {
+ return acquireUnstableProvider(mContext, uri.getAuthority());
+ }
+ return null;
+ }
+
+ /**
+ * @hide
+ */
+ public final IContentProvider acquireUnstableProvider(String name) {
+ if (name == null) {
+ return null;
+ }
+ return acquireProvider(mContext, name);
+ }
+
+ /**
* Returns a {@link ContentProviderClient} that is associated with the {@link ContentProvider}
* that services the content at uri, starting the provider if necessary. Returns
* null if there is no provider associated wih the uri. The caller must indicate that they are
@@ -1016,7 +1078,7 @@
public final ContentProviderClient acquireContentProviderClient(Uri uri) {
IContentProvider provider = acquireProvider(uri);
if (provider != null) {
- return new ContentProviderClient(this, provider);
+ return new ContentProviderClient(this, provider, true);
}
return null;
@@ -1036,7 +1098,47 @@
public final ContentProviderClient acquireContentProviderClient(String name) {
IContentProvider provider = acquireProvider(name);
if (provider != null) {
- return new ContentProviderClient(this, provider);
+ return new ContentProviderClient(this, provider, true);
+ }
+
+ return null;
+ }
+
+ /**
+ * Like {@link #acquireContentProviderClient(Uri)}, but for use when you do
+ * not trust the stability of the target content provider. This turns off
+ * the mechanism in the platform clean up processes that are dependent on
+ * a content provider if that content provider's process goes away. Normally
+ * you can safely assume that once you have acquired a provider, you can freely
+ * use it as needed and it won't disappear, even if your process is in the
+ * background. If using this method, you need to take care to deal with any
+ * failures when communicating with the provider, and be sure to close it
+ * so that it can be re-opened later.
+ */
+ public final ContentProviderClient acquireUnstableContentProviderClient(Uri uri) {
+ IContentProvider provider = acquireProvider(uri);
+ if (provider != null) {
+ return new ContentProviderClient(this, provider, false);
+ }
+
+ return null;
+ }
+
+ /**
+ * Like {@link #acquireContentProviderClient(String)}, but for use when you do
+ * not trust the stability of the target content provider. This turns off
+ * the mechanism in the platform clean up processes that are dependent on
+ * a content provider if that content provider's process goes away. Normally
+ * you can safely assume that once you have acquired a provider, you can freely
+ * use it as needed and it won't disappear, even if your process is in the
+ * background. If using this method, you need to take care to deal with any
+ * failures when communicating with the provider, and be sure to close it
+ * so that it can be re-opened later.
+ */
+ public final ContentProviderClient acquireUnstableContentProviderClient(String name) {
+ IContentProvider provider = acquireProvider(name);
+ if (provider != null) {
+ return new ContentProviderClient(this, provider, false);
}
return null;
@@ -1690,7 +1792,7 @@
public void close() throws IOException {
if(!mReleaseProviderFlag) {
super.close();
- ContentResolver.this.releaseProvider(mContentProvider);
+ ContentResolver.this.releaseUnstableProvider(mContentProvider);
mReleaseProviderFlag = true;
}
}
diff --git a/core/java/android/database/AbstractCursor.java b/core/java/android/database/AbstractCursor.java
index dd6692c..fb04817 100644
--- a/core/java/android/database/AbstractCursor.java
+++ b/core/java/android/database/AbstractCursor.java
@@ -44,14 +44,20 @@
/**
* This must be set to the index of the row ID column by any
* subclass that wishes to support updates.
+ *
+ * @deprecated This field should not be used.
*/
+ @Deprecated
protected int mRowIdColumnIndex;
/**
* If {@link #mRowIdColumnIndex} is not -1 this contains contains the value of
* the column at {@link #mRowIdColumnIndex} for the current row this cursor is
* pointing at.
+ *
+ * @deprecated This field should not be used.
*/
+ @Deprecated
protected Long mCurrentRowID;
protected boolean mClosed;
@@ -62,8 +68,8 @@
private ContentObserver mSelfObserver;
private boolean mSelfObserverRegistered;
- private DataSetObservable mDataSetObservable = new DataSetObservable();
- private ContentObservable mContentObservable = new ContentObservable();
+ private final DataSetObservable mDataSetObservable = new DataSetObservable();
+ private final ContentObservable mContentObservable = new ContentObservable();
private Bundle mExtras = Bundle.EMPTY;
diff --git a/core/java/android/net/nsd/DnsSdTxtRecord.java b/core/java/android/net/nsd/DnsSdTxtRecord.java
index ccb9a91..2f20d44 100644
--- a/core/java/android/net/nsd/DnsSdTxtRecord.java
+++ b/core/java/android/net/nsd/DnsSdTxtRecord.java
@@ -36,6 +36,7 @@
*
* The DnsSdTxtRecord object stores the entire TXT data as a single byte array, traversing it
* as need be to implement its various methods.
+ * @hide
*
*/
public class DnsSdTxtRecord implements Parcelable {
diff --git a/core/java/android/os/Process.java b/core/java/android/os/Process.java
index 1df53e8..18fd3cb 100644
--- a/core/java/android/os/Process.java
+++ b/core/java/android/os/Process.java
@@ -897,6 +897,9 @@
public static final native long getFreeMemory();
/** @hide */
+ public static final native long getTotalMemory();
+
+ /** @hide */
public static final native void readProcLines(String path,
String[] reqFields, long[] outSizes);
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index ba8c4c9..497e66e8 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -1410,6 +1410,7 @@
/**
* Adjustment to auto-brightness to make it generally more (>0.0 <1.0)
* or less (<0.0 >-1.0) bright.
+ * @hide
*/
public static final String SCREEN_AUTO_BRIGHTNESS_ADJ = "screen_auto_brightness_adj";
diff --git a/core/java/android/view/AccessibilityInteractionController.java b/core/java/android/view/AccessibilityInteractionController.java
index 881594d..d42757d 100644
--- a/core/java/android/view/AccessibilityInteractionController.java
+++ b/core/java/android/view/AccessibilityInteractionController.java
@@ -413,7 +413,7 @@
// focus instead fetching all provider nodes to do the search here.
AccessibilityNodeProvider provider = host.getAccessibilityNodeProvider();
if (provider != null) {
- focused = provider.findAccessibilitiyFocus(virtualDescendantId);
+ focused = provider.findAccessibilityFocus(virtualDescendantId);
} else if (virtualDescendantId == View.NO_ID) {
focused = host.createAccessibilityNodeInfo();
}
diff --git a/core/java/android/view/IWindowManager.aidl b/core/java/android/view/IWindowManager.aidl
index e1f01db..c5a687a 100644
--- a/core/java/android/view/IWindowManager.aidl
+++ b/core/java/android/view/IWindowManager.aidl
@@ -84,7 +84,7 @@
void overridePendingAppTransitionScaleUp(int startX, int startY, int startWidth,
int startHeight);
void overridePendingAppTransitionThumb(in Bitmap srcThumb, int startX, int startY,
- IRemoteCallback startedCallback);
+ IRemoteCallback startedCallback, boolean delayed);
void executeAppTransition();
void setAppStartingWindow(IBinder token, String pkg, int theme,
in CompatibilityInfo compatInfo, CharSequence nonLocalizedLabel, int labelRes,
diff --git a/core/java/android/view/KeyCharacterMap.java b/core/java/android/view/KeyCharacterMap.java
index 5b371eb..2cb724f 100644
--- a/core/java/android/view/KeyCharacterMap.java
+++ b/core/java/android/view/KeyCharacterMap.java
@@ -386,19 +386,19 @@
*
* @param keyCode The key code.
* @param metaState The meta key modifier state.
- * @param outFallbackAction The fallback action object to populate.
- * @return True if a fallback action was found, false otherwise.
+ * @return The fallback action, or null if none. Remember to recycle the fallback action.
*
* @hide
*/
- public boolean getFallbackAction(int keyCode, int metaState,
- FallbackAction outFallbackAction) {
- if (outFallbackAction == null) {
- throw new IllegalArgumentException("fallbackAction must not be null");
- }
-
+ public FallbackAction getFallbackAction(int keyCode, int metaState) {
+ FallbackAction action = FallbackAction.obtain();
metaState = KeyEvent.normalizeMetaState(metaState);
- return nativeGetFallbackAction(mPtr, keyCode, metaState, outFallbackAction);
+ if (nativeGetFallbackAction(mPtr, keyCode, metaState, action)) {
+ action.metaState = KeyEvent.normalizeMetaState(action.metaState);
+ return action;
+ }
+ action.recycle();
+ return null;
}
/**
@@ -727,7 +727,44 @@
* @hide
*/
public static final class FallbackAction {
+ private static final int MAX_RECYCLED = 10;
+ private static final Object sRecycleLock = new Object();
+ private static FallbackAction sRecycleBin;
+ private static int sRecycledCount;
+
+ private FallbackAction next;
+
public int keyCode;
public int metaState;
+
+ private FallbackAction() {
+ }
+
+ public static FallbackAction obtain() {
+ final FallbackAction target;
+ synchronized (sRecycleLock) {
+ if (sRecycleBin == null) {
+ target = new FallbackAction();
+ } else {
+ target = sRecycleBin;
+ sRecycleBin = target.next;
+ sRecycledCount--;
+ target.next = null;
+ }
+ }
+ return target;
+ }
+
+ public void recycle() {
+ synchronized (sRecycleLock) {
+ if (sRecycledCount < MAX_RECYCLED) {
+ next = sRecycleBin;
+ sRecycleBin = this;
+ sRecycledCount += 1;
+ } else {
+ next = null;
+ }
+ }
+ }
}
}
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index 6e6fab2..b43db14 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -328,8 +328,6 @@
private final int mDensity;
- final KeyCharacterMap.FallbackAction mFallbackAction = new KeyCharacterMap.FallbackAction();
-
/**
* Consistency verifier for debugging purposes.
*/
@@ -2384,7 +2382,7 @@
}
} else {
if (mAccessibilityFocusedVirtualView == null) {
- mAccessibilityFocusedVirtualView = provider.findAccessibilitiyFocus(View.NO_ID);
+ mAccessibilityFocusedVirtualView = provider.findAccessibilityFocus(View.NO_ID);
}
if (mAccessibilityFocusedVirtualView == null) {
return;
@@ -4481,20 +4479,19 @@
final int keyCode = event.getKeyCode();
final int metaState = event.getMetaState();
- KeyEvent fallbackEvent = null;
- synchronized (mFallbackAction) {
- // Check for fallback actions specified by the key character map.
- if (kcm.getFallbackAction(keyCode, metaState, mFallbackAction)) {
- int flags = event.getFlags() | KeyEvent.FLAG_FALLBACK;
- fallbackEvent = KeyEvent.obtain(
- event.getDownTime(), event.getEventTime(),
- event.getAction(), mFallbackAction.keyCode,
- event.getRepeatCount(), mFallbackAction.metaState,
- event.getDeviceId(), event.getScanCode(),
- flags, event.getSource(), null);
- }
- }
- if (fallbackEvent != null) {
+ // Check for fallback actions specified by the key character map.
+ KeyCharacterMap.FallbackAction fallbackAction =
+ kcm.getFallbackAction(keyCode, metaState);
+ if (fallbackAction != null) {
+ final int flags = event.getFlags() | KeyEvent.FLAG_FALLBACK;
+ KeyEvent fallbackEvent = KeyEvent.obtain(
+ event.getDownTime(), event.getEventTime(),
+ event.getAction(), fallbackAction.keyCode,
+ event.getRepeatCount(), fallbackAction.metaState,
+ event.getDeviceId(), event.getScanCode(),
+ flags, event.getSource(), null);
+ fallbackAction.recycle();
+
dispatchKey(fallbackEvent);
}
}
diff --git a/core/java/android/view/accessibility/AccessibilityNodeProvider.java b/core/java/android/view/accessibility/AccessibilityNodeProvider.java
index a2e0d88..e60716d 100644
--- a/core/java/android/view/accessibility/AccessibilityNodeProvider.java
+++ b/core/java/android/view/accessibility/AccessibilityNodeProvider.java
@@ -151,7 +151,7 @@
* @see #createAccessibilityNodeInfo(int)
* @see AccessibilityNodeInfo
*/
- public AccessibilityNodeInfo findAccessibilitiyFocus(int virtualViewId) {
+ public AccessibilityNodeInfo findAccessibilityFocus(int virtualViewId) {
return null;
}
diff --git a/core/java/com/android/internal/app/PlatLogoActivity.java b/core/java/com/android/internal/app/PlatLogoActivity.java
index 37567fd..89f2187 100644
--- a/core/java/com/android/internal/app/PlatLogoActivity.java
+++ b/core/java/com/android/internal/app/PlatLogoActivity.java
@@ -29,64 +29,43 @@
import android.widget.Toast;
public class PlatLogoActivity extends Activity {
- Vibrator mZzz;
Toast mToast;
ImageView mContent;
int mCount;
final Handler mHandler = new Handler();
- Runnable mSuperLongPress = new Runnable() {
- public void run() {
- mCount++;
- mZzz.vibrate(50 * mCount);
- final float scale = 1f + 0.25f * mCount * mCount;
- mContent.setScaleX(scale);
- mContent.setScaleY(scale);
-
- if (mCount <= 3) {
- mHandler.postDelayed(mSuperLongPress, ViewConfiguration.getLongPressTimeout());
- } else {
- try {
- startActivity(new Intent(Intent.ACTION_MAIN)
- .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
- | Intent.FLAG_ACTIVITY_CLEAR_TASK
- | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS)
- .setClassName("com.android.systemui","com.android.systemui.Nyandroid"));
- } catch (ActivityNotFoundException ex) {
- android.util.Log.e("PlatLogoActivity", "Couldn't find platlogo screensaver.");
- }
- finish();
- }
- }
- };
-
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- mZzz = (Vibrator)getSystemService(VIBRATOR_SERVICE);
- mToast = Toast.makeText(this, "Android 4.0: Ice Cream Sandwich", Toast.LENGTH_SHORT);
+ mToast = Toast.makeText(this, "Android X.X: Jelly Bean", Toast.LENGTH_SHORT);
mContent = new ImageView(this);
mContent.setImageResource(com.android.internal.R.drawable.platlogo);
mContent.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
- mContent.setOnTouchListener(new View.OnTouchListener() {
+ mContent.setOnClickListener(new View.OnClickListener() {
@Override
- public boolean onTouch(View v, MotionEvent event) {
- final int action = event.getAction();
- if (action == MotionEvent.ACTION_DOWN) {
- mContent.setPressed(true);
- mHandler.removeCallbacks(mSuperLongPress);
- mCount = 0;
- mHandler.postDelayed(mSuperLongPress, 2*ViewConfiguration.getLongPressTimeout());
- } else if (action == MotionEvent.ACTION_UP) {
- if (mContent.isPressed()) {
- mContent.setPressed(false);
- mHandler.removeCallbacks(mSuperLongPress);
- mToast.show();
- }
+ public void onClick(View v) {
+ mToast.show();
+ mContent.setImageResource(com.android.internal.R.drawable.platlogo_alt);
+ }
+ });
+
+ mContent.setOnLongClickListener(new View.OnLongClickListener() {
+ @Override
+ public boolean onLongClick(View v) {
+ try {
+ startActivity(new Intent(Intent.ACTION_MAIN)
+ .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
+ | Intent.FLAG_ACTIVITY_CLEAR_TASK
+ | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS)
+ .addCategory("com.android.internal.category.PLATLOGO"));
+ //.setClassName("com.android.systemui","com.android.systemui.BeanBag"));
+ } catch (ActivityNotFoundException ex) {
+ android.util.Log.e("PlatLogoActivity", "Couldn't find a bag of beans.");
}
+ finish();
return true;
}
});
diff --git a/core/java/com/android/internal/policy/IFaceLockCallback.aidl b/core/java/com/android/internal/policy/IFaceLockCallback.aidl
index a7b01b2..eb902fd 100644
--- a/core/java/com/android/internal/policy/IFaceLockCallback.aidl
+++ b/core/java/com/android/internal/policy/IFaceLockCallback.aidl
@@ -23,5 +23,5 @@
void cancel();
void reportFailedAttempt();
void exposeFallback();
- void pokeWakelock();
+ void pokeWakelock(int millis);
}
diff --git a/core/java/com/google/android/mms/pdu/PduPersister.java b/core/java/com/google/android/mms/pdu/PduPersister.java
index 1a8e80f..ee285aa 100644
--- a/core/java/com/google/android/mms/pdu/PduPersister.java
+++ b/core/java/com/google/android/mms/pdu/PduPersister.java
@@ -1058,9 +1058,10 @@
}
}
}
-
- long threadId = Threads.getOrCreateThreadId(mContext, recipients);
- values.put(Mms.THREAD_ID, threadId);
+ if (!recipients.isEmpty()) {
+ long threadId = Threads.getOrCreateThreadId(mContext, recipients);
+ values.put(Mms.THREAD_ID, threadId);
+ }
SqliteWrapper.update(mContext, mContentResolver, uri, values, null, null);
}
@@ -1299,7 +1300,6 @@
}
HashSet<String> recipients = new HashSet<String>();
- long threadId = DUMMY_THREAD_ID;
int msgType = pdu.getMessageType();
// Here we only allocate thread ID for M-Notification.ind,
// M-Retrieve.conf and M-Send.req.
@@ -1326,9 +1326,11 @@
}
}
}
- threadId = Threads.getOrCreateThreadId(mContext, recipients);
+ if (!recipients.isEmpty()) {
+ long threadId = Threads.getOrCreateThreadId(mContext, recipients);
+ values.put(Mms.THREAD_ID, threadId);
+ }
}
- values.put(Mms.THREAD_ID, threadId);
// Save parts first to avoid inconsistent message is loaded
// while saving the parts.
diff --git a/core/jni/android/graphics/BitmapFactory.cpp b/core/jni/android/graphics/BitmapFactory.cpp
index 3a6c5b0..416370e 100644
--- a/core/jni/android/graphics/BitmapFactory.cpp
+++ b/core/jni/android/graphics/BitmapFactory.cpp
@@ -317,8 +317,6 @@
env->SetObjectField(javaBitmap, gBitmap_layoutBoundsFieldID, layoutBounds);
}
}
- // detach bitmap from its autodeleter, since we want to own it now
- adb.detach();
if (willScale) {
// This is weird so let me explain: we could use the scale parameter
@@ -369,6 +367,9 @@
pr->setImmutable();
}
+ // detach bitmap from its autodeleter, since we want to own it now
+ adb.detach();
+
if (javaBitmap != NULL) {
// If a java bitmap was passed in for reuse, pass it back
return javaBitmap;
diff --git a/core/jni/android_database_SQLiteCommon.cpp b/core/jni/android_database_SQLiteCommon.cpp
index 3484467..06bff19 100644
--- a/core/jni/android_database_SQLiteCommon.cpp
+++ b/core/jni/android_database_SQLiteCommon.cpp
@@ -110,7 +110,7 @@
exceptionClass = "android/database/sqlite/SQLiteDatatypeMismatchException";
break;
case SQLITE_INTERRUPT:
- exceptionClass = "android/content/OperationCanceledException";
+ exceptionClass = "android/os/OperationCanceledException";
break;
default:
exceptionClass = "android/database/sqlite/SQLiteException";
diff --git a/core/jni/android_util_Process.cpp b/core/jni/android_util_Process.cpp
index d20cc9e..027ed16 100644
--- a/core/jni/android_util_Process.cpp
+++ b/core/jni/android_util_Process.cpp
@@ -402,7 +402,7 @@
return *((const jint*)v1) - *((const jint*)v2);
}
-static jlong android_os_Process_getFreeMemory(JNIEnv* env, jobject clazz)
+static jlong getFreeMemoryImpl(const char* const sums[], const int sumsLen[], int num)
{
int fd = open("/proc/meminfo", O_RDONLY);
@@ -424,11 +424,8 @@
int numFound = 0;
jlong mem = 0;
- static const char* const sums[] = { "MemFree:", "Cached:", NULL };
- static const int sumsLen[] = { strlen("MemFree:"), strlen("Cached:"), 0 };
-
char* p = buffer;
- while (*p && numFound < 2) {
+ while (*p && numFound < num) {
int i = 0;
while (sums[i]) {
if (strncmp(p, sums[i], sumsLen[i]) == 0) {
@@ -453,6 +450,20 @@
return numFound > 0 ? mem : -1;
}
+static jlong android_os_Process_getFreeMemory(JNIEnv* env, jobject clazz)
+{
+ static const char* const sums[] = { "MemFree:", "Cached:", NULL };
+ static const int sumsLen[] = { strlen("MemFree:"), strlen("Cached:"), 0 };
+ return getFreeMemoryImpl(sums, sumsLen, 2);
+}
+
+static jlong android_os_Process_getTotalMemory(JNIEnv* env, jobject clazz)
+{
+ static const char* const sums[] = { "MemTotal:", NULL };
+ static const int sumsLen[] = { strlen("MemTotal:"), 0 };
+ return getFreeMemoryImpl(sums, sumsLen, 1);
+}
+
void android_os_Process_readProcLines(JNIEnv* env, jobject clazz, jstring fileStr,
jobjectArray reqFields, jlongArray outFields)
{
@@ -901,6 +912,7 @@
{"sendSignal", "(II)V", (void*)android_os_Process_sendSignal},
{"sendSignalQuiet", "(II)V", (void*)android_os_Process_sendSignalQuiet},
{"getFreeMemory", "()J", (void*)android_os_Process_getFreeMemory},
+ {"getTotalMemory", "()J", (void*)android_os_Process_getTotalMemory},
{"readProcLines", "(Ljava/lang/String;[Ljava/lang/String;[J)V", (void*)android_os_Process_readProcLines},
{"getPids", "(Ljava/lang/String;[I)[I", (void*)android_os_Process_getPids},
{"readProcFile", "(Ljava/lang/String;[I[Ljava/lang/String;[J[F)Z", (void*)android_os_Process_readProcFile},
diff --git a/core/res/res/drawable-hdpi/notification_bg_low_normal.9.png b/core/res/res/drawable-hdpi/notification_bg_low_normal.9.png
new file mode 100644
index 0000000..af91f5e
--- /dev/null
+++ b/core/res/res/drawable-hdpi/notification_bg_low_normal.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/notification_bg_low_pressed.9.png b/core/res/res/drawable-hdpi/notification_bg_low_pressed.9.png
new file mode 100644
index 0000000..1602ab87
--- /dev/null
+++ b/core/res/res/drawable-hdpi/notification_bg_low_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/notification_bg_normal.9.png b/core/res/res/drawable-hdpi/notification_bg_normal.9.png
new file mode 100644
index 0000000..6ebed8b
--- /dev/null
+++ b/core/res/res/drawable-hdpi/notification_bg_normal.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/notification_bg_normal_pressed.9.png b/core/res/res/drawable-hdpi/notification_bg_normal_pressed.9.png
new file mode 100644
index 0000000..6193822
--- /dev/null
+++ b/core/res/res/drawable-hdpi/notification_bg_normal_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_adb.png b/core/res/res/drawable-hdpi/stat_sys_adb.png
index e7e1d8d..cfbbd8d 100644
--- a/core/res/res/drawable-hdpi/stat_sys_adb.png
+++ b/core/res/res/drawable-hdpi/stat_sys_adb.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/stat_sys_adb.png b/core/res/res/drawable-ldpi/stat_sys_adb.png
index 86b945b..0171adb 100644
--- a/core/res/res/drawable-ldpi/stat_sys_adb.png
+++ b/core/res/res/drawable-ldpi/stat_sys_adb.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/notification_bg_low_normal.9.png b/core/res/res/drawable-mdpi/notification_bg_low_normal.9.png
new file mode 100644
index 0000000..62de9d7
--- /dev/null
+++ b/core/res/res/drawable-mdpi/notification_bg_low_normal.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/notification_bg_low_pressed.9.png b/core/res/res/drawable-mdpi/notification_bg_low_pressed.9.png
new file mode 100644
index 0000000..eaabd93
--- /dev/null
+++ b/core/res/res/drawable-mdpi/notification_bg_low_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/notification_bg_normal.9.png b/core/res/res/drawable-mdpi/notification_bg_normal.9.png
new file mode 100644
index 0000000..aa239b3
--- /dev/null
+++ b/core/res/res/drawable-mdpi/notification_bg_normal.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/notification_bg_normal_pressed.9.png b/core/res/res/drawable-mdpi/notification_bg_normal_pressed.9.png
new file mode 100644
index 0000000..62d8622
--- /dev/null
+++ b/core/res/res/drawable-mdpi/notification_bg_normal_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/stat_sys_adb.png b/core/res/res/drawable-mdpi/stat_sys_adb.png
index 86d113f..4862919 100644
--- a/core/res/res/drawable-mdpi/stat_sys_adb.png
+++ b/core/res/res/drawable-mdpi/stat_sys_adb.png
Binary files differ
diff --git a/core/res/res/drawable-nodpi/platlogo.png b/core/res/res/drawable-nodpi/platlogo.png
index 8aa3b9e..f46c6c6 100644
--- a/core/res/res/drawable-nodpi/platlogo.png
+++ b/core/res/res/drawable-nodpi/platlogo.png
Binary files differ
diff --git a/core/res/res/drawable-nodpi/platlogo_alt.png b/core/res/res/drawable-nodpi/platlogo_alt.png
new file mode 100644
index 0000000..63b53b8
--- /dev/null
+++ b/core/res/res/drawable-nodpi/platlogo_alt.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/notification_bg_low_normal.9.png b/core/res/res/drawable-xhdpi/notification_bg_low_normal.9.png
new file mode 100644
index 0000000..8c884de
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/notification_bg_low_normal.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/notification_bg_low_pressed.9.png b/core/res/res/drawable-xhdpi/notification_bg_low_pressed.9.png
new file mode 100644
index 0000000..32e00be
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/notification_bg_low_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/notification_bg_normal.9.png b/core/res/res/drawable-xhdpi/notification_bg_normal.9.png
new file mode 100644
index 0000000..bdf477b
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/notification_bg_normal.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/notification_bg_normal_pressed.9.png b/core/res/res/drawable-xhdpi/notification_bg_normal_pressed.9.png
new file mode 100644
index 0000000..5c4da74
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/notification_bg_normal_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_adb.png b/core/res/res/drawable-xhdpi/stat_sys_adb.png
index 684d57a..576ae24 100644
--- a/core/res/res/drawable-xhdpi/stat_sys_adb.png
+++ b/core/res/res/drawable-xhdpi/stat_sys_adb.png
Binary files differ
diff --git a/core/res/res/drawable/notification_bg.xml b/core/res/res/drawable/notification_bg.xml
index 1bb2172..362a524 100644
--- a/core/res/res/drawable/notification_bg.xml
+++ b/core/res/res/drawable/notification_bg.xml
@@ -17,6 +17,6 @@
<selector xmlns:android="http://schemas.android.com/apk/res/android"
android:exitFadeDuration="@android:integer/config_mediumAnimTime">
- <item android:state_pressed="true" android:drawable="@drawable/notification_item_background_color_pressed" />
- <item android:state_pressed="false" android:drawable="@drawable/notification_item_background_color" />
+ <item android:state_pressed="true" android:drawable="@drawable/notification_bg_normal_pressed" />
+ <item android:state_pressed="false" android:drawable="@drawable/notification_bg_normal" />
</selector>
diff --git a/core/res/res/drawable/notification_bg_low.xml b/core/res/res/drawable/notification_bg_low.xml
new file mode 100644
index 0000000..466a885
--- /dev/null
+++ b/core/res/res/drawable/notification_bg_low.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.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:exitFadeDuration="@android:integer/config_mediumAnimTime">
+
+ <item android:state_pressed="true" android:drawable="@drawable/notification_bg_low_pressed" />
+ <item android:state_pressed="false" android:drawable="@drawable/notification_bg_low_normal" />
+</selector>
diff --git a/core/res/res/layout/notification_action.xml b/core/res/res/layout/notification_action.xml
index 785da7c..36982ca 100644
--- a/core/res/res/layout/notification_action.xml
+++ b/core/res/res/layout/notification_action.xml
@@ -17,7 +17,10 @@
<Button xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/action0"
android:layout_width="match_parent"
- android:layout_height="wrap_content"
- style="@android:style/Widget.Holo.Button.Small"
+ android:layout_height="48dp"
android:gravity="left|center_vertical"
- />
\ No newline at end of file
+ android:drawablePadding="8dp"
+ android:paddingLeft="8dp"
+ android:textColor="#ccc"
+ android:textSize="14dp"
+ />
diff --git a/core/res/res/layout/notification_action_tombstone.xml b/core/res/res/layout/notification_action_tombstone.xml
new file mode 100644
index 0000000..e61e15f
--- /dev/null
+++ b/core/res/res/layout/notification_action_tombstone.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.
+-->
+
+<Button xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/action0"
+ android:layout_width="match_parent"
+ android:layout_height="48dp"
+ android:gravity="left|center_vertical"
+ android:drawablePadding="8dp"
+ android:paddingLeft="8dp"
+ android:textColor="#666"
+ android:textSize="14dp"
+ />
diff --git a/core/res/res/layout/notification_template_base.xml b/core/res/res/layout/notification_template_base.xml
index 63d20e4..3692a4d 100644
--- a/core/res/res/layout/notification_template_base.xml
+++ b/core/res/res/layout/notification_template_base.xml
@@ -26,7 +26,7 @@
<ImageView android:id="@+id/icon"
android:layout_width="@dimen/notification_large_icon_width"
android:layout_height="@dimen/notification_large_icon_height"
- android:background="@android:drawable/notify_panel_notification_icon_bg_tile"
+ android:background="@android:drawable/notification_template_icon_bg"
android:scaleType="center"
/>
<LinearLayout
diff --git a/core/res/res/layout/notification_template_big_base.xml b/core/res/res/layout/notification_template_big_base.xml
index f8b24e2..378161c 100644
--- a/core/res/res/layout/notification_template_big_base.xml
+++ b/core/res/res/layout/notification_template_big_base.xml
@@ -26,7 +26,7 @@
<ImageView android:id="@+id/icon"
android:layout_width="@dimen/notification_large_icon_width"
android:layout_height="@dimen/notification_large_icon_height"
- android:background="@android:drawable/notify_panel_notification_icon_bg_tile"
+ android:background="@android:drawable/notification_template_icon_bg"
android:scaleType="center"
/>
<LinearLayout
diff --git a/core/res/res/layout/notification_template_big_text.xml b/core/res/res/layout/notification_template_big_text.xml
index a225ab1..d0549cf 100644
--- a/core/res/res/layout/notification_template_big_text.xml
+++ b/core/res/res/layout/notification_template_big_text.xml
@@ -25,7 +25,7 @@
<ImageView android:id="@+id/icon"
android:layout_width="@dimen/notification_large_icon_width"
android:layout_height="@dimen/notification_large_icon_height"
- android:background="@android:drawable/notify_panel_notification_icon_bg_tile"
+ android:background="@android:drawable/notification_template_icon_bg"
android:scaleType="center"
/>
<LinearLayout
diff --git a/core/res/res/layout/notification_template_inbox.xml b/core/res/res/layout/notification_template_inbox.xml
index 05a3d62..7b63ac5 100644
--- a/core/res/res/layout/notification_template_inbox.xml
+++ b/core/res/res/layout/notification_template_inbox.xml
@@ -15,14 +15,18 @@
-->
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:internal="http://schemas.android.com/apk/prv/res/android"
android:id="@+id/status_bar_latest_event_content"
+ android:background="@android:drawable/notification_bg"
android:layout_width="match_parent"
android:layout_height="wrap_content"
+ internal:layout_minHeight="65dp"
+ internal:layout_maxHeight="unbounded"
>
<ImageView android:id="@+id/icon"
android:layout_width="@dimen/notification_large_icon_width"
android:layout_height="@dimen/notification_large_icon_height"
- android:background="@android:drawable/notify_panel_notification_icon_bg_tile"
+ android:background="@android:drawable/notification_template_icon_bg"
android:scaleType="center"
/>
<LinearLayout
diff --git a/core/res/res/values-af/strings.xml b/core/res/res/values-af/strings.xml
index 7fa95c9..ad7a228 100644
--- a/core/res/res/values-af/strings.xml
+++ b/core/res/res/values-af/strings.xml
@@ -168,12 +168,9 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Jou boodskappe"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Lees en skryf jou SMS, e-pos en ander boodskappe."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Jou persoonlike inligting"</string>
- <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
- <skip />
- <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
- <skip />
- <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
- <skip />
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Direkte toegang tot inligting oor jou, gestoor in jou kontakkaart."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Jou sosiale inligting"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Direkte toegang tot inligting oor jou kontakte en sosiale verbindings."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Jou ligging"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Monitor jou fisiese ligging."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Netwerkkommunikasie"</string>
@@ -186,18 +183,12 @@
<skip />
<!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) -->
<skip />
- <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
- <skip />
- <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
- <skip />
- <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
- <skip />
- <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
- <skip />
- <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
- <skip />
- <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
- <skip />
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Oudio-instellings"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Verander oudio-instellings."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Affekteer battery"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Gebruik kenmerke wat vinnig die battery opgebruik."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Kalender"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Direkte toegang tot kalender en gebeurtenisse."</string>
<!-- no translation found for permgrouplab_dictionary (4148597128843641379) -->
<skip />
<!-- no translation found for permgroupdesc_dictionary (7921166355964764490) -->
@@ -206,46 +197,26 @@
<skip />
<!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) -->
<skip />
- <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
- <skip />
- <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
- <skip />
- <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
- <skip />
- <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
- <skip />
- <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
- <skip />
- <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
- <skip />
- <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
- <skip />
- <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
- <skip />
- <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
- <skip />
- <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
- <skip />
- <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
- <skip />
- <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
- <skip />
- <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
- <skip />
- <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
- <skip />
- <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
- <skip />
- <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
- <skip />
- <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
- <skip />
- <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
- <skip />
- <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
- <skip />
- <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
- <skip />
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Boekmerke en geskiedenis"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Direkte toegang tot boekmerke en blaaiergeskiedenis."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Wekker"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Stel die wekker."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Stemboodskapdiens"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Direkte toegang tot stemboodskapdiens."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Mikrofoon"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Direkte toegang tot die mikrofoon om oudio op te neem."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Kamera"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Direkte toegang tot kamera vir die neem van foto of video."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Jou programme-inligting"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Vermoë om die gedrag van ander programme op jou toestel te beïnvloed."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Muurpapier"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Verander die toestel se muurpapier-instellings."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Klok"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Verander die toestel se tyd of tydsone."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Statusbalk"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Verander die toestel se statusbalk-instellings."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Sinkronisasie-instellings"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Gaan in by die sinkronisasie-instellings."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Jou rekeninge"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Kry toegang tot beskikbare rekeninge."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Hardewarekontroles"</string>
@@ -256,10 +227,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Laervlak-toegang en -beheer van die stelsel."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Ontwikkelingshulpmiddels"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Kenmerke net nodig vir programontwikkelaars."</string>
- <!-- no translation found for permgrouplab_display (4279909676036402636) -->
- <skip />
- <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
- <skip />
+ <string name="permgrouplab_display" msgid="4279909676036402636">"Ander program-UI"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Affekteer ander programme se UI"</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Stoor"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Gebruik die USB-berging."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Lees die SD-kaart."</string>
@@ -779,8 +748,7 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"Geen SIM-kaart in foon nie."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Steek \'n SIM-kaart in."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"Die SIM-kaart is weg of nie leesbaar nie. Steek \'n SIM-kaart in."</string>
- <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
- <skip />
+ <string name="lockscreen_permanent_disabled_sim_message_short" msgid="5096149665138916184">"Onbruikbare SIM-kaart."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"Jou SIM-kaart is permanent gedeaktiveer."\n" Kontak jou draadlose diensverskaffer vir \'n ander SIM-kaart."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Vorigesnit-knoppie"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Volgendesnit-knoppie"</string>
@@ -1353,7 +1321,7 @@
<string name="sending" msgid="3245653681008218030">"Stuur tans…"</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Begin webblaaier?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Aanvaar oproep?"</string>
- <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <!-- no translation found for activity_resolver_use_always (8017770747801494933) -->
<skip />
<!-- no translation found for activity_resolver_use_once (405646673463328329) -->
<skip />
diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml
index 42c88ae..c0c0c9c 100644
--- a/core/res/res/values-am/strings.xml
+++ b/core/res/res/values-am/strings.xml
@@ -201,16 +201,16 @@
<string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"ወደ ዕልባቶችና የአሳሽ ታሪክ ቀጥተኛ መዳረሻ።"</string>
<string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"ማንቂያ"</string>
<string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"የማንቂያ ሰዓቱን አዘጋጅ።"</string>
- <string name="permgrouplab_voicemail" msgid="4162237145027592133">"የድምፅ ፖስታ"</string>
- <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"ወደ የድምጽ ፖስታ ቀጥተኛ መዳረሻ።"</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"የድምጽ መልዕክት"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"ወደ የድምጽ መልዕክት ቀጥተኛ መዳረሻ።"</string>
<string name="permgrouplab_microphone" msgid="171539900250043464">"ማይክሮፎን"</string>
<string name="permgroupdesc_microphone" msgid="7106618286905738408">"ድምጽ ለመቅረጽ ወደ ማይክሮፎኑ ቀጥተኛ መዳረሻ።"</string>
<string name="permgrouplab_camera" msgid="4820372495894586615">"ካሜራ"</string>
- <string name="permgroupdesc_camera" msgid="2933667372289567714">"ለምስል ወይም ቪዲዮ ለመቅረጽ ቀጥተና መዳረሻ ለካሜራ።"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"ለካሜራ ምስል ወይም ቪዲዮ ለመቅረጽ ቀጥተኛ መዳረሻ።"</string>
<string name="permgrouplab_appInfo" msgid="8028789762634147725">"የመተግበሪያዎችህ መረጃ"</string>
<string name="permgroupdesc_appInfo" msgid="3950378538049625907">"በመሣሪያህ ላይ ያሉ የሌሎች መተግበሪያዎች ባህሪዎች ላይ ተፅዕኖ የማሳረፍ ችሎታ።"</string>
<string name="permgrouplab_wallpaper" msgid="3850280158041175998">"ልጣፍ"</string>
- <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"የመሣሪያው ልጣፍ ቅንብሮቹን ቀይር።"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"የመሣሪያውን ልጣፍ ቅንብሮች ቀይር።"</string>
<string name="permgrouplab_systemClock" msgid="406535759236612992">"ሰዓት"</string>
<string name="permgroupdesc_systemClock" msgid="3944359833624094992">"የመሣሪያውን ሰዓት ወይም የሰዓት ሰቁን ቀይር።"</string>
<string name="permgrouplab_statusBar" msgid="2095862568113945398">"የሁኔታ አሞሌ"</string>
@@ -1321,7 +1321,7 @@
<string name="sending" msgid="3245653681008218030">"በመላክ ላይ…"</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"ማሰሺያን አስነሳ?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"ጥሪ ተቀበል?"</string>
- <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <!-- no translation found for activity_resolver_use_always (8017770747801494933) -->
<skip />
<!-- no translation found for activity_resolver_use_once (405646673463328329) -->
<skip />
diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml
index 35123de..4196052 100644
--- a/core/res/res/values-ar/strings.xml
+++ b/core/res/res/values-ar/strings.xml
@@ -175,28 +175,20 @@
<string name="permgroupdesc_location" msgid="5704679763124170100">"يمكنك مراقبة موقعك الفعلي."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"اتصال الشبكة"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"يمكنك الدخول إلى ميزات متعددة عبر الشبكة."</string>
- <!-- no translation found for permgrouplab_bluetoothNetwork (1585403544162128109) -->
- <skip />
- <!-- no translation found for permgroupdesc_bluetoothNetwork (5625288577164282391) -->
- <skip />
- <!-- no translation found for permgrouplab_shortrangeNetwork (130808676377486118) -->
- <skip />
- <!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) -->
- <skip />
+ <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"بلوتوث"</string>
+ <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"الدخول إلى الأجهزة والشبكات من خلال البلوتوث."</string>
+ <string name="permgrouplab_shortrangeNetwork" msgid="130808676377486118">"الشبكات قصيرة المدى"</string>
+ <string name="permgroupdesc_shortrangeNetwork" msgid="1884069062653436007">"الدخول إلى الأجهزة من خلال الشبكات قصيرة المدى مثل الاتصالات قريبة المدى (NFC)."</string>
<string name="permgrouplab_audioSettings" msgid="8329261670151871235">"إعدادات الصوت"</string>
<string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"تغيير إعدادات الصوت"</string>
<string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"التأثير على البطارية"</string>
<string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"استخدم الميزات التي يمكن أن تؤدي إلى نفاد طاقة البطارية بسرعة."</string>
<string name="permgrouplab_calendar" msgid="5863508437783683902">"التقويم"</string>
<string name="permgroupdesc_calendar" msgid="5777534316982184416">"الدخول المباشر إلى التقويم والأحداث."</string>
- <!-- no translation found for permgrouplab_dictionary (4148597128843641379) -->
- <skip />
- <!-- no translation found for permgroupdesc_dictionary (7921166355964764490) -->
- <skip />
- <!-- no translation found for permgrouplab_writeDictionary (8090237702432576788) -->
- <skip />
- <!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) -->
- <skip />
+ <string name="permgrouplab_dictionary" msgid="4148597128843641379">"قراءة قاموس المستخدم"</string>
+ <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"قراءة الكلمات في قاموس المستخدم."</string>
+ <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"كتابة قاموس المستخدم"</string>
+ <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"إضافة الكلمات إلى قاموس المستخدم."</string>
<string name="permgrouplab_bookmarks" msgid="1949519673103968229">"الإشارات المرجعية والسجل"</string>
<string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"الدخول المباشر إلى الإشارات المرجعية وسجل المتصفح."</string>
<string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"المنبه"</string>
@@ -569,8 +561,7 @@
<string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"يسمح للتطبيق بقراءة محتويات وحدة تخزين USB، والتي قد تتضمن صورًا ووسائط."</string>
<string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"يسمح للتطبيق بقراءة محتويات بطاقة SD، والتي قد تتضمن صورًا ووسائط."</string>
<string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"تعديل محتويات وحدة تخزين USB أو حذفها"</string>
- <!-- no translation found for permlab_sdcardWrite (8805693630050458763) -->
- <skip />
+ <string name="permlab_sdcardWrite" product="default" msgid="8805693630050458763">"تعديل محتويات بطاقة SD أو حذفها"</string>
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"للسماح للتطبيق بالكتابة إلى وحدة تخزين USB."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"للسماح للتطبيق بالكتابة إلى بطاقة SD."</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"تعديل/حذف محتويات وحدة تخزين الوسائط الداخلية"</string>
@@ -1090,8 +1081,7 @@
<string name="date_time_set" msgid="5777075614321087758">"تعيين"</string>
<string name="date_time_done" msgid="2507683751759308828">"تم"</string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"جديد: "</font></string>
- <!-- no translation found for perms_description_app (5139836143293299417) -->
- <skip />
+ <string name="perms_description_app" msgid="5139836143293299417">"يقدمه <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
<string name="no_permissions" msgid="7283357728219338112">"لا أذونات مطلوبة"</string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"تخزين USB كبير السعة"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB متصل"</string>
@@ -1321,8 +1311,7 @@
<string name="sending" msgid="3245653681008218030">"جارٍ الإرسال..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"تشغيل المتصفح؟"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"هل تريد قبول المكالمة؟"</string>
- <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <!-- no translation found for activity_resolver_use_always (8017770747801494933) -->
<skip />
- <!-- no translation found for activity_resolver_use_once (405646673463328329) -->
- <skip />
+ <string name="activity_resolver_use_once" msgid="405646673463328329">"مرة واحدة فقط"</string>
</resources>
diff --git a/core/res/res/values-be/strings.xml b/core/res/res/values-be/strings.xml
index bc50211..446f113 100644
--- a/core/res/res/values-be/strings.xml
+++ b/core/res/res/values-be/strings.xml
@@ -1321,7 +1321,7 @@
<string name="sending" msgid="3245653681008218030">"Адпраўка..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Запусцiць браўзер?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Прыняць выклік?"</string>
- <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <!-- no translation found for activity_resolver_use_always (8017770747801494933) -->
<skip />
<!-- no translation found for activity_resolver_use_once (405646673463328329) -->
<skip />
diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml
index 90462b3..b35eae5 100644
--- a/core/res/res/values-bg/strings.xml
+++ b/core/res/res/values-bg/strings.xml
@@ -1321,7 +1321,7 @@
<string name="sending" msgid="3245653681008218030">"Изпраща се..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Да се стартира ли браузърът?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Да се приеме ли обаждането?"</string>
- <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <!-- no translation found for activity_resolver_use_always (8017770747801494933) -->
<skip />
<!-- no translation found for activity_resolver_use_once (405646673463328329) -->
<skip />
diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml
index 69d982b..5766f15f 100644
--- a/core/res/res/values-ca/strings.xml
+++ b/core/res/res/values-ca/strings.xml
@@ -175,28 +175,20 @@
<string name="permgroupdesc_location" msgid="5704679763124170100">"Supervisa la teva ubicació física."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Comunicació de xarxa"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Accedeix a diverses funcions de xarxa."</string>
- <!-- no translation found for permgrouplab_bluetoothNetwork (1585403544162128109) -->
- <skip />
- <!-- no translation found for permgroupdesc_bluetoothNetwork (5625288577164282391) -->
- <skip />
- <!-- no translation found for permgrouplab_shortrangeNetwork (130808676377486118) -->
- <skip />
- <!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) -->
- <skip />
+ <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"Bluetooth"</string>
+ <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"Accés a dispositius i a xarxes mitjançant Bluetooth."</string>
+ <string name="permgrouplab_shortrangeNetwork" msgid="130808676377486118">"Xarxes de poc abast"</string>
+ <string name="permgroupdesc_shortrangeNetwork" msgid="1884069062653436007">"Accés a dispositius mitjançant xarxes de poc abast, com ara NFC."</string>
<string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Configuració d\'àudio"</string>
<string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Canviar la configuració de l\'àudio."</string>
<string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Afectar la bateria"</string>
<string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Fer servir funcions que poden consumir bateria ràpidament."</string>
<string name="permgrouplab_calendar" msgid="5863508437783683902">"Calendari"</string>
<string name="permgroupdesc_calendar" msgid="5777534316982184416">"Accés directe a calendaris i a esdeveniments."</string>
- <!-- no translation found for permgrouplab_dictionary (4148597128843641379) -->
- <skip />
- <!-- no translation found for permgroupdesc_dictionary (7921166355964764490) -->
- <skip />
- <!-- no translation found for permgrouplab_writeDictionary (8090237702432576788) -->
- <skip />
- <!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) -->
- <skip />
+ <string name="permgrouplab_dictionary" msgid="4148597128843641379">"Llegeix el diccionari de l\'usuari"</string>
+ <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"Llegeix paraules al diccionari de l\'usuari."</string>
+ <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"Escriu al diccionari de l\'usuari"</string>
+ <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"Afegeix paraules al diccionari de l\'usuari."</string>
<string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Marcadors i historial"</string>
<string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Accés directe a l\'historial de marcadors i de navegació."</string>
<string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Alarma"</string>
@@ -569,8 +561,7 @@
<string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Permet que l\'aplicació llegeixi el contingut de l\'emmagatzematge USB, incloses les fotos i els fitxers multimèdia."</string>
<string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Permet que l\'aplicació llegeixi el contingut de la targeta SD, incloses les fotos i els fitxers multimèdia."</string>
<string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"modificació o supressió del contingut de l\'emmagatzematge USB"</string>
- <!-- no translation found for permlab_sdcardWrite (8805693630050458763) -->
- <skip />
+ <string name="permlab_sdcardWrite" product="default" msgid="8805693630050458763">"modifica o suprimeix el contingut de la targeta SD"</string>
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Permet que l\'aplicació escrigui a l\'emmagatzematge USB."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Permet a l\'aplicació escriure a la targeta SD."</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"Canvia/esborra emmagatz. intern"</string>
@@ -1090,8 +1081,7 @@
<string name="date_time_set" msgid="5777075614321087758">"Defineix"</string>
<string name="date_time_done" msgid="2507683751759308828">"Fet"</string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"NOU: "</font></string>
- <!-- no translation found for perms_description_app (5139836143293299417) -->
- <skip />
+ <string name="perms_description_app" msgid="5139836143293299417">"Proporcionat per <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
<string name="no_permissions" msgid="7283357728219338112">"No cal cap permís"</string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"Emmagatzematge massiu USB"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB connectat"</string>
@@ -1321,8 +1311,6 @@
<string name="sending" msgid="3245653681008218030">"S\'està enviant…"</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Vols iniciar el navegador?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Vols acceptar la trucada?"</string>
- <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
- <skip />
- <!-- no translation found for activity_resolver_use_once (405646673463328329) -->
- <skip />
+ <string name="activity_resolver_use_always" msgid="8017770747801494933">"Sempre"</string>
+ <string name="activity_resolver_use_once" msgid="405646673463328329">"Només una vegada"</string>
</resources>
diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml
index c77a21a..dd6d0b1 100644
--- a/core/res/res/values-cs/strings.xml
+++ b/core/res/res/values-cs/strings.xml
@@ -1321,7 +1321,7 @@
<string name="sending" msgid="3245653681008218030">"Odesílání..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Spustit prohlížeč?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Přijmout hovor?"</string>
- <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <!-- no translation found for activity_resolver_use_always (8017770747801494933) -->
<skip />
<!-- no translation found for activity_resolver_use_once (405646673463328329) -->
<skip />
diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml
index 5a5cda3..e46ff7c 100644
--- a/core/res/res/values-da/strings.xml
+++ b/core/res/res/values-da/strings.xml
@@ -1321,8 +1321,7 @@
<string name="sending" msgid="3245653681008218030">"Sender..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Vil du starte browseren?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Vil du besvare opkaldet?"</string>
- <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
- <skip />
+ <string name="activity_resolver_use_always" msgid="8017770747801494933">"Altid"</string>
<!-- no translation found for activity_resolver_use_once (405646673463328329) -->
<skip />
</resources>
diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml
index 398313b..9145263 100644
--- a/core/res/res/values-de/strings.xml
+++ b/core/res/res/values-de/strings.xml
@@ -1321,8 +1321,7 @@
<string name="sending" msgid="3245653681008218030">"Wird gesendet..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Browser starten?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Anruf annehmen?"</string>
- <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
- <skip />
+ <string name="activity_resolver_use_always" msgid="8017770747801494933">"Immer"</string>
<!-- no translation found for activity_resolver_use_once (405646673463328329) -->
<skip />
</resources>
diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml
index 05dcf69..08e2389 100644
--- a/core/res/res/values-el/strings.xml
+++ b/core/res/res/values-el/strings.xml
@@ -175,28 +175,20 @@
<string name="permgroupdesc_location" msgid="5704679763124170100">"Παρακολούθηση της φυσικής τοποθεσίας σας."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Επικοινωνία δικτύου"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Πρόσβαση σε διάφορες λειτουργίες δικτύου."</string>
- <!-- no translation found for permgrouplab_bluetoothNetwork (1585403544162128109) -->
- <skip />
- <!-- no translation found for permgroupdesc_bluetoothNetwork (5625288577164282391) -->
- <skip />
- <!-- no translation found for permgrouplab_shortrangeNetwork (130808676377486118) -->
- <skip />
- <!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) -->
- <skip />
+ <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"Bluetooth"</string>
+ <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"Πρόσβαση σε συσκευές και δίκτυα μέσω Bluetooth."</string>
+ <string name="permgrouplab_shortrangeNetwork" msgid="130808676377486118">"Δίκτυα μικρού εύρους"</string>
+ <string name="permgroupdesc_shortrangeNetwork" msgid="1884069062653436007">"Πρόσβαση σε συσκευές μέσω δικτύων μικρού εύρους όπως NFC."</string>
<string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Ρυθμίσεις ήχου"</string>
<string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Αλλαγή ρυθμίσεων ήχου."</string>
<string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Επηρεάζει την μπαταρία"</string>
<string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Χρήση λειτουργιών που μπορούν να εξαντλήσουν γρήγορα την μπαταρία."</string>
<string name="permgrouplab_calendar" msgid="5863508437783683902">"Ημερολόγιο"</string>
<string name="permgroupdesc_calendar" msgid="5777534316982184416">"Άμεση πρόσβαση σε ημερολόγιο και συμβάντα."</string>
- <!-- no translation found for permgrouplab_dictionary (4148597128843641379) -->
- <skip />
- <!-- no translation found for permgroupdesc_dictionary (7921166355964764490) -->
- <skip />
- <!-- no translation found for permgrouplab_writeDictionary (8090237702432576788) -->
- <skip />
- <!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) -->
- <skip />
+ <string name="permgrouplab_dictionary" msgid="4148597128843641379">"Ανάγνωση λεξικού χρήστη"</string>
+ <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"Ανάγνωση λέξεων στο λεξικό χρήστη."</string>
+ <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"Εγγραφή στο λεξικό χρήστη"</string>
+ <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"Προσθήκη λέξεων στο λεξικό χρήστη."</string>
<string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Σελιδοδείκτες και ιστορικό"</string>
<string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Άμεση πρόσβαση σε σελιδοδείκτες και ιστορικού προγράμματος περιήγησης."</string>
<string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Ξυπνητήρι"</string>
@@ -569,8 +561,7 @@
<string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Επιτρ. η ανάγν. περ. αποθ. χώρ. USB, με φωτ. και μέσα"</string>
<string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Επιτρέπει στην εφαρμογή την ανάγνωση του περιεχομένου της κάρτας SD, το οποίο μπορεί να περιλαμβάνει φωτογραφίες και μέσα."</string>
<string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"τροπ. ή διαγρ. περιεχ. αποθ. χώρ. USB"</string>
- <!-- no translation found for permlab_sdcardWrite (8805693630050458763) -->
- <skip />
+ <string name="permlab_sdcardWrite" product="default" msgid="8805693630050458763">"τροποποίηση ή διαγραφή των περιεχομένων της κάρτας SD"</string>
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Επιτρέπει στην εφαρμογή την εγγραφή στον αποθηκευτικό χώρο USB."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Επιτρέπει στην εφαρμογή την εγγραφή στην κάρτα SD."</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"τροπ./διαγ. περ. απ. εσ. μνήμ."</string>
@@ -1090,8 +1081,7 @@
<string name="date_time_set" msgid="5777075614321087758">"Ορισμός"</string>
<string name="date_time_done" msgid="2507683751759308828">"Τέλος"</string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"ΝΕΟ: "</font></string>
- <!-- no translation found for perms_description_app (5139836143293299417) -->
- <skip />
+ <string name="perms_description_app" msgid="5139836143293299417">"Παρέχεται από την εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
<string name="no_permissions" msgid="7283357728219338112">"Δεν απαιτούνται άδειες"</string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"Μαζική αποθήκευση USB"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"Το USB είναι συνδεδεμένο"</string>
@@ -1321,8 +1311,6 @@
<string name="sending" msgid="3245653681008218030">"Γίνεται αποστολή…"</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Εκκίνηση προγράμματος περιήγησης;"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Αποδοχή κλήσης;"</string>
- <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
- <skip />
- <!-- no translation found for activity_resolver_use_once (405646673463328329) -->
- <skip />
+ <string name="activity_resolver_use_always" msgid="8017770747801494933">"Πάντα"</string>
+ <string name="activity_resolver_use_once" msgid="405646673463328329">"Μόνο μία φορά"</string>
</resources>
diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml
index 4af21ed..c991437 100644
--- a/core/res/res/values-en-rGB/strings.xml
+++ b/core/res/res/values-en-rGB/strings.xml
@@ -175,28 +175,20 @@
<string name="permgroupdesc_location" msgid="5704679763124170100">"Monitor your physical location."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Network communication"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Access various network features."</string>
- <!-- no translation found for permgrouplab_bluetoothNetwork (1585403544162128109) -->
- <skip />
- <!-- no translation found for permgroupdesc_bluetoothNetwork (5625288577164282391) -->
- <skip />
- <!-- no translation found for permgrouplab_shortrangeNetwork (130808676377486118) -->
- <skip />
- <!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) -->
- <skip />
+ <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"Bluetooth"</string>
+ <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"Access devices and networks through Bluetooth."</string>
+ <string name="permgrouplab_shortrangeNetwork" msgid="130808676377486118">"Short-range Networks"</string>
+ <string name="permgroupdesc_shortrangeNetwork" msgid="1884069062653436007">"Access devices through short-range networks such as NFC."</string>
<string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Audio Settings"</string>
<string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Change audio settings."</string>
<string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Affects Battery"</string>
<string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Use features that can quickly drain battery."</string>
<string name="permgrouplab_calendar" msgid="5863508437783683902">"Calendar"</string>
<string name="permgroupdesc_calendar" msgid="5777534316982184416">"Direct access to calendar and events."</string>
- <!-- no translation found for permgrouplab_dictionary (4148597128843641379) -->
- <skip />
- <!-- no translation found for permgroupdesc_dictionary (7921166355964764490) -->
- <skip />
- <!-- no translation found for permgrouplab_writeDictionary (8090237702432576788) -->
- <skip />
- <!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) -->
- <skip />
+ <string name="permgrouplab_dictionary" msgid="4148597128843641379">"Read User Dictionary"</string>
+ <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"Read words in user dictionary."</string>
+ <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"Write User Dictionary"</string>
+ <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"Add words to the user dictionary."</string>
<string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Bookmarks and History"</string>
<string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Direct access to bookmarks and browser history."</string>
<string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Alarm"</string>
@@ -569,8 +561,7 @@
<string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Allows the app to read contents of USB storage, which may include photos and media."</string>
<string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Allows the app to read contents of SD card, which may include photos and media."</string>
<string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"modify or delete the contents of your USB storage"</string>
- <!-- no translation found for permlab_sdcardWrite (8805693630050458763) -->
- <skip />
+ <string name="permlab_sdcardWrite" product="default" msgid="8805693630050458763">"modify or delete the contents of your SD card"</string>
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Allows the app to write to the USB storage."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Allows the app to write to the SD card."</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"modify/delete internal media storage contents"</string>
@@ -1090,8 +1081,7 @@
<string name="date_time_set" msgid="5777075614321087758">"Set"</string>
<string name="date_time_done" msgid="2507683751759308828">"Done"</string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"NEW: "</font></string>
- <!-- no translation found for perms_description_app (5139836143293299417) -->
- <skip />
+ <string name="perms_description_app" msgid="5139836143293299417">"Provided by <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
<string name="no_permissions" msgid="7283357728219338112">"No permission required"</string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"USB mass storage"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB connected"</string>
@@ -1321,8 +1311,6 @@
<string name="sending" msgid="3245653681008218030">"Sending…"</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Launch Browser?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Accept call?"</string>
- <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
- <skip />
- <!-- no translation found for activity_resolver_use_once (405646673463328329) -->
- <skip />
+ <string name="activity_resolver_use_always" msgid="8017770747801494933">"Always"</string>
+ <string name="activity_resolver_use_once" msgid="405646673463328329">"Just Once"</string>
</resources>
diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml
index a3eb0f9..94d7a4b 100644
--- a/core/res/res/values-es-rUS/strings.xml
+++ b/core/res/res/values-es-rUS/strings.xml
@@ -1321,7 +1321,7 @@
<string name="sending" msgid="3245653681008218030">"Enviando..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"¿Deseas iniciar el navegador?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"¿Aceptar la llamada?"</string>
- <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <!-- no translation found for activity_resolver_use_always (8017770747801494933) -->
<skip />
<!-- no translation found for activity_resolver_use_once (405646673463328329) -->
<skip />
diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml
index fd28787..ea1f3c4 100644
--- a/core/res/res/values-es/strings.xml
+++ b/core/res/res/values-es/strings.xml
@@ -175,28 +175,20 @@
<string name="permgroupdesc_location" msgid="5704679763124170100">"Controlar tu ubicación física"</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Comunicación de red"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Acceder a distintas funciones de red"</string>
- <!-- no translation found for permgrouplab_bluetoothNetwork (1585403544162128109) -->
- <skip />
- <!-- no translation found for permgroupdesc_bluetoothNetwork (5625288577164282391) -->
- <skip />
- <!-- no translation found for permgrouplab_shortrangeNetwork (130808676377486118) -->
- <skip />
- <!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) -->
- <skip />
+ <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"Bluetooth"</string>
+ <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"Acceder a dispositivos y redes a través de Bluetooth"</string>
+ <string name="permgrouplab_shortrangeNetwork" msgid="130808676377486118">"Redes de corto alcance"</string>
+ <string name="permgroupdesc_shortrangeNetwork" msgid="1884069062653436007">"Acceder a dispositivos a través de redes de corto alcance, como NFC"</string>
<string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Ajustes de audio"</string>
<string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Modificar ajustes de audio"</string>
<string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Afectar a la batería"</string>
<string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Usar funciones que agotan la batería rápidamente"</string>
<string name="permgrouplab_calendar" msgid="5863508437783683902">"Calendario"</string>
<string name="permgroupdesc_calendar" msgid="5777534316982184416">"Acceder directamente al calendario y a los eventos"</string>
- <!-- no translation found for permgrouplab_dictionary (4148597128843641379) -->
- <skip />
- <!-- no translation found for permgroupdesc_dictionary (7921166355964764490) -->
- <skip />
- <!-- no translation found for permgrouplab_writeDictionary (8090237702432576788) -->
- <skip />
- <!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) -->
- <skip />
+ <string name="permgrouplab_dictionary" msgid="4148597128843641379">"Leer el diccionario del usuario"</string>
+ <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"Leer palabras del diccionario del usuario"</string>
+ <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"Escribir en el diccionario del usuario"</string>
+ <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"Añadir palabras al diccionario del usuario"</string>
<string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Marcadores e historial"</string>
<string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Acceder directamente a los marcadores y al historial del navegador"</string>
<string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Alarma"</string>
@@ -569,8 +561,7 @@
<string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Permite que la aplicación lea el contenido del almacenamiento USB que puede incluir fotos y archivos multimedia."</string>
<string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Permite que la aplicación lea el contenido de la tarjeta SD que puede incluir fotos y archivos multimedia."</string>
<string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"editar o borrar contenido de USB"</string>
- <!-- no translation found for permlab_sdcardWrite (8805693630050458763) -->
- <skip />
+ <string name="permlab_sdcardWrite" product="default" msgid="8805693630050458763">"modificar o eliminar el contenido de la tarjeta SD"</string>
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Permite escribir en el almacenamiento USB."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Permite que la aplicación escriba en la tarjeta SD."</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"modificar o eliminar el contenido del almacenamiento de medios interno"</string>
@@ -1090,8 +1081,7 @@
<string name="date_time_set" msgid="5777075614321087758">"Establecer"</string>
<string name="date_time_done" msgid="2507683751759308828">"Listo"</string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"NUEVO:"</font></string>
- <!-- no translation found for perms_description_app (5139836143293299417) -->
- <skip />
+ <string name="perms_description_app" msgid="5139836143293299417">"Proporcionado por <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="no_permissions" msgid="7283357728219338112">"No es necesario ningún permiso"</string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"Almacenamiento USB masivo"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"Conexión por USB"</string>
@@ -1321,8 +1311,6 @@
<string name="sending" msgid="3245653681008218030">"Enviando..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"¿Iniciar el navegador?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"¿Aceptar la llamada?"</string>
- <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
- <skip />
- <!-- no translation found for activity_resolver_use_once (405646673463328329) -->
- <skip />
+ <string name="activity_resolver_use_always" msgid="8017770747801494933">"Siempre"</string>
+ <string name="activity_resolver_use_once" msgid="405646673463328329">"Solo una vez"</string>
</resources>
diff --git a/core/res/res/values-et/strings.xml b/core/res/res/values-et/strings.xml
index 82e76e0..c87b0cc 100644
--- a/core/res/res/values-et/strings.xml
+++ b/core/res/res/values-et/strings.xml
@@ -1321,7 +1321,7 @@
<string name="sending" msgid="3245653681008218030">"Saatmine ..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Kas käivitada brauser?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Kas vastata kõnele?"</string>
- <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <!-- no translation found for activity_resolver_use_always (8017770747801494933) -->
<skip />
<!-- no translation found for activity_resolver_use_once (405646673463328329) -->
<skip />
diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml
index 1c0ef97..77bba4d 100644
--- a/core/res/res/values-fa/strings.xml
+++ b/core/res/res/values-fa/strings.xml
@@ -168,84 +168,47 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"پیام های شما"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"پیام کوتاه، ایمیل و دیگر پیامها را بخوانید."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"اطلاعات شخصی شما"</string>
- <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
- <skip />
- <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
- <skip />
- <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
- <skip />
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"مستقیم به اطلاعات مربوط به خود، ذخیره شده در روی کارت تماس خود دسترسی داشته باشید."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"اطلاعات اجتماعی شما"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"مستقیم به اطلاعات مخاطبین و روابط اجتماعی دسترسی داشته باشید."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"موقعیت مکانی شما"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"بر موقعیت مکانی فیزیکی خود نظارت داشته باشید."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"ارتباط شبکه"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"به ویژگیهای مختلف شبکه دسترسی داشته باشید."</string>
- <!-- no translation found for permgrouplab_bluetoothNetwork (1585403544162128109) -->
- <skip />
- <!-- no translation found for permgroupdesc_bluetoothNetwork (5625288577164282391) -->
- <skip />
- <!-- no translation found for permgrouplab_shortrangeNetwork (130808676377486118) -->
- <skip />
- <!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) -->
- <skip />
- <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
- <skip />
- <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
- <skip />
- <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
- <skip />
- <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
- <skip />
- <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
- <skip />
- <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
- <skip />
- <!-- no translation found for permgrouplab_dictionary (4148597128843641379) -->
- <skip />
- <!-- no translation found for permgroupdesc_dictionary (7921166355964764490) -->
- <skip />
- <!-- no translation found for permgrouplab_writeDictionary (8090237702432576788) -->
- <skip />
- <!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) -->
- <skip />
- <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
- <skip />
- <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
- <skip />
- <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
- <skip />
- <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
- <skip />
- <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
- <skip />
- <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
- <skip />
- <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
- <skip />
- <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
- <skip />
- <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
- <skip />
- <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
- <skip />
- <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
- <skip />
- <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
- <skip />
- <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
- <skip />
- <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
- <skip />
- <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
- <skip />
- <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
- <skip />
- <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
- <skip />
- <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
- <skip />
- <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
- <skip />
- <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
- <skip />
+ <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"بلوتوث"</string>
+ <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"از طریق بلوتوث به دستگاهها و شبکهها دسترسی داشته باشد."</string>
+ <string name="permgrouplab_shortrangeNetwork" msgid="130808676377486118">"شبکههای نزدیک"</string>
+ <string name="permgroupdesc_shortrangeNetwork" msgid="1884069062653436007">"از طریق شبکههای نزدیک مانند NFC، به دستگاهها دسترسی داشته باشد."</string>
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"تنظیمات صدا"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"تنظیمات صوتی را تغییر دهید."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"روی باتری اثر دارد"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"از ویژگیهایی استفاده کنید که باتری را سریع خالی میکند."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"تقویم"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"مستقیم به رویدادها و تقویم دسترسی داشته باشید."</string>
+ <string name="permgrouplab_dictionary" msgid="4148597128843641379">"خواندن فرهنگ لغت کاربر"</string>
+ <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"کلمات را در فرهنگ لغت کاربر بخواند."</string>
+ <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"نوشتن فرهنگ لغت کاربر"</string>
+ <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"کلمات را به فرهنگ لغت کاربر اضافه کند."</string>
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"نشانکها و سابقه"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"مستقیم به نشانکها و سابقه مرور دسترسی داشته باشید."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"زنگ هشدار"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"ساعت زنگ دار را تنظیم کنید."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"پست صوتی"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"به پست صوتی مستقیم دسترسی داشته باشید."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"میکروفن"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"مستقیم به میکروفن برای ضبط صدا دسترسی داشته باشید."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"دوربین"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"مستقیم به دوربین برای عکس گرفتن یا ضبط فیلم دسترسی داشته باشید."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"اطلاعات برنامههای شما"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"میتواند بر عملکرد برنامههای دیگر روی دستگاه اثر بگذارد."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"تصویر زمینه"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"تنظیمات تصویر زمینه دستگاه را تغییر دهید."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"ساعت"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"زمان یا منطقه زمانی دستگاه را تغییر دهید."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"نوار وضعیت"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"تنظیمات نوار وضعیت دستگاه را تغییر دهید."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"تنظیمات همگامسازی"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"به تنظیمات همگامسازی دسترسی داشته باشید."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"حساب های شما"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"به حساب های موجود دسترسی داشته باشید."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"کنترل های سخت افزار"</string>
@@ -256,10 +219,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"دسترسی سطح پایین و کنترل سیستم."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"ابزارهای توسعه"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"ویژگیهایی که فقط مورد نیاز برنامه نویسان است."</string>
- <!-- no translation found for permgrouplab_display (4279909676036402636) -->
- <skip />
- <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
- <skip />
+ <string name="permgrouplab_display" msgid="4279909676036402636">"رابط برنامه دیگر"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"روی رابط برنامههای دیگر اثر دارد."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"ذخیره سازی"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"به حافظه USB دسترسی پیدا کنید."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"به کارت SD دسترسی داشته باشید."</string>
@@ -600,8 +561,7 @@
<string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"به برنامه امکان میدهد محتویات حافظه USB را بخواند که ممکن است حاوی عکس و رسانه باشد."</string>
<string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"به برنامه اجازه میدهد محتویات کارت SD را بخواند که ممکن است حاوی عکس و رسانه باشد."</string>
<string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"اصلاح یا حذف محتویات حافظه USB شما"</string>
- <!-- no translation found for permlab_sdcardWrite (8805693630050458763) -->
- <skip />
+ <string name="permlab_sdcardWrite" product="default" msgid="8805693630050458763">"محتوای کارت SD شما را اصلاح کرده یا تغییر دهد"</string>
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"به برنامه اجازه میدهد تا در حافظه USB بنویسد."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"به برنامه اجازه میدهد تا در کارت SD بنویسد."</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"تغییر/حذف محتواهای حافظه رسانه داخلی"</string>
@@ -779,8 +739,7 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"سیم کارت درون تلفن نیست."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"سیم کارت را وارد کنید."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"سیم کارت موجود نیست یا قابل خواندن نیست. یک سیم کارت وارد کنید."</string>
- <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
- <skip />
+ <string name="lockscreen_permanent_disabled_sim_message_short" msgid="5096149665138916184">"سیم کارت غیرقابل استفاده است."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"سیم کارت شما به طور دائم غیر فعال شده است. "\n"برای داشتن سیم کارت دیگر با ارائهدهنده سرویس بیسیم خود تماس بگیرید."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"دکمه تراک قبلی"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"دکمه تراک بعدی"</string>
@@ -1122,8 +1081,7 @@
<string name="date_time_set" msgid="5777075614321087758">"تنظیم"</string>
<string name="date_time_done" msgid="2507683751759308828">"انجام شد"</string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"جدید: "</font></string>
- <!-- no translation found for perms_description_app (5139836143293299417) -->
- <skip />
+ <string name="perms_description_app" msgid="5139836143293299417">"ارائه شده توسط <xliff:g id="APP_NAME">%1$s</xliff:g> ."</string>
<string name="no_permissions" msgid="7283357728219338112">"مجوزی لازم نیست"</string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"حافظه انبوه USB"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB متصل شد"</string>
@@ -1353,8 +1311,7 @@
<string name="sending" msgid="3245653681008218030">"درحال ارسال..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"مرورگر راهاندازی شود؟"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"تماس را میپذیرید؟"</string>
- <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <!-- no translation found for activity_resolver_use_always (8017770747801494933) -->
<skip />
- <!-- no translation found for activity_resolver_use_once (405646673463328329) -->
- <skip />
+ <string name="activity_resolver_use_once" msgid="405646673463328329">"فقط یکبار"</string>
</resources>
diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml
index ac72b4e..8f244c0 100644
--- a/core/res/res/values-fi/strings.xml
+++ b/core/res/res/values-fi/strings.xml
@@ -1321,7 +1321,7 @@
<string name="sending" msgid="3245653681008218030">"Lähetetään…"</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Käynnistetäänkö selain?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Vastataanko puheluun?"</string>
- <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <!-- no translation found for activity_resolver_use_always (8017770747801494933) -->
<skip />
<!-- no translation found for activity_resolver_use_once (405646673463328329) -->
<skip />
diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml
index 1622284..c1c3e84 100644
--- a/core/res/res/values-fr/strings.xml
+++ b/core/res/res/values-fr/strings.xml
@@ -1321,8 +1321,7 @@
<string name="sending" msgid="3245653681008218030">"Envoi en cours…"</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Lancer le navigateur ?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Prendre l\'appel ?"</string>
- <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
- <skip />
+ <string name="activity_resolver_use_always" msgid="8017770747801494933">"Toujours"</string>
<!-- no translation found for activity_resolver_use_once (405646673463328329) -->
<skip />
</resources>
diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml
index ea6447f..3726b6c 100644
--- a/core/res/res/values-hi/strings.xml
+++ b/core/res/res/values-hi/strings.xml
@@ -1321,7 +1321,7 @@
<string name="sending" msgid="3245653681008218030">"भेजा जा रहा है…"</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"ब्राउज़र लॉन्च करें?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"कॉल स्वीकार करें?"</string>
- <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <!-- no translation found for activity_resolver_use_always (8017770747801494933) -->
<skip />
<!-- no translation found for activity_resolver_use_once (405646673463328329) -->
<skip />
diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml
index b1c95aa..8e03743 100644
--- a/core/res/res/values-hr/strings.xml
+++ b/core/res/res/values-hr/strings.xml
@@ -1321,7 +1321,7 @@
<string name="sending" msgid="3245653681008218030">"Slanje..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Pokrenuti preglednik?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Prihvatiti poziv?"</string>
- <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <!-- no translation found for activity_resolver_use_always (8017770747801494933) -->
<skip />
<!-- no translation found for activity_resolver_use_once (405646673463328329) -->
<skip />
diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml
index 89aedcc..a00ae69 100644
--- a/core/res/res/values-hu/strings.xml
+++ b/core/res/res/values-hu/strings.xml
@@ -1321,7 +1321,7 @@
<string name="sending" msgid="3245653681008218030">"Küldés…"</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Böngésző indítása?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Fogadja a hívást?"</string>
- <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <!-- no translation found for activity_resolver_use_always (8017770747801494933) -->
<skip />
<!-- no translation found for activity_resolver_use_once (405646673463328329) -->
<skip />
diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml
index 7dc51e4..753e7fd 100644
--- a/core/res/res/values-in/strings.xml
+++ b/core/res/res/values-in/strings.xml
@@ -168,12 +168,9 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Pesan Anda"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Membaca dan menulis SMS, email, dan pesan Anda lainnya."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Informasi pribadi Anda"</string>
- <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
- <skip />
- <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
- <skip />
- <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
- <skip />
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Akses langsung ke informasi tentang Anda, yang tersimpan dalam kartu kontak Anda."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Informasi sosial Anda"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Akses langsung ke informasi tentang kontak dan hubungan sosial Anda."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Lokasi Anda"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Memonitor lokasi fisik Anda."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Komunikasi jaringan"</string>
@@ -186,18 +183,12 @@
<skip />
<!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) -->
<skip />
- <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
- <skip />
- <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
- <skip />
- <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
- <skip />
- <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
- <skip />
- <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
- <skip />
- <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
- <skip />
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Setelan Audio"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Mengubah setelan audio."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Memengaruhi Baterai"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Menggunakan fitur yang dapat menguras baterai dengan cepat."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Kalender"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Akses langsung ke kalender dan acara."</string>
<!-- no translation found for permgrouplab_dictionary (4148597128843641379) -->
<skip />
<!-- no translation found for permgroupdesc_dictionary (7921166355964764490) -->
@@ -206,46 +197,26 @@
<skip />
<!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) -->
<skip />
- <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
- <skip />
- <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
- <skip />
- <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
- <skip />
- <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
- <skip />
- <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
- <skip />
- <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
- <skip />
- <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
- <skip />
- <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
- <skip />
- <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
- <skip />
- <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
- <skip />
- <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
- <skip />
- <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
- <skip />
- <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
- <skip />
- <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
- <skip />
- <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
- <skip />
- <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
- <skip />
- <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
- <skip />
- <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
- <skip />
- <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
- <skip />
- <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
- <skip />
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Bookmark dan Riwayat"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Akses langsung ke bookmark dan riwayat browser."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Alarm"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Menyetel jam alarm."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Pesan Suara"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Akses langsung ke pesan suara."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Mikrofon"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Akses langsung ke mikrofon untuk merekam audio."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Kamera"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Akses langsung ke kamera untuk gambar atau tangkapan video."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Informasi aplikasi Anda"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Kemampuan untuk memengaruhi perilaku aplikasi lain pada perangkat Anda."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Wallpaper"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Mengubah setelan wallpaper perangkat."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Jam"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Mengubah zona waktu atau waktu perangkat."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Bilah Status"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Mengubah setelan bilah status perangkat."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Setelan Sinkronisasi"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Akses ke setelan sinkronisasi."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Akun-akun Anda"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Akses akun yang tersedia."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Kontrol perangkat keras"</string>
@@ -256,10 +227,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Akses tingkat rendah dan kontrol sistem."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Peralatan pengembangan"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Fitur hanya diperlukan oleh pengembang apl."</string>
- <!-- no translation found for permgrouplab_display (4279909676036402636) -->
- <skip />
- <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
- <skip />
+ <string name="permgrouplab_display" msgid="4279909676036402636">"UI Aplikasi Lainnya"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Memengaruhi UI aplikasi lain."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Penyimpanan"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Akses penyimpanan USB."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Akses kartu SD."</string>
@@ -779,8 +748,7 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"Tidak ada Kartu SIM di dalam ponsel."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Masukkan kartu SIM."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"Kartu SIM tidak ada atau tidak dapat dibaca. Masukkan kartu SIM."</string>
- <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
- <skip />
+ <string name="lockscreen_permanent_disabled_sim_message_short" msgid="5096149665138916184">"Kartu SIM tidak dapat digunakan."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"Kartu SIM Anda telah dinonaktifkan secara permanen."\n" Hubungi penyedia layanan nirkabel Anda untuk kartu SIM lain."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Tombol trek sebelumnya"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Tombol trek berikutnya"</string>
@@ -1353,7 +1321,7 @@
<string name="sending" msgid="3245653681008218030">"Mengirim..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Luncurkan Browser?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Terima panggilan?"</string>
- <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <!-- no translation found for activity_resolver_use_always (8017770747801494933) -->
<skip />
<!-- no translation found for activity_resolver_use_once (405646673463328329) -->
<skip />
diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml
index ce93389..0764284 100644
--- a/core/res/res/values-it/strings.xml
+++ b/core/res/res/values-it/strings.xml
@@ -175,28 +175,20 @@
<string name="permgroupdesc_location" msgid="5704679763124170100">"Monitoraggio della posizione fisica dell\'utente."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Comunicazione di rete"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Accesso a varie funzioni di rete."</string>
- <!-- no translation found for permgrouplab_bluetoothNetwork (1585403544162128109) -->
- <skip />
- <!-- no translation found for permgroupdesc_bluetoothNetwork (5625288577164282391) -->
- <skip />
- <!-- no translation found for permgrouplab_shortrangeNetwork (130808676377486118) -->
- <skip />
- <!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) -->
- <skip />
+ <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"Bluetooth"</string>
+ <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"È possibile accedere a dispositivi e reti tramite Bluetooth."</string>
+ <string name="permgrouplab_shortrangeNetwork" msgid="130808676377486118">"Reti a corto raggio"</string>
+ <string name="permgroupdesc_shortrangeNetwork" msgid="1884069062653436007">"È possibile accedere ai dispositivi tramite reti a corto raggio come le NFC."</string>
<string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Impostazioni audio"</string>
<string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Modifica delle impostazioni audio."</string>
<string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Influenza sulla batteria"</string>
<string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Uso di funzioni che possono consumare rapidamente la batteria."</string>
<string name="permgrouplab_calendar" msgid="5863508437783683902">"Calendario"</string>
<string name="permgroupdesc_calendar" msgid="5777534316982184416">"Accesso diretto al calendario e agli eventi."</string>
- <!-- no translation found for permgrouplab_dictionary (4148597128843641379) -->
- <skip />
- <!-- no translation found for permgroupdesc_dictionary (7921166355964764490) -->
- <skip />
- <!-- no translation found for permgrouplab_writeDictionary (8090237702432576788) -->
- <skip />
- <!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) -->
- <skip />
+ <string name="permgrouplab_dictionary" msgid="4148597128843641379">"Lettura del dizionario utente"</string>
+ <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"È possibile leggere le parole nel dizionario utente."</string>
+ <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"Scrittura nel dizionario utente"</string>
+ <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"È possibile aggiungere parole al dizionario utente."</string>
<string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Segnalibri e cronologia"</string>
<string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Accesso diretto ai segnalibri e alla cronologia del browser."</string>
<string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Sveglia"</string>
@@ -569,8 +561,7 @@
<string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Consente all\'applicazione di leggere i contenuti dell\'archivio USB, che possono includere foto e contenuti multimediali."</string>
<string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Consente all\'applicazione di leggere i contenuti della scheda SD, che possono includere foto e contenuti multimediali."</string>
<string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"mod./elimin. cont. archivio USB"</string>
- <!-- no translation found for permlab_sdcardWrite (8805693630050458763) -->
- <skip />
+ <string name="permlab_sdcardWrite" product="default" msgid="8805693630050458763">"modifica o eliminazione dei contenuti della scheda SD"</string>
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Consente all\'applicazione di scrivere nell\'archivio USB."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Consente all\'applicazione di scrivere sulla scheda SD."</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"modifica/eliminaz. contenuti archivio media int."</string>
@@ -1090,8 +1081,7 @@
<string name="date_time_set" msgid="5777075614321087758">"Imposta"</string>
<string name="date_time_done" msgid="2507683751759308828">"Fine"</string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"NUOVA: "</font></string>
- <!-- no translation found for perms_description_app (5139836143293299417) -->
- <skip />
+ <string name="perms_description_app" msgid="5139836143293299417">"Fornito da <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
<string name="no_permissions" msgid="7283357728219338112">"Nessuna autorizzazione richiesta"</string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"Archivio di massa USB"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB collegata"</string>
@@ -1321,8 +1311,6 @@
<string name="sending" msgid="3245653681008218030">"Invio..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Avviare l\'applicazione Browser?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Accettare la chiamata?"</string>
- <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
- <skip />
- <!-- no translation found for activity_resolver_use_once (405646673463328329) -->
- <skip />
+ <string name="activity_resolver_use_always" msgid="8017770747801494933">"Sempre"</string>
+ <string name="activity_resolver_use_once" msgid="405646673463328329">"Solo una volta"</string>
</resources>
diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml
index 020686e..a111f5a 100644
--- a/core/res/res/values-iw/strings.xml
+++ b/core/res/res/values-iw/strings.xml
@@ -175,28 +175,20 @@
<string name="permgroupdesc_location" msgid="5704679763124170100">"עקוב אחר המיקום הפיזי שלך."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"תקשורת רשת"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"הרשאת גישה לתכונות רשת שונות."</string>
- <!-- no translation found for permgrouplab_bluetoothNetwork (1585403544162128109) -->
- <skip />
- <!-- no translation found for permgroupdesc_bluetoothNetwork (5625288577164282391) -->
- <skip />
- <!-- no translation found for permgrouplab_shortrangeNetwork (130808676377486118) -->
- <skip />
- <!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) -->
- <skip />
+ <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"Bluetooth"</string>
+ <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"גישה למכשירים ולרשתות באמצעות Bluetooth."</string>
+ <string name="permgrouplab_shortrangeNetwork" msgid="130808676377486118">"רשתות לטווח קצר"</string>
+ <string name="permgroupdesc_shortrangeNetwork" msgid="1884069062653436007">"גישה למכשירים באמצעות רשתות קצרות-טווח, כגון רשתות NFC."</string>
<string name="permgrouplab_audioSettings" msgid="8329261670151871235">"הגדרות אודיו"</string>
<string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"שינוי הגדרות האודיו."</string>
<string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"השפעה על הסוללה"</string>
<string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"שימוש בתכונות שיכולות לרוקן את הסוללה במהירות."</string>
<string name="permgrouplab_calendar" msgid="5863508437783683902">"לוח שנה"</string>
<string name="permgroupdesc_calendar" msgid="5777534316982184416">"גישה ישירה ללוח השנה ולאירועים."</string>
- <!-- no translation found for permgrouplab_dictionary (4148597128843641379) -->
- <skip />
- <!-- no translation found for permgroupdesc_dictionary (7921166355964764490) -->
- <skip />
- <!-- no translation found for permgrouplab_writeDictionary (8090237702432576788) -->
- <skip />
- <!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) -->
- <skip />
+ <string name="permgrouplab_dictionary" msgid="4148597128843641379">"קריאת מילון משתמש"</string>
+ <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"קריאת מילים במילון משתמש."</string>
+ <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"כתיבת מילון משתמש"</string>
+ <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"הוספת מילים למילון משתמש."</string>
<string name="permgrouplab_bookmarks" msgid="1949519673103968229">"סימניות והיסטוריה"</string>
<string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"גישה ישירה אל סימניות והיסטוריית דפדפן."</string>
<string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"שעון מעורר"</string>
@@ -569,8 +561,7 @@
<string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"הרשאה זו מאפשרת ליישום לקרוא את התוכן של אחסון USB, העשוי לכלול תמונות ומדיה."</string>
<string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"הרשאה זו מאפשרת ליישום לקרוא תוכן של כרטיס SD, העשוי לכלול תמונות ומדיה."</string>
<string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"שינוי או מחיקה של תוכן אחסון ה-USB שלך"</string>
- <!-- no translation found for permlab_sdcardWrite (8805693630050458763) -->
- <skip />
+ <string name="permlab_sdcardWrite" product="default" msgid="8805693630050458763">"שינוי או מחיקה של תוכן כרטיס ה-SD שלך"</string>
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"מאפשר ליישום לכתוב להתקן האחסון מסוג USB."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"מאפשר ליישום לכתוב לכרטיס ה-SD."</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"שנה/מחק תוכן של אחסון מדיה פנימי"</string>
@@ -1090,8 +1081,7 @@
<string name="date_time_set" msgid="5777075614321087758">"הגדר"</string>
<string name="date_time_done" msgid="2507683751759308828">"בוצע"</string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"חדש: "</font></string>
- <!-- no translation found for perms_description_app (5139836143293299417) -->
- <skip />
+ <string name="perms_description_app" msgid="5139836143293299417">"מטעם <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
<string name="no_permissions" msgid="7283357728219338112">"לא דרושים אישורים"</string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"אמצעי מסוג USB לאחסון בנפח גדול"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB מחובר"</string>
@@ -1321,8 +1311,6 @@
<string name="sending" msgid="3245653681008218030">"שולח…"</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"להפעיל את הדפדפן?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"האם לקבל את השיחה?"</string>
- <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
- <skip />
- <!-- no translation found for activity_resolver_use_once (405646673463328329) -->
- <skip />
+ <string name="activity_resolver_use_always" msgid="8017770747801494933">"תמיד"</string>
+ <string name="activity_resolver_use_once" msgid="405646673463328329">"רק פעם אחת"</string>
</resources>
diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml
index b45d6cb..d05be0c 100644
--- a/core/res/res/values-ja/strings.xml
+++ b/core/res/res/values-ja/strings.xml
@@ -1321,7 +1321,7 @@
<string name="sending" msgid="3245653681008218030">"送信中..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"ブラウザを起動しますか?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"通話を受けますか?"</string>
- <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <!-- no translation found for activity_resolver_use_always (8017770747801494933) -->
<skip />
<!-- no translation found for activity_resolver_use_once (405646673463328329) -->
<skip />
diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml
index adafd25..964816e 100644
--- a/core/res/res/values-ko/strings.xml
+++ b/core/res/res/values-ko/strings.xml
@@ -1321,7 +1321,7 @@
<string name="sending" msgid="3245653681008218030">"전송 중..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"브라우저를 실행하시겠습니까?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"통화를 수락하시겠습니까?"</string>
- <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <!-- no translation found for activity_resolver_use_always (8017770747801494933) -->
<skip />
<!-- no translation found for activity_resolver_use_once (405646673463328329) -->
<skip />
diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml
index 1819172..f90907e 100644
--- a/core/res/res/values-lt/strings.xml
+++ b/core/res/res/values-lt/strings.xml
@@ -1321,7 +1321,7 @@
<string name="sending" msgid="3245653681008218030">"Siunčiama…"</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Paleisti naršyklę?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Priimti skambutį?"</string>
- <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <!-- no translation found for activity_resolver_use_always (8017770747801494933) -->
<skip />
<!-- no translation found for activity_resolver_use_once (405646673463328329) -->
<skip />
diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml
index 8231db1..8d0ed36 100644
--- a/core/res/res/values-lv/strings.xml
+++ b/core/res/res/values-lv/strings.xml
@@ -1321,7 +1321,7 @@
<string name="sending" msgid="3245653681008218030">"Notiek sūtīšana…"</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Vai palaist pārlūkprogrammu?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Vai atbildēt uz zvanu?"</string>
- <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <!-- no translation found for activity_resolver_use_always (8017770747801494933) -->
<skip />
<!-- no translation found for activity_resolver_use_once (405646673463328329) -->
<skip />
diff --git a/core/res/res/values-ms/strings.xml b/core/res/res/values-ms/strings.xml
index 0bc4262..1b479a4 100644
--- a/core/res/res/values-ms/strings.xml
+++ b/core/res/res/values-ms/strings.xml
@@ -168,12 +168,9 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Mesej anda"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Membaca dan menulis SMS, e-mel, dan mesej lain."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Maklumat peribadi anda"</string>
- <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
- <skip />
- <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
- <skip />
- <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
- <skip />
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Akses langsung ke maklumat tentang anda, yang disimpan pada kad kenalan anda."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Maklumat sosial anda"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Akses langsung ke maklumat tentang kenalan anda dan sambungan sosial."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Lokasi anda"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Pantau lokasi fizikal anda."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Komunikasi rangkaian"</string>
@@ -186,18 +183,12 @@
<skip />
<!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) -->
<skip />
- <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
- <skip />
- <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
- <skip />
- <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
- <skip />
- <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
- <skip />
- <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
- <skip />
- <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
- <skip />
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Tetapan Audio"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Tukar tetapan audio."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Menjejaskan Bateri"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Gunakan ciri yang boleh menghabiskan bateri dengan cepat."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Kalendar"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Akses langsung ke kalendar dan acara."</string>
<!-- no translation found for permgrouplab_dictionary (4148597128843641379) -->
<skip />
<!-- no translation found for permgroupdesc_dictionary (7921166355964764490) -->
@@ -206,46 +197,26 @@
<skip />
<!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) -->
<skip />
- <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
- <skip />
- <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
- <skip />
- <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
- <skip />
- <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
- <skip />
- <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
- <skip />
- <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
- <skip />
- <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
- <skip />
- <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
- <skip />
- <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
- <skip />
- <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
- <skip />
- <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
- <skip />
- <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
- <skip />
- <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
- <skip />
- <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
- <skip />
- <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
- <skip />
- <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
- <skip />
- <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
- <skip />
- <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
- <skip />
- <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
- <skip />
- <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
- <skip />
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Penanda halaman dan Sejarah"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Akses langsung ke penanda halaman dan sejarah penyemak imbas."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Penggera"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Tetapkan jam penggera."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Mel suara"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Akses langsung ke mel suara."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Mikrofon"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Akses langsung ke mikrofon untuk merakam audio."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Kamera"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Akses langsung ke kamera untuk merakam imej atau video."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Maklumat aplikasi anda"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Keupayaan untuk mempengaruhi tingkah laku aplikasi lain pada peranti anda."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Kertas dinding"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Tukar tetapan kertas dinding peranti."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Jam"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Tukar masa peranti atau zon masa."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Bar Status"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Tukar tetapan bar status peranti."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Tetapan Penyegerakan"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Akses ke tetapan segerakan."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Akaun anda"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Akses akaun yang tersedia."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Kawalan perkakasan"</string>
@@ -256,10 +227,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Akses dan kawalan peringkat lebih rendah bagi sistem."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Alatan pembangunan"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Ciri hanya diperlukan untuk pembangun apl."</string>
- <!-- no translation found for permgrouplab_display (4279909676036402636) -->
- <skip />
- <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
- <skip />
+ <string name="permgrouplab_display" msgid="4279909676036402636">"Aplikasi UI Lain"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Mempengaruhi UI aplikasi lain."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Storan"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Akses storan USB."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Akses kad SD."</string>
@@ -779,8 +748,7 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"Kad SIM tiada dalam telefon."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Masukkan kad SIM."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"Kad SIM tiada atau tidak boleh dibaca. Sila masukkan kad SIM."</string>
- <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
- <skip />
+ <string name="lockscreen_permanent_disabled_sim_message_short" msgid="5096149665138916184">"Kad SIM tidak boleh digunakan."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"Kad SIM anda telah dilumpuhkan secara kekal."\n" Hubungi pembekal perkhidmatan wayarles anda untuk mendapatkan kad SIM lain."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Butang lagu sebelumnya"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Butang lagu seterusnya"</string>
@@ -1353,7 +1321,7 @@
<string name="sending" msgid="3245653681008218030">"Menghantar…"</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Lancarkan Penyemak Imbas?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Terima panggilan?"</string>
- <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <!-- no translation found for activity_resolver_use_always (8017770747801494933) -->
<skip />
<!-- no translation found for activity_resolver_use_once (405646673463328329) -->
<skip />
diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml
index 3427829..88db9f4 100644
--- a/core/res/res/values-nb/strings.xml
+++ b/core/res/res/values-nb/strings.xml
@@ -1321,7 +1321,7 @@
<string name="sending" msgid="3245653681008218030">"Sender …"</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Vil du starte nettleseren?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Vil du besvare anropet?"</string>
- <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <!-- no translation found for activity_resolver_use_always (8017770747801494933) -->
<skip />
<!-- no translation found for activity_resolver_use_once (405646673463328329) -->
<skip />
diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml
index ef85ec4..dfd67ff 100644
--- a/core/res/res/values-nl/strings.xml
+++ b/core/res/res/values-nl/strings.xml
@@ -175,28 +175,20 @@
<string name="permgroupdesc_location" msgid="5704679763124170100">"Uw fysieke locatie bijhouden."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Netwerkcommunicatie"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Toegang tot verschillende netwerkfuncties."</string>
- <!-- no translation found for permgrouplab_bluetoothNetwork (1585403544162128109) -->
- <skip />
- <!-- no translation found for permgroupdesc_bluetoothNetwork (5625288577164282391) -->
- <skip />
- <!-- no translation found for permgrouplab_shortrangeNetwork (130808676377486118) -->
- <skip />
- <!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) -->
- <skip />
+ <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"Bluetooth"</string>
+ <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"Toegang tot apparaten en netwerken via Bluetooth."</string>
+ <string name="permgrouplab_shortrangeNetwork" msgid="130808676377486118">"Netwerken op korte afstand"</string>
+ <string name="permgroupdesc_shortrangeNetwork" msgid="1884069062653436007">"Toegang tot apparaten via netwerken op korte afstand zoals NFC."</string>
<string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Audio-instellingen"</string>
<string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Audio-instellingen wijzigen."</string>
<string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"De accu beïnvloeden"</string>
<string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Functies gebruiken waardoor de accu snel leeg kan raken."</string>
<string name="permgrouplab_calendar" msgid="5863508437783683902">"Agenda"</string>
<string name="permgroupdesc_calendar" msgid="5777534316982184416">"Rechtstreeks toegang krijgen tot agenda en afspraken."</string>
- <!-- no translation found for permgrouplab_dictionary (4148597128843641379) -->
- <skip />
- <!-- no translation found for permgroupdesc_dictionary (7921166355964764490) -->
- <skip />
- <!-- no translation found for permgrouplab_writeDictionary (8090237702432576788) -->
- <skip />
- <!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) -->
- <skip />
+ <string name="permgrouplab_dictionary" msgid="4148597128843641379">"Gebruikerswoordenboek lezen"</string>
+ <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"Woorden lezen in het gebruikerswoordenboek."</string>
+ <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"Gebruikerswoordenboek schrijven"</string>
+ <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"Woorden toevoegen aan het gebruikerswoordenboek."</string>
<string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Bladwijzers en geschiedenis"</string>
<string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Rechtstreeks toegang krijgen tot bladwijzers en browsergeschiedenis."</string>
<string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Alarm"</string>
@@ -569,8 +561,7 @@
<string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Toestaan dat de app inhoud in de USB-opslag, waaronder foto\'s en media, leest."</string>
<string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Toestaan dat de app inhoud op de SD-kaart, waaronder foto\'s en media, leest."</string>
<string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"de inhoud van uw USB-opslag aanpassen of verwijderen"</string>
- <!-- no translation found for permlab_sdcardWrite (8805693630050458763) -->
- <skip />
+ <string name="permlab_sdcardWrite" product="default" msgid="8805693630050458763">"de inhoud van uw SD-kaart aanpassen of verwijderen"</string>
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Hiermee kan de app schrijven naar de USB-opslag."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Hiermee kan de app schrijven naar de SD-kaart."</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"inh. mediaopsl. wijz./verw."</string>
@@ -1090,8 +1081,7 @@
<string name="date_time_set" msgid="5777075614321087758">"Instellen"</string>
<string name="date_time_done" msgid="2507683751759308828">"Gereed"</string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"NIEUW: "</font></string>
- <!-- no translation found for perms_description_app (5139836143293299417) -->
- <skip />
+ <string name="perms_description_app" msgid="5139836143293299417">"Geleverd door <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
<string name="no_permissions" msgid="7283357728219338112">"Geen machtigingen vereist"</string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"USB-massaopslag"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB-verbinding"</string>
@@ -1321,8 +1311,6 @@
<string name="sending" msgid="3245653681008218030">"Verzenden..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Browser starten?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Oproep accepteren?"</string>
- <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
- <skip />
- <!-- no translation found for activity_resolver_use_once (405646673463328329) -->
- <skip />
+ <string name="activity_resolver_use_always" msgid="8017770747801494933">"Altijd"</string>
+ <string name="activity_resolver_use_once" msgid="405646673463328329">"Alleen nu gebruiken"</string>
</resources>
diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml
index 022b8c5..62c839b1 100644
--- a/core/res/res/values-pl/strings.xml
+++ b/core/res/res/values-pl/strings.xml
@@ -168,12 +168,9 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Twoje wiadomości"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Czytanie i zapisywanie wiadomości SMS, e-mail i innych"</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Informacje osobiste"</string>
- <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
- <skip />
- <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
- <skip />
- <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
- <skip />
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Bezpośredni dostęp do informacji o Tobie zapisanych na wizytówce."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Twoje informacje społecznościowe"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Bezpośredni dostęp do informacji o Twoich kontaktach i powiązaniach społecznościowych."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Twoja lokalizacja"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Monitorowanie fizycznej lokalizacji"</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Połączenia sieciowe"</string>
@@ -186,18 +183,12 @@
<skip />
<!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) -->
<skip />
- <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
- <skip />
- <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
- <skip />
- <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
- <skip />
- <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
- <skip />
- <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
- <skip />
- <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
- <skip />
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Ustawienia dźwięku"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Zmiana ustawień dźwięku."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Użycie baterii"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Korzystanie z funkcji, które mogą szybko rozładować baterię."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Kalendarz"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Bezpośredni dostęp do kalendarza i wydarzeń."</string>
<!-- no translation found for permgrouplab_dictionary (4148597128843641379) -->
<skip />
<!-- no translation found for permgroupdesc_dictionary (7921166355964764490) -->
@@ -206,46 +197,26 @@
<skip />
<!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) -->
<skip />
- <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
- <skip />
- <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
- <skip />
- <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
- <skip />
- <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
- <skip />
- <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
- <skip />
- <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
- <skip />
- <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
- <skip />
- <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
- <skip />
- <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
- <skip />
- <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
- <skip />
- <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
- <skip />
- <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
- <skip />
- <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
- <skip />
- <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
- <skip />
- <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
- <skip />
- <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
- <skip />
- <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
- <skip />
- <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
- <skip />
- <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
- <skip />
- <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
- <skip />
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Zakładki i historia"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Bezpośredni dostęp do zakładek i historii przeglądarki."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Alarm"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Ustawianie budzika."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Poczta głosowa"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Bezpośredni dostęp do poczty głosowej."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Mikrofon"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Bezpośredni dostęp do mikrofonu i nagrywanie dźwięku."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Aparat"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Bezpośredni dostęp do aparatu – robienie zdjęć i nagrywanie filmów."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Informacje o aplikacjach"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Możliwość zmiany działania innych aplikacji na urządzeniu."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Tapeta"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Zmiana ustawień tapety urządzenia."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Zegar"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Zmiana czasu i strefy czasowej na urządzeniu."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Pasek stanu"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Zmiana ustawień paska stanu urządzenia."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Ustawienia synchronizacji"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Dostęp do ustawień synchronizacji."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Twoje konta"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Dostęp do udostępnionych kont."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Sterowanie sprzętowe"</string>
@@ -256,10 +227,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Dostęp i kontrola systemu niższego poziomu."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Narzędzia programistyczne"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Funkcje potrzebne jedynie programistom."</string>
- <!-- no translation found for permgrouplab_display (4279909676036402636) -->
- <skip />
- <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
- <skip />
+ <string name="permgrouplab_display" msgid="4279909676036402636">"Interfejsy innych aplikacji"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Możliwość wpływania na interfejsy innych aplikacji."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Pamięć"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Dostęp do nośnika USB."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Dostęp do karty SD."</string>
@@ -779,8 +748,7 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"Brak karty SIM w telefonie."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Włóż kartę SIM."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"Brak karty SIM lub nie można jej odczytać. Włóż kartę SIM."</string>
- <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
- <skip />
+ <string name="lockscreen_permanent_disabled_sim_message_short" msgid="5096149665138916184">"Karta SIM bezużyteczna."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"Karta SIM jest trwale wyłączona."\n" Skontaktuj się z dostawcą usług bezprzewodowych, aby uzyskać inną kartę SIM."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Przycisk poprzedniego utworu"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Przycisk następnego utworu"</string>
@@ -1353,7 +1321,7 @@
<string name="sending" msgid="3245653681008218030">"Wysyłanie..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Uruchomić przeglądarkę?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Odebrać połączenie?"</string>
- <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <!-- no translation found for activity_resolver_use_always (8017770747801494933) -->
<skip />
<!-- no translation found for activity_resolver_use_once (405646673463328329) -->
<skip />
diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml
index e785c7c..1825346 100644
--- a/core/res/res/values-pt-rPT/strings.xml
+++ b/core/res/res/values-pt-rPT/strings.xml
@@ -1321,7 +1321,7 @@
<string name="sending" msgid="3245653681008218030">"A enviar..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Iniciar Navegador?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Aceitar chamada?"</string>
- <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <!-- no translation found for activity_resolver_use_always (8017770747801494933) -->
<skip />
<!-- no translation found for activity_resolver_use_once (405646673463328329) -->
<skip />
diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml
index c7b6746..2e00b29 100644
--- a/core/res/res/values-pt/strings.xml
+++ b/core/res/res/values-pt/strings.xml
@@ -1321,7 +1321,7 @@
<string name="sending" msgid="3245653681008218030">"Enviando..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Abrir Navegador?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Aceitar chamada?"</string>
- <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <!-- no translation found for activity_resolver_use_always (8017770747801494933) -->
<skip />
<!-- no translation found for activity_resolver_use_once (405646673463328329) -->
<skip />
diff --git a/core/res/res/values-rm/strings.xml b/core/res/res/values-rm/strings.xml
index 3ca7f9c..e22bb14 100644
--- a/core/res/res/values-rm/strings.xml
+++ b/core/res/res/values-rm/strings.xml
@@ -2069,7 +2069,7 @@
<skip />
<!-- no translation found for SetupCallDefault (5834948469253758575) -->
<skip />
- <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <!-- no translation found for activity_resolver_use_always (8017770747801494933) -->
<skip />
<!-- no translation found for activity_resolver_use_once (405646673463328329) -->
<skip />
diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml
index 963b676..61428cd 100644
--- a/core/res/res/values-ro/strings.xml
+++ b/core/res/res/values-ro/strings.xml
@@ -1321,7 +1321,7 @@
<string name="sending" msgid="3245653681008218030">"Se trimite..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Lansaţi browserul?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Acceptaţi apelul?"</string>
- <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <!-- no translation found for activity_resolver_use_always (8017770747801494933) -->
<skip />
<!-- no translation found for activity_resolver_use_once (405646673463328329) -->
<skip />
diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml
index 04163ee..1fcd393 100644
--- a/core/res/res/values-ru/strings.xml
+++ b/core/res/res/values-ru/strings.xml
@@ -1321,7 +1321,7 @@
<string name="sending" msgid="3245653681008218030">"Отправка..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Запустить браузер?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Ответить?"</string>
- <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <!-- no translation found for activity_resolver_use_always (8017770747801494933) -->
<skip />
<!-- no translation found for activity_resolver_use_once (405646673463328329) -->
<skip />
diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml
index fff419d..db562c7 100644
--- a/core/res/res/values-sk/strings.xml
+++ b/core/res/res/values-sk/strings.xml
@@ -1321,7 +1321,7 @@
<string name="sending" msgid="3245653681008218030">"Odosielanie..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Spustiť prehliadač?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Prijať hovor?"</string>
- <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <!-- no translation found for activity_resolver_use_always (8017770747801494933) -->
<skip />
<!-- no translation found for activity_resolver_use_once (405646673463328329) -->
<skip />
diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml
index df0ddea..570bb59 100644
--- a/core/res/res/values-sl/strings.xml
+++ b/core/res/res/values-sl/strings.xml
@@ -1321,7 +1321,7 @@
<string name="sending" msgid="3245653681008218030">"Pošiljanje ..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Ali želite odpreti brskalnik?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Ali želite sprejeti klic?"</string>
- <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <!-- no translation found for activity_resolver_use_always (8017770747801494933) -->
<skip />
<!-- no translation found for activity_resolver_use_once (405646673463328329) -->
<skip />
diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml
index 5573607..11a733d 100644
--- a/core/res/res/values-sr/strings.xml
+++ b/core/res/res/values-sr/strings.xml
@@ -1321,7 +1321,7 @@
<string name="sending" msgid="3245653681008218030">"Слање..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Желите ли да покренете прегледач?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Желите ли да прихватите позив?"</string>
- <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <!-- no translation found for activity_resolver_use_always (8017770747801494933) -->
<skip />
<!-- no translation found for activity_resolver_use_once (405646673463328329) -->
<skip />
diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml
index 5bce25a..251d487 100644
--- a/core/res/res/values-sv/strings.xml
+++ b/core/res/res/values-sv/strings.xml
@@ -1321,8 +1321,7 @@
<string name="sending" msgid="3245653681008218030">"Skickar ..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Vill du öppna webbläsaren?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Vill du ta emot samtal?"</string>
- <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
- <skip />
+ <string name="activity_resolver_use_always" msgid="8017770747801494933">"Alltid"</string>
<!-- no translation found for activity_resolver_use_once (405646673463328329) -->
<skip />
</resources>
diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml
index 05732dc..1904de4 100644
--- a/core/res/res/values-sw/strings.xml
+++ b/core/res/res/values-sw/strings.xml
@@ -175,28 +175,20 @@
<string name="permgroupdesc_location" msgid="5704679763124170100">"Fuatilia eneo lako halisi."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Mawasiliano ya mtandao"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Fikia vipengele mbalimbali vya mtandao."</string>
- <!-- no translation found for permgrouplab_bluetoothNetwork (1585403544162128109) -->
- <skip />
- <!-- no translation found for permgroupdesc_bluetoothNetwork (5625288577164282391) -->
- <skip />
- <!-- no translation found for permgrouplab_shortrangeNetwork (130808676377486118) -->
- <skip />
- <!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) -->
- <skip />
+ <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"Bluetooth"</string>
+ <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"Fikia vifaa na mitandao kupitia Bluetooth."</string>
+ <string name="permgrouplab_shortrangeNetwork" msgid="130808676377486118">"Mitandao ya Masafa mafupi"</string>
+ <string name="permgroupdesc_shortrangeNetwork" msgid="1884069062653436007">"Fikia vifaa kupitia mitandao ya masafa mafupi kama vile NFC."</string>
<string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Mipangilio ya Sauti"</string>
<string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Badilisha mipangilio ya sauti."</string>
<string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Huathiri Betri"</string>
<string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Tumia vipengele vinaweza kumaliza betri haraka."</string>
<string name="permgrouplab_calendar" msgid="5863508437783683902">"Kalenda"</string>
<string name="permgroupdesc_calendar" msgid="5777534316982184416">"Kufikia moja kwa moja kalenda na matukio."</string>
- <!-- no translation found for permgrouplab_dictionary (4148597128843641379) -->
- <skip />
- <!-- no translation found for permgroupdesc_dictionary (7921166355964764490) -->
- <skip />
- <!-- no translation found for permgrouplab_writeDictionary (8090237702432576788) -->
- <skip />
- <!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) -->
- <skip />
+ <string name="permgrouplab_dictionary" msgid="4148597128843641379">"Soma Kamuzi ya Mtumiaji"</string>
+ <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"Soma maneno katika kamusi ya mtumiaji."</string>
+ <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"Andika Kamusi ya Mtumiaji"</string>
+ <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"Ongeza maneno katika kamusi mtumiaji."</string>
<string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Vialamisho na Historia"</string>
<string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Kufikia moja kwa moja vialamisho na historia ya kivinjari"</string>
<string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Kengele"</string>
@@ -569,8 +561,7 @@
<string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Huruhusu programu kusoma maudhui ya hifadhi ya USB, ambayo huenda ikajumuisha picha na midia."</string>
<string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Huruhusu programu kusoma maudhui ya kadi ya SD, ambayo huenda yakajumuisha picha na midia."</string>
<string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"rekebisha au ufute maudhui ya hifadhi yako ya USB"</string>
- <!-- no translation found for permlab_sdcardWrite (8805693630050458763) -->
- <skip />
+ <string name="permlab_sdcardWrite" product="default" msgid="8805693630050458763">"rekebisha au ufute maudhui ya kadi yako ya SD"</string>
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Inaruhusu programu kuandikia hifadhi ya USB."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Inaruhusu programu kuandikia kadi ya SD."</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"badilisha/futa maudhui ya hifadhi ya media ya ndani."</string>
@@ -1090,8 +1081,7 @@
<string name="date_time_set" msgid="5777075614321087758">"Weka"</string>
<string name="date_time_done" msgid="2507683751759308828">"Imekamilika"</string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">" MPYA: "</font></string>
- <!-- no translation found for perms_description_app (5139836143293299417) -->
- <skip />
+ <string name="perms_description_app" msgid="5139836143293299417">"Zinatolewa na <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
<string name="no_permissions" msgid="7283357728219338112">"Hakuna vibali vinavyohitajika"</string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"Hifadhi kubwa ya USB"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB imeunganishwa"</string>
@@ -1321,8 +1311,6 @@
<string name="sending" msgid="3245653681008218030">"Inatuma…"</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Zindua Kivinjari?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Kubali simu?"</string>
- <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
- <skip />
- <!-- no translation found for activity_resolver_use_once (405646673463328329) -->
- <skip />
+ <string name="activity_resolver_use_always" msgid="8017770747801494933">"Kila mara"</string>
+ <string name="activity_resolver_use_once" msgid="405646673463328329">"Mara Moja tu"</string>
</resources>
diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml
index c47a3ac..46c58e3 100644
--- a/core/res/res/values-th/strings.xml
+++ b/core/res/res/values-th/strings.xml
@@ -1321,7 +1321,7 @@
<string name="sending" msgid="3245653681008218030">"กำลังส่ง…"</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"เปิดเบราว์เซอร์หรือไม่"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"รับสายหรือไม่"</string>
- <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <!-- no translation found for activity_resolver_use_always (8017770747801494933) -->
<skip />
<!-- no translation found for activity_resolver_use_once (405646673463328329) -->
<skip />
diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml
index 006fa63..946c0e7 100644
--- a/core/res/res/values-tl/strings.xml
+++ b/core/res/res/values-tl/strings.xml
@@ -1321,7 +1321,7 @@
<string name="sending" msgid="3245653681008218030">"Ipinapadala..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Ilunsad ang Browser?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Tanggapin ang tawag?"</string>
- <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <!-- no translation found for activity_resolver_use_always (8017770747801494933) -->
<skip />
<!-- no translation found for activity_resolver_use_once (405646673463328329) -->
<skip />
diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml
index c13c520..9aa2df3 100644
--- a/core/res/res/values-tr/strings.xml
+++ b/core/res/res/values-tr/strings.xml
@@ -1321,7 +1321,7 @@
<string name="sending" msgid="3245653681008218030">"Gönderiliyor…"</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Tarayıcı Başlatılsın mı?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Çağrı kabul edilsin mi?"</string>
- <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <!-- no translation found for activity_resolver_use_always (8017770747801494933) -->
<skip />
<!-- no translation found for activity_resolver_use_once (405646673463328329) -->
<skip />
diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml
index 0ad2da2..4a1a0bc 100644
--- a/core/res/res/values-uk/strings.xml
+++ b/core/res/res/values-uk/strings.xml
@@ -1321,7 +1321,7 @@
<string name="sending" msgid="3245653681008218030">"Надсилання…"</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Запустити веб-переглядач?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Прийняти виклик?"</string>
- <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <!-- no translation found for activity_resolver_use_always (8017770747801494933) -->
<skip />
<!-- no translation found for activity_resolver_use_once (405646673463328329) -->
<skip />
diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml
index 192c1dc..148713237 100644
--- a/core/res/res/values-vi/strings.xml
+++ b/core/res/res/values-vi/strings.xml
@@ -175,28 +175,20 @@
<string name="permgroupdesc_location" msgid="5704679763124170100">"Giám sát vị trí thực của bạn."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Kết nối mạng"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Truy cập các tính năng mạng khác nhau."</string>
- <!-- no translation found for permgrouplab_bluetoothNetwork (1585403544162128109) -->
- <skip />
- <!-- no translation found for permgroupdesc_bluetoothNetwork (5625288577164282391) -->
- <skip />
- <!-- no translation found for permgrouplab_shortrangeNetwork (130808676377486118) -->
- <skip />
- <!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) -->
- <skip />
+ <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"Bluetooth"</string>
+ <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"Truy cập vào các thiết bị và mạng thông qua Bluetooth."</string>
+ <string name="permgrouplab_shortrangeNetwork" msgid="130808676377486118">"Mạng tầm ngắn"</string>
+ <string name="permgroupdesc_shortrangeNetwork" msgid="1884069062653436007">"Truy cập vào các thiết bị thông qua mạng tầm ngắn như NFC."</string>
<string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Cài đặt âm thanh"</string>
<string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Thay đổi cài đặt âm thanh."</string>
<string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Ảnh hưởng tới pin"</string>
<string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Sử dụng các tính năng có thể làm nhanh hết pin."</string>
<string name="permgrouplab_calendar" msgid="5863508437783683902">"Lịch"</string>
<string name="permgroupdesc_calendar" msgid="5777534316982184416">"Truy cập trực tiếp vào lịch và sự kiện."</string>
- <!-- no translation found for permgrouplab_dictionary (4148597128843641379) -->
- <skip />
- <!-- no translation found for permgroupdesc_dictionary (7921166355964764490) -->
- <skip />
- <!-- no translation found for permgrouplab_writeDictionary (8090237702432576788) -->
- <skip />
- <!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) -->
- <skip />
+ <string name="permgrouplab_dictionary" msgid="4148597128843641379">"Đọc từ điển người dùng"</string>
+ <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"Đọc các từ trong từ điển người dùng."</string>
+ <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"Ghi từ điển người dùng"</string>
+ <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"Thêm từ vào từ điển người dùng."</string>
<string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Dấu trang và lịch sử"</string>
<string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Truy cập trực tiếp vào dấu trang và lịch sử trình duyệt."</string>
<string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Báo thức"</string>
@@ -569,8 +561,7 @@
<string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Cho phép ứng dụng đọc nội dung của bộ lưu trữ USB, bộ lưu trữ này có thể bao gồm ảnh và đa phương tiện."</string>
<string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Cho phép ứng dụng đọc nội dung của thẻ SD, thẻ này có thể bao gồm ảnh và đa phương tiện."</string>
<string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"sửa đổi hoặc xóa nội dung của bộ lưu trữ USB của bạn"</string>
- <!-- no translation found for permlab_sdcardWrite (8805693630050458763) -->
- <skip />
+ <string name="permlab_sdcardWrite" product="default" msgid="8805693630050458763">"sửa đổi hoặc xóa nội dung của thẻ SD của bạn"</string>
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Cho phép ứng dụng ghi vào bộ lưu trữ USB."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Cho phép ứng dụng ghi vào thẻ SD."</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"sửa đổi/xóa nội dung trên bộ nhớ phương tiện cục bộ"</string>
@@ -1090,8 +1081,7 @@
<string name="date_time_set" msgid="5777075614321087758">"Đặt"</string>
<string name="date_time_done" msgid="2507683751759308828">"Xong"</string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"MỚI: "</font></string>
- <!-- no translation found for perms_description_app (5139836143293299417) -->
- <skip />
+ <string name="perms_description_app" msgid="5139836143293299417">"Được cung cấp bởi <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
<string name="no_permissions" msgid="7283357728219338112">"Không yêu cầu quyền"</string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"Bộ nhớ dung lượng lớn USB"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB đã kết nối"</string>
@@ -1321,8 +1311,7 @@
<string name="sending" msgid="3245653681008218030">"Đang gửi…"</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Khởi chạy trình duyệt?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Chấp nhận cuộc gọi?"</string>
- <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <!-- no translation found for activity_resolver_use_always (8017770747801494933) -->
<skip />
- <!-- no translation found for activity_resolver_use_once (405646673463328329) -->
- <skip />
+ <string name="activity_resolver_use_once" msgid="405646673463328329">"Chỉ một lần"</string>
</resources>
diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml
index d61d513..85f83f7 100644
--- a/core/res/res/values-zh-rCN/strings.xml
+++ b/core/res/res/values-zh-rCN/strings.xml
@@ -168,12 +168,9 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"您的信息"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"读写短信、电子邮件和其他消息。"</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"您的个人信息"</string>
- <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
- <skip />
- <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
- <skip />
- <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
- <skip />
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"直接访问您存储在名片上的信息。"</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"您的社交信息"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"直接访问与您的联系人和社交关系相关的信息。"</string>
<string name="permgrouplab_location" msgid="635149742436692049">"您的位置"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"监视您的实际位置。"</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"网络通信"</string>
@@ -186,18 +183,12 @@
<skip />
<!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) -->
<skip />
- <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
- <skip />
- <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
- <skip />
- <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
- <skip />
- <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
- <skip />
- <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
- <skip />
- <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
- <skip />
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"音频设置"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"更改音频设置。"</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"影响电池的使用"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"使用耗电量较大的功能。"</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"日历"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"直接访问日历和活动。"</string>
<!-- no translation found for permgrouplab_dictionary (4148597128843641379) -->
<skip />
<!-- no translation found for permgroupdesc_dictionary (7921166355964764490) -->
@@ -206,46 +197,26 @@
<skip />
<!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) -->
<skip />
- <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
- <skip />
- <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
- <skip />
- <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
- <skip />
- <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
- <skip />
- <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
- <skip />
- <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
- <skip />
- <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
- <skip />
- <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
- <skip />
- <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
- <skip />
- <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
- <skip />
- <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
- <skip />
- <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
- <skip />
- <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
- <skip />
- <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
- <skip />
- <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
- <skip />
- <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
- <skip />
- <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
- <skip />
- <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
- <skip />
- <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
- <skip />
- <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
- <skip />
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"书签和历史记录"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"直接访问书签和浏览器历史记录。"</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"闹钟"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"设置闹钟。"</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"语音信箱"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"直接访问语音信箱。"</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"麦克风"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"直接访问麦克风以录制音频。"</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"相机"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"直接访问相机以拍摄图片或视频。"</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"您的应用信息"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"能够影响设备上其他应用的行为。"</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"壁纸"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"更改设备的壁纸设置。"</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"时钟"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"更改设备的时间或时区。"</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"状态栏"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"更改设备的状态栏设置。"</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"同步设置"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"访问同步设置。"</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"您的帐户"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"访问可用的帐户。"</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"硬件控件"</string>
@@ -256,10 +227,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"对系统进行低级访问和控制。"</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"开发工具"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"只有应用开发人员才需要的功能。"</string>
- <!-- no translation found for permgrouplab_display (4279909676036402636) -->
- <skip />
- <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
- <skip />
+ <string name="permgrouplab_display" msgid="4279909676036402636">"其他应用的用户界面"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"影响其他应用的用户界面。"</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"存储"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"访问 USB 存储设备。"</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"访问 SD 卡。"</string>
@@ -779,8 +748,7 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"手机中无 SIM 卡"</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"请插入 SIM 卡"</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"SIM 卡缺失或无法读取。请插入 SIM 卡。"</string>
- <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
- <skip />
+ <string name="lockscreen_permanent_disabled_sim_message_short" msgid="5096149665138916184">"SIM 卡无法使用。"</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"您的 SIM 卡已永久停用。"\n"请与您的无线服务提供商联系,以便重新获取一张 SIM 卡。"</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"“上一曲目”按钮"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"“下一曲目”按钮"</string>
@@ -1353,7 +1321,7 @@
<string name="sending" msgid="3245653681008218030">"正在发送..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"要启动浏览器吗?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"要接听电话吗?"</string>
- <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <!-- no translation found for activity_resolver_use_always (8017770747801494933) -->
<skip />
<!-- no translation found for activity_resolver_use_once (405646673463328329) -->
<skip />
diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml
index 28d7cab..8d1a950 100644
--- a/core/res/res/values-zh-rTW/strings.xml
+++ b/core/res/res/values-zh-rTW/strings.xml
@@ -1321,7 +1321,7 @@
<string name="sending" msgid="3245653681008218030">"傳送中..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"啟動「瀏覽器」嗎?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"接聽電話嗎?"</string>
- <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <!-- no translation found for activity_resolver_use_always (8017770747801494933) -->
<skip />
<!-- no translation found for activity_resolver_use_once (405646673463328329) -->
<skip />
diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml
index 8010962..4edb7b2 100644
--- a/core/res/res/values-zu/strings.xml
+++ b/core/res/res/values-zu/strings.xml
@@ -175,28 +175,20 @@
<string name="permgroupdesc_location" msgid="5704679763124170100">"Gada indawo yakho yokuhlala"</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Uxhumano lwenethiwekhi"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Finyelela kokuqukethwe inethiwekhi okuhlukahlukee."</string>
- <!-- no translation found for permgrouplab_bluetoothNetwork (1585403544162128109) -->
- <skip />
- <!-- no translation found for permgroupdesc_bluetoothNetwork (5625288577164282391) -->
- <skip />
- <!-- no translation found for permgrouplab_shortrangeNetwork (130808676377486118) -->
- <skip />
- <!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) -->
- <skip />
+ <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"I-Bluetooth"</string>
+ <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"Finyelela amadivayisi namanethiwekhi nge-Bluetooth."</string>
+ <string name="permgrouplab_shortrangeNetwork" msgid="130808676377486118">"Amanethiwekhi ebanga elifushane"</string>
+ <string name="permgroupdesc_shortrangeNetwork" msgid="1884069062653436007">"Finyelela amadivayisi ngamanethiwekhi ebanga elifushane njenge-NFC."</string>
<string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Izilungiselelo zomsindo"</string>
<string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Shintsha izilungiselelo zomsindo."</string>
<string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Ithinta ibhethri"</string>
<string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Sebenzisa izici ezingakhipha ngokushesha ibhethri."</string>
<string name="permgrouplab_calendar" msgid="5863508437783683902">"Ikhalenda"</string>
<string name="permgroupdesc_calendar" msgid="5777534316982184416">"Ukufinyelela okuqondile kukhalenda nezehlakalo."</string>
- <!-- no translation found for permgrouplab_dictionary (4148597128843641379) -->
- <skip />
- <!-- no translation found for permgroupdesc_dictionary (7921166355964764490) -->
- <skip />
- <!-- no translation found for permgrouplab_writeDictionary (8090237702432576788) -->
- <skip />
- <!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) -->
- <skip />
+ <string name="permgrouplab_dictionary" msgid="4148597128843641379">"Funda isichzamazwi somsebenzisi"</string>
+ <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"Funda amagama kusichazamazwi somsebenzisi."</string>
+ <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"Bhala isichazamazwi somsebenzisi"</string>
+ <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"Engeza amagama kusichazamazwi somsebenzisi."</string>
<string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Amabhukhimakhi nomlando"</string>
<string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Ukufinyelela okuqondile kumlando wamabhukimakhi nesiphequluli."</string>
<string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"I-alamu"</string>
@@ -569,8 +561,7 @@
<string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Ivumela uhlelo lokusebenza ukuthi lufunde okuqukethwe kwi-USB, okungabandakanya izithombe kanye nezingosi yezindaba."</string>
<string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Ivumela uhlelo lokusebenza ukuthi lufunde okuqukethwe ikhadi le-SD, okungabandakanya izithombe kanye nengosi yezindaba."</string>
<string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"guqula noma ususe okuqukethwe kwakho okugciniwe okufinyeleleka nge-USB"</string>
- <!-- no translation found for permlab_sdcardWrite (8805693630050458763) -->
- <skip />
+ <string name="permlab_sdcardWrite" product="default" msgid="8805693630050458763">"shintsha noma ususe okuqukethwe ekhadini lakho le-SD"</string>
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Ivumela insiza ukuthi ibhalele ekulondolozweni kwe-USB."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Ivumela insiza ukuthi ibhalele ekhadini le-SD."</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"guqula/susa okuqukethwe kwisitoreji semidiya yangaphakathi"</string>
@@ -1090,8 +1081,7 @@
<string name="date_time_set" msgid="5777075614321087758">"Hlela"</string>
<string name="date_time_done" msgid="2507683751759308828">"Kwenziwe"</string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"OKUSHA: "</font></string>
- <!-- no translation found for perms_description_app (5139836143293299417) -->
- <skip />
+ <string name="perms_description_app" msgid="5139836143293299417">"Inikelwe yi-<xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
<string name="no_permissions" msgid="7283357728219338112">"Ayikho imvume edingekayo"</string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"Isitoreji Esikhulu se-USB"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"I-USB ixhunyiwe"</string>
@@ -1321,8 +1311,7 @@
<string name="sending" msgid="3245653681008218030">"Iyathumela..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Qala Isiphequluli?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"Amukela ucingo?"</string>
- <!-- no translation found for activity_resolver_use_always (4167356512478150080) -->
+ <!-- no translation found for activity_resolver_use_always (8017770747801494933) -->
<skip />
- <!-- no translation found for activity_resolver_use_once (405646673463328329) -->
- <skip />
+ <string name="activity_resolver_use_once" msgid="405646673463328329">"Kanye nje"</string>
</resources>
diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml
index 484de0d..ad1dff5 100755
--- a/core/res/res/values/attrs.xml
+++ b/core/res/res/values/attrs.xml
@@ -2461,8 +2461,10 @@
<attr name="accessibilityFlags">
<!-- Has flag {@link android.accessibilityservice.AccessibilityServiceInfo#DEFAULT} -->
<flag name="flagDefault" value="0x00000001" />
- <!-- Has flag {@link android.accessibilityservice.AccessibilityServiceInfo#INCLUDE_NOT_IMPORTANT_VIEWS} -->
+ <!-- Has flag {@link android.accessibilityservice.AccessibilityServiceInfo#FLAG_INCLUDE_NOT_IMPORTANT_VIEWS} -->
<flag name="flagIncludeNotImportantViews" value="0x00000002" />
+ <!-- Has flag {@link android.accessibilityservice.AccessibilityServiceInfo#FLAG_REQUEST_TOUCH_EXPLORATION_MODE} -->
+ <flag name="flagRequestTouchExplorationMode" value="0x00000004" />
</attr>
<!-- Component name of an activity that allows the user to modify
the settings for this service. This setting cannot be changed at runtime. -->
@@ -2470,8 +2472,6 @@
<!-- Flag whether the accessibility service wants to be able to retrieve the
active window content. This setting cannot be changed at runtime. -->
<attr name="canRetrieveWindowContent" format="boolean" />
- <!-- Flag whether the accessibility service can handle gesrures and wants such. -->
- <attr name="canHandleGestures" format="boolean" />
<!-- Short description of the accessibility serivce purpose or behavior.-->
<attr name="description" />
</declare-styleable>
diff --git a/core/res/res/values/colors.xml b/core/res/res/values/colors.xml
index e23e3c6..41f902f 100644
--- a/core/res/res/values/colors.xml
+++ b/core/res/res/values/colors.xml
@@ -181,5 +181,8 @@
<!-- A really bright Holo shade of blue -->
<color name="holo_blue_bright">#ff00ddff</color>
+ <drawable name="notification_template_icon_bg">#3333B5E5</drawable>
+ <drawable name="notification_template_icon_low_bg">#0cffffff</drawable>
+
</resources>
diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml
index 98c19cf..1d17cd8 100644
--- a/core/res/res/values/public.xml
+++ b/core/res/res/values/public.xml
@@ -208,6 +208,7 @@
<java-symbol type="id" name="inbox_text2" />
<java-symbol type="id" name="inbox_text3" />
<java-symbol type="id" name="inbox_text4" />
+ <java-symbol type="id" name="status_bar_latest_event_content" />
<java-symbol type="attr" name="actionModeShareDrawable" />
<java-symbol type="attr" name="alertDialogCenterButtons" />
@@ -979,6 +980,7 @@
<java-symbol type="drawable" name="jog_tab_target_gray" />
<java-symbol type="drawable" name="picture_emergency" />
<java-symbol type="drawable" name="platlogo" />
+ <java-symbol type="drawable" name="platlogo_alt" />
<java-symbol type="drawable" name="stat_notify_sync_error" />
<java-symbol type="drawable" name="stat_notify_wifi_in_range" />
<java-symbol type="drawable" name="stat_sys_gps_on" />
@@ -1004,6 +1006,9 @@
<java-symbol type="drawable" name="ic_lockscreen_unlock" />
<java-symbol type="drawable" name="ic_lockscreen_search" />
<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="layout" name="action_bar_home" />
<java-symbol type="layout" name="action_bar_title_item" />
@@ -1091,6 +1096,7 @@
<java-symbol type="layout" name="zoom_controls" />
<java-symbol type="layout" name="zoom_magnify" />
<java-symbol type="layout" name="notification_action" />
+ <java-symbol type="layout" name="notification_action_tombstone" />
<java-symbol type="layout" name="notification_intruder_content" />
<java-symbol type="layout" name="notification_template_base" />
<java-symbol type="layout" name="notification_template_big_base" />
@@ -3600,7 +3606,6 @@
<public type="attr" name="parentActivityName" />
<public type="attr" name="importantForAccessibility"/>
- <public type="attr" name="canHandleGestures"/>
<public type="attr" name="permissionGroupFlags"/>
diff --git a/include/androidfw/Input.h b/include/androidfw/Input.h
index 601a169..6d03fd6 100644
--- a/include/androidfw/Input.h
+++ b/include/androidfw/Input.h
@@ -262,6 +262,8 @@
inline int32_t getFlags() const { return mFlags; }
+ inline void setFlags(int32_t flags) { mFlags = flags; }
+
inline int32_t getKeyCode() const { return mKeyCode; }
inline int32_t getScanCode() const { return mScanCode; }
diff --git a/media/java/android/media/MediaFormat.java b/media/java/android/media/MediaFormat.java
index df77c9e..4414191 100644
--- a/media/java/android/media/MediaFormat.java
+++ b/media/java/android/media/MediaFormat.java
@@ -53,6 +53,7 @@
* <tr><td>{@link #KEY_IS_ADTS}</td><td>Integer</td><td>optional, if content is AAC audio, setting this key to 1 indicates that each audio frame is prefixed by the ADTS header.</td></tr>
* <tr><td>{@link #KEY_AAC_PROFILE}</td><td>Integer</td><td><b>encoder-only</b>, optional, if content is AAC audio, specifies the desired profile.</td></tr>
* <tr><td>{@link #KEY_CHANNEL_MASK}</td><td>Integer</td><td>A mask of audio channel assignments</td></tr>
+ * <tr><td>{@link #KEY_FLAC_COMPRESSION_LEVEL}</td><td>Integer</td><td><b>encoder-only</b>, optional, if content is FLAC audio, specifies the desired compression level.</td></tr>
* </table>
*
*/
@@ -155,6 +156,13 @@
*/
public static final String KEY_AAC_PROFILE = "aac-profile";
+ /**
+ * A key describing the FLAC compression level to be used (FLAC audio format only).
+ * The associated value is an integer ranging from 0 (fastest, least compression)
+ * to 8 (slowest, most compression).
+ */
+ public static final String KEY_FLAC_COMPRESSION_LEVEL = "flac-compression-level";
+
/* package private */ MediaFormat(Map<String, Object> map) {
mMap = map;
}
diff --git a/media/mca/filterpacks/java/android/filterpacks/imageproc/BitmapOverlayFilter.java b/media/mca/filterpacks/java/android/filterpacks/imageproc/BitmapOverlayFilter.java
index d4c901f..e4bb6cf 100644
--- a/media/mca/filterpacks/java/android/filterpacks/imageproc/BitmapOverlayFilter.java
+++ b/media/mca/filterpacks/java/android/filterpacks/imageproc/BitmapOverlayFilter.java
@@ -46,8 +46,6 @@
private Program mProgram;
private Frame mFrame;
- private int mWidth = 0;
- private int mHeight = 0;
private int mTarget = FrameFormat.TARGET_UNSPECIFIED;
private final String mOverlayShader =
@@ -113,18 +111,17 @@
initProgram(context, inputFormat.getTarget());
}
- // Check if the frame size has changed
- if (inputFormat.getWidth() != mWidth || inputFormat.getHeight() != mHeight) {
- mWidth = inputFormat.getWidth();
- mHeight = inputFormat.getHeight();
+ if (mBitmap != null) {
+ Frame frame = createBitmapFrame(context);
+ // Process
+ Frame[] inputs = {input, frame};
+ mProgram.process(inputs, output);
- createBitmapFrame(context);
+ frame.release();
+ } else {
+ output.setDataFromFrame(input);
}
- // Process
- Frame[] inputs = {input, mFrame};
- mProgram.process(inputs, output);
-
// Push output
pushOutput("image", output);
@@ -132,22 +129,18 @@
output.release();
}
- private void createBitmapFrame(FilterContext context) {
- if (mBitmap != null) {
- FrameFormat format = ImageFormat.create(mBitmap.getWidth(),
- mBitmap.getHeight(),
- ImageFormat.COLORSPACE_RGBA,
- FrameFormat.TARGET_GPU);
+ private Frame createBitmapFrame(FilterContext context) {
+ FrameFormat format = ImageFormat.create(mBitmap.getWidth(),
+ mBitmap.getHeight(),
+ ImageFormat.COLORSPACE_RGBA,
+ FrameFormat.TARGET_GPU);
- if (mFrame != null) {
- mFrame.release();
- }
+ Frame frame = context.getFrameManager().newFrame(format);
+ frame.setBitmap(mBitmap);
- mFrame = context.getFrameManager().newFrame(format);
- mFrame.setBitmap(mBitmap);
+ mBitmap.recycle();
+ mBitmap = null;
- mBitmap.recycle();
- mBitmap = null;
- }
+ return frame;
}
}
diff --git a/media/mca/filterpacks/java/android/filterpacks/imageproc/BlackWhiteFilter.java b/media/mca/filterpacks/java/android/filterpacks/imageproc/BlackWhiteFilter.java
index 9e40d37..dd7f5e0 100644
--- a/media/mca/filterpacks/java/android/filterpacks/imageproc/BlackWhiteFilter.java
+++ b/media/mca/filterpacks/java/android/filterpacks/imageproc/BlackWhiteFilter.java
@@ -28,6 +28,7 @@
import android.filterfw.core.ShaderProgram;
import android.filterfw.format.ImageFormat;
+import java.util.Date;
import java.util.Random;
public class BlackWhiteFilter extends Filter {
@@ -42,24 +43,30 @@
private int mTileSize = 640;
private Program mProgram;
+ private Random mRandom;
- private int mWidth = 0;
- private int mHeight = 0;
private int mTarget = FrameFormat.TARGET_UNSPECIFIED;
private final String mBlackWhiteShader =
"precision mediump float;\n" +
"uniform sampler2D tex_sampler_0;\n" +
+ "uniform vec2 seed;\n" +
"uniform float black;\n" +
"uniform float scale;\n" +
"uniform float stepsize;\n" +
"varying vec2 v_texcoord;\n" +
"float rand(vec2 loc) {\n" +
- " return fract(sin(dot(loc, vec2(12.9898, 78.233))) * 43758.5453);\n" +
+ " const float divide = 0.00048828125;\n" +
+ " const float factor = 2048.0;\n" +
+ " float value = sin(dot(loc, vec2(12.9898, 78.233)));\n" +
+ " float residual = mod(dot(mod(loc, divide), vec2(0.9898, 0.233)), divide);\n" +
+ " float part2 = mod(value, divide);\n" +
+ " float part1 = value - part2;\n" +
+ " return fract(0.5453 * part1 + factor * (part2 + residual));\n" +
"}\n" +
"void main() {\n" +
" vec4 color = texture2D(tex_sampler_0, v_texcoord);\n" +
- " float dither = rand(v_texcoord);\n" +
+ " float dither = rand(v_texcoord + seed);\n" +
" vec3 xform = clamp((color.rgb - black) * scale, 0.0, 1.0);\n" +
" vec3 temp = clamp((color.rgb + stepsize - black) * scale, 0.0, 1.0);\n" +
" vec3 new_color = clamp(xform + (temp - xform) * (dither - 0.5), 0.0, 1.0);\n" +
@@ -68,6 +75,7 @@
public BlackWhiteFilter(String name) {
super(name);
+ mRandom = new Random(new Date().getTime());
}
@Override
@@ -100,10 +108,12 @@
private void updateParameters() {
float scale = (mBlack != mWhite) ? 1.0f / (mWhite - mBlack) : 2000f;
float stepsize = 1.0f / 255.0f;
-
mProgram.setHostValue("black", mBlack);
mProgram.setHostValue("scale", scale);
mProgram.setHostValue("stepsize", stepsize);
+
+ float seed[] = { mRandom.nextFloat(), mRandom.nextFloat() };
+ mProgram.setHostValue("seed", seed);
}
@Override
@@ -124,12 +134,6 @@
initProgram(context, inputFormat.getTarget());
}
- // Check if the frame size has changed
- if (inputFormat.getWidth() != mWidth || inputFormat.getHeight() != mHeight) {
- mWidth = inputFormat.getWidth();
- mHeight = inputFormat.getHeight();
- }
-
// Create output frame
Frame output = context.getFrameManager().newFrame(inputFormat);
diff --git a/media/mca/filterpacks/java/android/filterpacks/imageproc/DocumentaryFilter.java b/media/mca/filterpacks/java/android/filterpacks/imageproc/DocumentaryFilter.java
index 0144d4e..377e49d5 100644
--- a/media/mca/filterpacks/java/android/filterpacks/imageproc/DocumentaryFilter.java
+++ b/media/mca/filterpacks/java/android/filterpacks/imageproc/DocumentaryFilter.java
@@ -28,6 +28,7 @@
import android.filterfw.core.ShaderProgram;
import android.filterfw.format.ImageFormat;
+import java.util.Date;
import java.util.Random;
public class DocumentaryFilter extends Filter {
@@ -36,6 +37,7 @@
private int mTileSize = 640;
private Program mProgram;
+ private Random mRandom;
private int mWidth = 0;
private int mHeight = 0;
@@ -44,17 +46,24 @@
private final String mDocumentaryShader =
"precision mediump float;\n" +
"uniform sampler2D tex_sampler_0;\n" +
+ "uniform vec2 seed;\n" +
"uniform float stepsize;\n" +
"uniform float inv_max_dist;\n" +
"uniform vec2 center;\n" +
"varying vec2 v_texcoord;\n" +
"float rand(vec2 loc) {\n" +
- " return fract(sin(dot(loc, vec2(12.9898, 78.233))) * 43758.5453);\n" +
+ " const float divide = 0.00048828125;\n" +
+ " const float factor = 2048.0;\n" +
+ " float value = sin(dot(loc, vec2(12.9898, 78.233)));\n" +
+ " float residual = mod(dot(mod(loc, divide), vec2(0.9898, 0.233)), divide);\n" +
+ " float part2 = mod(value, divide);\n" +
+ " float part1 = value - part2;\n" +
+ " return fract(0.5453 * part1 + factor * (part2 + residual));\n" +
"}\n" +
"void main() {\n" +
// black white
" vec4 color = texture2D(tex_sampler_0, v_texcoord);\n" +
- " float dither = rand(v_texcoord);\n" +
+ " float dither = rand(v_texcoord + seed);\n" +
" vec3 xform = clamp(2.0 * color.rgb, 0.0, 1.0);\n" +
" vec3 temp = clamp(2.0 * (color.rgb + stepsize), 0.0, 1.0);\n" +
" vec3 new_color = clamp(xform + (temp - xform) * (dither - 0.5), 0.0, 1.0);\n" +
@@ -69,6 +78,8 @@
public DocumentaryFilter(String name) {
super(name);
+ Date date = new Date();
+ mRandom = new Random(new Date().getTime());
}
@Override
@@ -138,7 +149,9 @@
mProgram.setHostValue("center", center);
mProgram.setHostValue("inv_max_dist", 1.0f / max_dist);
mProgram.setHostValue("stepsize", 1.0f / 255.0f);
+
+ float seed[] = { mRandom.nextFloat(), mRandom.nextFloat() };
+ mProgram.setHostValue("seed", seed);
}
}
-
}
diff --git a/media/mca/filterpacks/java/android/filterpacks/imageproc/GrainFilter.java b/media/mca/filterpacks/java/android/filterpacks/imageproc/GrainFilter.java
index 31855460..f236856 100644
--- a/media/mca/filterpacks/java/android/filterpacks/imageproc/GrainFilter.java
+++ b/media/mca/filterpacks/java/android/filterpacks/imageproc/GrainFilter.java
@@ -30,6 +30,7 @@
import android.filterfw.geometry.Quad;
import android.filterfw.geometry.Point;
+import java.util.Date;
import java.util.Random;
public class GrainFilter extends Filter {
@@ -49,14 +50,20 @@
private int mHeight = 0;
private int mTarget = FrameFormat.TARGET_UNSPECIFIED;
- private Random mRandom = new Random();
+ private Random mRandom;
private final String mNoiseShader =
"precision mediump float;\n" +
"uniform vec2 seed;\n" +
"varying vec2 v_texcoord;\n" +
"float rand(vec2 loc) {\n" +
- " return fract(sin(dot(loc, vec2(12.9898, 78.233))) * 43758.5453);\n" +
+ " const float divide = 0.00048828125;\n" +
+ " const float factor = 2048.0;\n" +
+ " float value = sin(dot(loc, vec2(12.9898, 78.233)));\n" +
+ " float residual = mod(dot(mod(loc, divide), vec2(0.9898, 0.233)), divide);\n" +
+ " float part2 = mod(value, divide);\n" +
+ " float part1 = value - part2;\n" +
+ " return fract(0.5453 * part1 + factor * (part2 + residual));\n" +
"}\n" +
"void main() {\n" +
" gl_FragColor = vec4(rand(v_texcoord + seed), 0.0, 0.0, 1.0);\n" +
@@ -86,6 +93,7 @@
public GrainFilter(String name) {
super(name);
+ mRandom = new Random(new Date().getTime());
}
@Override
diff --git a/media/mca/filterpacks/java/android/filterpacks/imageproc/LomoishFilter.java b/media/mca/filterpacks/java/android/filterpacks/imageproc/LomoishFilter.java
index 0814ba5..22a2ec8 100644
--- a/media/mca/filterpacks/java/android/filterpacks/imageproc/LomoishFilter.java
+++ b/media/mca/filterpacks/java/android/filterpacks/imageproc/LomoishFilter.java
@@ -28,12 +28,16 @@
import android.filterfw.core.ShaderProgram;
import android.filterfw.format.ImageFormat;
+import java.util.Date;
+import java.util.Random;
+
public class LomoishFilter extends Filter {
@GenerateFieldPort(name = "tile_size", hasDefault = true)
private int mTileSize = 640;
private Program mProgram;
+ private Random mRandom;
private int mWidth = 0;
private int mHeight = 0;
@@ -42,6 +46,7 @@
private final String mLomoishShader =
"precision mediump float;\n" +
"uniform sampler2D tex_sampler_0;\n" +
+ "uniform vec2 seed;\n" +
"uniform float stepsizeX;\n" +
"uniform float stepsizeY;\n" +
"uniform float stepsize;\n" +
@@ -49,7 +54,13 @@
"uniform float inv_max_dist;\n" +
"varying vec2 v_texcoord;\n" +
"float rand(vec2 loc) {\n" +
- " return fract(sin(dot(loc, vec2(12.9898, 78.233))) * 43758.5453);\n" +
+ " const float divide = 0.00048828125;\n" +
+ " const float factor = 2048.0;\n" +
+ " float value = sin(dot(loc, vec2(12.9898, 78.233)));\n" +
+ " float residual = mod(dot(mod(loc, divide), vec2(0.9898, 0.233)), divide);\n" +
+ " float part2 = mod(value, divide);\n" +
+ " float part1 = value - part2;\n" +
+ " return fract(0.5453 * part1 + factor * (part2 + residual));\n" +
"}\n" +
"void main() {\n" +
// sharpen
@@ -96,7 +107,7 @@
" }\n" +
" c_color.b = s_color.b * 0.5 + 0.25;\n" +
// blackwhite
- " float dither = rand(v_texcoord);\n" +
+ " float dither = rand(v_texcoord + seed);\n" +
" vec3 xform = clamp((c_color.rgb - 0.15) * 1.53846, 0.0, 1.0);\n" +
" vec3 temp = clamp((color.rgb + stepsize - 0.15) * 1.53846, 0.0, 1.0);\n" +
" vec3 bw_color = clamp(xform + (temp - xform) * (dither - 0.5), 0.0, 1.0);\n" +
@@ -108,6 +119,7 @@
public LomoishFilter(String name) {
super(name);
+ mRandom = new Random(new Date().getTime());
}
@Override
@@ -149,6 +161,9 @@
mProgram.setHostValue("stepsize", 1.0f / 255.0f);
mProgram.setHostValue("stepsizeX", 1.0f / mWidth);
mProgram.setHostValue("stepsizeY", 1.0f / mHeight);
+
+ float seed[] = { mRandom.nextFloat(), mRandom.nextFloat() };
+ mProgram.setHostValue("seed", seed);
}
}
diff --git a/media/mca/filterpacks/java/android/filterpacks/imageproc/RedEyeFilter.java b/media/mca/filterpacks/java/android/filterpacks/imageproc/RedEyeFilter.java
index 5632a5e..3450ef1 100644
--- a/media/mca/filterpacks/java/android/filterpacks/imageproc/RedEyeFilter.java
+++ b/media/mca/filterpacks/java/android/filterpacks/imageproc/RedEyeFilter.java
@@ -115,14 +115,6 @@
}
@Override
- public void tearDown(FilterContext context) {
- if (mRedEyeBitmap != null) {
- mRedEyeBitmap.recycle();
- mRedEyeBitmap = null;
- }
- }
-
- @Override
public void process(FilterContext context) {
// Get input frame
Frame input = pullInput("image");
@@ -140,10 +132,7 @@
if (inputFormat.getWidth() != mWidth || inputFormat.getHeight() != mHeight) {
mWidth = inputFormat.getWidth();
mHeight = inputFormat.getHeight();
-
- createRedEyeBitmap();
}
-
createRedEyeFrame(context);
// Process
@@ -168,29 +157,26 @@
}
}
- private void createRedEyeBitmap() {
- if (mRedEyeBitmap != null) {
- mRedEyeBitmap.recycle();
- }
-
+ private void createRedEyeFrame(FilterContext context) {
int bitmapWidth = mWidth / 2;
int bitmapHeight = mHeight / 2;
- mRedEyeBitmap = Bitmap.createBitmap(bitmapWidth, bitmapHeight, Bitmap.Config.ARGB_8888);
- mCanvas.setBitmap(mRedEyeBitmap);
+ Bitmap redEyeBitmap = Bitmap.createBitmap(bitmapWidth, bitmapHeight, Bitmap.Config.ARGB_8888);
+ mCanvas.setBitmap(redEyeBitmap);
mPaint.setColor(Color.WHITE);
mRadius = Math.max(MIN_RADIUS, RADIUS_RATIO * Math.min(bitmapWidth, bitmapHeight));
- updateProgramParams();
- }
+ for (int i = 0; i < mCenters.length; i += 2) {
+ mCanvas.drawCircle(mCenters[i] * bitmapWidth, mCenters[i + 1] * bitmapHeight,
+ mRadius, mPaint);
+ }
- private void createRedEyeFrame(FilterContext context) {
- FrameFormat format = ImageFormat.create(mRedEyeBitmap.getWidth() ,
- mRedEyeBitmap.getHeight(),
+ FrameFormat format = ImageFormat.create(bitmapWidth, bitmapHeight,
ImageFormat.COLORSPACE_RGBA,
FrameFormat.TARGET_GPU);
mRedEyeFrame = context.getFrameManager().newFrame(format);
- mRedEyeFrame.setBitmap(mRedEyeBitmap);
+ mRedEyeFrame.setBitmap(redEyeBitmap);
+ redEyeBitmap.recycle();
}
private void updateProgramParams() {
@@ -199,13 +185,5 @@
if ( mCenters.length % 2 == 1) {
throw new RuntimeException("The size of center array must be even.");
}
-
- if (mRedEyeBitmap != null) {
- for (int i = 0; i < mCenters.length; i += 2) {
- mCanvas.drawCircle(mCenters[i] * mRedEyeBitmap.getWidth(),
- mCenters[i + 1] * mRedEyeBitmap.getHeight(),
- mRadius, mPaint);
- }
- }
}
}
diff --git a/media/mca/filterpacks/java/android/filterpacks/videosrc/SurfaceTextureTarget.java b/media/mca/filterpacks/java/android/filterpacks/videosrc/SurfaceTextureTarget.java
index 20e4b32..b023e42 100644
--- a/media/mca/filterpacks/java/android/filterpacks/videosrc/SurfaceTextureTarget.java
+++ b/media/mca/filterpacks/java/android/filterpacks/videosrc/SurfaceTextureTarget.java
@@ -110,7 +110,7 @@
}
@Override
- public void setupPorts() {
+ public synchronized void setupPorts() {
// Make sure we have a SurfaceView
if (mSurfaceTexture == null) {
throw new RuntimeException("Null SurfaceTexture passed to SurfaceTextureTarget");
@@ -158,7 +158,7 @@
}
@Override
- public void open(FilterContext context) {
+ public synchronized void open(FilterContext context) {
// Set up SurfaceTexture internals
mSurfaceId = context.getGLEnvironment().registerSurfaceTexture(
mSurfaceTexture, mScreenWidth, mScreenHeight);
@@ -169,17 +169,42 @@
@Override
- public void close(FilterContext context) {
+ public synchronized void close(FilterContext context) {
if (mSurfaceId > 0) {
context.getGLEnvironment().unregisterSurfaceId(mSurfaceId);
+ mSurfaceId = -1;
+ // Once the surface is unregistered, remove the surfacetexture reference.
+ // The surfaceId could not have been valid without a valid surfacetexture.
+ mSurfaceTexture = null;
}
}
+ // This should be called from the client side when the surfacetexture is no longer
+ // valid. e.g. from onPause() in the application using the filter graph.
+ public synchronized void disconnect(FilterContext context) {
+ if (mLogVerbose) Log.v(TAG, "disconnect");
+ if (mSurfaceTexture == null) {
+ Log.d(TAG, "SurfaceTexture is already null. Nothing to disconnect.");
+ return;
+ }
+ mSurfaceTexture = null;
+ // Make sure we unregister the surface as well if a surface was registered.
+ // There can be a situation where the surface was not registered but the
+ // surfacetexture was valid. For example, the disconnect can be called before
+ // the filter was opened. Hence, the surfaceId may not be a valid one here,
+ // and need to check for its validity.
+ if (mSurfaceId > 0) {
+ context.getGLEnvironment().unregisterSurfaceId(mSurfaceId);
+ mSurfaceId = -1;
+ }
+ }
@Override
- public void process(FilterContext context) {
- if (mLogVerbose) Log.v(TAG, "Starting frame processing");
-
+ public synchronized void process(FilterContext context) {
+ // Surface is not registered. Nothing to render into.
+ if (mSurfaceId <= 0) {
+ return;
+ }
GLEnvironment glEnv = context.getGLEnvironment();
// Get input frame
@@ -197,8 +222,6 @@
// See if we need to copy to GPU
Frame gpuFrame = null;
- if (mLogVerbose) Log.v("SurfaceTextureTarget", "Got input format: " + input.getFormat());
-
int target = input.getFormat().getTarget();
if (target != FrameFormat.TARGET_GPU) {
gpuFrame = context.getFrameManager().duplicateFrameToTarget(input,
diff --git a/packages/SystemUI/AndroidManifest.xml b/packages/SystemUI/AndroidManifest.xml
index 9d3a942..0038d13 100644
--- a/packages/SystemUI/AndroidManifest.xml
+++ b/packages/SystemUI/AndroidManifest.xml
@@ -161,18 +161,19 @@
<!-- started from ... somewhere -->
<activity
- android:name=".Nyandroid"
+ android:name=".BeanBag"
android:exported="true"
- android:label="Nyandroid"
- android:icon="@drawable/nyandroid04"
- android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"
+ android:label="BeanBag"
+ android:icon="@drawable/redbeandroid"
+ android:theme="@android:style/Theme.Wallpaper.NoTitleBar.Fullscreen"
android:hardwareAccelerated="true"
android:launchMode="singleInstance"
android:excludeFromRecents="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
-<!-- <category android:name="android.intent.category.DREAM" />-->
+ <category android:name="com.android.internal.category.PLATLOGO" />
+<!-- <category android:name="android.intent.category.LAUNCHER" />-->
</intent-filter>
</activity>
</application>
diff --git a/packages/SystemUI/res/drawable-nodpi/jandycane.png b/packages/SystemUI/res/drawable-nodpi/jandycane.png
new file mode 100644
index 0000000..278cfec
--- /dev/null
+++ b/packages/SystemUI/res/drawable-nodpi/jandycane.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-nodpi/nyandroid00.png b/packages/SystemUI/res/drawable-nodpi/nyandroid00.png
deleted file mode 100644
index 6cea873..0000000
--- a/packages/SystemUI/res/drawable-nodpi/nyandroid00.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-nodpi/nyandroid01.png b/packages/SystemUI/res/drawable-nodpi/nyandroid01.png
deleted file mode 100644
index 82b8a21..0000000
--- a/packages/SystemUI/res/drawable-nodpi/nyandroid01.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-nodpi/nyandroid02.png b/packages/SystemUI/res/drawable-nodpi/nyandroid02.png
deleted file mode 100644
index fde0033..0000000
--- a/packages/SystemUI/res/drawable-nodpi/nyandroid02.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-nodpi/nyandroid03.png b/packages/SystemUI/res/drawable-nodpi/nyandroid03.png
deleted file mode 100644
index 54c5f46..0000000
--- a/packages/SystemUI/res/drawable-nodpi/nyandroid03.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-nodpi/nyandroid04.png b/packages/SystemUI/res/drawable-nodpi/nyandroid04.png
deleted file mode 100644
index 35e5ab5..0000000
--- a/packages/SystemUI/res/drawable-nodpi/nyandroid04.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-nodpi/nyandroid05.png b/packages/SystemUI/res/drawable-nodpi/nyandroid05.png
deleted file mode 100644
index d3eaace..0000000
--- a/packages/SystemUI/res/drawable-nodpi/nyandroid05.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-nodpi/nyandroid06.png b/packages/SystemUI/res/drawable-nodpi/nyandroid06.png
deleted file mode 100644
index 0e0d3b1..0000000
--- a/packages/SystemUI/res/drawable-nodpi/nyandroid06.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-nodpi/nyandroid07.png b/packages/SystemUI/res/drawable-nodpi/nyandroid07.png
deleted file mode 100644
index edb0b17..0000000
--- a/packages/SystemUI/res/drawable-nodpi/nyandroid07.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-nodpi/nyandroid08.png b/packages/SystemUI/res/drawable-nodpi/nyandroid08.png
deleted file mode 100644
index 10fc4f6..0000000
--- a/packages/SystemUI/res/drawable-nodpi/nyandroid08.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-nodpi/nyandroid09.png b/packages/SystemUI/res/drawable-nodpi/nyandroid09.png
deleted file mode 100644
index 57ade54..0000000
--- a/packages/SystemUI/res/drawable-nodpi/nyandroid09.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-nodpi/nyandroid10.png b/packages/SystemUI/res/drawable-nodpi/nyandroid10.png
deleted file mode 100644
index 36feb2f..0000000
--- a/packages/SystemUI/res/drawable-nodpi/nyandroid10.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-nodpi/nyandroid11.png b/packages/SystemUI/res/drawable-nodpi/nyandroid11.png
deleted file mode 100644
index 125935b..0000000
--- a/packages/SystemUI/res/drawable-nodpi/nyandroid11.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-nodpi/redbean0.png b/packages/SystemUI/res/drawable-nodpi/redbean0.png
new file mode 100644
index 0000000..b088939
--- /dev/null
+++ b/packages/SystemUI/res/drawable-nodpi/redbean0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-nodpi/redbean1.png b/packages/SystemUI/res/drawable-nodpi/redbean1.png
new file mode 100644
index 0000000..8fc8d9d
--- /dev/null
+++ b/packages/SystemUI/res/drawable-nodpi/redbean1.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-nodpi/redbean2.png b/packages/SystemUI/res/drawable-nodpi/redbean2.png
new file mode 100644
index 0000000..ef11ca8
--- /dev/null
+++ b/packages/SystemUI/res/drawable-nodpi/redbean2.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-nodpi/redbeandroid.png b/packages/SystemUI/res/drawable-nodpi/redbeandroid.png
new file mode 100644
index 0000000..9aa3f82
--- /dev/null
+++ b/packages/SystemUI/res/drawable-nodpi/redbeandroid.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-nodpi/star0.png b/packages/SystemUI/res/drawable-nodpi/star0.png
deleted file mode 100644
index f2ca960..0000000
--- a/packages/SystemUI/res/drawable-nodpi/star0.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-nodpi/star1.png b/packages/SystemUI/res/drawable-nodpi/star1.png
deleted file mode 100644
index 69ef4da..0000000
--- a/packages/SystemUI/res/drawable-nodpi/star1.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-nodpi/star2.png b/packages/SystemUI/res/drawable-nodpi/star2.png
deleted file mode 100644
index b95968a..0000000
--- a/packages/SystemUI/res/drawable-nodpi/star2.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-nodpi/star3.png b/packages/SystemUI/res/drawable-nodpi/star3.png
deleted file mode 100644
index ad0f589..0000000
--- a/packages/SystemUI/res/drawable-nodpi/star3.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-nodpi/star4.png b/packages/SystemUI/res/drawable-nodpi/star4.png
deleted file mode 100644
index 934c45b..0000000
--- a/packages/SystemUI/res/drawable-nodpi/star4.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-nodpi/star5.png b/packages/SystemUI/res/drawable-nodpi/star5.png
deleted file mode 100644
index 46a4435..0000000
--- a/packages/SystemUI/res/drawable-nodpi/star5.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable/nyandroid_anim.xml b/packages/SystemUI/res/drawable/nyandroid_anim.xml
deleted file mode 100644
index 855a0c2..0000000
--- a/packages/SystemUI/res/drawable/nyandroid_anim.xml
+++ /dev/null
@@ -1,32 +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.
--->
-<animation-list
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:oneshot="false">
- <item android:drawable="@drawable/nyandroid00" android:duration="80" />
- <item android:drawable="@drawable/nyandroid01" android:duration="80" />
- <item android:drawable="@drawable/nyandroid02" android:duration="80" />
- <item android:drawable="@drawable/nyandroid03" android:duration="80" />
- <item android:drawable="@drawable/nyandroid04" android:duration="80" />
- <item android:drawable="@drawable/nyandroid05" android:duration="80" />
- <item android:drawable="@drawable/nyandroid06" android:duration="80" />
- <item android:drawable="@drawable/nyandroid07" android:duration="80" />
- <item android:drawable="@drawable/nyandroid08" android:duration="80" />
- <item android:drawable="@drawable/nyandroid09" android:duration="80" />
- <item android:drawable="@drawable/nyandroid10" android:duration="80" />
- <item android:drawable="@drawable/nyandroid11" android:duration="80" />
-</animation-list>
-
diff --git a/packages/SystemUI/res/drawable/star_anim.xml b/packages/SystemUI/res/drawable/star_anim.xml
deleted file mode 100644
index d7f2d8f..0000000
--- a/packages/SystemUI/res/drawable/star_anim.xml
+++ /dev/null
@@ -1,26 +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.
--->
-<animation-list
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:oneshot="false">
- <item android:drawable="@drawable/star0" android:duration="200" />
- <item android:drawable="@drawable/star1" android:duration="200" />
- <item android:drawable="@drawable/star2" android:duration="200" />
- <item android:drawable="@drawable/star3" android:duration="200" />
- <item android:drawable="@drawable/star4" android:duration="200" />
- <item android:drawable="@drawable/star5" android:duration="200" />
-</animation-list>
-
diff --git a/packages/SystemUI/res/layout-land/status_bar_recent_panel.xml b/packages/SystemUI/res/layout-land/status_bar_recent_panel.xml
index ec2abe0..869b164 100644
--- a/packages/SystemUI/res/layout-land/status_bar_recent_panel.xml
+++ b/packages/SystemUI/res/layout-land/status_bar_recent_panel.xml
@@ -27,6 +27,12 @@
systemui:recentItemLayout="@layout/status_bar_recent_item"
>
+ <ImageView
+ android:id="@+id/recents_transition_placeholder_icon"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:visibility="invisible" />
+
<FrameLayout
android:id="@+id/recents_bg_protect"
android:background="@drawable/status_bar_recents_background"
diff --git a/packages/SystemUI/res/layout-port/status_bar_recent_panel.xml b/packages/SystemUI/res/layout-port/status_bar_recent_panel.xml
index 216dcb0..fc9fcf4 100644
--- a/packages/SystemUI/res/layout-port/status_bar_recent_panel.xml
+++ b/packages/SystemUI/res/layout-port/status_bar_recent_panel.xml
@@ -27,6 +27,12 @@
systemui:recentItemLayout="@layout/status_bar_recent_item"
>
+ <ImageView
+ android:id="@+id/recents_transition_placeholder_icon"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:visibility="invisible" />
+
<FrameLayout
android:id="@+id/recents_bg_protect"
android:background="@drawable/status_bar_recents_background"
diff --git a/packages/SystemUI/res/layout/status_bar_notification_row.xml b/packages/SystemUI/res/layout/status_bar_notification_row.xml
index e69cd8a..7491939 100644
--- a/packages/SystemUI/res/layout/status_bar_notification_row.xml
+++ b/packages/SystemUI/res/layout/status_bar_notification_row.xml
@@ -1,7 +1,6 @@
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:background="@*android:drawable/notification_bg"
>
<View
@@ -34,7 +33,6 @@
>
<com.android.internal.widget.SizeAdaptiveLayout android:id="@+id/adaptive"
- android:background="@*android:drawable/notification_bg"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
diff --git a/packages/SystemUI/res/layout/system_bar_recent_panel.xml b/packages/SystemUI/res/layout/system_bar_recent_panel.xml
index c2b9e51..d5745c8 100644
--- a/packages/SystemUI/res/layout/system_bar_recent_panel.xml
+++ b/packages/SystemUI/res/layout/system_bar_recent_panel.xml
@@ -39,6 +39,12 @@
android:clipToPadding="false"
android:clipChildren="false">
+ <ImageView
+ android:id="@+id/recents_transition_placeholder_icon"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:visibility="invisible" />
+
<com.android.systemui.recent.RecentsVerticalScrollView android:id="@+id/recents_container"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
diff --git a/packages/SystemUI/res/values-af/strings.xml b/packages/SystemUI/res/values-af/strings.xml
index 47ac16d..ae520f9 100644
--- a/packages/SystemUI/res/values-af/strings.xml
+++ b/packages/SystemUI/res/values-af/strings.xml
@@ -144,4 +144,10 @@
<skip />
<!-- no translation found for notifications_off_text (2529001315769385273) -->
<skip />
+ <!-- no translation found for accessibility_rotation_lock_off (4062780228931590069) -->
+ <skip />
+ <!-- no translation found for accessibility_rotation_lock_on_landscape (6731197337665366273) -->
+ <skip />
+ <!-- no translation found for accessibility_rotation_lock_on_portrait (5809367521644012115) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-am/strings.xml b/packages/SystemUI/res/values-am/strings.xml
index ece78dc..d7f4287 100644
--- a/packages/SystemUI/res/values-am/strings.xml
+++ b/packages/SystemUI/res/values-am/strings.xml
@@ -144,4 +144,10 @@
<skip />
<!-- no translation found for notifications_off_text (2529001315769385273) -->
<skip />
+ <!-- no translation found for accessibility_rotation_lock_off (4062780228931590069) -->
+ <skip />
+ <!-- no translation found for accessibility_rotation_lock_on_landscape (6731197337665366273) -->
+ <skip />
+ <!-- no translation found for accessibility_rotation_lock_on_portrait (5809367521644012115) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml
index c412d58..b9144a2 100644
--- a/packages/SystemUI/res/values-ar/strings.xml
+++ b/packages/SystemUI/res/values-ar/strings.xml
@@ -140,8 +140,12 @@
<string name="accessibility_clear_all" msgid="5235938559247164925">"محو جميع الإشعارات."</string>
<string name="dreams_dock_launcher" msgid="3541196417659166245">"تنشيط شاشة التوقف"</string>
<string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"معلومات التطبيق"</string>
- <!-- no translation found for notifications_off_title (8936620513608443224) -->
+ <string name="notifications_off_title" msgid="8936620513608443224">"التنبيهات معطّلة"</string>
+ <string name="notifications_off_text" msgid="2529001315769385273">"انقر هنا لإعادة تشغيل الإشعارات."</string>
+ <!-- no translation found for accessibility_rotation_lock_off (4062780228931590069) -->
<skip />
- <!-- no translation found for notifications_off_text (2529001315769385273) -->
+ <!-- no translation found for accessibility_rotation_lock_on_landscape (6731197337665366273) -->
+ <skip />
+ <!-- no translation found for accessibility_rotation_lock_on_portrait (5809367521644012115) -->
<skip />
</resources>
diff --git a/packages/SystemUI/res/values-be/strings.xml b/packages/SystemUI/res/values-be/strings.xml
index 859df39..525137f 100644
--- a/packages/SystemUI/res/values-be/strings.xml
+++ b/packages/SystemUI/res/values-be/strings.xml
@@ -146,4 +146,10 @@
<skip />
<!-- no translation found for notifications_off_text (2529001315769385273) -->
<skip />
+ <!-- no translation found for accessibility_rotation_lock_off (4062780228931590069) -->
+ <skip />
+ <!-- no translation found for accessibility_rotation_lock_on_landscape (6731197337665366273) -->
+ <skip />
+ <!-- no translation found for accessibility_rotation_lock_on_portrait (5809367521644012115) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-bg/strings.xml b/packages/SystemUI/res/values-bg/strings.xml
index ae1158d..52ee9e1 100644
--- a/packages/SystemUI/res/values-bg/strings.xml
+++ b/packages/SystemUI/res/values-bg/strings.xml
@@ -144,4 +144,10 @@
<skip />
<!-- no translation found for notifications_off_text (2529001315769385273) -->
<skip />
+ <!-- no translation found for accessibility_rotation_lock_off (4062780228931590069) -->
+ <skip />
+ <!-- no translation found for accessibility_rotation_lock_on_landscape (6731197337665366273) -->
+ <skip />
+ <!-- no translation found for accessibility_rotation_lock_on_portrait (5809367521644012115) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml
index 8adba08..5a2c9cd 100644
--- a/packages/SystemUI/res/values-ca/strings.xml
+++ b/packages/SystemUI/res/values-ca/strings.xml
@@ -142,8 +142,9 @@
<string name="accessibility_clear_all" msgid="5235938559247164925">"Esborra totes les notificacions."</string>
<string name="dreams_dock_launcher" msgid="3541196417659166245">"Activa el protector de pantalla"</string>
<string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Informació de l\'aplicació"</string>
- <!-- no translation found for notifications_off_title (8936620513608443224) -->
- <skip />
- <!-- no translation found for notifications_off_text (2529001315769385273) -->
- <skip />
+ <string name="notifications_off_title" msgid="8936620513608443224">"Notificacions desactivades"</string>
+ <string name="notifications_off_text" msgid="2529001315769385273">"Pica aquí per tornar a activar les notificacions."</string>
+ <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"La pantalla girarà automàticament."</string>
+ <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"La pantalla està bloquejada en orientació horitzontal."</string>
+ <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"La pantalla està bloquejada en orientació vertical."</string>
</resources>
diff --git a/packages/SystemUI/res/values-cs/strings.xml b/packages/SystemUI/res/values-cs/strings.xml
index 601869d..1647358 100644
--- a/packages/SystemUI/res/values-cs/strings.xml
+++ b/packages/SystemUI/res/values-cs/strings.xml
@@ -146,4 +146,10 @@
<skip />
<!-- no translation found for notifications_off_text (2529001315769385273) -->
<skip />
+ <!-- no translation found for accessibility_rotation_lock_off (4062780228931590069) -->
+ <skip />
+ <!-- no translation found for accessibility_rotation_lock_on_landscape (6731197337665366273) -->
+ <skip />
+ <!-- no translation found for accessibility_rotation_lock_on_portrait (5809367521644012115) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml
index 32ae3a9..ab68e80 100644
--- a/packages/SystemUI/res/values-da/strings.xml
+++ b/packages/SystemUI/res/values-da/strings.xml
@@ -144,4 +144,7 @@
<skip />
<!-- no translation found for notifications_off_text (2529001315769385273) -->
<skip />
+ <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Skærmen roterer automatisk."</string>
+ <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Skærmen er nu låst i liggende retning."</string>
+ <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Skærmen er nu låst i stående retning."</string>
</resources>
diff --git a/packages/SystemUI/res/values-de/strings.xml b/packages/SystemUI/res/values-de/strings.xml
index a365ce2..2b62397 100644
--- a/packages/SystemUI/res/values-de/strings.xml
+++ b/packages/SystemUI/res/values-de/strings.xml
@@ -146,4 +146,7 @@
<skip />
<!-- no translation found for notifications_off_text (2529001315769385273) -->
<skip />
+ <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Bildschirm wird automatisch gedreht."</string>
+ <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Bildschirm bleibt im Querformat."</string>
+ <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Bildschirm bleibt im Hochformat."</string>
</resources>
diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml
index 72e8629..0b87777 100644
--- a/packages/SystemUI/res/values-el/strings.xml
+++ b/packages/SystemUI/res/values-el/strings.xml
@@ -142,8 +142,9 @@
<string name="accessibility_clear_all" msgid="5235938559247164925">"Εκκαθάριση όλων των ειδοποιήσεων."</string>
<string name="dreams_dock_launcher" msgid="3541196417659166245">"Ενεργοποίηση προφύλαξης οθόνης"</string>
<string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Πληροφορίες εφαρμογής"</string>
- <!-- no translation found for notifications_off_title (8936620513608443224) -->
- <skip />
- <!-- no translation found for notifications_off_text (2529001315769385273) -->
- <skip />
+ <string name="notifications_off_title" msgid="8936620513608443224">"Ειδοποιήσεις ανενεργές"</string>
+ <string name="notifications_off_text" msgid="2529001315769385273">"Πατήστε εδώ για να ενεργοποιήσετε ξανά τις ειδοποιήσεις."</string>
+ <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Θα γίνεται αυτόματη περιστροφή της οθόνης."</string>
+ <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Η οθόνη έχει κλειδωθεί σε οριζόντιο προσανατολισμό."</string>
+ <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Η οθόνη έχει κλειδωθεί σε κατακόρυφο προσανατολισμό."</string>
</resources>
diff --git a/packages/SystemUI/res/values-en-rGB/strings.xml b/packages/SystemUI/res/values-en-rGB/strings.xml
index 9701ab8..6b40300 100644
--- a/packages/SystemUI/res/values-en-rGB/strings.xml
+++ b/packages/SystemUI/res/values-en-rGB/strings.xml
@@ -140,8 +140,9 @@
<string name="accessibility_clear_all" msgid="5235938559247164925">"Clear all notifications."</string>
<string name="dreams_dock_launcher" msgid="3541196417659166245">"Activate screen saver"</string>
<string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"App info"</string>
- <!-- no translation found for notifications_off_title (8936620513608443224) -->
- <skip />
- <!-- no translation found for notifications_off_text (2529001315769385273) -->
- <skip />
+ <string name="notifications_off_title" msgid="8936620513608443224">"Notifications off"</string>
+ <string name="notifications_off_text" msgid="2529001315769385273">"Tap here to turn notifications back on."</string>
+ <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Screen will rotate automatically."</string>
+ <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Screen is locked in landscape orientation."</string>
+ <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Screen is locked in portrait orientation."</string>
</resources>
diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml
index 3bc4077..b103d58 100644
--- a/packages/SystemUI/res/values-es-rUS/strings.xml
+++ b/packages/SystemUI/res/values-es-rUS/strings.xml
@@ -146,4 +146,10 @@
<skip />
<!-- no translation found for notifications_off_text (2529001315769385273) -->
<skip />
+ <!-- no translation found for accessibility_rotation_lock_off (4062780228931590069) -->
+ <skip />
+ <!-- no translation found for accessibility_rotation_lock_on_landscape (6731197337665366273) -->
+ <skip />
+ <!-- no translation found for accessibility_rotation_lock_on_portrait (5809367521644012115) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-es/strings.xml b/packages/SystemUI/res/values-es/strings.xml
index c6e2604..a11194e 100644
--- a/packages/SystemUI/res/values-es/strings.xml
+++ b/packages/SystemUI/res/values-es/strings.xml
@@ -140,8 +140,9 @@
<string name="accessibility_clear_all" msgid="5235938559247164925">"Borrar todas las notificaciones"</string>
<string name="dreams_dock_launcher" msgid="3541196417659166245">"Activar salvapantallas"</string>
<string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Información de la aplicación"</string>
- <!-- no translation found for notifications_off_title (8936620513608443224) -->
- <skip />
- <!-- no translation found for notifications_off_text (2529001315769385273) -->
- <skip />
+ <string name="notifications_off_title" msgid="8936620513608443224">"Notificaciones desactivadas"</string>
+ <string name="notifications_off_text" msgid="2529001315769385273">"Toca aquí para volver a activar las notificaciones."</string>
+ <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"La pantalla girará automáticamente."</string>
+ <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"La pantalla está bloqueada en modo horizontal."</string>
+ <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"La pantalla está bloqueada en modo vertical."</string>
</resources>
diff --git a/packages/SystemUI/res/values-et/strings.xml b/packages/SystemUI/res/values-et/strings.xml
index 55ebbad..1ad5358 100644
--- a/packages/SystemUI/res/values-et/strings.xml
+++ b/packages/SystemUI/res/values-et/strings.xml
@@ -144,4 +144,10 @@
<skip />
<!-- no translation found for notifications_off_text (2529001315769385273) -->
<skip />
+ <!-- no translation found for accessibility_rotation_lock_off (4062780228931590069) -->
+ <skip />
+ <!-- no translation found for accessibility_rotation_lock_on_landscape (6731197337665366273) -->
+ <skip />
+ <!-- no translation found for accessibility_rotation_lock_on_portrait (5809367521644012115) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml
index c764821..8097367 100644
--- a/packages/SystemUI/res/values-fa/strings.xml
+++ b/packages/SystemUI/res/values-fa/strings.xml
@@ -140,8 +140,12 @@
<string name="accessibility_clear_all" msgid="5235938559247164925">"پاک کردن تمام اعلانها"</string>
<string name="dreams_dock_launcher" msgid="3541196417659166245">"فعال کردن محافظ صفحه نمایش"</string>
<string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"اطلاعات برنامه"</string>
- <!-- no translation found for notifications_off_title (8936620513608443224) -->
+ <string name="notifications_off_title" msgid="8936620513608443224">"اعلانها خاموش"</string>
+ <string name="notifications_off_text" msgid="2529001315769385273">"برای روشن کردن مجدد اعلانها، اینجا را ضربه بزنید."</string>
+ <!-- no translation found for accessibility_rotation_lock_off (4062780228931590069) -->
<skip />
- <!-- no translation found for notifications_off_text (2529001315769385273) -->
+ <!-- no translation found for accessibility_rotation_lock_on_landscape (6731197337665366273) -->
+ <skip />
+ <!-- no translation found for accessibility_rotation_lock_on_portrait (5809367521644012115) -->
<skip />
</resources>
diff --git a/packages/SystemUI/res/values-fi/strings.xml b/packages/SystemUI/res/values-fi/strings.xml
index a68675c..6345555 100644
--- a/packages/SystemUI/res/values-fi/strings.xml
+++ b/packages/SystemUI/res/values-fi/strings.xml
@@ -144,4 +144,10 @@
<skip />
<!-- no translation found for notifications_off_text (2529001315769385273) -->
<skip />
+ <!-- no translation found for accessibility_rotation_lock_off (4062780228931590069) -->
+ <skip />
+ <!-- no translation found for accessibility_rotation_lock_on_landscape (6731197337665366273) -->
+ <skip />
+ <!-- no translation found for accessibility_rotation_lock_on_portrait (5809367521644012115) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-fr/strings.xml b/packages/SystemUI/res/values-fr/strings.xml
index 52df763..4b3e1d4 100644
--- a/packages/SystemUI/res/values-fr/strings.xml
+++ b/packages/SystemUI/res/values-fr/strings.xml
@@ -146,4 +146,7 @@
<skip />
<!-- no translation found for notifications_off_text (2529001315769385273) -->
<skip />
+ <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"L\'écran pivote automatiquement."</string>
+ <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"L\'écran est verrouillé en mode paysage."</string>
+ <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"L\'écran est verrouillé en mode portrait."</string>
</resources>
diff --git a/packages/SystemUI/res/values-hi/strings.xml b/packages/SystemUI/res/values-hi/strings.xml
index 9220a49..2e5ae61 100644
--- a/packages/SystemUI/res/values-hi/strings.xml
+++ b/packages/SystemUI/res/values-hi/strings.xml
@@ -144,4 +144,10 @@
<skip />
<!-- no translation found for notifications_off_text (2529001315769385273) -->
<skip />
+ <!-- no translation found for accessibility_rotation_lock_off (4062780228931590069) -->
+ <skip />
+ <!-- no translation found for accessibility_rotation_lock_on_landscape (6731197337665366273) -->
+ <skip />
+ <!-- no translation found for accessibility_rotation_lock_on_portrait (5809367521644012115) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-hr/strings.xml b/packages/SystemUI/res/values-hr/strings.xml
index 2c6c00a..df155dd 100644
--- a/packages/SystemUI/res/values-hr/strings.xml
+++ b/packages/SystemUI/res/values-hr/strings.xml
@@ -144,4 +144,10 @@
<skip />
<!-- no translation found for notifications_off_text (2529001315769385273) -->
<skip />
+ <!-- no translation found for accessibility_rotation_lock_off (4062780228931590069) -->
+ <skip />
+ <!-- no translation found for accessibility_rotation_lock_on_landscape (6731197337665366273) -->
+ <skip />
+ <!-- no translation found for accessibility_rotation_lock_on_portrait (5809367521644012115) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-hu/strings.xml b/packages/SystemUI/res/values-hu/strings.xml
index d1ac63a5..6526c63 100644
--- a/packages/SystemUI/res/values-hu/strings.xml
+++ b/packages/SystemUI/res/values-hu/strings.xml
@@ -144,4 +144,10 @@
<skip />
<!-- no translation found for notifications_off_text (2529001315769385273) -->
<skip />
+ <!-- no translation found for accessibility_rotation_lock_off (4062780228931590069) -->
+ <skip />
+ <!-- no translation found for accessibility_rotation_lock_on_landscape (6731197337665366273) -->
+ <skip />
+ <!-- no translation found for accessibility_rotation_lock_on_portrait (5809367521644012115) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-in/strings.xml b/packages/SystemUI/res/values-in/strings.xml
index 981782d..4571066 100644
--- a/packages/SystemUI/res/values-in/strings.xml
+++ b/packages/SystemUI/res/values-in/strings.xml
@@ -144,4 +144,10 @@
<skip />
<!-- no translation found for notifications_off_text (2529001315769385273) -->
<skip />
+ <!-- no translation found for accessibility_rotation_lock_off (4062780228931590069) -->
+ <skip />
+ <!-- no translation found for accessibility_rotation_lock_on_landscape (6731197337665366273) -->
+ <skip />
+ <!-- no translation found for accessibility_rotation_lock_on_portrait (5809367521644012115) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-it/strings.xml b/packages/SystemUI/res/values-it/strings.xml
index cac4e73..432d984 100644
--- a/packages/SystemUI/res/values-it/strings.xml
+++ b/packages/SystemUI/res/values-it/strings.xml
@@ -142,8 +142,9 @@
<string name="accessibility_clear_all" msgid="5235938559247164925">"Cancella tutte le notifiche."</string>
<string name="dreams_dock_launcher" msgid="3541196417659166245">"Attiva screensaver"</string>
<string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Informazioni applicazione"</string>
- <!-- no translation found for notifications_off_title (8936620513608443224) -->
- <skip />
- <!-- no translation found for notifications_off_text (2529001315769385273) -->
- <skip />
+ <string name="notifications_off_title" msgid="8936620513608443224">"Notifiche disattivate"</string>
+ <string name="notifications_off_text" msgid="2529001315769385273">"Tocca qui per riattivare le notifiche."</string>
+ <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Lo schermo ruoterà automaticamente."</string>
+ <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Lo schermo è bloccato in orientamento orizzontale."</string>
+ <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Lo schermo è bloccato in orientamento verticale."</string>
</resources>
diff --git a/packages/SystemUI/res/values-iw/strings.xml b/packages/SystemUI/res/values-iw/strings.xml
index eeca907..bdc84b6 100644
--- a/packages/SystemUI/res/values-iw/strings.xml
+++ b/packages/SystemUI/res/values-iw/strings.xml
@@ -140,8 +140,9 @@
<string name="accessibility_clear_all" msgid="5235938559247164925">"נקה את כל ההתראות."</string>
<string name="dreams_dock_launcher" msgid="3541196417659166245">"הפעלת שומר מסך"</string>
<string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"פרטי יישום"</string>
- <!-- no translation found for notifications_off_title (8936620513608443224) -->
- <skip />
- <!-- no translation found for notifications_off_text (2529001315769385273) -->
- <skip />
+ <string name="notifications_off_title" msgid="8936620513608443224">"מצב התראות כבוי"</string>
+ <string name="notifications_off_text" msgid="2529001315769385273">"הקש כאן כדי להפעיל מחדש את ההתראות."</string>
+ <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"המסך יסתובב באופן אוטומטי."</string>
+ <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"המסך נעול כעת לרוחב."</string>
+ <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"המסך נעול כעת לאורך."</string>
</resources>
diff --git a/packages/SystemUI/res/values-ja/strings.xml b/packages/SystemUI/res/values-ja/strings.xml
index 2b1daf8..3912b539 100644
--- a/packages/SystemUI/res/values-ja/strings.xml
+++ b/packages/SystemUI/res/values-ja/strings.xml
@@ -146,4 +146,10 @@
<skip />
<!-- no translation found for notifications_off_text (2529001315769385273) -->
<skip />
+ <!-- no translation found for accessibility_rotation_lock_off (4062780228931590069) -->
+ <skip />
+ <!-- no translation found for accessibility_rotation_lock_on_landscape (6731197337665366273) -->
+ <skip />
+ <!-- no translation found for accessibility_rotation_lock_on_portrait (5809367521644012115) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-ko/strings.xml b/packages/SystemUI/res/values-ko/strings.xml
index 4cd5778..438cc0d 100644
--- a/packages/SystemUI/res/values-ko/strings.xml
+++ b/packages/SystemUI/res/values-ko/strings.xml
@@ -144,4 +144,10 @@
<skip />
<!-- no translation found for notifications_off_text (2529001315769385273) -->
<skip />
+ <!-- no translation found for accessibility_rotation_lock_off (4062780228931590069) -->
+ <skip />
+ <!-- no translation found for accessibility_rotation_lock_on_landscape (6731197337665366273) -->
+ <skip />
+ <!-- no translation found for accessibility_rotation_lock_on_portrait (5809367521644012115) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-lt/strings.xml b/packages/SystemUI/res/values-lt/strings.xml
index 54ed00c..6810d7f 100644
--- a/packages/SystemUI/res/values-lt/strings.xml
+++ b/packages/SystemUI/res/values-lt/strings.xml
@@ -144,4 +144,10 @@
<skip />
<!-- no translation found for notifications_off_text (2529001315769385273) -->
<skip />
+ <!-- no translation found for accessibility_rotation_lock_off (4062780228931590069) -->
+ <skip />
+ <!-- no translation found for accessibility_rotation_lock_on_landscape (6731197337665366273) -->
+ <skip />
+ <!-- no translation found for accessibility_rotation_lock_on_portrait (5809367521644012115) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-lv/strings.xml b/packages/SystemUI/res/values-lv/strings.xml
index afedc72..bf59477 100644
--- a/packages/SystemUI/res/values-lv/strings.xml
+++ b/packages/SystemUI/res/values-lv/strings.xml
@@ -144,4 +144,10 @@
<skip />
<!-- no translation found for notifications_off_text (2529001315769385273) -->
<skip />
+ <!-- no translation found for accessibility_rotation_lock_off (4062780228931590069) -->
+ <skip />
+ <!-- no translation found for accessibility_rotation_lock_on_landscape (6731197337665366273) -->
+ <skip />
+ <!-- no translation found for accessibility_rotation_lock_on_portrait (5809367521644012115) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-ms/strings.xml b/packages/SystemUI/res/values-ms/strings.xml
index d956d4d..b77df60 100644
--- a/packages/SystemUI/res/values-ms/strings.xml
+++ b/packages/SystemUI/res/values-ms/strings.xml
@@ -144,4 +144,10 @@
<skip />
<!-- no translation found for notifications_off_text (2529001315769385273) -->
<skip />
+ <!-- no translation found for accessibility_rotation_lock_off (4062780228931590069) -->
+ <skip />
+ <!-- no translation found for accessibility_rotation_lock_on_landscape (6731197337665366273) -->
+ <skip />
+ <!-- no translation found for accessibility_rotation_lock_on_portrait (5809367521644012115) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-nb/strings.xml b/packages/SystemUI/res/values-nb/strings.xml
index aca1f94..b416095 100644
--- a/packages/SystemUI/res/values-nb/strings.xml
+++ b/packages/SystemUI/res/values-nb/strings.xml
@@ -144,4 +144,10 @@
<skip />
<!-- no translation found for notifications_off_text (2529001315769385273) -->
<skip />
+ <!-- no translation found for accessibility_rotation_lock_off (4062780228931590069) -->
+ <skip />
+ <!-- no translation found for accessibility_rotation_lock_on_landscape (6731197337665366273) -->
+ <skip />
+ <!-- no translation found for accessibility_rotation_lock_on_portrait (5809367521644012115) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml
index 7d50794..936e0958 100644
--- a/packages/SystemUI/res/values-nl/strings.xml
+++ b/packages/SystemUI/res/values-nl/strings.xml
@@ -140,8 +140,9 @@
<string name="accessibility_clear_all" msgid="5235938559247164925">"Alle meldingen wissen."</string>
<string name="dreams_dock_launcher" msgid="3541196417659166245">"Schermbeveiliging inschakelen"</string>
<string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"App-info"</string>
- <!-- no translation found for notifications_off_title (8936620513608443224) -->
- <skip />
- <!-- no translation found for notifications_off_text (2529001315769385273) -->
- <skip />
+ <string name="notifications_off_title" msgid="8936620513608443224">"Meldingen uit"</string>
+ <string name="notifications_off_text" msgid="2529001315769385273">"Tik hier om meldingen weer in te schakelen."</string>
+ <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Scherm wordt automatisch geroteerd."</string>
+ <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Het scherm is nu vergrendeld in liggende stand."</string>
+ <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Het scherm is nu vergrendeld in staande stand."</string>
</resources>
diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml
index 4847e51..3dab389 100644
--- a/packages/SystemUI/res/values-pl/strings.xml
+++ b/packages/SystemUI/res/values-pl/strings.xml
@@ -144,4 +144,10 @@
<skip />
<!-- no translation found for notifications_off_text (2529001315769385273) -->
<skip />
+ <!-- no translation found for accessibility_rotation_lock_off (4062780228931590069) -->
+ <skip />
+ <!-- no translation found for accessibility_rotation_lock_on_landscape (6731197337665366273) -->
+ <skip />
+ <!-- no translation found for accessibility_rotation_lock_on_portrait (5809367521644012115) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-pt-rPT/strings.xml b/packages/SystemUI/res/values-pt-rPT/strings.xml
index 1d22d2f..30950ba 100644
--- a/packages/SystemUI/res/values-pt-rPT/strings.xml
+++ b/packages/SystemUI/res/values-pt-rPT/strings.xml
@@ -144,4 +144,10 @@
<skip />
<!-- no translation found for notifications_off_text (2529001315769385273) -->
<skip />
+ <!-- no translation found for accessibility_rotation_lock_off (4062780228931590069) -->
+ <skip />
+ <!-- no translation found for accessibility_rotation_lock_on_landscape (6731197337665366273) -->
+ <skip />
+ <!-- no translation found for accessibility_rotation_lock_on_portrait (5809367521644012115) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml
index 8b774e6..a66a649 100644
--- a/packages/SystemUI/res/values-pt/strings.xml
+++ b/packages/SystemUI/res/values-pt/strings.xml
@@ -146,4 +146,10 @@
<skip />
<!-- no translation found for notifications_off_text (2529001315769385273) -->
<skip />
+ <!-- no translation found for accessibility_rotation_lock_off (4062780228931590069) -->
+ <skip />
+ <!-- no translation found for accessibility_rotation_lock_on_landscape (6731197337665366273) -->
+ <skip />
+ <!-- no translation found for accessibility_rotation_lock_on_portrait (5809367521644012115) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-rm/strings.xml b/packages/SystemUI/res/values-rm/strings.xml
index 8d3103b..16e5719 100644
--- a/packages/SystemUI/res/values-rm/strings.xml
+++ b/packages/SystemUI/res/values-rm/strings.xml
@@ -254,4 +254,10 @@
<skip />
<!-- no translation found for notifications_off_text (2529001315769385273) -->
<skip />
+ <!-- no translation found for accessibility_rotation_lock_off (4062780228931590069) -->
+ <skip />
+ <!-- no translation found for accessibility_rotation_lock_on_landscape (6731197337665366273) -->
+ <skip />
+ <!-- no translation found for accessibility_rotation_lock_on_portrait (5809367521644012115) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml
index 714ad2d..2896eae 100644
--- a/packages/SystemUI/res/values-ro/strings.xml
+++ b/packages/SystemUI/res/values-ro/strings.xml
@@ -144,4 +144,10 @@
<skip />
<!-- no translation found for notifications_off_text (2529001315769385273) -->
<skip />
+ <!-- no translation found for accessibility_rotation_lock_off (4062780228931590069) -->
+ <skip />
+ <!-- no translation found for accessibility_rotation_lock_on_landscape (6731197337665366273) -->
+ <skip />
+ <!-- no translation found for accessibility_rotation_lock_on_portrait (5809367521644012115) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml
index dcfe560..f2d056d 100644
--- a/packages/SystemUI/res/values-ru/strings.xml
+++ b/packages/SystemUI/res/values-ru/strings.xml
@@ -146,4 +146,10 @@
<skip />
<!-- no translation found for notifications_off_text (2529001315769385273) -->
<skip />
+ <!-- no translation found for accessibility_rotation_lock_off (4062780228931590069) -->
+ <skip />
+ <!-- no translation found for accessibility_rotation_lock_on_landscape (6731197337665366273) -->
+ <skip />
+ <!-- no translation found for accessibility_rotation_lock_on_portrait (5809367521644012115) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml
index 96cd983..64494b8 100644
--- a/packages/SystemUI/res/values-sk/strings.xml
+++ b/packages/SystemUI/res/values-sk/strings.xml
@@ -146,4 +146,10 @@
<skip />
<!-- no translation found for notifications_off_text (2529001315769385273) -->
<skip />
+ <!-- no translation found for accessibility_rotation_lock_off (4062780228931590069) -->
+ <skip />
+ <!-- no translation found for accessibility_rotation_lock_on_landscape (6731197337665366273) -->
+ <skip />
+ <!-- no translation found for accessibility_rotation_lock_on_portrait (5809367521644012115) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-sl/strings.xml b/packages/SystemUI/res/values-sl/strings.xml
index b8371ab..73befa6 100644
--- a/packages/SystemUI/res/values-sl/strings.xml
+++ b/packages/SystemUI/res/values-sl/strings.xml
@@ -144,4 +144,10 @@
<skip />
<!-- no translation found for notifications_off_text (2529001315769385273) -->
<skip />
+ <!-- no translation found for accessibility_rotation_lock_off (4062780228931590069) -->
+ <skip />
+ <!-- no translation found for accessibility_rotation_lock_on_landscape (6731197337665366273) -->
+ <skip />
+ <!-- no translation found for accessibility_rotation_lock_on_portrait (5809367521644012115) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-sr/strings.xml b/packages/SystemUI/res/values-sr/strings.xml
index e29fc0c..6b475d3 100644
--- a/packages/SystemUI/res/values-sr/strings.xml
+++ b/packages/SystemUI/res/values-sr/strings.xml
@@ -144,4 +144,10 @@
<skip />
<!-- no translation found for notifications_off_text (2529001315769385273) -->
<skip />
+ <!-- no translation found for accessibility_rotation_lock_off (4062780228931590069) -->
+ <skip />
+ <!-- no translation found for accessibility_rotation_lock_on_landscape (6731197337665366273) -->
+ <skip />
+ <!-- no translation found for accessibility_rotation_lock_on_portrait (5809367521644012115) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-sv/strings.xml b/packages/SystemUI/res/values-sv/strings.xml
index 691f89e..36950dc 100644
--- a/packages/SystemUI/res/values-sv/strings.xml
+++ b/packages/SystemUI/res/values-sv/strings.xml
@@ -144,4 +144,7 @@
<skip />
<!-- no translation found for notifications_off_text (2529001315769385273) -->
<skip />
+ <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Skärmen roteras automatiskt."</string>
+ <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Bildskärmens riktning är nu låst i liggande format."</string>
+ <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Bildskärmens riktning är nu låst i stående format."</string>
</resources>
diff --git a/packages/SystemUI/res/values-sw/strings.xml b/packages/SystemUI/res/values-sw/strings.xml
index 5803f3c..8ce45ed 100644
--- a/packages/SystemUI/res/values-sw/strings.xml
+++ b/packages/SystemUI/res/values-sw/strings.xml
@@ -138,8 +138,9 @@
<string name="accessibility_clear_all" msgid="5235938559247164925">"Futa arifa zote."</string>
<string name="dreams_dock_launcher" msgid="3541196417659166245">"Amilisha hifadhi ya skrini"</string>
<string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Taarifa ya programu"</string>
- <!-- no translation found for notifications_off_title (8936620513608443224) -->
- <skip />
- <!-- no translation found for notifications_off_text (2529001315769385273) -->
- <skip />
+ <string name="notifications_off_title" msgid="8936620513608443224">"Arifa zimezimwa"</string>
+ <string name="notifications_off_text" msgid="2529001315769385273">"Gonga hapa ili kuwasha tena arifa."</string>
+ <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Skrini itazunguka kiotomatiki."</string>
+ <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Skrini imefungwa sasa katika uelekezo wa mandhari."</string>
+ <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Skrini imefungwa katika uelekeo wa picha."</string>
</resources>
diff --git a/packages/SystemUI/res/values-th/strings.xml b/packages/SystemUI/res/values-th/strings.xml
index 2ead831..dbb8d91 100644
--- a/packages/SystemUI/res/values-th/strings.xml
+++ b/packages/SystemUI/res/values-th/strings.xml
@@ -144,4 +144,10 @@
<skip />
<!-- no translation found for notifications_off_text (2529001315769385273) -->
<skip />
+ <!-- no translation found for accessibility_rotation_lock_off (4062780228931590069) -->
+ <skip />
+ <!-- no translation found for accessibility_rotation_lock_on_landscape (6731197337665366273) -->
+ <skip />
+ <!-- no translation found for accessibility_rotation_lock_on_portrait (5809367521644012115) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-tl/strings.xml b/packages/SystemUI/res/values-tl/strings.xml
index 9729a17..f20f6af 100644
--- a/packages/SystemUI/res/values-tl/strings.xml
+++ b/packages/SystemUI/res/values-tl/strings.xml
@@ -144,4 +144,10 @@
<skip />
<!-- no translation found for notifications_off_text (2529001315769385273) -->
<skip />
+ <!-- no translation found for accessibility_rotation_lock_off (4062780228931590069) -->
+ <skip />
+ <!-- no translation found for accessibility_rotation_lock_on_landscape (6731197337665366273) -->
+ <skip />
+ <!-- no translation found for accessibility_rotation_lock_on_portrait (5809367521644012115) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-tr/strings.xml b/packages/SystemUI/res/values-tr/strings.xml
index 7a328b3..d0f08fc 100644
--- a/packages/SystemUI/res/values-tr/strings.xml
+++ b/packages/SystemUI/res/values-tr/strings.xml
@@ -144,4 +144,10 @@
<skip />
<!-- no translation found for notifications_off_text (2529001315769385273) -->
<skip />
+ <!-- no translation found for accessibility_rotation_lock_off (4062780228931590069) -->
+ <skip />
+ <!-- no translation found for accessibility_rotation_lock_on_landscape (6731197337665366273) -->
+ <skip />
+ <!-- no translation found for accessibility_rotation_lock_on_portrait (5809367521644012115) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml
index 995f21a..6494fc8 100644
--- a/packages/SystemUI/res/values-uk/strings.xml
+++ b/packages/SystemUI/res/values-uk/strings.xml
@@ -144,4 +144,10 @@
<skip />
<!-- no translation found for notifications_off_text (2529001315769385273) -->
<skip />
+ <!-- no translation found for accessibility_rotation_lock_off (4062780228931590069) -->
+ <skip />
+ <!-- no translation found for accessibility_rotation_lock_on_landscape (6731197337665366273) -->
+ <skip />
+ <!-- no translation found for accessibility_rotation_lock_on_portrait (5809367521644012115) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-vi/strings.xml b/packages/SystemUI/res/values-vi/strings.xml
index 7c99f6b..0019c7c 100644
--- a/packages/SystemUI/res/values-vi/strings.xml
+++ b/packages/SystemUI/res/values-vi/strings.xml
@@ -140,8 +140,12 @@
<string name="accessibility_clear_all" msgid="5235938559247164925">"Xóa tất cả thông báo."</string>
<string name="dreams_dock_launcher" msgid="3541196417659166245">"Kích hoạt trình bảo vệ màn hình"</string>
<string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Thông tin về ứng dụng"</string>
- <!-- no translation found for notifications_off_title (8936620513608443224) -->
+ <string name="notifications_off_title" msgid="8936620513608443224">"Tắt thông báo"</string>
+ <string name="notifications_off_text" msgid="2529001315769385273">"Chạm vào đây để bật lại thông báo."</string>
+ <!-- no translation found for accessibility_rotation_lock_off (4062780228931590069) -->
<skip />
- <!-- no translation found for notifications_off_text (2529001315769385273) -->
+ <!-- no translation found for accessibility_rotation_lock_on_landscape (6731197337665366273) -->
+ <skip />
+ <!-- no translation found for accessibility_rotation_lock_on_portrait (5809367521644012115) -->
<skip />
</resources>
diff --git a/packages/SystemUI/res/values-zh-rCN/strings.xml b/packages/SystemUI/res/values-zh-rCN/strings.xml
index c6e29555..b45251f 100644
--- a/packages/SystemUI/res/values-zh-rCN/strings.xml
+++ b/packages/SystemUI/res/values-zh-rCN/strings.xml
@@ -146,4 +146,10 @@
<skip />
<!-- no translation found for notifications_off_text (2529001315769385273) -->
<skip />
+ <!-- no translation found for accessibility_rotation_lock_off (4062780228931590069) -->
+ <skip />
+ <!-- no translation found for accessibility_rotation_lock_on_landscape (6731197337665366273) -->
+ <skip />
+ <!-- no translation found for accessibility_rotation_lock_on_portrait (5809367521644012115) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-zh-rTW/strings.xml b/packages/SystemUI/res/values-zh-rTW/strings.xml
index ad72466..66c834f 100644
--- a/packages/SystemUI/res/values-zh-rTW/strings.xml
+++ b/packages/SystemUI/res/values-zh-rTW/strings.xml
@@ -146,4 +146,10 @@
<skip />
<!-- no translation found for notifications_off_text (2529001315769385273) -->
<skip />
+ <!-- no translation found for accessibility_rotation_lock_off (4062780228931590069) -->
+ <skip />
+ <!-- no translation found for accessibility_rotation_lock_on_landscape (6731197337665366273) -->
+ <skip />
+ <!-- no translation found for accessibility_rotation_lock_on_portrait (5809367521644012115) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-zu/strings.xml b/packages/SystemUI/res/values-zu/strings.xml
index b2b111d..78b2779 100644
--- a/packages/SystemUI/res/values-zu/strings.xml
+++ b/packages/SystemUI/res/values-zu/strings.xml
@@ -140,8 +140,12 @@
<string name="accessibility_clear_all" msgid="5235938559247164925">"Susa zonke izaziso."</string>
<string name="dreams_dock_launcher" msgid="3541196417659166245">"Yenza ukuthi iskrini seyiva sisebenze"</string>
<string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Ulwazi lohlelo lokusebenza"</string>
- <!-- no translation found for notifications_off_title (8936620513608443224) -->
+ <string name="notifications_off_title" msgid="8936620513608443224">"Izaziso zivaliwe"</string>
+ <string name="notifications_off_text" msgid="2529001315769385273">"Thepha lapha ukuvula futhi izaziso."</string>
+ <!-- no translation found for accessibility_rotation_lock_off (4062780228931590069) -->
<skip />
- <!-- no translation found for notifications_off_text (2529001315769385273) -->
+ <!-- no translation found for accessibility_rotation_lock_on_landscape (6731197337665366273) -->
+ <skip />
+ <!-- no translation found for accessibility_rotation_lock_on_portrait (5809367521644012115) -->
<skip />
</resources>
diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml
index b908188..2ff0e00 100644
--- a/packages/SystemUI/res/values/dimens.xml
+++ b/packages/SystemUI/res/values/dimens.xml
@@ -49,14 +49,14 @@
reducing false presses on navbar buttons; approx 2mm -->
<dimen name="navigation_bar_deadzone_size">12dp</dimen>
- <!-- thickness (height) of each notification row, including any separators or padding -->
- <dimen name="notification_height">68dp</dimen>
+ <!-- thickness (height) of each 1U notification row plus glow, padding, etc -->
+ <dimen name="notification_height">72dp</dimen>
<!-- Height of notification icons in the status bar -->
<dimen name="status_bar_icon_size">@*android:dimen/status_bar_icon_size</dimen>
- <!-- Height of a small notification in the status bar -->
- <dimen name="notification_min_height">@android:dimen/notification_large_icon_height</dimen>
+ <!-- Height of a small notification in the status bar plus glow, padding, etc -->
+ <dimen name="notification_min_height">72dp</dimen>
<!-- Height of a small notification in the status bar -->
<!-- TODO: change this back to 256dp once we deal with actions. -->
@@ -71,8 +71,8 @@
<!-- gap on either side of status bar notification icons -->
<dimen name="status_bar_icon_padding">0dp</dimen>
- <!-- thickness (height) of dividers between each notification row -->
- <dimen name="notification_divider_height">2dp</dimen>
+ <!-- half the distance between notifications in the panel -->
+ <dimen name="notification_divider_height">4dp</dimen>
<!-- Notification drawer tuning parameters (phone UI) -->
<!-- Initial velocity of the shade when expanding on its own -->
diff --git a/packages/SystemUI/res/values/ids.xml b/packages/SystemUI/res/values/ids.xml
index 2a4c5fd..8ebbc52 100644
--- a/packages/SystemUI/res/values/ids.xml
+++ b/packages/SystemUI/res/values/ids.xml
@@ -17,4 +17,5 @@
<resources>
<item type="id" name="expandable_tag" />
+ <item type="id" name="user_expanded_tag" />
</resources>
diff --git a/packages/SystemUI/src/com/android/systemui/BeanBag.java b/packages/SystemUI/src/com/android/systemui/BeanBag.java
new file mode 100644
index 0000000..e4f00d6
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/BeanBag.java
@@ -0,0 +1,439 @@
+/*);
+ * 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.systemui;
+
+import android.animation.AnimatorSet;
+import android.animation.PropertyValuesHolder;
+import android.animation.ObjectAnimator;
+import android.animation.TimeAnimator;
+import android.app.Activity;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.graphics.drawable.AnimationDrawable;
+import android.graphics.drawable.BitmapDrawable;
+import android.graphics.Bitmap;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.ColorMatrix;
+import android.graphics.ColorMatrixColorFilter;
+import android.graphics.Matrix;
+import android.graphics.Paint;
+import android.graphics.Point;
+import android.graphics.PorterDuffColorFilter;
+import android.graphics.PorterDuffXfermode;
+import android.graphics.Rect;
+import android.graphics.RectF;
+import android.os.Handler;
+import android.os.SystemClock;
+import android.util.AttributeSet;
+import android.util.DisplayMetrics;
+import android.util.Pair;
+import android.view.Gravity;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.WindowManager;
+import android.view.animation.AnimationUtils;
+import android.widget.FrameLayout;
+import android.widget.ImageView;
+import java.util.HashMap;
+import java.util.Random;
+
+public class BeanBag extends Activity {
+ final static boolean DEBUG = false;
+
+ public static class Board extends FrameLayout
+ {
+ static Random sRNG = new Random();
+
+ static float lerp(float a, float b, float f) {
+ return (b-a)*f + a;
+ }
+
+ static float randfrange(float a, float b) {
+ return lerp(a, b, sRNG.nextFloat());
+ }
+
+ static int randsign() {
+ return sRNG.nextBoolean() ? 1 : -1;
+ }
+
+ static boolean flip() {
+ return sRNG.nextBoolean();
+ }
+
+ static float mag(float x, float y) {
+ return (float) Math.sqrt(x*x+y*y);
+ }
+
+ static float dot(float x1, float y1, float x2, float y2) {
+ return x1*x2+y1+y2;
+ }
+
+ static <E> E pick(E[] array) {
+ if (array.length == 0) return null;
+ return array[sRNG.nextInt(array.length)];
+ }
+
+ static int pickInt(int[] array) {
+ if (array.length == 0) return 0;
+ return array[sRNG.nextInt(array.length)];
+ }
+
+ static int NUM_BEANS = 40;
+ static float MIN_SCALE = 0.2f;
+ static float MAX_SCALE = 1f;
+
+ static float LUCKY = 0.001f;
+
+ static int MAX_RADIUS = (int)(576 * MAX_SCALE);
+
+ static int BEANS[] = {
+ R.drawable.redbean0,
+ R.drawable.redbean0,
+ R.drawable.redbean0,
+ R.drawable.redbean0,
+ R.drawable.redbean1,
+ R.drawable.redbean1,
+ R.drawable.redbean2,
+ R.drawable.redbean2,
+ R.drawable.redbeandroid,
+ };
+
+ static int COLORS[] = {
+ 0xFF00CC00,
+ 0xFFCC0000,
+ 0xFF0000CC,
+ 0xFFFFFF00,
+ 0xFFFF8000,
+ 0xFF00CCFF,
+ 0xFFFF0080,
+ 0xFF8000FF,
+ 0xFFFF8080,
+ 0xFF8080FF,
+ 0xFFB0C0D0,
+ 0xFFDDDDDD,
+ 0xFF333333,
+ };
+
+ public class Bean extends ImageView {
+ public static final float VMAX = 1000.0f;
+ public static final float VMIN = 100.0f;
+
+ public float x, y, a;
+
+ public float va;
+ public float vx, vy;
+
+ public float r;
+
+ public float z;
+
+ public int h,w;
+
+ public boolean grabbed;
+ public float grabx, graby;
+ public long grabtime;
+
+ public Bean(Context context, AttributeSet as) {
+ super(context, as);
+ }
+
+ public String toString() {
+ return String.format("<bean (%.1f, %.1f) (%d x %d)>",
+ getX(), getY(), getWidth(), getHeight());
+ }
+
+ private void pickBean() {
+ int beanId = pickInt(BEANS);
+ if (randfrange(0,1) <= LUCKY) {
+ beanId = R.drawable.jandycane;
+ }
+ BitmapDrawable bean = (BitmapDrawable) getContext().getResources().getDrawable(beanId);
+ Bitmap beanBits = bean.getBitmap();
+ h=beanBits.getHeight();
+ w=beanBits.getWidth();
+
+ if (DEBUG) {
+ bean.setAlpha(0x80);
+ }
+ this.setImageDrawable(bean);
+
+ Paint pt = new Paint();
+ final int color = pickInt(COLORS);
+ ColorMatrix CM = new ColorMatrix();
+ float[] M = CM.getArray();
+ // we assume the color information is in the red channel
+ /* R */ M[0] = (float)((color & 0x00FF0000) >> 16) / 0xFF;
+ /* G */ M[5] = (float)((color & 0x0000FF00) >> 8) / 0xFF;
+ /* B */ M[10] = (float)((color & 0x000000FF)) / 0xFF;
+ pt.setColorFilter(new ColorMatrixColorFilter(M));
+ setLayerType(View.LAYER_TYPE_HARDWARE, (beanId == R.drawable.jandycane) ? null : pt);
+ }
+
+ public void reset() {
+ pickBean();
+
+ final float scale = lerp(MIN_SCALE,MAX_SCALE,z);
+ setScaleX(scale); setScaleY(scale);
+
+ r = 0.3f*Math.max(h,w)*scale;
+
+ a=(randfrange(0,360));
+ va = randfrange(-30,30);
+
+ vx = randfrange(-40,40) * z;
+ vy = randfrange(-40,40) * z;
+ final float boardh = boardHeight;
+ final float boardw = boardWidth;
+ //android.util.Log.d("BeanBag", "reset: w="+w+" h="+h);
+ if (flip()) {
+ x=(vx < 0 ? boardw+2*r : -r*4f);
+ y=(randfrange(0, boardh-3*r)*0.5f + ((vy < 0)?boardh*0.5f:0));
+ } else {
+ y=(vy < 0 ? boardh+2*r : -r*4f);
+ x=(randfrange(0, boardw-3*r)*0.5f + ((vx < 0)?boardw*0.5f:0));
+ }
+ }
+
+ public void update(float dt) {
+ if (grabbed) {
+// final float interval = (SystemClock.uptimeMillis() - grabtime) / 1000f;
+ vx = (vx * 0.75f) + ((grabx - x) / dt) * 0.25f;
+ x = grabx;
+ vy = (vy * 0.75f) + ((graby - y) / dt) * 0.25f;;
+ y = graby;
+ } else {
+ x = (x + vx * dt);
+ y = (y + vy * dt);
+ a = (a + va * dt);
+ }
+ }
+
+ public float overlap(Bean other) {
+ final float dx = (x - other.x);
+ final float dy = (y - other.y);
+ return mag(dx, dy) - r - other.r;
+ }
+
+ @Override
+ public boolean onTouchEvent(MotionEvent e) {
+ switch (e.getAction()) {
+ case MotionEvent.ACTION_DOWN:
+ grabbed = true;
+ va = 0;
+ // fall
+ case MotionEvent.ACTION_MOVE:
+ grabx = e.getRawX();
+ graby = e.getRawY();
+ grabtime = e.getEventTime();
+ break;
+ case MotionEvent.ACTION_CANCEL:
+ case MotionEvent.ACTION_UP:
+ grabbed = false;
+ va = randfrange(-5,5);
+ break;
+ }
+ return true;
+ }
+ }
+
+ TimeAnimator mAnim;
+ private int boardWidth;
+ private int boardHeight;
+
+ public Board(Context context, AttributeSet as) {
+ super(context, as);
+
+ setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE);
+
+ setWillNotDraw(!DEBUG);
+ }
+
+ private void reset() {
+// android.util.Log.d("Nyandroid", "board reset");
+ removeAllViews();
+
+ final ViewGroup.LayoutParams wrap = new ViewGroup.LayoutParams(
+ ViewGroup.LayoutParams.WRAP_CONTENT,
+ ViewGroup.LayoutParams.WRAP_CONTENT);
+
+ for(int i=0; i<NUM_BEANS; i++) {
+ Bean nv = new Bean(getContext(), null);
+ addView(nv, wrap);
+ nv.z = ((float)i/NUM_BEANS);
+ nv.z *= nv.z;
+ nv.reset();
+ nv.x = (randfrange(0, boardWidth));
+ nv.y = (randfrange(0, boardHeight));
+ }
+
+ if (mAnim != null) {
+ mAnim.cancel();
+ }
+ mAnim = new TimeAnimator();
+ mAnim.setTimeListener(new TimeAnimator.TimeListener() {
+ private long lastPrint = 0;
+ public void onTimeUpdate(TimeAnimator animation, long totalTime, long deltaTime) {
+ if (DEBUG && totalTime - lastPrint > 5000) {
+ lastPrint = totalTime;
+ for (int i=0; i<getChildCount(); i++) {
+ android.util.Log.d("BeanBag", "bean " + i + ": " + getChildAt(i));
+ }
+ }
+
+ for (int i=0; i<getChildCount(); i++) {
+ View v = getChildAt(i);
+ if (!(v instanceof Bean)) continue;
+ Bean nv = (Bean) v;
+ nv.update(deltaTime / 1000f);
+
+ for (int j=i+1; j<getChildCount(); j++) {
+ View v2 = getChildAt(j);
+ if (!(v2 instanceof Bean)) continue;
+ Bean nv2 = (Bean) v2;
+ final float overlap = nv.overlap(nv2);
+ if (false && overlap < 0) {
+ // angle pointing from nv2 to nv
+ final float dx = nv.x - nv2.x;
+ final float dy = nv.y - nv2.y;
+ final float ang = (float) Math.atan2(dx, dy);
+
+ if (false) {
+ nv.vx -= Math.cos(ang) * overlap * 0.5f;
+ nv.vy -= Math.sin(ang) * overlap * 0.5f;
+ nv2.vx += Math.cos(ang) * overlap * 0.5f;
+ nv2.vy += Math.sin(ang) * overlap * 0.5f;
+ }
+
+
+ // first, move them apart
+ nv.x -= Math.cos(ang) * overlap/2;
+ nv.y -= Math.sin(ang) * overlap/2;
+ nv2.x += Math.cos(ang) * overlap/2;
+ nv2.y += Math.sin(ang) * overlap/2;
+
+ // next, figure out velocities
+ final float sap = 0f; // randfrange(0,0.25f);
+
+ final float mag1 = mag(nv.vx, nv.vy) * (1f-sap);
+ final float mag2 = mag(nv2.vx, nv2.vy) * (1f-sap);
+
+
+ // hacky way to transfer "momentum"
+ nv.vx = mag2 * (float)Math.cos(ang);
+ nv.vy = mag2 * (float)Math.sin(ang);
+ nv2.vx = -mag1 * (float)Math.cos(ang);
+ nv2.vy = -mag1 * (float)Math.sin(ang);
+
+ final float totalva = nv.va + nv2.va;
+ final float frac = randfrange(0.25f,0.75f);
+ nv.va = totalva * frac;
+ nv2.va = totalva * (1f-frac);
+// nv.va += randfrange(-20,20);
+// nv2.va += randfrange(-20,20);
+
+ }
+ }
+
+ nv.setRotation(nv.a);
+ nv.setX(nv.x-nv.getPivotX());
+ nv.setY(nv.y-nv.getPivotY());
+
+ if ( nv.x < - MAX_RADIUS
+ || nv.x > boardWidth + MAX_RADIUS
+ || nv.y < -MAX_RADIUS
+ || nv.y > boardHeight + MAX_RADIUS)
+ {
+ nv.reset();
+ }
+ }
+
+ if (DEBUG) invalidate();
+ }
+ });
+ }
+
+ @Override
+ protected void onSizeChanged (int w, int h, int oldw, int oldh) {
+ super.onSizeChanged(w,h,oldw,oldh);
+ boardWidth = w;
+ boardHeight = h;
+// android.util.Log.d("Nyandroid", "resized: " + w + "x" + h);
+ post(new Runnable() { public void run() {
+ reset();
+ mAnim.start();
+ } });
+ }
+
+
+ @Override
+ protected void onDetachedFromWindow() {
+ super.onDetachedFromWindow();
+ mAnim.cancel();
+ }
+
+ @Override
+ public boolean isOpaque() {
+ return false;
+ }
+
+ @Override
+ public void onDraw(Canvas c) {
+ if (DEBUG) {
+ //android.util.Log.d("BeanBag", "onDraw");
+ Paint pt = new Paint();
+ pt.setAntiAlias(true);
+ pt.setStyle(Paint.Style.STROKE);
+ pt.setColor(0xFFFF0000);
+ pt.setStrokeWidth(4.0f);
+ c.drawRect(0, 0, getWidth(), getHeight(), pt);
+ pt.setColor(0xFFFFCC00);
+ pt.setStrokeWidth(1.0f);
+ for (int i=0; i<getChildCount(); i++) {
+ Bean b = (Bean) getChildAt(i);
+ final float a = (360-b.a)/180f*3.14159f;
+ final float tx = b.getTranslationX();
+ final float ty = b.getTranslationY();
+ c.drawCircle(b.x, b.y, b.r, pt);
+ c.drawCircle(tx, ty, 4, pt);
+ c.drawLine(b.x, b.y, (float)(b.x+b.r*Math.sin(a)), (float)(b.y+b.r*Math.cos(a)), pt);
+ }
+ }
+ }
+ }
+
+ private Board mBoard;
+
+ @Override
+ public void onStart() {
+ super.onStart();
+
+ getWindow().addFlags(
+ WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON
+ | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
+ );
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ mBoard = new Board(this, null);
+ setContentView(mBoard);
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/ExpandHelper.java b/packages/SystemUI/src/com/android/systemui/ExpandHelper.java
index c5928f1..7a7afa7 100644
--- a/packages/SystemUI/src/com/android/systemui/ExpandHelper.java
+++ b/packages/SystemUI/src/com/android/systemui/ExpandHelper.java
@@ -34,6 +34,7 @@
View getChildAtPosition(MotionEvent ev);
View getChildAtPosition(float x, float y);
boolean canChildBeExpanded(View v);
+ boolean setUserExpandedChild(View v, boolean userxpanded);
}
private static final String TAG = "ExpandHelper";
@@ -272,6 +273,7 @@
mScaleAnimation.start();
mStretching = false;
setGlow(0f);
+ mCallback.setUserExpandedChild(mCurrView, h == mNaturalHeight);
if (DEBUG) Log.d(TAG, "scale was finished on view: " + mCurrView);
clearView();
}
diff --git a/packages/SystemUI/src/com/android/systemui/Nyandroid.java b/packages/SystemUI/src/com/android/systemui/Nyandroid.java
deleted file mode 100644
index 6f168ba..0000000
--- a/packages/SystemUI/src/com/android/systemui/Nyandroid.java
+++ /dev/null
@@ -1,253 +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.systemui;
-
-import android.animation.AnimatorSet;
-import android.animation.PropertyValuesHolder;
-import android.animation.ObjectAnimator;
-import android.animation.TimeAnimator;
-import android.app.Activity;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-import android.graphics.drawable.AnimationDrawable;
-import android.graphics.Bitmap;
-import android.graphics.Canvas;
-import android.graphics.Color;
-import android.graphics.Matrix;
-import android.graphics.Paint;
-import android.graphics.Point;
-import android.graphics.Rect;
-import android.graphics.RectF;
-import android.os.Handler;
-import android.util.AttributeSet;
-import android.util.DisplayMetrics;
-import android.util.Pair;
-import android.view.Gravity;
-import android.view.MotionEvent;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.WindowManager;
-import android.widget.FrameLayout;
-import android.widget.ImageView;
-import java.util.HashMap;
-import java.util.Random;
-
-public class Nyandroid extends Activity {
- final static boolean DEBUG = false;
-
- public static class Board extends FrameLayout
- {
- public static final boolean FIXED_STARS = true;
- public static final int NUM_CATS = 20;
-
- static Random sRNG = new Random();
-
- static float lerp(float a, float b, float f) {
- return (b-a)*f + a;
- }
-
- static float randfrange(float a, float b) {
- return lerp(a, b, sRNG.nextFloat());
- }
-
- static int randsign() {
- return sRNG.nextBoolean() ? 1 : -1;
- }
-
- static <E> E pick(E[] array) {
- if (array.length == 0) return null;
- return array[sRNG.nextInt(array.length)];
- }
-
- public class FlyingCat extends ImageView {
- public static final float VMAX = 1000.0f;
- public static final float VMIN = 100.0f;
-
- public float v, vr;
-
- public float dist;
- public float z;
-
- public ComponentName component;
-
- public FlyingCat(Context context, AttributeSet as) {
- super(context, as);
- setImageResource(R.drawable.nyandroid_anim); // @@@
-
- if (DEBUG) setBackgroundColor(0x80FF0000);
- }
-
- public String toString() {
- return String.format("<cat (%.1f, %.1f) (%d x %d)>",
- getX(), getY(), getWidth(), getHeight());
- }
-
- public void reset() {
- final float scale = lerp(0.1f,2f,z);
- setScaleX(scale); setScaleY(scale);
-
- setX(-scale*getWidth()+1);
- setY(randfrange(0, Board.this.getHeight()-scale*getHeight()));
- v = lerp(VMIN, VMAX, z);
-
- dist = 0;
-
-// android.util.Log.d("Nyandroid", "reset cat: " + this);
- }
-
- public void update(float dt) {
- dist += v * dt;
- setX(getX() + v * dt);
- }
- }
-
- TimeAnimator mAnim;
-
- public Board(Context context, AttributeSet as) {
- super(context, as);
-
- setLayerType(View.LAYER_TYPE_HARDWARE, null);
- setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
- setBackgroundColor(0xFF003366);
- }
-
- private void reset() {
-// android.util.Log.d("Nyandroid", "board reset");
- removeAllViews();
-
- final ViewGroup.LayoutParams wrap = new ViewGroup.LayoutParams(
- ViewGroup.LayoutParams.WRAP_CONTENT,
- ViewGroup.LayoutParams.WRAP_CONTENT);
-
- if (FIXED_STARS) {
- for(int i=0; i<20; i++) {
- ImageView fixedStar = new ImageView(getContext(), null);
- if (DEBUG) fixedStar.setBackgroundColor(0x8000FF80);
- fixedStar.setImageResource(R.drawable.star_anim); // @@@
- addView(fixedStar, wrap);
- final float scale = randfrange(0.1f, 1f);
- fixedStar.setScaleX(scale); fixedStar.setScaleY(scale);
- fixedStar.setX(randfrange(0, getWidth()));
- fixedStar.setY(randfrange(0, getHeight()));
- final AnimationDrawable anim = (AnimationDrawable) fixedStar.getDrawable();
- postDelayed(new Runnable() {
- public void run() {
- anim.start();
- }}, (int) randfrange(0, 1000));
- }
- }
-
- for(int i=0; i<NUM_CATS; i++) {
- FlyingCat nv = new FlyingCat(getContext(), null);
- addView(nv, wrap);
- nv.z = ((float)i/NUM_CATS);
- nv.z *= nv.z;
- nv.reset();
- nv.setX(randfrange(0,Board.this.getWidth()));
- final AnimationDrawable anim = (AnimationDrawable) nv.getDrawable();
- postDelayed(new Runnable() {
- public void run() {
- anim.start();
- }}, (int) randfrange(0, 1000));
- }
-
- if (mAnim != null) {
- mAnim.cancel();
- }
- mAnim = new TimeAnimator();
- mAnim.setTimeListener(new TimeAnimator.TimeListener() {
- public void onTimeUpdate(TimeAnimator animation, long totalTime, long deltaTime) {
- // setRotation(totalTime * 0.01f); // not as cool as you would think
-// android.util.Log.d("Nyandroid", "t=" + totalTime);
-
- for (int i=0; i<getChildCount(); i++) {
- View v = getChildAt(i);
- if (!(v instanceof FlyingCat)) continue;
- FlyingCat nv = (FlyingCat) v;
- nv.update(deltaTime / 1000f);
- final float catWidth = nv.getWidth() * nv.getScaleX();
- final float catHeight = nv.getHeight() * nv.getScaleY();
- if ( nv.getX() + catWidth < -2
- || nv.getX() > getWidth() + 2
- || nv.getY() + catHeight < -2
- || nv.getY() > getHeight() + 2)
- {
- nv.reset();
- }
- }
- }
- });
- }
-
- @Override
- protected void onSizeChanged (int w, int h, int oldw, int oldh) {
- super.onSizeChanged(w,h,oldw,oldh);
-// android.util.Log.d("Nyandroid", "resized: " + w + "x" + h);
- post(new Runnable() { public void run() {
- reset();
- mAnim.start();
- } });
- }
-
-
- @Override
- protected void onDetachedFromWindow() {
- super.onDetachedFromWindow();
- mAnim.cancel();
- }
-
- @Override
- public boolean isOpaque() {
- return true;
- }
- }
-
- private Board mBoard;
-
- @Override
- public void onStart() {
- super.onStart();
-
- getWindow().addFlags(
- WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON
- | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
- );
- }
-
- @Override
- public void onResume() {
- super.onResume();
- mBoard = new Board(this, null);
- setContentView(mBoard);
-
- mBoard.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener() {
- @Override
- public void onSystemUiVisibilityChange(int vis) {
- if (0 == (vis & View.SYSTEM_UI_FLAG_HIDE_NAVIGATION)) {
- Nyandroid.this.finish();
- }
- }
- });
- }
-
- @Override
- public void onUserInteraction() {
-// android.util.Log.d("Nyandroid", "finishing on user interaction");
- finish();
- }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/recent/Choreographer.java b/packages/SystemUI/src/com/android/systemui/recent/Choreographer.java
index dc2f0be..a8c2020 100644
--- a/packages/SystemUI/src/com/android/systemui/recent/Choreographer.java
+++ b/packages/SystemUI/src/com/android/systemui/recent/Choreographer.java
@@ -21,21 +21,21 @@
import android.animation.AnimatorSet.Builder;
import android.animation.ObjectAnimator;
import android.graphics.drawable.Drawable;
-import android.util.Log;
import android.util.Slog;
import android.view.View;
+import android.view.ViewRootImpl;
/* package */ class Choreographer implements Animator.AnimatorListener {
// should group this into a multi-property animation
private static final int OPEN_DURATION = 136;
- private static final int CLOSE_DURATION = 250;
+ private static final int CLOSE_DURATION = 130;
private static final int SCRIM_DURATION = 400;
private static final String TAG = RecentsPanelView.TAG;
private static final boolean DEBUG = RecentsPanelView.DEBUG;
boolean mVisible;
int mPanelHeight;
- View mRootView;
+ RecentsPanelView mRootView;
View mScrimView;
View mContentView;
View mNoRecentAppsView;
@@ -45,7 +45,7 @@
// the panel will start to appear this many px from the end
final int HYPERSPACE_OFFRAMP = 200;
- public Choreographer(View root, View scrim, View content,
+ public Choreographer(RecentsPanelView root, View scrim, View content,
View noRecentApps, Animator.AnimatorListener listener) {
mRootView = root;
mScrimView = scrim;
@@ -67,7 +67,7 @@
end = 0;
} else {
start = y;
- end = y + HYPERSPACE_OFFRAMP;
+ end = y;
}
Animator posAnim = ObjectAnimator.ofFloat(mContentView, "translationY",
@@ -77,12 +77,12 @@
: new android.view.animation.AccelerateInterpolator(2.5f));
posAnim.setDuration(appearing ? OPEN_DURATION : CLOSE_DURATION);
- Animator glowAnim = ObjectAnimator.ofFloat(mContentView, "alpha",
+ Animator fadeAnim = ObjectAnimator.ofFloat(mContentView, "alpha",
mContentView.getAlpha(), appearing ? 1.0f : 0.0f);
- glowAnim.setInterpolator(appearing
+ fadeAnim.setInterpolator(appearing
? new android.view.animation.AccelerateInterpolator(1.0f)
: new android.view.animation.DecelerateInterpolator(1.0f));
- glowAnim.setDuration(appearing ? OPEN_DURATION : CLOSE_DURATION);
+ fadeAnim.setDuration(appearing ? OPEN_DURATION : CLOSE_DURATION);
Animator noRecentAppsFadeAnim = null;
if (mNoRecentAppsView != null && // doesn't exist on large devices
@@ -96,7 +96,7 @@
}
mContentAnim = new AnimatorSet();
- final Builder builder = mContentAnim.play(glowAnim).with(posAnim);
+ final Builder builder = mContentAnim.play(fadeAnim).with(posAnim);
if (noRecentAppsFadeAnim != null) {
builder.with(noRecentAppsFadeAnim);
@@ -153,9 +153,10 @@
public void onAnimationEnd(Animator animation) {
if (DEBUG) Slog.d(TAG, "onAnimationEnd");
if (!mVisible) {
- mRootView.setVisibility(View.GONE);
+ mRootView.hideWindow();
}
mContentView.setLayerType(View.LAYER_TYPE_NONE, null);
+ mContentView.setAlpha(1f);
mContentAnim = null;
}
diff --git a/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java b/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java
index 995ee43..feb1ac8 100644
--- a/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java
+++ b/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java
@@ -26,7 +26,9 @@
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
+import android.graphics.Canvas;
import android.graphics.Matrix;
+import android.graphics.Rect;
import android.graphics.Shader.TileMode;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
@@ -48,11 +50,9 @@
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.FrameLayout;
-import android.widget.HorizontalScrollView;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;
import android.widget.PopupMenu;
-import android.widget.ScrollView;
import android.widget.TextView;
import com.android.systemui.R;
@@ -83,6 +83,9 @@
private Choreographer mChoreo;
OnRecentsPanelVisibilityChangedListener mVisibilityChangedListener;
+ ImageView mPlaceholderThumbnail;
+ boolean mHideWindowAfterPlaceholderThumbnailIsHidden;
+
private RecentTasksLoader mRecentTasksLoader;
private ArrayList<TaskDescription> mRecentTaskDescriptions;
private Runnable mPreloadTasksRunnable;
@@ -283,7 +286,9 @@
public void show(boolean show, boolean animate,
ArrayList<TaskDescription> recentTaskDescriptions, boolean firstScreenful) {
// For now, disable animations. We may want to re-enable in the future
- animate = false;
+ if (show) {
+ animate = false;
+ }
if (show) {
// Need to update list of recent apps before we set visibility so this view's
// content description is updated before it gets focus for TalkBack mode
@@ -687,11 +692,31 @@
context.getSystemService(Context.ACTIVITY_SERVICE);
holder.thumbnailViewImage.setDrawingCacheEnabled(true);
Bitmap bm = holder.thumbnailViewImage.getDrawingCache();
- ActivityOptions opts = ActivityOptions.makeThumbnailScaleUpAnimation(
+ mPlaceholderThumbnail = (ImageView) findViewById(R.id.recents_transition_placeholder_icon);
+
+ final ImageView placeholderThumbnail = mPlaceholderThumbnail;
+ mHideWindowAfterPlaceholderThumbnailIsHidden = false;
+ placeholderThumbnail.setVisibility(VISIBLE);
+ Bitmap b2 = bm.copy(bm.getConfig(), true);
+ placeholderThumbnail.setImageBitmap(b2);
+
+ Rect r = new Rect();
+ holder.thumbnailViewImage.getGlobalVisibleRect(r);
+
+ placeholderThumbnail.setTranslationX(r.left);
+ placeholderThumbnail.setTranslationY(r.top);
+
+ show(false, true);
+
+ ActivityOptions opts = ActivityOptions.makeDelayedThumbnailScaleUpAnimation(
holder.thumbnailViewImage, bm, 0, 0,
new ActivityOptions.OnAnimationStartedListener() {
@Override public void onAnimationStarted() {
- hide(true);
+ mPlaceholderThumbnail = null;
+ placeholderThumbnail.setVisibility(INVISIBLE);
+ if (mHideWindowAfterPlaceholderThumbnailIsHidden) {
+ hideWindow();
+ }
}
});
if (ad.taskId >= 0) {
@@ -709,6 +734,15 @@
holder.thumbnailViewImage.setDrawingCacheEnabled(false);
}
+ public void hideWindow() {
+ if (mPlaceholderThumbnail != null) {
+ mHideWindowAfterPlaceholderThumbnailIsHidden = true;
+ } else {
+ setVisibility(GONE);
+ mHideWindowAfterPlaceholderThumbnailIsHidden = false;
+ }
+ }
+
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
handleOnClick(view);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
index f0db2bce..a310b1d 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
@@ -20,6 +20,7 @@
import android.app.ActivityManagerNative;
import android.app.KeyguardManager;
+import android.app.Notification;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
@@ -34,6 +35,7 @@
import android.os.RemoteException;
import android.os.ServiceManager;
import android.provider.Settings;
+import android.text.TextUtils;
import android.util.Log;
import android.util.Slog;
import android.view.Display;
@@ -46,6 +48,7 @@
import android.view.ViewGroup.LayoutParams;
import android.view.WindowManager;
import android.view.WindowManagerImpl;
+import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RemoteViews;
import android.widget.PopupMenu;
@@ -61,6 +64,7 @@
import com.android.systemui.recent.RecentTasksLoader;
import com.android.systemui.recent.TaskDescription;
import com.android.systemui.statusbar.CommandQueue;
+import com.android.systemui.statusbar.policy.NotificationRowLayout;
import com.android.systemui.statusbar.tablet.StatusBarPanel;
import com.android.systemui.R;
@@ -76,11 +80,24 @@
protected static final int MSG_CANCEL_PRELOAD_RECENT_APPS = 1023;
protected static final int MSG_OPEN_SEARCH_PANEL = 1024;
protected static final int MSG_CLOSE_SEARCH_PANEL = 1025;
+ protected static final int MSG_SHOW_INTRUDER = 1026;
+ protected static final int MSG_HIDE_INTRUDER = 1027;
+
+ protected static final boolean ENABLE_INTRUDERS = false;
+
+ public static final int EXPANDED_LEAVE_ALONE = -10000;
+ public static final int EXPANDED_FULL_OPEN = -10001;
protected CommandQueue mCommandQueue;
protected IStatusBarService mBarService;
protected H mHandler = createHandler();
+ // all notifications
+ protected NotificationData mNotificationData = new NotificationData();
+ protected NotificationRowLayout mPile;
+
+ protected StatusBarNotification mCurrentlyIntrudingNotification;
+
// used to notify status bar for suppressing notification LED
protected boolean mPanelSlightlyVisible;
@@ -469,17 +486,7 @@
// for blaming (see SwipeHelper.setLongPressListener)
row.setTag(sbn.pkg);
- // XXX: temporary: while testing big notifications, auto-expand all of them
ViewGroup.LayoutParams lp = row.getLayoutParams();
- Boolean expandable = Boolean.FALSE;
- if (large != null) {
- lp.height = ViewGroup.LayoutParams.WRAP_CONTENT;
- expandable = Boolean.TRUE;
- } else {
- lp.height = rowHeight;
- }
- row.setLayoutParams(lp);
- row.setTag(R.id.expandable_tag, expandable);
workAroundBadLayerDrawableOpacity(row);
View vetoButton = updateNotificationVetoButton(row, sbn);
vetoButton.setContentDescription(mContext.getString(
@@ -545,10 +552,11 @@
applyLegacyRowBackground(sbn, content);
+ row.setTag(R.id.expandable_tag, Boolean.valueOf(large != null));
entry.row = row;
entry.content = content;
entry.expanded = expandedOneU;
- entry.expandedLarge = expandedOneU;
+ entry.setLargeView(expandedLarge);
return true;
}
@@ -633,4 +641,232 @@
}
}
+ /**
+ * Cancel this notification and tell the StatusBarManagerService / NotificationManagerService
+ * about the failure.
+ *
+ * WARNING: this will call back into us. Don't hold any locks.
+ */
+ void handleNotificationError(IBinder key, StatusBarNotification n, String message) {
+ removeNotification(key);
+ try {
+ mBarService.onNotificationError(n.pkg, n.tag, n.id, n.uid, n.initialPid, message);
+ } catch (RemoteException ex) {
+ // The end is nigh.
+ }
+ }
+
+ protected StatusBarNotification removeNotificationViews(IBinder key) {
+ NotificationData.Entry entry = mNotificationData.remove(key);
+ if (entry == null) {
+ Slog.w(TAG, "removeNotification for unknown key: " + key);
+ return null;
+ }
+ // Remove the expanded view.
+ ViewGroup rowParent = (ViewGroup)entry.row.getParent();
+ if (rowParent != null) rowParent.removeView(entry.row);
+ updateExpansionStates();
+ updateNotificationIcons();
+
+ return entry.notification;
+ }
+
+ protected StatusBarIconView addNotificationViews(IBinder key,
+ StatusBarNotification notification) {
+ if (DEBUG) {
+ Slog.d(TAG, "addNotificationViews(key=" + key + ", notification=" + notification);
+ }
+ // Construct the icon.
+ final StatusBarIconView iconView = new StatusBarIconView(mContext,
+ notification.pkg + "/0x" + Integer.toHexString(notification.id),
+ notification.notification);
+ iconView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
+
+ final StatusBarIcon ic = new StatusBarIcon(notification.pkg,
+ notification.notification.icon,
+ notification.notification.iconLevel,
+ notification.notification.number,
+ notification.notification.tickerText);
+ if (!iconView.set(ic)) {
+ handleNotificationError(key, notification, "Couldn't create icon: " + ic);
+ return null;
+ }
+ // Construct the expanded view.
+ NotificationData.Entry entry = new NotificationData.Entry(key, notification, iconView);
+ if (!inflateViews(entry, mPile)) {
+ handleNotificationError(key, notification, "Couldn't expand RemoteViews for: "
+ + notification);
+ return null;
+ }
+
+ // Add the expanded view and icon.
+ int pos = mNotificationData.add(entry);
+ if (DEBUG) {
+ Slog.d(TAG, "addNotificationViews: added at " + pos);
+ }
+ updateExpansionStates();
+ updateNotificationIcons();
+
+ return iconView;
+ }
+
+ protected boolean expandView(NotificationData.Entry entry, boolean expand) {
+ if (entry.expandable()) {
+ int rowHeight =
+ mContext.getResources().getDimensionPixelSize(R.dimen.notification_height);
+ ViewGroup.LayoutParams lp = entry.row.getLayoutParams();
+ if (expand) {
+ lp.height = ViewGroup.LayoutParams.WRAP_CONTENT;
+ } else {
+ lp.height = rowHeight;
+ }
+ entry.row.setLayoutParams(lp);
+ return expand;
+ } else {
+ return false;
+ }
+ }
+
+ protected void updateExpansionStates() {
+ int N = mNotificationData.size();
+ for (int i = 0; i < N; i++) {
+ NotificationData.Entry entry = mNotificationData.get(i);
+ if (i == (N-1)) {
+ if (DEBUG) Slog.d(TAG, "expanding top notification at " + i);
+ expandView(entry, true);
+ } else {
+ if (!entry.userExpanded()) {
+ if (DEBUG) Slog.d(TAG, "collapsing notification at " + i);
+ expandView(entry, false);
+ } else {
+ if (DEBUG) Slog.d(TAG, "ignoring user-modified notification at " + i);
+ }
+ }
+ }
+ }
+
+ protected abstract void haltTicker();
+ protected abstract void setAreThereNotifications();
+ protected abstract void updateNotificationIcons();
+ protected abstract void tick(IBinder key, StatusBarNotification n, boolean firstTime);
+ protected abstract void updateExpandedViewPos(int expandedPosition);
+ protected abstract int getExpandedViewMaxHeight();
+
+ protected boolean isTopNotification(ViewGroup parent, NotificationData.Entry entry) {
+ return parent.indexOfChild(entry.row) == 0;
+ }
+
+ public void updateNotification(IBinder key, StatusBarNotification notification) {
+ if (DEBUG) Slog.d(TAG, "updateNotification(" + key + " -> " + notification + ")");
+
+ final NotificationData.Entry oldEntry = mNotificationData.findByKey(key);
+ if (oldEntry == null) {
+ Slog.w(TAG, "updateNotification for unknown key: " + key);
+ return;
+ }
+
+ final StatusBarNotification oldNotification = oldEntry.notification;
+
+ // XXX: modify when we do something more intelligent with the two content views
+ final RemoteViews oldContentView = (oldNotification.notification.bigContentView != null)
+ ? oldNotification.notification.bigContentView
+ : oldNotification.notification.contentView;
+ final RemoteViews contentView = (notification.notification.bigContentView != null)
+ ? notification.notification.bigContentView
+ : notification.notification.contentView;
+
+ if (DEBUG) {
+ Slog.d(TAG, "old notification: when=" + oldNotification.notification.when
+ + " ongoing=" + oldNotification.isOngoing()
+ + " expanded=" + oldEntry.expanded
+ + " contentView=" + oldContentView
+ + " rowParent=" + oldEntry.row.getParent());
+ Slog.d(TAG, "new notification: when=" + notification.notification.when
+ + " ongoing=" + oldNotification.isOngoing()
+ + " contentView=" + contentView);
+ }
+
+ // Can we just reapply the RemoteViews in place? If when didn't change, the order
+ // didn't change.
+ boolean contentsUnchanged = oldEntry.expanded != null
+ && contentView != null && oldContentView != null
+ && contentView.getPackage() != null
+ && oldContentView.getPackage() != null
+ && oldContentView.getPackage().equals(contentView.getPackage())
+ && oldContentView.getLayoutId() == contentView.getLayoutId();
+ ViewGroup rowParent = (ViewGroup) oldEntry.row.getParent();
+ boolean orderUnchanged = notification.notification.when==oldNotification.notification.when
+ && notification.score == oldNotification.score;
+ // score now encompasses/supersedes isOngoing()
+
+ boolean updateTicker = notification.notification.tickerText != null
+ && !TextUtils.equals(notification.notification.tickerText,
+ oldEntry.notification.notification.tickerText);
+ boolean isTopAnyway = isTopNotification(rowParent, oldEntry);
+ if (contentsUnchanged && (orderUnchanged || isTopAnyway)) {
+ if (DEBUG) Slog.d(TAG, "reusing notification for key: " + key);
+ oldEntry.notification = notification;
+ try {
+ // Reapply the RemoteViews
+ contentView.reapply(mContext, oldEntry.content);
+ // update the contentIntent
+ final PendingIntent contentIntent = notification.notification.contentIntent;
+ if (contentIntent != null) {
+ final View.OnClickListener listener = makeClicker(contentIntent,
+ notification.pkg, notification.tag, notification.id);
+ oldEntry.content.setOnClickListener(listener);
+ } else {
+ oldEntry.content.setOnClickListener(null);
+ }
+ // Update the icon.
+ final StatusBarIcon ic = new StatusBarIcon(notification.pkg,
+ notification.notification.icon, notification.notification.iconLevel,
+ notification.notification.number,
+ notification.notification.tickerText);
+ if (!oldEntry.icon.set(ic)) {
+ handleNotificationError(key, notification, "Couldn't update icon: " + ic);
+ return;
+ }
+ updateExpansionStates();
+ }
+ catch (RuntimeException e) {
+ // It failed to add cleanly. Log, and remove the view from the panel.
+ Slog.w(TAG, "Couldn't reapply views for package " + contentView.getPackage(), e);
+ removeNotificationViews(key);
+ addNotificationViews(key, notification);
+ }
+ } else {
+ if (DEBUG) Slog.d(TAG, "not reusing notification for key: " + key);
+ if (DEBUG) Slog.d(TAG, "contents was " + (contentsUnchanged ? "unchanged" : "changed"));
+ if (DEBUG) Slog.d(TAG, "order was " + (orderUnchanged ? "unchanged" : "changed"));
+ if (DEBUG) Slog.d(TAG, "notification is " + (isTopAnyway ? "top" : "not top"));
+ removeNotificationViews(key);
+ addNotificationViews(key, notification);
+ }
+
+ // Update the veto button accordingly (and as a result, whether this row is
+ // swipe-dismissable)
+ updateNotificationVetoButton(oldEntry.row, notification);
+
+ // Restart the ticker if it's still running
+ if (updateTicker) {
+ haltTicker();
+ tick(key, notification, false);
+ }
+
+ // Recalculate the position of the sliding windows and the titles.
+ setAreThereNotifications();
+ updateExpandedViewPos(EXPANDED_LEAVE_ALONE);
+
+ // See if we need to update the intruder.
+ if (ENABLE_INTRUDERS && oldNotification == mCurrentlyIntrudingNotification) {
+ if (DEBUG) Slog.d(TAG, "updating the current intruder:" + notification);
+ // XXX: this is a hack for Alarms. The real implementation will need to *update*
+ // the intruder.
+ if (notification.notification.fullScreenIntent == null) { // TODO(dsandler): consistent logic with add()
+ if (DEBUG) Slog.d(TAG, "no longer intrudes!");
+ mHandler.sendEmptyMessage(MSG_HIDE_INTRUDER);
+ }
+ }
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationData.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationData.java
index 3ff85d9..1a07ed3 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationData.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationData.java
@@ -22,6 +22,7 @@
import android.widget.ImageView;
import com.android.internal.statusbar.StatusBarNotification;
+import com.android.systemui.R;
import java.util.Comparator;
import java.util.ArrayList;
@@ -38,13 +39,32 @@
public View content; // takes the click events and sends the PendingIntent
public View expanded; // the inflated RemoteViews
public ImageView largeIcon;
- public View expandedLarge;
+ protected View expandedLarge;
public Entry() {}
public Entry(IBinder key, StatusBarNotification n, StatusBarIconView ic) {
this.key = key;
this.notification = n;
this.icon = ic;
}
+ public void setLargeView(View expandedLarge) {
+ this.expandedLarge = expandedLarge;
+ writeBooleanTag(row, R.id.expandable_tag, expandedLarge != null);
+ }
+ public View getLargeView() {
+ return expandedLarge;
+ }
+ /**
+ * Return whether the entry can be expanded.
+ */
+ public boolean expandable() {
+ return NotificationData.getIsExpandable(row);
+ }
+ /**
+ * Return whether the entry has been manually expanded by the user.
+ */
+ public boolean userExpanded() {
+ return NotificationData.getUserExpanded(row);
+ }
}
private final ArrayList<Entry> mEntries = new ArrayList<Entry>();
private final Comparator<Entry> mEntryCmp = new Comparator<Entry>() {
@@ -134,4 +154,41 @@
}
return false;
}
+
+ protected static boolean readBooleanTag(View view, int id) {
+ if (view != null) {
+ Object value = view.getTag(id);
+ return value != null && value instanceof Boolean && ((Boolean) value).booleanValue();
+ }
+ return false;
+ }
+
+ protected static boolean writeBooleanTag(View view, int id, boolean value) {
+ if (view != null) {
+ view.setTag(id, Boolean.valueOf(value));
+ return value;
+ }
+ return false;
+ }
+
+ /**
+ * Return whether the entry can be expanded.
+ */
+ public static boolean getIsExpandable(View row) {
+ return readBooleanTag(row, R.id.expandable_tag);
+ }
+
+ /**
+ * Return whether the entry has been manually expanded by the user.
+ */
+ public static boolean getUserExpanded(View row) {
+ return readBooleanTag(row, R.id.user_expanded_tag);
+ }
+
+ /**
+ * Set whether the entry has been manually expanded by the user.
+ */
+ public static boolean setUserExpanded(View row, boolean userExpanded) {
+ return writeBooleanTag(row, R.id.user_expanded_tag, userExpanded);
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
index f5f2e28..d3fbdab 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
@@ -42,7 +42,6 @@
import android.os.ServiceManager;
import android.os.SystemClock;
import android.provider.Settings;
-import android.text.TextUtils;
import android.util.DisplayMetrics;
import android.util.Log;
import android.util.Slog;
@@ -105,16 +104,10 @@
public static final String ACTION_STATUSBAR_START
= "com.android.internal.policy.statusbar.START";
- private static final boolean ENABLE_INTRUDERS = false;
private static final boolean DIM_BEHIND_EXPANDED_PANEL = false;
- static final int EXPANDED_LEAVE_ALONE = -10000;
- static final int EXPANDED_FULL_OPEN = -10001;
-
private static final int MSG_OPEN_NOTIFICATION_PANEL = 1000;
private static final int MSG_CLOSE_NOTIFICATION_PANEL = 1001;
- private static final int MSG_SHOW_INTRUDER = 1002;
- private static final int MSG_HIDE_INTRUDER = 1003;
// 1020-1030 reserved for BaseStatusBar
// will likely move to a resource or other tunable param at some point
@@ -179,10 +172,6 @@
CloseDragHandle mCloseView;
private int mCloseViewHeight;
- // all notifications
- NotificationData mNotificationData = new NotificationData();
- NotificationRowLayout mPile;
-
// position
int[] mPositionTmp = new int[2];
boolean mExpanded;
@@ -519,7 +508,7 @@
toggleRecentApps();
}
};
- private StatusBarNotification mCurrentlyIntrudingNotification;
+
View.OnTouchListener mHomeSearchActionListener = new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
switch(event.getAction()) {
@@ -693,7 +682,7 @@
// show the ticker if there isn't an intruder too
if (mCurrentlyIntrudingNotification == null) {
- tick(notification);
+ tick(null, notification, true);
}
}
@@ -702,117 +691,6 @@
updateExpandedViewPos(EXPANDED_LEAVE_ALONE);
}
- public void updateNotification(IBinder key, StatusBarNotification notification) {
- if (DEBUG) Slog.d(TAG, "updateNotification(" + key + " -> " + notification + ")");
-
- final NotificationData.Entry oldEntry = mNotificationData.findByKey(key);
- if (oldEntry == null) {
- Slog.w(TAG, "updateNotification for unknown key: " + key);
- return;
- }
-
- final StatusBarNotification oldNotification = oldEntry.notification;
-
- // XXX: modify when we do something more intelligent with the two content views
- final RemoteViews oldContentView = (oldNotification.notification.bigContentView != null)
- ? oldNotification.notification.bigContentView
- : oldNotification.notification.contentView;
- final RemoteViews contentView = (notification.notification.bigContentView != null)
- ? notification.notification.bigContentView
- : notification.notification.contentView;
-
- if (DEBUG) {
- Slog.d(TAG, "old notification: when=" + oldNotification.notification.when
- + " ongoing=" + oldNotification.isOngoing()
- + " expanded=" + oldEntry.expanded
- + " contentView=" + oldContentView
- + " rowParent=" + oldEntry.row.getParent());
- Slog.d(TAG, "new notification: when=" + notification.notification.when
- + " ongoing=" + oldNotification.isOngoing()
- + " contentView=" + contentView);
- }
-
-
- // Can we just reapply the RemoteViews in place? If when didn't change, the order
- // didn't change.
- boolean contentsUnchanged = oldEntry.expanded != null
- && contentView != null && oldContentView != null
- && contentView.getPackage() != null
- && oldContentView.getPackage() != null
- && oldContentView.getPackage().equals(contentView.getPackage())
- && oldContentView.getLayoutId() == contentView.getLayoutId();
- ViewGroup rowParent = (ViewGroup) oldEntry.row.getParent();
- boolean orderUnchanged = notification.notification.when==oldNotification.notification.when
- && notification.score == oldNotification.score;
- // score now encompasses/supersedes isOngoing()
-
- boolean updateTicker = notification.notification.tickerText != null
- && !TextUtils.equals(notification.notification.tickerText,
- oldEntry.notification.notification.tickerText);
- boolean isFirstAnyway = rowParent.indexOfChild(oldEntry.row) == 0;
- if (contentsUnchanged && (orderUnchanged || isFirstAnyway)) {
- if (DEBUG) Slog.d(TAG, "reusing notification for key: " + key);
- oldEntry.notification = notification;
- try {
- // Reapply the RemoteViews
- contentView.reapply(mContext, oldEntry.content);
- // update the contentIntent
- final PendingIntent contentIntent = notification.notification.contentIntent;
- if (contentIntent != null) {
- final View.OnClickListener listener = new NotificationClicker(contentIntent,
- notification.pkg, notification.tag, notification.id);
- oldEntry.content.setOnClickListener(listener);
- } else {
- oldEntry.content.setOnClickListener(null);
- }
- // Update the icon.
- final StatusBarIcon ic = new StatusBarIcon(notification.pkg,
- notification.notification.icon, notification.notification.iconLevel,
- notification.notification.number,
- notification.notification.tickerText);
- if (!oldEntry.icon.set(ic)) {
- handleNotificationError(key, notification, "Couldn't update icon: " + ic);
- return;
- }
- }
- catch (RuntimeException e) {
- // It failed to add cleanly. Log, and remove the view from the panel.
- Slog.w(TAG, "Couldn't reapply views for package " + contentView.getPackage(), e);
- removeNotificationViews(key);
- addNotificationViews(key, notification);
- }
- } else {
- if (SPEW) Slog.d(TAG, "not reusing notification");
- removeNotificationViews(key);
- addNotificationViews(key, notification);
- }
-
- // Update the veto button accordingly (and as a result, whether this row is
- // swipe-dismissable)
- updateNotificationVetoButton(oldEntry.row, notification);
-
- // Restart the ticker if it's still running
- if (updateTicker) {
- mTicker.halt();
- tick(notification);
- }
-
- // Recalculate the position of the sliding windows and the titles.
- setAreThereNotifications();
- updateExpandedViewPos(EXPANDED_LEAVE_ALONE);
-
- // See if we need to update the intruder.
- if (ENABLE_INTRUDERS && oldNotification == mCurrentlyIntrudingNotification) {
- if (DEBUG) Slog.d(TAG, "updating the current intruder:" + notification);
- // XXX: this is a hack for Alarms. The real implementation will need to *update*
- // the intruder.
- if (notification.notification.fullScreenIntent == null) { // TODO(dsandler): consistent logic with add()
- if (DEBUG) Slog.d(TAG, "no longer intrudes!");
- mHandler.sendEmptyMessage(MSG_HIDE_INTRUDER);
- }
- }
- }
-
public void removeNotification(IBinder key) {
StatusBarNotification old = removeNotificationViews(key);
if (SPEW) Slog.d(TAG, "removeNotification key=" + key + " old=" + old);
@@ -841,44 +719,6 @@
updateRecentsPanel();
}
-
- StatusBarIconView addNotificationViews(IBinder key, StatusBarNotification notification) {
- if (DEBUG) {
- Slog.d(TAG, "addNotificationViews(key=" + key + ", notification=" + notification);
- }
- // Construct the icon.
- final StatusBarIconView iconView = new StatusBarIconView(mContext,
- notification.pkg + "/0x" + Integer.toHexString(notification.id),
- notification.notification);
- iconView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
-
- final StatusBarIcon ic = new StatusBarIcon(notification.pkg,
- notification.notification.icon,
- notification.notification.iconLevel,
- notification.notification.number,
- notification.notification.tickerText);
- if (!iconView.set(ic)) {
- handleNotificationError(key, notification, "Couldn't create icon: " + ic);
- return null;
- }
- // Construct the expanded view.
- NotificationData.Entry entry = new NotificationData.Entry(key, notification, iconView);
- if (!inflateViews(entry, mPile)) {
- handleNotificationError(key, notification, "Couldn't expand RemoteViews for: "
- + notification);
- return null;
- }
-
- // Add the expanded view and icon.
- int pos = mNotificationData.add(entry);
- if (DEBUG) {
- Slog.d(TAG, "addNotificationViews: added at " + pos);
- }
- updateNotificationIcons();
-
- return iconView;
- }
-
private void loadNotificationShade() {
int N = mNotificationData.size();
@@ -915,7 +755,8 @@
updateNotificationIcons();
}
- private void updateNotificationIcons() {
+ @Override
+ protected void updateNotificationIcons() {
loadNotificationShade();
final LinearLayout.LayoutParams params
@@ -956,21 +797,8 @@
}
}
- StatusBarNotification removeNotificationViews(IBinder key) {
- NotificationData.Entry entry = mNotificationData.remove(key);
- if (entry == null) {
- Slog.w(TAG, "removeNotification for unknown key: " + key);
- return null;
- }
- // Remove the expanded view.
- ViewGroup rowParent = (ViewGroup)entry.row.getParent();
- if (rowParent != null) rowParent.removeView(entry.row);
- updateNotificationIcons();
-
- return entry.notification;
- }
-
- private void setAreThereNotifications() {
+ @Override
+ protected void setAreThereNotifications() {
final boolean any = mNotificationData.size() > 0;
final boolean clearable = any && mNotificationData.hasClearableItems();
@@ -1754,7 +1582,8 @@
}
}
- private void tick(StatusBarNotification n) {
+ @Override
+ protected void tick(IBinder key, StatusBarNotification n, boolean firstTime) {
// no ticking in lights-out mode
if (!areLightsOn()) return;
@@ -1770,21 +1599,6 @@
}
}
- /**
- * Cancel this notification and tell the StatusBarManagerService / NotificationManagerService
- * about the failure.
- *
- * WARNING: this will call back into us. Don't hold any locks.
- */
- void handleNotificationError(IBinder key, StatusBarNotification n, String message) {
- removeNotification(key);
- try {
- mBarService.onNotificationError(n.pkg, n.tag, n.id, n.uid, n.initialPid, message);
- } catch (RemoteException ex) {
- // The end is nigh.
- }
- }
-
private class MyTicker extends Ticker {
MyTicker(Context context, View sb) {
super(context, sb);
@@ -1957,11 +1771,13 @@
return a < 0f ? 0f : (a > 1f ? 1f : a);
}
- int getExpandedViewMaxHeight() {
+ @Override
+ protected int getExpandedViewMaxHeight() {
return mDisplayMetrics.heightPixels - mNotificationPanelMarginBottomPx;
}
- void updateExpandedViewPos(int expandedPosition) {
+ @Override
+ protected void updateExpandedViewPos(int expandedPosition) {
if (SPEW) {
Slog.d(TAG, "updateExpandedViewPos before expandedPosition=" + expandedPosition
//+ " mTrackingParams.y=" + ((mTrackingParams == null) ? "?" : mTrackingParams.y)
@@ -2288,5 +2104,10 @@
vibrate();
}
};
+
+ @Override
+ protected void haltTicker() {
+ mTicker.halt();
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java
index a8f5c64..a9cc62a4d6 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java
@@ -31,6 +31,7 @@
import android.widget.FrameLayout;
import com.android.systemui.R;
+import com.android.systemui.statusbar.BaseStatusBar;
import com.android.systemui.statusbar.policy.FixedSizeDrawable;
public class PhoneStatusBarView extends FrameLayout {
@@ -95,7 +96,7 @@
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
- mService.updateExpandedViewPos(PhoneStatusBar.EXPANDED_LEAVE_ALONE);
+ mService.updateExpandedViewPos(BaseStatusBar.EXPANDED_LEAVE_ALONE);
}
@Override
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NotificationRowLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NotificationRowLayout.java
index 03dfd1c..0fe7a0a 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NotificationRowLayout.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NotificationRowLayout.java
@@ -39,6 +39,7 @@
import com.android.systemui.Gefingerpoken;
import com.android.systemui.R;
import com.android.systemui.SwipeHelper;
+import com.android.systemui.statusbar.NotificationData;
import java.util.HashMap;
@@ -175,9 +176,11 @@
}
public boolean canChildBeExpanded(View v) {
- Object isExpandable = v.getTag(R.id.expandable_tag);
- return isExpandable != null && isExpandable instanceof Boolean &&
- ((Boolean)isExpandable).booleanValue();
+ return NotificationData.getIsExpandable(v);
+ }
+
+ public boolean setUserExpandedChild(View v, boolean userExpanded) {
+ return NotificationData.setUserExpanded(v, userExpanded);
}
public void onChildDismissed(View v) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java
index b0830ee..906d1aa 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java
@@ -109,7 +109,6 @@
private static final boolean FAKE_SPACE_BAR = true;
// Notification "peeking" (flyover preview of individual notifications)
- final static boolean NOTIFICATION_PEEK_ENABLED = false;
final static int NOTIFICATION_PEEK_HOLD_THRESH = 200; // ms
final static int NOTIFICATION_PEEK_FADE_DELAY = 3000; // ms
@@ -127,9 +126,6 @@
IWindowManager mWindowManager;
- // tracking all current notifications
- private NotificationData mNotificationData = new NotificationData();
-
TabletStatusBarView mStatusBarView;
View mNotificationArea;
View mNotificationTrigger;
@@ -160,8 +156,6 @@
int mNotificationPeekTapDuration;
int mNotificationFlingVelocity;
- NotificationRowLayout mPile;
-
BatteryController mBatteryController;
BluetoothController mBluetoothController;
LocationController mLocationController;
@@ -290,47 +284,6 @@
WindowManagerImpl.getDefault().addView(mNotificationPanel, lp);
- // Notification preview window
- if (NOTIFICATION_PEEK_ENABLED) {
- mNotificationPeekWindow = (NotificationPeekPanel) View.inflate(context,
- R.layout.system_bar_notification_peek, null);
- mNotificationPeekWindow.setBar(this);
-
- mNotificationPeekRow = (ViewGroup) mNotificationPeekWindow.findViewById(R.id.content);
- mNotificationPeekWindow.setVisibility(View.GONE);
- mNotificationPeekWindow.setOnTouchListener(
- new TouchOutsideListener(MSG_CLOSE_NOTIFICATION_PEEK, mNotificationPeekWindow));
- mNotificationPeekScrubRight = new LayoutTransition();
- mNotificationPeekScrubRight.setAnimator(LayoutTransition.APPEARING,
- ObjectAnimator.ofInt(null, "left", -512, 0));
- mNotificationPeekScrubRight.setAnimator(LayoutTransition.DISAPPEARING,
- ObjectAnimator.ofInt(null, "left", -512, 0));
- mNotificationPeekScrubRight.setDuration(500);
-
- mNotificationPeekScrubLeft = new LayoutTransition();
- mNotificationPeekScrubLeft.setAnimator(LayoutTransition.APPEARING,
- ObjectAnimator.ofInt(null, "left", 512, 0));
- mNotificationPeekScrubLeft.setAnimator(LayoutTransition.DISAPPEARING,
- ObjectAnimator.ofInt(null, "left", 512, 0));
- mNotificationPeekScrubLeft.setDuration(500);
-
- // XXX: setIgnoreChildren?
- lp = new WindowManager.LayoutParams(
- 512, // ViewGroup.LayoutParams.WRAP_CONTENT,
- ViewGroup.LayoutParams.WRAP_CONTENT,
- WindowManager.LayoutParams.TYPE_STATUS_BAR_PANEL,
- WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS
- | WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM
- | WindowManager.LayoutParams.FLAG_SPLIT_TOUCH,
- PixelFormat.TRANSLUCENT);
- lp.gravity = Gravity.BOTTOM | Gravity.RIGHT;
- lp.y = res.getDimensionPixelOffset(R.dimen.peek_window_y_offset);
- lp.setTitle("NotificationPeekWindow");
- lp.windowAnimations = com.android.internal.R.style.Animation_Toast;
-
- WindowManagerImpl.getDefault().addView(mNotificationPeekWindow, lp);
- }
-
// Recents Panel
mRecentTasksLoader = new RecentTasksLoader(context);
updateRecentsPanel();
@@ -395,6 +348,11 @@
scroller.setFillViewport(true);
}
+ @Override
+ protected int getExpandedViewMaxHeight() {
+ return getNotificationPanelHeight();
+ }
+
private int getNotificationPanelHeight() {
final Resources res = mContext.getResources();
final Display d = WindowManagerImpl.getDefault().getDefaultDisplay();
@@ -494,24 +452,16 @@
// the whole right-hand side of the bar
mNotificationArea = sb.findViewById(R.id.notificationArea);
- if (!NOTIFICATION_PEEK_ENABLED) {
- mNotificationArea.setOnTouchListener(new NotificationTriggerTouchListener());
- }
+ mNotificationArea.setOnTouchListener(new NotificationTriggerTouchListener());
// the button to open the notification area
mNotificationTrigger = sb.findViewById(R.id.notificationTrigger);
- if (NOTIFICATION_PEEK_ENABLED) {
- mNotificationTrigger.setOnTouchListener(new NotificationTriggerTouchListener());
- }
// the more notifications icon
mNotificationIconArea = (NotificationIconArea)sb.findViewById(R.id.notificationIcons);
// where the icons go
mIconLayout = (NotificationIconArea.IconLayout) sb.findViewById(R.id.icons);
- if (NOTIFICATION_PEEK_ENABLED) {
- mIconLayout.setOnTouchListener(new NotificationIconTouchListener());
- }
ViewConfiguration vc = ViewConfiguration.get(context);
mNotificationPeekTapDuration = vc.getTapTimeout();
@@ -827,9 +777,6 @@
case MSG_OPEN_NOTIFICATION_PANEL:
if (DEBUG) Slog.d(TAG, "opening notifications panel");
if (!mNotificationPanel.isShowing()) {
- if (NOTIFICATION_PEEK_ENABLED) {
- mNotificationPeekWindow.setVisibility(View.GONE);
- }
mNotificationPanel.show(true, true);
mNotificationArea.setVisibility(View.INVISIBLE);
mTicker.halt();
@@ -916,106 +863,6 @@
setAreThereNotifications();
}
- public void updateNotification(IBinder key, StatusBarNotification notification) {
- if (DEBUG) Slog.d(TAG, "updateNotification(" + key + " -> " + notification + ")");
-
- final NotificationData.Entry oldEntry = mNotificationData.findByKey(key);
- if (oldEntry == null) {
- Slog.w(TAG, "updateNotification for unknown key: " + key);
- return;
- }
-
- final StatusBarNotification oldNotification = oldEntry.notification;
-
- // XXX: modify when we do something more intelligent with the two content views
- final RemoteViews oldContentView = (oldNotification.notification.bigContentView != null)
- ? oldNotification.notification.bigContentView
- : oldNotification.notification.contentView;
- final RemoteViews contentView = (notification.notification.bigContentView != null)
- ? notification.notification.bigContentView
- : notification.notification.contentView;
-
- if (DEBUG) {
- Slog.d(TAG, "old notification: when=" + oldNotification.notification.when
- + " ongoing=" + oldNotification.isOngoing()
- + " expanded=" + oldEntry.expanded
- + " contentView=" + oldContentView
- + " rowParent=" + oldEntry.row.getParent());
- Slog.d(TAG, "new notification: when=" + notification.notification.when
- + " ongoing=" + oldNotification.isOngoing()
- + " contentView=" + contentView);
- }
-
- // Can we just reapply the RemoteViews in place? If when didn't change, the order
- // didn't change.
- boolean contentsUnchanged = oldEntry.expanded != null
- && contentView != null && oldContentView != null
- && contentView.getPackage() != null
- && oldContentView.getPackage() != null
- && oldContentView.getPackage().equals(contentView.getPackage())
- && oldContentView.getLayoutId() == contentView.getLayoutId();
- ViewGroup rowParent = (ViewGroup) oldEntry.row.getParent();
- boolean orderUnchanged = notification.notification.when==oldNotification.notification.when
- && notification.score == oldNotification.score;
- // score now encompasses/supersedes isOngoing()
- boolean updateTicker = notification.notification.tickerText != null
- && !TextUtils.equals(notification.notification.tickerText,
- oldEntry.notification.notification.tickerText);
- boolean isLastAnyway = rowParent.indexOfChild(oldEntry.row) == rowParent.getChildCount()-1;
- if (contentsUnchanged && (orderUnchanged || isLastAnyway)) {
- if (DEBUG) Slog.d(TAG, "reusing notification for key: " + key);
- oldEntry.notification = notification;
- try {
- // Reapply the RemoteViews
- contentView.reapply(mContext, oldEntry.content);
- // update the contentIntent
- final PendingIntent contentIntent = notification.notification.contentIntent;
- if (contentIntent != null) {
- final View.OnClickListener listener = makeClicker(contentIntent,
- notification.pkg, notification.tag, notification.id);
- oldEntry.content.setOnClickListener(listener);
- } else {
- oldEntry.content.setOnClickListener(null);
- }
- // Update the icon.
- final StatusBarIcon ic = new StatusBarIcon(notification.pkg,
- notification.notification.icon, notification.notification.iconLevel,
- notification.notification.number,
- notification.notification.tickerText);
- if (!oldEntry.icon.set(ic)) {
- handleNotificationError(key, notification, "Couldn't update icon: " + ic);
- return;
- }
-
- if (NOTIFICATION_PEEK_ENABLED && key == mNotificationPeekKey) {
- // must update the peek window
- Message peekMsg = mHandler.obtainMessage(MSG_OPEN_NOTIFICATION_PEEK);
- peekMsg.arg1 = mNotificationPeekIndex;
- mHandler.removeMessages(MSG_OPEN_NOTIFICATION_PEEK);
- mHandler.sendMessage(peekMsg);
- }
- }
- catch (RuntimeException e) {
- // It failed to add cleanly. Log, and remove the view from the panel.
- Slog.w(TAG, "Couldn't reapply views for package " + contentView.getPackage(), e);
- removeNotificationViews(key);
- addNotificationViews(key, notification);
- }
- } else {
- if (DEBUG) Slog.d(TAG, "not reusing notification for key: " + key);
- removeNotificationViews(key);
- addNotificationViews(key, notification);
- }
-
- // Restart the ticker if it's still running
- if (updateTicker) {
- mTicker.halt();
- tick(key, notification, false);
- }
-
- setAreThereNotifications();
- }
-
public void removeNotification(IBinder key) {
if (DEBUG) Slog.d(TAG, "removeNotification(" + key + ")");
removeNotificationViews(key);
@@ -1105,7 +952,8 @@
return n.tickerView != null || !TextUtils.isEmpty(n.tickerText);
}
- private void tick(IBinder key, StatusBarNotification n, boolean firstTime) {
+ @Override
+ protected void tick(IBinder key, StatusBarNotification n, boolean firstTime) {
// Don't show the ticker when the windowshade is open.
if (mNotificationPanel.isShowing()) {
return;
@@ -1134,11 +982,6 @@
}
public void animateExpand() {
- if (NOTIFICATION_PEEK_ENABLED) {
- mHandler.removeMessages(MSG_CLOSE_NOTIFICATION_PEEK);
- mHandler.removeMessages(MSG_OPEN_NOTIFICATION_PEEK);
- mHandler.sendEmptyMessage(MSG_CLOSE_NOTIFICATION_PEEK);
- }
mHandler.removeMessages(MSG_OPEN_NOTIFICATION_PANEL);
mHandler.sendEmptyMessage(MSG_OPEN_NOTIFICATION_PANEL);
}
@@ -1158,10 +1001,6 @@
mHandler.sendEmptyMessage(MSG_CLOSE_INPUT_METHODS_PANEL);
mHandler.removeMessages(MSG_CLOSE_COMPAT_MODE_PANEL);
mHandler.sendEmptyMessage(MSG_CLOSE_COMPAT_MODE_PANEL);
- if (NOTIFICATION_PEEK_ENABLED) {
- mHandler.removeMessages(MSG_CLOSE_NOTIFICATION_PEEK);
- mHandler.sendEmptyMessage(MSG_CLOSE_NOTIFICATION_PEEK);
- }
}
@Override // CommandQueue
@@ -1350,24 +1189,13 @@
}
}
- private void setAreThereNotifications() {
+ @Override
+ protected void setAreThereNotifications() {
if (mNotificationPanel != null) {
mNotificationPanel.setClearable(mNotificationData.hasClearableItems());
}
}
- /**
- * Cancel this notification and tell the status bar service about the failure. Hold no locks.
- */
- void handleNotificationError(IBinder key, StatusBarNotification n, String message) {
- removeNotification(key);
- try {
- mBarService.onNotificationError(n.pkg, n.tag, n.id, n.uid, n.initialPid, message);
- } catch (RemoteException ex) {
- // The end is nigh.
- }
- }
-
private View.OnClickListener mOnClickListener = new View.OnClickListener() {
public void onClick(View v) {
if (v == mRecentButton) {
@@ -1405,28 +1233,6 @@
mHandler.sendEmptyMessage(msg);
}
- StatusBarNotification removeNotificationViews(IBinder key) {
- NotificationData.Entry entry = mNotificationData.remove(key);
- if (entry == null) {
- Slog.w(TAG, "removeNotification for unknown key: " + key);
- return null;
- }
- // Remove the expanded view.
- ViewGroup rowParent = (ViewGroup)entry.row.getParent();
- if (rowParent != null) rowParent.removeView(entry.row);
-
- if (NOTIFICATION_PEEK_ENABLED && key == mNotificationPeekKey) {
- // must close the peek as well, since it's gone
- mHandler.sendEmptyMessage(MSG_CLOSE_NOTIFICATION_PEEK);
- }
- // Remove the icon.
-// ViewGroup iconParent = (ViewGroup)entry.icon.getParent();
-// if (iconParent != null) iconParent.removeView(entry.icon);
- updateNotificationIcons();
-
- return entry.notification;
- }
-
private class NotificationTriggerTouchListener implements View.OnTouchListener {
VelocityTracker mVT;
float mInitialTouchX, mInitialTouchY;
@@ -1619,50 +1425,14 @@
}
}
- StatusBarIconView addNotificationViews(IBinder key, StatusBarNotification notification) {
- if (DEBUG) {
- Slog.d(TAG, "addNotificationViews(key=" + key + ", notification=" + notification);
- }
- // Construct the icon.
- final StatusBarIconView iconView = new StatusBarIconView(mContext,
- notification.pkg + "/0x" + Integer.toHexString(notification.id),
- notification.notification);
- iconView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
-
- final StatusBarIcon ic = new StatusBarIcon(notification.pkg,
- notification.notification.icon,
- notification.notification.iconLevel,
- notification.notification.number,
- notification.notification.tickerText);
- if (!iconView.set(ic)) {
- handleNotificationError(key, notification, "Couldn't attach StatusBarIcon: " + ic);
- return null;
- }
- // Construct the expanded view.
- NotificationData.Entry entry = new NotificationData.Entry(key, notification, iconView);
- if (!inflateViews(entry, mPile)) {
- handleNotificationError(key, notification, "Couldn't expand RemoteViews for: "
- + notification);
- return null;
- }
-
- // Add the icon.
- int pos = mNotificationData.add(entry);
- if (DEBUG) {
- Slog.d(TAG, "addNotificationViews: added at " + pos);
- }
- updateNotificationIcons();
-
- return iconView;
- }
-
private void reloadAllNotificationIcons() {
if (mIconLayout == null) return;
mIconLayout.removeAllViews();
updateNotificationIcons();
}
- private void updateNotificationIcons() {
+ @Override
+ protected void updateNotificationIcons() {
// XXX: need to implement a new limited linear layout class
// to avoid removing & readding everything
@@ -1835,6 +1605,19 @@
mNetworkController.dump(fd, pw, args);
}
+ @Override
+ protected boolean isTopNotification(ViewGroup parent, NotificationData.Entry entry) {
+ return parent.indexOfChild(entry.row) == parent.getChildCount()-1;
+ }
+
+ @Override
+ protected void haltTicker() {
+ mTicker.halt();
+ }
+
+ @Override
+ protected void updateExpandedViewPos(int expandedPosition) {
+ }
}
diff --git a/policy/src/com/android/internal/policy/impl/FaceUnlock.java b/policy/src/com/android/internal/policy/impl/FaceUnlock.java
index 6590fb3..ffdeeb1 100644
--- a/policy/src/com/android/internal/policy/impl/FaceUnlock.java
+++ b/policy/src/com/android/internal/policy/impl/FaceUnlock.java
@@ -170,11 +170,6 @@
Log.w(TAG, "Attempt to bind to Face Unlock when already bound");
}
- // When switching between portrait and landscape view while Face Unlock is running, the
- // screen will eventually go dark unless we poke the wakelock when Face Unlock is
- // restarted
- mKeyguardScreenCallback.pokeWakelock();
-
mIsRunning = true;
return true;
}
@@ -268,7 +263,7 @@
handleExposeFallback();
break;
case MSG_POKE_WAKELOCK:
- handlePokeWakelock();
+ handlePokeWakelock(msg.arg1);
break;
default:
Log.e(TAG, "Unhandled message");
@@ -320,6 +315,11 @@
if (mFaceUnlockView != null) {
IBinder windowToken = mFaceUnlockView.getWindowToken();
if (windowToken != null) {
+ // When switching between portrait and landscape view while Face Unlock is running,
+ // the screen will eventually go dark unless we poke the wakelock when Face Unlock
+ // is restarted.
+ mKeyguardScreenCallback.pokeWakelock();
+
int[] position;
position = new int[2];
mFaceUnlockView.getLocationInWindow(position);
@@ -366,7 +366,7 @@
/**
* Stops the Face Unlock service and exposes the backup lock. Called when the user presses the
- * cancel button to skip Face Unlock or no face is detected.
+ * cancel button to skip Face Unlock, no face is detected or there is an error.
*/
void handleCancel() {
if (DEBUG) Log.d(TAG, "handleCancel()");
@@ -410,10 +410,10 @@
}
/**
- * Pokes the wakelock to keep the screen alive and active.
+ * Pokes the wakelock to keep the screen alive and active for a specific amount of time.
*/
- void handlePokeWakelock() {
- mKeyguardScreenCallback.pokeWakelock();
+ void handlePokeWakelock(int millis) {
+ mKeyguardScreenCallback.pokeWakelock(millis);
}
/**
@@ -453,13 +453,27 @@
* Tells the Face Unlock service to start displaying its UI and start processing.
*/
private void startUi(IBinder windowToken, int x, int y, int w, int h) {
- if (DEBUG) Log.d(TAG, "startUi()");
+ Log.d(TAG, "startUi()");
synchronized (mServiceRunningLock) {
if (!mServiceRunning) {
if (DEBUG) Log.d(TAG, "Starting Face Unlock");
try {
+ // TODO: these checks and logs are for tracking down bug 6409767 and can be
+ // removed when that bug is fixed.
+ if (mService == null) {
+ Log.d(TAG, "mService is null");
+ }
+ if (windowToken == null) {
+ Log.d(TAG, "windowToken is null");
+ }
+ if (mLockPatternUtils == null) {
+ Log.d(TAG, "mLockPatternUtils is null");
+ }
+ Log.d(TAG, "x,y,w,h,live: " + x + "," + y + "," + w + "," + h + "," +
+ (mLockPatternUtils.isBiometricWeakLivelinessEnabled()?"yes":"no"));
mService.startUi(windowToken, x, y, w, h,
mLockPatternUtils.isBiometricWeakLivelinessEnabled());
+ Log.d(TAG, "mService.startUi() called");
} catch (RemoteException e) {
Log.e(TAG, "Caught exception starting Face Unlock: " + e.toString());
return;
@@ -511,7 +525,8 @@
}
/**
- * Called when the user presses cancel to skip Face Unlock or a face cannot be found.
+ * Called when the user presses cancel to skip Face Unlock, a face cannot be found or
+ * there is an error.
*/
@Override
public void cancel() {
@@ -540,12 +555,14 @@
}
/**
- * Called when Face Unlock wants to keep the screen alive and active.
+ * Called when Face Unlock wants to keep the screen alive and active for a specific amount
+ * of time.
*/
- @Override
- public void pokeWakelock() {
- if (DEBUG) Log.d(TAG, "pokeWakelock()");
- mHandler.sendEmptyMessage(MSG_POKE_WAKELOCK);
+ public void pokeWakelock(int millis) {
+ if (DEBUG) Log.d(TAG, "pokeWakelock() for " + millis + "ms");
+ Message message = mHandler.obtainMessage(MSG_POKE_WAKELOCK, millis, -1);
+ mHandler.sendMessage(message);
}
+
};
}
diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
index 6348d37..794ed15 100755
--- a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
+++ b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
@@ -463,8 +463,8 @@
Intent mHomeIntent;
Intent mCarDockIntent;
Intent mDeskDockIntent;
- int mShortcutKeyPressed = -1;
- boolean mConsumeShortcutKeyUp;
+ boolean mSearchKeyShortcutPending;
+ boolean mConsumeSearchKeyUp;
// support for activating the lock screen while the screen is on
boolean mAllowLockscreenWhenOn;
@@ -509,7 +509,9 @@
ShortcutManager mShortcutManager;
PowerManager.WakeLock mBroadcastWakeLock;
- final KeyCharacterMap.FallbackAction mFallbackAction = new KeyCharacterMap.FallbackAction();
+ // Fallback actions by key code.
+ private final SparseArray<KeyCharacterMap.FallbackAction> mFallbackActions =
+ new SparseArray<KeyCharacterMap.FallbackAction>();
private static final int MSG_ENABLE_POINTER_LOCATION = 1;
private static final int MSG_DISABLE_POINTER_LOCATION = 2;
@@ -1709,7 +1711,8 @@
if (false) {
Log.d(TAG, "interceptKeyTi keyCode=" + keyCode + " down=" + down + " repeatCount="
- + repeatCount + " keyguardOn=" + keyguardOn + " mHomePressed=" + mHomePressed);
+ + repeatCount + " keyguardOn=" + keyguardOn + " mHomePressed=" + mHomePressed
+ + " canceled=" + canceled);
}
// If we think we might have a volume down & power key chord on the way
@@ -1842,13 +1845,13 @@
} else if (keyCode == KeyEvent.KEYCODE_SEARCH) {
if (down) {
if (repeatCount == 0) {
- mShortcutKeyPressed = keyCode;
- mConsumeShortcutKeyUp = false;
+ mSearchKeyShortcutPending = true;
+ mConsumeSearchKeyUp = false;
}
- } else if (keyCode == mShortcutKeyPressed) {
- mShortcutKeyPressed = -1;
- if (mConsumeShortcutKeyUp) {
- mConsumeShortcutKeyUp = false;
+ } else {
+ mSearchKeyShortcutPending = false;
+ if (mConsumeSearchKeyUp) {
+ mConsumeSearchKeyUp = false;
return -1;
}
}
@@ -1865,10 +1868,11 @@
// even if no shortcut was invoked. This prevents text from being
// inadvertently inserted when using a keyboard that has built-in macro
// shortcut keys (that emit Search+x) and some of them are not registered.
- if (mShortcutKeyPressed != -1) {
+ if (mSearchKeyShortcutPending) {
final KeyCharacterMap kcm = event.getKeyCharacterMap();
if (kcm.isPrintingKey(keyCode)) {
- mConsumeShortcutKeyUp = true;
+ mConsumeSearchKeyUp = true;
+ mSearchKeyShortcutPending = false;
if (down && repeatCount == 0 && !keyguardOn) {
Intent shortcutIntent = mShortcutManager.getIntent(kcm, keyCode, metaState);
if (shortcutIntent != null) {
@@ -1878,13 +1882,11 @@
} catch (ActivityNotFoundException ex) {
Slog.w(TAG, "Dropping shortcut key combination because "
+ "the activity to which it is registered was not found: "
- + KeyEvent.keyCodeToString(mShortcutKeyPressed)
- + "+" + KeyEvent.keyCodeToString(keyCode), ex);
+ + "SEARCH+" + KeyEvent.keyCodeToString(keyCode), ex);
}
} else {
Slog.i(TAG, "Dropping unregistered shortcut key combination: "
- + KeyEvent.keyCodeToString(mShortcutKeyPressed)
- + "+" + KeyEvent.keyCodeToString(keyCode));
+ + "SEARCH+" + KeyEvent.keyCodeToString(keyCode));
}
}
return -1;
@@ -1964,51 +1966,70 @@
+ ", policyFlags=" + policyFlags);
}
+ KeyEvent fallbackEvent = null;
if ((event.getFlags() & KeyEvent.FLAG_FALLBACK) == 0) {
final KeyCharacterMap kcm = event.getKeyCharacterMap();
final int keyCode = event.getKeyCode();
final int metaState = event.getMetaState();
+ final boolean initialDown = event.getAction() == KeyEvent.ACTION_DOWN
+ && event.getRepeatCount() == 0;
// Check for fallback actions specified by the key character map.
- if (getFallbackAction(kcm, keyCode, metaState, mFallbackAction)) {
+ final FallbackAction fallbackAction;
+ if (initialDown) {
+ fallbackAction = kcm.getFallbackAction(keyCode, metaState);
+ } else {
+ fallbackAction = mFallbackActions.get(keyCode);
+ }
+
+ if (fallbackAction != null) {
if (DEBUG_FALLBACK) {
- Slog.d(TAG, "Fallback: keyCode=" + mFallbackAction.keyCode
- + " metaState=" + Integer.toHexString(mFallbackAction.metaState));
+ Slog.d(TAG, "Fallback: keyCode=" + fallbackAction.keyCode
+ + " metaState=" + Integer.toHexString(fallbackAction.metaState));
}
- int flags = event.getFlags() | KeyEvent.FLAG_FALLBACK;
- KeyEvent fallbackEvent = KeyEvent.obtain(
+ final int flags = event.getFlags() | KeyEvent.FLAG_FALLBACK;
+ fallbackEvent = KeyEvent.obtain(
event.getDownTime(), event.getEventTime(),
- event.getAction(), mFallbackAction.keyCode,
- event.getRepeatCount(), mFallbackAction.metaState,
+ event.getAction(), fallbackAction.keyCode,
+ event.getRepeatCount(), fallbackAction.metaState,
event.getDeviceId(), event.getScanCode(),
flags, event.getSource(), null);
- int actions = interceptKeyBeforeQueueing(fallbackEvent, policyFlags, true);
- if ((actions & ACTION_PASS_TO_USER) != 0) {
- long delayMillis = interceptKeyBeforeDispatching(
- win, fallbackEvent, policyFlags);
- if (delayMillis == 0) {
- if (DEBUG_FALLBACK) {
- Slog.d(TAG, "Performing fallback.");
- }
- return fallbackEvent;
- }
+
+ if (!interceptFallback(win, fallbackEvent, policyFlags)) {
+ fallbackEvent.recycle();
+ fallbackEvent = null;
}
- fallbackEvent.recycle();
+
+ if (initialDown) {
+ mFallbackActions.put(keyCode, fallbackAction);
+ } else if (event.getAction() == KeyEvent.ACTION_UP) {
+ mFallbackActions.remove(keyCode);
+ fallbackAction.recycle();
+ }
}
}
if (DEBUG_FALLBACK) {
- Slog.d(TAG, "No fallback.");
+ if (fallbackEvent == null) {
+ Slog.d(TAG, "No fallback.");
+ } else {
+ Slog.d(TAG, "Performing fallback: " + fallbackEvent);
+ }
}
- return null;
+ return fallbackEvent;
}
- private boolean getFallbackAction(KeyCharacterMap kcm, int keyCode, int metaState,
- FallbackAction outFallbackAction) {
- // Consult the key character map for specific fallback actions.
- // For example, map NUMPAD_1 to MOVE_HOME when NUMLOCK is not pressed.
- return kcm.getFallbackAction(keyCode, metaState, outFallbackAction);
+ private boolean interceptFallback(WindowState win, KeyEvent fallbackEvent, int policyFlags) {
+ int actions = interceptKeyBeforeQueueing(fallbackEvent, policyFlags, true);
+ if ((actions & ACTION_PASS_TO_USER) != 0) {
+ long delayMillis = interceptKeyBeforeDispatching(
+ win, fallbackEvent, policyFlags);
+ if (delayMillis == 0) {
+ return true;
+ }
+ }
+ return false;
}
/**
diff --git a/services/input/InputDispatcher.cpp b/services/input/InputDispatcher.cpp
index ada9d9e..1062d68 100644
--- a/services/input/InputDispatcher.cpp
+++ b/services/input/InputDispatcher.cpp
@@ -3354,6 +3354,25 @@
// generated a fallback or if the window is not a foreground window,
// then cancel the associated fallback key, if any.
if (fallbackKeyCode != -1) {
+ // Dispatch the unhandled key to the policy with the cancel flag.
+#if DEBUG_OUTBOUND_EVENT_DETAILS
+ ALOGD("Unhandled key event: Asking policy to cancel fallback action. "
+ "keyCode=%d, action=%d, repeatCount=%d, policyFlags=0x%08x",
+ keyEntry->keyCode, keyEntry->action, keyEntry->repeatCount,
+ keyEntry->policyFlags);
+#endif
+ KeyEvent event;
+ initializeKeyEvent(&event, keyEntry);
+ event.setFlags(event.getFlags() | AKEY_EVENT_FLAG_CANCELED);
+
+ mLock.unlock();
+
+ mPolicy->dispatchUnhandledKey(connection->inputWindowHandle,
+ &event, keyEntry->policyFlags, &event);
+
+ mLock.lock();
+
+ // Cancel the fallback key.
if (fallbackKeyCode != AKEYCODE_UNKNOWN) {
CancelationOptions options(CancelationOptions::CANCEL_FALLBACK_EVENTS,
"application handled the original non-fallback key "
@@ -3374,8 +3393,9 @@
#if DEBUG_OUTBOUND_EVENT_DETAILS
ALOGD("Unhandled key event: Skipping unhandled key event processing "
"since this is not an initial down. "
- "keyCode=%d, action=%d, repeatCount=%d",
- originalKeyCode, keyEntry->action, keyEntry->repeatCount);
+ "keyCode=%d, action=%d, repeatCount=%d, policyFlags=0x%08x",
+ originalKeyCode, keyEntry->action, keyEntry->repeatCount,
+ keyEntry->policyFlags);
#endif
return false;
}
@@ -3383,8 +3403,9 @@
// Dispatch the unhandled key to the policy.
#if DEBUG_OUTBOUND_EVENT_DETAILS
ALOGD("Unhandled key event: Asking policy to perform fallback action. "
- "keyCode=%d, action=%d, repeatCount=%d",
- keyEntry->keyCode, keyEntry->action, keyEntry->repeatCount);
+ "keyCode=%d, action=%d, repeatCount=%d, policyFlags=0x%08x",
+ keyEntry->keyCode, keyEntry->action, keyEntry->repeatCount,
+ keyEntry->policyFlags);
#endif
KeyEvent event;
initializeKeyEvent(&event, keyEntry);
@@ -3426,7 +3447,7 @@
"to send %d instead. Fallback canceled.",
event.getKeyCode(), originalKeyCode, fallbackKeyCode);
} else {
- ALOGD("Unhandled key event: Policy did not request fallback for %d,"
+ ALOGD("Unhandled key event: Policy did not request fallback for %d, "
"but on the DOWN it had requested to send %d. "
"Fallback canceled.",
originalKeyCode, fallbackKeyCode);
@@ -3903,8 +3924,10 @@
memento.source = entry->source;
memento.keyCode = entry->keyCode;
memento.scanCode = entry->scanCode;
+ memento.metaState = entry->metaState;
memento.flags = flags;
memento.downTime = entry->downTime;
+ memento.policyFlags = entry->policyFlags;
}
void InputDispatcher::InputState::addMotionMemento(const MotionEntry* entry,
@@ -3919,6 +3942,7 @@
memento.downTime = entry->downTime;
memento.setPointers(entry);
memento.hovering = hovering;
+ memento.policyFlags = entry->policyFlags;
}
void InputDispatcher::InputState::MotionMemento::setPointers(const MotionEntry* entry) {
@@ -3935,9 +3959,9 @@
const KeyMemento& memento = mKeyMementos.itemAt(i);
if (shouldCancelKey(memento, options)) {
outEvents.push(new KeyEntry(currentTime,
- memento.deviceId, memento.source, 0,
+ memento.deviceId, memento.source, memento.policyFlags,
AKEY_EVENT_ACTION_UP, memento.flags | AKEY_EVENT_FLAG_CANCELED,
- memento.keyCode, memento.scanCode, 0, 0, memento.downTime));
+ memento.keyCode, memento.scanCode, memento.metaState, 0, memento.downTime));
}
}
@@ -3945,7 +3969,7 @@
const MotionMemento& memento = mMotionMementos.itemAt(i);
if (shouldCancelMotion(memento, options)) {
outEvents.push(new MotionEntry(currentTime,
- memento.deviceId, memento.source, 0,
+ memento.deviceId, memento.source, memento.policyFlags,
memento.hovering
? AMOTION_EVENT_ACTION_HOVER_EXIT
: AMOTION_EVENT_ACTION_CANCEL,
diff --git a/services/input/InputDispatcher.h b/services/input/InputDispatcher.h
index 07ca9d5..06b8d64 100644
--- a/services/input/InputDispatcher.h
+++ b/services/input/InputDispatcher.h
@@ -732,8 +732,10 @@
uint32_t source;
int32_t keyCode;
int32_t scanCode;
+ int32_t metaState;
int32_t flags;
nsecs_t downTime;
+ uint32_t policyFlags;
};
struct MotionMemento {
@@ -747,6 +749,7 @@
PointerProperties pointerProperties[MAX_POINTERS];
PointerCoords pointerCoords[MAX_POINTERS];
bool hovering;
+ uint32_t policyFlags;
void setPointers(const MotionEntry* entry);
};
diff --git a/services/java/com/android/server/PowerManagerService.java b/services/java/com/android/server/PowerManagerService.java
index 5799f2b..289ab2a 100644
--- a/services/java/com/android/server/PowerManagerService.java
+++ b/services/java/com/android/server/PowerManagerService.java
@@ -485,7 +485,7 @@
//mDimScreen = getInt(DIM_SCREEN) != 0;
mScreenBrightnessSetting = getInt(SCREEN_BRIGHTNESS, DEFAULT_SCREEN_BRIGHTNESS);
- mLightSensorAdjustSetting = getFloat(SCREEN_AUTO_BRIGHTNESS_ADJ, 0);
+ mLightSensorAdjustSetting = 0; //getFloat(SCREEN_AUTO_BRIGHTNESS_ADJ, 0);
// SCREEN_BRIGHTNESS_MODE, default to manual
setScreenBrightnessMode(getInt(SCREEN_BRIGHTNESS_MODE,
@@ -649,7 +649,7 @@
+ Settings.System.NAME + "=?) or ("
+ Settings.System.NAME + "=?)",
new String[]{STAY_ON_WHILE_PLUGGED_IN, SCREEN_OFF_TIMEOUT, DIM_SCREEN, SCREEN_BRIGHTNESS,
- SCREEN_BRIGHTNESS_MODE, SCREEN_AUTO_BRIGHTNESS_ADJ,
+ SCREEN_BRIGHTNESS_MODE, /*SCREEN_AUTO_BRIGHTNESS_ADJ,*/
WINDOW_ANIMATION_SCALE, TRANSITION_ANIMATION_SCALE},
null);
mSettings = new ContentQueryMap(settingsCursor, Settings.System.NAME, true, mHandler);
diff --git a/services/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/java/com/android/server/accessibility/AccessibilityManagerService.java
index 1cb2092..df7bbf2 100644
--- a/services/java/com/android/server/accessibility/AccessibilityManagerService.java
+++ b/services/java/com/android/server/accessibility/AccessibilityManagerService.java
@@ -17,7 +17,7 @@
package com.android.server.accessibility;
import static android.accessibilityservice.AccessibilityServiceInfo.DEFAULT;
-import static android.accessibilityservice.AccessibilityServiceInfo.INCLUDE_NOT_IMPORTANT_VIEWS;
+import static android.accessibilityservice.AccessibilityServiceInfo.FLAG_INCLUDE_NOT_IMPORTANT_VIEWS;
import android.Manifest;
import android.accessibilityservice.AccessibilityService;
@@ -531,12 +531,12 @@
// last record in the enabled services setting. Ideally,
// the user should make the call which service handles
// gestures. However, only one service should handle
- // gestrues to avoid user frustration when different
- // bahiour is observed from different combinations of
+ // gestures to avoid user frustration when different
+ // behavior is observed from different combinations of
// enabled accessibility services.
for (int i = mServices.size() - 1; i >= 0; i--) {
Service service = mServices.get(i);
- if (service.mCanHandleGestures && service.mIsDefault == isDefault) {
+ if (service.mReqeustTouchExplorationMode && service.mIsDefault == isDefault) {
mGestureHandler.scheduleHandleGesture(gestureId, service.mServiceInterface);
return true;
}
@@ -1225,7 +1225,7 @@
boolean mCanRetrieveScreenContent;
- boolean mCanHandleGestures;
+ boolean mReqeustTouchExplorationMode;
boolean mIsAutomation;
@@ -1243,7 +1243,9 @@
mIsAutomation = isAutomation;
if (!isAutomation) {
mCanRetrieveScreenContent = accessibilityServiceInfo.getCanRetrieveWindowContent();
- mCanHandleGestures = accessibilityServiceInfo.getCanHandleGestures();
+ mReqeustTouchExplorationMode =
+ (accessibilityServiceInfo.flags
+ & AccessibilityServiceInfo.FLAG_REQUEST_TOUCH_EXPLORATION_MODE) != 0;
mIntent = new Intent().setComponent(mComponentName);
mIntent.putExtra(Intent.EXTRA_CLIENT_LABEL,
com.android.internal.R.string.accessibility_binding_label);
@@ -1251,7 +1253,6 @@
mContext, 0, new Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS), 0));
} else {
mCanRetrieveScreenContent = true;
- mCanHandleGestures = true;
}
setDynamicallyConfigurableProperties(accessibilityServiceInfo);
}
@@ -1272,7 +1273,7 @@
// >= Build.VERSION_CODES.JELLY_BEAN) {
> Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) {
mIncludeNotImportantViews =
- (info.flags & INCLUDE_NOT_IMPORTANT_VIEWS) != 0;
+ (info.flags & FLAG_INCLUDE_NOT_IMPORTANT_VIEWS) != 0;
}
synchronized (mLock) {
diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java
index aa7de82..54ef724 100644
--- a/services/java/com/android/server/am/ActivityManagerService.java
+++ b/services/java/com/android/server/am/ActivityManagerService.java
@@ -5360,6 +5360,7 @@
final long homeAppMem = mProcessList.getMemLevel(ProcessList.HOME_APP_ADJ);
final long hiddenAppMem = mProcessList.getMemLevel(ProcessList.HIDDEN_APP_MIN_ADJ);
outInfo.availMem = Process.getFreeMemory();
+ outInfo.totalMem = Process.getTotalMemory();
outInfo.threshold = homeAppMem;
outInfo.lowMemory = outInfo.availMem < (homeAppMem + ((hiddenAppMem-homeAppMem)/2));
outInfo.hiddenAppThreshold = hiddenAppMem;
diff --git a/services/java/com/android/server/am/ActivityRecord.java b/services/java/com/android/server/am/ActivityRecord.java
index 97bfd6f..ad80273 100644
--- a/services/java/com/android/server/am/ActivityRecord.java
+++ b/services/java/com/android/server/am/ActivityRecord.java
@@ -552,7 +552,8 @@
void applyOptionsLocked() {
if (pendingOptions != null) {
- switch (pendingOptions.getAnimationType()) {
+ final int animationType = pendingOptions.getAnimationType();
+ switch (animationType) {
case ActivityOptions.ANIM_CUSTOM:
service.mWindowManager.overridePendingAppTransition(
pendingOptions.getPackageName(),
@@ -571,10 +572,13 @@
}
break;
case ActivityOptions.ANIM_THUMBNAIL:
+ case ActivityOptions.ANIM_THUMBNAIL_DELAYED:
+ boolean delayed = (animationType == ActivityOptions.ANIM_THUMBNAIL_DELAYED);
service.mWindowManager.overridePendingAppTransitionThumb(
pendingOptions.getThumbnail(),
pendingOptions.getStartX(), pendingOptions.getStartY(),
- pendingOptions.getOnAnimationStartListener());
+ pendingOptions.getOnAnimationStartListener(),
+ delayed);
if (intent.getSourceBounds() == null) {
intent.setSourceBounds(new Rect(pendingOptions.getStartX(),
pendingOptions.getStartY(),
diff --git a/services/java/com/android/server/net/NetworkStatsService.java b/services/java/com/android/server/net/NetworkStatsService.java
index e710b33..0e93b0a 100644
--- a/services/java/com/android/server/net/NetworkStatsService.java
+++ b/services/java/com/android/server/net/NetworkStatsService.java
@@ -608,17 +608,19 @@
// clamp threshold into safe range
mPersistThreshold = MathUtils.constrain(thresholdBytes, 128 * KB_IN_BYTES, 2 * MB_IN_BYTES);
- updatePersistThresholds();
-
if (LOGV) {
Slog.v(TAG, "advisePersistThreshold() given " + thresholdBytes + ", clamped to "
+ mPersistThreshold);
}
- // persist if beyond new thresholds
+ // update and persist if beyond new thresholds
final long currentTime = mTime.hasCache() ? mTime.currentTimeMillis()
: System.currentTimeMillis();
synchronized (mStatsLock) {
+ if (!mSystemReady) return;
+
+ updatePersistThresholds();
+
mDevRecorder.maybePersistLocked(currentTime);
mXtRecorder.maybePersistLocked(currentTime);
mUidRecorder.maybePersistLocked(currentTime);
diff --git a/services/java/com/android/server/pm/PackageManagerService.java b/services/java/com/android/server/pm/PackageManagerService.java
index 7c14d49..d41cd5a 100644
--- a/services/java/com/android/server/pm/PackageManagerService.java
+++ b/services/java/com/android/server/pm/PackageManagerService.java
@@ -3118,8 +3118,9 @@
+ "reverting from " + ps.codePathString
+ ": new version " + pkg.mVersionCode
+ " better than installed " + ps.versionCode);
- InstallArgs args = createInstallArgs(ps.pkgFlags, ps.codePathString,
- ps.resourcePathString, ps.nativeLibraryPathString);
+
+ InstallArgs args = createInstallArgs(packageFlagsToInstallFlags(ps),
+ ps.codePathString, ps.resourcePathString, ps.nativeLibraryPathString);
synchronized (mInstaller) {
args.cleanUpResourcesLI();
}
@@ -3174,8 +3175,8 @@
Slog.w(TAG, "Package " + ps.name + " at " + scanFile + "reverting from "
+ ps.codePathString + ": new version " + pkg.mVersionCode
+ " better than installed " + ps.versionCode);
- InstallArgs args = createInstallArgs(ps.pkgFlags, ps.codePathString,
- ps.resourcePathString, ps.nativeLibraryPathString);
+ InstallArgs args = createInstallArgs(packageFlagsToInstallFlags(ps),
+ ps.codePathString, ps.resourcePathString, ps.nativeLibraryPathString);
synchronized (mInstaller) {
args.cleanUpResourcesLI();
}
@@ -7252,6 +7253,11 @@
return (pkg.applicationInfo.flags & ApplicationInfo.FLAG_FORWARD_LOCK) != 0;
}
+
+ private boolean isForwardLocked(PackageSetting ps) {
+ return (ps.pkgFlags & ApplicationInfo.FLAG_FORWARD_LOCK) != 0;
+ }
+
private static boolean isExternal(PackageParser.Package pkg) {
return (pkg.applicationInfo.flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) != 0;
}
@@ -7276,6 +7282,17 @@
return (pkg.applicationInfo.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0;
}
+ private int packageFlagsToInstallFlags(PackageSetting ps) {
+ int installFlags = 0;
+ if (isExternal(ps)) {
+ installFlags |= PackageManager.INSTALL_EXTERNAL;
+ }
+ if (isForwardLocked(ps)) {
+ installFlags |= PackageManager.INSTALL_FORWARD_LOCK;
+ }
+ return installFlags;
+ }
+
private void deleteTempPackageFiles() {
FilenameFilter filter = new FilenameFilter() {
public boolean accept(File dir, String name) {
diff --git a/services/java/com/android/server/usb/UsbDeviceManager.java b/services/java/com/android/server/usb/UsbDeviceManager.java
index 33612b0..a115345c 100644
--- a/services/java/com/android/server/usb/UsbDeviceManager.java
+++ b/services/java/com/android/server/usb/UsbDeviceManager.java
@@ -322,8 +322,6 @@
String state = FileUtils.readTextFile(new File(STATE_PATH), 0, null).trim();
updateState(state);
mAdbEnabled = containsFunction(mCurrentFunctions, UsbManager.USB_FUNCTION_ADB);
- mAudioSourceEnabled = containsFunction(mCurrentFunctions,
- UsbManager.USB_FUNCTION_AUDIO_SOURCE);
// Upgrade step for previous versions that used persist.service.adb.enable
String value = SystemProperties.get("persist.service.adb.enable", "");
@@ -537,26 +535,29 @@
mContext.sendStickyBroadcast(intent);
}
- private void updateAudioSourceFunction(boolean enabled) {
- // send a sticky broadcast containing current USB state
- Intent intent = new Intent(Intent.ACTION_USB_AUDIO_ACCESSORY_PLUG);
- intent.addFlags(Intent.FLAG_RECEIVER_REPLACE_PENDING);
- intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
- intent.putExtra("state", (enabled ? 1 : 0));
- if (enabled) {
- try {
- Scanner scanner = new Scanner(new File(AUDIO_SOURCE_PCM_PATH));
- int card = scanner.nextInt();
- int device = scanner.nextInt();
- intent.putExtra("card", card);
- intent.putExtra("device", device);
- } catch (FileNotFoundException e) {
- Slog.e(TAG, "could not open audio source PCM file", e);
+ private void updateAudioSourceFunction() {
+ boolean enabled = containsFunction(mCurrentFunctions,
+ UsbManager.USB_FUNCTION_AUDIO_SOURCE);
+ if (enabled != mAudioSourceEnabled) {
+ // send a sticky broadcast containing current USB state
+ Intent intent = new Intent(Intent.ACTION_USB_AUDIO_ACCESSORY_PLUG);
+ intent.addFlags(Intent.FLAG_RECEIVER_REPLACE_PENDING);
+ intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
+ intent.putExtra("state", (enabled ? 1 : 0));
+ if (enabled) {
+ try {
+ Scanner scanner = new Scanner(new File(AUDIO_SOURCE_PCM_PATH));
+ int card = scanner.nextInt();
+ int device = scanner.nextInt();
+ intent.putExtra("card", card);
+ intent.putExtra("device", device);
+ } catch (FileNotFoundException e) {
+ Slog.e(TAG, "could not open audio source PCM file", e);
+ }
}
+ mContext.sendStickyBroadcast(intent);
+ mAudioSourceEnabled = enabled;
}
-
- mContext.sendStickyBroadcast(intent);
- mAudioSourceEnabled = enabled;
}
@Override
@@ -578,11 +579,7 @@
}
if (mBootCompleted) {
updateUsbState();
- boolean audioSourceEnabled = containsFunction(mCurrentFunctions,
- UsbManager.USB_FUNCTION_AUDIO_SOURCE);
- if (audioSourceEnabled != mAudioSourceEnabled) {
- updateAudioSourceFunction(audioSourceEnabled);
- }
+ updateAudioSourceFunction();
}
break;
case MSG_ENABLE_ADB:
@@ -597,13 +594,13 @@
updateUsbNotification();
updateAdbNotification();
updateUsbState();
+ updateAudioSourceFunction();
break;
case MSG_BOOT_COMPLETED:
mBootCompleted = true;
if (mCurrentAccessory != null) {
mSettingsManager.accessoryAttached(mCurrentAccessory);
}
- updateAudioSourceFunction(mAudioSourceEnabled);
break;
}
}
@@ -686,7 +683,7 @@
notification.defaults = 0; // please be quiet
notification.sound = null;
notification.vibrate = null;
- notification.priority = Notification.PRIORITY_MIN;
+ notification.priority = Notification.PRIORITY_LOW;
Intent intent = Intent.makeRestartActivityTask(
new ComponentName("com.android.settings",
diff --git a/services/java/com/android/server/wm/WindowAnimator.java b/services/java/com/android/server/wm/WindowAnimator.java
index bc84d3c..146de34 100644
--- a/services/java/com/android/server/wm/WindowAnimator.java
+++ b/services/java/com/android/server/wm/WindowAnimator.java
@@ -454,6 +454,7 @@
mPendingLayoutChanges = 0;
mCurrentTime = SystemClock.uptimeMillis();
mBulkUpdateParams = 0;
+ boolean wasAnimating = mAnimating;
mAnimating = false;
if (WindowManagerService.DEBUG_WINDOW_TRACE) {
Slog.i(TAG, "!!! animate: entry time=" + mCurrentTime);
@@ -509,6 +510,8 @@
if (mAnimating) {
mService.scheduleAnimationLocked();
+ } else if (wasAnimating) {
+ mService.requestTraversalLocked();
}
if (WindowManagerService.DEBUG_WINDOW_TRACE) {
Slog.i(TAG, "!!! animate: exit mAnimating=" + mAnimating
diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java
index 2fcd05c..2efcb8e 100755
--- a/services/java/com/android/server/wm/WindowManagerService.java
+++ b/services/java/com/android/server/wm/WindowManagerService.java
@@ -512,6 +512,7 @@
int mNextAppTransitionType = ActivityOptions.ANIM_NONE;
String mNextAppTransitionPackage;
Bitmap mNextAppTransitionThumbnail;
+ boolean mNextAppTransitionDelayed;
IRemoteCallback mNextAppTransitionCallback;
int mNextAppTransitionEnter;
int mNextAppTransitionExit;
@@ -3176,7 +3177,7 @@
}
private Animation createThumbnailAnimationLocked(int transit,
- boolean enter, boolean thumb) {
+ boolean enter, boolean thumb, boolean delayed) {
Animation a;
final int thumbWidthI = mNextAppTransitionThumbnail.getWidth();
final float thumbWidth = thumbWidthI > 0 ? thumbWidthI : 1;
@@ -3186,6 +3187,7 @@
// it is the standard duration for that. Otherwise we use the longer
// task transition duration.
int duration;
+ int delayDuration = delayed ? 200 : 0;
switch (transit) {
case WindowManagerPolicy.TRANSIT_ACTIVITY_OPEN:
case WindowManagerPolicy.TRANSIT_ACTIVITY_CLOSE:
@@ -3193,7 +3195,7 @@
com.android.internal.R.integer.config_shortAnimTime);
break;
default:
- duration = 300;
+ duration = delayed ? 200 : 300;
break;
}
if (thumb) {
@@ -3201,6 +3203,7 @@
// filling the screen.
float scaleW = mAppDisplayWidth/thumbWidth;
float scaleH = mAppDisplayHeight/thumbHeight;
+
Animation scale = new ScaleAnimation(1, scaleW, 1, scaleH,
computePivot(mNextAppTransitionStartX, 1/scaleW),
computePivot(mNextAppTransitionStartY, 1/scaleH));
@@ -3210,17 +3213,38 @@
set.addAnimation(scale);
alpha.setDuration(duration);
set.addAnimation(alpha);
+ set.setFillBefore(true);
+ if (delayDuration > 0) {
+ set.setStartOffset(delayDuration);
+ }
a = set;
} else if (enter) {
// Entering app zooms out from the center of the thumbnail.
- float scaleW = thumbWidth/mAppDisplayWidth;
- float scaleH = thumbHeight/mAppDisplayHeight;
- a = new ScaleAnimation(scaleW, 1, scaleH, 1,
+ float scaleW = thumbWidth / mAppDisplayWidth;
+ float scaleH = thumbHeight / mAppDisplayHeight;
+ AnimationSet set = new AnimationSet(true);
+ Animation scale = new ScaleAnimation(scaleW, 1, scaleH, 1,
computePivot(mNextAppTransitionStartX, scaleW),
computePivot(mNextAppTransitionStartY, scaleH));
- a.setDuration(duration);
+ scale.setDuration(duration);
+ scale.setFillBefore(true);
+ set.addAnimation(scale);
+ // Need to set an alpha animation on the entering app window
+ // in case it appears one frame before the thumbnail window
+ // (this solves flicker)
+ Animation alpha = new AlphaAnimation(0, 1);
+ alpha.setDuration(1);
+ alpha.setFillAfter(true);
+ set.addAnimation(alpha);
+ a = set;
+ if (delayDuration > 0) {
+ a.setStartOffset(delayDuration);
+ }
} else {
a = createExitAnimationLocked(transit, duration);
+ if (delayDuration > 0) {
+ a.setStartOffset(delayDuration);
+ }
}
a.setFillAfter(true);
final Interpolator interpolator = AnimationUtils.loadInterpolator(mContext,
@@ -3252,12 +3276,18 @@
if (DEBUG_ANIM) Slog.v(TAG, "applyAnimation: wtoken=" + wtoken
+ " anim=" + a + " nextAppTransition=ANIM_SCALE_UP"
+ " transit=" + transit + " Callers " + Debug.getCallers(3));
- } else if (mNextAppTransitionType == ActivityOptions.ANIM_THUMBNAIL) {
- a = createThumbnailAnimationLocked(transit, enter, false);
+ } else if (mNextAppTransitionType == ActivityOptions.ANIM_THUMBNAIL ||
+ mNextAppTransitionType == ActivityOptions.ANIM_THUMBNAIL_DELAYED) {
+ boolean delayed = (mNextAppTransitionType == ActivityOptions.ANIM_THUMBNAIL_DELAYED);
+ a = createThumbnailAnimationLocked(transit, enter, false, delayed);
initialized = true;
- if (DEBUG_ANIM) Slog.v(TAG, "applyAnimation: wtoken=" + wtoken
- + " anim=" + a + " nextAppTransition=ANIM_THUMBNAIL"
- + " transit=" + transit + " Callers " + Debug.getCallers(3));
+
+ if (DEBUG_ANIM) {
+ String animName = delayed ? "ANIM_THUMBNAIL_DELAYED" : "ANIM_THUMBNAIL";
+ Slog.v(TAG, "applyAnimation: wtoken=" + wtoken
+ + " anim=" + a + " nextAppTransition=" + animName
+ + " transit=" + transit + " Callers " + Debug.getCallers(3));
+ }
} else {
int animAttr = 0;
switch (transit) {
@@ -3879,11 +3909,13 @@
}
public void overridePendingAppTransitionThumb(Bitmap srcThumb, int startX,
- int startY, IRemoteCallback startedCallback) {
+ int startY, IRemoteCallback startedCallback, boolean delayed) {
if (mNextAppTransition != WindowManagerPolicy.TRANSIT_UNSET) {
- mNextAppTransitionType = ActivityOptions.ANIM_THUMBNAIL;
+ mNextAppTransitionType =
+ delayed ? ActivityOptions.ANIM_THUMBNAIL_DELAYED : ActivityOptions.ANIM_THUMBNAIL;
mNextAppTransitionPackage = null;
mNextAppTransitionThumbnail = srcThumb;
+ mNextAppTransitionDelayed = delayed;
mNextAppTransitionStartX = startX;
mNextAppTransitionStartY = startY;
mNextAppTransitionCallback = startedCallback;
@@ -8038,7 +8070,8 @@
drawSurface.unlockCanvasAndPost(c);
drawSurface.release();
topOpeningApp.mAppAnimator.thumbnailLayer = topOpeningLayer;
- Animation anim = createThumbnailAnimationLocked(transit, true, true);
+ Animation anim = createThumbnailAnimationLocked(
+ transit, true, true, mNextAppTransitionDelayed);
topOpeningApp.mAppAnimator.thumbnailAnimation = anim;
anim.restrictDuration(MAX_ANIMATION_DURATION);
anim.scaleCurrentDuration(mTransitionAnimationScale);
@@ -9617,10 +9650,12 @@
pw.println(mNextAppTransitionStartHeight);
break;
case ActivityOptions.ANIM_THUMBNAIL:
+ case ActivityOptions.ANIM_THUMBNAIL_DELAYED:
pw.print(" mNextAppTransitionThumbnail=");
pw.print(mNextAppTransitionThumbnail);
pw.print(" mNextAppTransitionStartX="); pw.print(mNextAppTransitionStartX);
pw.print(" mNextAppTransitionStartY="); pw.println(mNextAppTransitionStartY);
+ pw.print(" mNextAppTransitionDelayed="); pw.println(mNextAppTransitionDelayed);
break;
}
pw.print(" mStartingIconInTransition="); pw.print(mStartingIconInTransition);
diff --git a/services/java/com/android/server/wm/WindowStateAnimator.java b/services/java/com/android/server/wm/WindowStateAnimator.java
index 642de73..293d3e8 100644
--- a/services/java/com/android/server/wm/WindowStateAnimator.java
+++ b/services/java/com/android/server/wm/WindowStateAnimator.java
@@ -142,6 +142,8 @@
mContext = mService.mContext;
mAttrFlags = win.mAttrs.flags;
mAttrType = win.mAttrs.type;
+ mAnimDw = service.mAppDisplayWidth;
+ mAnimDh = service.mAppDisplayHeight;
}
public void setAnimation(Animation anim) {
@@ -231,6 +233,8 @@
" scale=" + mService.mWindowAnimationScale);
mAnimation.initialize(mWin.mFrame.width(), mWin.mFrame.height(),
mAnimDw, mAnimDh);
+ mAnimDw = mService.mAppDisplayWidth;
+ mAnimDh = mService.mAppDisplayHeight;
mAnimation.setStartTime(currentTime);
mLocalAnimating = true;
mAnimating = true;
@@ -377,7 +381,7 @@
mService.mPendingRemove.add(mWin);
mWin.mRemoveOnExit = false;
}
- if (mService.mWallpaperTarget == mWin) {
+ if (mService.mWallpaperTarget == mWin && mService.mLowerWallpaperTarget == null) {
mAnimator.hideWallpapersLocked();
}
}
diff --git a/test-runner/src/android/test/mock/MockContentResolver.java b/test-runner/src/android/test/mock/MockContentResolver.java
index 6c91f4e..65eb21b 100644
--- a/test-runner/src/android/test/mock/MockContentResolver.java
+++ b/test-runner/src/android/test/mock/MockContentResolver.java
@@ -106,6 +106,18 @@
return true;
}
+ /** @hide */
+ @Override
+ protected IContentProvider acquireUnstableProvider(Context c, String name) {
+ return acquireProvider(c, name);
+ }
+
+ /** @hide */
+ @Override
+ public boolean releaseUnstableProvider(IContentProvider icp) {
+ return releaseProvider(icp);
+ }
+
/**
* Overrides {@link android.content.ContentResolver#notifyChange(Uri, ContentObserver, boolean)
* ContentResolver.notifChange(Uri, ContentObserver, boolean)}. All parameters are ignored.
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContentResolver.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContentResolver.java
index 0257686..fec2c3f 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContentResolver.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContentResolver.java
@@ -62,6 +62,16 @@
return false;
}
+ @Override
+ protected IContentProvider acquireUnstableProvider(Context c, String name) {
+ return acquireProvider(c, name);
+ }
+
+ @Override
+ public boolean releaseUnstableProvider(IContentProvider icp) {
+ return releaseProvider(icp);
+ }
+
/**
* Stub for the layoutlib bridge content resolver.
*/
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindowManager.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindowManager.java
index 85b67d5..a4b2125 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindowManager.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindowManager.java
@@ -240,7 +240,7 @@
@Override
public void overridePendingAppTransitionThumb(Bitmap srcThumb, int startX, int startY,
- IRemoteCallback startedCallback) throws RemoteException {
+ IRemoteCallback startedCallback, boolean delayed) throws RemoteException {
// TODO Auto-generated method stub
}
diff --git a/wifi/java/android/net/wifi/WifiWatchdogStateMachine.java b/wifi/java/android/net/wifi/WifiWatchdogStateMachine.java
index f31ee68..5220d04 100644
--- a/wifi/java/android/net/wifi/WifiWatchdogStateMachine.java
+++ b/wifi/java/android/net/wifi/WifiWatchdogStateMachine.java
@@ -100,15 +100,11 @@
Level 1 -88 <= RSSI < -78
Level 0 RSSI < -88 */
- /* Wi-fi connection is considered poor below this
- RSSI level threshold and the watchdog report it
- to the WifiStateMachine */
- private static final int RSSI_LEVEL_CUTOFF = 0;
/* Wi-fi connection is monitored actively below this
threshold */
- private static final int RSSI_LEVEL_MONITOR = 1;
- /* RSSI threshold during monitoring below which network is avoided */
- private static final int RSSI_MONITOR_THRESHOLD = -84;
+ private static final int RSSI_LEVEL_MONITOR = 0;
+ /* Rssi threshold is at level 0 (-88dBm) */
+ private static final int RSSI_MONITOR_THRESHOLD = -88;
/* Number of times RSSI is measured to be low before being avoided */
private static final int RSSI_MONITOR_COUNT = 5;
private int mRssiMonitorCount = 0;
@@ -193,7 +189,7 @@
private WalledGardenCheckState mWalledGardenCheckState = new WalledGardenCheckState();
/* Online and watching link connectivity */
private OnlineWatchState mOnlineWatchState = new OnlineWatchState();
- /* RSSI level is at RSSI_LEVEL_MONITOR and needs close monitoring */
+ /* RSSI level is below RSSI_LEVEL_MONITOR and needs close monitoring */
private RssiMonitoringState mRssiMonitoringState = new RssiMonitoringState();
/* Online and doing nothing */
private OnlineState mOnlineState = new OnlineState();
@@ -731,9 +727,7 @@
}
private void handleRssiChange() {
- if (mCurrentSignalLevel <= RSSI_LEVEL_CUTOFF) {
- sendPoorLinkDetected();
- } else if (mCurrentSignalLevel <= RSSI_LEVEL_MONITOR) {
+ if (mCurrentSignalLevel <= RSSI_LEVEL_MONITOR) {
transitionTo(mRssiMonitoringState);
} else {
//stay here
@@ -773,9 +767,7 @@
switch (msg.what) {
case EVENT_RSSI_CHANGE:
mCurrentSignalLevel = calculateSignalLevel(msg.arg1);
- if (mCurrentSignalLevel <= RSSI_LEVEL_CUTOFF) {
- sendPoorLinkDetected();
- } else if (mCurrentSignalLevel <= RSSI_LEVEL_MONITOR) {
+ if (mCurrentSignalLevel <= RSSI_LEVEL_MONITOR) {
//stay here;
} else {
//We dont need frequent RSSI monitoring any more
diff --git a/wifi/java/android/net/wifi/p2p/WifiP2pManager.java b/wifi/java/android/net/wifi/p2p/WifiP2pManager.java
index ef77d45..2c25e9d 100644
--- a/wifi/java/android/net/wifi/p2p/WifiP2pManager.java
+++ b/wifi/java/android/net/wifi/p2p/WifiP2pManager.java
@@ -21,7 +21,6 @@
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.IConnectivityManager;
-import android.net.nsd.DnsSdTxtRecord;
import android.net.wifi.p2p.nsd.WifiP2pDnsSdServiceInfo;
import android.net.wifi.p2p.nsd.WifiP2pDnsSdServiceResponse;
import android.net.wifi.p2p.nsd.WifiP2pServiceInfo;
@@ -46,6 +45,7 @@
import java.util.HashMap;
import java.util.List;
+import java.util.Map;
/**
* This class provides the API for managing Wi-Fi peer-to-peer connectivity. This lets an
@@ -585,11 +585,11 @@
*
* @param fullDomainName full domain name. <br>
* e.g) "MyPrinter._ipp._tcp.local.".
- * @param record txt record.
+ * @param txtRecordMap TXT record data as a map of key/value pairs
* @param srcDevice source device.
*/
public void onDnsSdTxtRecordAvailable(String fullDomainName,
- DnsSdTxtRecord record,
+ Map<String, String> txtRecordMap,
WifiP2pDevice srcDevice);
}
diff --git a/wifi/java/android/net/wifi/p2p/nsd/WifiP2pDnsSdServiceInfo.java b/wifi/java/android/net/wifi/p2p/nsd/WifiP2pDnsSdServiceInfo.java
index 54b7ac4..bc1d3c6 100644
--- a/wifi/java/android/net/wifi/p2p/nsd/WifiP2pDnsSdServiceInfo.java
+++ b/wifi/java/android/net/wifi/p2p/nsd/WifiP2pDnsSdServiceInfo.java
@@ -83,19 +83,22 @@
* e.g) "MyPrinter"
* @param serviceType service type.<br>
* e.g) "_ipp._tcp"
- * @param txtRecord TXT record as defined at
+ * @param txtMap TXT record with key/value pair in a map confirming to format defined at
* http://files.dns-sd.org/draft-cheshire-dnsext-dns-sd.txt
* @return Bonjour service information object
*/
public static WifiP2pDnsSdServiceInfo newInstance(String instanceName,
- String serviceType, DnsSdTxtRecord txtRecord) {
+ String serviceType, Map<String, String> txtMap) {
if (TextUtils.isEmpty(instanceName) || TextUtils.isEmpty(serviceType)) {
throw new IllegalArgumentException(
"instance name or service type cannot be empty");
}
- if (txtRecord == null) {
- txtRecord = new DnsSdTxtRecord();
+ DnsSdTxtRecord txtRecord = new DnsSdTxtRecord();
+ if (txtMap != null) {
+ for (String key : txtMap.keySet()) {
+ txtRecord.set(key, txtMap.get(key));
+ }
}
ArrayList<String> queries = new ArrayList<String>();
diff --git a/wifi/java/android/net/wifi/p2p/nsd/WifiP2pDnsSdServiceResponse.java b/wifi/java/android/net/wifi/p2p/nsd/WifiP2pDnsSdServiceResponse.java
index c053c8a..ed84a1a 100644
--- a/wifi/java/android/net/wifi/p2p/nsd/WifiP2pDnsSdServiceResponse.java
+++ b/wifi/java/android/net/wifi/p2p/nsd/WifiP2pDnsSdServiceResponse.java
@@ -16,7 +16,6 @@
package android.net.wifi.p2p.nsd;
-import android.net.nsd.DnsSdTxtRecord;
import android.net.wifi.p2p.WifiP2pDevice;
import java.io.ByteArrayInputStream;
@@ -68,7 +67,7 @@
* This field is only used when the dns type equals to
* {@link WifiP2pDnsSdServiceInfo#DNS_TYPE_TXT}.
*/
- private DnsSdTxtRecord mTxtRecord;
+ private final HashMap<String, String> mTxtRecord = new HashMap<String, String>();
/**
* Virtual memory packet.
@@ -121,7 +120,7 @@
* Return TXT record data.
* @return TXT record data.
*/
- public DnsSdTxtRecord getTxtRecord() {
+ public Map<String, String> getTxtRecord() {
return mTxtRecord;
}
@@ -133,8 +132,9 @@
sbuf.append(" srcAddr:").append(mDevice.deviceAddress);
sbuf.append(" version:").append(String.format("%02x", mVersion));
sbuf.append(" dnsName:").append(mDnsQueryName);
- if (mTxtRecord != null) {
- sbuf.append(" TxtRecord:").append(mTxtRecord);
+ sbuf.append(" TxtRecord:");
+ for (String key : mTxtRecord.keySet()) {
+ sbuf.append(" key:").append(key).append(" value:").append(mTxtRecord.get(key));
}
if (mInstanceName != null) {
sbuf.append(" InsName:").append(mInstanceName);
@@ -205,10 +205,7 @@
mInstanceName = rData.substring(0,
rData.length() - mDnsQueryName.length() -1);
} else if (mDnsType == WifiP2pDnsSdServiceInfo.DNS_TYPE_TXT) {
- mTxtRecord = readTxtData(dis);
- if (mTxtRecord == null) {
- return false;
- }
+ return readTxtData(dis);
} else {
return false;
}
@@ -261,10 +258,9 @@
* Read TXT record data.
*
* @param dis
- * @return TXT record data
+ * @return true if TXT data is valid
*/
- private DnsSdTxtRecord readTxtData(DataInputStream dis) {
- DnsSdTxtRecord txtRecord = new DnsSdTxtRecord();
+ private boolean readTxtData(DataInputStream dis) {
try {
while (dis.available() > 0) {
int len = dis.readUnsignedByte();
@@ -275,15 +271,15 @@
dis.readFully(data);
String[] keyVal = new String(data).split("=");
if (keyVal.length != 2) {
- return null;
+ return false;
}
- txtRecord.set(keyVal[0], keyVal[1]);
+ mTxtRecord.put(keyVal[0], keyVal[1]);
}
- return txtRecord;
+ return true;
} catch (IOException e) {
e.printStackTrace();
}
- return null;
+ return false;
}
/**