diff options
124 files changed, 1011 insertions, 342 deletions
diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java index b439c1dc02c4..b360c82374d0 100644 --- a/core/java/android/app/Activity.java +++ b/core/java/android/app/Activity.java @@ -6142,6 +6142,7 @@ public class Activity extends ContextThemeWrapper * * @param action the action to run on the UI thread */ + @Override public final void runOnUiThread(Runnable action) { if (Thread.currentThread() != mUiThread) { mHandler.post(action); diff --git a/core/java/android/app/ActivityOptions.java b/core/java/android/app/ActivityOptions.java index 53608fbdd4bb..c4d51168d20c 100644 --- a/core/java/android/app/ActivityOptions.java +++ b/core/java/android/app/ActivityOptions.java @@ -25,6 +25,8 @@ import android.annotation.TestApi; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; +import android.graphics.Bitmap.Config; +import android.graphics.GraphicBuffer; import android.graphics.Rect; import android.os.Bundle; import android.os.Handler; @@ -826,7 +828,11 @@ public class ActivityOptions { case ANIM_THUMBNAIL_SCALE_DOWN: case ANIM_THUMBNAIL_ASPECT_SCALE_UP: case ANIM_THUMBNAIL_ASPECT_SCALE_DOWN: - mThumbnail = (Bitmap) opts.getParcelable(KEY_ANIM_THUMBNAIL); + // Unpackage the GraphicBuffer from the parceled thumbnail + final GraphicBuffer buffer = opts.getParcelable(KEY_ANIM_THUMBNAIL); + if (buffer != null) { + mThumbnail = Bitmap.createHardwareBitmap(buffer); + } mStartX = opts.getInt(KEY_ANIM_START_X, 0); mStartY = opts.getInt(KEY_ANIM_START_Y, 0); mWidth = opts.getInt(KEY_ANIM_WIDTH, 0); @@ -919,9 +925,14 @@ public class ActivityOptions { return mCustomInPlaceResId; } - /** @hide */ - public Bitmap getThumbnail() { - return mThumbnail; + /** + * The thumbnail is copied into a hardware bitmap when it is bundled and sent to the system, so + * it should always be backed by a GraphicBuffer on the other end. + * + * @hide + */ + public GraphicBuffer getThumbnail() { + return mThumbnail.createGraphicBufferHandle(); } /** @hide */ @@ -1230,7 +1241,14 @@ public class ActivityOptions { case ANIM_THUMBNAIL_SCALE_DOWN: case ANIM_THUMBNAIL_ASPECT_SCALE_UP: case ANIM_THUMBNAIL_ASPECT_SCALE_DOWN: - b.putParcelable(KEY_ANIM_THUMBNAIL, mThumbnail); + // Once we parcel the thumbnail for transfering over to the system, create a copy of + // the bitmap to a hardware bitmap and pass through the GraphicBuffer + if (mThumbnail == null) { + b.putParcelable(KEY_ANIM_THUMBNAIL, null); + } else { + final Bitmap hwBitmap = mThumbnail.copy(Config.HARDWARE, true /* immutable */); + b.putParcelable(KEY_ANIM_THUMBNAIL, hwBitmap.createGraphicBufferHandle()); + } b.putInt(KEY_ANIM_START_X, mStartX); b.putInt(KEY_ANIM_START_Y, mStartY); b.putInt(KEY_ANIM_WIDTH, mWidth); diff --git a/core/java/android/app/Notification.java b/core/java/android/app/Notification.java index c626ae9630b8..31f52dbea548 100644 --- a/core/java/android/app/Notification.java +++ b/core/java/android/app/Notification.java @@ -1168,7 +1168,7 @@ public class Notification implements Parcelable */ public static final int GROUP_ALERT_CHILDREN = 2; - private int mGroupAlertBehavior = GROUP_ALERT_ALL; + private int mGroupAlertBehavior = GROUP_ALERT_CHILDREN; /** * If this notification is being shown as a badge, always show as a number. diff --git a/core/java/android/app/job/JobInfo.java b/core/java/android/app/job/JobInfo.java index 3cb59f27bfaf..87e516cabba5 100644 --- a/core/java/android/app/job/JobInfo.java +++ b/core/java/android/app/job/JobInfo.java @@ -35,6 +35,7 @@ import android.util.Log; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; +import java.util.Arrays; import java.util.Objects; /** @@ -501,7 +502,7 @@ public class JobInfo implements Parcelable { if (constraintFlags != j.constraintFlags) { return false; } - if (!Objects.deepEquals(triggerContentUris, j.triggerContentUris)) { + if (!Arrays.equals(triggerContentUris, j.triggerContentUris)) { return false; } if (triggerContentUpdateDelay != j.triggerContentUpdateDelay) { @@ -556,37 +557,37 @@ public class JobInfo implements Parcelable { public int hashCode() { int hashCode = jobId; if (extras != null) { - hashCode = 31*hashCode + extras.hashCode(); + hashCode = 31 * hashCode + extras.hashCode(); } if (transientExtras != null) { - hashCode = 31*hashCode + transientExtras.hashCode(); + hashCode = 31 * hashCode + transientExtras.hashCode(); } if (clipData != null) { - hashCode = 31*hashCode + clipData.hashCode(); + hashCode = 31 * hashCode + clipData.hashCode(); } hashCode = 31*hashCode + clipGrantFlags; if (service != null) { - hashCode = 31*hashCode + service.hashCode(); + hashCode = 31 * hashCode + service.hashCode(); } - hashCode = 31*hashCode + constraintFlags; + hashCode = 31 * hashCode + constraintFlags; if (triggerContentUris != null) { - hashCode = 31*hashCode + triggerContentUris.hashCode(); + hashCode = 31 * hashCode + Arrays.hashCode(triggerContentUris); } - hashCode = 31*hashCode + Long.hashCode(triggerContentUpdateDelay); - hashCode = 31*hashCode + Long.hashCode(triggerContentMaxDelay); - hashCode = 31*hashCode + Boolean.hashCode(hasEarlyConstraint); - hashCode = 31*hashCode + Boolean.hashCode(hasLateConstraint); - hashCode = 31*hashCode + networkType; - hashCode = 31*hashCode + Long.hashCode(minLatencyMillis); - hashCode = 31*hashCode + Long.hashCode(maxExecutionDelayMillis); - hashCode = 31*hashCode + Boolean.hashCode(isPeriodic); - hashCode = 31*hashCode + Boolean.hashCode(isPersisted); - hashCode = 31*hashCode + Long.hashCode(intervalMillis); - hashCode = 31*hashCode + Long.hashCode(flexMillis); - hashCode = 31*hashCode + Long.hashCode(initialBackoffMillis); - hashCode = 31*hashCode + backoffPolicy; - hashCode = 31*hashCode + priority; - hashCode = 31*hashCode + flags; + hashCode = 31 * hashCode + Long.hashCode(triggerContentUpdateDelay); + hashCode = 31 * hashCode + Long.hashCode(triggerContentMaxDelay); + hashCode = 31 * hashCode + Boolean.hashCode(hasEarlyConstraint); + hashCode = 31 * hashCode + Boolean.hashCode(hasLateConstraint); + hashCode = 31 * hashCode + networkType; + hashCode = 31 * hashCode + Long.hashCode(minLatencyMillis); + hashCode = 31 * hashCode + Long.hashCode(maxExecutionDelayMillis); + hashCode = 31 * hashCode + Boolean.hashCode(isPeriodic); + hashCode = 31 * hashCode + Boolean.hashCode(isPersisted); + hashCode = 31 * hashCode + Long.hashCode(intervalMillis); + hashCode = 31 * hashCode + Long.hashCode(flexMillis); + hashCode = 31 * hashCode + Long.hashCode(initialBackoffMillis); + hashCode = 31 * hashCode + backoffPolicy; + hashCode = 31 * hashCode + priority; + hashCode = 31 * hashCode + flags; return hashCode; } diff --git a/core/java/android/os/BatteryStats.java b/core/java/android/os/BatteryStats.java index 499d6bbdf535..ecc4dec47af7 100644 --- a/core/java/android/os/BatteryStats.java +++ b/core/java/android/os/BatteryStats.java @@ -162,6 +162,11 @@ public abstract class BatteryStats implements Parcelable { public static final int AGGREGATED_WAKE_TYPE_PARTIAL = 20; /** + * A constant indicating a bluetooth scan timer for unoptimized scans. + */ + public static final int BLUETOOTH_UNOPTIMIZED_SCAN_ON = 21; + + /** * Include all of the data in the stats, including previously saved data. */ public static final int STATS_SINCE_CHARGED = 0; @@ -191,8 +196,12 @@ public abstract class BatteryStats implements Parcelable { * New in version 21: * - Actual (not just apportioned) Wakelock time is also recorded. * - Aggregated partial wakelock time (per uid, instead of per wakelock) is recorded. + * - BLE scan result count + * - CPU frequency time per uid + * New in version 22: + * - BLE scan result background count, BLE unoptimized scan time */ - static final String CHECKIN_VERSION = "21"; + static final String CHECKIN_VERSION = "22"; /** * Old version, we hit 9 and ran out of room, need to remove. @@ -217,9 +226,10 @@ public abstract class BatteryStats implements Parcelable { private static final String STATE_TIME_DATA = "st"; // wl line is: // BATTERY_STATS_CHECKIN_VERSION, uid, which, "wl", name, - // full totalTime, 'f', count, current duration, max duration, total duration, - // partial totalTime, 'p', count, current duration, max duration, total duration, - // window totalTime, 'w', count, current duration, max duration, total duration + // full totalTime, 'f', count, current duration, max duration, total duration, + // partial totalTime, 'p', count, current duration, max duration, total duration, + // bg partial totalTime, 'bp', count, current duration, max duration, total duration, + // window totalTime, 'w', count, current duration, max duration, total duration // [Currently, full and window wakelocks have durations current = max = total = -1] private static final String WAKELOCK_DATA = "wl"; // awl line is: @@ -565,7 +575,10 @@ public abstract class BatteryStats implements Parcelable { public abstract Timer getForegroundActivityTimer(); public abstract Timer getBluetoothScanTimer(); public abstract Timer getBluetoothScanBackgroundTimer(); + public abstract Timer getBluetoothUnoptimizedScanTimer(); + public abstract Timer getBluetoothUnoptimizedScanBackgroundTimer(); public abstract Counter getBluetoothScanResultCounter(); + public abstract Counter getBluetoothScanResultBgCounter(); public abstract long[] getCpuFreqTimes(int which); public abstract long[] getScreenOffCpuFreqTimes(int which); @@ -3429,10 +3442,29 @@ public abstract class BatteryStats implements Parcelable { final long actualTime = bleTimer.getTotalDurationMsLocked(rawRealtimeMs); final long actualTimeBg = bleTimerBg != null ? bleTimerBg.getTotalDurationMsLocked(rawRealtimeMs) : 0; + // Result counters final int resultCount = u.getBluetoothScanResultCounter() != null ? u.getBluetoothScanResultCounter().getCountLocked(which) : 0; + final int resultCountBg = u.getBluetoothScanResultBgCounter() != null ? + u.getBluetoothScanResultBgCounter().getCountLocked(which) : 0; + // Unoptimized scan timer. Unpooled and since reset (regardless of 'which'). + final Timer unoptimizedScanTimer = u.getBluetoothUnoptimizedScanTimer(); + final long unoptimizedScanTotalTime = unoptimizedScanTimer != null ? + unoptimizedScanTimer.getTotalDurationMsLocked(rawRealtimeMs) : 0; + final long unoptimizedScanMaxTime = unoptimizedScanTimer != null ? + unoptimizedScanTimer.getMaxDurationMsLocked(rawRealtimeMs) : 0; + // Unoptimized bg scan timer. Unpooled and since reset (regardless of 'which'). + final Timer unoptimizedScanTimerBg = + u.getBluetoothUnoptimizedScanBackgroundTimer(); + final long unoptimizedScanTotalTimeBg = unoptimizedScanTimerBg != null ? + unoptimizedScanTimerBg.getTotalDurationMsLocked(rawRealtimeMs) : 0; + final long unoptimizedScanMaxTimeBg = unoptimizedScanTimerBg != null ? + unoptimizedScanTimerBg.getMaxDurationMsLocked(rawRealtimeMs) : 0; + dumpLine(pw, uid, category, BLUETOOTH_MISC_DATA, totalTime, count, - countBg, actualTime, actualTimeBg, resultCount); + countBg, actualTime, actualTimeBg, resultCount, resultCountBg, + unoptimizedScanTotalTime, unoptimizedScanTotalTimeBg, + unoptimizedScanMaxTime, unoptimizedScanMaxTimeBg); } } @@ -3469,8 +3501,11 @@ public abstract class BatteryStats implements Parcelable { sb.setLength(0); linePrefix = printWakeLockCheckin(sb, wl.getWakeTime(WAKE_TYPE_FULL), rawRealtime, "f", which, linePrefix); - linePrefix = printWakeLockCheckin(sb, wl.getWakeTime(WAKE_TYPE_PARTIAL), + final Timer pTimer = wl.getWakeTime(WAKE_TYPE_PARTIAL); + linePrefix = printWakeLockCheckin(sb, pTimer, rawRealtime, "p", which, linePrefix); + linePrefix = printWakeLockCheckin(sb, pTimer != null ? pTimer.getSubTimer() : null, + rawRealtime, "bp", which, linePrefix); linePrefix = printWakeLockCheckin(sb, wl.getWakeTime(WAKE_TYPE_WINDOW), rawRealtime, "w", which, linePrefix); @@ -4625,34 +4660,94 @@ public abstract class BatteryStats implements Parcelable { final long actualTimeMs = bleTimer.getTotalDurationMsLocked(rawRealtimeMs); final long actualTimeMsBg = bleTimerBg != null ? bleTimerBg.getTotalDurationMsLocked(rawRealtimeMs) : 0; + // Result counters final int resultCount = u.getBluetoothScanResultCounter() != null ? u.getBluetoothScanResultCounter().getCountLocked(which) : 0; + final int resultCountBg = u.getBluetoothScanResultBgCounter() != null ? + u.getBluetoothScanResultBgCounter().getCountLocked(which) : 0; + // Unoptimized scan timer. Unpooled and since reset (regardless of 'which'). + final Timer unoptimizedScanTimer = u.getBluetoothUnoptimizedScanTimer(); + final long unoptimizedScanTotalTime = unoptimizedScanTimer != null ? + unoptimizedScanTimer.getTotalDurationMsLocked(rawRealtimeMs) : 0; + final long unoptimizedScanMaxTime = unoptimizedScanTimer != null ? + unoptimizedScanTimer.getMaxDurationMsLocked(rawRealtimeMs) : 0; + // Unoptimized bg scan timer. Unpooled and since reset (regardless of 'which'). + final Timer unoptimizedScanTimerBg = + u.getBluetoothUnoptimizedScanBackgroundTimer(); + final long unoptimizedScanTotalTimeBg = unoptimizedScanTimerBg != null ? + unoptimizedScanTimerBg.getTotalDurationMsLocked(rawRealtimeMs) : 0; + final long unoptimizedScanMaxTimeBg = unoptimizedScanTimerBg != null ? + unoptimizedScanTimerBg.getMaxDurationMsLocked(rawRealtimeMs) : 0; sb.setLength(0); - sb.append(prefix); - sb.append(" "); - sb.append("Bluetooth Scan"); - sb.append(": "); if (actualTimeMs != totalTimeMs) { + sb.append(prefix); + sb.append(" Bluetooth Scan (total blamed realtime): "); formatTimeMs(sb, totalTimeMs); - sb.append("blamed realtime, "); + sb.append(" ("); + sb.append(count); + sb.append(" times)"); + if (bleTimer.isRunningLocked()) { + sb.append(" (currently running)"); + } + sb.append("\n"); } - formatTimeMs(sb, actualTimeMs); // since reset, regardless of 'which' - sb.append("realtime ("); + + sb.append(prefix); + sb.append(" Bluetooth Scan (total actual realtime): "); + formatTimeMs(sb, actualTimeMs); // since reset, ignores 'which' + sb.append(" ("); sb.append(count); sb.append(" times)"); if (bleTimer.isRunningLocked()) { - sb.append(" (running)"); + sb.append(" (currently running)"); } - if (actualTimeMsBg != 0 || countBg > 0) { - sb.append(", "); - formatTimeMs(sb, actualTimeMsBg); // since reset, regardless of 'which' - sb.append("background ("); + sb.append("\n"); + if (actualTimeMsBg > 0 || countBg > 0) { + sb.append(prefix); + sb.append(" Bluetooth Scan (background realtime): "); + formatTimeMs(sb, actualTimeMsBg); // since reset, ignores 'which' + sb.append(" ("); sb.append(countBg); sb.append(" times)"); + if (bleTimerBg != null && bleTimerBg.isRunningLocked()) { + sb.append(" (currently running in background)"); + } + sb.append("\n"); } - sb.append("; Results count "); + + sb.append(prefix); + sb.append(" Bluetooth Scan Results: "); sb.append(resultCount); + sb.append(" ("); + sb.append(resultCountBg); + sb.append(" in background)"); + + if (unoptimizedScanTotalTime > 0 || unoptimizedScanTotalTimeBg > 0) { + sb.append("\n"); + sb.append(prefix); + sb.append(" Unoptimized Bluetooth Scan (realtime): "); + formatTimeMs(sb, unoptimizedScanTotalTime); // since reset, ignores 'which' + sb.append(" (max "); + formatTimeMs(sb, unoptimizedScanMaxTime); // since reset, ignores 'which' + sb.append(")"); + if (unoptimizedScanTimer != null + && unoptimizedScanTimer.isRunningLocked()) { + sb.append(" (currently running unoptimized)"); + } + if (unoptimizedScanTimerBg != null && unoptimizedScanTotalTimeBg > 0) { + sb.append("\n"); + sb.append(prefix); + sb.append(" Unoptimized Bluetooth Scan (background realtime): "); + formatTimeMs(sb, unoptimizedScanTotalTimeBg); // since reset + sb.append(" (max "); + formatTimeMs(sb, unoptimizedScanMaxTimeBg); // since reset + sb.append(")"); + if (unoptimizedScanTimerBg.isRunningLocked()) { + sb.append(" (currently running unoptimized in background)"); + } + } + } pw.println(sb.toString()); uidActivity = true; } @@ -4696,8 +4791,11 @@ public abstract class BatteryStats implements Parcelable { sb.append(wakelocks.keyAt(iw)); linePrefix = printWakeLock(sb, wl.getWakeTime(WAKE_TYPE_FULL), rawRealtime, "full", which, linePrefix); - linePrefix = printWakeLock(sb, wl.getWakeTime(WAKE_TYPE_PARTIAL), rawRealtime, + final Timer pTimer = wl.getWakeTime(WAKE_TYPE_PARTIAL); + linePrefix = printWakeLock(sb, pTimer, rawRealtime, "partial", which, linePrefix); + linePrefix = printWakeLock(sb, pTimer != null ? pTimer.getSubTimer() : null, + rawRealtime, "background partial", which, linePrefix); linePrefix = printWakeLock(sb, wl.getWakeTime(WAKE_TYPE_WINDOW), rawRealtime, "window", which, linePrefix); linePrefix = printWakeLock(sb, wl.getWakeTime(WAKE_TYPE_DRAW), rawRealtime, diff --git a/core/java/android/view/AppTransitionAnimationSpec.java b/core/java/android/view/AppTransitionAnimationSpec.java index c6e1989e8b55..86a5fb761355 100644 --- a/core/java/android/view/AppTransitionAnimationSpec.java +++ b/core/java/android/view/AppTransitionAnimationSpec.java @@ -1,6 +1,6 @@ package android.view; -import android.graphics.Bitmap; +import android.graphics.GraphicBuffer; import android.graphics.Rect; import android.os.Parcel; import android.os.Parcelable; @@ -15,19 +15,19 @@ import android.os.Parcelable; */ public class AppTransitionAnimationSpec implements Parcelable { public final int taskId; - public final Bitmap bitmap; + public final GraphicBuffer buffer; public final Rect rect; - public AppTransitionAnimationSpec(int taskId, Bitmap bitmap, Rect rect) { + public AppTransitionAnimationSpec(int taskId, GraphicBuffer buffer, Rect rect) { this.taskId = taskId; - this.bitmap = bitmap; this.rect = rect; + this.buffer = buffer; } public AppTransitionAnimationSpec(Parcel in) { taskId = in.readInt(); - bitmap = in.readParcelable(null); rect = in.readParcelable(null); + buffer = in.readParcelable(null); } @Override @@ -38,9 +38,8 @@ public class AppTransitionAnimationSpec implements Parcelable { @Override public void writeToParcel(Parcel dest, int flags) { dest.writeInt(taskId); - dest.writeParcelable(bitmap, 0 /* flags */); dest.writeParcelable(rect, 0 /* flags */); - + dest.writeParcelable(buffer, 0); } public static final Parcelable.Creator<AppTransitionAnimationSpec> CREATOR @@ -56,6 +55,6 @@ public class AppTransitionAnimationSpec implements Parcelable { @Override public String toString() { - return "{taskId: " + taskId + ", bitmap: " + bitmap + ", rect: " + rect + "}"; + return "{taskId: " + taskId + ", buffer: " + buffer + ", rect: " + rect + "}"; } } diff --git a/core/java/android/view/IWindowManager.aidl b/core/java/android/view/IWindowManager.aidl index a2ff4f787b61..58a6a5e78803 100644 --- a/core/java/android/view/IWindowManager.aidl +++ b/core/java/android/view/IWindowManager.aidl @@ -26,6 +26,7 @@ import com.android.internal.policy.IShortcutService; import android.content.res.CompatibilityInfo; import android.content.res.Configuration; import android.graphics.Bitmap; +import android.graphics.GraphicBuffer; import android.graphics.Point; import android.graphics.Rect; import android.os.Bundle; @@ -96,9 +97,9 @@ interface IWindowManager int startHeight); void overridePendingAppTransitionClipReveal(int startX, int startY, int startWidth, int startHeight); - void overridePendingAppTransitionThumb(in Bitmap srcThumb, int startX, int startY, + void overridePendingAppTransitionThumb(in GraphicBuffer srcThumb, int startX, int startY, IRemoteCallback startedCallback, boolean scaleUp); - void overridePendingAppTransitionAspectScaledThumb(in Bitmap srcThumb, int startX, + void overridePendingAppTransitionAspectScaledThumb(in GraphicBuffer srcThumb, int startX, int startY, int targetWidth, int targetHeight, IRemoteCallback startedCallback, boolean scaleUp); /** diff --git a/core/java/android/view/autofill/AutofillManager.java b/core/java/android/view/autofill/AutofillManager.java index a2aff931ccff..02ecc501ea39 100644 --- a/core/java/android/view/autofill/AutofillManager.java +++ b/core/java/android/view/autofill/AutofillManager.java @@ -258,6 +258,11 @@ public final class AutofillManager { * @return The view, or {@code null} if not found */ @Nullable View findViewByAccessibilityIdTraversal(int viewId); + + /** + * Runs the specified action on the UI thread. + */ + void runOnUiThread(Runnable action); } /** @@ -1233,6 +1238,15 @@ public final class AutofillManager { return mService != null; } + private void post(Runnable runnable) { + final AutofillClient client = getClientLocked(); + if (client == null) { + if (sVerbose) Log.v(TAG, "ignoring post() because client is null"); + return; + } + client.runOnUiThread(runnable); + } + /** * View tracking information. Once all tracked views become invisible the session is finished. */ @@ -1516,8 +1530,7 @@ public final class AutofillManager { public void setState(boolean enabled, boolean resetSession, boolean resetClient) { final AutofillManager afm = mAfm.get(); if (afm != null) { - afm.mContext.getMainThreadHandler().post( - () -> afm.setState(enabled, resetSession, resetClient)); + afm.post(() -> afm.setState(enabled, resetSession, resetClient)); } } @@ -1525,8 +1538,7 @@ public final class AutofillManager { public void autofill(int sessionId, List<AutofillId> ids, List<AutofillValue> values) { final AutofillManager afm = mAfm.get(); if (afm != null) { - afm.mContext.getMainThreadHandler().post( - () -> afm.autofill(sessionId, ids, values)); + afm.post(() -> afm.autofill(sessionId, ids, values)); } } @@ -1535,8 +1547,7 @@ public final class AutofillManager { Intent fillInIntent) { final AutofillManager afm = mAfm.get(); if (afm != null) { - afm.mContext.getMainThreadHandler().post( - () -> afm.authenticate(sessionId, authenticationId, intent, fillInIntent)); + afm.post(() -> afm.authenticate(sessionId, authenticationId, intent, fillInIntent)); } } @@ -1545,9 +1556,8 @@ public final class AutofillManager { Rect anchorBounds, IAutofillWindowPresenter presenter) { final AutofillManager afm = mAfm.get(); if (afm != null) { - afm.mContext.getMainThreadHandler().post( - () -> afm.requestShowFillUi(sessionId, id, width, height, anchorBounds, - presenter)); + afm.post(() -> afm.requestShowFillUi(sessionId, id, width, height, anchorBounds, + presenter)); } } @@ -1555,7 +1565,7 @@ public final class AutofillManager { public void requestHideFillUi(int sessionId, AutofillId id) { final AutofillManager afm = mAfm.get(); if (afm != null) { - afm.mContext.getMainThreadHandler().post(() -> afm.requestHideFillUi(id)); + afm.post(() -> afm.requestHideFillUi(id)); } } @@ -1563,7 +1573,7 @@ public final class AutofillManager { public void notifyNoFillUi(int sessionId, AutofillId id) { final AutofillManager afm = mAfm.get(); if (afm != null) { - afm.mContext.getMainThreadHandler().post(() -> afm.notifyNoFillUi(sessionId, id)); + afm.post(() -> afm.notifyNoFillUi(sessionId, id)); } } @@ -1571,7 +1581,7 @@ public final class AutofillManager { public void startIntentSender(IntentSender intentSender) { final AutofillManager afm = mAfm.get(); if (afm != null) { - afm.mContext.getMainThreadHandler().post(() -> { + afm.post(() -> { try { afm.mContext.startIntentSender(intentSender, null, 0, 0, 0); } catch (IntentSender.SendIntentException e) { @@ -1586,7 +1596,7 @@ public final class AutofillManager { boolean saveOnAllViewsInvisible, AutofillId[] fillableIds) { final AutofillManager afm = mAfm.get(); if (afm != null) { - afm.mContext.getMainThreadHandler().post(() -> + afm.post(() -> afm.setTrackedViews(sessionId, ids, saveOnAllViewsInvisible, fillableIds) ); } diff --git a/core/java/com/android/internal/app/IBatteryStats.aidl b/core/java/com/android/internal/app/IBatteryStats.aidl index 78566dfc458e..04f7c76c8e74 100644 --- a/core/java/com/android/internal/app/IBatteryStats.aidl +++ b/core/java/com/android/internal/app/IBatteryStats.aidl @@ -129,7 +129,7 @@ interface IBatteryStats { long getAwakeTimeBattery(); long getAwakeTimePlugged(); - void noteBleScanStarted(in WorkSource ws); + void noteBleScanStarted(in WorkSource ws, boolean isUnoptimized); void noteBleScanStopped(in WorkSource ws); void noteResetBleScan(); void noteBleScanResults(in WorkSource ws, int numNewResults); diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java index 31064ac73dff..3f7e6be161b8 100644 --- a/core/java/com/android/internal/os/BatteryStatsImpl.java +++ b/core/java/com/android/internal/os/BatteryStatsImpl.java @@ -116,7 +116,7 @@ public class BatteryStatsImpl extends BatteryStats { private static final int MAGIC = 0xBA757475; // 'BATSTATS' // Current on-disk Parcel version - private static final int VERSION = 158 + (USE_OLD_HISTORY ? 1000 : 0); + private static final int VERSION = 159 + (USE_OLD_HISTORY ? 1000 : 0); // Maximum number of items we will record in the history. private static final int MAX_HISTORY_ITEMS = 2000; @@ -862,21 +862,19 @@ public class BatteryStatsImpl extends BatteryStats { final AtomicInteger mCount = new AtomicInteger(); final TimeBase mTimeBase; int mLoadedCount; - int mLastCount; int mUnpluggedCount; int mPluggedCount; - Counter(TimeBase timeBase, Parcel in) { + public Counter(TimeBase timeBase, Parcel in) { mTimeBase = timeBase; mPluggedCount = in.readInt(); mCount.set(mPluggedCount); mLoadedCount = in.readInt(); - mLastCount = 0; mUnpluggedCount = in.readInt(); timeBase.add(this); } - Counter(TimeBase timeBase) { + public Counter(TimeBase timeBase) { mTimeBase = timeBase; timeBase.add(this); } @@ -887,11 +885,12 @@ public class BatteryStatsImpl extends BatteryStats { out.writeInt(mUnpluggedCount); } + @Override public void onTimeStarted(long elapsedRealtime, long baseUptime, long baseRealtime) { mUnpluggedCount = mPluggedCount; - mCount.set(mPluggedCount); } + @Override public void onTimeStopped(long elapsedRealtime, long baseUptime, long baseRealtime) { mPluggedCount = mCount.get(); } @@ -926,17 +925,22 @@ public class BatteryStatsImpl extends BatteryStats { public void logState(Printer pw, String prefix) { pw.println(prefix + "mCount=" + mCount.get() - + " mLoadedCount=" + mLoadedCount + " mLastCount=" + mLastCount + + " mLoadedCount=" + mLoadedCount + " mUnpluggedCount=" + mUnpluggedCount + " mPluggedCount=" + mPluggedCount); } - void stepAtomic() { - mCount.incrementAndGet(); + @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE) + public void stepAtomic() { + if (mTimeBase.isRunning()) { + mCount.incrementAndGet(); + } } void addAtomic(int delta) { - mCount.addAndGet(delta); + if (mTimeBase.isRunning()) { + mCount.addAndGet(delta); + } } /** @@ -944,7 +948,7 @@ public class BatteryStatsImpl extends BatteryStats { */ void reset(boolean detachIfReset) { mCount.set(0); - mLoadedCount = mLastCount = mPluggedCount = mUnpluggedCount = 0; + mLoadedCount = mPluggedCount = mUnpluggedCount = 0; if (detachIfReset) { detach(); } @@ -954,15 +958,16 @@ public class BatteryStatsImpl extends BatteryStats { mTimeBase.remove(this); } - void writeSummaryFromParcelLocked(Parcel out) { + @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE) + public void writeSummaryFromParcelLocked(Parcel out) { int count = mCount.get(); out.writeInt(count); } - void readSummaryFromParcelLocked(Parcel in) { + @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE) + public void readSummaryFromParcelLocked(Parcel in) { mLoadedCount = in.readInt(); mCount.set(mLoadedCount); - mLastCount = 0; mUnpluggedCount = mPluggedCount = mLoadedCount; } } @@ -998,7 +1003,6 @@ public class BatteryStatsImpl extends BatteryStats { @Override public void onTimeStarted(long elapsedRealTime, long baseUptime, long baseRealtime) { mUnpluggedCounts = copyArray(mPluggedCounts, mUnpluggedCounts); - mCounts = copyArray(mPluggedCounts, mCounts); } @Override @@ -1029,11 +1033,13 @@ public class BatteryStatsImpl extends BatteryStats { if (counts == null) { return; } - if (mCounts == null) { - mCounts = new long[counts.length]; - } - for (int i = 0; i < counts.length; ++i) { - mCounts[i] += counts[i]; + if (mTimeBase.isRunning()) { + if (mCounts == null) { + mCounts = new long[counts.length]; + } + for (int i = 0; i < counts.length; ++i) { + mCounts[i] += counts[i]; + } } } @@ -1104,13 +1110,13 @@ public class BatteryStatsImpl extends BatteryStats { } } - private void fillArray(long[] a, long val) { + private static void fillArray(long[] a, long val) { if (a != null) { Arrays.fill(a, val); } } - private void subtract(@NonNull long[] val, long[] toSubtract) { + private static void subtract(@NonNull long[] val, long[] toSubtract) { if (toSubtract == null) { return; } @@ -1119,7 +1125,7 @@ public class BatteryStatsImpl extends BatteryStats { } } - private long[] copyArray(long[] src, long[] dest) { + private static long[] copyArray(long[] src, long[] dest) { if (src == null) { return null; } else { @@ -1162,7 +1168,6 @@ public class BatteryStatsImpl extends BatteryStats { @Override public void onTimeStarted(long elapsedRealtime, long baseUptime, long baseRealtime) { mUnpluggedCount = mPluggedCount; - mCount = mPluggedCount; } @Override @@ -1189,7 +1194,9 @@ public class BatteryStatsImpl extends BatteryStats { } void addCountLocked(long count) { - mCount += count; + if (mTimeBase.isRunning()) { + mCount += count; + } } /** @@ -4821,7 +4828,7 @@ public class BatteryStatsImpl extends BatteryStats { } } - private void noteBluetoothScanStartedLocked(int uid) { + private void noteBluetoothScanStartedLocked(int uid, boolean isUnoptimized) { uid = mapUid(uid); final long elapsedRealtime = mClocks.elapsedRealtime(); final long uptime = mClocks.uptimeMillis(); @@ -4833,13 +4840,13 @@ public class BatteryStatsImpl extends BatteryStats { mBluetoothScanTimer.startRunningLocked(elapsedRealtime); } mBluetoothScanNesting++; - getUidStatsLocked(uid).noteBluetoothScanStartedLocked(elapsedRealtime); + getUidStatsLocked(uid).noteBluetoothScanStartedLocked(elapsedRealtime, isUnoptimized); } - public void noteBluetoothScanStartedFromSourceLocked(WorkSource ws) { + public void noteBluetoothScanStartedFromSourceLocked(WorkSource ws, boolean isUnoptimized) { final int N = ws.size(); for (int i = 0; i < N; i++) { - noteBluetoothScanStartedLocked(ws.get(i)); + noteBluetoothScanStartedLocked(ws.get(i), isUnoptimized); } } @@ -5611,7 +5618,9 @@ public class BatteryStatsImpl extends BatteryStats { /** Total time spent by the uid holding any partial wakelocks. */ DualTimer mAggregatedPartialWakelockTimer; DualTimer mBluetoothScanTimer; + DualTimer mBluetoothUnoptimizedScanTimer; Counter mBluetoothScanResultCounter; + Counter mBluetoothScanResultBgCounter; int mProcessState = ActivityManager.PROCESS_STATE_NONEXISTENT; StopwatchTimer[] mProcessStateTimer; @@ -6096,20 +6105,41 @@ public class BatteryStatsImpl extends BatteryStats { return mBluetoothScanTimer; } - public void noteBluetoothScanStartedLocked(long elapsedRealtimeMs) { + public DualTimer createBluetoothUnoptimizedScanTimerLocked() { + if (mBluetoothUnoptimizedScanTimer == null) { + mBluetoothUnoptimizedScanTimer = new DualTimer(mBsi.mClocks, Uid.this, + BLUETOOTH_UNOPTIMIZED_SCAN_ON, null, + mBsi.mOnBatteryTimeBase, mOnBatteryBackgroundTimeBase); + } + return mBluetoothUnoptimizedScanTimer; + } + + public void noteBluetoothScanStartedLocked(long elapsedRealtimeMs, boolean isUnoptimized) { createBluetoothScanTimerLocked().startRunningLocked(elapsedRealtimeMs); + if (isUnoptimized) { + createBluetoothUnoptimizedScanTimerLocked().startRunningLocked(elapsedRealtimeMs); + } } public void noteBluetoothScanStoppedLocked(long elapsedRealtimeMs) { if (mBluetoothScanTimer != null) { mBluetoothScanTimer.stopRunningLocked(elapsedRealtimeMs); } + // In the ble code, a scan cannot change types and nested starts are not possible. + // So if an unoptimizedScan is running, it is now being stopped. + if (mBluetoothUnoptimizedScanTimer != null + && mBluetoothUnoptimizedScanTimer.isRunningLocked()) { + mBluetoothUnoptimizedScanTimer.stopRunningLocked(elapsedRealtimeMs); + } } public void noteResetBluetoothScanLocked(long elapsedRealtimeMs) { if (mBluetoothScanTimer != null) { mBluetoothScanTimer.stopAllRunningLocked(elapsedRealtimeMs); } + if (mBluetoothUnoptimizedScanTimer != null) { + mBluetoothUnoptimizedScanTimer.stopAllRunningLocked(elapsedRealtimeMs); + } } public Counter createBluetoothScanResultCounterLocked() { @@ -6119,8 +6149,17 @@ public class BatteryStatsImpl extends BatteryStats { return mBluetoothScanResultCounter; } + public Counter createBluetoothScanResultBgCounterLocked() { + if (mBluetoothScanResultBgCounter == null) { + mBluetoothScanResultBgCounter = new Counter(mOnBatteryBackgroundTimeBase); + } + return mBluetoothScanResultBgCounter; + } + public void noteBluetoothScanResultsLocked(int numNewResults) { createBluetoothScanResultCounterLocked().addAtomic(numNewResults); + // Uses background timebase, so the count will only be incremented if uid in background. + createBluetoothScanResultBgCounterLocked().addAtomic(numNewResults); } @Override @@ -6277,10 +6316,28 @@ public class BatteryStatsImpl extends BatteryStats { } @Override + public Timer getBluetoothUnoptimizedScanTimer() { + return mBluetoothUnoptimizedScanTimer; + } + + @Override + public Timer getBluetoothUnoptimizedScanBackgroundTimer() { + if (mBluetoothUnoptimizedScanTimer == null) { + return null; + } + return mBluetoothUnoptimizedScanTimer.getSubTimer(); + } + + @Override public Counter getBluetoothScanResultCounter() { return mBluetoothScanResultCounter; } + @Override + public Counter getBluetoothScanResultBgCounter() { + return mBluetoothScanResultBgCounter; + } + void makeProcessState(int i, Parcel in) { if (i < 0 || i >= NUM_PROCESS_STATE) return; @@ -6531,9 +6588,13 @@ public class BatteryStatsImpl extends BatteryStats { active |= !resetTimerIfNotNull(mForegroundActivityTimer, false); active |= !resetTimerIfNotNull(mAggregatedPartialWakelockTimer, false); active |= !resetTimerIfNotNull(mBluetoothScanTimer, false); + active |= !resetTimerIfNotNull(mBluetoothUnoptimizedScanTimer, false); if (mBluetoothScanResultCounter != null) { mBluetoothScanResultCounter.reset(false); } + if (mBluetoothScanResultBgCounter != null) { + mBluetoothScanResultBgCounter.reset(false); + } if (mProcessStateTimer != null) { for (int i = 0; i < NUM_PROCESS_STATE; i++) { @@ -6731,10 +6792,18 @@ public class BatteryStatsImpl extends BatteryStats { mBluetoothScanTimer.detach(); mBluetoothScanTimer = null; } + if (mBluetoothUnoptimizedScanTimer != null) { + mBluetoothUnoptimizedScanTimer.detach(); + mBluetoothUnoptimizedScanTimer = null; + } if (mBluetoothScanResultCounter != null) { mBluetoothScanResultCounter.detach(); mBluetoothScanResultCounter = null; } + if (mBluetoothScanResultBgCounter != null) { + mBluetoothScanResultBgCounter.detach(); + mBluetoothScanResultBgCounter = null; + } if (mUserActivityCounters != null) { for (int i=0; i<NUM_USER_ACTIVITY_TYPES; i++) { mUserActivityCounters[i].detach(); @@ -6919,12 +6988,24 @@ public class BatteryStatsImpl extends BatteryStats { } else { out.writeInt(0); } + if (mBluetoothUnoptimizedScanTimer != null) { + out.writeInt(1); + mBluetoothUnoptimizedScanTimer.writeToParcel(out, elapsedRealtimeUs); + } else { + out.writeInt(0); + } if (mBluetoothScanResultCounter != null) { out.writeInt(1); mBluetoothScanResultCounter.writeToParcel(out); } else { out.writeInt(0); } + if (mBluetoothScanResultBgCounter != null) { + out.writeInt(1); + mBluetoothScanResultBgCounter.writeToParcel(out); + } else { + out.writeInt(0); + } for (int i = 0; i < NUM_PROCESS_STATE; i++) { if (mProcessStateTimer[i] != null) { out.writeInt(1); @@ -7033,7 +7114,8 @@ public class BatteryStatsImpl extends BatteryStats { for (int j = 0; j < numWakelocks; j++) { String wakelockName = in.readString(); Uid.Wakelock wakelock = new Wakelock(mBsi, this); - wakelock.readFromParcelLocked(timeBase, screenOffTimeBase, in); + wakelock.readFromParcelLocked( + timeBase, screenOffTimeBase, mOnBatteryScreenOffBackgroundTimeBase, in); mWakelockStats.add(wakelockName, wakelock); } @@ -7168,10 +7250,22 @@ public class BatteryStatsImpl extends BatteryStats { mBluetoothScanTimer = null; } if (in.readInt() != 0) { + mBluetoothUnoptimizedScanTimer = new DualTimer(mBsi.mClocks, Uid.this, + BLUETOOTH_UNOPTIMIZED_SCAN_ON, null, + mBsi.mOnBatteryTimeBase, mOnBatteryBackgroundTimeBase, in); + } else { + mBluetoothUnoptimizedScanTimer = null; + } + if (in.readInt() != 0) { mBluetoothScanResultCounter = new Counter(mBsi.mOnBatteryTimeBase, in); } else { mBluetoothScanResultCounter = null; } + if (in.readInt() != 0) { + mBluetoothScanResultBgCounter = new Counter(mOnBatteryBackgroundTimeBase, in); + } else { + mBluetoothScanResultBgCounter = null; + } mProcessState = ActivityManager.PROCESS_STATE_NONEXISTENT; for (int i = 0; i < NUM_PROCESS_STATE; i++) { if (in.readInt() != 0) { @@ -7298,8 +7392,9 @@ public class BatteryStatsImpl extends BatteryStats { /** * How long (in ms) this uid has been keeping the device partially awake. + * Tracks both the total time and the time while the app was in the background. */ - DurationTimer mTimerPartial; + DualTimer mTimerPartial; /** * How long (in ms) this uid has been keeping the device fully awake. @@ -7344,13 +7439,13 @@ public class BatteryStatsImpl extends BatteryStats { * @param in the Parcel to be read from. * return a new Timer, or null. */ - private DurationTimer readDurationTimerFromParcel(int type, - ArrayList<StopwatchTimer> pool, TimeBase timeBase, Parcel in) { + private DualTimer readDualTimerFromParcel(int type, ArrayList<StopwatchTimer> pool, + TimeBase timeBase, TimeBase bgTimeBase, Parcel in) { if (in.readInt() == 0) { return null; } - return new DurationTimer(mBsi.mClocks, mUid, type, pool, timeBase, in); + return new DualTimer(mBsi.mClocks, mUid, type, pool, timeBase, bgTimeBase, in); } boolean reset() { @@ -7388,9 +7483,10 @@ public class BatteryStatsImpl extends BatteryStats { return !wlactive; } - void readFromParcelLocked(TimeBase timeBase, TimeBase screenOffTimeBase, Parcel in) { - mTimerPartial = readDurationTimerFromParcel(WAKE_TYPE_PARTIAL, - mBsi.mPartialTimers, screenOffTimeBase, in); + void readFromParcelLocked(TimeBase timeBase, TimeBase screenOffTimeBase, + TimeBase screenOffBgTimeBase, Parcel in) { + mTimerPartial = readDualTimerFromParcel(WAKE_TYPE_PARTIAL, + mBsi.mPartialTimers, screenOffTimeBase, screenOffBgTimeBase, in); mTimerFull = readStopwatchTimerFromParcel(WAKE_TYPE_FULL, mBsi.mFullTimers, timeBase, in); mTimerWindow = readStopwatchTimerFromParcel(WAKE_TYPE_WINDOW, @@ -7416,49 +7512,6 @@ public class BatteryStatsImpl extends BatteryStats { default: throw new IllegalArgumentException("type = " + type); } } - - public StopwatchTimer getStopwatchTimer(int type) { - switch (type) { - case WAKE_TYPE_PARTIAL: { - DurationTimer t = mTimerPartial; - if (t == null) { - t = new DurationTimer(mBsi.mClocks, mUid, WAKE_TYPE_PARTIAL, - mBsi.mPartialTimers, mBsi.mOnBatteryScreenOffTimeBase); - mTimerPartial = t; - } - return t; - } - case WAKE_TYPE_FULL: { - StopwatchTimer t = mTimerFull; - if (t == null) { - t = new StopwatchTimer(mBsi.mClocks, mUid, WAKE_TYPE_FULL, - mBsi.mFullTimers, mBsi.mOnBatteryTimeBase); - mTimerFull = t; - } - return t; - } - case WAKE_TYPE_WINDOW: { - StopwatchTimer t = mTimerWindow; - if (t == null) { - t = new StopwatchTimer(mBsi.mClocks, mUid, WAKE_TYPE_WINDOW, - mBsi.mWindowTimers, mBsi.mOnBatteryTimeBase); - mTimerWindow = t; - } - return t; - } - case WAKE_TYPE_DRAW: { - StopwatchTimer t = mTimerDraw; - if (t == null) { - t = new StopwatchTimer(mBsi.mClocks, mUid, WAKE_TYPE_DRAW, - mBsi.mDrawTimers, mBsi.mOnBatteryTimeBase); - mTimerDraw = t; - } - return t; - } - default: - throw new IllegalArgumentException("type=" + type); - } - } } public static class Sensor extends BatteryStats.Uid.Sensor { @@ -8351,16 +8404,16 @@ public class BatteryStatsImpl extends BatteryStats { Wakelock wl = new Wakelock(mBsi, this); mWakelockStats.add(wlName, wl); if (in.readInt() != 0) { - wl.getStopwatchTimer(WAKE_TYPE_FULL).readSummaryFromParcelLocked(in); + getWakelockTimerLocked(wl, WAKE_TYPE_FULL).readSummaryFromParcelLocked(in); } if (in.readInt() != 0) { - wl.getStopwatchTimer(WAKE_TYPE_PARTIAL).readSummaryFromParcelLocked(in); + getWakelockTimerLocked(wl, WAKE_TYPE_PARTIAL).readSummaryFromParcelLocked(in); } if (in.readInt() != 0) { - wl.getStopwatchTimer(WAKE_TYPE_WINDOW).readSummaryFromParcelLocked(in); + getWakelockTimerLocked(wl, WAKE_TYPE_WINDOW).readSummaryFromParcelLocked(in); } if (in.readInt() != 0) { - wl.getStopwatchTimer(WAKE_TYPE_DRAW).readSummaryFromParcelLocked(in); + getWakelockTimerLocked(wl, WAKE_TYPE_DRAW).readSummaryFromParcelLocked(in); } } @@ -8416,10 +8469,57 @@ public class BatteryStatsImpl extends BatteryStats { } } + public StopwatchTimer getWakelockTimerLocked(Wakelock wl, int type) { + if (wl == null) { + return null; + } + switch (type) { + case WAKE_TYPE_PARTIAL: { + DualTimer t = wl.mTimerPartial; + if (t == null) { + t = new DualTimer(mBsi.mClocks, this, WAKE_TYPE_PARTIAL, + mBsi.mPartialTimers, mBsi.mOnBatteryScreenOffTimeBase, + mOnBatteryScreenOffBackgroundTimeBase); + wl.mTimerPartial = t; + } + return t; + } + case WAKE_TYPE_FULL: { + StopwatchTimer t = wl.mTimerFull; + if (t == null) { + t = new StopwatchTimer(mBsi.mClocks, this, WAKE_TYPE_FULL, + mBsi.mFullTimers, mBsi.mOnBatteryTimeBase); + wl.mTimerFull = t; + } + return t; + } + case WAKE_TYPE_WINDOW: { + StopwatchTimer t = wl.mTimerWindow; + if (t == null) { + t = new StopwatchTimer(mBsi.mClocks, this, WAKE_TYPE_WINDOW, + mBsi.mWindowTimers, mBsi.mOnBatteryTimeBase); + wl.mTimerWindow = t; + } + return t; + } + case WAKE_TYPE_DRAW: { + StopwatchTimer t = wl.mTimerDraw; + if (t == null) { + t = new StopwatchTimer(mBsi.mClocks, this, WAKE_TYPE_DRAW, + mBsi.mDrawTimers, mBsi.mOnBatteryTimeBase); + wl.mTimerDraw = t; + } + return t; + } + default: + throw new IllegalArgumentException("type=" + type); + } + } + public void noteStartWakeLocked(int pid, String name, int type, long elapsedRealtimeMs) { Wakelock wl = mWakelockStats.startObject(name); if (wl != null) { - wl.getStopwatchTimer(type).startRunningLocked(elapsedRealtimeMs); + getWakelockTimerLocked(wl, type).startRunningLocked(elapsedRealtimeMs); } if (type == WAKE_TYPE_PARTIAL) { createAggregatedPartialWakelockTimerLocked().startRunningLocked(elapsedRealtimeMs); @@ -8435,7 +8535,7 @@ public class BatteryStatsImpl extends BatteryStats { public void noteStopWakeLocked(int pid, String name, int type, long elapsedRealtimeMs) { Wakelock wl = mWakelockStats.stopObject(name); if (wl != null) { - wl.getStopwatchTimer(type).stopRunningLocked(elapsedRealtimeMs); + getWakelockTimerLocked(wl, type).stopRunningLocked(elapsedRealtimeMs); } if (type == WAKE_TYPE_PARTIAL) { if (mAggregatedPartialWakelockTimer != null) { @@ -11380,8 +11480,14 @@ public class BatteryStatsImpl extends BatteryStats { u.createBluetoothScanTimerLocked().readSummaryFromParcelLocked(in); } if (in.readInt() != 0) { + u.createBluetoothUnoptimizedScanTimerLocked().readSummaryFromParcelLocked(in); + } + if (in.readInt() != 0) { u.createBluetoothScanResultCounterLocked().readSummaryFromParcelLocked(in); } + if (in.readInt() != 0) { + u.createBluetoothScanResultBgCounterLocked().readSummaryFromParcelLocked(in); + } u.mProcessState = ActivityManager.PROCESS_STATE_NONEXISTENT; for (int i = 0; i < Uid.NUM_PROCESS_STATE; i++) { if (in.readInt() != 0) { @@ -11789,12 +11895,24 @@ public class BatteryStatsImpl extends BatteryStats { } else { out.writeInt(0); } + if (u.mBluetoothUnoptimizedScanTimer != null) { + out.writeInt(1); + u.mBluetoothUnoptimizedScanTimer.writeSummaryFromParcelLocked(out, NOWREAL_SYS); + } else { + out.writeInt(0); + } if (u.mBluetoothScanResultCounter != null) { out.writeInt(1); u.mBluetoothScanResultCounter.writeSummaryFromParcelLocked(out); } else { out.writeInt(0); } + if (u.mBluetoothScanResultBgCounter != null) { + out.writeInt(1); + u.mBluetoothScanResultBgCounter.writeSummaryFromParcelLocked(out); + } else { + out.writeInt(0); + } for (int i = 0; i < Uid.NUM_PROCESS_STATE; i++) { if (u.mProcessStateTimer[i] != null) { out.writeInt(1); diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml index 3c42334be445..7e5a0816cba8 100644 --- a/core/res/res/values-ar/strings.xml +++ b/core/res/res/values-ar/strings.xml @@ -703,7 +703,7 @@ <string name="relationTypeFriend" msgid="7313106762483391262">"صديق"</string> <string name="relationTypeManager" msgid="6365677861610137895">"مدير"</string> <string name="relationTypeMother" msgid="4578571352962758304">"أم"</string> - <string name="relationTypeParent" msgid="4755635567562925226">"الأبوان"</string> + <string name="relationTypeParent" msgid="4755635567562925226">"الوالدان"</string> <string name="relationTypePartner" msgid="7266490285120262781">"شريك"</string> <string name="relationTypeReferredBy" msgid="101573059844135524">"جهة الإحالة"</string> <string name="relationTypeRelative" msgid="1799819930085610271">"قريب"</string> diff --git a/core/res/res/values-bs/strings.xml b/core/res/res/values-bs/strings.xml index 649cadd400d4..06e60202d231 100644 --- a/core/res/res/values-bs/strings.xml +++ b/core/res/res/values-bs/strings.xml @@ -28,15 +28,15 @@ <string name="petabyteShort" msgid="5637816680144990219">"PB"</string> <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string> <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> dana"</string> - <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> dan <xliff:g id="HOURS">%2$d</xliff:g> sati"</string> - <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> dan <xliff:g id="HOURS">%2$d</xliff:g> sat"</string> + <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> d i <xliff:g id="HOURS">%2$d</xliff:g> h"</string> + <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> d i <xliff:g id="HOURS">%2$d</xliff:g> h"</string> <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> sati"</string> - <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> sat <xliff:g id="MINUTES">%2$d</xliff:g> min"</string> - <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> sat <xliff:g id="MINUTES">%2$d</xliff:g> min"</string> + <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> h i <xliff:g id="MINUTES">%2$d</xliff:g> min"</string> + <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> h i <xliff:g id="MINUTES">%2$d</xliff:g> min"</string> <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> min"</string> <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> min"</string> - <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> min <xliff:g id="SECONDS">%2$d</xliff:g> sek"</string> - <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> min <xliff:g id="SECONDS">%2$d</xliff:g> sek"</string> + <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> min i <xliff:g id="SECONDS">%2$d</xliff:g> s"</string> + <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> min i <xliff:g id="SECONDS">%2$d</xliff:g> s"</string> <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> sek"</string> <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> sek"</string> <string name="untitled" msgid="4638956954852782576">"<Bez naslova>"</string> diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml index c644866b7e7a..c5774cf3e1a7 100644 --- a/core/res/res/values-ca/strings.xml +++ b/core/res/res/values-ca/strings.xml @@ -1116,7 +1116,7 @@ <string name="wifi_no_internet" msgid="8451173622563841546">"La Wi-Fi no té accés a Internet"</string> <string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Toca per veure les opcions"</string> <string name="network_switch_metered" msgid="4671730921726992671">"Actualment en ús: <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> - <string name="network_switch_metered_detail" msgid="5325661434777870353">"El dispositiu utilitza <xliff:g id="NEW_NETWORK">%1$s</xliff:g> en cas que <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> no tingui accés a Internet. És possible que s\'apliquin càrrecs."</string> + <string name="network_switch_metered_detail" msgid="5325661434777870353">"El dispositiu utilitza <xliff:g id="NEW_NETWORK">%1$s</xliff:g> en cas que <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> no tingui accés a Internet. És possible que s\'hi apliquin càrrecs."</string> <string name="network_switch_metered_toast" msgid="5779283181685974304">"Abans es feia servir la xarxa <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g>; ara s\'utilitza <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> <string-array name="network_switch_type_name"> <item msgid="3979506840912951943">"dades mòbils"</item> diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml index e7f9a7f2cdf4..d2f8ecf1778c 100644 --- a/core/res/res/values-ko/strings.xml +++ b/core/res/res/values-ko/strings.xml @@ -291,7 +291,7 @@ <string name="permgroupdesc_camera" msgid="3250611594678347720">"사진 및 동영상 촬영"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"전화"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"전화 걸기 및 관리"</string> - <string name="permgrouplab_sensors" msgid="416037179223226722">"신체 센서"</string> + <string name="permgrouplab_sensors" msgid="416037179223226722">"인체 감지 센서"</string> <string name="permgroupdesc_sensors" msgid="7147968539346634043">"생체 신호에 관한 센서 데이터에 액세스"</string> <string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"창 콘텐츠 가져오기"</string> <string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"상호작용 중인 창의 콘텐츠를 검사합니다."</string> @@ -381,7 +381,7 @@ <string name="permdesc_writeCallLog" product="tablet" msgid="6661806062274119245">"앱에서 수신 및 발신 통화 데이터를 포함하여 태블릿의 통화 기록을 수정할 수 있도록 허용합니다. 이 경우 악성 앱이 통화 기록을 지우거나 수정할 수 있습니다."</string> <string name="permdesc_writeCallLog" product="tv" msgid="4225034892248398019">"앱에서 수신 및 발신 통화 데이터를 포함하여 TV의 통화 기록을 수정할 수 있도록 허용합니다. 이 경우 악성 앱이 통화 기록을 삭제하거나 수정할 수도 있습니다."</string> <string name="permdesc_writeCallLog" product="default" msgid="683941736352787842">"앱에서 수신 및 발신 통화 데이터를 포함하여 휴대전화의 통화 기록을 수정할 수 있도록 허용합니다. 이 경우 악성 앱이 통화 기록을 지우거나 수정할 수 있습니다."</string> - <string name="permlab_bodySensors" msgid="4683341291818520277">"신체 센서(예: 심박수 모니터)에 액세스"</string> + <string name="permlab_bodySensors" msgid="4683341291818520277">"인체 감지 센서(예: 심박수 모니터)에 액세스"</string> <string name="permdesc_bodySensors" product="default" msgid="4380015021754180431">"앱이 심박수와 같은 신체 상태를 확인하는 센서의 데이터에 접근하도록 허용합니다."</string> <string name="permlab_readCalendar" msgid="6716116972752441641">"캘린더 일정 및 세부정보 읽기"</string> <string name="permdesc_readCalendar" product="tablet" msgid="4993979255403945892">"이 앱은 태블릿에 저장된 모든 캘린더 일정을 읽고 캘린더 데이터를 공유하거나 저장할 수 있습니다."</string> diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml index 69fe42f642e7..0d5f04ac3b70 100644 --- a/core/res/res/values-ru/strings.xml +++ b/core/res/res/values-ru/strings.xml @@ -213,7 +213,7 @@ <string name="reboot_to_update_prepare" msgid="6305853831955310890">"Подготовка обновлений…"</string> <string name="reboot_to_update_package" msgid="3871302324500927291">"Обработка обновлений…"</string> <string name="reboot_to_update_reboot" msgid="6428441000951565185">"Перезагрузка…"</string> - <string name="reboot_to_reset_title" msgid="4142355915340627490">"Сбросить все данные"</string> + <string name="reboot_to_reset_title" msgid="4142355915340627490">"Сброс к заводским настройкам"</string> <string name="reboot_to_reset_message" msgid="2432077491101416345">"Перезагрузка…"</string> <string name="shutdown_progress" msgid="2281079257329981203">"Выключение..."</string> <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"Планшетный ПК будет отключен."</string> diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml index 51d932d16560..eb9994aed9de 100644 --- a/core/res/res/values-th/strings.xml +++ b/core/res/res/values-th/strings.xml @@ -152,8 +152,8 @@ <string name="cfTemplateForwardedTime" msgid="9206251736527085256">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: <xliff:g id="DIALING_NUMBER">{1}</xliff:g> หลังผ่านไป <xliff:g id="TIME_DELAY">{2}</xliff:g> วินาที"</string> <string name="cfTemplateRegistered" msgid="5073237827620166285">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: ไม่ได้โอนสาย"</string> <string name="cfTemplateRegisteredTime" msgid="6781621964320635172">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: ไม่ได้โอนสาย"</string> - <string name="fcComplete" msgid="3118848230966886575">"รหัสคุณลักษณะเสร็จสมบูรณ์"</string> - <string name="fcError" msgid="3327560126588500777">"พบปัญหาในการเชื่อมต่อหรือรหัสคุณลักษณะไม่ถูกต้อง"</string> + <string name="fcComplete" msgid="3118848230966886575">"รหัสฟีเจอร์เสร็จสมบูรณ์"</string> + <string name="fcError" msgid="3327560126588500777">"พบปัญหาในการเชื่อมต่อหรือรหัสฟีเจอร์ไม่ถูกต้อง"</string> <string name="httpErrorOk" msgid="1191919378083472204">"ตกลง"</string> <string name="httpError" msgid="7956392511146698522">"เกิดข้อผิดพลาดของเครือข่าย"</string> <string name="httpErrorLookup" msgid="4711687456111963163">"ไม่พบ URL"</string> @@ -414,7 +414,7 @@ <string name="permlab_accessImsCallService" msgid="3574943847181793918">"เข้าถึงบริการโทร IMS"</string> <string name="permdesc_accessImsCallService" msgid="8992884015198298775">"อนุญาตให้แอปใช้บริการ IMS เพื่อโทรออกโดยคุณไม่ต้องดำเนินการใดๆ เลย"</string> <string name="permlab_readPhoneState" msgid="9178228524507610486">"อ่านสถานะและข้อมูลระบุตัวตนของโทรศัพท์"</string> - <string name="permdesc_readPhoneState" msgid="1639212771826125528">"อนุญาตให้แอปพลิเคชันเข้าถึงคุณลักษณะโทรศัพท์ของอุปกรณ์ การอนุญาตนี้ทำให้แอปพลิเคชันสามารถตรวจสอบหมายเลขโทรศัพท์และรหัสอุปกรณ์ ตรวจสอบว่ามีการโทรที่ทำงานอยู่หรือไม่ และตรวจสอบหมายเลขระยะไกลที่เชื่อมต่อด้วยการโทร"</string> + <string name="permdesc_readPhoneState" msgid="1639212771826125528">"อนุญาตให้แอปพลิเคชันเข้าถึงฟีเจอร์โทรศัพท์ของอุปกรณ์ การอนุญาตนี้ทำให้แอปพลิเคชันสามารถตรวจสอบหมายเลขโทรศัพท์และรหัสอุปกรณ์ ตรวจสอบว่ามีการโทรที่ทำงานอยู่หรือไม่ และตรวจสอบหมายเลขระยะไกลที่เชื่อมต่อด้วยการโทร"</string> <string name="permlab_manageOwnCalls" msgid="1503034913274622244">"กำหนดเส้นทางการโทรผ่านระบบ"</string> <string name="permdesc_manageOwnCalls" msgid="6552974537554717418">"อนุญาตให้แอปกำหนดเส้นทางการโทรของแอปผ่านระบบเพื่อปรับปรุงประสบการณ์ในการโทร"</string> <string name="permlab_readPhoneNumbers" msgid="6108163940932852440">"อ่านหมายเลขโทรศัพท์"</string> @@ -586,8 +586,8 @@ <string name="policydesc_encryptedStorage" msgid="2637732115325316992">"ข้อมูลของแอปพลิเคชันที่จัดเก็บต้องมีการเข้ารหัส"</string> <string name="policylab_disableCamera" msgid="6395301023152297826">"ปิดใช้งานกล้องถ่ายรูป"</string> <string name="policydesc_disableCamera" msgid="2306349042834754597">"ป้องกันการใช้กล้องถ่ายรูปของอุปกรณ์ทั้งหมด"</string> - <string name="policylab_disableKeyguardFeatures" msgid="8552277871075367771">"ปิดคุณลักษณะล็อกหน้าจอบางอย่าง"</string> - <string name="policydesc_disableKeyguardFeatures" msgid="2044755691354158439">"ป้องกันการใช้คุณลักษณะบางอย่างของการล็อกหน้าจอ"</string> + <string name="policylab_disableKeyguardFeatures" msgid="8552277871075367771">"ปิดฟีเจอร์ล็อกหน้าจอบางอย่าง"</string> + <string name="policydesc_disableKeyguardFeatures" msgid="2044755691354158439">"ป้องกันการใช้ฟีเจอร์บางอย่างของการล็อกหน้าจอ"</string> <string-array name="phoneTypes"> <item msgid="8901098336658710359">"บ้าน"</item> <item msgid="869923650527136615">"มือถือ"</item> @@ -722,7 +722,7 @@ <string name="lockscreen_pattern_correct" msgid="9039008650362261237">"ถูกต้อง!"</string> <string name="lockscreen_pattern_wrong" msgid="4317955014948108794">"ลองอีกครั้ง"</string> <string name="lockscreen_password_wrong" msgid="5737815393253165301">"ลองอีกครั้ง"</string> - <string name="lockscreen_storage_locked" msgid="9167551160010625200">"ปลดล็อกคุณลักษณะและข้อมูลทั้งหมด"</string> + <string name="lockscreen_storage_locked" msgid="9167551160010625200">"ปลดล็อกฟีเจอร์และข้อมูลทั้งหมด"</string> <string name="faceunlock_multiple_failures" msgid="754137583022792429">"มีความพยายามที่จะใช้ Face Unlock เกินขีดจำกัด"</string> <string name="lockscreen_missing_sim_message_short" msgid="5099439277819215399">"ไม่มีซิมการ์ด"</string> <string name="lockscreen_missing_sim_message" product="tablet" msgid="151659196095791474">"ไม่มีซิมการ์ดในแท็บเล็ต"</string> @@ -842,7 +842,7 @@ <string name="permdesc_writeHistoryBookmarks" product="tv" msgid="7007393823197766548">"อนุญาตให้แอปแก้ไขประวัติของเบราว์เซอร์หรือบุ๊กมาร์กที่เก็บไว้ในทีวี ซึ่งอาจอนุญาตให้แอปลบหรือแก้ไขข้อมูลเบราว์เซอร์ หมายเหตุ: สิทธิ์นี้ไม่สามารถใช้ได้กับเบราว์เซอร์ของบุคคลที่สามหรือแอปพลิเคชันอื่นที่สามารถท่องเว็บได้"</string> <string name="permdesc_writeHistoryBookmarks" product="default" msgid="8497389531014185509">"อนุญาตให้แอปพลิเคชันเปลี่ยนแปลงประวัติหรือบุ๊กมาร์กของเบราว์เซอร์ที่จัดเก็บไว้ในโทรศัพท์ ซึ่งทำให้แอปพลิเคชันสามารถลบหรือเปลี่ยนข้อมูลเบราว์เซอร์ได้ หมายเหตุ: การอนุญาตนี้อาจไม่สามารถใช้งานได้กับเบราว์เซอร์ของบุคคลที่สามหรือแอปพลิเคชันอื่นๆ ที่มีความสามารถในการเรียกดูบนเว็บ"</string> <string name="permlab_setAlarm" msgid="1379294556362091814">"ตั้งปลุก"</string> - <string name="permdesc_setAlarm" msgid="316392039157473848">"อนุญาตให้แอปพลิเคชันตั้งเวลาปลุกในแอปพลิเคชันนาฬิกาปลุกที่ติดตั้ง แอปพลิเคชันนาฬิกาปลุกบางรายการอาจไม่ใช้คุณลักษณะนี้"</string> + <string name="permdesc_setAlarm" msgid="316392039157473848">"อนุญาตให้แอปพลิเคชันตั้งเวลาปลุกในแอปพลิเคชันนาฬิกาปลุกที่ติดตั้ง แอปพลิเคชันนาฬิกาปลุกบางรายการอาจไม่ใช้ฟีเจอร์นี้"</string> <string name="permlab_addVoicemail" msgid="5525660026090959044">"เพิ่มข้อวามเสียง"</string> <string name="permdesc_addVoicemail" msgid="6604508651428252437">"อนุญาตให้แอปพลิเคชันเพิ่มข้อความลงในกล่องข้อความเสียงของคุณ"</string> <string name="permlab_writeGeolocationPermissions" msgid="5962224158955273932">"แก้ไขการอนุญาตเกี่ยวกับการระบุตำแหน่งทางภูมิศาสตร์ของเบราว์เซอร์"</string> @@ -1206,7 +1206,7 @@ <string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรลวศษสหฬอฮ"</string> <string name="alert_windows_notification_channel_name" msgid="3116610965549449803">"<xliff:g id="NAME">%s</xliff:g> แสดงทับแอปอื่นๆ"</string> <string name="alert_windows_notification_title" msgid="3697657294867638947">"<xliff:g id="NAME">%s</xliff:g> กำลังแสดงทับแอปอื่นๆ"</string> - <string name="alert_windows_notification_message" msgid="8917232109522912560">"หากคุณไม่ต้องการให้ <xliff:g id="NAME">%s</xliff:g> ใช้คุณลักษณะนี้ ให้แตะเพื่อเปิดการตั้งค่าแล้วปิดคุณลักษณะ"</string> + <string name="alert_windows_notification_message" msgid="8917232109522912560">"หากคุณไม่ต้องการให้ <xliff:g id="NAME">%s</xliff:g> ใช้ฟีเจอร์นี้ ให้แตะเพื่อเปิดการตั้งค่าแล้วปิดฟีเจอร์"</string> <string name="alert_windows_notification_turn_off_action" msgid="3367294525884949878">"ปิด"</string> <string name="ext_media_checking_notification_title" msgid="5734005953288045806">"กำลังเตรียม <xliff:g id="NAME">%s</xliff:g>"</string> <string name="ext_media_checking_notification_message" msgid="4747432538578886744">"กำลังตรวจหาข้อผิดพลาด"</string> @@ -1480,13 +1480,13 @@ <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"ลบ"</string> <string name="safe_media_volume_warning" product="default" msgid="2276318909314492312">"นี่เป็นการเพิ่มระดับเสียงเกินระดับที่แนะนำ\n\nการฟังเสียงดังเป็นเวลานานอาจทำให้การได้ยินของคุณบกพร่องได้"</string> <string name="accessibility_shortcut_warning_dialog_title" msgid="8404780875025725199">"ใช้ทางลัดการเข้าถึงพิเศษไหม"</string> - <string name="accessibility_shortcut_toogle_warning" msgid="7256507885737444807">"เมื่อทางลัดเปิดอยู่ การกดปุ่มปรับระดับเสียงทั้ง 2 ปุ่มเป็นเวลา 3 วินาทีจะเริ่มคุณลักษณะการเข้าถึงพิเศษ\n\n คุณลักษณะการเข้าถึงพิเศษปัจจุบัน:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n คุณสามารถเปลี่ยนคุณลักษณะในการตั้งค่า > การเข้าถึงพิเศษ"</string> + <string name="accessibility_shortcut_toogle_warning" msgid="7256507885737444807">"เมื่อทางลัดเปิดอยู่ การกดปุ่มปรับระดับเสียงทั้ง 2 ปุ่มเป็นเวลา 3 วินาทีจะเริ่มฟีเจอร์การเข้าถึงพิเศษ\n\n ฟีเจอร์การเข้าถึงพิเศษปัจจุบัน:\n <xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n คุณสามารถเปลี่ยนฟีเจอร์ในการตั้งค่า > การเข้าถึงพิเศษ"</string> <string name="disable_accessibility_shortcut" msgid="627625354248453445">"ปิดทางลัด"</string> <string name="leave_accessibility_shortcut_on" msgid="7653111894438512680">"ใช้ทางลัด"</string> <string name="accessibility_shortcut_enabling_service" msgid="7771852911861522636">"ทางลัดการเข้าถึงเปิด <xliff:g id="SERVICE_NAME">%1$s</xliff:g> แล้ว"</string> <string name="accessibility_shortcut_disabling_service" msgid="2747243438223109821">"ทางลัดการเข้าถึงปิด <xliff:g id="SERVICE_NAME">%1$s</xliff:g> แล้ว"</string> - <string name="accessibility_button_prompt_text" msgid="4234556536456854251">"เลือกคุณลักษณะที่จะใช้เมื่อคุณแตะปุ่ม \"การเข้าถึงพิเศษ\":"</string> - <string name="accessibility_button_instructional_text" msgid="6942300463612999993">"หากต้องการเปลี่ยนคุณลักษณะ ให้แตะปุ่ม \"การเข้าถึงพิเศษ\" ค้างไว้"</string> + <string name="accessibility_button_prompt_text" msgid="4234556536456854251">"เลือกฟีเจอร์ที่จะใช้เมื่อคุณแตะปุ่ม \"การเข้าถึงพิเศษ\":"</string> + <string name="accessibility_button_instructional_text" msgid="6942300463612999993">"หากต้องการเปลี่ยนฟีเจอร์ ให้แตะปุ่ม \"การเข้าถึงพิเศษ\" ค้างไว้"</string> <string name="accessibility_magnification_chooser_text" msgid="1227146738764986237">"การขยาย"</string> <string name="user_switched" msgid="3768006783166984410">"ผู้ใช้ปัจจุบัน <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="user_switching_message" msgid="2871009331809089783">"กำลังเปลี่ยนเป็น <xliff:g id="NAME">%1$s</xliff:g>…"</string> @@ -1708,7 +1708,7 @@ <string name="region_picker_section_all" msgid="8966316787153001779">"ภูมิภาคทั้งหมด"</string> <string name="locale_search_menu" msgid="2560710726687249178">"ค้นหา"</string> <string name="work_mode_off_title" msgid="2615362773958585967">"เปิดโหมดงานไหม"</string> - <string name="work_mode_off_message" msgid="2961559609199223594">"การดำเนินการนี้จะเปิดโปรไฟล์งานของคุณ รวมถึงแอป การซิงค์ในพื้นหลัง และคุณลักษณะที่เกี่ยวข้อง"</string> + <string name="work_mode_off_message" msgid="2961559609199223594">"การดำเนินการนี้จะเปิดโปรไฟล์งานของคุณ รวมถึงแอป การซิงค์ในพื้นหลัง และฟีเจอร์ที่เกี่ยวข้อง"</string> <string name="work_mode_turn_on" msgid="2062544985670564875">"เปิด"</string> <string name="new_sms_notification_title" msgid="8442817549127555977">"คุณมีข้อความใหม่"</string> <string name="new_sms_notification_content" msgid="7002938807812083463">"เปิดแอป SMS เพื่อดู"</string> diff --git a/core/tests/coretests/src/com/android/internal/os/BatteryStatsBackgroundStatsTest.java b/core/tests/coretests/src/com/android/internal/os/BatteryStatsBackgroundStatsTest.java index 9aabdbb2c8f0..c539f789ff60 100644 --- a/core/tests/coretests/src/com/android/internal/os/BatteryStatsBackgroundStatsTest.java +++ b/core/tests/coretests/src/com/android/internal/os/BatteryStatsBackgroundStatsTest.java @@ -205,9 +205,9 @@ public class BatteryStatsBackgroundStatsTest extends TestCase { // App in foreground bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND); - // Start timer + // Start timer (optimized) curr = 1000 * (clocks.realtime = clocks.uptime = 202); - bi.noteBluetoothScanStartedFromSourceLocked(ws); + bi.noteBluetoothScanStartedFromSourceLocked(ws, false); // Move to background curr = 1000 * (clocks.realtime = clocks.uptime = 254); @@ -221,21 +221,44 @@ public class BatteryStatsBackgroundStatsTest extends TestCase { curr = 1000 * (clocks.realtime = clocks.uptime = 409); bi.noteBluetoothScanStoppedFromSourceLocked(ws); + // Start timer (unoptimized) + curr = 1000 * (clocks.realtime = clocks.uptime = 1000); + bi.noteBluetoothScanStartedFromSourceLocked(ws, true); + + // On battery + curr = 1000 * (clocks.realtime = clocks.uptime = 2001); + bi.updateTimeBasesLocked(true, false, curr, curr); // on battery + + // Move to foreground + curr = 1000 * (clocks.realtime = clocks.uptime = 3004); + bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_TOP); + + // Stop timer + curr = 1000 * (clocks.realtime = clocks.uptime = 4008); + bi.noteBluetoothScanStoppedFromSourceLocked(ws); + // Test - curr = 1000 * (clocks.realtime = clocks.uptime = 657); + curr = 1000 * (clocks.realtime = clocks.uptime = 5000); BatteryStats.Timer timer = bi.getUidStats().get(UID).getBluetoothScanTimer(); BatteryStats.Timer bgTimer = bi.getUidStats().get(UID).getBluetoothScanBackgroundTimer(); + BatteryStats.Timer badTimer = bi.getUidStats().get(UID).getBluetoothUnoptimizedScanTimer(); + BatteryStats.Timer badBgTimer = bi.getUidStats().get(UID) + .getBluetoothUnoptimizedScanBackgroundTimer(); long time = timer.getTotalTimeLocked(curr, STATS_SINCE_CHARGED); int count = timer.getCountLocked(STATS_SINCE_CHARGED); int bgCount = bgTimer.getCountLocked(STATS_SINCE_CHARGED); long actualTime = timer.getTotalDurationMsLocked(clocks.realtime) * 1000; long bgTime = bgTimer.getTotalDurationMsLocked(clocks.realtime) * 1000; - assertEquals((305 - 202) * 1000, time); - assertEquals(1, count); - assertEquals(0, bgCount); - assertEquals((305 - 202) * 1000, actualTime); - assertEquals((305 - 254) * 1000, bgTime); + long badTime = badTimer.getTotalDurationMsLocked(clocks.realtime) * 1000; + long badBgTime = badBgTimer.getTotalDurationMsLocked(clocks.realtime) * 1000; + assertEquals((305 - 202 + 4008 - 2001) * 1000, time); + assertEquals(1, count); // second scan starts off-battery + assertEquals(0, bgCount); // first scan starts in fg, second starts off-battery + assertEquals((305 - 202 + 4008 - 2001) * 1000, actualTime); + assertEquals((305 - 254 + 3004 - 2001) * 1000, bgTime); + assertEquals((4008 - 2001) * 1000, badTime); + assertEquals((3004 - 2001) * 1000, badBgTime); } @SmallTest diff --git a/core/tests/coretests/src/com/android/internal/os/BatteryStatsCounterTest.java b/core/tests/coretests/src/com/android/internal/os/BatteryStatsCounterTest.java new file mode 100644 index 000000000000..08f8dd146516 --- /dev/null +++ b/core/tests/coretests/src/com/android/internal/os/BatteryStatsCounterTest.java @@ -0,0 +1,148 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.android.internal.os; + +import android.os.BatteryStats; +import android.os.Parcel; +import android.support.test.filters.SmallTest; + +import junit.framework.TestCase; + +/** + * Test BatteryStatsImpl.Counter. + */ +public class BatteryStatsCounterTest extends TestCase { + + @SmallTest + public void testCounter() throws Exception { + final MockClocks clocks = new MockClocks(); // holds realtime and uptime in ms + final BatteryStatsImpl.TimeBase timeBase = new BatteryStatsImpl.TimeBase(); + timeBase.init(clocks.uptimeMillis(), clocks.elapsedRealtime()); + + final BatteryStatsImpl.Counter counter = new BatteryStatsImpl.Counter(timeBase); + + // timeBase off (i.e. plugged in) + timeBase.setRunning(false, 1, 1); + counter.stepAtomic(); + counter.stepAtomic(); + counter.stepAtomic(); + counter.stepAtomic(); + counter.stepAtomic(); + assertEquals(0, counter.getCountLocked(BatteryStats.STATS_SINCE_CHARGED)); + assertEquals(0, counter.getCountLocked(BatteryStats.STATS_CURRENT)); + assertEquals(0, counter.getCountLocked(BatteryStats.STATS_SINCE_UNPLUGGED)); + + // timeBase on (i.e. unplugged) + timeBase.setRunning(true, 2, 2); + counter.stepAtomic(); + counter.stepAtomic(); + counter.stepAtomic(); + counter.stepAtomic(); + assertEquals(4, counter.getCountLocked(BatteryStats.STATS_SINCE_CHARGED)); + assertEquals(4, counter.getCountLocked(BatteryStats.STATS_CURRENT)); + assertEquals(4, counter.getCountLocked(BatteryStats.STATS_SINCE_UNPLUGGED)); + + // timeBase off (i.e. plugged in) + timeBase.setRunning(false, 3, 3); + counter.stepAtomic(); + counter.stepAtomic(); + counter.stepAtomic(); + assertEquals(4, counter.getCountLocked(BatteryStats.STATS_SINCE_CHARGED)); + assertEquals(4, counter.getCountLocked(BatteryStats.STATS_CURRENT)); + assertEquals(4, counter.getCountLocked(BatteryStats.STATS_SINCE_UNPLUGGED)); + + // timeBase on (i.e. unplugged) + timeBase.setRunning(true, 4, 4); + counter.stepAtomic(); + counter.stepAtomic(); + assertEquals(6, counter.getCountLocked(BatteryStats.STATS_SINCE_CHARGED)); + assertEquals(6, counter.getCountLocked(BatteryStats.STATS_CURRENT)); + assertEquals(2, counter.getCountLocked(BatteryStats.STATS_SINCE_UNPLUGGED)); + } + + + @SmallTest + public void testParceling() throws Exception { + final MockClocks clocks = new MockClocks(); // holds realtime and uptime in ms + final BatteryStatsImpl.TimeBase timeBase = new BatteryStatsImpl.TimeBase(); + timeBase.init(clocks.uptimeMillis(), clocks.elapsedRealtime()); + + final BatteryStatsImpl.Counter origCounter = new BatteryStatsImpl.Counter(timeBase); + + // timeBase on (i.e. unplugged) + timeBase.setRunning(true, 1, 1); + origCounter.stepAtomic(); origCounter.stepAtomic(); origCounter.stepAtomic(); // three times + assertEquals(3, origCounter.getCountLocked(BatteryStats.STATS_SINCE_CHARGED)); + assertEquals(3, origCounter.getCountLocked(BatteryStats.STATS_CURRENT)); + assertEquals(3, origCounter.getCountLocked(BatteryStats.STATS_SINCE_UNPLUGGED)); + + // Test summary parcelling (from origCounter) + final Parcel summaryParcel = Parcel.obtain(); + origCounter.writeSummaryFromParcelLocked(summaryParcel); + summaryParcel.setDataPosition(0); + final BatteryStatsImpl.Counter summaryCounter = new BatteryStatsImpl.Counter(timeBase); + summaryCounter.stepAtomic(); // occurs before reading the summary, so must not count later + summaryCounter.readSummaryFromParcelLocked(summaryParcel); + + // timeBase still on (i.e. unplugged) + summaryCounter.stepAtomic(); // once + assertEquals(4, summaryCounter.getCountLocked(BatteryStats.STATS_SINCE_CHARGED)); + assertEquals(1, summaryCounter.getCountLocked(BatteryStats.STATS_CURRENT)); + assertEquals(1, summaryCounter.getCountLocked(BatteryStats.STATS_SINCE_UNPLUGGED)); + + // timeBase off (i.e. plugged in) + timeBase.setRunning(false, 3, 3); + summaryCounter.stepAtomic(); summaryCounter.stepAtomic(); // twice + assertEquals(4, summaryCounter.getCountLocked(BatteryStats.STATS_SINCE_CHARGED)); + assertEquals(1, summaryCounter.getCountLocked(BatteryStats.STATS_CURRENT)); + assertEquals(1, summaryCounter.getCountLocked(BatteryStats.STATS_SINCE_UNPLUGGED)); + + // timeBase on (i.e. unplugged) + timeBase.setRunning(true, 4, 4); + summaryCounter.stepAtomic(); summaryCounter.stepAtomic(); // twice + assertEquals(6, summaryCounter.getCountLocked(BatteryStats.STATS_SINCE_CHARGED)); + assertEquals(3, summaryCounter.getCountLocked(BatteryStats.STATS_CURRENT)); + assertEquals(2, summaryCounter.getCountLocked(BatteryStats.STATS_SINCE_UNPLUGGED)); + + + // Test full parcelling (from summaryCounter) + final Parcel fullParcel = Parcel.obtain(); + summaryCounter.writeToParcel(fullParcel); + fullParcel.setDataPosition(0); + final BatteryStatsImpl.Counter fullParcelCounter + = new BatteryStatsImpl.Counter(timeBase, fullParcel); + + // timeBase still on (i.e. unplugged) + fullParcelCounter.stepAtomic(); // once + assertEquals(7, fullParcelCounter.getCountLocked(BatteryStats.STATS_SINCE_CHARGED)); + assertEquals(4, fullParcelCounter.getCountLocked(BatteryStats.STATS_CURRENT)); + assertEquals(3, fullParcelCounter.getCountLocked(BatteryStats.STATS_SINCE_UNPLUGGED)); + + // timeBase off (i.e. plugged in) + timeBase.setRunning(false, 5, 5); + fullParcelCounter.stepAtomic(); fullParcelCounter.stepAtomic(); // twice + assertEquals(7, fullParcelCounter.getCountLocked(BatteryStats.STATS_SINCE_CHARGED)); + assertEquals(4, fullParcelCounter.getCountLocked(BatteryStats.STATS_CURRENT)); + assertEquals(3, fullParcelCounter.getCountLocked(BatteryStats.STATS_SINCE_UNPLUGGED)); + + // timeBase on (i.e. unplugged) + timeBase.setRunning(true, 6, 6); + fullParcelCounter.stepAtomic(); fullParcelCounter.stepAtomic(); // twice + assertEquals(9, fullParcelCounter.getCountLocked(BatteryStats.STATS_SINCE_CHARGED)); + assertEquals(6, fullParcelCounter.getCountLocked(BatteryStats.STATS_CURRENT)); + assertEquals(2, fullParcelCounter.getCountLocked(BatteryStats.STATS_SINCE_UNPLUGGED)); + } +} diff --git a/core/tests/coretests/src/com/android/internal/os/BatteryStatsNoteTest.java b/core/tests/coretests/src/com/android/internal/os/BatteryStatsNoteTest.java index 06ca18d072e7..4e8ab316e1c9 100644 --- a/core/tests/coretests/src/com/android/internal/os/BatteryStatsNoteTest.java +++ b/core/tests/coretests/src/com/android/internal/os/BatteryStatsNoteTest.java @@ -37,12 +37,28 @@ public class BatteryStatsNoteTest extends TestCase{ public void testNoteBluetoothScanResultLocked() throws Exception { MockBatteryStatsImpl bi = new MockBatteryStatsImpl(new MockClocks()); bi.updateTimeBasesLocked(true, true, 0, 0); + bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_TOP); bi.noteBluetoothScanResultsFromSourceLocked(WS, 1); bi.noteBluetoothScanResultsFromSourceLocked(WS, 100); assertEquals(101, bi.getUidStats().get(UID).getBluetoothScanResultCounter() .getCountLocked(STATS_SINCE_CHARGED)); + // TODO: remove next line when Counter misreporting values when plugged-in bug is fixed. + bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_IMPORTANT_BACKGROUND); + BatteryStats.Counter bgCntr = bi.getUidStats().get(UID).getBluetoothScanResultBgCounter(); + if (bgCntr != null) { + assertEquals(0, bgCntr.getCountLocked(STATS_SINCE_CHARGED)); + } + + bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_IMPORTANT_BACKGROUND); + bi.noteBluetoothScanResultsFromSourceLocked(WS, 17); + assertEquals(101 + 17, + bi.getUidStats().get(UID).getBluetoothScanResultCounter() + .getCountLocked(STATS_SINCE_CHARGED)); + assertEquals(17, + bi.getUidStats().get(UID).getBluetoothScanResultBgCounter() + .getCountLocked(STATS_SINCE_CHARGED)); } /** Test BatteryStatsImpl.Uid.noteStartWakeLocked. */ diff --git a/core/tests/coretests/src/com/android/internal/os/BatteryStatsTests.java b/core/tests/coretests/src/com/android/internal/os/BatteryStatsTests.java index 3a16fcff38a2..1412d3e7df59 100644 --- a/core/tests/coretests/src/com/android/internal/os/BatteryStatsTests.java +++ b/core/tests/coretests/src/com/android/internal/os/BatteryStatsTests.java @@ -5,17 +5,18 @@ import org.junit.runners.Suite; @RunWith(Suite.class) @Suite.SuiteClasses({ + BatteryStatsBackgroundStatsTest.class, + BatteryStatsCounterTest.class, BatteryStatsDualTimerTest.class, BatteryStatsDurationTimerTest.class, + BatteryStatsNoteTest.class, BatteryStatsSamplingTimerTest.class, + BatteryStatsSensorTest.class, BatteryStatsServTest.class, BatteryStatsStopwatchTimerTest.class, BatteryStatsTimeBaseTest.class, BatteryStatsTimerTest.class, BatteryStatsUidTest.class, - BatteryStatsSensorTest.class, - BatteryStatsBackgroundStatsTest.class, - BatteryStatsNoteTest.class, }) public class BatteryStatsTests { } diff --git a/libs/hwui/pipeline/skia/RenderNodeDrawable.cpp b/libs/hwui/pipeline/skia/RenderNodeDrawable.cpp index 39f11b8e6bfe..4ee47afe87fd 100644 --- a/libs/hwui/pipeline/skia/RenderNodeDrawable.cpp +++ b/libs/hwui/pipeline/skia/RenderNodeDrawable.cpp @@ -61,8 +61,17 @@ void RenderNodeDrawable::drawBackwardsProjectedNodes(SkCanvas* canvas, const Ski static void clipOutline(const Outline& outline, SkCanvas* canvas, const SkRect* pendingClip) { Rect possibleRect; float radius; - LOG_ALWAYS_FATAL_IF(!outline.getAsRoundRect(&possibleRect, &radius), - "clipping outlines should be at most roundedRects"); + + /* To match the existing HWUI behavior we only supports rectangles or + * rounded rectangles; passing in a more complicated outline fails silently. + */ + if (!outline.getAsRoundRect(&possibleRect, &radius)) { + if (pendingClip) { + canvas->clipRect(*pendingClip); + } + return; + } + SkRect rect = possibleRect.toSkRect(); if (radius != 0.0f) { if (pendingClip && !pendingClip->contains(rect)) { diff --git a/packages/SystemUI/res/values-af/strings.xml b/packages/SystemUI/res/values-af/strings.xml index 36ceff57544f..3fce776e2e11 100644 --- a/packages/SystemUI/res/values-af/strings.xml +++ b/packages/SystemUI/res/values-af/strings.xml @@ -573,6 +573,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 minute"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 minute"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"1 uur"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"ONTDOEN"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"Sluimer vir <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string> <string name="battery_panel_title" msgid="7944156115535366613">"Batterygebruik"</string> diff --git a/packages/SystemUI/res/values-am/strings.xml b/packages/SystemUI/res/values-am/strings.xml index f9edd7c7b54f..a217d3cd8ee9 100644 --- a/packages/SystemUI/res/values-am/strings.xml +++ b/packages/SystemUI/res/values-am/strings.xml @@ -573,6 +573,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 ደቂቃዎች"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 ደቂቃዎች"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"1 ሰዓት"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"ቀልብስ"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"ለ<xliff:g id="TIME_AMOUNT">%1$s</xliff:g> አሸልቧል"</string> <string name="battery_panel_title" msgid="7944156115535366613">"የባትሪ አጠቃቀም"</string> diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml index 4ab49a026a91..1c1fbbce444c 100644 --- a/packages/SystemUI/res/values-ar/strings.xml +++ b/packages/SystemUI/res/values-ar/strings.xml @@ -589,6 +589,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"١٥ دقيقة"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"٣۰ دقيقة"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"ساعة واحدة"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"تراجع"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"تم تأجيل الإشعار لمدة <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string> <string name="battery_panel_title" msgid="7944156115535366613">"استخدام البطارية"</string> diff --git a/packages/SystemUI/res/values-az/strings.xml b/packages/SystemUI/res/values-az/strings.xml index aca6a3b31e07..24b71e7d5515 100644 --- a/packages/SystemUI/res/values-az/strings.xml +++ b/packages/SystemUI/res/values-az/strings.xml @@ -573,6 +573,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 dəqiqə"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 dəqiqə"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"1 saat"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"GERİ QAYTARIN"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"<xliff:g id="TIME_AMOUNT">%1$s</xliff:g> üçün təxirə salınıb"</string> <string name="battery_panel_title" msgid="7944156115535366613">"Batareya istifadəsi"</string> diff --git a/packages/SystemUI/res/values-b+sr+Latn/strings.xml b/packages/SystemUI/res/values-b+sr+Latn/strings.xml index 29a5e194c472..f4607300ce5d 100644 --- a/packages/SystemUI/res/values-b+sr+Latn/strings.xml +++ b/packages/SystemUI/res/values-b+sr+Latn/strings.xml @@ -577,6 +577,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 minuta"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 minuta"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"1 sat"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"OPOZOVI"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"Odloženo je za <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string> <string name="battery_panel_title" msgid="7944156115535366613">"Potrošnja baterije"</string> diff --git a/packages/SystemUI/res/values-be/strings.xml b/packages/SystemUI/res/values-be/strings.xml index 15f1d86db22a..dfad96ca84e1 100644 --- a/packages/SystemUI/res/values-be/strings.xml +++ b/packages/SystemUI/res/values-be/strings.xml @@ -583,6 +583,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 хвілін"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 хвілін"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"1 гадзіна"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"АДРАБІЦЬ"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"Адкладзена на <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string> <string name="battery_panel_title" msgid="7944156115535366613">"Выкарыстанне зараду"</string> diff --git a/packages/SystemUI/res/values-bg/strings.xml b/packages/SystemUI/res/values-bg/strings.xml index b77cc9e5b3ea..be327135046e 100644 --- a/packages/SystemUI/res/values-bg/strings.xml +++ b/packages/SystemUI/res/values-bg/strings.xml @@ -573,6 +573,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 минути"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 минути"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"1 час"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"ОТМЯНА"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"Отложено за <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string> <string name="battery_panel_title" msgid="7944156115535366613">"Ползв. на батерията"</string> diff --git a/packages/SystemUI/res/values-bn/strings.xml b/packages/SystemUI/res/values-bn/strings.xml index b9fa325880d7..822652ba8ad1 100644 --- a/packages/SystemUI/res/values-bn/strings.xml +++ b/packages/SystemUI/res/values-bn/strings.xml @@ -573,6 +573,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"১৫ মিনিট"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"৩০ মিনিট"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"১ ঘণ্টা"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"পূর্বাবস্থায় ফিরুন"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"<xliff:g id="TIME_AMOUNT">%1$s</xliff:g> পরে আবার মনে করানো হবে"</string> <string name="battery_panel_title" msgid="7944156115535366613">"ব্যাটারির ব্যবহার"</string> diff --git a/packages/SystemUI/res/values-bs/strings.xml b/packages/SystemUI/res/values-bs/strings.xml index 11450ae820cc..e4e02d7410d9 100644 --- a/packages/SystemUI/res/values-bs/strings.xml +++ b/packages/SystemUI/res/values-bs/strings.xml @@ -579,6 +579,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 minuta"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 minuta"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"1 sat"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"OPOZOVI"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"Odgođeno za <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string> <string name="battery_panel_title" msgid="7944156115535366613">"Potrošnja baterije"</string> diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml index 16f2a32185f5..c9254ef85cf3 100644 --- a/packages/SystemUI/res/values-ca/strings.xml +++ b/packages/SystemUI/res/values-ca/strings.xml @@ -573,6 +573,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 minuts"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 minuts"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"1 hora"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"DESFÉS"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"S\'ha posposat <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string> <string name="battery_panel_title" msgid="7944156115535366613">"Ús de la bateria"</string> diff --git a/packages/SystemUI/res/values-cs/strings.xml b/packages/SystemUI/res/values-cs/strings.xml index f4a45c2f2645..2ad9dbaa28b3 100644 --- a/packages/SystemUI/res/values-cs/strings.xml +++ b/packages/SystemUI/res/values-cs/strings.xml @@ -583,6 +583,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 minut"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 minut"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"1 hodina"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"VRÁTIT ZPĚT"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"Odloženo o <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string> <string name="battery_panel_title" msgid="7944156115535366613">"Využití baterie"</string> diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml index 55b39d56dfe4..e2852dd4bada 100644 --- a/packages/SystemUI/res/values-da/strings.xml +++ b/packages/SystemUI/res/values-da/strings.xml @@ -573,6 +573,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 minutter"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 minutter"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"1 time"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"FORTRYD"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"Udsat i <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string> <string name="battery_panel_title" msgid="7944156115535366613">"Batteriforbrug"</string> diff --git a/packages/SystemUI/res/values-de/strings.xml b/packages/SystemUI/res/values-de/strings.xml index bc7f1d5ffb60..b0b4323593ab 100644 --- a/packages/SystemUI/res/values-de/strings.xml +++ b/packages/SystemUI/res/values-de/strings.xml @@ -575,6 +575,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 Minuten"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 Minuten"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"1 Stunde"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"RÜCKGÄNGIG"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"Erinnerung in <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string> <string name="battery_panel_title" msgid="7944156115535366613">"Akkunutzung"</string> diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml index bbefef459a7d..5d8703492bb2 100644 --- a/packages/SystemUI/res/values-el/strings.xml +++ b/packages/SystemUI/res/values-el/strings.xml @@ -573,6 +573,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 λεπτά"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 λεπτά"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"1 ώρα"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"ΑΝΑΙΡΕΣΗ"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"Σε αφύπνιση για <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string> <string name="battery_panel_title" msgid="7944156115535366613">"Χρήση της μπαταρίας"</string> diff --git a/packages/SystemUI/res/values-en-rAU/strings.xml b/packages/SystemUI/res/values-en-rAU/strings.xml index 2561d29ecb76..05c413091c1f 100644 --- a/packages/SystemUI/res/values-en-rAU/strings.xml +++ b/packages/SystemUI/res/values-en-rAU/strings.xml @@ -573,6 +573,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 minutes"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 minutes"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"1 hour"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"UNDO"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"Snoozed for <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string> <string name="battery_panel_title" msgid="7944156115535366613">"Battery usage"</string> diff --git a/packages/SystemUI/res/values-en-rGB/strings.xml b/packages/SystemUI/res/values-en-rGB/strings.xml index 2561d29ecb76..05c413091c1f 100644 --- a/packages/SystemUI/res/values-en-rGB/strings.xml +++ b/packages/SystemUI/res/values-en-rGB/strings.xml @@ -573,6 +573,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 minutes"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 minutes"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"1 hour"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"UNDO"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"Snoozed for <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string> <string name="battery_panel_title" msgid="7944156115535366613">"Battery usage"</string> diff --git a/packages/SystemUI/res/values-en-rIN/strings.xml b/packages/SystemUI/res/values-en-rIN/strings.xml index 2561d29ecb76..05c413091c1f 100644 --- a/packages/SystemUI/res/values-en-rIN/strings.xml +++ b/packages/SystemUI/res/values-en-rIN/strings.xml @@ -573,6 +573,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 minutes"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 minutes"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"1 hour"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"UNDO"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"Snoozed for <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string> <string name="battery_panel_title" msgid="7944156115535366613">"Battery usage"</string> diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml index 64a4bfebed4f..07b564d9e8ee 100644 --- a/packages/SystemUI/res/values-es-rUS/strings.xml +++ b/packages/SystemUI/res/values-es-rUS/strings.xml @@ -575,6 +575,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 minutos"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 minutos"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"1 hora"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"DESHACER"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"Posponer <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string> <string name="battery_panel_title" msgid="7944156115535366613">"Uso de la batería"</string> diff --git a/packages/SystemUI/res/values-es/strings.xml b/packages/SystemUI/res/values-es/strings.xml index 8d9f8a58f853..3bf6a8cc003a 100644 --- a/packages/SystemUI/res/values-es/strings.xml +++ b/packages/SystemUI/res/values-es/strings.xml @@ -575,6 +575,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 minutos"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 minutos"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"1 hora"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"DESHACER"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"Volverá a mostrarse en <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string> <string name="battery_panel_title" msgid="7944156115535366613">"Uso de la batería"</string> diff --git a/packages/SystemUI/res/values-et/strings.xml b/packages/SystemUI/res/values-et/strings.xml index 604d266623aa..26b460319789 100644 --- a/packages/SystemUI/res/values-et/strings.xml +++ b/packages/SystemUI/res/values-et/strings.xml @@ -575,6 +575,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 minutit"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 minutit"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"Üks tund"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"VÕTA TAGASI"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"Edasi lükatud <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string> <string name="battery_panel_title" msgid="7944156115535366613">"Akukasutus"</string> diff --git a/packages/SystemUI/res/values-eu/strings.xml b/packages/SystemUI/res/values-eu/strings.xml index 2c83e5b8ff62..86fd3b24efa5 100644 --- a/packages/SystemUI/res/values-eu/strings.xml +++ b/packages/SystemUI/res/values-eu/strings.xml @@ -575,6 +575,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 minutu"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 minutu"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"1 ordu"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"DESEGIN"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"<xliff:g id="TIME_AMOUNT">%1$s</xliff:g>z atzeratu da"</string> <string name="battery_panel_title" msgid="7944156115535366613">"Bateriaren erabilera"</string> diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml index 1f49e9894262..5570f9edf7de 100644 --- a/packages/SystemUI/res/values-fa/strings.xml +++ b/packages/SystemUI/res/values-fa/strings.xml @@ -573,6 +573,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"۱۵ دقیقه"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"۳۰ دقیقه"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"۱ ساعت"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"واگرد"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"<xliff:g id="TIME_AMOUNT">%1$s</xliff:g> به تعویق افتاد"</string> <string name="battery_panel_title" msgid="7944156115535366613">"مصرف باتری"</string> diff --git a/packages/SystemUI/res/values-fi/strings.xml b/packages/SystemUI/res/values-fi/strings.xml index f5b0b6b96f8e..c60c4c45aa55 100644 --- a/packages/SystemUI/res/values-fi/strings.xml +++ b/packages/SystemUI/res/values-fi/strings.xml @@ -573,6 +573,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 minuuttia"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 minuuttia"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"1 tunti"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"KUMOA"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"Torkku: <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string> <string name="battery_panel_title" msgid="7944156115535366613">"Akun käyttö"</string> diff --git a/packages/SystemUI/res/values-fr-rCA/strings.xml b/packages/SystemUI/res/values-fr-rCA/strings.xml index e615ff427574..10b0cba8a0a5 100644 --- a/packages/SystemUI/res/values-fr-rCA/strings.xml +++ b/packages/SystemUI/res/values-fr-rCA/strings.xml @@ -575,6 +575,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 minutes"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 minutes"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"1 heure"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"ANNULER"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"Reporté pour <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string> <string name="battery_panel_title" msgid="7944156115535366613">"Utilisation de la pile"</string> diff --git a/packages/SystemUI/res/values-fr/strings.xml b/packages/SystemUI/res/values-fr/strings.xml index 811b16ce37bf..862d13fb748b 100644 --- a/packages/SystemUI/res/values-fr/strings.xml +++ b/packages/SystemUI/res/values-fr/strings.xml @@ -575,6 +575,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 minutes"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 minutes"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"1 heure"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"ANNULER"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"Répétée après <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string> <string name="battery_panel_title" msgid="7944156115535366613">"Utilisation batterie"</string> diff --git a/packages/SystemUI/res/values-gl/strings.xml b/packages/SystemUI/res/values-gl/strings.xml index 7481d1aea66d..0cb91b454b21 100644 --- a/packages/SystemUI/res/values-gl/strings.xml +++ b/packages/SystemUI/res/values-gl/strings.xml @@ -575,6 +575,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 minutos"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 minutos"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"1 hora"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"DESFACER"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"Adiouse <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string> <string name="battery_panel_title" msgid="7944156115535366613">"Uso de batería"</string> diff --git a/packages/SystemUI/res/values-gu/strings.xml b/packages/SystemUI/res/values-gu/strings.xml index ca7a779e7f1c..7f718d98b1f6 100644 --- a/packages/SystemUI/res/values-gu/strings.xml +++ b/packages/SystemUI/res/values-gu/strings.xml @@ -573,6 +573,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 મિનિટ"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 મિનિટ"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"1 કલાક"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"પૂર્વવત્ કરો"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"<xliff:g id="TIME_AMOUNT">%1$s</xliff:g> માટે સ્નૂઝ કરો"</string> <string name="battery_panel_title" msgid="7944156115535366613">"બૅટરી વપરાશ"</string> diff --git a/packages/SystemUI/res/values-hi/strings.xml b/packages/SystemUI/res/values-hi/strings.xml index 92bc82e033d0..613d8d302eb7 100644 --- a/packages/SystemUI/res/values-hi/strings.xml +++ b/packages/SystemUI/res/values-hi/strings.xml @@ -573,6 +573,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 मिनट"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 मिनट"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"1 घंटा"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"पहले जैसा करें"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"<xliff:g id="TIME_AMOUNT">%1$s</xliff:g> के लिए याद दिलाया गया"</string> <string name="battery_panel_title" msgid="7944156115535366613">"बैटरी उपयोग"</string> diff --git a/packages/SystemUI/res/values-hr/strings.xml b/packages/SystemUI/res/values-hr/strings.xml index 2065b8c42101..e716f5dfa98d 100644 --- a/packages/SystemUI/res/values-hr/strings.xml +++ b/packages/SystemUI/res/values-hr/strings.xml @@ -577,6 +577,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 minuta"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 minuta"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"1 sat"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"PONIŠTI"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"Odgođeno <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string> <string name="battery_panel_title" msgid="7944156115535366613">"Potrošnja baterije"</string> diff --git a/packages/SystemUI/res/values-hu/strings.xml b/packages/SystemUI/res/values-hu/strings.xml index d1e85d91710c..fe1b12b19b54 100644 --- a/packages/SystemUI/res/values-hu/strings.xml +++ b/packages/SystemUI/res/values-hu/strings.xml @@ -573,6 +573,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 perc"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 perc"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"1 óra"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"VISSZAVONÁS"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"Elhalasztva: <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string> <string name="battery_panel_title" msgid="7944156115535366613">"Akkumulátorhasználat"</string> diff --git a/packages/SystemUI/res/values-hy/strings.xml b/packages/SystemUI/res/values-hy/strings.xml index 1189b0535af6..bdceafe86670 100644 --- a/packages/SystemUI/res/values-hy/strings.xml +++ b/packages/SystemUI/res/values-hy/strings.xml @@ -573,6 +573,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 րոպե"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 րոպե"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"1 ժամ"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"ՀԵՏԱՐԿԵԼ"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"Հետաձգվել է <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>ով"</string> <string name="battery_panel_title" msgid="7944156115535366613">"Մարտկոցի օգտագործում"</string> diff --git a/packages/SystemUI/res/values-hy/strings_tv.xml b/packages/SystemUI/res/values-hy/strings_tv.xml index ac7711b39ecc..0493584e39a7 100644 --- a/packages/SystemUI/res/values-hy/strings_tv.xml +++ b/packages/SystemUI/res/values-hy/strings_tv.xml @@ -19,7 +19,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="notification_channel_tv_pip" msgid="134047986446577723">"Նկարը նկարի մեջ"</string> + <string name="notification_channel_tv_pip" msgid="134047986446577723">"Նկար նկարի մեջ"</string> <string name="pip_notification_unknown_title" msgid="6289156118095849438">"(Առանց վերնագրի ծրագիր)"</string> <string name="pip_close" msgid="3480680679023423574">"Փակել PIP-ն"</string> <string name="pip_fullscreen" msgid="8604643018538487816">"Լիէկրան"</string> diff --git a/packages/SystemUI/res/values-in/strings.xml b/packages/SystemUI/res/values-in/strings.xml index 25a2a14b0afa..2853d9d291dd 100644 --- a/packages/SystemUI/res/values-in/strings.xml +++ b/packages/SystemUI/res/values-in/strings.xml @@ -573,6 +573,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 menit"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 menit"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"1 jam"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"URUNG"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"Ditunda selama <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string> <string name="battery_panel_title" msgid="7944156115535366613">"Pemakaian baterai"</string> diff --git a/packages/SystemUI/res/values-is/strings.xml b/packages/SystemUI/res/values-is/strings.xml index d2b97872344f..f56720ae1d35 100644 --- a/packages/SystemUI/res/values-is/strings.xml +++ b/packages/SystemUI/res/values-is/strings.xml @@ -573,6 +573,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 mínútur"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 mínútur"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"1 klukkustund"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"AFTURKALLA"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"Þaggað í <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string> <string name="battery_panel_title" msgid="7944156115535366613">"Rafhlöðunotkun"</string> diff --git a/packages/SystemUI/res/values-it/strings.xml b/packages/SystemUI/res/values-it/strings.xml index 01b2464ed938..cfe5deb3e6e5 100644 --- a/packages/SystemUI/res/values-it/strings.xml +++ b/packages/SystemUI/res/values-it/strings.xml @@ -575,6 +575,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 minuti"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 minuti"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"1 ora"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"ANNULLA"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"Posticipato di <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string> <string name="battery_panel_title" msgid="7944156115535366613">"Utilizzo batteria"</string> diff --git a/packages/SystemUI/res/values-iw/strings.xml b/packages/SystemUI/res/values-iw/strings.xml index b7e950819f02..4b1236e5758b 100644 --- a/packages/SystemUI/res/values-iw/strings.xml +++ b/packages/SystemUI/res/values-iw/strings.xml @@ -581,6 +581,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 דקות"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 דקות"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"שעה אחת"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"ביטול"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"נדחה לטיפול בעוד <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string> <string name="battery_panel_title" msgid="7944156115535366613">"שימוש בסוללה"</string> @@ -638,7 +640,7 @@ <string name="headset" msgid="4534219457597457353">"אוזניות"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"אוזניות מחוברות"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"אוזניות מחוברות"</string> - <string name="data_saver" msgid="5037565123367048522">"חוסך הנתונים<br>(Data Saver)"</string> + <string name="data_saver" msgid="5037565123367048522">"חוסך הנתונים (Data Saver)"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"חוסך הנתונים (Data Saver) פועל"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"חוסך הנתונים (Data Saver) כבוי"</string> <string name="switch_bar_on" msgid="1142437840752794229">"פועל"</string> diff --git a/packages/SystemUI/res/values-ja/strings.xml b/packages/SystemUI/res/values-ja/strings.xml index 15fccc618d4e..4c7c85e43570 100644 --- a/packages/SystemUI/res/values-ja/strings.xml +++ b/packages/SystemUI/res/values-ja/strings.xml @@ -575,6 +575,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15分"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30分"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"1時間"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"元に戻す"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"スヌーズ: <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string> <string name="battery_panel_title" msgid="7944156115535366613">"電池の使用状況"</string> diff --git a/packages/SystemUI/res/values-ka/strings.xml b/packages/SystemUI/res/values-ka/strings.xml index 17320ef7eaf0..d8cbc199ad5b 100644 --- a/packages/SystemUI/res/values-ka/strings.xml +++ b/packages/SystemUI/res/values-ka/strings.xml @@ -573,6 +573,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 წუთი"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 წუთი"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"1 საათი"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"მოქმედების გაუქმება"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"ჩაჩუმებული იქნება <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string> <string name="battery_panel_title" msgid="7944156115535366613">"ბატარეის მოხმარება"</string> diff --git a/packages/SystemUI/res/values-kk/strings.xml b/packages/SystemUI/res/values-kk/strings.xml index 724af886ebce..f71601eb9b21 100644 --- a/packages/SystemUI/res/values-kk/strings.xml +++ b/packages/SystemUI/res/values-kk/strings.xml @@ -573,6 +573,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 минут"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 минут"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"1 сағат"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"КЕРІ ҚАЙТАРУ"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"<xliff:g id="TIME_AMOUNT">%1$s</xliff:g> кідіртілді"</string> <string name="battery_panel_title" msgid="7944156115535366613">"Батареяны пайдалану"</string> diff --git a/packages/SystemUI/res/values-km/strings.xml b/packages/SystemUI/res/values-km/strings.xml index 229e345f82ed..9aed68928016 100644 --- a/packages/SystemUI/res/values-km/strings.xml +++ b/packages/SystemUI/res/values-km/strings.xml @@ -573,6 +573,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 នាទី"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 នាទី"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"1 ម៉ោង"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"មិនធ្វើវិញ"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"បានផ្អាករយៈពេល <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string> <string name="battery_panel_title" msgid="7944156115535366613">"ការប្រើប្រាស់ថ្ម"</string> diff --git a/packages/SystemUI/res/values-kn/strings.xml b/packages/SystemUI/res/values-kn/strings.xml index 9c87cf7fd0bd..cd85f749d288 100644 --- a/packages/SystemUI/res/values-kn/strings.xml +++ b/packages/SystemUI/res/values-kn/strings.xml @@ -573,6 +573,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 ನಿಮಿಷಗಳು"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 ನಿಮಿಷಗಳು"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"1 ಗಂಟೆ"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"ರದ್ದುಮಾಡಿ"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"<xliff:g id="TIME_AMOUNT">%1$s</xliff:g> ಗೆ ಸ್ನೂಜ್ ಮಾಡಲಾಗಿದೆ"</string> <string name="battery_panel_title" msgid="7944156115535366613">"ಬ್ಯಾಟರಿ ಬಳಕೆ"</string> diff --git a/packages/SystemUI/res/values-ko/strings.xml b/packages/SystemUI/res/values-ko/strings.xml index 273b39051fcb..a237ba9926b7 100644 --- a/packages/SystemUI/res/values-ko/strings.xml +++ b/packages/SystemUI/res/values-ko/strings.xml @@ -575,6 +575,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15분"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30분"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"1시간"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"실행취소"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"<xliff:g id="TIME_AMOUNT">%1$s</xliff:g> 동안 일시 중지됨"</string> <string name="battery_panel_title" msgid="7944156115535366613">"배터리 사용량"</string> diff --git a/packages/SystemUI/res/values-ky/strings.xml b/packages/SystemUI/res/values-ky/strings.xml index 209d38d80263..1127c24c0b10 100644 --- a/packages/SystemUI/res/values-ky/strings.xml +++ b/packages/SystemUI/res/values-ky/strings.xml @@ -573,6 +573,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 мүнөт"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 мүнөт"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"1 саат"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"КАЙТАРУУ"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"<xliff:g id="TIME_AMOUNT">%1$s</xliff:g> тындырылды"</string> <string name="battery_panel_title" msgid="7944156115535366613">"Батарея колдонулушу"</string> diff --git a/packages/SystemUI/res/values-lo/strings.xml b/packages/SystemUI/res/values-lo/strings.xml index 536958370d53..42baec6d95ca 100644 --- a/packages/SystemUI/res/values-lo/strings.xml +++ b/packages/SystemUI/res/values-lo/strings.xml @@ -573,6 +573,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 ນາທີ"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 ນາທີ"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"1 ຊົ່ວໂມງ"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"ຍົກເລີກ"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"ເລື່ອນໄປ <xliff:g id="TIME_AMOUNT">%1$s</xliff:g> ນາທີແລ້ວ"</string> <string name="battery_panel_title" msgid="7944156115535366613">"ການໃຊ້ແບັດເຕີຣີ"</string> diff --git a/packages/SystemUI/res/values-lt/strings.xml b/packages/SystemUI/res/values-lt/strings.xml index cc123cf179d9..ce403ef8c6cb 100644 --- a/packages/SystemUI/res/values-lt/strings.xml +++ b/packages/SystemUI/res/values-lt/strings.xml @@ -581,6 +581,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 min."</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 min."</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"1 val."</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"ANULIUOTI"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"Nustatyta snausti <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string> <string name="battery_panel_title" msgid="7944156115535366613">"Akum. energ. vartoj."</string> diff --git a/packages/SystemUI/res/values-lv/strings.xml b/packages/SystemUI/res/values-lv/strings.xml index 9bd3c65bf260..28758ca7609b 100644 --- a/packages/SystemUI/res/values-lv/strings.xml +++ b/packages/SystemUI/res/values-lv/strings.xml @@ -577,6 +577,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 minūtes"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 minūtes"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"1 stunda"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"ATSAUKT"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"Atlikts: <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string> <string name="battery_panel_title" msgid="7944156115535366613">"Akumulatora lietojums"</string> diff --git a/packages/SystemUI/res/values-mk/strings.xml b/packages/SystemUI/res/values-mk/strings.xml index 519cfac30323..3355090c121f 100644 --- a/packages/SystemUI/res/values-mk/strings.xml +++ b/packages/SystemUI/res/values-mk/strings.xml @@ -573,6 +573,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 минути"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 минути"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"1 час"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"ВРАТИ"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"Одложено за <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string> <string name="battery_panel_title" msgid="7944156115535366613">"Користење батерија"</string> diff --git a/packages/SystemUI/res/values-ml/strings.xml b/packages/SystemUI/res/values-ml/strings.xml index a7aa20a401e0..a41e305eea55 100644 --- a/packages/SystemUI/res/values-ml/strings.xml +++ b/packages/SystemUI/res/values-ml/strings.xml @@ -573,6 +573,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 മിനിറ്റ്"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 മിനിറ്റ്"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"ഒരു മണിക്കൂർ"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"പഴയപടിയാക്കുക"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"<xliff:g id="TIME_AMOUNT">%1$s</xliff:g> സമയത്തേക്ക് സ്നൂസ് ചെയ്തു"</string> <string name="battery_panel_title" msgid="7944156115535366613">"ബാറ്ററി ഉപയോഗം"</string> diff --git a/packages/SystemUI/res/values-mn/strings.xml b/packages/SystemUI/res/values-mn/strings.xml index 7144c2849406..3a33cd6cb01f 100644 --- a/packages/SystemUI/res/values-mn/strings.xml +++ b/packages/SystemUI/res/values-mn/strings.xml @@ -573,6 +573,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 минут"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 минут"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"1 цаг"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"БУЦААХ"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"<xliff:g id="TIME_AMOUNT">%1$s</xliff:g>-д түр хойшлуулсан"</string> <string name="battery_panel_title" msgid="7944156115535366613">"Тэжээл ашиглалт"</string> diff --git a/packages/SystemUI/res/values-mr/strings.xml b/packages/SystemUI/res/values-mr/strings.xml index f7360c9d6944..ad107d8390f2 100644 --- a/packages/SystemUI/res/values-mr/strings.xml +++ b/packages/SystemUI/res/values-mr/strings.xml @@ -573,6 +573,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 मिनिटे"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 मिनिटे"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"1 तास"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"पूर्ववत करा"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"<xliff:g id="TIME_AMOUNT">%1$s</xliff:g> साठी स्नूझ करा"</string> <string name="battery_panel_title" msgid="7944156115535366613">"बॅटरी वापर"</string> diff --git a/packages/SystemUI/res/values-ms/strings.xml b/packages/SystemUI/res/values-ms/strings.xml index a05dd2b4984c..898cdfc849f2 100644 --- a/packages/SystemUI/res/values-ms/strings.xml +++ b/packages/SystemUI/res/values-ms/strings.xml @@ -573,6 +573,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 minit"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 minit"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"1 jam"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"BUAT ASAL"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"Ditunda selama <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string> <string name="battery_panel_title" msgid="7944156115535366613">"Penggunaan bateri"</string> diff --git a/packages/SystemUI/res/values-my/strings.xml b/packages/SystemUI/res/values-my/strings.xml index 797aa977c8d5..346bbe245e32 100644 --- a/packages/SystemUI/res/values-my/strings.xml +++ b/packages/SystemUI/res/values-my/strings.xml @@ -573,6 +573,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"၁၅ မိနစ်"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"၃၀ မိနစ်"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"၁ နာရီ"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"တစ်ဆင့် နောက်ပြန်ပြန်ပါ"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"<xliff:g id="TIME_AMOUNT">%1$s</xliff:g> ဆိုင်းငံ့ရန်"</string> <string name="battery_panel_title" msgid="7944156115535366613">"ဘက်ထရီ အသုံးပြုမှု"</string> diff --git a/packages/SystemUI/res/values-nb/strings.xml b/packages/SystemUI/res/values-nb/strings.xml index f59367fcedaa..a13c09745958 100644 --- a/packages/SystemUI/res/values-nb/strings.xml +++ b/packages/SystemUI/res/values-nb/strings.xml @@ -573,6 +573,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 minutter"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 minutter"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"1 time"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"ANGRE"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"Slumrer i <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string> <string name="battery_panel_title" msgid="7944156115535366613">"Batteribruk"</string> diff --git a/packages/SystemUI/res/values-ne/strings.xml b/packages/SystemUI/res/values-ne/strings.xml index fb49b17bee2a..c8cd38384b7b 100644 --- a/packages/SystemUI/res/values-ne/strings.xml +++ b/packages/SystemUI/res/values-ne/strings.xml @@ -573,6 +573,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"१५ मिनेट"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"३० मिनेट"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"१ घन्टा"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"अनडू गर्नुहोस्"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"<xliff:g id="TIME_AMOUNT">%1$s</xliff:g> का लागि स्नुज गरियो"</string> <string name="battery_panel_title" msgid="7944156115535366613">"ब्याट्री उपयोग"</string> diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml index b708e6631789..78077e973050 100644 --- a/packages/SystemUI/res/values-nl/strings.xml +++ b/packages/SystemUI/res/values-nl/strings.xml @@ -573,6 +573,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 minuten"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 minuten"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"1 uur"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"ONGEDAAN MAKEN"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"Snoozefunctie <xliff:g id="TIME_AMOUNT">%1$s</xliff:g> actief"</string> <string name="battery_panel_title" msgid="7944156115535366613">"Accugebruik"</string> diff --git a/packages/SystemUI/res/values-pa/strings.xml b/packages/SystemUI/res/values-pa/strings.xml index 1039e3407678..07a0e8222e07 100644 --- a/packages/SystemUI/res/values-pa/strings.xml +++ b/packages/SystemUI/res/values-pa/strings.xml @@ -573,6 +573,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 ਮਿੰਟ"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 ਮਿੰਟ"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"1 ਘੰਟਾ"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"ਅਣਕੀਤਾ ਕਰੋ"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"<xliff:g id="TIME_AMOUNT">%1$s</xliff:g> ਲਈ ਸਨੂਜ਼ ਕੀਤਾ ਗਿਆ"</string> <string name="battery_panel_title" msgid="7944156115535366613">"ਬੈਟਰੀ ਵਰਤੋਂ"</string> diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml index 91a7c09c5752..03b5ed9e9acd 100644 --- a/packages/SystemUI/res/values-pl/strings.xml +++ b/packages/SystemUI/res/values-pl/strings.xml @@ -581,6 +581,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 min"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 min"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"1 godz."</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"COFNIJ"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"Odłożono na <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string> <string name="battery_panel_title" msgid="7944156115535366613">"Wykorzystanie baterii"</string> diff --git a/packages/SystemUI/res/values-pt-rBR/strings.xml b/packages/SystemUI/res/values-pt-rBR/strings.xml index ab705e7f58fb..8ef330b7a447 100644 --- a/packages/SystemUI/res/values-pt-rBR/strings.xml +++ b/packages/SystemUI/res/values-pt-rBR/strings.xml @@ -575,6 +575,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 minutos"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 minutos"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"Uma hora"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"DESFAZER"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"Adiada para <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string> <string name="battery_panel_title" msgid="7944156115535366613">"Uso da bateria"</string> diff --git a/packages/SystemUI/res/values-pt-rPT/strings.xml b/packages/SystemUI/res/values-pt-rPT/strings.xml index 74089b2982cf..49f14804ea58 100644 --- a/packages/SystemUI/res/values-pt-rPT/strings.xml +++ b/packages/SystemUI/res/values-pt-rPT/strings.xml @@ -444,29 +444,29 @@ <string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"A sua entidade instalou uma autoridade de certificação no seu perfil de trabalho. O tráfego da sua rede segura pode ser monitorizado ou alterado."</string> <string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"Está instalada uma autoridade de certificação neste dispositivo. O tráfego da sua rede segura pode ser monitorizado ou alterado."</string> <string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"O administrador ativou os registos de rede, que monitorizam o tráfego no seu dispositivo."</string> - <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"Está ligado à rede <xliff:g id="VPN_APP">%1$s</xliff:g>, que pode monitorizar a sua atividade de rede, incluindo emails, aplicações e Websites."</string> - <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"Está ligado às redes <xliff:g id="VPN_APP_0">%1$s</xliff:g> e <xliff:g id="VPN_APP_1">%2$s</xliff:g>, que podem monitorizar a sua atividade de rede, incluindo emails, aplicações e Websites."</string> - <string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"O seu perfil de trabalho está ligado à rede <xliff:g id="VPN_APP">%1$s</xliff:g>, que pode monitorizar a sua atividade de rede, incluindo emails, aplicações e Websites."</string> - <string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"O seu perfil pessoal está ligado à rede <xliff:g id="VPN_APP">%1$s</xliff:g>, que pode monitorizar a sua atividade de rede, incluindo emails, aplicações e Websites."</string> + <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"Está ligado à rede <xliff:g id="VPN_APP">%1$s</xliff:g>, que pode monitorizar a sua atividade de rede, incluindo emails, aplicações e Sites."</string> + <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"Está ligado às redes <xliff:g id="VPN_APP_0">%1$s</xliff:g> e <xliff:g id="VPN_APP_1">%2$s</xliff:g>, que podem monitorizar a sua atividade de rede, incluindo emails, aplicações e Sites."</string> + <string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"O seu perfil de trabalho está ligado à rede <xliff:g id="VPN_APP">%1$s</xliff:g>, que pode monitorizar a sua atividade de rede, incluindo emails, aplicações e Sites."</string> + <string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"O seu perfil pessoal está ligado à rede <xliff:g id="VPN_APP">%1$s</xliff:g>, que pode monitorizar a sua atividade de rede, incluindo emails, aplicações e Sites."</string> <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"O seu dispositivo é gerido pelo <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string> <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"A <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> utiliza o <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> para gerir o seu dispositivo."</string> <string name="monitoring_description_do_body" msgid="3639594537660975895">"O administ. pode monitorizar e gerir definições, acesso empresarial, aplic. e dados associados ao dispositivo, bem como inf. de localiz. do disp."</string> <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string> <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Saiba mais"</string> - <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Está ligado à rede <xliff:g id="VPN_APP">%1$s</xliff:g>, que pode monitorizar a sua atividade de rede, incluindo emails, aplicações e Websites."</string> + <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Está ligado à rede <xliff:g id="VPN_APP">%1$s</xliff:g>, que pode monitorizar a sua atividade de rede, incluindo emails, aplicações e Sites."</string> <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string> <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Abrir as definições de VPN"</string> <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string> <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"Abrir credenciais fidedignas"</string> <string name="monitoring_description_network_logging" msgid="7223505523384076027">"O seu administrador ativou os registos de rede, que monitorizam o tráfego no seu dispositivo.\n\nPara obter mais informações, contacte o administrador."</string> - <string name="monitoring_description_vpn" msgid="4445150119515393526">"Concedeu autorização a uma aplicação para configurar uma ligação VPN.\n\nEsta aplicação pode monitorizar a atividade do dispositivo e da rede, incluindo emails, aplicações e Websites."</string> - <string name="monitoring_description_vpn_profile_owned" msgid="2958019119161161530">"O seu perfil de trabalho é gerido por <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nO seu administrador tem a capacidade de monitorizar a sua atividade da rede, incluindo emails, aplicações e Websites.\n\nPara obter mais informações, contacte o administrador.\n\nAlém disso, está ligado a uma VPN, que pode monitorizar a sua atividade da rede."</string> + <string name="monitoring_description_vpn" msgid="4445150119515393526">"Concedeu autorização a uma aplicação para configurar uma ligação VPN.\n\nEsta aplicação pode monitorizar a atividade do dispositivo e da rede, incluindo emails, aplicações e Sites."</string> + <string name="monitoring_description_vpn_profile_owned" msgid="2958019119161161530">"O seu perfil de trabalho é gerido por <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nO seu administrador tem a capacidade de monitorizar a sua atividade da rede, incluindo emails, aplicações e Sites.\n\nPara obter mais informações, contacte o administrador.\n\nAlém disso, está ligado a uma VPN, que pode monitorizar a sua atividade da rede."</string> <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string> - <string name="monitoring_description_app" msgid="1828472472674709532">"Está associado à aplicação <xliff:g id="APPLICATION">%1$s</xliff:g>, que pode monitorizar a sua atividade de rede, incluindo emails, aplicações e Websites."</string> - <string name="monitoring_description_app_personal" msgid="484599052118316268">"Está ligado a <xliff:g id="APPLICATION">%1$s</xliff:g>, que pode monitorizar a atividade da rede pessoal, incluindo emails, aplicações e Websites."</string> - <string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Está ligado ao <xliff:g id="APPLICATION">%1$s</xliff:g>, que pode monitorizar a atividade da rede pessoal, incluindo emails, aplicações e Websites."</string> - <string name="monitoring_description_app_work" msgid="4612997849787922906">"O seu perfil de trabalho é gerido pela <xliff:g id="ORGANIZATION">%1$s</xliff:g>. O perfil está associado à aplicação <xliff:g id="APPLICATION">%2$s</xliff:g>, que pode monitorizar a atividade da rede de trabalho, incluindo emails, aplicações e Websites.\n\nContacte o administrador para obter mais informações."</string> - <string name="monitoring_description_app_personal_work" msgid="5664165460056859391">"O seu perfil de trabalho é gerido pela <xliff:g id="ORGANIZATION">%1$s</xliff:g>. O perfil está associado à aplicação <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, que pode monitorizar a atividade da rede de trabalho, incluindo emails, aplicações e Websites.\n\nTambém está associado à aplicação <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, que pode monitorizar a atividade da rede pessoal."</string> + <string name="monitoring_description_app" msgid="1828472472674709532">"Está associado à aplicação <xliff:g id="APPLICATION">%1$s</xliff:g>, que pode monitorizar a sua atividade de rede, incluindo emails, aplicações e Sites."</string> + <string name="monitoring_description_app_personal" msgid="484599052118316268">"Está ligado a <xliff:g id="APPLICATION">%1$s</xliff:g>, que pode monitorizar a atividade da rede pessoal, incluindo emails, aplicações e Sites."</string> + <string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Está ligado ao <xliff:g id="APPLICATION">%1$s</xliff:g>, que pode monitorizar a atividade da rede pessoal, incluindo emails, aplicações e Sites."</string> + <string name="monitoring_description_app_work" msgid="4612997849787922906">"O seu perfil de trabalho é gerido pela <xliff:g id="ORGANIZATION">%1$s</xliff:g>. O perfil está associado à aplicação <xliff:g id="APPLICATION">%2$s</xliff:g>, que pode monitorizar a atividade da rede de trabalho, incluindo emails, aplicações e Sites.\n\nContacte o administrador para obter mais informações."</string> + <string name="monitoring_description_app_personal_work" msgid="5664165460056859391">"O seu perfil de trabalho é gerido pela <xliff:g id="ORGANIZATION">%1$s</xliff:g>. O perfil está associado à aplicação <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, que pode monitorizar a atividade da rede de trabalho, incluindo emails, aplicações e Sites.\n\nTambém está associado à aplicação <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, que pode monitorizar a atividade da rede pessoal."</string> <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"O dispositivo permanecerá bloqueado até ser desbloqueado manualmente"</string> <string name="hidden_notifications_title" msgid="7139628534207443290">"Receber notificações mais rapidamente"</string> <string name="hidden_notifications_text" msgid="2326409389088668981">"Ver antes de desbloquear"</string> @@ -573,6 +573,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 minutos"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 minutos"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"1 hora"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"ANULAR"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"Suspensa por <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string> <string name="battery_panel_title" msgid="7944156115535366613">"Utiliz. da bateria"</string> diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml index ab705e7f58fb..8ef330b7a447 100644 --- a/packages/SystemUI/res/values-pt/strings.xml +++ b/packages/SystemUI/res/values-pt/strings.xml @@ -575,6 +575,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 minutos"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 minutos"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"Uma hora"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"DESFAZER"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"Adiada para <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string> <string name="battery_panel_title" msgid="7944156115535366613">"Uso da bateria"</string> diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml index cadce25ee1ec..29bc5bf22584 100644 --- a/packages/SystemUI/res/values-ro/strings.xml +++ b/packages/SystemUI/res/values-ro/strings.xml @@ -579,6 +579,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 minute"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 de minute"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"1 oră"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"ANULAȚI"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"Amânată <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string> <string name="battery_panel_title" msgid="7944156115535366613">"Utilizarea bateriei"</string> diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml index 34939b58fec4..e593f89d6961 100644 --- a/packages/SystemUI/res/values-ru/strings.xml +++ b/packages/SystemUI/res/values-ru/strings.xml @@ -583,6 +583,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 минут"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 минут"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"1 час"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"ОТМЕНИТЬ"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"Отложено на <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string> <string name="battery_panel_title" msgid="7944156115535366613">"Уровень заряда"</string> diff --git a/packages/SystemUI/res/values-si/strings.xml b/packages/SystemUI/res/values-si/strings.xml index 7065c83b8aa2..991be52d2a14 100644 --- a/packages/SystemUI/res/values-si/strings.xml +++ b/packages/SystemUI/res/values-si/strings.xml @@ -573,6 +573,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"මිනිත්තු 15"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"මිනිත්තු 30"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"පැය 1"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"අස් කරන්න"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"<xliff:g id="TIME_AMOUNT">%1$s</xliff:g>ක් මදක් නතර කරන ලදී"</string> <string name="battery_panel_title" msgid="7944156115535366613">"බැටරි භාවිතය"</string> diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml index 6e4c33bb3b1e..33793ce7795f 100644 --- a/packages/SystemUI/res/values-sk/strings.xml +++ b/packages/SystemUI/res/values-sk/strings.xml @@ -583,6 +583,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 minút"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 minút"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"1 hod."</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"SPÄŤ"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"Stlmené na <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string> <string name="battery_panel_title" msgid="7944156115535366613">"Využitie batérie"</string> diff --git a/packages/SystemUI/res/values-sl/strings.xml b/packages/SystemUI/res/values-sl/strings.xml index b0e770fbdd6c..9e03e425dcd4 100644 --- a/packages/SystemUI/res/values-sl/strings.xml +++ b/packages/SystemUI/res/values-sl/strings.xml @@ -583,6 +583,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 minut"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 minut"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"1 ura"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"RAZVELJAVI"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"Preloženo za <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string> <string name="battery_panel_title" msgid="7944156115535366613">"Poraba akumulatorja"</string> diff --git a/packages/SystemUI/res/values-sq/strings.xml b/packages/SystemUI/res/values-sq/strings.xml index a68ec872ebb7..cbdb5b21ddbe 100644 --- a/packages/SystemUI/res/values-sq/strings.xml +++ b/packages/SystemUI/res/values-sq/strings.xml @@ -573,6 +573,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 minuta"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 minuta"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"1 orë"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"ZHBËJ"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"U shty për <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string> <string name="battery_panel_title" msgid="7944156115535366613">"Përdorimi i baterisë"</string> diff --git a/packages/SystemUI/res/values-sr/strings.xml b/packages/SystemUI/res/values-sr/strings.xml index f4b488422d66..5c4790762b00 100644 --- a/packages/SystemUI/res/values-sr/strings.xml +++ b/packages/SystemUI/res/values-sr/strings.xml @@ -577,6 +577,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 минута"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 минута"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"1 сат"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"ОПОЗОВИ"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"Одложено је за <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string> <string name="battery_panel_title" msgid="7944156115535366613">"Потрошња батерије"</string> diff --git a/packages/SystemUI/res/values-sv/strings.xml b/packages/SystemUI/res/values-sv/strings.xml index 685c0a445a83..967e3a5a4aa0 100644 --- a/packages/SystemUI/res/values-sv/strings.xml +++ b/packages/SystemUI/res/values-sv/strings.xml @@ -573,6 +573,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 minuter"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 minuter"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"1 timme"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"ÅNGRA"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"Snoozad i <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string> <string name="battery_panel_title" msgid="7944156115535366613">"Batteriförbrukning"</string> diff --git a/packages/SystemUI/res/values-sw/strings.xml b/packages/SystemUI/res/values-sw/strings.xml index 9a52d9b1e39e..82220748a875 100644 --- a/packages/SystemUI/res/values-sw/strings.xml +++ b/packages/SystemUI/res/values-sw/strings.xml @@ -573,6 +573,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"Dakika 15"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"Dakika 30"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"Saa 1"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"TENDUA"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"Imeahirishwa kwa <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string> <string name="battery_panel_title" msgid="7944156115535366613">"Matumizi ya betri"</string> diff --git a/packages/SystemUI/res/values-ta/strings.xml b/packages/SystemUI/res/values-ta/strings.xml index 1c4b7de301f2..eb672e18e30e 100644 --- a/packages/SystemUI/res/values-ta/strings.xml +++ b/packages/SystemUI/res/values-ta/strings.xml @@ -573,6 +573,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 நிமிடங்கள்"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 நிமிடங்கள்"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"1 மணிநேரம்"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"செயல்தவிர்"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"உறக்கநிலையில் வைத்திருந்த நேரம்: <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string> <string name="battery_panel_title" msgid="7944156115535366613">"பேட்டரி உபயோகம்"</string> diff --git a/packages/SystemUI/res/values-te/strings.xml b/packages/SystemUI/res/values-te/strings.xml index 2bdabd2bcc83..b5470e75101f 100644 --- a/packages/SystemUI/res/values-te/strings.xml +++ b/packages/SystemUI/res/values-te/strings.xml @@ -573,6 +573,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 నిమిషాలు"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 నిమిషాలు"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"1 గంట"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"చర్య రద్దు చేయి"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"<xliff:g id="TIME_AMOUNT">%1$s</xliff:g> వరకు తాత్కాలికంగా ఆపివేయబడింది"</string> <string name="battery_panel_title" msgid="7944156115535366613">"బ్యాటరీ వినియోగం"</string> diff --git a/packages/SystemUI/res/values-th/strings.xml b/packages/SystemUI/res/values-th/strings.xml index 8077d1432642..f47cfa9b6b7f 100644 --- a/packages/SystemUI/res/values-th/strings.xml +++ b/packages/SystemUI/res/values-th/strings.xml @@ -64,7 +64,7 @@ <string name="usb_debugging_message" msgid="2220143855912376496">"ลายนิ้วมือหลัก RSA ของคอมพิวเตอร์คือ:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string> <string name="usb_debugging_always" msgid="303335496705863070">"อนุญาตจากคอมพิวเตอร์เครื่องนี้เสมอ"</string> <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"ไม่อนุญาตให้แก้ไขข้อบกพร่องผ่าน USB"</string> - <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"ผู้ใช้ที่ลงชื่อเข้าใช้อุปกรณ์นี้อยู่ในขณะนี้ไม่สามารถเปิดการแก้ปัญหาผ่าน USB ได้ หากต้องการใช้คุณลักษณะนี้ โปรดเปลี่ยนไปเป็นผู้ใช้ที่เป็นผู้ดูแลระบบ"</string> + <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"ผู้ใช้ที่ลงชื่อเข้าใช้อุปกรณ์นี้อยู่ในขณะนี้ไม่สามารถเปิดการแก้ปัญหาผ่าน USB ได้ หากต้องการใช้ฟีเจอร์นี้ โปรดเปลี่ยนไปเป็นผู้ใช้ที่เป็นผู้ดูแลระบบ"</string> <string name="compat_mode_on" msgid="6623839244840638213">"ขยายจนเต็มหน้าจอ"</string> <string name="compat_mode_off" msgid="4434467572461327898">"ยืดจนเต็มหน้าจอ"</string> <string name="screenshot_saving_ticker" msgid="7403652894056693515">"กำลังบันทึกภาพหน้าจอ..."</string> @@ -524,12 +524,12 @@ <string name="accessibility_status_bar_hotspot" msgid="4099381329956402865">"ฮอตสปอต"</string> <string name="accessibility_managed_profile" msgid="6613641363112584120">"โปรไฟล์งาน"</string> <string name="tuner_warning_title" msgid="7094689930793031682">"เพลิดเพลินกับบางส่วนแต่ไม่ใช่ทั้งหมด"</string> - <string name="tuner_warning" msgid="8730648121973575701">"ตัวรับสัญญาณ UI ระบบช่วยให้คุณมีวิธีพิเศษในการปรับแต่งและกำหนดค่าส่วนติดต่อผู้ใช้ Android คุณลักษณะรุ่นทดลองเหล่านี้อาจมีการเปลี่ยนแปลง ขัดข้อง หรือหายไปในเวอร์ชันอนาคต โปรดดำเนินการด้วยความระมัดระวัง"</string> - <string name="tuner_persistent_warning" msgid="8597333795565621795">"คุณลักษณะรุ่นทดลองเหล่านี้อาจมีการเปลี่ยนแปลง ขัดข้อง หรือหายไปในเวอร์ชันอนาคต โปรดดำเนินการด้วยความระมัดระวัง"</string> + <string name="tuner_warning" msgid="8730648121973575701">"ตัวรับสัญญาณ UI ระบบช่วยให้คุณมีวิธีพิเศษในการปรับแต่งและกำหนดค่าส่วนติดต่อผู้ใช้ Android ฟีเจอร์รุ่นทดลองเหล่านี้อาจมีการเปลี่ยนแปลง ขัดข้อง หรือหายไปในเวอร์ชันอนาคต โปรดดำเนินการด้วยความระมัดระวัง"</string> + <string name="tuner_persistent_warning" msgid="8597333795565621795">"ฟีเจอร์รุ่นทดลองเหล่านี้อาจมีการเปลี่ยนแปลง ขัดข้อง หรือหายไปในเวอร์ชันอนาคต โปรดดำเนินการด้วยความระมัดระวัง"</string> <string name="got_it" msgid="2239653834387972602">"รับทราบ"</string> <string name="tuner_toast" msgid="603429811084428439">"ยินดีด้วย! เพิ่มตัวรับสัญญาณ UI ระบบไปยังการตั้งค่าแล้ว"</string> <string name="remove_from_settings" msgid="8389591916603406378">"นำออกจากการตั้งค่า"</string> - <string name="remove_from_settings_prompt" msgid="6069085993355887748">"นำตัวรับสัญญาณ UI ระบบออกจากการตั้งค่าและหยุดใช้คุณลักษณะทั้งหมดของตัวรับสัญญาณใช่ไหม"</string> + <string name="remove_from_settings_prompt" msgid="6069085993355887748">"นำตัวรับสัญญาณ UI ระบบออกจากการตั้งค่าและหยุดใช้ฟีเจอร์ทั้งหมดของตัวรับสัญญาณใช่ไหม"</string> <string name="activity_not_found" msgid="348423244327799974">"ยังไม่ได้ติดตั้งแอปพลิเคชันบนอุปกรณ์ของคุณ"</string> <string name="clock_seconds" msgid="7689554147579179507">"แสดงวินาทีของนาฬิกา"</string> <string name="clock_seconds_desc" msgid="6282693067130470675">"แสดงวินาทีของนาฬิกาในแถบสถานะ อาจส่งผลต่ออายุแบตเตอรี"</string> @@ -573,6 +573,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 นาที"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 นาที"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"1 ชั่วโมง"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"เลิกทำ"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"ปิดเสียงเตือนชั่วคราวไว้เป็นเวลา <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string> <string name="battery_panel_title" msgid="7944156115535366613">"การใช้งานแบตเตอรี่"</string> @@ -719,7 +721,7 @@ <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"ลากลงเพื่อปิด"</string> <string name="pip_menu_title" msgid="3328510504196964712">"เมนูการแสดงผลหลายแหล่งพร้อมกัน"</string> <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> ใช้การแสดงผลหลายแหล่งพร้อมกัน"</string> - <string name="pip_notification_message" msgid="4171698133469539591">"หากคุณไม่ต้องการให้ <xliff:g id="NAME">%s</xliff:g> ใช้คุณลักษณะนี้ ให้แตะเพื่อเปิดการตั้งค่าแล้วปิดคุณลักษณะ"</string> + <string name="pip_notification_message" msgid="4171698133469539591">"หากคุณไม่ต้องการให้ <xliff:g id="NAME">%s</xliff:g> ใช้ฟีเจอร์นี้ ให้แตะเพื่อเปิดการตั้งค่าแล้วปิดฟีเจอร์"</string> <string name="pip_play" msgid="1417176722760265888">"เล่น"</string> <string name="pip_pause" msgid="8881063404466476571">"หยุดชั่วคราว"</string> <string name="pip_skip_to_next" msgid="1948440006726306284">"ข้ามไปรายการถัดไป"</string> @@ -728,7 +730,7 @@ <string name="thermal_shutdown_message" msgid="9006456746902370523">"ขณะนี้โทรศัพท์ทำงานเป็นปกติ"</string> <string name="thermal_shutdown_dialog_message" msgid="566347880005304139">"โทรศัพท์ร้อนเกินไปจึงปิดเครื่องเพื่อให้เย็นลง ขณะนี้โทรศัพท์ทำงานเป็นปกติ\n\nโทรศัพท์อาจร้อนเกินไปหากคุณ\n • ใช้แอปที่ใช้ทรัพยากรมาก (เช่น เกม วิดีโอ หรือแอปการนำทาง)\n • ดาวน์โหลดหรืออัปโหลดไฟล์ขนาดใหญ่\n • ใช้โทรศัพท์ในอุณหภูมิที่สูง"</string> <string name="high_temp_title" msgid="4589508026407318374">"โทรศัพท์เริ่มเครื่องร้อน"</string> - <string name="high_temp_notif_message" msgid="5642466103153429279">"คุณลักษณะบางอย่างจะใช้งานได้จำกัดขณะโทรศัพท์ลดอุณหภูมิลง"</string> + <string name="high_temp_notif_message" msgid="5642466103153429279">"ฟีเจอร์บางอย่างจะใช้งานได้จำกัดขณะโทรศัพท์ลดอุณหภูมิลง"</string> <string name="high_temp_dialog_message" msgid="6840700639374113553">"โทรศัพท์จะพยายามลดอุณหภูมิลงโดยอัตโนมัติ คุณยังสามารถใช้โทรศัพท์ได้ แต่โทรศัพท์อาจทำงานช้าลง\n\nโทรศัพท์จะทำงานตามปกติเมื่อเย็นลงแล้ว"</string> <string name="lockscreen_shortcut_left" msgid="2182769107618938629">"ทางลัดทางซ้าย"</string> <string name="lockscreen_shortcut_right" msgid="3328683699505226536">"ทางลัดทางขวา"</string> diff --git a/packages/SystemUI/res/values-tl/strings.xml b/packages/SystemUI/res/values-tl/strings.xml index 194b16186de6..3304ab71c7ac 100644 --- a/packages/SystemUI/res/values-tl/strings.xml +++ b/packages/SystemUI/res/values-tl/strings.xml @@ -573,6 +573,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 minuto"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 minuto"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"1 oras"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"I-UNDO"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"Na-snooze ng <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string> <string name="battery_panel_title" msgid="7944156115535366613">"Paggamit ng baterya"</string> diff --git a/packages/SystemUI/res/values-tr/strings.xml b/packages/SystemUI/res/values-tr/strings.xml index 7f1d8ff71d68..944316cc7d77 100644 --- a/packages/SystemUI/res/values-tr/strings.xml +++ b/packages/SystemUI/res/values-tr/strings.xml @@ -573,6 +573,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 dakika"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 dakika"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"1 saat"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"GERİ AL"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"<xliff:g id="TIME_AMOUNT">%1$s</xliff:g> süreyle ertelendi"</string> <string name="battery_panel_title" msgid="7944156115535366613">"Pil kullanımı"</string> diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml index 1006eae3a18d..5636a8725fc6 100644 --- a/packages/SystemUI/res/values-uk/strings.xml +++ b/packages/SystemUI/res/values-uk/strings.xml @@ -583,6 +583,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 хвилин"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 хвилин"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"1 годину"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"ВІДМІНИТИ"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"Відкладено на <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string> <string name="battery_panel_title" msgid="7944156115535366613">"Використання заряду"</string> diff --git a/packages/SystemUI/res/values-ur/strings.xml b/packages/SystemUI/res/values-ur/strings.xml index 9f284942c011..7a5f1c7fba7b 100644 --- a/packages/SystemUI/res/values-ur/strings.xml +++ b/packages/SystemUI/res/values-ur/strings.xml @@ -573,6 +573,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 منٹ"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 منٹ"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"1 گھنٹہ"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"کالعدم کریں"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"<xliff:g id="TIME_AMOUNT">%1$s</xliff:g> کیلئے اسنوز کیا گیا"</string> <string name="battery_panel_title" msgid="7944156115535366613">"بیٹری کا استعمال"</string> diff --git a/packages/SystemUI/res/values-uz/strings.xml b/packages/SystemUI/res/values-uz/strings.xml index 02f7c43b4045..262225c10761 100644 --- a/packages/SystemUI/res/values-uz/strings.xml +++ b/packages/SystemUI/res/values-uz/strings.xml @@ -201,7 +201,7 @@ <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Parvoz rejimi o‘chirildi."</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Parvoz rejimi yoqildi."</string> <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"“Bezovta qilinmasin” funksiyasi yoqilgan, faqat muhim bildirishnomalar ko‘rsatiladi."</string> - <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Bezovta qilinmasin, tinchlik saqlansin"</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Bezovta qilinmasin, jimjitlik."</string> <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"Bezovta qilinmasin, faqat signallar"</string> <string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"Bezovta qilinmasin."</string> <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"“Bezovta qilinmasin” funksiyasi o‘chirilgan."</string> @@ -575,6 +575,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 daqiqa"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 daqiqa"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"1 soat"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"BEKOR QILISH"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"<xliff:g id="TIME_AMOUNT">%1$s</xliff:g> muddatga kechiktirildi"</string> <string name="battery_panel_title" msgid="7944156115535366613">"Batareya sarfi"</string> diff --git a/packages/SystemUI/res/values-vi/strings.xml b/packages/SystemUI/res/values-vi/strings.xml index 167d0a1eeed0..1d125f6d9336 100644 --- a/packages/SystemUI/res/values-vi/strings.xml +++ b/packages/SystemUI/res/values-vi/strings.xml @@ -575,6 +575,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 phút"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 phút"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"1 giờ"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"HOÀN TÁC"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"Báo lại sau <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string> <string name="battery_panel_title" msgid="7944156115535366613">"Mức sử dụng pin"</string> diff --git a/packages/SystemUI/res/values-zh-rCN/strings.xml b/packages/SystemUI/res/values-zh-rCN/strings.xml index cf9b7d2b421c..600e17d4d029 100644 --- a/packages/SystemUI/res/values-zh-rCN/strings.xml +++ b/packages/SystemUI/res/values-zh-rCN/strings.xml @@ -573,6 +573,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 分钟"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 分钟"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"1 小时"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"撤消"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"已延后 <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string> <string name="battery_panel_title" msgid="7944156115535366613">"电池使用情况"</string> diff --git a/packages/SystemUI/res/values-zh-rHK/strings.xml b/packages/SystemUI/res/values-zh-rHK/strings.xml index d123c930c2ca..109c33e93572 100644 --- a/packages/SystemUI/res/values-zh-rHK/strings.xml +++ b/packages/SystemUI/res/values-zh-rHK/strings.xml @@ -575,6 +575,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 分鐘"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 分鐘"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"1 小時"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"復原"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"已延後 <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string> <string name="battery_panel_title" msgid="7944156115535366613">"電池用量"</string> diff --git a/packages/SystemUI/res/values-zh-rTW/strings.xml b/packages/SystemUI/res/values-zh-rTW/strings.xml index af7ed48ca93f..353d98590243 100644 --- a/packages/SystemUI/res/values-zh-rTW/strings.xml +++ b/packages/SystemUI/res/values-zh-rTW/strings.xml @@ -268,7 +268,7 @@ <string name="ethernet_label" msgid="7967563676324087464">"乙太網路"</string> <string name="quick_settings_dnd_label" msgid="8735855737575028208">"零打擾"</string> <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"僅限優先通知"</string> - <string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"僅允許鬧鐘"</string> + <string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"僅限鬧鐘"</string> <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"完全靜音"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"藍牙"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"藍牙 (<xliff:g id="NUMBER">%d</xliff:g> 個裝置)"</string> @@ -369,7 +369,7 @@ <string name="interruption_level_none_with_warning" msgid="5114872171614161084">"完全靜音。這也會關閉螢幕閱讀器的音訊。"</string> <string name="interruption_level_none" msgid="6000083681244492992">"完全靜音"</string> <string name="interruption_level_priority" msgid="6426766465363855505">"僅限優先通知"</string> - <string name="interruption_level_alarms" msgid="5226306993448328896">"僅允許鬧鐘"</string> + <string name="interruption_level_alarms" msgid="5226306993448328896">"僅限鬧鐘"</string> <string name="interruption_level_none_twoline" msgid="3957581548190765889">"完全\n靜音"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"僅允許\n優先通知"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"僅允許\n鬧鐘"</string> @@ -573,6 +573,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 分鐘"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 分鐘"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"1 小時"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"復原"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"已延後 <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string> <string name="battery_panel_title" msgid="7944156115535366613">"電池用量"</string> diff --git a/packages/SystemUI/res/values-zu/strings.xml b/packages/SystemUI/res/values-zu/strings.xml index c1765c692520..d81c32084b8e 100644 --- a/packages/SystemUI/res/values-zu/strings.xml +++ b/packages/SystemUI/res/values-zu/strings.xml @@ -573,6 +573,8 @@ <string name="snooze_option_15_min" msgid="1068727451405610715">"15 amaminithi"</string> <string name="snooze_option_30_min" msgid="867081342535195788">"30 amaminithi"</string> <string name="snooze_option_1_hour" msgid="1098086401880077154">"1 ihora"</string> + <!-- no translation found for snooze_option_2_hour (8332218255658969475) --> + <skip /> <string name="snooze_undo" msgid="6074877317002985129">"HLEHLISA"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"Kusnuzwe u-<xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string> <string name="battery_panel_title" msgid="7944156115535366613">"Ukusetshenziswa kwebhethri"</string> diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardStatusView.java b/packages/SystemUI/src/com/android/keyguard/KeyguardStatusView.java index f0ff22dc45c7..db1e8a9c112e 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardStatusView.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardStatusView.java @@ -147,8 +147,10 @@ public class KeyguardStatusView extends GridLayout { mClockView.setLayoutParams(layoutParams); mDateView.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimensionPixelSize(R.dimen.widget_label_font_size)); - mOwnerInfo.setTextSize(TypedValue.COMPLEX_UNIT_PX, - getResources().getDimensionPixelSize(R.dimen.widget_label_font_size)); + if (mOwnerInfo != null) { + mOwnerInfo.setTextSize(TypedValue.COMPLEX_UNIT_PX, + getResources().getDimensionPixelSize(R.dimen.widget_label_font_size)); + } } public void refreshTime() { diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java index 1afce64539d2..76f6e7d7d243 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java @@ -353,13 +353,20 @@ public class WifiTile extends QSTileImpl<SignalState> { private void updateItems() { if (mItems == null) return; - if (mSignalCallback.mInfo.enabled) { - mItems.setEmptyState(R.drawable.ic_qs_wifi_detail_empty, - R.string.quick_settings_wifi_detail_empty_text); - } else { + + // Wi-Fi is off + if (!mSignalCallback.mInfo.enabled) { mItems.setEmptyState(R.drawable.ic_qs_wifi_detail_empty, R.string.wifi_is_off); + mItems.setItems(null); + return; } + + // No available access points + mItems.setEmptyState(R.drawable.ic_qs_wifi_detail_empty, + R.string.quick_settings_wifi_detail_empty_text); + + // Build the list Item[] items = null; if (mAccessPoints != null) { items = new Item[mAccessPoints.length]; diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java index e2e9b1b7d76f..611169f575c1 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java +++ b/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java @@ -30,6 +30,7 @@ import android.content.Intent; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.Canvas; +import android.graphics.GraphicBuffer; import android.graphics.Rect; import android.graphics.RectF; import android.graphics.drawable.Drawable; @@ -239,8 +240,6 @@ public class RecentsImpl implements ActivityOptions.OnAnimationFinishedListener } }); - protected Bitmap mThumbTransitionBitmapCache; - public RecentsImpl(Context context) { mContext = context; mHandler = new Handler(); @@ -775,14 +774,6 @@ public class RecentsImpl implements ActivityOptions.OnAnimationFinishedListener } mHeaderBar.layout(0, 0, taskViewWidth, mTaskBarHeight); } - - // Update the transition bitmap to match the new header bar height - if (mThumbTransitionBitmapCache == null || - (mThumbTransitionBitmapCache.getWidth() != taskViewWidth) || - (mThumbTransitionBitmapCache.getHeight() != mTaskBarHeight)) { - mThumbTransitionBitmapCache = Bitmap.createBitmap(taskViewWidth, - mTaskBarHeight, Bitmap.Config.ARGB_8888); - } } } @@ -864,8 +855,7 @@ public class RecentsImpl implements ActivityOptions.OnAnimationFinishedListener mTmpTransform = stackLayout.getStackTransformScreenCoordinates(task, stackScroller.getStackScroll(), mTmpTransform, null, windowOverrideRect); - Bitmap thumbnail = drawThumbnailTransitionBitmap(task, mTmpTransform, - mThumbTransitionBitmapCache); + GraphicBuffer thumbnail = drawThumbnailTransitionBitmap(task, mTmpTransform); Rect toTaskRect = new Rect(); mTmpTransform.rect.round(toTaskRect); specs.add(new AppTransitionAnimationSpec(task.key.id, thumbnail, toTaskRect)); @@ -887,8 +877,8 @@ public class RecentsImpl implements ActivityOptions.OnAnimationFinishedListener () -> { Rect rect = new Rect(); toTaskRect.round(rect); - Bitmap thumbnail = drawThumbnailTransitionBitmap(toTask, toTransform, - mThumbTransitionBitmapCache); + GraphicBuffer thumbnail = drawThumbnailTransitionBitmap(toTask, + toTransform); return Lists.newArrayList(new AppTransitionAnimationSpec( toTask.key.id, thumbnail, rect)); }); @@ -924,19 +914,19 @@ public class RecentsImpl implements ActivityOptions.OnAnimationFinishedListener /** * Draws the header of a task used for the window animation into a bitmap. */ - private Bitmap drawThumbnailTransitionBitmap(Task toTask, TaskViewTransform toTransform, - Bitmap thumbnail) { + private GraphicBuffer drawThumbnailTransitionBitmap(Task toTask, + TaskViewTransform toTransform) { SystemServicesProxy ssp = Recents.getSystemServices(); if (toTransform != null && toTask.key != null) { synchronized (mHeaderBarLock) { boolean disabledInSafeMode = !toTask.isSystemApp && ssp.isInSafeMode(); - mHeaderBar.onTaskViewSizeChanged((int) toTransform.rect.width(), - (int) toTransform.rect.height()); + int width = (int) toTransform.rect.width(); + int height = (int) toTransform.rect.height(); + mHeaderBar.onTaskViewSizeChanged(width, height); if (RecentsDebugFlags.Static.EnableTransitionThumbnailDebugMode) { - thumbnail.eraseColor(0xFFff0000); + return RecentsTransitionHelper.drawViewIntoGraphicBuffer(width, mTaskBarHeight, + null, 1f, 0xFFff0000); } else { - thumbnail.eraseColor(0); - Canvas c = new Canvas(thumbnail); // Workaround for b/27815919, reset the callback so that we do not trigger an // invalidate on the header bar as a result of updating the icon Drawable icon = mHeaderBar.getIconView().getDrawable(); @@ -947,11 +937,10 @@ public class RecentsImpl implements ActivityOptions.OnAnimationFinishedListener disabledInSafeMode); mHeaderBar.onTaskDataLoaded(); mHeaderBar.setDimAlpha(toTransform.dimAlpha); - mHeaderBar.draw(c); - c.setBitmap(null); + return RecentsTransitionHelper.drawViewIntoGraphicBuffer(width, mTaskBarHeight, + mHeaderBar, 1f, 0); } } - return thumbnail.createAshmemBitmap(); } return null; } diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/RecentsTransitionHelper.java b/packages/SystemUI/src/com/android/systemui/recents/views/RecentsTransitionHelper.java index d7d264e3aa07..21dfe8caf964 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/views/RecentsTransitionHelper.java +++ b/packages/SystemUI/src/com/android/systemui/recents/views/RecentsTransitionHelper.java @@ -30,6 +30,7 @@ import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; +import android.graphics.GraphicBuffer; import android.graphics.Rect; import android.os.Bundle; import android.os.Handler; @@ -37,7 +38,11 @@ import android.os.IRemoteCallback; import android.os.RemoteException; import android.util.Log; import android.view.AppTransitionAnimationSpec; +import android.view.DisplayListCanvas; import android.view.IAppTransitionAnimationSpecsFuture; +import android.view.RenderNode; +import android.view.ThreadedRenderer; +import android.view.View; import com.android.internal.annotations.GuardedBy; import com.android.systemui.recents.Recents; @@ -264,8 +269,8 @@ public class RecentsTransitionHelper { Rect bounds) { mTmpTransform.fillIn(taskView); Task task = taskView.getTask(); - Bitmap thumbnail = RecentsTransitionHelper.composeTaskBitmap(taskView, mTmpTransform); - return Collections.singletonList(new AppTransitionAnimationSpec(task.key.id, thumbnail, + GraphicBuffer buffer = RecentsTransitionHelper.composeTaskBitmap(taskView, mTmpTransform); + return Collections.singletonList(new AppTransitionAnimationSpec(task.key.id, buffer, bounds)); } @@ -346,7 +351,7 @@ public class RecentsTransitionHelper { return new AppTransitionAnimationSpec(task.key.id, null, taskRect); } - public static Bitmap composeTaskBitmap(TaskView taskView, TaskViewTransform transform) { + public static GraphicBuffer composeTaskBitmap(TaskView taskView, TaskViewTransform transform) { float scale = transform.scale; int fromWidth = (int) (transform.rect.width() * scale); int fromHeight = (int) (transform.rect.height() * scale); @@ -354,26 +359,17 @@ public class RecentsTransitionHelper { Log.e(TAG, "Could not compose thumbnail for task: " + taskView.getTask() + " at transform: " + transform); - Bitmap b = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888); - b.eraseColor(Color.TRANSPARENT); - return b; + return drawViewIntoGraphicBuffer(1, 1, null, 1f, 0x00ffffff); } else { - Bitmap b = Bitmap.createBitmap(fromWidth, fromHeight, - Bitmap.Config.ARGB_8888); - if (RecentsDebugFlags.Static.EnableTransitionThumbnailDebugMode) { - b.eraseColor(0xFFff0000); + return drawViewIntoGraphicBuffer(fromWidth, fromHeight, null, 1f, 0xFFff0000); } else { - Canvas c = new Canvas(b); - c.scale(scale, scale); - taskView.draw(c); - c.setBitmap(null); + return drawViewIntoGraphicBuffer(fromWidth, fromHeight, taskView, scale, 0); } - return b.createAshmemBitmap(); } } - private static Bitmap composeHeaderBitmap(TaskView taskView, + private static GraphicBuffer composeHeaderBitmap(TaskView taskView, TaskViewTransform transform) { float scale = transform.scale; int headerWidth = (int) (transform.rect.width()); @@ -382,16 +378,30 @@ public class RecentsTransitionHelper { return null; } - Bitmap b = Bitmap.createBitmap(headerWidth, headerHeight, Bitmap.Config.ARGB_8888); if (RecentsDebugFlags.Static.EnableTransitionThumbnailDebugMode) { - b.eraseColor(0xFFff0000); + return drawViewIntoGraphicBuffer(headerWidth, headerHeight, null, 1f, 0xFFff0000); } else { - Canvas c = new Canvas(b); - c.scale(scale, scale); - taskView.mHeaderView.draw(c); - c.setBitmap(null); + return drawViewIntoGraphicBuffer(headerWidth, headerHeight, taskView.mHeaderView, + scale, 0); + } + } + + public static GraphicBuffer drawViewIntoGraphicBuffer(int bufferWidth, int bufferHeight, + View view, float scale, int eraseColor) { + RenderNode node = RenderNode.create("RecentsTransition", null); + node.setLeftTopRightBottom(0, 0, bufferWidth, bufferHeight); + node.setClipToBounds(false); + DisplayListCanvas c = node.start(bufferWidth, bufferHeight); + c.scale(scale, scale); + if (eraseColor != 0) { + c.drawColor(eraseColor); + } + if (view != null) { + view.draw(c); } - return b.createAshmemBitmap(); + node.end(c); + return ThreadedRenderer.createHardwareBitmap(node, bufferWidth, bufferHeight) + .createGraphicBufferHandle(); } /** @@ -399,7 +409,7 @@ public class RecentsTransitionHelper { */ private static AppTransitionAnimationSpec composeAnimationSpec(TaskStackView stackView, TaskView taskView, TaskViewTransform transform, boolean addHeaderBitmap) { - Bitmap b = null; + GraphicBuffer b = null; if (addHeaderBitmap) { b = composeHeaderBitmap(taskView, transform); if (b == null) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java b/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java index b4822ca76065..ab41485793a1 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java @@ -294,8 +294,8 @@ public class SignalClusterView extends LinearLayout implements NetworkController mWifiStrengthId = statusIcon.icon; mWifiBadgeId = statusIcon.iconOverlay; mWifiDescription = statusIcon.contentDescription; - mWifiIn = activityIn && mActivityEnabled; - mWifiOut = activityOut && mActivityEnabled; + mWifiIn = activityIn && mActivityEnabled && mWifiVisible; + mWifiOut = activityOut && mActivityEnabled && mWifiVisible; apply(); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java index c7fbbf956c68..85475b60902f 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java @@ -179,6 +179,10 @@ public class StatusBarIconView extends AnimatedImageView { mIconScale = (float)imageBounds / (float)outerBounds; } + public float getIconScaleFullyDark() { + return (float) mStatusBarIconDrawingSizeDark / mStatusBarIconDrawingSize; + } + public float getIconScale() { return mIconScale; } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconContainer.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconContainer.java index 9000eb4655d1..f94bb0cdd4f7 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconContainer.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconContainer.java @@ -267,6 +267,9 @@ public class NotificationIconContainer extends AlphaOptimizedFrameLayout { boolean forceOverflow = mSpeedBumpIndex != -1 && i >= mSpeedBumpIndex && iconState.iconAppearAmount > 0.0f || i >= maxVisibleIcons; boolean noOverflowAfter = i == childCount - 1; + float drawingScale = mDark && view instanceof StatusBarIconView + ? ((StatusBarIconView) view).getIconScaleFullyDark() + : 1f; if (mOpenedAmount != 0.0f) { noOverflowAfter = noOverflowAfter && !hasAmbient && !forceOverflow; } @@ -303,7 +306,7 @@ public class NotificationIconContainer extends AlphaOptimizedFrameLayout { visualOverflowStart += mVisualOverflowAdaption * (1f - mOpenedAmount); } } - translationX += iconState.iconAppearAmount * view.getWidth(); + translationX += iconState.iconAppearAmount * view.getWidth() * drawingScale; } if (firstOverflowIndex != -1) { int numDots = 1; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationChildrenContainer.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationChildrenContainer.java index 0dbd1d6cc74a..ff06b5b33a05 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationChildrenContainer.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationChildrenContainer.java @@ -300,7 +300,7 @@ public class NotificationChildrenContainer extends ViewGroup { mNotificationHeaderWrapper.notifyContentUpdated(mContainingNotification); recreateLowPriorityHeader(builder); recreateAmbientHeader(builder); - resetHeaderVisibilityIfNeeded(mNotificationHeader, calculateDesiredHeader()); + updateHeaderVisibility(false /* animate */); updateChildrenHeaderAppearance(); } @@ -833,6 +833,11 @@ public class NotificationChildrenContainer extends ViewGroup { return mNotificationHeaderLowPriority; } + @VisibleForTesting + public ViewGroup getCurrentHeaderView() { + return mCurrentHeader; + } + public void notifyShowAmbientChanged() { updateHeaderVisibility(false); } @@ -869,7 +874,12 @@ public class NotificationChildrenContainer extends ViewGroup { desiredHeader.setVisibility(VISIBLE); } if (currentHeader != null) { - getWrapperForView(currentHeader).setVisible(false); + // Wrapper can be null if we were a low priority notification + // and just destroyed it by calling setIsLowPriority(false) + NotificationViewWrapper wrapper = getWrapperForView(currentHeader); + if (wrapper != null) { + wrapper.setVisible(false); + } currentHeader.setVisibility(INVISIBLE); } } @@ -878,7 +888,7 @@ public class NotificationChildrenContainer extends ViewGroup { resetHeaderVisibilityIfNeeded(mNotificationHeaderAmbient, desiredHeader); resetHeaderVisibilityIfNeeded(mNotificationHeaderLowPriority, desiredHeader); - mCurrentHeader = currentHeader; + mCurrentHeader = desiredHeader; } private void resetHeaderVisibilityIfNeeded(View header, View desiredHeader) { diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/stack/NotificationChildrenContainerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/stack/NotificationChildrenContainerTest.java index e6c8815b9e21..2dd96b686996 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/stack/NotificationChildrenContainerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/stack/NotificationChildrenContainerTest.java @@ -60,4 +60,12 @@ public class NotificationChildrenContainerTest extends SysuiTestCase { Assert.assertTrue(lowPriorityHeaderView.getParent() == null); Assert.assertTrue(childrenContainer.getLowPriorityHeaderView() == null); } + + @Test + public void testRecreateNotificationHeader_hasHeader() { + NotificationChildrenContainer childrenContainer = mGroup.getChildrenContainer(); + childrenContainer.recreateNotificationHeader(null); + Assert.assertNotNull("Children container must have a header after recreation", + childrenContainer.getCurrentHeaderView()); + } } diff --git a/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java b/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java index 7abaf7ff9922..38b796b316de 100644 --- a/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java +++ b/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java @@ -51,6 +51,7 @@ import android.service.autofill.FillEventHistory.Event; import android.service.autofill.FillResponse; import android.service.autofill.IAutoFillService; import android.text.TextUtils; +import android.util.ArraySet; import android.util.LocalLog; import android.util.Slog; import android.util.SparseArray; @@ -465,10 +466,17 @@ final class AutofillManagerServiceImpl { if (sVerbose) Slog.v(TAG, "destroyLocked()"); final int numSessions = mSessions.size(); + final ArraySet<RemoteFillService> remoteFillServices = new ArraySet<>(numSessions); for (int i = 0; i < numSessions; i++) { - mSessions.valueAt(i).destroyLocked(); + final RemoteFillService remoteFillService = mSessions.valueAt(i).destroyLocked(); + if (remoteFillService != null) { + remoteFillServices.add(remoteFillService); + } } mSessions.clear(); + for (int i = 0; i < remoteFillServices.size(); i++) { + remoteFillServices.valueAt(i).destroy(); + } sendStateToClients(true); } diff --git a/services/autofill/java/com/android/server/autofill/Session.java b/services/autofill/java/com/android/server/autofill/Session.java index bad8dcf42aae..6a444c92079a 100644 --- a/services/autofill/java/com/android/server/autofill/Session.java +++ b/services/autofill/java/com/android/server/autofill/Session.java @@ -1496,15 +1496,15 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState } } - void destroyLocked() { + RemoteFillService destroyLocked() { if (mDestroyed) { - return; + return null; } - mRemoteFillService.destroy(); hideAllUiIfOwnedByMe(); mUi.clearCallback(this); mDestroyed = true; mMetricsLogger.action(MetricsEvent.AUTOFILL_SESSION_FINISHED, mPackageName); + return mRemoteFillService; } private void hideAllUiIfOwnedByMe() { @@ -1528,8 +1528,11 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState + id + " destroyed"); return; } - destroyLocked(); + final RemoteFillService remoteFillService = destroyLocked(); mService.removeSessionLocked(id); + if (remoteFillService != null) { + remoteFillService.destroy(); + } } private int getLastResponseIndex() { diff --git a/services/core/java/com/android/server/am/ActivityRecord.java b/services/core/java/com/android/server/am/ActivityRecord.java index 5636e197aaee..9698a8fa91fd 100644 --- a/services/core/java/com/android/server/am/ActivityRecord.java +++ b/services/core/java/com/android/server/am/ActivityRecord.java @@ -130,6 +130,7 @@ import android.content.pm.ApplicationInfo; import android.content.res.CompatibilityInfo; import android.content.res.Configuration; import android.graphics.Bitmap; +import android.graphics.GraphicBuffer; import android.graphics.Rect; import android.os.Build; import android.os.Bundle; @@ -1419,19 +1420,17 @@ final class ActivityRecord extends ConfigurationContainer implements AppWindowCo break; case ANIM_THUMBNAIL_SCALE_UP: case ANIM_THUMBNAIL_SCALE_DOWN: - boolean scaleUp = (animationType == ANIM_THUMBNAIL_SCALE_UP); - service.mWindowManager.overridePendingAppTransitionThumb( - pendingOptions.getThumbnail(), + final boolean scaleUp = (animationType == ANIM_THUMBNAIL_SCALE_UP); + final GraphicBuffer buffer = pendingOptions.getThumbnail(); + service.mWindowManager.overridePendingAppTransitionThumb(buffer, pendingOptions.getStartX(), pendingOptions.getStartY(), pendingOptions.getOnAnimationStartListener(), scaleUp); if (intent.getSourceBounds() == null) { intent.setSourceBounds(new Rect(pendingOptions.getStartX(), pendingOptions.getStartY(), - pendingOptions.getStartX() - + pendingOptions.getThumbnail().getWidth(), - pendingOptions.getStartY() - + pendingOptions.getThumbnail().getHeight())); + pendingOptions.getStartX() + buffer.getWidth(), + pendingOptions.getStartY() + buffer.getHeight())); } break; case ANIM_THUMBNAIL_ASPECT_SCALE_UP: diff --git a/services/core/java/com/android/server/am/BatteryStatsService.java b/services/core/java/com/android/server/am/BatteryStatsService.java index e15b13527c3e..9f29296c251e 100644 --- a/services/core/java/com/android/server/am/BatteryStatsService.java +++ b/services/core/java/com/android/server/am/BatteryStatsService.java @@ -945,10 +945,10 @@ public final class BatteryStatsService extends IBatteryStats.Stub } @Override - public void noteBleScanStarted(WorkSource ws) { + public void noteBleScanStarted(WorkSource ws, boolean isUnoptimized) { enforceCallingPermission(); synchronized (mStats) { - mStats.noteBluetoothScanStartedFromSourceLocked(ws); + mStats.noteBluetoothScanStartedFromSourceLocked(ws, isUnoptimized); } } diff --git a/services/core/java/com/android/server/notification/ManagedServices.java b/services/core/java/com/android/server/notification/ManagedServices.java index b8d633fc666f..73a365b0da72 100644 --- a/services/core/java/com/android/server/notification/ManagedServices.java +++ b/services/core/java/com/android/server/notification/ManagedServices.java @@ -221,7 +221,9 @@ abstract public class ManagedServices { restoredSettingName(element), newValue, userid); - updateSettingsAccordingToInstalledServices(element, userid); + if (mConfig.secureSettingName.equals(element)) { + updateSettingsAccordingToInstalledServices(element, userid); + } rebuildRestoredPackages(); } } diff --git a/services/core/java/com/android/server/wm/AppTransition.java b/services/core/java/com/android/server/wm/AppTransition.java index a38addb1dad0..9d8f1241a7ae 100644 --- a/services/core/java/com/android/server/wm/AppTransition.java +++ b/services/core/java/com/android/server/wm/AppTransition.java @@ -52,6 +52,7 @@ import android.annotation.Nullable; import android.content.Context; import android.content.res.Configuration; import android.graphics.Bitmap; +import android.graphics.GraphicBuffer; import android.graphics.Path; import android.graphics.Rect; import android.os.Binder; @@ -346,12 +347,12 @@ public class AppTransition implements Dump { mAppTransitionState = APP_STATE_TIMEOUT; } - Bitmap getAppTransitionThumbnailHeader(int taskId) { + GraphicBuffer getAppTransitionThumbnailHeader(int taskId) { AppTransitionAnimationSpec spec = mNextAppTransitionAnimationsSpecs.get(taskId); if (spec == null) { spec = mDefaultNextAppTransitionAnimationSpec; } - return spec != null ? spec.bitmap : null; + return spec != null ? spec.buffer : null; } /** Returns whether the next thumbnail transition is aspect scaled up. */ @@ -716,9 +717,9 @@ public class AppTransition implements Dump { } private void putDefaultNextAppTransitionCoordinates(int left, int top, int width, int height, - Bitmap bitmap) { + GraphicBuffer buffer) { mDefaultNextAppTransitionAnimationSpec = new AppTransitionAnimationSpec(-1 /* taskId */, - bitmap, new Rect(left, top, left + width, top + height)); + buffer, new Rect(left, top, left + width, top + height)); } /** @@ -943,7 +944,7 @@ public class AppTransition implements Dump { * when a thumbnail is specified with the pending animation override. */ Animation createThumbnailAspectScaleAnimationLocked(Rect appRect, @Nullable Rect contentInsets, - Bitmap thumbnailHeader, final int taskId, int uiMode, int orientation) { + GraphicBuffer thumbnailHeader, final int taskId, int uiMode, int orientation) { Animation a; final int thumbWidthI = thumbnailHeader.getWidth(); final float thumbWidth = thumbWidthI > 0 ? thumbWidthI : 1; @@ -1296,7 +1297,7 @@ public class AppTransition implements Dump { * when a thumbnail is specified with the pending animation override. */ Animation createThumbnailScaleAnimationLocked(int appWidth, int appHeight, int transit, - Bitmap thumbnailHeader) { + GraphicBuffer thumbnailHeader) { Animation a; getDefaultNextAppTransitionStartRect(mTmpRect); final int thumbWidthI = thumbnailHeader.getWidth(); @@ -1341,7 +1342,7 @@ public class AppTransition implements Dump { int transit, int taskId) { final int appWidth = containingFrame.width(); final int appHeight = containingFrame.height(); - Bitmap thumbnailHeader = getAppTransitionThumbnailHeader(taskId); + final GraphicBuffer thumbnailHeader = getAppTransitionThumbnailHeader(taskId); Animation a; getDefaultNextAppTransitionStartRect(mTmpRect); final int thumbWidthI = thumbnailHeader != null ? thumbnailHeader.getWidth() : appWidth; @@ -1714,7 +1715,7 @@ public class AppTransition implements Dump { } } - void overridePendingAppTransitionThumb(Bitmap srcThumb, int startX, int startY, + void overridePendingAppTransitionThumb(GraphicBuffer srcThumb, int startX, int startY, IRemoteCallback startedCallback, boolean scaleUp) { if (isTransitionSet()) { clear(); @@ -1729,7 +1730,7 @@ public class AppTransition implements Dump { } } - void overridePendingAppTransitionAspectScaledThumb(Bitmap srcThumb, int startX, int startY, + void overridePendingAppTransitionAspectScaledThumb(GraphicBuffer srcThumb, int startX, int startY, int targetWidth, int targetHeight, IRemoteCallback startedCallback, boolean scaleUp) { if (isTransitionSet()) { clear(); @@ -1763,7 +1764,7 @@ public class AppTransition implements Dump { // to be set. Rect rect = spec.rect; putDefaultNextAppTransitionCoordinates(rect.left, rect.top, - rect.width(), rect.height(), spec.bitmap); + rect.width(), rect.height(), spec.buffer); } } } diff --git a/services/core/java/com/android/server/wm/TaskSnapshotController.java b/services/core/java/com/android/server/wm/TaskSnapshotController.java index b2667781b955..1f7ef5014d36 100644 --- a/services/core/java/com/android/server/wm/TaskSnapshotController.java +++ b/services/core/java/com/android/server/wm/TaskSnapshotController.java @@ -31,6 +31,9 @@ import android.graphics.Rect; import android.os.Environment; import android.os.Handler; import android.util.ArraySet; +import android.view.DisplayListCanvas; +import android.view.RenderNode; +import android.view.ThreadedRenderer; import android.view.WindowManager.LayoutParams; import android.view.WindowManagerPolicy.ScreenOffListener; import android.view.WindowManagerPolicy.StartingSurface; @@ -238,19 +241,22 @@ class TaskSnapshotController { final int color = task.getTaskDescription().getBackgroundColor(); final int statusBarColor = task.getTaskDescription().getStatusBarColor(); final int navigationBarColor = task.getTaskDescription().getNavigationBarColor(); - final Bitmap b = Bitmap.createBitmap(mainWindow.getFrameLw().width(), - mainWindow.getFrameLw().height(), ARGB_8888); - final Canvas c = new Canvas(b); - c.drawColor(color); final LayoutParams attrs = mainWindow.getAttrs(); final SystemBarBackgroundPainter decorPainter = new SystemBarBackgroundPainter(attrs.flags, attrs.privateFlags, attrs.systemUiVisibility, statusBarColor, navigationBarColor); + final int width = mainWindow.getFrameLw().width(); + final int height = mainWindow.getFrameLw().height(); + + final RenderNode node = RenderNode.create("TaskSnapshotController", null); + node.setLeftTopRightBottom(0, 0, width, height); + node.setClipToBounds(false); + final DisplayListCanvas c = node.start(width, height); + c.drawColor(color); decorPainter.setInsets(mainWindow.mContentInsets, mainWindow.mStableInsets); decorPainter.drawDecors(c, null /* statusBarExcludeFrame */); + node.end(c); + final Bitmap hwBitmap = ThreadedRenderer.createHardwareBitmap(node, width, height); - // Flush writer. - c.setBitmap(null); - final Bitmap hwBitmap = b.copy(HARDWARE, false /* isMutable */); return new TaskSnapshot(hwBitmap.createGraphicBufferHandle(), topChild.getConfiguration().orientation, mainWindow.mStableInsets, false /* reduced */, 1.0f /* scale */); diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 3fa090554019..02fdfeeb365d 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -123,6 +123,7 @@ import android.content.pm.PackageManager; import android.content.res.Configuration; import android.database.ContentObserver; import android.graphics.Bitmap; +import android.graphics.GraphicBuffer; import android.graphics.Matrix; import android.graphics.PixelFormat; import android.graphics.Point; @@ -2630,7 +2631,7 @@ public class WindowManagerService extends IWindowManager.Stub } @Override - public void overridePendingAppTransitionThumb(Bitmap srcThumb, int startX, + public void overridePendingAppTransitionThumb(GraphicBuffer srcThumb, int startX, int startY, IRemoteCallback startedCallback, boolean scaleUp) { synchronized(mWindowMap) { mAppTransition.overridePendingAppTransitionThumb(srcThumb, startX, startY, @@ -2639,7 +2640,7 @@ public class WindowManagerService extends IWindowManager.Stub } @Override - public void overridePendingAppTransitionAspectScaledThumb(Bitmap srcThumb, int startX, + public void overridePendingAppTransitionAspectScaledThumb(GraphicBuffer srcThumb, int startX, int startY, int targetWidth, int targetHeight, IRemoteCallback startedCallback, boolean scaleUp) { synchronized(mWindowMap) { @@ -3823,20 +3824,22 @@ public class WindowManagerService extends IWindowManager.Stub long origId = Binder.clearCallingIdentity(); try { - final boolean rotationChanged; // TODO(multi-display): Update rotation for different displays separately. - final DisplayContent displayContent = getDefaultDisplayContentLocked(); + final boolean rotationChanged; + final int displayId; synchronized (mWindowMap) { + final DisplayContent displayContent = getDefaultDisplayContentLocked(); rotationChanged = displayContent.updateRotationUnchecked( false /* inTransaction */); if (!rotationChanged || forceRelayout) { - getDefaultDisplayContentLocked().setLayoutNeeded(); + displayContent.setLayoutNeeded(); mWindowPlacerLocked.performSurfacePlacement(); } + displayId = displayContent.getDisplayId(); } if (rotationChanged || alwaysSendConfiguration) { - sendNewConfiguration(displayContent.getDisplayId()); + sendNewConfiguration(displayId); } } finally { Binder.restoreCallingIdentity(origId); @@ -6897,9 +6900,11 @@ public class WindowManagerService extends IWindowManager.Stub "registerDockedStackListener()")) { return; } - // TODO(multi-display): The listener is registered on the default display only. - getDefaultDisplayContentLocked().mDividerControllerLocked.registerDockedStackListener( - listener); + synchronized (mWindowMap) { + // TODO(multi-display): The listener is registered on the default display only. + getDefaultDisplayContentLocked().mDividerControllerLocked.registerDockedStackListener( + listener); + } } @Override diff --git a/services/core/java/com/android/server/wm/WindowSurfacePlacer.java b/services/core/java/com/android/server/wm/WindowSurfacePlacer.java index 424b25ec4d9d..3c13a1e0691d 100644 --- a/services/core/java/com/android/server/wm/WindowSurfacePlacer.java +++ b/services/core/java/com/android/server/wm/WindowSurfacePlacer.java @@ -38,11 +38,9 @@ import static com.android.server.wm.WindowManagerService.MAX_ANIMATION_DURATION; import static com.android.server.wm.WindowManagerService.UPDATE_FOCUS_PLACING_SURFACES; import android.content.res.Configuration; -import android.graphics.Bitmap; -import android.graphics.Canvas; +import android.graphics.GraphicBuffer; import android.graphics.PixelFormat; import android.graphics.Rect; -import android.os.Binder; import android.os.Debug; import android.os.Trace; import android.util.ArraySet; @@ -675,8 +673,9 @@ class WindowSurfacePlacer { return; } final int taskId = appToken.getTask().mTaskId; - Bitmap thumbnailHeader = mService.mAppTransition.getAppTransitionThumbnailHeader(taskId); - if (thumbnailHeader == null || thumbnailHeader.getConfig() == Bitmap.Config.ALPHA_8) { + final GraphicBuffer thumbnailHeader = + mService.mAppTransition.getAppTransitionThumbnailHeader(taskId); + if (thumbnailHeader == null) { if (DEBUG_APP_TRANSITIONS) Slog.d(TAG, "No thumbnail header bitmap for: " + taskId); return; } @@ -701,12 +700,10 @@ class WindowSurfacePlacer { Slog.i(TAG, " THUMBNAIL " + surfaceControl + ": CREATE"); } - // Draw the thumbnail onto the surface + // Transfer the thumbnail to the surface Surface drawSurface = new Surface(); drawSurface.copyFrom(surfaceControl); - Canvas c = drawSurface.lockCanvas(dirty); - c.drawBitmap(thumbnailHeader, 0, 0, null); - drawSurface.unlockCanvasAndPost(c); + drawSurface.attachAndQueueBuffer(thumbnailHeader); drawSurface.release(); // Get the thumbnail animation diff --git a/tools/layoutlib/bridge/src/android/view/IWindowManagerImpl.java b/tools/layoutlib/bridge/src/android/view/IWindowManagerImpl.java index 15fd2ceea5fa..deb0e09e6f72 100644 --- a/tools/layoutlib/bridge/src/android/view/IWindowManagerImpl.java +++ b/tools/layoutlib/bridge/src/android/view/IWindowManagerImpl.java @@ -18,6 +18,7 @@ package android.view; import android.content.res.Configuration; import android.graphics.Bitmap; +import android.graphics.GraphicBuffer; import android.graphics.Point; import android.graphics.Rect; import android.os.Bundle; @@ -210,13 +211,13 @@ public class IWindowManagerImpl implements IWindowManager { } @Override - public void overridePendingAppTransitionThumb(Bitmap srcThumb, int startX, int startY, + public void overridePendingAppTransitionThumb(GraphicBuffer srcThumb, int startX, int startY, IRemoteCallback startedCallback, boolean scaleUp) throws RemoteException { // TODO Auto-generated method stub } @Override - public void overridePendingAppTransitionAspectScaledThumb(Bitmap srcThumb, int startX, + public void overridePendingAppTransitionAspectScaledThumb(GraphicBuffer srcThumb, int startX, int startY, int targetWidth, int targetHeight, IRemoteCallback startedCallback, boolean scaleUp) { // TODO Auto-generated method stub diff --git a/wifi/java/android/net/wifi/WifiManager.java b/wifi/java/android/net/wifi/WifiManager.java index 0e0a524e158e..164b7b059183 100644 --- a/wifi/java/android/net/wifi/WifiManager.java +++ b/wifi/java/android/net/wifi/WifiManager.java @@ -1802,25 +1802,25 @@ public class WifiManager { } /** - * Start AccessPoint mode with the specified - * configuration. If the radio is already running in - * AP mode, update the new configuration - * Note that starting in access point mode disables station - * mode operation + * This call will be deprecated and removed in an upcoming release. It is no longer used to + * start WiFi Tethering. Please use {@link ConnectivityManager#startTethering(int, boolean, + * ConnectivityManager#OnStartTetheringCallback)} if + * the caller has proper permissions. Callers can also use the LocalOnlyHotspot feature for a + * hotspot capable of communicating with co-located devices {@link + * WifiManager#startLocalOnlyHotspot(LocalOnlyHotspotCallback)}. + * * @param wifiConfig SSID, security and channel details as * part of WifiConfiguration - * @return {@code true} if the operation succeeds, {@code false} otherwise + * @return {@code false} * * @hide */ @SystemApi public boolean setWifiApEnabled(WifiConfiguration wifiConfig, boolean enabled) { - try { - mService.setWifiApEnabled(wifiConfig, enabled); - return true; - } catch (RemoteException e) { - throw e.rethrowFromSystemServer(); - } + String packageName = mContext.getOpPackageName(); + + Log.w(TAG, packageName + " attempted call to setWifiApEnabled: enabled = " + enabled); + return false; } /** diff --git a/wifi/tests/src/android/net/wifi/WifiManagerTest.java b/wifi/tests/src/android/net/wifi/WifiManagerTest.java index 84ac1183c897..b235ccc7a89e 100644 --- a/wifi/tests/src/android/net/wifi/WifiManagerTest.java +++ b/wifi/tests/src/android/net/wifi/WifiManagerTest.java @@ -778,4 +778,13 @@ public class WifiManagerTest { verify(mWifiService).stopWatchLocalOnlyHotspot(); } + /** + * Verify that calls to setWifiApEnabled return false. + */ + @Test + public void testSetWifiApEnabledReturnsFalse() throws Exception { + assertFalse(mWifiManager.setWifiApEnabled(null, true)); + assertFalse(mWifiManager.setWifiApEnabled(null, false)); + verify(mWifiService, never()).setWifiApEnabled(any(), anyBoolean()); + } } |