Merge "Make getPersonalAppsSuspensionReasons more robust." into rvc-dev
diff --git a/apex/media/framework/java/android/media/MediaParser.java b/apex/media/framework/java/android/media/MediaParser.java
index a9ed6d8..c3adf60 100644
--- a/apex/media/framework/java/android/media/MediaParser.java
+++ b/apex/media/framework/java/android/media/MediaParser.java
@@ -65,6 +65,7 @@
import java.lang.reflect.InvocationTargetException;
import java.nio.ByteBuffer;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashMap;
@@ -709,6 +710,35 @@
*/
public static final String PARAMETER_TS_ENABLE_HDMV_DTS_AUDIO_STREAMS =
"android.media.mediaparser.ts.enableHdmvDtsAudioStreams";
+ /**
+ * Sets whether encryption data should be sent in-band with the sample data, as per {@link
+ * OutputConsumer#onSampleDataFound}. {@code boolean} expected. Default value is {@code false}.
+ *
+ * <p>If this parameter is set, encrypted samples' data will be prefixed with the encryption
+ * information bytes. The format for in-band encryption information is:
+ *
+ * <ul>
+ * <li>(1 byte) {@code encryption_signal_byte}: Most significant bit signals whether the
+ * encryption data contains subsample encryption data. The remaining bits contain {@code
+ * initialization_vector_size}.
+ * <li>({@code initialization_vector_size} bytes) Initialization vector.
+ * <li>If subsample encryption data is present, as per {@code encryption_signal_byte}, the
+ * encryption data also contains:
+ * <ul>
+ * <li>(2 bytes) {@code subsample_encryption_data_length}.
+ * <li>({@code subsample_encryption_data_length * 6} bytes) Subsample encryption data
+ * (repeated {@code subsample_encryption_data_length} times):
+ * <ul>
+ * <li>(2 bytes) Size of a clear section in sample.
+ * <li>(4 bytes) Size of an encryption section in sample.
+ * </ul>
+ * </ul>
+ * </ul>
+ *
+ * @hide
+ */
+ public static final String PARAMETER_IN_BAND_CRYPTO_INFO =
+ "android.media.mediaparser.inBandCryptoInfo";
// Private constants.
@@ -718,6 +748,21 @@
private static final String TS_MODE_SINGLE_PMT = "single_pmt";
private static final String TS_MODE_MULTI_PMT = "multi_pmt";
private static final String TS_MODE_HLS = "hls";
+ private static final int BYTES_PER_SUBSAMPLE_ENCRYPTION_ENTRY = 6;
+
+ @IntDef(
+ value = {
+ STATE_READING_SIGNAL_BYTE,
+ STATE_READING_INIT_VECTOR,
+ STATE_READING_SUBSAMPLE_ENCRYPTION_SIZE,
+ STATE_READING_SUBSAMPLE_ENCRYPTION_DATA
+ })
+ private @interface EncryptionDataReadState {}
+
+ private static final int STATE_READING_SIGNAL_BYTE = 0;
+ private static final int STATE_READING_INIT_VECTOR = 1;
+ private static final int STATE_READING_SUBSAMPLE_ENCRYPTION_SIZE = 2;
+ private static final int STATE_READING_SUBSAMPLE_ENCRYPTION_DATA = 3;
// Instance creation methods.
@@ -853,6 +898,7 @@
private final DataReaderAdapter mScratchDataReaderAdapter;
private final ParsableByteArrayAdapter mScratchParsableByteArrayAdapter;
@Nullable private final Constructor<DrmInitData.SchemeInitData> mSchemeInitDataConstructor;
+ private boolean mInBandCryptoInfo;
private String mParserName;
private Extractor mExtractor;
private ExtractorInput mExtractorInput;
@@ -900,6 +946,9 @@
&& !TS_MODE_MULTI_PMT.equals(value)) {
throw new IllegalArgumentException(PARAMETER_TS_MODE + " does not accept: " + value);
}
+ if (PARAMETER_IN_BAND_CRYPTO_INFO.equals(parameterName)) {
+ mInBandCryptoInfo = (boolean) value;
+ }
mParserParameters.put(parameterName, value);
return this;
}
@@ -1274,9 +1323,23 @@
private class TrackOutputAdapter implements TrackOutput {
private final int mTrackIndex;
+ private final CryptoInfo mCryptoInfo;
+
+ @EncryptionDataReadState private int mEncryptionDataReadState;
+ private int mEncryptionDataSizeToSubtractFromSampleDataSize;
+ private int mEncryptionVectorSize;
+ private boolean mHasSubsampleEncryptionData;
+ private CryptoInfo.Pattern mEncryptionPattern;
private TrackOutputAdapter(int trackIndex) {
mTrackIndex = trackIndex;
+ mCryptoInfo = new CryptoInfo();
+ mCryptoInfo.iv = new byte[16]; // Size documented in CryptoInfo.
+ mCryptoInfo.numBytesOfClearData = new int[0];
+ mCryptoInfo.numBytesOfEncryptedData = new int[0];
+ mEncryptionDataReadState = STATE_READING_SIGNAL_BYTE;
+ mEncryptionPattern =
+ new CryptoInfo.Pattern(/* blocksToEncrypt= */ 0, /* blocksToSkip= */ 0);
}
@Override
@@ -1303,6 +1366,98 @@
@Override
public void sampleData(
ParsableByteArray data, int length, @SampleDataPart int sampleDataPart) {
+ if (sampleDataPart == SAMPLE_DATA_PART_ENCRYPTION && !mInBandCryptoInfo) {
+ while (length > 0) {
+ switch (mEncryptionDataReadState) {
+ case STATE_READING_SIGNAL_BYTE:
+ int encryptionSignalByte = data.readUnsignedByte();
+ length--;
+ mHasSubsampleEncryptionData = ((encryptionSignalByte >> 7) & 1) != 0;
+ mEncryptionVectorSize = encryptionSignalByte & 0x7F;
+ mEncryptionDataSizeToSubtractFromSampleDataSize =
+ mEncryptionVectorSize + 1; // Signal byte.
+ mEncryptionDataReadState = STATE_READING_INIT_VECTOR;
+ break;
+ case STATE_READING_INIT_VECTOR:
+ Arrays.fill(mCryptoInfo.iv, (byte) 0); // Ensure 0-padding.
+ data.readBytes(mCryptoInfo.iv, /* offset= */ 0, mEncryptionVectorSize);
+ length -= mEncryptionVectorSize;
+ if (mHasSubsampleEncryptionData) {
+ mEncryptionDataReadState = STATE_READING_SUBSAMPLE_ENCRYPTION_SIZE;
+ } else {
+ mCryptoInfo.numSubSamples = 0;
+ mEncryptionDataReadState = STATE_READING_SIGNAL_BYTE;
+ }
+ break;
+ case STATE_READING_SUBSAMPLE_ENCRYPTION_SIZE:
+ int numSubSamples = data.readUnsignedShort();
+ mCryptoInfo.numSubSamples = numSubSamples;
+ if (mCryptoInfo.numBytesOfClearData.length < numSubSamples) {
+ mCryptoInfo.numBytesOfClearData = new int[numSubSamples];
+ mCryptoInfo.numBytesOfEncryptedData = new int[numSubSamples];
+ }
+ length -= 2;
+ mEncryptionDataSizeToSubtractFromSampleDataSize +=
+ 2 + numSubSamples * BYTES_PER_SUBSAMPLE_ENCRYPTION_ENTRY;
+ mEncryptionDataReadState = STATE_READING_SUBSAMPLE_ENCRYPTION_DATA;
+ break;
+ case STATE_READING_SUBSAMPLE_ENCRYPTION_DATA:
+ for (int i = 0; i < mCryptoInfo.numSubSamples; i++) {
+ mCryptoInfo.numBytesOfClearData[i] = data.readUnsignedShort();
+ mCryptoInfo.numBytesOfEncryptedData[i] = data.readInt();
+ }
+ length -=
+ mCryptoInfo.numSubSamples
+ * BYTES_PER_SUBSAMPLE_ENCRYPTION_ENTRY;
+ mEncryptionDataReadState = STATE_READING_SIGNAL_BYTE;
+ if (length != 0) {
+ throw new IllegalStateException();
+ }
+ break;
+ default:
+ // Never happens.
+ throw new IllegalStateException();
+ }
+ }
+ } else {
+ outputSampleData(data, length);
+ }
+ }
+
+ @Override
+ public void sampleMetadata(
+ long timeUs, int flags, int size, int offset, @Nullable CryptoData cryptoData) {
+ mOutputConsumer.onSampleCompleted(
+ mTrackIndex,
+ timeUs,
+ getMediaParserFlags(flags),
+ size - mEncryptionDataSizeToSubtractFromSampleDataSize,
+ offset,
+ getPopulatedCryptoInfo(cryptoData));
+ mEncryptionDataReadState = STATE_READING_SIGNAL_BYTE;
+ mEncryptionDataSizeToSubtractFromSampleDataSize = 0;
+ }
+
+ @Nullable
+ private CryptoInfo getPopulatedCryptoInfo(@Nullable CryptoData cryptoData) {
+ if (cryptoData == null) {
+ // The sample is not encrypted.
+ return null;
+ }
+ mCryptoInfo.key = cryptoData.encryptionKey;
+ // ExoPlayer modes match MediaCodec modes.
+ mCryptoInfo.mode = cryptoData.cryptoMode;
+ if (cryptoData.clearBlocks != 0) {
+ // Content is pattern-encrypted.
+ mCryptoInfo.setPattern(mEncryptionPattern);
+ mEncryptionPattern.set(cryptoData.encryptedBlocks, cryptoData.clearBlocks);
+ } else {
+ mCryptoInfo.setPattern(null);
+ }
+ return mCryptoInfo;
+ }
+
+ private void outputSampleData(ParsableByteArray data, int length) {
mScratchParsableByteArrayAdapter.resetWithByteArray(data, length);
try {
mOutputConsumer.onSampleDataFound(mTrackIndex, mScratchParsableByteArrayAdapter);
@@ -1311,13 +1466,6 @@
throw new RuntimeException(e);
}
}
-
- @Override
- public void sampleMetadata(
- long timeUs, int flags, int size, int offset, CryptoData encryptionData) {
- mOutputConsumer.onSampleCompleted(
- mTrackIndex, timeUs, flags, size, offset, toCryptoInfo(encryptionData));
- }
}
private static final class DataReaderAdapter implements InputReader {
@@ -1519,11 +1667,6 @@
}
}
- private static CryptoInfo toCryptoInfo(TrackOutput.CryptoData encryptionData) {
- // TODO: Implement.
- return null;
- }
-
/** Returns a new {@link SeekPoint} equivalent to the given {@code exoPlayerSeekPoint}. */
private static SeekPoint toSeekPoint(
com.google.android.exoplayer2.extractor.SeekPoint exoPlayerSeekPoint) {
@@ -1543,6 +1686,19 @@
}
}
+ private static int getMediaParserFlags(int flags) {
+ @SampleFlags int result = 0;
+ result |= (flags & C.BUFFER_FLAG_ENCRYPTED) != 0 ? SAMPLE_FLAG_ENCRYPTED : 0;
+ result |= (flags & C.BUFFER_FLAG_KEY_FRAME) != 0 ? SAMPLE_FLAG_KEY_FRAME : 0;
+ result |= (flags & C.BUFFER_FLAG_DECODE_ONLY) != 0 ? SAMPLE_FLAG_DECODE_ONLY : 0;
+ result |=
+ (flags & C.BUFFER_FLAG_HAS_SUPPLEMENTAL_DATA) != 0
+ ? SAMPLE_FLAG_HAS_SUPPLEMENTAL_DATA
+ : 0;
+ result |= (flags & C.BUFFER_FLAG_LAST_SAMPLE) != 0 ? SAMPLE_FLAG_LAST_SAMPLE : 0;
+ return result;
+ }
+
@Nullable
private static Constructor<DrmInitData.SchemeInitData> getSchemeInitDataConstructor() {
// TODO: Use constructor statically when available.
@@ -1598,6 +1754,7 @@
expectedTypeByParameterName.put(PARAMETER_TS_IGNORE_SPLICE_INFO_STREAM, Boolean.class);
expectedTypeByParameterName.put(PARAMETER_TS_DETECT_ACCESS_UNITS, Boolean.class);
expectedTypeByParameterName.put(PARAMETER_TS_ENABLE_HDMV_DTS_AUDIO_STREAMS, Boolean.class);
+ expectedTypeByParameterName.put(PARAMETER_IN_BAND_CRYPTO_INFO, Boolean.class);
EXPECTED_TYPE_BY_PARAMETER_NAME = Collections.unmodifiableMap(expectedTypeByParameterName);
}
}
diff --git a/cmds/statsd/src/atoms.proto b/cmds/statsd/src/atoms.proto
index 03061bb..feeb0ed 100644
--- a/cmds/statsd/src/atoms.proto
+++ b/cmds/statsd/src/atoms.proto
@@ -429,6 +429,15 @@
AccessibilityServiceReported accessibility_service_reported = 267 [(module) = "settings"];
DocsUIDragAndDropReported docs_ui_drag_and_drop_reported = 268 [(module) = "docsui"];
AppUsageEventOccurred app_usage_event_occurred = 269 [(module) = "framework"];
+ AutoRevokeNotificationClicked auto_revoke_notification_clicked =
+ 270 [(module) = "permissioncontroller"];
+ AutoRevokeFragmentAppViewed auto_revoke_fragment_app_viewed =
+ 271 [(module) = "permissioncontroller"];
+ AutoRevokedAppInteraction auto_revoked_app_interaction =
+ 272 [(module) = "permissioncontroller", (module) = "settings"];
+ AppPermissionGroupsFragmentAutoRevokeAction
+ app_permission_groups_fragment_auto_revoke_action =
+ 273 [(module) = "permissioncontroller"];
SdkExtensionStatus sdk_extension_status = 354;
// StatsdStats tracks platform atoms with ids upto 500.
@@ -8210,7 +8219,8 @@
}
/**
-* Information about a AppPermissionsFragment viewed by user
+* Information about a AppPermissionGroupsFragment viewed by user. Fragment has been renamed, but
+* the log retains the old fragment name.
*/
message AppPermissionsFragmentViewed {
// id which identifies single session of user interacting with permission controller
@@ -8238,7 +8248,6 @@
}
optional Category category = 6;
}
-
/**
* Information about a PermissionAppsFragment viewed by user.
* Logged from ui/handheld/PermissionAppsFragment.java
@@ -8271,6 +8280,99 @@
}
/**
+* Log that the Auto Revoke notification has been clicked
+* Logged from ui/ManagePermissionsActivity
+*/
+message AutoRevokeNotificationClicked {
+ // id which identifies single session of user interacting with permission controller
+ optional int64 session_id = 1;
+}
+
+/**
+* Log that an app has been displayed on the auto revoke page, and lists one permission that was
+* auto revoked for it.
+* Logged from ui/handheld/AutoRevokeFragment
+*/
+message AutoRevokeFragmentAppViewed {
+ // id which identifies single session of user interacting with permission controller
+ optional int64 session_id = 1;
+
+ // UID of package for which permissions are viewed
+ optional int32 uid = 2 [(is_uid) = true];
+
+ // Name of package for which permissions are viewed
+ optional string package_name = 3;
+
+ // The name of a permission group that has been revoked
+ optional string permission_group_name = 4;
+
+ // The age of the app- more than three months old, or more than six months
+ enum Age {
+ UNDEFINED = 0;
+ NEWER_BUCKET = 1;
+ OLDER_BUCKET = 2;
+ }
+
+ // How long the app has been unused. Currently, newer bucket is 3 months, older is 6 months
+ optional Age age = 5;
+}
+
+/**
+* Log that the user has interacted with an app on the auto revoke fragment
+* Logged from ui/handheld/AutoRevokeFragment
+*/
+message AutoRevokedAppInteraction {
+ // id which identifies single session of user interacting with permission controller
+ optional int64 session_id = 1;
+
+ // UID of package for which permissions are viewed
+ optional int32 uid = 2 [(is_uid) = true];
+
+ // Name of package for which permissions are viewed
+ optional string package_name = 3;
+
+ enum Action {
+ UNDEFINED = 0;
+ REMOVE = 1;
+ OPEN = 2;
+ APP_INFO = 3;
+ PERMISSIONS = 4;
+ REMOVE_IN_SETTINGS = 5;
+ OPEN_IN_SETTINGS = 6;
+ }
+
+ // The action the user took to interact with the app
+ optional Action action = 4;
+}
+
+/**
+* Log that the AppPermissionGroupsFragment has been interacted with for the possible purposes of
+* auto revoke, or that the auto revoke switch has been changed
+* Logged from ui/handheld/AppPermissionGroupsFragment
+ */
+message AppPermissionGroupsFragmentAutoRevokeAction {
+ // id which identifies single session of user interacting with permission controller
+ optional int64 session_id = 1;
+
+ // UID of package for which permissions are viewed
+ optional int32 uid = 2 [(is_uid) = true];
+
+ // Name of package for which permissions are viewed
+ optional string package_name = 3;
+
+ enum Action {
+ UNDEFINED = 0;
+ OPENED_FOR_AUTO_REVOKE = 1;
+ OPENED_FROM_INTENT = 2;
+ SWITCH_ENABLED = 3;
+ SWITCH_DISABLED = 4;
+ }
+
+ // The action the user took to interact with the fragment
+ optional Action action = 4;
+}
+
+/**
* Logs when there is a smart selection related event.
* See frameworks/base/core/java/android/view/textclassifier/TextClassifierEvent.java
* Logged from: TextClassifierEventLogger.java
diff --git a/core/java/android/app/ApplicationPackageManager.java b/core/java/android/app/ApplicationPackageManager.java
index f883b60..6bd8fd7 100644
--- a/core/java/android/app/ApplicationPackageManager.java
+++ b/core/java/android/app/ApplicationPackageManager.java
@@ -1574,7 +1574,7 @@
}
Drawable badge = new LauncherIcons(mContext).getBadgeDrawable(
getUserManager().getUserIconBadgeResId(user.getIdentifier()),
- getUserBadgeColor(user));
+ getUserBadgeColor(user, false));
return getBadgedDrawable(icon, badge, null, true);
}
@@ -1588,8 +1588,16 @@
return getBadgedDrawable(drawable, badgeDrawable, badgeLocation, true);
}
- /** Returns the color of the user's actual badge (not the badge's shadow). */
- private int getUserBadgeColor(UserHandle user) {
+ /**
+ * Returns the color of the user's actual badge (not the badge's shadow).
+ * @param checkTheme whether to check the theme to determine the badge color. This should be
+ * true if the background is determined by the theme. Otherwise, if
+ * checkTheme is false, returns the color assuming a light background.
+ */
+ private int getUserBadgeColor(UserHandle user, boolean checkTheme) {
+ if (checkTheme && mContext.getResources().getConfiguration().isNightModeActive()) {
+ return getUserManager().getUserBadgeDarkColor(user.getIdentifier());
+ }
return getUserManager().getUserBadgeColor(user.getIdentifier());
}
@@ -1603,11 +1611,14 @@
}
Drawable badgeForeground = getDrawableForDensity(
getUserManager().getUserBadgeResId(user.getIdentifier()), density);
- badgeForeground.setTint(getUserBadgeColor(user));
+ badgeForeground.setTint(getUserBadgeColor(user, false));
Drawable badge = new LayerDrawable(new Drawable[] {badgeColor, badgeForeground });
return badge;
}
+ /**
+ * Returns the badge color based on whether device has dark theme enabled or not.
+ */
@Override
public Drawable getUserBadgeForDensityNoBackground(UserHandle user, int density) {
if (!hasUserBadge(user.getIdentifier())) {
@@ -1616,7 +1627,7 @@
Drawable badge = getDrawableForDensity(
getUserManager().getUserBadgeNoBackgroundResId(user.getIdentifier()), density);
if (badge != null) {
- badge.setTint(getUserBadgeColor(user));
+ badge.setTint(getUserBadgeColor(user, true));
}
return badge;
}
diff --git a/core/java/android/inputmethodservice/InputMethodService.java b/core/java/android/inputmethodservice/InputMethodService.java
index d3464fd..d8b1f41 100644
--- a/core/java/android/inputmethodservice/InputMethodService.java
+++ b/core/java/android/inputmethodservice/InputMethodService.java
@@ -90,6 +90,7 @@
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.TextView;
+import android.window.WindowMetricsHelper;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.inputmethod.IInputContentUriToken;
@@ -1438,8 +1439,8 @@
*/
public int getMaxWidth() {
final WindowManager windowManager = getSystemService(WindowManager.class);
- final Rect windowBounds = windowManager.getCurrentWindowMetrics().getBounds();
- return windowBounds.width();
+ return WindowMetricsHelper.getBoundsExcludingNavigationBarAndCutout(
+ windowManager.getCurrentWindowMetrics()).width();
}
/**
diff --git a/core/java/android/os/IUserManager.aidl b/core/java/android/os/IUserManager.aidl
index b10abe7..07363ed 100644
--- a/core/java/android/os/IUserManager.aidl
+++ b/core/java/android/os/IUserManager.aidl
@@ -108,6 +108,7 @@
int getUserBadgeNoBackgroundResId(int userId);
int getUserBadgeLabelResId(int userId);
int getUserBadgeColorResId(int userId);
+ int getUserBadgeDarkColorResId(int userId);
boolean hasBadge(int userId);
boolean isUserUnlocked(int userId);
boolean isUserRunning(int userId);
diff --git a/core/java/android/os/UserManager.java b/core/java/android/os/UserManager.java
index 7912dac..236ea00 100644
--- a/core/java/android/os/UserManager.java
+++ b/core/java/android/os/UserManager.java
@@ -3663,7 +3663,8 @@
}
/**
- * Returns the badge color for the given user (generally to color a profile's icon's badge).
+ * Returns the light theme badge color for the given user (generally to color a profile's
+ * icon's badge).
*
* <p>To check whether a badge color is expected for the user, first call {@link #hasBadge}.
*
@@ -3683,6 +3684,27 @@
}
/**
+ * Returns the dark theme badge color for the given user (generally to color a profile's icon's
+ * badge).
+ *
+ * <p>To check whether a badge color is expected for the user, first call {@link #hasBadge}.
+ *
+ * @return the color (not the resource ID) to be used for the user's badge
+ * @throws Resources.NotFoundException if no valid badge color exists for this user
+ *
+ * @see #getBadgedIconForUser more information about badging in general
+ * @hide
+ */
+ public @ColorInt int getUserBadgeDarkColor(@UserIdInt int userId) {
+ try {
+ final int resourceId = mService.getUserBadgeDarkColorResId(userId);
+ return Resources.getSystem().getColor(resourceId, null);
+ } catch (RemoteException re) {
+ throw re.rethrowFromSystemServer();
+ }
+ }
+
+ /**
* Returns the Resource ID of the user's icon badge.
*
* @return the Resource ID of the user's icon badge if it has one; otherwise
diff --git a/core/java/android/view/ViewConfiguration.java b/core/java/android/view/ViewConfiguration.java
index 69d37ab..0d2d4d1 100644
--- a/core/java/android/view/ViewConfiguration.java
+++ b/core/java/android/view/ViewConfiguration.java
@@ -416,7 +416,7 @@
com.android.internal.R.dimen.config_ambiguousGestureMultiplier,
multiplierValue,
true /*resolveRefs*/);
- mAmbiguousGestureMultiplier = multiplierValue.getFloat();
+ mAmbiguousGestureMultiplier = Math.max(1.0f, multiplierValue.getFloat());
// Size of the screen in bytes, in ARGB_8888 format
final WindowManager windowManager = context.getSystemService(WindowManager.class);
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index a17af6c..172197c 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -4638,14 +4638,17 @@
mInputQueueCallback = null;
mInputQueue = null;
}
- if (mInputEventReceiver != null) {
- mInputEventReceiver.dispose();
- mInputEventReceiver = null;
- }
try {
mWindowSession.remove(mWindow);
} catch (RemoteException e) {
}
+ // Dispose receiver would dispose client InputChannel, too. That could send out a socket
+ // broken event, so we need to unregister the server InputChannel when removing window to
+ // prevent server side receive the event and prompt error.
+ if (mInputEventReceiver != null) {
+ mInputEventReceiver.dispose();
+ mInputEventReceiver = null;
+ }
mDisplayManager.unregisterDisplayListener(mDisplayListener);
diff --git a/core/java/android/view/WindowMetrics.java b/core/java/android/view/WindowMetrics.java
index 86ef879..d96c5c8 100644
--- a/core/java/android/view/WindowMetrics.java
+++ b/core/java/android/view/WindowMetrics.java
@@ -48,22 +48,19 @@
* and display cutout areas. The value reported by {@link Display#getSize(Point)} can be
* obtained by using:
* <pre class="prettyprint">
- * final WindowMetrics metrics = windowManager.getCurrentMetrics();
+ * final WindowMetrics metrics = windowManager.getCurrentWindowMetrics();
* // Gets all excluding insets
* final WindowInsets windowInsets = metrics.getWindowInsets();
- * Insets insets = windowInsets.getInsets(WindowInsets.Type.navigationBars());
- * final DisplayCutout cutout = windowInsets.getCutout();
- * if (cutout != null) {
- * final Insets cutoutSafeInsets = Insets.of(cutout.getSafeInsetsLeft(), ...);
- * insets = insets.max(insets, cutoutSafeInsets);
- * }
+ * Insets insets = windowInsets.getInsetsIgnoreVisibility(WindowInsets.Type.navigationBars()
+ * | WindowInsets.Type.displayCutout());
*
* int insetsWidth = insets.right + insets.left;
* int insetsHeight = insets.top + insets.bottom;
*
* // Legacy size that Display#getSize reports
- * final Size legacySize = new Size(metrics.getWidth() - insetsWidth,
- * metrics.getHeight() - insetsHeight);
+ * final Rect bounds = metrics.getBounds();
+ * final Size legacySize = new Size(bounds.width() - insetsWidth,
+ * bounds.height() - insetsHeight);
* </pre>
* </p>
*
diff --git a/core/java/android/view/WindowlessWindowManager.java b/core/java/android/view/WindowlessWindowManager.java
index 15604a2..cd954c4 100644
--- a/core/java/android/view/WindowlessWindowManager.java
+++ b/core/java/android/view/WindowlessWindowManager.java
@@ -191,6 +191,7 @@
throw new IllegalArgumentException(
"Invalid window token (never added or removed already)");
}
+
try (SurfaceControl.Transaction t = new SurfaceControl.Transaction()) {
t.remove(state.mSurfaceControl).apply();
}
diff --git a/core/java/android/view/autofill/AutofillPopupWindow.java b/core/java/android/view/autofill/AutofillPopupWindow.java
index 2ead352..3161c3c 100644
--- a/core/java/android/view/autofill/AutofillPopupWindow.java
+++ b/core/java/android/view/autofill/AutofillPopupWindow.java
@@ -31,6 +31,7 @@
import android.view.WindowManager;
import android.view.WindowManager.LayoutParams;
import android.widget.PopupWindow;
+import android.window.WindowMetricsHelper;
/**
* Custom {@link PopupWindow} used to isolate its content from the autofilled app - the
@@ -128,7 +129,8 @@
// Gravity.BOTTOM because PopupWindow base class does not expose computeGravity().
final WindowManager windowManager = anchor.getContext()
.getSystemService(WindowManager.class);
- final Rect windowBounds = windowManager.getCurrentWindowMetrics().getBounds();
+ final Rect windowBounds = WindowMetricsHelper.getBoundsExcludingNavigationBarAndCutout(
+ windowManager.getCurrentWindowMetrics());
width = windowBounds.width();
if (height != LayoutParams.MATCH_PARENT) {
offsetY = windowBounds.height() - height;
diff --git a/core/java/android/window/VirtualDisplayTaskEmbedder.java b/core/java/android/window/VirtualDisplayTaskEmbedder.java
index 2e6cbee..d2614da 100644
--- a/core/java/android/window/VirtualDisplayTaskEmbedder.java
+++ b/core/java/android/window/VirtualDisplayTaskEmbedder.java
@@ -336,11 +336,7 @@
/** Get density of the hosting display. */
private int getBaseDisplayDensity() {
- if (mTmpDisplayMetrics == null) {
- mTmpDisplayMetrics = new DisplayMetrics();
- }
- mContext.getDisplayNoVerify().getRealMetrics(mTmpDisplayMetrics);
- return mTmpDisplayMetrics.densityDpi;
+ return mContext.getResources().getConfiguration().densityDpi;
}
/**
diff --git a/core/java/android/window/WindowMetricsHelper.java b/core/java/android/window/WindowMetricsHelper.java
new file mode 100644
index 0000000..fb8b27e
--- /dev/null
+++ b/core/java/android/window/WindowMetricsHelper.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.window;
+
+import static android.view.ViewRootImpl.NEW_INSETS_MODE_FULL;
+import static android.view.WindowInsets.Type.displayCutout;
+import static android.view.WindowInsets.Type.navigationBars;
+
+import android.annotation.NonNull;
+import android.graphics.Insets;
+import android.graphics.Point;
+import android.graphics.Rect;
+import android.view.Display;
+import android.view.DisplayCutout;
+import android.view.ViewRootImpl;
+import android.view.WindowInsets;
+import android.view.WindowMetrics;
+
+/**
+ * Helper class to calculate size with {@link android.graphics.Insets} based on provided
+ * {@link WindowMetrics}
+ *
+ * @hide
+ */
+public final class WindowMetricsHelper {
+ private WindowMetricsHelper() {}
+
+ /**
+ * Returns bounds excluding navigation bar and display cutout (but including status bar).
+ * This has the same behavior as {@link Display#getSize(Point)}.
+ */
+ public static Rect getBoundsExcludingNavigationBarAndCutout(
+ @NonNull WindowMetrics windowMetrics) {
+ final WindowInsets windowInsets = windowMetrics.getWindowInsets();
+ Insets insets;
+ if (ViewRootImpl.sNewInsetsMode == NEW_INSETS_MODE_FULL) {
+ insets = windowInsets.getInsetsIgnoringVisibility(navigationBars() | displayCutout());
+ } else {
+ final Insets stableInsets = windowInsets.getStableInsets();
+ insets = Insets.of(stableInsets.left, 0 /* top */, stableInsets.right,
+ stableInsets.bottom);
+ final DisplayCutout cutout = windowInsets.getDisplayCutout();
+ insets = (cutout != null) ? Insets.max(insets, Insets.of(cutout.getSafeInsets()))
+ : insets;
+ }
+ final Rect result = new Rect(windowMetrics.getBounds());
+ result.inset(insets);
+ return result;
+ }
+}
diff --git a/core/java/com/android/internal/app/ResolverActivity.java b/core/java/com/android/internal/app/ResolverActivity.java
index 83dabe8..9c2df13 100644
--- a/core/java/com/android/internal/app/ResolverActivity.java
+++ b/core/java/com/android/internal/app/ResolverActivity.java
@@ -363,8 +363,9 @@
// of the last used choice to highlight it in the list. We need to always
// turn this off when running under voice interaction, since it results in
// a more complicated UI that the current voice interaction flow is not able
- // to handle.
- boolean filterLastUsed = mSupportsAlwaysUseOption && !isVoiceInteraction();
+ // to handle. We also turn it off when the work tab is shown to simplify the UX.
+ boolean filterLastUsed = mSupportsAlwaysUseOption && !isVoiceInteraction()
+ && !shouldShowTabs();
mWorkProfileUserHandle = fetchWorkProfileUserProfile();
mMultiProfilePagerAdapter = createMultiProfilePagerAdapter(initialIntents, rList, filterLastUsed);
if (configureContentView()) {
diff --git a/core/res/res/values-night/colors.xml b/core/res/res/values-night/colors.xml
index 708b4f3..98fece3 100644
--- a/core/res/res/values-night/colors.xml
+++ b/core/res/res/values-night/colors.xml
@@ -35,4 +35,6 @@
<color name="resolver_empty_state_text">#FFFFFF</color>
<color name="resolver_empty_state_icon">#FFFFFF</color>
+
+ <color name="personal_apps_suspension_notification_color">#8AB4F8</color>
</resources>
diff --git a/core/res/res/values/colors.xml b/core/res/res/values/colors.xml
index 831da6f..c413f8b 100644
--- a/core/res/res/values/colors.xml
+++ b/core/res/res/values/colors.xml
@@ -183,6 +183,10 @@
<color name="profile_badge_2">#ffff6d00</color><!-- Orange -->
<color name="profile_badge_3">#ff22f033</color><!-- Green -->
+ <color name="profile_badge_1_dark">#ff8ab4f8</color><!-- Blue 300-->
+ <color name="profile_badge_2_dark">#fffdd663</color><!-- Orange 300 -->
+ <color name="profile_badge_3_dark">#ff81c995</color><!-- Green 300 -->
+
<!-- Default instant app badge color -->
<color name="instant_app_badge">#ff757575</color><!-- Grey -->
@@ -227,5 +231,8 @@
<color name="resolver_empty_state_text">#FF202124</color>
<color name="resolver_empty_state_icon">#FF5F6368</color>
+ <!-- Color for personal app suspension notification button text and icon tint. -->
+ <color name="personal_apps_suspension_notification_color">#1A73E8</color>
+
<color name="conversation_important_highlight">#F9AB00</color>
</resources>
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index 9a7f07f..9f3ace5 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -1203,6 +1203,7 @@
<java-symbol type="string" name="personal_apps_suspension_tomorrow_text" />
<java-symbol type="string" name="personal_apps_suspension_text" />
<java-symbol type="string" name="personal_apps_suspended_turn_profile_on" />
+ <java-symbol type="string" name="notification_work_profile_content_description" />
<java-symbol type="string" name="factory_reset_warning" />
<java-symbol type="string" name="factory_reset_message" />
<java-symbol type="string" name="lockscreen_transport_play_description" />
@@ -1448,6 +1449,9 @@
<java-symbol type="color" name="profile_badge_1" />
<java-symbol type="color" name="profile_badge_2" />
<java-symbol type="color" name="profile_badge_3" />
+ <java-symbol type="color" name="profile_badge_1_dark" />
+ <java-symbol type="color" name="profile_badge_2_dark" />
+ <java-symbol type="color" name="profile_badge_3_dark" />
<java-symbol type="color" name="instant_app_badge" />
<java-symbol type="layout" name="action_bar_home" />
@@ -4003,6 +4007,8 @@
<java-symbol type="string" name="notification_channel_network_alerts" />
<java-symbol type="string" name="notification_channel_network_available" />
+ <java-symbol type="color" name="personal_apps_suspension_notification_color" />
+
<!-- For Pdn throttle feature -->
<java-symbol type="bool" name="config_pdp_reject_enable_retry" />
<java-symbol type="integer" name="config_pdp_reject_retry_delay_ms" />
diff --git a/core/tests/coretests/AndroidManifest.xml b/core/tests/coretests/AndroidManifest.xml
index 67a57aa..5c2841a 100644
--- a/core/tests/coretests/AndroidManifest.xml
+++ b/core/tests/coretests/AndroidManifest.xml
@@ -1461,7 +1461,10 @@
<category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
</intent-filter>
</activity>
-
+ <activity android:name="android.window.WindowMetricsHelperTest$TestActivity"
+ android:resizeableActivity="true"
+ android:exported="true">
+ </activity>
</application>
<instrumentation android:name="androidx.test.runner.AndroidJUnitRunner"
diff --git a/core/tests/coretests/src/android/view/ScaleGestureDetectorTest.java b/core/tests/coretests/src/android/view/ScaleGestureDetectorTest.java
index 46e55fa..88ad279 100644
--- a/core/tests/coretests/src/android/view/ScaleGestureDetectorTest.java
+++ b/core/tests/coretests/src/android/view/ScaleGestureDetectorTest.java
@@ -24,6 +24,7 @@
import android.graphics.Rect;
import android.widget.TextView;
+import android.window.WindowMetricsHelper;
import androidx.test.filters.LargeTest;
import androidx.test.rule.ActivityTestRule;
@@ -55,7 +56,8 @@
// Specify start and end coordinates with respect to the window size.
final WindowManager wm = mScaleGestureActivity.getSystemService(WindowManager.class);
- final Rect windowBounds = wm.getCurrentWindowMetrics().getBounds();
+ final Rect windowBounds = WindowMetricsHelper.getBoundsExcludingNavigationBarAndCutout(
+ wm.getCurrentWindowMetrics());
final int windowWidth = windowBounds.width();
final int windowHeight = windowBounds.height();
diff --git a/core/tests/coretests/src/android/widget/focus/ListOfInternalSelectionViews.java b/core/tests/coretests/src/android/widget/focus/ListOfInternalSelectionViews.java
index d51cc32..c5e69b6 100644
--- a/core/tests/coretests/src/android/widget/focus/ListOfInternalSelectionViews.java
+++ b/core/tests/coretests/src/android/widget/focus/ListOfInternalSelectionViews.java
@@ -23,6 +23,7 @@
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
+import android.window.WindowMetricsHelper;
/**
* A list of {@link InternalSelectionView}s paramatarized by the number of items,
@@ -111,7 +112,8 @@
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
- mScreenHeight = getWindowManager().getCurrentWindowMetrics().getBounds().height();
+ mScreenHeight = WindowMetricsHelper.getBoundsExcludingNavigationBarAndCutout(
+ getWindowManager().getCurrentWindowMetrics()).height();
Bundle extras = getIntent().getExtras();
if (extras != null) {
diff --git a/core/tests/coretests/src/android/widget/gridview/touch/GridTouchVerticalSpacingStackFromBottomTest.java b/core/tests/coretests/src/android/widget/gridview/touch/GridTouchVerticalSpacingStackFromBottomTest.java
index 5cedd13..5261fc9 100644
--- a/core/tests/coretests/src/android/widget/gridview/touch/GridTouchVerticalSpacingStackFromBottomTest.java
+++ b/core/tests/coretests/src/android/widget/gridview/touch/GridTouchVerticalSpacingStackFromBottomTest.java
@@ -24,6 +24,7 @@
import android.view.ViewConfiguration;
import android.widget.GridView;
import android.widget.gridview.GridVerticalSpacingStackFromBottom;
+import android.window.WindowMetricsHelper;
import androidx.test.filters.LargeTest;
import androidx.test.filters.MediumTest;
@@ -106,8 +107,8 @@
int firstTop = firstChild.getTop();
- int windowHeight = mActivity.getWindowManager().getCurrentWindowMetrics().getBounds()
- .height();
+ int windowHeight = WindowMetricsHelper.getBoundsExcludingNavigationBarAndCutout(
+ mActivity.getWindowManager().getCurrentWindowMetrics()).height();
int distance = TouchUtils.dragViewBy(this, firstChild,
Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, (int) (windowHeight * 0.75f));
diff --git a/core/tests/coretests/src/android/widget/listview/AdjacentListsWithAdjacentISVsInside.java b/core/tests/coretests/src/android/widget/listview/AdjacentListsWithAdjacentISVsInside.java
index 5cca766..62b93d6 100644
--- a/core/tests/coretests/src/android/widget/listview/AdjacentListsWithAdjacentISVsInside.java
+++ b/core/tests/coretests/src/android/widget/listview/AdjacentListsWithAdjacentISVsInside.java
@@ -24,6 +24,7 @@
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.widget.ListView;
+import android.window.WindowMetricsHelper;
/**
* Most bodacious scenario yet!
@@ -65,8 +66,9 @@
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- final int desiredHeight =
- (int) (0.8 * getWindowManager().getCurrentWindowMetrics().getBounds().height());
+ final int desiredHeight = (int) (0.8 * WindowMetricsHelper
+ .getBoundsExcludingNavigationBarAndCutout(
+ getWindowManager().getCurrentWindowMetrics()).height());
mLeftListView = new ListView(this);
mLeftListView.setAdapter(new AdjacentISVAdapter(desiredHeight));
diff --git a/core/tests/coretests/src/android/window/WindowMetricsHelperTest.java b/core/tests/coretests/src/android/window/WindowMetricsHelperTest.java
new file mode 100644
index 0000000..921866b
--- /dev/null
+++ b/core/tests/coretests/src/android/window/WindowMetricsHelperTest.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.window;
+
+import static org.junit.Assert.assertEquals;
+
+import android.app.Activity;
+import android.graphics.Point;
+import android.graphics.Rect;
+import android.platform.test.annotations.Presubmit;
+import android.view.WindowMetrics;
+
+import androidx.test.filters.SmallTest;
+import androidx.test.rule.ActivityTestRule;
+import androidx.test.runner.AndroidJUnit4;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+/**
+ * Tests for {@link WindowMetricsHelper}
+ *
+ * <p>Build/Install/Run:
+ * atest FrameworksCoreTests:WindowMetricsHelperTest
+ *
+ * <p>This test class is a part of Window Manager Service tests and specified in
+ * {@link com.android.server.wm.test.filters.FrameworksTestsFilter}.
+ */
+@RunWith(AndroidJUnit4.class)
+@SmallTest
+@Presubmit
+public class WindowMetricsHelperTest {
+
+ @Rule
+ public ActivityTestRule<TestActivity> mActivityRule =
+ new ActivityTestRule<>(TestActivity.class);
+
+ @Test
+ public void testGetLegacySizeMatchesDisplayGetSize() throws Throwable {
+ mActivityRule.runOnUiThread(() -> {
+ Activity activity = mActivityRule.getActivity();
+ final WindowMetrics metrics = activity.getWindowManager().getCurrentWindowMetrics();
+ final Rect legacyBounds = WindowMetricsHelper
+ .getBoundsExcludingNavigationBarAndCutout(metrics);
+
+ final Point expectedSize = new Point();
+ activity.getDisplay().getSize(expectedSize);
+
+ assertEquals(expectedSize.x, legacyBounds.width());
+ assertEquals(expectedSize.y, legacyBounds.height());
+ });
+ }
+
+ public static class TestActivity extends Activity { }
+}
diff --git a/core/tests/coretests/src/com/android/internal/app/ResolverActivityTest.java b/core/tests/coretests/src/com/android/internal/app/ResolverActivityTest.java
index 0d52786..8bee1e5 100644
--- a/core/tests/coretests/src/com/android/internal/app/ResolverActivityTest.java
+++ b/core/tests/coretests/src/com/android/internal/app/ResolverActivityTest.java
@@ -43,6 +43,7 @@
import android.content.Intent;
import android.content.pm.ResolveInfo;
import android.net.Uri;
+import android.os.RemoteException;
import android.os.UserHandle;
import android.text.TextUtils;
import android.view.View;
@@ -827,6 +828,34 @@
assertThat(chosen[0], is(personalResolvedComponentInfos.get(1).getResolveInfoAt(0)));
}
+ @Test
+ public void testLayoutWithDefault_withWorkTab_neverShown() throws RemoteException {
+ // enable the work tab feature flag
+ ResolverActivity.ENABLE_TABBED_VIEW = true;
+ markWorkProfileUserAvailable();
+
+ // In this case we prefer the other profile and don't display anything about the last
+ // chosen activity.
+ Intent sendIntent = createSendImageIntent();
+ List<ResolvedComponentInfo> resolvedComponentInfos =
+ createResolvedComponentsForTest(2);
+
+ when(sOverrides.resolverListController.getResolversForIntent(Mockito.anyBoolean(),
+ Mockito.anyBoolean(),
+ Mockito.isA(List.class))).thenReturn(resolvedComponentInfos);
+ when(sOverrides.resolverListController.getLastChosen())
+ .thenReturn(resolvedComponentInfos.get(1).getResolveInfoAt(0));
+
+ final ResolverWrapperActivity activity = mActivityRule.launchActivity(sendIntent);
+ Espresso.registerIdlingResources(activity.getAdapter().getLabelIdlingResource());
+ waitForIdle();
+
+ // The other entry is filtered to the last used slot
+ assertThat(activity.getAdapter().hasFilteredItem(), is(false));
+ assertThat(activity.getAdapter().getCount(), is(2));
+ assertThat(activity.getAdapter().getPlaceholderCount(), is(2));
+ }
+
private Intent createSendImageIntent() {
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/helpers/CameraTestUtils.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/helpers/CameraTestUtils.java
index daeb731..0ae640d 100644
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/helpers/CameraTestUtils.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/helpers/CameraTestUtils.java
@@ -58,6 +58,7 @@
import android.util.Log;
import android.util.Pair;
import android.util.Size;
+import android.view.Display;
import android.view.Surface;
import android.view.WindowManager;
@@ -2210,14 +2211,14 @@
}
public static Size getPreviewSizeBound(WindowManager windowManager, Size bound) {
- Rect windowBounds = windowManager.getCurrentWindowMetrics().getBounds();
+ Display display = windowManager.getDefaultDisplay();
- int width = windowBounds.width();
- int height = windowBounds.height();
+ int width = display.getWidth();
+ int height = display.getHeight();
if (height > width) {
height = width;
- width = windowBounds.height();
+ width = display.getHeight();
}
if (bound.getWidth() <= width &&
diff --git a/packages/SettingsLib/RestrictedLockUtils/res/values-fa/strings.xml b/packages/SettingsLib/RestrictedLockUtils/res/values-fa/strings.xml
index aaf9116..9c39f98 100644
--- a/packages/SettingsLib/RestrictedLockUtils/res/values-fa/strings.xml
+++ b/packages/SettingsLib/RestrictedLockUtils/res/values-fa/strings.xml
@@ -17,6 +17,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="enabled_by_admin" msgid="6630472777476410137">"فعالشده توسط سرپرست"</string>
- <string name="disabled_by_admin" msgid="4023569940620832713">"غیرفعالشده توسط سرپرست"</string>
+ <string name="enabled_by_admin" msgid="6630472777476410137">"توسط سرپرست فعال شده"</string>
+ <string name="disabled_by_admin" msgid="4023569940620832713">"توسط سرپرست غیرفعال شده"</string>
</resources>
diff --git a/packages/SettingsLib/RestrictedLockUtils/res/values-or/strings.xml b/packages/SettingsLib/RestrictedLockUtils/res/values-or/strings.xml
index 1d23c31..4ce6460 100644
--- a/packages/SettingsLib/RestrictedLockUtils/res/values-or/strings.xml
+++ b/packages/SettingsLib/RestrictedLockUtils/res/values-or/strings.xml
@@ -18,5 +18,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="enabled_by_admin" msgid="6630472777476410137">"ଆଡମିନଙ୍କ ଦ୍ୱାରା ସକ୍ଷମ କରାଯାଇଛି"</string>
- <string name="disabled_by_admin" msgid="4023569940620832713">"ବ୍ୟବସ୍ଥାପକଙ୍କ ଦ୍ଵାରା ଅକ୍ଷମ କରାଯାଇଛି"</string>
+ <string name="disabled_by_admin" msgid="4023569940620832713">"ଆଡମିନଙ୍କ ଦ୍ଵାରା ଅକ୍ଷମ କରାଯାଇଛି"</string>
</resources>
diff --git a/packages/SettingsLib/RestrictedLockUtils/res/values-te/strings.xml b/packages/SettingsLib/RestrictedLockUtils/res/values-te/strings.xml
index 2da347c..8f17dc5 100644
--- a/packages/SettingsLib/RestrictedLockUtils/res/values-te/strings.xml
+++ b/packages/SettingsLib/RestrictedLockUtils/res/values-te/strings.xml
@@ -17,6 +17,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="enabled_by_admin" msgid="6630472777476410137">"నిర్వాహకులు ప్రారంభించారు"</string>
- <string name="disabled_by_admin" msgid="4023569940620832713">"నిర్వాహకులు నిలిపివేసారు"</string>
+ <string name="enabled_by_admin" msgid="6630472777476410137">"అడ్మిన్ ఎనేబుల్ చేశారు"</string>
+ <string name="disabled_by_admin" msgid="4023569940620832713">"అడ్మిన్ డిజేబుల్ చేశారు"</string>
</resources>
diff --git a/packages/SettingsLib/RestrictedLockUtils/res/values-vi/strings.xml b/packages/SettingsLib/RestrictedLockUtils/res/values-vi/strings.xml
index f664bb4..2c37652 100644
--- a/packages/SettingsLib/RestrictedLockUtils/res/values-vi/strings.xml
+++ b/packages/SettingsLib/RestrictedLockUtils/res/values-vi/strings.xml
@@ -18,5 +18,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="enabled_by_admin" msgid="6630472777476410137">"Do quản trị viên bật"</string>
- <string name="disabled_by_admin" msgid="4023569940620832713">"Bị quản trị viên tắt"</string>
+ <string name="disabled_by_admin" msgid="4023569940620832713">"Đã bị quản trị viên vô hiệu hóa"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-ar/strings.xml b/packages/SettingsLib/res/values-ar/strings.xml
index 60f4c6b..b3cc832 100644
--- a/packages/SettingsLib/res/values-ar/strings.xml
+++ b/packages/SettingsLib/res/values-ar/strings.xml
@@ -388,7 +388,7 @@
<string name="loading_injected_setting_summary" msgid="8394446285689070348">"جارٍ التحميل…"</string>
<string-array name="color_mode_names">
<item msgid="3836559907767149216">"نابض بالحياة (تلقائي)"</item>
- <item msgid="9112200311983078311">"طبيعي"</item>
+ <item msgid="9112200311983078311">"طبيعية"</item>
<item msgid="6564241960833766170">"عادي"</item>
</string-array>
<string-array name="color_mode_descriptions">
@@ -428,10 +428,10 @@
<string name="power_discharging_duration_enhanced" msgid="1800465736237672323">"يتبقى <xliff:g id="TIME_REMAINING">%1$s</xliff:g> تقريبًا، بناءً على استخدامك (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<!-- no translation found for power_remaining_duration_only_short (7438846066602840588) -->
<skip />
- <string name="power_discharge_by_enhanced" msgid="563438403581662942">"قد تكفي طاقة البطارية حتى حوالي الساعة <xliff:g id="TIME">%1$s</xliff:g> حسب استخدامك (<xliff:g id="LEVEL">%2$s</xliff:g>)."</string>
- <string name="power_discharge_by_only_enhanced" msgid="3268796172652988877">"قد تكفي طاقة البطارية حتى حوالي الساعة <xliff:g id="TIME">%1$s</xliff:g> حسب استخدامك."</string>
- <string name="power_discharge_by" msgid="4113180890060388350">"قد تكفي طاقة البطارية حتى حوالي الساعة <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)."</string>
- <string name="power_discharge_by_only" msgid="92545648425937000">"قد تكفي طاقة البطارية حتى حوالي الساعة <xliff:g id="TIME">%1$s</xliff:g>."</string>
+ <string name="power_discharge_by_enhanced" msgid="563438403581662942">"يُفترض أن تكفي طاقة البطارية حتى حوالي الساعة <xliff:g id="TIME">%1$s</xliff:g> حسب استخدامك (<xliff:g id="LEVEL">%2$s</xliff:g>)."</string>
+ <string name="power_discharge_by_only_enhanced" msgid="3268796172652988877">"يُفترض أن تكفي طاقة البطارية حتى حوالي الساعة <xliff:g id="TIME">%1$s</xliff:g> حسب استخدامك."</string>
+ <string name="power_discharge_by" msgid="4113180890060388350">"يُفترض أن تكفي طاقة البطارية حتى حوالي الساعة <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)."</string>
+ <string name="power_discharge_by_only" msgid="92545648425937000">"يُفترض أن تكفي طاقة البطارية حتى حوالي الساعة <xliff:g id="TIME">%1$s</xliff:g>."</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"حتى <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_suggestion_battery_run_out" msgid="6332089307827787087">"قد ينفد شحن البطارية قبل <xliff:g id="TIME">%1$s</xliff:g>."</string>
<string name="power_remaining_less_than_duration_only" msgid="8956656616031395152">"سيبقى شحن البطارية أقل من <xliff:g id="THRESHOLD">%1$s</xliff:g>."</string>
@@ -553,14 +553,10 @@
<string name="guest_new_guest" msgid="3482026122932643557">"إضافة ضيف"</string>
<string name="guest_exit_guest" msgid="5908239569510734136">"إزالة جلسة الضيف"</string>
<string name="guest_nickname" msgid="6332276931583337261">"ضيف"</string>
- <!-- no translation found for cached_apps_freezer_device_default (2616594131750144342) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_disabled (4816382260660472042) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_enabled (8866703500183051546) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_reboot_dialog_text (695330563489230096) -->
- <skip />
+ <string name="cached_apps_freezer_device_default" msgid="2616594131750144342">"الإعداد التلقائي للجهاز"</string>
+ <string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"غير مفعّل"</string>
+ <string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"مفعّل"</string>
+ <string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"يجب إعادة تشغيل جهازك ليتم تطبيق هذا التغيير. يمكنك إعادة التشغيل الآن أو إلغاء التغيير."</string>
<!-- no translation found for accessibility_work_profile_app_description (5470883112342119165) -->
<skip />
</resources>
diff --git a/packages/SettingsLib/res/values-az/strings.xml b/packages/SettingsLib/res/values-az/strings.xml
index 5bf468f..ab7ea8c 100644
--- a/packages/SettingsLib/res/values-az/strings.xml
+++ b/packages/SettingsLib/res/values-az/strings.xml
@@ -549,14 +549,10 @@
<string name="guest_new_guest" msgid="3482026122932643557">"Qonaq əlavə edin"</string>
<string name="guest_exit_guest" msgid="5908239569510734136">"Qonağı silin"</string>
<string name="guest_nickname" msgid="6332276931583337261">"Qonaq"</string>
- <!-- no translation found for cached_apps_freezer_device_default (2616594131750144342) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_disabled (4816382260660472042) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_enabled (8866703500183051546) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_reboot_dialog_text (695330563489230096) -->
- <skip />
+ <string name="cached_apps_freezer_device_default" msgid="2616594131750144342">"Cihaz defoltu"</string>
+ <string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Deaktiv"</string>
+ <string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Aktiv"</string>
+ <string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Bu dəyişikliyin tətbiq edilməsi üçün cihaz yenidən başladılmalıdır. İndi yenidən başladın və ya ləğv edin."</string>
<!-- no translation found for accessibility_work_profile_app_description (5470883112342119165) -->
<skip />
</resources>
diff --git a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml
index 85bb91c..da47bf2 100644
--- a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml
+++ b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml
@@ -550,14 +550,10 @@
<string name="guest_new_guest" msgid="3482026122932643557">"Dodaj gosta"</string>
<string name="guest_exit_guest" msgid="5908239569510734136">"Ukloni gosta"</string>
<string name="guest_nickname" msgid="6332276931583337261">"Gost"</string>
- <!-- no translation found for cached_apps_freezer_device_default (2616594131750144342) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_disabled (4816382260660472042) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_enabled (8866703500183051546) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_reboot_dialog_text (695330563489230096) -->
- <skip />
+ <string name="cached_apps_freezer_device_default" msgid="2616594131750144342">"Podrazumevano za uređaj"</string>
+ <string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Onemogućeno"</string>
+ <string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Omogućeno"</string>
+ <string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Morate da restartujete uređaj da bi se ova promena primenila. Restartujte ga odmah ili otkažite."</string>
<!-- no translation found for accessibility_work_profile_app_description (5470883112342119165) -->
<skip />
</resources>
diff --git a/packages/SettingsLib/res/values-be/strings.xml b/packages/SettingsLib/res/values-be/strings.xml
index 95e1bdb..2761d47 100644
--- a/packages/SettingsLib/res/values-be/strings.xml
+++ b/packages/SettingsLib/res/values-be/strings.xml
@@ -551,14 +551,10 @@
<string name="guest_new_guest" msgid="3482026122932643557">"Дадаць госця"</string>
<string name="guest_exit_guest" msgid="5908239569510734136">"Выдаліць госця"</string>
<string name="guest_nickname" msgid="6332276931583337261">"Госць"</string>
- <!-- no translation found for cached_apps_freezer_device_default (2616594131750144342) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_disabled (4816382260660472042) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_enabled (8866703500183051546) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_reboot_dialog_text (695330563489230096) -->
- <skip />
+ <string name="cached_apps_freezer_device_default" msgid="2616594131750144342">"Стандартная прылада"</string>
+ <string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Выключана"</string>
+ <string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Уключана"</string>
+ <string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Перазагрузіце прыладу, каб прымяніць гэта змяненне. Перазагрузіце ці скасуйце."</string>
<!-- no translation found for accessibility_work_profile_app_description (5470883112342119165) -->
<skip />
</resources>
diff --git a/packages/SettingsLib/res/values-bg/strings.xml b/packages/SettingsLib/res/values-bg/strings.xml
index e426625..8150710 100644
--- a/packages/SettingsLib/res/values-bg/strings.xml
+++ b/packages/SettingsLib/res/values-bg/strings.xml
@@ -549,14 +549,9 @@
<string name="guest_new_guest" msgid="3482026122932643557">"Добавяне на гост"</string>
<string name="guest_exit_guest" msgid="5908239569510734136">"Премахване на госта"</string>
<string name="guest_nickname" msgid="6332276931583337261">"Гост"</string>
- <!-- no translation found for cached_apps_freezer_device_default (2616594131750144342) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_disabled (4816382260660472042) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_enabled (8866703500183051546) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_reboot_dialog_text (695330563489230096) -->
- <skip />
- <!-- no translation found for accessibility_work_profile_app_description (5470883112342119165) -->
- <skip />
+ <string name="cached_apps_freezer_device_default" msgid="2616594131750144342">"Стандартна настройка за у-вото"</string>
+ <string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Деактивирано"</string>
+ <string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Активирано"</string>
+ <string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"За да бъде приложена тази промяна, устройството ви трябва да бъде рестартирано. Рестартирайте сега или анулирайте."</string>
+ <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"<xliff:g id="APP_NAME">%s</xliff:g> за работа"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-bs/strings.xml b/packages/SettingsLib/res/values-bs/strings.xml
index e965e5f..fe7f8c1 100644
--- a/packages/SettingsLib/res/values-bs/strings.xml
+++ b/packages/SettingsLib/res/values-bs/strings.xml
@@ -550,14 +550,9 @@
<string name="guest_new_guest" msgid="3482026122932643557">"Dodaj gosta"</string>
<string name="guest_exit_guest" msgid="5908239569510734136">"Ukloni gosta"</string>
<string name="guest_nickname" msgid="6332276931583337261">"Gost"</string>
- <!-- no translation found for cached_apps_freezer_device_default (2616594131750144342) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_disabled (4816382260660472042) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_enabled (8866703500183051546) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_reboot_dialog_text (695330563489230096) -->
- <skip />
- <!-- no translation found for accessibility_work_profile_app_description (5470883112342119165) -->
- <skip />
+ <string name="cached_apps_freezer_device_default" msgid="2616594131750144342">"Zadana postavka uređaja"</string>
+ <string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Onemogućeno"</string>
+ <string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Omogućeno"</string>
+ <string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Morate ponovo pokrenuti uređaj da se ova promjena primijeni. Ponovo pokrenite odmah ili otkažite."</string>
+ <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"<xliff:g id="APP_NAME">%s</xliff:g> za posao"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-ca/strings.xml b/packages/SettingsLib/res/values-ca/strings.xml
index 2378d3a..7dad950 100644
--- a/packages/SettingsLib/res/values-ca/strings.xml
+++ b/packages/SettingsLib/res/values-ca/strings.xml
@@ -549,14 +549,10 @@
<string name="guest_new_guest" msgid="3482026122932643557">"Afegeix un convidat"</string>
<string name="guest_exit_guest" msgid="5908239569510734136">"Suprimeix el convidat"</string>
<string name="guest_nickname" msgid="6332276931583337261">"Convidat"</string>
- <!-- no translation found for cached_apps_freezer_device_default (2616594131750144342) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_disabled (4816382260660472042) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_enabled (8866703500183051546) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_reboot_dialog_text (695330563489230096) -->
- <skip />
+ <string name="cached_apps_freezer_device_default" msgid="2616594131750144342">"Opció predeter. del dispositiu"</string>
+ <string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Desactivat"</string>
+ <string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Activat"</string>
+ <string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Has de reiniciar el teu dispositiu perquè s\'apliquin els canvis. Reinicia\'l ara o cancel·la."</string>
<!-- no translation found for accessibility_work_profile_app_description (5470883112342119165) -->
<skip />
</resources>
diff --git a/packages/SettingsLib/res/values-cs/strings.xml b/packages/SettingsLib/res/values-cs/strings.xml
index aa78612..51548f5 100644
--- a/packages/SettingsLib/res/values-cs/strings.xml
+++ b/packages/SettingsLib/res/values-cs/strings.xml
@@ -551,14 +551,10 @@
<string name="guest_new_guest" msgid="3482026122932643557">"Přidat hosta"</string>
<string name="guest_exit_guest" msgid="5908239569510734136">"Odstranit hosta"</string>
<string name="guest_nickname" msgid="6332276931583337261">"Host"</string>
- <!-- no translation found for cached_apps_freezer_device_default (2616594131750144342) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_disabled (4816382260660472042) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_enabled (8866703500183051546) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_reboot_dialog_text (695330563489230096) -->
- <skip />
+ <string name="cached_apps_freezer_device_default" msgid="2616594131750144342">"Výchozí nastavení zařízení"</string>
+ <string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Vypnuto"</string>
+ <string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Zapnuto"</string>
+ <string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Aby se tato změna projevila, je třeba zařízení restartovat. Restartujte zařízení nebo zrušte akci."</string>
<!-- no translation found for accessibility_work_profile_app_description (5470883112342119165) -->
<skip />
</resources>
diff --git a/packages/SettingsLib/res/values-da/strings.xml b/packages/SettingsLib/res/values-da/strings.xml
index 366bae3..88f8e92 100644
--- a/packages/SettingsLib/res/values-da/strings.xml
+++ b/packages/SettingsLib/res/values-da/strings.xml
@@ -549,14 +549,10 @@
<string name="guest_new_guest" msgid="3482026122932643557">"Tilføj gæsten"</string>
<string name="guest_exit_guest" msgid="5908239569510734136">"Fjern gæsten"</string>
<string name="guest_nickname" msgid="6332276931583337261">"Gæst"</string>
- <!-- no translation found for cached_apps_freezer_device_default (2616594131750144342) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_disabled (4816382260660472042) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_enabled (8866703500183051546) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_reboot_dialog_text (695330563489230096) -->
- <skip />
+ <string name="cached_apps_freezer_device_default" msgid="2616594131750144342">"Enhedens standardindstilling"</string>
+ <string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Deaktiveret"</string>
+ <string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Aktiveret"</string>
+ <string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Din enhed skal genstartes for at denne enhed bliver anvendt. Genstart nu, eller annuller."</string>
<!-- no translation found for accessibility_work_profile_app_description (5470883112342119165) -->
<skip />
</resources>
diff --git a/packages/SettingsLib/res/values-de/strings.xml b/packages/SettingsLib/res/values-de/strings.xml
index 74f59e2..edd1580 100644
--- a/packages/SettingsLib/res/values-de/strings.xml
+++ b/packages/SettingsLib/res/values-de/strings.xml
@@ -549,14 +549,10 @@
<string name="guest_new_guest" msgid="3482026122932643557">"Gast hinzufügen"</string>
<string name="guest_exit_guest" msgid="5908239569510734136">"Gast entfernen"</string>
<string name="guest_nickname" msgid="6332276931583337261">"Gast"</string>
- <!-- no translation found for cached_apps_freezer_device_default (2616594131750144342) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_disabled (4816382260660472042) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_enabled (8866703500183051546) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_reboot_dialog_text (695330563489230096) -->
- <skip />
+ <string name="cached_apps_freezer_device_default" msgid="2616594131750144342">"Gerätestandard"</string>
+ <string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Deaktiviert"</string>
+ <string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Aktiviert"</string>
+ <string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Damit diese Änderung übernommen wird, musst du dein Gerät neu starten. Du kannst es jetzt neu starten oder den Vorgang abbrechen."</string>
<!-- no translation found for accessibility_work_profile_app_description (5470883112342119165) -->
<skip />
</resources>
diff --git a/packages/SettingsLib/res/values-el/strings.xml b/packages/SettingsLib/res/values-el/strings.xml
index c2502ef..c5c0e07 100644
--- a/packages/SettingsLib/res/values-el/strings.xml
+++ b/packages/SettingsLib/res/values-el/strings.xml
@@ -143,9 +143,9 @@
<string name="data_usage_uninstalled_apps" msgid="1933665711856171491">"Εφαρμογές που καταργήθηκαν"</string>
<string name="data_usage_uninstalled_apps_users" msgid="5533981546921913295">"Εφαρμογές και χρήστες που έχουν καταργηθεί"</string>
<string name="data_usage_ota" msgid="7984667793701597001">"Ενημερώσεις συστήματος"</string>
- <string name="tether_settings_title_usb" msgid="3728686573430917722">"Πρόσδεση USB"</string>
+ <string name="tether_settings_title_usb" msgid="3728686573430917722">"Σύνδεση με USB"</string>
<string name="tether_settings_title_wifi" msgid="4803402057533895526">"Φορητό σημείο πρόσβασης"</string>
- <string name="tether_settings_title_bluetooth" msgid="916519902721399656">"Πρόσδεση Bluetooth"</string>
+ <string name="tether_settings_title_bluetooth" msgid="916519902721399656">"Σύνδεση με Bluetooth"</string>
<string name="tether_settings_title_usb_bluetooth" msgid="1727111807207577322">"Πρόσδεση"</string>
<string name="tether_settings_title_all" msgid="8910259483383010470">"Πρόσ. και φορητό σημ. πρόσβ."</string>
<string name="managed_user_title" msgid="449081789742645723">"Όλες οι εφαρμ. εργασίας"</string>
@@ -549,14 +549,9 @@
<string name="guest_new_guest" msgid="3482026122932643557">"Προσθήκη επισκέπτη"</string>
<string name="guest_exit_guest" msgid="5908239569510734136">"Κατάργηση επισκέπτη"</string>
<string name="guest_nickname" msgid="6332276931583337261">"Επισκέπτης"</string>
- <!-- no translation found for cached_apps_freezer_device_default (2616594131750144342) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_disabled (4816382260660472042) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_enabled (8866703500183051546) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_reboot_dialog_text (695330563489230096) -->
- <skip />
- <!-- no translation found for accessibility_work_profile_app_description (5470883112342119165) -->
- <skip />
+ <string name="cached_apps_freezer_device_default" msgid="2616594131750144342">"Προεπιλογή συσκευής"</string>
+ <string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Ανενεργή"</string>
+ <string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Ενεργή"</string>
+ <string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Για να εφαρμοστεί αυτή η αλλαγή, θα πρέπει να επανεκκινήσετε τη συσκευή σας. Επανεκκίνηση τώρα ή ακύρωση."</string>
+ <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"Εργασία <xliff:g id="APP_NAME">%s</xliff:g>"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-en-rAU/strings.xml b/packages/SettingsLib/res/values-en-rAU/strings.xml
index 5fa9d45..a1c8b04 100644
--- a/packages/SettingsLib/res/values-en-rAU/strings.xml
+++ b/packages/SettingsLib/res/values-en-rAU/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Disabled"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Enabled"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Your device must be rebooted for this change to apply. Reboot now or cancel."</string>
- <!-- no translation found for accessibility_work_profile_app_description (5470883112342119165) -->
- <skip />
+ <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"Work <xliff:g id="APP_NAME">%s</xliff:g>"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-en-rCA/strings.xml b/packages/SettingsLib/res/values-en-rCA/strings.xml
index 5fa9d45..a1c8b04 100644
--- a/packages/SettingsLib/res/values-en-rCA/strings.xml
+++ b/packages/SettingsLib/res/values-en-rCA/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Disabled"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Enabled"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Your device must be rebooted for this change to apply. Reboot now or cancel."</string>
- <!-- no translation found for accessibility_work_profile_app_description (5470883112342119165) -->
- <skip />
+ <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"Work <xliff:g id="APP_NAME">%s</xliff:g>"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-en-rGB/strings.xml b/packages/SettingsLib/res/values-en-rGB/strings.xml
index 5fa9d45..a1c8b04 100644
--- a/packages/SettingsLib/res/values-en-rGB/strings.xml
+++ b/packages/SettingsLib/res/values-en-rGB/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Disabled"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Enabled"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Your device must be rebooted for this change to apply. Reboot now or cancel."</string>
- <!-- no translation found for accessibility_work_profile_app_description (5470883112342119165) -->
- <skip />
+ <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"Work <xliff:g id="APP_NAME">%s</xliff:g>"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-en-rIN/strings.xml b/packages/SettingsLib/res/values-en-rIN/strings.xml
index 5fa9d45..a1c8b04 100644
--- a/packages/SettingsLib/res/values-en-rIN/strings.xml
+++ b/packages/SettingsLib/res/values-en-rIN/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Disabled"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Enabled"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Your device must be rebooted for this change to apply. Reboot now or cancel."</string>
- <!-- no translation found for accessibility_work_profile_app_description (5470883112342119165) -->
- <skip />
+ <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"Work <xliff:g id="APP_NAME">%s</xliff:g>"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-en-rXC/strings.xml b/packages/SettingsLib/res/values-en-rXC/strings.xml
index 1cd2d84..38ac8f1 100644
--- a/packages/SettingsLib/res/values-en-rXC/strings.xml
+++ b/packages/SettingsLib/res/values-en-rXC/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Disabled"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Enabled"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Your device must be rebooted for this change to apply. Reboot now or cancel."</string>
- <!-- no translation found for accessibility_work_profile_app_description (5470883112342119165) -->
- <skip />
+ <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"Work <xliff:g id="APP_NAME">%s</xliff:g>"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-es-rUS/strings.xml b/packages/SettingsLib/res/values-es-rUS/strings.xml
index 025cfc4..c6d0d56 100644
--- a/packages/SettingsLib/res/values-es-rUS/strings.xml
+++ b/packages/SettingsLib/res/values-es-rUS/strings.xml
@@ -549,14 +549,10 @@
<string name="guest_new_guest" msgid="3482026122932643557">"Agregar invitado"</string>
<string name="guest_exit_guest" msgid="5908239569510734136">"Quitar invitado"</string>
<string name="guest_nickname" msgid="6332276931583337261">"Invitado"</string>
- <!-- no translation found for cached_apps_freezer_device_default (2616594131750144342) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_disabled (4816382260660472042) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_enabled (8866703500183051546) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_reboot_dialog_text (695330563489230096) -->
- <skip />
+ <string name="cached_apps_freezer_device_default" msgid="2616594131750144342">"Predeterminado del dispositivo"</string>
+ <string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Inhabilitado"</string>
+ <string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Habilitado"</string>
+ <string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Debes reiniciar el dispositivo para que se aplique el cambio. Reinícialo ahora o cancela la acción."</string>
<!-- no translation found for accessibility_work_profile_app_description (5470883112342119165) -->
<skip />
</resources>
diff --git a/packages/SettingsLib/res/values-es/strings.xml b/packages/SettingsLib/res/values-es/strings.xml
index 03b0495..55b5cab 100644
--- a/packages/SettingsLib/res/values-es/strings.xml
+++ b/packages/SettingsLib/res/values-es/strings.xml
@@ -223,9 +223,9 @@
<string name="adb_wireless_connection_failed_title" msgid="664211177427438438">"No se ha podido conectar"</string>
<string name="adb_wireless_connection_failed_message" msgid="9213896700171602073">"Comprueba que has conectado <xliff:g id="DEVICE_NAME">%1$s</xliff:g> a la red correcta"</string>
<string name="adb_pairing_device_dialog_title" msgid="7141739231018530210">"Vincular con dispositivo"</string>
- <string name="adb_pairing_device_dialog_pairing_code_label" msgid="3639239786669722731">"Código de sincronización de Wi‑Fi"</string>
+ <string name="adb_pairing_device_dialog_pairing_code_label" msgid="3639239786669722731">"Código de vinculación de Wi‑Fi"</string>
<string name="adb_pairing_device_dialog_failed_title" msgid="3426758947882091735">"No se ha podido vincular"</string>
- <string name="adb_pairing_device_dialog_failed_msg" msgid="6611097519661997148">"Comprueba que el dispositivo está conectado a la misma red."</string>
+ <string name="adb_pairing_device_dialog_failed_msg" msgid="6611097519661997148">"Asegúrate de que el dispositivo esté conectado a la misma red."</string>
<string name="adb_wireless_qrcode_summary" msgid="8051414549011801917">"Vincula un dispositivo mediante Wi‑Fi con un código QR"</string>
<string name="adb_wireless_verifying_qrcode_text" msgid="6123192424916029207">"Vinculando dispositivo…"</string>
<string name="adb_qrcode_pairing_device_failed_msg" msgid="6936292092592914132">"No se ha podido vincular el dispositivo. El código QR no era correcto o el dispositivo no estaba conectado a la misma red."</string>
@@ -234,7 +234,7 @@
<string name="adb_wireless_qrcode_pairing_description" msgid="6014121407143607851">"Vincula un dispositivo mediante Wi‑Fi escaneando un código QR"</string>
<string name="adb_wireless_no_network_msg" msgid="2365795244718494658">"Conéctate a una red Wi-Fi"</string>
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, depuración, desarrollo"</string>
- <string name="bugreport_in_power" msgid="8664089072534638709">"Atajo a informe de errores"</string>
+ <string name="bugreport_in_power" msgid="8664089072534638709">"Acceso directo a informe de errores"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"Mostrar un botón en el menú de encendido para crear un informe de errores"</string>
<string name="keep_screen_on" msgid="1187161672348797558">"Pantalla siempre encendida al cargar"</string>
<string name="keep_screen_on_summary" msgid="1510731514101925829">"La pantalla nunca entra en modo de suspensión si el dispositivo se está cargando"</string>
@@ -549,14 +549,10 @@
<string name="guest_new_guest" msgid="3482026122932643557">"Añadir invitado"</string>
<string name="guest_exit_guest" msgid="5908239569510734136">"Quitar invitado"</string>
<string name="guest_nickname" msgid="6332276931583337261">"Invitado"</string>
- <!-- no translation found for cached_apps_freezer_device_default (2616594131750144342) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_disabled (4816382260660472042) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_enabled (8866703500183051546) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_reboot_dialog_text (695330563489230096) -->
- <skip />
+ <string name="cached_apps_freezer_device_default" msgid="2616594131750144342">"Predeterm. en el dispositivo"</string>
+ <string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Inhabilitado"</string>
+ <string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Habilitado"</string>
+ <string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Es necesario reiniciar tu dispositivo para que se apliquen los cambios. Reiniciar ahora o cancelar."</string>
<!-- no translation found for accessibility_work_profile_app_description (5470883112342119165) -->
<skip />
</resources>
diff --git a/packages/SettingsLib/res/values-et/strings.xml b/packages/SettingsLib/res/values-et/strings.xml
index 4857b1e..5a11590 100644
--- a/packages/SettingsLib/res/values-et/strings.xml
+++ b/packages/SettingsLib/res/values-et/strings.xml
@@ -549,14 +549,10 @@
<string name="guest_new_guest" msgid="3482026122932643557">"Lisa külaline"</string>
<string name="guest_exit_guest" msgid="5908239569510734136">"Eemalda külaline"</string>
<string name="guest_nickname" msgid="6332276931583337261">"Külaline"</string>
- <!-- no translation found for cached_apps_freezer_device_default (2616594131750144342) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_disabled (4816382260660472042) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_enabled (8866703500183051546) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_reboot_dialog_text (695330563489230096) -->
- <skip />
+ <string name="cached_apps_freezer_device_default" msgid="2616594131750144342">"Seadme vaikeseade"</string>
+ <string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Keelatud"</string>
+ <string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Lubatud"</string>
+ <string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Selle muudatuse rakendamiseks tuleb seade taaskäivitada. Taaskäivitage kohe või tühistage."</string>
<!-- no translation found for accessibility_work_profile_app_description (5470883112342119165) -->
<skip />
</resources>
diff --git a/packages/SettingsLib/res/values-eu/strings.xml b/packages/SettingsLib/res/values-eu/strings.xml
index 4d79747..1aed7e8 100644
--- a/packages/SettingsLib/res/values-eu/strings.xml
+++ b/packages/SettingsLib/res/values-eu/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Desgaituta"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Gaituta"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Aldaketa aplikatzeko, berrabiarazi egin behar da gailua. Berrabiaraz ezazu orain, edo utzi bertan behera."</string>
- <!-- no translation found for accessibility_work_profile_app_description (5470883112342119165) -->
- <skip />
+ <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"Laneko <xliff:g id="APP_NAME">%s</xliff:g>"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-fa/strings.xml b/packages/SettingsLib/res/values-fa/strings.xml
index d176114..a46d8cd 100644
--- a/packages/SettingsLib/res/values-fa/strings.xml
+++ b/packages/SettingsLib/res/values-fa/strings.xml
@@ -195,7 +195,7 @@
</string-array>
<string name="choose_profile" msgid="343803890897657450">"انتخاب نمایه"</string>
<string name="category_personal" msgid="6236798763159385225">"شخصی"</string>
- <string name="category_work" msgid="4014193632325996115">"محل کار"</string>
+ <string name="category_work" msgid="4014193632325996115">"کاری"</string>
<string name="development_settings_title" msgid="140296922921597393">"گزینههای برنامهنویسان"</string>
<string name="development_settings_enable" msgid="4285094651288242183">"فعال کردن گزینههای برنامهنویس"</string>
<string name="development_settings_summary" msgid="8718917813868735095">"تنظیم گزینههای مربوط به طراحی برنامه"</string>
@@ -253,7 +253,7 @@
<string name="wifi_scan_throttling" msgid="2985624788509913617">"محدود کردن اسکن کردن Wi‑Fi"</string>
<string name="wifi_enhanced_mac_randomization" msgid="5437378364995776979">"تصادفیسازی MAC بهبودیافته برای Wi-Fi"</string>
<string name="mobile_data_always_on" msgid="8275958101875563572">"داده تلفن همراه همیشه فعال باشد"</string>
- <string name="tethering_hardware_offload" msgid="4116053719006939161">"شتاب سختافزاری اتصال به اینترنت با تلفن همراه"</string>
+ <string name="tethering_hardware_offload" msgid="4116053719006939161">"شتاب سختافزاری اشتراکگذاری اینترنت"</string>
<string name="bluetooth_show_devices_without_names" msgid="923584526471885819">"نمایش دستگاههای بلوتوث بدون نام"</string>
<string name="bluetooth_disable_absolute_volume" msgid="1452342324349203434">"غیرفعال کردن میزان صدای مطلق"</string>
<string name="bluetooth_enable_gabeldorsche" msgid="9131730396242883416">"فعال کردن Gabeldorsche"</string>
@@ -486,7 +486,7 @@
<string name="ims_reg_status_registered" msgid="884916398194885457">"ثبتشده"</string>
<string name="ims_reg_status_not_registered" msgid="2989287366045704694">"ثبت نشده است"</string>
<string name="status_unavailable" msgid="5279036186589861608">"در دسترس نیست"</string>
- <string name="wifi_status_mac_randomized" msgid="466382542497832189">"ویژگی تصادفیسازی MAC فعال است"</string>
+ <string name="wifi_status_mac_randomized" msgid="466382542497832189">"ویژگی MAC تصادفی است"</string>
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="6317236306047306139">
<item quantity="one">%1$d دستگاه متصل</item>
<item quantity="other">%1$d دستگاه متصل</item>
diff --git a/packages/SettingsLib/res/values-fi/strings.xml b/packages/SettingsLib/res/values-fi/strings.xml
index db5e957..8e82cb2 100644
--- a/packages/SettingsLib/res/values-fi/strings.xml
+++ b/packages/SettingsLib/res/values-fi/strings.xml
@@ -549,14 +549,10 @@
<string name="guest_new_guest" msgid="3482026122932643557">"Lisää vieras"</string>
<string name="guest_exit_guest" msgid="5908239569510734136">"Poista vieras"</string>
<string name="guest_nickname" msgid="6332276931583337261">"Vieras"</string>
- <!-- no translation found for cached_apps_freezer_device_default (2616594131750144342) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_disabled (4816382260660472042) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_enabled (8866703500183051546) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_reboot_dialog_text (695330563489230096) -->
- <skip />
+ <string name="cached_apps_freezer_device_default" msgid="2616594131750144342">"Laitteen oletusasetus"</string>
+ <string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Ei käytössä"</string>
+ <string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Käytössä"</string>
+ <string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Laitteesi on käynnistettävä uudelleen, jotta muutos tulee voimaan. Käynnistä uudelleen nyt tai peruuta."</string>
<!-- no translation found for accessibility_work_profile_app_description (5470883112342119165) -->
<skip />
</resources>
diff --git a/packages/SettingsLib/res/values-fr-rCA/strings.xml b/packages/SettingsLib/res/values-fr-rCA/strings.xml
index b8ff6598..a144444 100644
--- a/packages/SettingsLib/res/values-fr-rCA/strings.xml
+++ b/packages/SettingsLib/res/values-fr-rCA/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Désactivé"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Activé"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Votre appareil doit être redémarré pour que ce changement prenne effet. Redémarrez-le maintenant ou annulez la modification."</string>
- <!-- no translation found for accessibility_work_profile_app_description (5470883112342119165) -->
- <skip />
+ <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"<xliff:g id="APP_NAME">%s</xliff:g> (travail)"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-fr/strings.xml b/packages/SettingsLib/res/values-fr/strings.xml
index 064e59f..f7bfad8 100644
--- a/packages/SettingsLib/res/values-fr/strings.xml
+++ b/packages/SettingsLib/res/values-fr/strings.xml
@@ -549,14 +549,10 @@
<string name="guest_new_guest" msgid="3482026122932643557">"Ajouter un invité"</string>
<string name="guest_exit_guest" msgid="5908239569510734136">"Supprimer l\'invité"</string>
<string name="guest_nickname" msgid="6332276931583337261">"Invité"</string>
- <!-- no translation found for cached_apps_freezer_device_default (2616594131750144342) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_disabled (4816382260660472042) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_enabled (8866703500183051546) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_reboot_dialog_text (695330563489230096) -->
- <skip />
+ <string name="cached_apps_freezer_device_default" msgid="2616594131750144342">"Appareil par défaut"</string>
+ <string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Désactivé"</string>
+ <string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Activé"</string>
+ <string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Vous devez redémarrer l\'appareil pour que cette modification soit appliquée. Redémarrez maintenant ou annulez l\'opération."</string>
<!-- no translation found for accessibility_work_profile_app_description (5470883112342119165) -->
<skip />
</resources>
diff --git a/packages/SettingsLib/res/values-gl/strings.xml b/packages/SettingsLib/res/values-gl/strings.xml
index 8bb04f3..08d2eae 100644
--- a/packages/SettingsLib/res/values-gl/strings.xml
+++ b/packages/SettingsLib/res/values-gl/strings.xml
@@ -549,14 +549,10 @@
<string name="guest_new_guest" msgid="3482026122932643557">"Engadir convidado"</string>
<string name="guest_exit_guest" msgid="5908239569510734136">"Quitar convidado"</string>
<string name="guest_nickname" msgid="6332276931583337261">"Convidado"</string>
- <!-- no translation found for cached_apps_freezer_device_default (2616594131750144342) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_disabled (4816382260660472042) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_enabled (8866703500183051546) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_reboot_dialog_text (695330563489230096) -->
- <skip />
+ <string name="cached_apps_freezer_device_default" msgid="2616594131750144342">"Funcionamento predeterminado"</string>
+ <string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Desactivado"</string>
+ <string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Activado"</string>
+ <string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"É necesario reiniciar o teu dispositivo para aplicar este cambio. Reiníciao agora ou cancela o cambio."</string>
<!-- no translation found for accessibility_work_profile_app_description (5470883112342119165) -->
<skip />
</resources>
diff --git a/packages/SettingsLib/res/values-hi/strings.xml b/packages/SettingsLib/res/values-hi/strings.xml
index d8aa092..7dda73d 100644
--- a/packages/SettingsLib/res/values-hi/strings.xml
+++ b/packages/SettingsLib/res/values-hi/strings.xml
@@ -549,14 +549,10 @@
<string name="guest_new_guest" msgid="3482026122932643557">"मेहमान जोड़ें"</string>
<string name="guest_exit_guest" msgid="5908239569510734136">"मेहमान हटाएं"</string>
<string name="guest_nickname" msgid="6332276931583337261">"मेहमान"</string>
- <!-- no translation found for cached_apps_freezer_device_default (2616594131750144342) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_disabled (4816382260660472042) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_enabled (8866703500183051546) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_reboot_dialog_text (695330563489230096) -->
- <skip />
+ <string name="cached_apps_freezer_device_default" msgid="2616594131750144342">"डिवाइस की डिफ़ॉल्ट सेटिंग"</string>
+ <string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"बंद है"</string>
+ <string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"चालू है"</string>
+ <string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"बदली गई सेटिंग को लागू करने के लिए, अपने डिवाइस को फिर से चालू करें. डिवाइस को फिर से चालू करें या रद्द करें."</string>
<!-- no translation found for accessibility_work_profile_app_description (5470883112342119165) -->
<skip />
</resources>
diff --git a/packages/SettingsLib/res/values-hr/strings.xml b/packages/SettingsLib/res/values-hr/strings.xml
index 548fc20..1db40a8 100644
--- a/packages/SettingsLib/res/values-hr/strings.xml
+++ b/packages/SettingsLib/res/values-hr/strings.xml
@@ -550,14 +550,9 @@
<string name="guest_new_guest" msgid="3482026122932643557">"Dodavanje gosta"</string>
<string name="guest_exit_guest" msgid="5908239569510734136">"Uklanjanje gosta"</string>
<string name="guest_nickname" msgid="6332276931583337261">"Gost"</string>
- <!-- no translation found for cached_apps_freezer_device_default (2616594131750144342) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_disabled (4816382260660472042) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_enabled (8866703500183051546) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_reboot_dialog_text (695330563489230096) -->
- <skip />
- <!-- no translation found for accessibility_work_profile_app_description (5470883112342119165) -->
- <skip />
+ <string name="cached_apps_freezer_device_default" msgid="2616594131750144342">"Zadana postavka uređaja"</string>
+ <string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Onemogućeno"</string>
+ <string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Omogućeno"</string>
+ <string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Uređaj se mora ponovno pokrenuti da bi se ta promjena primijenila. Ponovo pokrenite uređaj odmah ili odustanite."</string>
+ <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"<xliff:g id="APP_NAME">%s</xliff:g> za posao"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-hu/strings.xml b/packages/SettingsLib/res/values-hu/strings.xml
index 9e51cfd..4b2132b 100644
--- a/packages/SettingsLib/res/values-hu/strings.xml
+++ b/packages/SettingsLib/res/values-hu/strings.xml
@@ -549,14 +549,10 @@
<string name="guest_new_guest" msgid="3482026122932643557">"Vendég hozzáadása"</string>
<string name="guest_exit_guest" msgid="5908239569510734136">"Vendég munkamenet eltávolítása"</string>
<string name="guest_nickname" msgid="6332276931583337261">"Vendég"</string>
- <!-- no translation found for cached_apps_freezer_device_default (2616594131750144342) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_disabled (4816382260660472042) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_enabled (8866703500183051546) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_reboot_dialog_text (695330563489230096) -->
- <skip />
+ <string name="cached_apps_freezer_device_default" msgid="2616594131750144342">"Alapértelmezett"</string>
+ <string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Letiltva"</string>
+ <string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Engedélyezve"</string>
+ <string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Az eszközt újra kell indítani, hogy a módosítás megtörténjen. Indítsa újra most, vagy vesse el a módosítást."</string>
<!-- no translation found for accessibility_work_profile_app_description (5470883112342119165) -->
<skip />
</resources>
diff --git a/packages/SettingsLib/res/values-hy/strings.xml b/packages/SettingsLib/res/values-hy/strings.xml
index 52e9175..11da054 100644
--- a/packages/SettingsLib/res/values-hy/strings.xml
+++ b/packages/SettingsLib/res/values-hy/strings.xml
@@ -38,7 +38,7 @@
<string name="saved_network" msgid="7143698034077223645">"Ով է պահել՝ <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"Ավտոմատ կերպով կապակցվել է %1$s-ի միջոցով"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"Ավտոմատ կերպով միացել է ցանցի վարկանիշի ծառայության մատակարարի միջոցով"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"Կապակցված է %1$s-ի միջոցով"</string>
+ <string name="connected_via_passpoint" msgid="7735442932429075684">"Միացված է %1$s-ի միջոցով"</string>
<string name="connected_via_app" msgid="3532267661404276584">"Միացված է <xliff:g id="NAME">%1$s</xliff:g>-ի միջոցով"</string>
<string name="available_via_passpoint" msgid="1716000261192603682">"Հասանելի է %1$s-ի միջոցով"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"Հպեք՝ գրանցվելու համար"</string>
@@ -99,7 +99,7 @@
<string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"Միացված է հեռախոսի ձայնային տվյալներին"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2393521801478157362">"Միացված է ֆայլերի փոխանցման սերվերին"</string>
<string name="bluetooth_map_profile_summary_connected" msgid="4141725591784669181">"Միացված է քարտեզին"</string>
- <string name="bluetooth_sap_profile_summary_connected" msgid="1280297388033001037">"Կապակցված է SAP-ին"</string>
+ <string name="bluetooth_sap_profile_summary_connected" msgid="1280297388033001037">"Միացված է SAP-ին"</string>
<string name="bluetooth_opp_profile_summary_not_connected" msgid="3959741824627764954">"Ֆայլերը փոխանցող սերվերի հետ կապ չկա"</string>
<string name="bluetooth_hid_profile_summary_connected" msgid="3923653977051684833">"Միացված է մուտքային սարքին"</string>
<string name="bluetooth_pan_user_profile_summary_connected" msgid="380469653827505727">"Միացված է սարքին` ինտերնետ մտնելու համար"</string>
@@ -549,14 +549,10 @@
<string name="guest_new_guest" msgid="3482026122932643557">"Ավելացնել հյուր"</string>
<string name="guest_exit_guest" msgid="5908239569510734136">"Հեռացնել հյուրին"</string>
<string name="guest_nickname" msgid="6332276931583337261">"Հյուր"</string>
- <!-- no translation found for cached_apps_freezer_device_default (2616594131750144342) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_disabled (4816382260660472042) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_enabled (8866703500183051546) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_reboot_dialog_text (695330563489230096) -->
- <skip />
+ <string name="cached_apps_freezer_device_default" msgid="2616594131750144342">"Կանխադրված տարբերակ"</string>
+ <string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Անջատված է"</string>
+ <string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Միացված է"</string>
+ <string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Սարքն անհրաժեշտ է վերագործարկել, որպեսզի փոփոխությունը կիրառվի։ Վերագործարկեք հիմա կամ չեղարկեք փոփոխությունը։"</string>
<!-- no translation found for accessibility_work_profile_app_description (5470883112342119165) -->
<skip />
</resources>
diff --git a/packages/SettingsLib/res/values-in/strings.xml b/packages/SettingsLib/res/values-in/strings.xml
index 561b7c4..3b02fbf 100644
--- a/packages/SettingsLib/res/values-in/strings.xml
+++ b/packages/SettingsLib/res/values-in/strings.xml
@@ -549,14 +549,10 @@
<string name="guest_new_guest" msgid="3482026122932643557">"Tambahkan tamu"</string>
<string name="guest_exit_guest" msgid="5908239569510734136">"Hapus tamu"</string>
<string name="guest_nickname" msgid="6332276931583337261">"Tamu"</string>
- <!-- no translation found for cached_apps_freezer_device_default (2616594131750144342) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_disabled (4816382260660472042) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_enabled (8866703500183051546) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_reboot_dialog_text (695330563489230096) -->
- <skip />
+ <string name="cached_apps_freezer_device_default" msgid="2616594131750144342">"Default perangkat"</string>
+ <string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Nonaktif"</string>
+ <string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Aktif"</string>
+ <string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Perangkat Anda harus di-reboot agar perubahan ini diterapkan. Reboot sekarang atau batalkan."</string>
<!-- no translation found for accessibility_work_profile_app_description (5470883112342119165) -->
<skip />
</resources>
diff --git a/packages/SettingsLib/res/values-is/strings.xml b/packages/SettingsLib/res/values-is/strings.xml
index e99faaf..6560de0 100644
--- a/packages/SettingsLib/res/values-is/strings.xml
+++ b/packages/SettingsLib/res/values-is/strings.xml
@@ -549,14 +549,10 @@
<string name="guest_new_guest" msgid="3482026122932643557">"Bæta gesti við"</string>
<string name="guest_exit_guest" msgid="5908239569510734136">"Fjarlægja gest"</string>
<string name="guest_nickname" msgid="6332276931583337261">"Gestur"</string>
- <!-- no translation found for cached_apps_freezer_device_default (2616594131750144342) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_disabled (4816382260660472042) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_enabled (8866703500183051546) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_reboot_dialog_text (695330563489230096) -->
- <skip />
+ <string name="cached_apps_freezer_device_default" msgid="2616594131750144342">"Sjálfgefin stilling tækis"</string>
+ <string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Slökkt"</string>
+ <string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Virkt"</string>
+ <string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Endurræsa þarf tækið til að þessi breyting taki gildi. Endurræstu núna eða hættu við."</string>
<!-- no translation found for accessibility_work_profile_app_description (5470883112342119165) -->
<skip />
</resources>
diff --git a/packages/SettingsLib/res/values-iw/strings.xml b/packages/SettingsLib/res/values-iw/strings.xml
index 06111b6..23e701d 100644
--- a/packages/SettingsLib/res/values-iw/strings.xml
+++ b/packages/SettingsLib/res/values-iw/strings.xml
@@ -551,14 +551,10 @@
<string name="guest_new_guest" msgid="3482026122932643557">"הוספת אורח"</string>
<string name="guest_exit_guest" msgid="5908239569510734136">"הסרת אורח"</string>
<string name="guest_nickname" msgid="6332276931583337261">"אורח"</string>
- <!-- no translation found for cached_apps_freezer_device_default (2616594131750144342) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_disabled (4816382260660472042) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_enabled (8866703500183051546) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_reboot_dialog_text (695330563489230096) -->
- <skip />
+ <string name="cached_apps_freezer_device_default" msgid="2616594131750144342">"ברירת המחדל של המכשיר"</string>
+ <string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"מושבת"</string>
+ <string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"מופעל"</string>
+ <string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"צריך להפעיל מחדש את המכשיר כדי להחיל את השינוי. יש להפעיל מחדש עכשיו או לבטל."</string>
<!-- no translation found for accessibility_work_profile_app_description (5470883112342119165) -->
<skip />
</resources>
diff --git a/packages/SettingsLib/res/values-ja/strings.xml b/packages/SettingsLib/res/values-ja/strings.xml
index 850fd97..7640722 100644
--- a/packages/SettingsLib/res/values-ja/strings.xml
+++ b/packages/SettingsLib/res/values-ja/strings.xml
@@ -549,14 +549,10 @@
<string name="guest_new_guest" msgid="3482026122932643557">"ゲストを追加"</string>
<string name="guest_exit_guest" msgid="5908239569510734136">"ゲストを削除"</string>
<string name="guest_nickname" msgid="6332276931583337261">"ゲスト"</string>
- <!-- no translation found for cached_apps_freezer_device_default (2616594131750144342) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_disabled (4816382260660472042) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_enabled (8866703500183051546) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_reboot_dialog_text (695330563489230096) -->
- <skip />
+ <string name="cached_apps_freezer_device_default" msgid="2616594131750144342">"デバイスのデフォルト"</string>
+ <string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"無効"</string>
+ <string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"有効"</string>
+ <string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"この変更を適用するには、デバイスの再起動が必要です。今すぐ再起動してください。キャンセルすることもできます。"</string>
<!-- no translation found for accessibility_work_profile_app_description (5470883112342119165) -->
<skip />
</resources>
diff --git a/packages/SettingsLib/res/values-ka/strings.xml b/packages/SettingsLib/res/values-ka/strings.xml
index 025cd94..985188f 100644
--- a/packages/SettingsLib/res/values-ka/strings.xml
+++ b/packages/SettingsLib/res/values-ka/strings.xml
@@ -549,14 +549,9 @@
<string name="guest_new_guest" msgid="3482026122932643557">"სტუმრის დამატება"</string>
<string name="guest_exit_guest" msgid="5908239569510734136">"სტუმრის ამოშლა"</string>
<string name="guest_nickname" msgid="6332276931583337261">"სტუმარი"</string>
- <!-- no translation found for cached_apps_freezer_device_default (2616594131750144342) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_disabled (4816382260660472042) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_enabled (8866703500183051546) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_reboot_dialog_text (695330563489230096) -->
- <skip />
- <!-- no translation found for accessibility_work_profile_app_description (5470883112342119165) -->
- <skip />
+ <string name="cached_apps_freezer_device_default" msgid="2616594131750144342">"მოწყობილობის ნაგულისხმევი"</string>
+ <string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"გათიშული"</string>
+ <string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"ჩართული"</string>
+ <string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"ამ ცვლილების ასამოქმედებლად თქვენი მოწყობილობა უნდა გადაიტვირთოს. გადატვირთეთ ახლავე ან გააუქმეთ."</string>
+ <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"სამსახურის <xliff:g id="APP_NAME">%s</xliff:g>"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-kk/strings.xml b/packages/SettingsLib/res/values-kk/strings.xml
index 9bcc0a2..a5308e4 100644
--- a/packages/SettingsLib/res/values-kk/strings.xml
+++ b/packages/SettingsLib/res/values-kk/strings.xml
@@ -549,14 +549,10 @@
<string name="guest_new_guest" msgid="3482026122932643557">"Қонақты енгізу"</string>
<string name="guest_exit_guest" msgid="5908239569510734136">"Қонақты өшіру"</string>
<string name="guest_nickname" msgid="6332276931583337261">"Қонақ"</string>
- <!-- no translation found for cached_apps_freezer_device_default (2616594131750144342) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_disabled (4816382260660472042) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_enabled (8866703500183051546) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_reboot_dialog_text (695330563489230096) -->
- <skip />
+ <string name="cached_apps_freezer_device_default" msgid="2616594131750144342">"Құрылғыны әдепкісінше реттеу"</string>
+ <string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Өшірулі"</string>
+ <string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Қосулы"</string>
+ <string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Бұл өзгеріс күшіне енуі үшін, құрылғыны қайта жүктеу керек. Қазір қайта жүктеңіз не бас тартыңыз."</string>
<!-- no translation found for accessibility_work_profile_app_description (5470883112342119165) -->
<skip />
</resources>
diff --git a/packages/SettingsLib/res/values-km/strings.xml b/packages/SettingsLib/res/values-km/strings.xml
index ce03f22..0ff48e1 100644
--- a/packages/SettingsLib/res/values-km/strings.xml
+++ b/packages/SettingsLib/res/values-km/strings.xml
@@ -549,14 +549,10 @@
<string name="guest_new_guest" msgid="3482026122932643557">"បញ្ចូលភ្ញៀវ"</string>
<string name="guest_exit_guest" msgid="5908239569510734136">"លុបភ្ញៀវ"</string>
<string name="guest_nickname" msgid="6332276931583337261">"ភ្ញៀវ"</string>
- <!-- no translation found for cached_apps_freezer_device_default (2616594131750144342) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_disabled (4816382260660472042) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_enabled (8866703500183051546) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_reboot_dialog_text (695330563489230096) -->
- <skip />
+ <string name="cached_apps_freezer_device_default" msgid="2616594131750144342">"លំនាំដើមរបស់ឧបករណ៍"</string>
+ <string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"បានបិទ"</string>
+ <string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"បានបើក"</string>
+ <string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"ត្រូវតែចាប់ផ្ដើមឧបករណ៍របស់អ្នកឡើងវិញ ទើបការផ្លាស់ប្ដូរនេះត្រូវបានអនុវត្ត។ ចាប់ផ្ដើមឡើងវិញឥឡូវនេះ ឬបោះបង់។"</string>
<!-- no translation found for accessibility_work_profile_app_description (5470883112342119165) -->
<skip />
</resources>
diff --git a/packages/SettingsLib/res/values-ko/strings.xml b/packages/SettingsLib/res/values-ko/strings.xml
index b95ad9b..b8d587b 100644
--- a/packages/SettingsLib/res/values-ko/strings.xml
+++ b/packages/SettingsLib/res/values-ko/strings.xml
@@ -549,14 +549,10 @@
<string name="guest_new_guest" msgid="3482026122932643557">"게스트 추가"</string>
<string name="guest_exit_guest" msgid="5908239569510734136">"게스트 삭제"</string>
<string name="guest_nickname" msgid="6332276931583337261">"게스트"</string>
- <!-- no translation found for cached_apps_freezer_device_default (2616594131750144342) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_disabled (4816382260660472042) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_enabled (8866703500183051546) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_reboot_dialog_text (695330563489230096) -->
- <skip />
+ <string name="cached_apps_freezer_device_default" msgid="2616594131750144342">"기기 기본값"</string>
+ <string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"사용 중지됨"</string>
+ <string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"사용 설정됨"</string>
+ <string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"변경사항을 적용하려면 기기를 재부팅해야 합니다. 지금 재부팅하거나 취소하세요."</string>
<!-- no translation found for accessibility_work_profile_app_description (5470883112342119165) -->
<skip />
</resources>
diff --git a/packages/SettingsLib/res/values-ky/strings.xml b/packages/SettingsLib/res/values-ky/strings.xml
index 45fc6cb..3c57c79 100644
--- a/packages/SettingsLib/res/values-ky/strings.xml
+++ b/packages/SettingsLib/res/values-ky/strings.xml
@@ -549,14 +549,10 @@
<string name="guest_new_guest" msgid="3482026122932643557">"Конок кошуу"</string>
<string name="guest_exit_guest" msgid="5908239569510734136">"Конокту өчүрүү"</string>
<string name="guest_nickname" msgid="6332276931583337261">"Конок"</string>
- <!-- no translation found for cached_apps_freezer_device_default (2616594131750144342) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_disabled (4816382260660472042) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_enabled (8866703500183051546) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_reboot_dialog_text (695330563489230096) -->
- <skip />
+ <string name="cached_apps_freezer_device_default" msgid="2616594131750144342">"Түзмөктүн демейки параметри"</string>
+ <string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Өчүк"</string>
+ <string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Күйүк"</string>
+ <string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Бул өзгөртүүнү колдонуу үчүн түзмөктү өчүрүп күйгүзүңүз. Азыр өчүрүп күйгүзүңүз же жокко чыгарыңыз."</string>
<!-- no translation found for accessibility_work_profile_app_description (5470883112342119165) -->
<skip />
</resources>
diff --git a/packages/SettingsLib/res/values-lo/strings.xml b/packages/SettingsLib/res/values-lo/strings.xml
index 4e39674..02f73b5 100644
--- a/packages/SettingsLib/res/values-lo/strings.xml
+++ b/packages/SettingsLib/res/values-lo/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"ປິດການນຳໃຊ້ແລ້ວ"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"ເປີດການນຳໃຊ້ແລ້ວ"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"ທ່ານຕ້ອງປິດເປີດອຸປະກອນຄືນໃໝ່ເພື່ອນຳໃຊ້ການປ່ຽນແປງນີ້. ປິດເປີດໃໝ່ດຽວນີ້ ຫຼື ຍົກເລີກ."</string>
- <!-- no translation found for accessibility_work_profile_app_description (5470883112342119165) -->
- <skip />
+ <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"ບ່ອນເຮັດວຽກ <xliff:g id="APP_NAME">%s</xliff:g>"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-lt/strings.xml b/packages/SettingsLib/res/values-lt/strings.xml
index 81357cc..dc6347a 100644
--- a/packages/SettingsLib/res/values-lt/strings.xml
+++ b/packages/SettingsLib/res/values-lt/strings.xml
@@ -551,14 +551,10 @@
<string name="guest_new_guest" msgid="3482026122932643557">"Pridėti svečią"</string>
<string name="guest_exit_guest" msgid="5908239569510734136">"Pašalinti svečią"</string>
<string name="guest_nickname" msgid="6332276931583337261">"Svečias"</string>
- <!-- no translation found for cached_apps_freezer_device_default (2616594131750144342) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_disabled (4816382260660472042) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_enabled (8866703500183051546) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_reboot_dialog_text (695330563489230096) -->
- <skip />
+ <string name="cached_apps_freezer_device_default" msgid="2616594131750144342">"Numatyt. įrenginio nustatymas"</string>
+ <string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Išjungta"</string>
+ <string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Įgalinta"</string>
+ <string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Kad pakeitimas būtų pritaikytas, įrenginį reikia paleisti iš naujo. Dabar paleiskite iš naujo arba atšaukite."</string>
<!-- no translation found for accessibility_work_profile_app_description (5470883112342119165) -->
<skip />
</resources>
diff --git a/packages/SettingsLib/res/values-lv/strings.xml b/packages/SettingsLib/res/values-lv/strings.xml
index c63f312..0a185d0 100644
--- a/packages/SettingsLib/res/values-lv/strings.xml
+++ b/packages/SettingsLib/res/values-lv/strings.xml
@@ -550,14 +550,10 @@
<string name="guest_new_guest" msgid="3482026122932643557">"Pievienot viesi"</string>
<string name="guest_exit_guest" msgid="5908239569510734136">"Noņemt viesi"</string>
<string name="guest_nickname" msgid="6332276931583337261">"Viesis"</string>
- <!-- no translation found for cached_apps_freezer_device_default (2616594131750144342) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_disabled (4816382260660472042) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_enabled (8866703500183051546) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_reboot_dialog_text (695330563489230096) -->
- <skip />
+ <string name="cached_apps_freezer_device_default" msgid="2616594131750144342">"Ierīces noklusējums"</string>
+ <string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Atspējots"</string>
+ <string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Iespējots"</string>
+ <string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Lai šīs izmaiņas tiktu piemērotas, nepieciešama ierīces atkārtota palaišana. Atkārtoti palaidiet to tūlīt vai atceliet izmaiņas."</string>
<!-- no translation found for accessibility_work_profile_app_description (5470883112342119165) -->
<skip />
</resources>
diff --git a/packages/SettingsLib/res/values-mn/strings.xml b/packages/SettingsLib/res/values-mn/strings.xml
index 81733f2..a342862 100644
--- a/packages/SettingsLib/res/values-mn/strings.xml
+++ b/packages/SettingsLib/res/values-mn/strings.xml
@@ -549,14 +549,10 @@
<string name="guest_new_guest" msgid="3482026122932643557">"Зочин нэмэх"</string>
<string name="guest_exit_guest" msgid="5908239569510734136">"Зочин хасах"</string>
<string name="guest_nickname" msgid="6332276931583337261">"Зочин"</string>
- <!-- no translation found for cached_apps_freezer_device_default (2616594131750144342) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_disabled (4816382260660472042) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_enabled (8866703500183051546) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_reboot_dialog_text (695330563489230096) -->
- <skip />
+ <string name="cached_apps_freezer_device_default" msgid="2616594131750144342">"Төхөөрөмжийн өгөгдмөл"</string>
+ <string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Идэвхгүй болгосон"</string>
+ <string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Идэвхжүүлсэн"</string>
+ <string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Энэ өөрчлөлтийг хэрэгжүүлэхийн тулд таны төхөөрөмжийг дахин асаах ёстой. Одоо дахин асаах эсвэл болино уу."</string>
<!-- no translation found for accessibility_work_profile_app_description (5470883112342119165) -->
<skip />
</resources>
diff --git a/packages/SettingsLib/res/values-ms/strings.xml b/packages/SettingsLib/res/values-ms/strings.xml
index bb70a86..a1c6782 100644
--- a/packages/SettingsLib/res/values-ms/strings.xml
+++ b/packages/SettingsLib/res/values-ms/strings.xml
@@ -549,14 +549,10 @@
<string name="guest_new_guest" msgid="3482026122932643557">"Tambah tetamu"</string>
<string name="guest_exit_guest" msgid="5908239569510734136">"Alih keluar tetamu"</string>
<string name="guest_nickname" msgid="6332276931583337261">"Tetamu"</string>
- <!-- no translation found for cached_apps_freezer_device_default (2616594131750144342) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_disabled (4816382260660472042) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_enabled (8866703500183051546) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_reboot_dialog_text (695330563489230096) -->
- <skip />
+ <string name="cached_apps_freezer_device_default" msgid="2616594131750144342">"Lalai peranti"</string>
+ <string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Dilumpuhkan"</string>
+ <string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Didayakan"</string>
+ <string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Peranti anda mesti dibut semula supaya perubahan ini berlaku. But semula sekarang atau batalkan."</string>
<!-- no translation found for accessibility_work_profile_app_description (5470883112342119165) -->
<skip />
</resources>
diff --git a/packages/SettingsLib/res/values-my/strings.xml b/packages/SettingsLib/res/values-my/strings.xml
index 920d659..0edc100 100644
--- a/packages/SettingsLib/res/values-my/strings.xml
+++ b/packages/SettingsLib/res/values-my/strings.xml
@@ -549,14 +549,10 @@
<string name="guest_new_guest" msgid="3482026122932643557">"ဧည့်သည့် ထည့်ရန်"</string>
<string name="guest_exit_guest" msgid="5908239569510734136">"ဧည့်သည်ကို ဖယ်ထုတ်ရန်"</string>
<string name="guest_nickname" msgid="6332276931583337261">"ဧည့်သည်"</string>
- <!-- no translation found for cached_apps_freezer_device_default (2616594131750144342) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_disabled (4816382260660472042) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_enabled (8866703500183051546) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_reboot_dialog_text (695330563489230096) -->
- <skip />
+ <string name="cached_apps_freezer_device_default" msgid="2616594131750144342">"စက်ပစ္စည်းမူရင်း"</string>
+ <string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"ပိတ်ထားသည်"</string>
+ <string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"ဖွင့်ထားသည်"</string>
+ <string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"ဤအပြောင်းအလဲ ထည့်သွင်းရန် သင့်စက်ကို ပြန်လည်စတင်ရမည်။ ယခု ပြန်လည်စတင်ပါ သို့မဟုတ် ပယ်ဖျက်ပါ။"</string>
<!-- no translation found for accessibility_work_profile_app_description (5470883112342119165) -->
<skip />
</resources>
diff --git a/packages/SettingsLib/res/values-nb/strings.xml b/packages/SettingsLib/res/values-nb/strings.xml
index 8dfa9a1..d683070 100644
--- a/packages/SettingsLib/res/values-nb/strings.xml
+++ b/packages/SettingsLib/res/values-nb/strings.xml
@@ -549,14 +549,10 @@
<string name="guest_new_guest" msgid="3482026122932643557">"Legg til en gjest"</string>
<string name="guest_exit_guest" msgid="5908239569510734136">"Fjern gjesten"</string>
<string name="guest_nickname" msgid="6332276931583337261">"Gjest"</string>
- <!-- no translation found for cached_apps_freezer_device_default (2616594131750144342) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_disabled (4816382260660472042) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_enabled (8866703500183051546) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_reboot_dialog_text (695330563489230096) -->
- <skip />
+ <string name="cached_apps_freezer_device_default" msgid="2616594131750144342">"Standard for enheten"</string>
+ <string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Slått av"</string>
+ <string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Slått på"</string>
+ <string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Enheten din må startes på nytt for at denne endringen skal tre i kraft. Start på nytt nå eller avbryt."</string>
<!-- no translation found for accessibility_work_profile_app_description (5470883112342119165) -->
<skip />
</resources>
diff --git a/packages/SettingsLib/res/values-ne/strings.xml b/packages/SettingsLib/res/values-ne/strings.xml
index 42ef162..ee22c60 100644
--- a/packages/SettingsLib/res/values-ne/strings.xml
+++ b/packages/SettingsLib/res/values-ne/strings.xml
@@ -374,7 +374,7 @@
<string name="show_notification_channel_warnings" msgid="3448282400127597331">"सूचना च्यानलका चेतावनी देखाउनुहोस्"</string>
<string name="show_notification_channel_warnings_summary" msgid="68031143745094339">"अनुप्रयोगले कुनै मान्य च्यानल बिना सूचना पोस्ट गर्दा स्क्रिनमा चेतावनी देखाउँछ"</string>
<string name="force_allow_on_external" msgid="9187902444231637880">"बाह्यमा बल प्रयोगको अनुमति प्राप्त एपहरू"</string>
- <string name="force_allow_on_external_summary" msgid="8525425782530728238">"म्यानिफेेस्टका मानहरूको ख्याल नगरी कुनै पनि अनुप्रयोगलाई बाह्य भण्डारणमा लेख्न सकिने खाले बनाउँछ"</string>
+ <string name="force_allow_on_external_summary" msgid="8525425782530728238">"म्यानिफेेस्टका मानहरूको ख्याल नगरी कुनै पनि एपलाई बाह्य भण्डारणमा लेख्न सकिने खाले बनाउँछ"</string>
<string name="force_resizable_activities" msgid="7143612144399959606">"आकार बदल्न योग्य हुने बनाउन गतिविधिहरूलाई बाध्यात्मक बनाउनुहोस्।"</string>
<string name="force_resizable_activities_summary" msgid="2490382056981583062">"म्यानिफेेस्ट मानहरूको ख्याल नगरी, बहु-विन्डोको लागि सबै रिसाइज गर्न सकिने गतिविधिहरू बनाउनुहोस्।"</string>
<string name="enable_freeform_support" msgid="7599125687603914253">"फ्रिफर्म विन्डोहरू सक्रिय गर्नुहोस्"</string>
@@ -428,10 +428,10 @@
<string name="power_discharging_duration_enhanced" msgid="1800465736237672323">"तपाईंको प्रयोगको आधारमा लगभग <xliff:g id="TIME_REMAINING">%1$s</xliff:g> बाँकी छ (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<!-- no translation found for power_remaining_duration_only_short (7438846066602840588) -->
<skip />
- <string name="power_discharge_by_enhanced" msgid="563438403581662942">"तपाईंको प्रयोगका आधारमा लगभग <xliff:g id="TIME">%1$s</xliff:g> सम्म टिक्नु पर्छ (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only_enhanced" msgid="3268796172652988877">"तपाईंको प्रयोगका आधारमा लगभग <xliff:g id="TIME">%1$s</xliff:g> सम्म टिक्नु पर्छ"</string>
- <string name="power_discharge_by" msgid="4113180890060388350">"ब्याट्री लगभग <xliff:g id="TIME">%1$s</xliff:g> सम्म टिक्नु पर्छ (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only" msgid="92545648425937000">"लगभग <xliff:g id="TIME">%1$s</xliff:g> सम्म टिक्नु पर्छ"</string>
+ <string name="power_discharge_by_enhanced" msgid="563438403581662942">"तपाईंको प्रयोगका आधारमा लगभग <xliff:g id="TIME">%1$s</xliff:g> सम्म टिक्छ (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
+ <string name="power_discharge_by_only_enhanced" msgid="3268796172652988877">"तपाईंको प्रयोगका आधारमा लगभग <xliff:g id="TIME">%1$s</xliff:g> सम्म टिक्छ"</string>
+ <string name="power_discharge_by" msgid="4113180890060388350">"ब्याट्री लगभग <xliff:g id="TIME">%1$s</xliff:g> सम्म टिक्छ (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
+ <string name="power_discharge_by_only" msgid="92545648425937000">"लगभग <xliff:g id="TIME">%1$s</xliff:g> सम्म टिक्छ"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"<xliff:g id="TIME">%1$s</xliff:g> सम्म"</string>
<string name="power_suggestion_battery_run_out" msgid="6332089307827787087">"ब्याट्री <xliff:g id="TIME">%1$s</xliff:g> बजेसम्ममा सकिन सक्छ"</string>
<string name="power_remaining_less_than_duration_only" msgid="8956656616031395152">"<xliff:g id="THRESHOLD">%1$s</xliff:g> भन्दा कम समय बाँकी छ"</string>
diff --git a/packages/SettingsLib/res/values-nl/strings.xml b/packages/SettingsLib/res/values-nl/strings.xml
index 6391690..dc5f8f2 100644
--- a/packages/SettingsLib/res/values-nl/strings.xml
+++ b/packages/SettingsLib/res/values-nl/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Uitgeschakeld"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Ingeschakeld"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Je apparaat moet opnieuw worden opgestart om deze wijziging toe te passen. Start nu opnieuw op of annuleer de wijziging."</string>
- <!-- no translation found for accessibility_work_profile_app_description (5470883112342119165) -->
- <skip />
+ <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"<xliff:g id="APP_NAME">%s</xliff:g> voor werk"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-or/arrays.xml b/packages/SettingsLib/res/values-or/arrays.xml
index a021446..5928a87 100644
--- a/packages/SettingsLib/res/values-or/arrays.xml
+++ b/packages/SettingsLib/res/values-or/arrays.xml
@@ -156,7 +156,7 @@
<item msgid="5001852592115448348">", ସକ୍ରିୟ (ଫୋନ୍)"</item>
</string-array>
<string-array name="select_logd_size_titles">
- <item msgid="1191094707770726722">"ଅଫ୍"</item>
+ <item msgid="1191094707770726722">"ବନ୍ଦ"</item>
<item msgid="7839165897132179888">"64K"</item>
<item msgid="2715700596495505626">"256K"</item>
<item msgid="7099386891713159947">"1M"</item>
@@ -184,7 +184,7 @@
<item msgid="7300881231043255746">"କେବଳ କର୍ନେଲ୍"</item>
</string-array>
<string-array name="select_logpersist_summaries">
- <item msgid="97587758561106269">"ଅଫ"</item>
+ <item msgid="97587758561106269">"ବନ୍ଦ"</item>
<item msgid="7126170197336963369">"ସମସ୍ତ ଲଗ୍ ବଫର୍"</item>
<item msgid="7167543126036181392">"ରେଡିଓ ଲଗ୍ ବଫର୍ଗୁଡିକ ଛଡ଼ା ଅନ୍ୟ ସବୁ"</item>
<item msgid="5135340178556563979">"କେବଳ କର୍ନେଲ୍ ଲଗ୍ ବଫର୍"</item>
@@ -237,7 +237,7 @@
<item msgid="7345673972166571060">"glGetError ରେ କଲ୍ ଷ୍ଟାକ୍"</item>
</string-array>
<string-array name="show_non_rect_clip_entries">
- <item msgid="2482978351289846212">"ଅଫ୍"</item>
+ <item msgid="2482978351289846212">"ବନ୍ଦ"</item>
<item msgid="3405519300199774027">"ଅଣ-ଆୟତାକାର କ୍ଲିପ୍ କ୍ଷେତ୍ର ନୀଳ ରଙ୍ଗରେ ଆଙ୍କନ୍ତୁ"</item>
<item msgid="1212561935004167943">"ଟେଷ୍ଟ ହୋଇଥିବା ଅଙ୍କନ କମାଣ୍ଡଗୁଡ଼ିକୁ ସବୁଜରେ ଚିହ୍ନିତ କରନ୍ତୁ"</item>
</string-array>
@@ -247,7 +247,7 @@
<item msgid="5023908510820531131">"ରେ <xliff:g id="AS_TYPED_COMMAND">adb shell dumpsys gfxinfo</xliff:g>"</item>
</string-array>
<string-array name="debug_hw_overdraw_entries">
- <item msgid="1968128556747588800">"ଅଫ୍"</item>
+ <item msgid="1968128556747588800">"ବନ୍ଦ"</item>
<item msgid="3033215374382962216">"ଓଭର୍ ଡ୍ର କ୍ଷେତ୍ରଗୁଡ଼ିକୁ ଦେଖାଅ"</item>
<item msgid="3474333938380896988">"ଡିଉଟେରାନୋମାଲୀ ପାଇଁ କ୍ଷେତ୍ର ଦେଖନ୍ତୁ"</item>
</string-array>
diff --git a/packages/SettingsLib/res/values-or/strings.xml b/packages/SettingsLib/res/values-or/strings.xml
index aea13b5c..18cc9e3 100644
--- a/packages/SettingsLib/res/values-or/strings.xml
+++ b/packages/SettingsLib/res/values-or/strings.xml
@@ -195,7 +195,7 @@
</string-array>
<string name="choose_profile" msgid="343803890897657450">"ପ୍ରୋଫାଇଲ୍ ବାଛନ୍ତୁ"</string>
<string name="category_personal" msgid="6236798763159385225">"ବ୍ୟକ୍ତିଗତ"</string>
- <string name="category_work" msgid="4014193632325996115">"କାମ"</string>
+ <string name="category_work" msgid="4014193632325996115">"ୱାର୍କ"</string>
<string name="development_settings_title" msgid="140296922921597393">"ଡେଭଲପର୍ଙ୍କ ପାଇଁ ବିକଳ୍ପମାନ"</string>
<string name="development_settings_enable" msgid="4285094651288242183">"ଡେଭଲପର୍ ବିକଳ୍ପଗୁଡ଼ିକ ସକ୍ଷମ କରନ୍ତୁ"</string>
<string name="development_settings_summary" msgid="8718917813868735095">"ଆପ୍ର ବିକାଶ ପାଇଁ ବିକଳ୍ପମାନ ସେଟ୍ କରନ୍ତୁ"</string>
@@ -276,7 +276,7 @@
<string name="bluetooth_select_a2dp_codec_streaming_label" msgid="2040810756832027227">"ଷ୍ଟ୍ରିମ୍ କରୁଛି: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string>
<string name="select_private_dns_configuration_title" msgid="7887550926056143018">"ବ୍ୟକ୍ତିଗତ DNS"</string>
<string name="select_private_dns_configuration_dialog_title" msgid="3731422918335951912">"ବ୍ୟକ୍ତିଗତ DNS ମୋଡ୍ ବାଛନ୍ତୁ"</string>
- <string name="private_dns_mode_off" msgid="7065962499349997041">"ଅଫ୍"</string>
+ <string name="private_dns_mode_off" msgid="7065962499349997041">"ବନ୍ଦ"</string>
<string name="private_dns_mode_opportunistic" msgid="1947864819060442354">"ସ୍ଵଚାଳିତ"</string>
<string name="private_dns_mode_provider" msgid="3619040641762557028">"ବ୍ୟକ୍ତିଗତ DNS ପ୍ରଦାତା ହୋଷ୍ଟନାମ"</string>
<string name="private_dns_mode_provider_hostname_hint" msgid="6564868953748514595">"DNS ପ୍ରଦାନକାରୀଙ୍କ ହୋଷ୍ଟନାମ ଲେଖନ୍ତୁ"</string>
diff --git a/packages/SettingsLib/res/values-pl/arrays.xml b/packages/SettingsLib/res/values-pl/arrays.xml
index 43b8f5f..552ef6b 100644
--- a/packages/SettingsLib/res/values-pl/arrays.xml
+++ b/packages/SettingsLib/res/values-pl/arrays.xml
@@ -29,7 +29,7 @@
<item msgid="4613015005934755724">"Połączono"</item>
<item msgid="3763530049995655072">"Zawieszona"</item>
<item msgid="7852381437933824454">"Trwa rozłączanie..."</item>
- <item msgid="5046795712175415059">"Rozłączona"</item>
+ <item msgid="5046795712175415059">"Rozłączono"</item>
<item msgid="2473654476624070462">"Niepowodzenie"</item>
<item msgid="9146847076036105115">"Zablokowana"</item>
<item msgid="4543924085816294893">"Tymczasowo, by uniknąć połączenia o niskiej jakości"</item>
@@ -43,7 +43,7 @@
<item msgid="1043944043827424501">"Połączono z siecią <xliff:g id="NETWORK_NAME">%1$s</xliff:g>"</item>
<item msgid="7445993821842009653">"Zawieszona"</item>
<item msgid="1175040558087735707">"Trwa rozłączanie z siecią <xliff:g id="NETWORK_NAME">%1$s</xliff:g>..."</item>
- <item msgid="699832486578171722">"Rozłączona"</item>
+ <item msgid="699832486578171722">"Rozłączono"</item>
<item msgid="522383512264986901">"Niepowodzenie"</item>
<item msgid="3602596701217484364">"Zablokowana"</item>
<item msgid="1999413958589971747">"Tymczasowo, by uniknąć połączenia o niskiej jakości"</item>
diff --git a/packages/SettingsLib/res/values-pl/strings.xml b/packages/SettingsLib/res/values-pl/strings.xml
index cdcb651..8a29bf0 100644
--- a/packages/SettingsLib/res/values-pl/strings.xml
+++ b/packages/SettingsLib/res/values-pl/strings.xml
@@ -23,7 +23,7 @@
<string name="wifi_fail_to_scan" msgid="2333336097603822490">"Nie można wyszukać sieci."</string>
<string name="wifi_security_none" msgid="7392696451280611452">"Brak"</string>
<string name="wifi_remembered" msgid="3266709779723179188">"Zapisana"</string>
- <string name="wifi_disconnected" msgid="7054450256284661757">"Rozłączona"</string>
+ <string name="wifi_disconnected" msgid="7054450256284661757">"Rozłączono"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"Wyłączona"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"Błąd konfiguracji IP"</string>
<string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"Brak połączenia z powodu słabego sygnału sieci"</string>
@@ -63,7 +63,7 @@
<string name="speed_label_very_fast" msgid="8215718029533182439">"Bardzo szybka"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"Ważność wygasła"</string>
<string name="preference_summary_default_combination" msgid="2644094566845577901">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
- <string name="bluetooth_disconnected" msgid="7739366554710388701">"Rozłączona"</string>
+ <string name="bluetooth_disconnected" msgid="7739366554710388701">"Rozłączono"</string>
<string name="bluetooth_disconnecting" msgid="7638892134401574338">"Rozłączanie..."</string>
<string name="bluetooth_connecting" msgid="5871702668260192755">"Łączenie..."</string>
<string name="bluetooth_connected" msgid="8065345572198502293">"Połączono – <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
@@ -551,14 +551,10 @@
<string name="guest_new_guest" msgid="3482026122932643557">"Dodaj gościa"</string>
<string name="guest_exit_guest" msgid="5908239569510734136">"Usuń gościa"</string>
<string name="guest_nickname" msgid="6332276931583337261">"Gość"</string>
- <!-- no translation found for cached_apps_freezer_device_default (2616594131750144342) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_disabled (4816382260660472042) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_enabled (8866703500183051546) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_reboot_dialog_text (695330563489230096) -->
- <skip />
+ <string name="cached_apps_freezer_device_default" msgid="2616594131750144342">"Ustawienie domyślne urządzenia"</string>
+ <string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Wyłączono"</string>
+ <string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Włączono"</string>
+ <string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Wprowadzenie zmiany wymaga ponownego uruchomienia urządzenia. Uruchom ponownie teraz lub anuluj."</string>
<!-- no translation found for accessibility_work_profile_app_description (5470883112342119165) -->
<skip />
</resources>
diff --git a/packages/SettingsLib/res/values-pt-rBR/strings.xml b/packages/SettingsLib/res/values-pt-rBR/strings.xml
index d685802..58a13cd 100644
--- a/packages/SettingsLib/res/values-pt-rBR/strings.xml
+++ b/packages/SettingsLib/res/values-pt-rBR/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Desativado"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Ativado"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"É necessário reinicializar o dispositivo para que a mudança seja aplicada. Faça isso agora ou cancele."</string>
- <!-- no translation found for accessibility_work_profile_app_description (5470883112342119165) -->
- <skip />
+ <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"App <xliff:g id="APP_NAME">%s</xliff:g> de trabalho"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-pt-rPT/strings.xml b/packages/SettingsLib/res/values-pt-rPT/strings.xml
index ca808b9..ca85151 100644
--- a/packages/SettingsLib/res/values-pt-rPT/strings.xml
+++ b/packages/SettingsLib/res/values-pt-rPT/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Desativada"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Ativada"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"É necessário reiniciar o dispositivo para aplicar esta alteração. Reinicie agora ou cancele."</string>
- <!-- no translation found for accessibility_work_profile_app_description (5470883112342119165) -->
- <skip />
+ <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"<xliff:g id="APP_NAME">%s</xliff:g> de trabalho"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-pt/strings.xml b/packages/SettingsLib/res/values-pt/strings.xml
index d685802..58a13cd 100644
--- a/packages/SettingsLib/res/values-pt/strings.xml
+++ b/packages/SettingsLib/res/values-pt/strings.xml
@@ -553,6 +553,5 @@
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Desativado"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Ativado"</string>
<string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"É necessário reinicializar o dispositivo para que a mudança seja aplicada. Faça isso agora ou cancele."</string>
- <!-- no translation found for accessibility_work_profile_app_description (5470883112342119165) -->
- <skip />
+ <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"App <xliff:g id="APP_NAME">%s</xliff:g> de trabalho"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-ro/strings.xml b/packages/SettingsLib/res/values-ro/strings.xml
index 5954d74..f967c8c 100644
--- a/packages/SettingsLib/res/values-ro/strings.xml
+++ b/packages/SettingsLib/res/values-ro/strings.xml
@@ -550,14 +550,10 @@
<string name="guest_new_guest" msgid="3482026122932643557">"Adăugați un invitat"</string>
<string name="guest_exit_guest" msgid="5908239569510734136">"Ștergeți invitatul"</string>
<string name="guest_nickname" msgid="6332276931583337261">"Invitat"</string>
- <!-- no translation found for cached_apps_freezer_device_default (2616594131750144342) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_disabled (4816382260660472042) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_enabled (8866703500183051546) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_reboot_dialog_text (695330563489230096) -->
- <skip />
+ <string name="cached_apps_freezer_device_default" msgid="2616594131750144342">"Prestabilit pentru dispozitiv"</string>
+ <string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Dezactivat"</string>
+ <string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Activat"</string>
+ <string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Pentru ca modificarea să se aplice, trebuie să reporniți dispozitivul. Reporniți-l acum sau anulați."</string>
<!-- no translation found for accessibility_work_profile_app_description (5470883112342119165) -->
<skip />
</resources>
diff --git a/packages/SettingsLib/res/values-ru/strings.xml b/packages/SettingsLib/res/values-ru/strings.xml
index 22b8b25..e41b3b7 100644
--- a/packages/SettingsLib/res/values-ru/strings.xml
+++ b/packages/SettingsLib/res/values-ru/strings.xml
@@ -551,14 +551,10 @@
<string name="guest_new_guest" msgid="3482026122932643557">"Добавить аккаунт гостя"</string>
<string name="guest_exit_guest" msgid="5908239569510734136">"Удалить аккаунт гостя"</string>
<string name="guest_nickname" msgid="6332276931583337261">"Гость"</string>
- <!-- no translation found for cached_apps_freezer_device_default (2616594131750144342) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_disabled (4816382260660472042) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_enabled (8866703500183051546) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_reboot_dialog_text (695330563489230096) -->
- <skip />
+ <string name="cached_apps_freezer_device_default" msgid="2616594131750144342">"Вариант по умолчанию"</string>
+ <string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Отключено"</string>
+ <string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Включено"</string>
+ <string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Чтобы изменение вступило в силу, необходимо перезапустить устройство. Вы можете сделать это сейчас или позже."</string>
<!-- no translation found for accessibility_work_profile_app_description (5470883112342119165) -->
<skip />
</resources>
diff --git a/packages/SettingsLib/res/values-si/strings.xml b/packages/SettingsLib/res/values-si/strings.xml
index 26677f7..5710985 100644
--- a/packages/SettingsLib/res/values-si/strings.xml
+++ b/packages/SettingsLib/res/values-si/strings.xml
@@ -549,14 +549,10 @@
<string name="guest_new_guest" msgid="3482026122932643557">"අමුත්තා එක් කරන්න"</string>
<string name="guest_exit_guest" msgid="5908239569510734136">"අමුත්තා ඉවත් කරන්න"</string>
<string name="guest_nickname" msgid="6332276931583337261">"අමුත්තා"</string>
- <!-- no translation found for cached_apps_freezer_device_default (2616594131750144342) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_disabled (4816382260660472042) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_enabled (8866703500183051546) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_reboot_dialog_text (695330563489230096) -->
- <skip />
+ <string name="cached_apps_freezer_device_default" msgid="2616594131750144342">"උපාංගයේ පෙරනිමිය"</string>
+ <string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"අබල කළා"</string>
+ <string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"සබලයි"</string>
+ <string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"මෙම වෙනස යෙදීමට ඔබේ උපාංගය නැවත පණ ගැන්විය යුතුය. දැන් නැවත පණ ගන්වන්න හෝ අවලංගු කරන්න."</string>
<!-- no translation found for accessibility_work_profile_app_description (5470883112342119165) -->
<skip />
</resources>
diff --git a/packages/SettingsLib/res/values-sk/strings.xml b/packages/SettingsLib/res/values-sk/strings.xml
index 53c2eb0..b3848a9 100644
--- a/packages/SettingsLib/res/values-sk/strings.xml
+++ b/packages/SettingsLib/res/values-sk/strings.xml
@@ -551,14 +551,10 @@
<string name="guest_new_guest" msgid="3482026122932643557">"Pridať hosťa"</string>
<string name="guest_exit_guest" msgid="5908239569510734136">"Odobrať hosťa"</string>
<string name="guest_nickname" msgid="6332276931583337261">"Hosť"</string>
- <!-- no translation found for cached_apps_freezer_device_default (2616594131750144342) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_disabled (4816382260660472042) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_enabled (8866703500183051546) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_reboot_dialog_text (695330563489230096) -->
- <skip />
+ <string name="cached_apps_freezer_device_default" msgid="2616594131750144342">"Predvol. nastavenie zariadenia"</string>
+ <string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Vypnuté"</string>
+ <string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Zapnuté"</string>
+ <string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Táto zmena sa uplatní až po reštartovaní zariadenia. Zariadenie reštartujte alebo zmenu zrušte."</string>
<!-- no translation found for accessibility_work_profile_app_description (5470883112342119165) -->
<skip />
</resources>
diff --git a/packages/SettingsLib/res/values-sl/strings.xml b/packages/SettingsLib/res/values-sl/strings.xml
index 38ca86a..658c192 100644
--- a/packages/SettingsLib/res/values-sl/strings.xml
+++ b/packages/SettingsLib/res/values-sl/strings.xml
@@ -551,14 +551,9 @@
<string name="guest_new_guest" msgid="3482026122932643557">"Dodajanje gosta"</string>
<string name="guest_exit_guest" msgid="5908239569510734136">"Odstranitev gosta"</string>
<string name="guest_nickname" msgid="6332276931583337261">"Gost"</string>
- <!-- no translation found for cached_apps_freezer_device_default (2616594131750144342) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_disabled (4816382260660472042) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_enabled (8866703500183051546) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_reboot_dialog_text (695330563489230096) -->
- <skip />
- <!-- no translation found for accessibility_work_profile_app_description (5470883112342119165) -->
- <skip />
+ <string name="cached_apps_freezer_device_default" msgid="2616594131750144342">"Privzeta nastavitev naprave"</string>
+ <string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Onemogočeno"</string>
+ <string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Omogočeno"</string>
+ <string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Napravo je treba znova zagnati, da bo ta sprememba uveljavljena. Znova zaženite zdaj ali prekličite."</string>
+ <string name="accessibility_work_profile_app_description" msgid="5470883112342119165">"<xliff:g id="APP_NAME">%s</xliff:g> za delo"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-sr/strings.xml b/packages/SettingsLib/res/values-sr/strings.xml
index ca15c2d..e0a7d0b 100644
--- a/packages/SettingsLib/res/values-sr/strings.xml
+++ b/packages/SettingsLib/res/values-sr/strings.xml
@@ -550,14 +550,10 @@
<string name="guest_new_guest" msgid="3482026122932643557">"Додај госта"</string>
<string name="guest_exit_guest" msgid="5908239569510734136">"Уклони госта"</string>
<string name="guest_nickname" msgid="6332276931583337261">"Гост"</string>
- <!-- no translation found for cached_apps_freezer_device_default (2616594131750144342) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_disabled (4816382260660472042) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_enabled (8866703500183051546) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_reboot_dialog_text (695330563489230096) -->
- <skip />
+ <string name="cached_apps_freezer_device_default" msgid="2616594131750144342">"Подразумевано за уређај"</string>
+ <string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Онемогућено"</string>
+ <string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Омогућено"</string>
+ <string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Морате да рестартујете уређај да би се ова промена применила. Рестартујте га одмах или откажите."</string>
<!-- no translation found for accessibility_work_profile_app_description (5470883112342119165) -->
<skip />
</resources>
diff --git a/packages/SettingsLib/res/values-sv/strings.xml b/packages/SettingsLib/res/values-sv/strings.xml
index ee48c2f..f6745b2 100644
--- a/packages/SettingsLib/res/values-sv/strings.xml
+++ b/packages/SettingsLib/res/values-sv/strings.xml
@@ -549,14 +549,10 @@
<string name="guest_new_guest" msgid="3482026122932643557">"Lägg till gäst"</string>
<string name="guest_exit_guest" msgid="5908239569510734136">"Ta bort gäst"</string>
<string name="guest_nickname" msgid="6332276931583337261">"Gäst"</string>
- <!-- no translation found for cached_apps_freezer_device_default (2616594131750144342) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_disabled (4816382260660472042) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_enabled (8866703500183051546) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_reboot_dialog_text (695330563489230096) -->
- <skip />
+ <string name="cached_apps_freezer_device_default" msgid="2616594131750144342">"Enhetens standardinställning"</string>
+ <string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Inaktiverat"</string>
+ <string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Aktiverat"</string>
+ <string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Enheten måste startas om för att ändringen ska börja gälla. Starta om nu eller avbryt."</string>
<!-- no translation found for accessibility_work_profile_app_description (5470883112342119165) -->
<skip />
</resources>
diff --git a/packages/SettingsLib/res/values-ta/strings.xml b/packages/SettingsLib/res/values-ta/strings.xml
index eb7fc05..fa922ea 100644
--- a/packages/SettingsLib/res/values-ta/strings.xml
+++ b/packages/SettingsLib/res/values-ta/strings.xml
@@ -284,8 +284,7 @@
<string name="wifi_display_certification_summary" msgid="8111151348106907513">"வயர்லெஸ் காட்சி சான்றுக்கான விருப்பங்களைக் காட்டு"</string>
<string name="wifi_verbose_logging_summary" msgid="4993823188807767892">"வைஃபை நுழைவு அளவை அதிகரித்து, வைஃபை தேர்வுக் கருவியில் ஒவ்வொன்றிற்கும் SSID RSSI ஐ காட்டுக"</string>
<string name="wifi_scan_throttling_summary" msgid="2577105472017362814">"பேட்டரி தீர்ந்துபோவதைக் குறைத்து நெட்வொர்க்கின் செயல்திறனை மேம்படுத்தும்"</string>
- <!-- no translation found for wifi_enhanced_mac_randomization_summary (1210663439867489931) -->
- <skip />
+ <string name="wifi_enhanced_mac_randomization_summary" msgid="1210663439867489931">"இந்தப் பயன்முறை இயக்கப்படும்போது இந்தச் சாதனத்தின் MAC முகவரியானது ஒவ்வொரு முறை MAC ரேண்டம் ஆக்குதல் இயக்கப்பட்டிருக்கும் நெட்வொர்க்குடன் இணைக்கப்படும்போதும் மாறக்கூடும்."</string>
<string name="wifi_metered_label" msgid="8737187690304098638">"கட்டண நெட்வொர்க்"</string>
<string name="wifi_unmetered_label" msgid="6174142840934095093">"கட்டணமில்லா நெட்வொர்க்"</string>
<string name="select_logd_size_title" msgid="1604578195914595173">"லாகர் பஃபர் அளவுகள்"</string>
@@ -550,14 +549,10 @@
<string name="guest_new_guest" msgid="3482026122932643557">"கெஸ்ட்டைச் சேர்"</string>
<string name="guest_exit_guest" msgid="5908239569510734136">"கெஸ்ட்டை அகற்று"</string>
<string name="guest_nickname" msgid="6332276931583337261">"கெஸ்ட்"</string>
- <!-- no translation found for cached_apps_freezer_device_default (2616594131750144342) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_disabled (4816382260660472042) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_enabled (8866703500183051546) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_reboot_dialog_text (695330563489230096) -->
- <skip />
+ <string name="cached_apps_freezer_device_default" msgid="2616594131750144342">"சாதனத்தின் இயல்புநிலை"</string>
+ <string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"முடக்கப்பட்டது"</string>
+ <string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"இயக்கப்பட்டது"</string>
+ <string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"இந்த மாற்றங்கள் செயல்படுத்தப்பட உங்கள் சாதனத்தை மறுபடி தொடங்க வேண்டும். இப்போதே மறுபடி தொடங்கவும் அல்லது ரத்துசெய்யவும்."</string>
<!-- no translation found for accessibility_work_profile_app_description (5470883112342119165) -->
<skip />
</resources>
diff --git a/packages/SettingsLib/res/values-th/strings.xml b/packages/SettingsLib/res/values-th/strings.xml
index b4e1eea..0e958e9 100644
--- a/packages/SettingsLib/res/values-th/strings.xml
+++ b/packages/SettingsLib/res/values-th/strings.xml
@@ -549,14 +549,10 @@
<string name="guest_new_guest" msgid="3482026122932643557">"เพิ่มผู้เข้าร่วม"</string>
<string name="guest_exit_guest" msgid="5908239569510734136">"นำผู้เข้าร่วมออก"</string>
<string name="guest_nickname" msgid="6332276931583337261">"ผู้ใช้ชั่วคราว"</string>
- <!-- no translation found for cached_apps_freezer_device_default (2616594131750144342) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_disabled (4816382260660472042) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_enabled (8866703500183051546) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_reboot_dialog_text (695330563489230096) -->
- <skip />
+ <string name="cached_apps_freezer_device_default" msgid="2616594131750144342">"ค่าเริ่มต้นของอุปกรณ์"</string>
+ <string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"ปิดใช้"</string>
+ <string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"เปิดใช้"</string>
+ <string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"คุณต้องรีบูตอุปกรณ์เพื่อให้การเปลี่ยนแปลงนี้มีผล รีบูตเลยหรือยกเลิก"</string>
<!-- no translation found for accessibility_work_profile_app_description (5470883112342119165) -->
<skip />
</resources>
diff --git a/packages/SettingsLib/res/values-tl/strings.xml b/packages/SettingsLib/res/values-tl/strings.xml
index 22ad220..5ce89eb 100644
--- a/packages/SettingsLib/res/values-tl/strings.xml
+++ b/packages/SettingsLib/res/values-tl/strings.xml
@@ -549,14 +549,10 @@
<string name="guest_new_guest" msgid="3482026122932643557">"Magdagdag ng bisita"</string>
<string name="guest_exit_guest" msgid="5908239569510734136">"Alisin ang bisita"</string>
<string name="guest_nickname" msgid="6332276931583337261">"Bisita"</string>
- <!-- no translation found for cached_apps_freezer_device_default (2616594131750144342) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_disabled (4816382260660472042) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_enabled (8866703500183051546) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_reboot_dialog_text (695330563489230096) -->
- <skip />
+ <string name="cached_apps_freezer_device_default" msgid="2616594131750144342">"Default ng device"</string>
+ <string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Naka-disable"</string>
+ <string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Na-enable"</string>
+ <string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Dapat i-reboot ang iyong device para mailapat ang pagbabagong ito. Mag-reboot ngayon o kanselahin."</string>
<!-- no translation found for accessibility_work_profile_app_description (5470883112342119165) -->
<skip />
</resources>
diff --git a/packages/SettingsLib/res/values-tr/strings.xml b/packages/SettingsLib/res/values-tr/strings.xml
index daa3eed..1e887d1 100644
--- a/packages/SettingsLib/res/values-tr/strings.xml
+++ b/packages/SettingsLib/res/values-tr/strings.xml
@@ -428,10 +428,10 @@
<string name="power_discharging_duration_enhanced" msgid="1800465736237672323">"Kullanımınıza dayalı olarak yaklaşık <xliff:g id="TIME_REMAINING">%1$s</xliff:g> kaldı (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<!-- no translation found for power_remaining_duration_only_short (7438846066602840588) -->
<skip />
- <string name="power_discharge_by_enhanced" msgid="563438403581662942">"Kullanımınıza göre saat yaklaşık <xliff:g id="TIME">%1$s</xliff:g> olana kadar kullanılabilmelidir (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only_enhanced" msgid="3268796172652988877">"Kullanımınıza göre saat yaklaşık <xliff:g id="TIME">%1$s</xliff:g> olana kadar kullanılabilmelidir"</string>
- <string name="power_discharge_by" msgid="4113180890060388350">"Saat yaklaşık <xliff:g id="TIME">%1$s</xliff:g> olana kadar kullanılabilmelidir (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only" msgid="92545648425937000">"Saat yaklaşık <xliff:g id="TIME">%1$s</xliff:g> olana kadar kullanılabilmelidir"</string>
+ <string name="power_discharge_by_enhanced" msgid="563438403581662942">"Kullanımınıza göre pilin <xliff:g id="TIME">%1$s</xliff:g> civarına kadar yeteceği tahmin ediliyor (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
+ <string name="power_discharge_by_only_enhanced" msgid="3268796172652988877">"Kullanımınıza göre pilin <xliff:g id="TIME">%1$s</xliff:g> civarına kadar yeteceği tahmin ediliyor"</string>
+ <string name="power_discharge_by" msgid="4113180890060388350">"Pilin <xliff:g id="TIME">%1$s</xliff:g> civarına kadar yeteceği tahmin ediliyor (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
+ <string name="power_discharge_by_only" msgid="92545648425937000">"Pilin <xliff:g id="TIME">%1$s</xliff:g> civarına kadar yeteceği tahmin ediliyor"</string>
<string name="power_discharge_by_only_short" msgid="5883041507426914446">"Şu saate kadar: <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_suggestion_battery_run_out" msgid="6332089307827787087">"Pilin tahmini bitiş zamanı: <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration_only" msgid="8956656616031395152">"En çok <xliff:g id="THRESHOLD">%1$s</xliff:g> kaldı"</string>
diff --git a/packages/SettingsLib/res/values-uk/strings.xml b/packages/SettingsLib/res/values-uk/strings.xml
index 442c52e..a95105b 100644
--- a/packages/SettingsLib/res/values-uk/strings.xml
+++ b/packages/SettingsLib/res/values-uk/strings.xml
@@ -551,14 +551,10 @@
<string name="guest_new_guest" msgid="3482026122932643557">"Додати гостя"</string>
<string name="guest_exit_guest" msgid="5908239569510734136">"Видалити гостя"</string>
<string name="guest_nickname" msgid="6332276931583337261">"Гість"</string>
- <!-- no translation found for cached_apps_freezer_device_default (2616594131750144342) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_disabled (4816382260660472042) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_enabled (8866703500183051546) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_reboot_dialog_text (695330563489230096) -->
- <skip />
+ <string name="cached_apps_freezer_device_default" msgid="2616594131750144342">"Пристрій за умовчанням"</string>
+ <string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Вимкнено"</string>
+ <string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Увімкнено"</string>
+ <string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Щоб застосувати ці зміни, перезапустіть пристрій. Перезапустіть пристрій або скасуйте зміни."</string>
<!-- no translation found for accessibility_work_profile_app_description (5470883112342119165) -->
<skip />
</resources>
diff --git a/packages/SettingsLib/res/values-vi/strings.xml b/packages/SettingsLib/res/values-vi/strings.xml
index 4f93fe3..12241f1 100644
--- a/packages/SettingsLib/res/values-vi/strings.xml
+++ b/packages/SettingsLib/res/values-vi/strings.xml
@@ -549,14 +549,10 @@
<string name="guest_new_guest" msgid="3482026122932643557">"Thêm khách"</string>
<string name="guest_exit_guest" msgid="5908239569510734136">"Xóa phiên khách"</string>
<string name="guest_nickname" msgid="6332276931583337261">"Khách"</string>
- <!-- no translation found for cached_apps_freezer_device_default (2616594131750144342) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_disabled (4816382260660472042) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_enabled (8866703500183051546) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_reboot_dialog_text (695330563489230096) -->
- <skip />
+ <string name="cached_apps_freezer_device_default" msgid="2616594131750144342">"Cài đặt mặc định của thiết bị"</string>
+ <string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Đã tắt"</string>
+ <string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Đã bật"</string>
+ <string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Bạn phải khởi động lại thiết bị để áp dụng sự thay đổi này. Hãy khởi động lại ngay hoặc hủy."</string>
<!-- no translation found for accessibility_work_profile_app_description (5470883112342119165) -->
<skip />
</resources>
diff --git a/packages/SettingsLib/res/values-zh-rCN/arrays.xml b/packages/SettingsLib/res/values-zh-rCN/arrays.xml
index 3016f65..05b1b70 100644
--- a/packages/SettingsLib/res/values-zh-rCN/arrays.xml
+++ b/packages/SettingsLib/res/values-zh-rCN/arrays.xml
@@ -40,7 +40,7 @@
<item msgid="8339720953594087771">"正在连接到 <xliff:g id="NETWORK_NAME">%1$s</xliff:g>..."</item>
<item msgid="3028983857109369308">"正在通过 <xliff:g id="NETWORK_NAME">%1$s</xliff:g> 进行身份验证..."</item>
<item msgid="4287401332778341890">"正在从<xliff:g id="NETWORK_NAME">%1$s</xliff:g>获取IP地址..."</item>
- <item msgid="1043944043827424501">"已连接到 <xliff:g id="NETWORK_NAME">%1$s</xliff:g>"</item>
+ <item msgid="1043944043827424501">"已连接到“<xliff:g id="NETWORK_NAME">%1$s</xliff:g>”"</item>
<item msgid="7445993821842009653">"已暂停"</item>
<item msgid="1175040558087735707">"正在断开与 <xliff:g id="NETWORK_NAME">%1$s</xliff:g> 的连接..."</item>
<item msgid="699832486578171722">"已断开连接"</item>
diff --git a/packages/SettingsLib/res/values-zh-rCN/strings.xml b/packages/SettingsLib/res/values-zh-rCN/strings.xml
index 3d8b6d7..0a3ca12 100644
--- a/packages/SettingsLib/res/values-zh-rCN/strings.xml
+++ b/packages/SettingsLib/res/values-zh-rCN/strings.xml
@@ -549,14 +549,10 @@
<string name="guest_new_guest" msgid="3482026122932643557">"添加访客"</string>
<string name="guest_exit_guest" msgid="5908239569510734136">"移除访客"</string>
<string name="guest_nickname" msgid="6332276931583337261">"访客"</string>
- <!-- no translation found for cached_apps_freezer_device_default (2616594131750144342) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_disabled (4816382260660472042) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_enabled (8866703500183051546) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_reboot_dialog_text (695330563489230096) -->
- <skip />
+ <string name="cached_apps_freezer_device_default" msgid="2616594131750144342">"设备默认设置"</string>
+ <string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"已停用"</string>
+ <string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"已启用"</string>
+ <string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"设备必须重新启动才能应用此更改。您可以立即重新启动或取消。"</string>
<!-- no translation found for accessibility_work_profile_app_description (5470883112342119165) -->
<skip />
</resources>
diff --git a/packages/SettingsLib/res/values-zh-rHK/strings.xml b/packages/SettingsLib/res/values-zh-rHK/strings.xml
index b4905c7..495cc22 100644
--- a/packages/SettingsLib/res/values-zh-rHK/strings.xml
+++ b/packages/SettingsLib/res/values-zh-rHK/strings.xml
@@ -549,14 +549,10 @@
<string name="guest_new_guest" msgid="3482026122932643557">"新增訪客"</string>
<string name="guest_exit_guest" msgid="5908239569510734136">"移除訪客"</string>
<string name="guest_nickname" msgid="6332276931583337261">"訪客"</string>
- <!-- no translation found for cached_apps_freezer_device_default (2616594131750144342) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_disabled (4816382260660472042) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_enabled (8866703500183051546) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_reboot_dialog_text (695330563489230096) -->
- <skip />
+ <string name="cached_apps_freezer_device_default" msgid="2616594131750144342">"裝置預設設定"</string>
+ <string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"已停用"</string>
+ <string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"已啟用"</string>
+ <string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"您的裝置必須重新開機,才能套用此變更。請立即重新開機或取消。"</string>
<!-- no translation found for accessibility_work_profile_app_description (5470883112342119165) -->
<skip />
</resources>
diff --git a/packages/SettingsLib/res/values-zh-rTW/strings.xml b/packages/SettingsLib/res/values-zh-rTW/strings.xml
index 9a3f2f9..9445268 100644
--- a/packages/SettingsLib/res/values-zh-rTW/strings.xml
+++ b/packages/SettingsLib/res/values-zh-rTW/strings.xml
@@ -549,14 +549,10 @@
<string name="guest_new_guest" msgid="3482026122932643557">"新增訪客"</string>
<string name="guest_exit_guest" msgid="5908239569510734136">"移除訪客"</string>
<string name="guest_nickname" msgid="6332276931583337261">"訪客"</string>
- <!-- no translation found for cached_apps_freezer_device_default (2616594131750144342) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_disabled (4816382260660472042) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_enabled (8866703500183051546) -->
- <skip />
- <!-- no translation found for cached_apps_freezer_reboot_dialog_text (695330563489230096) -->
- <skip />
+ <string name="cached_apps_freezer_device_default" msgid="2616594131750144342">"裝置預設設定"</string>
+ <string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"已停用"</string>
+ <string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"已啟用"</string>
+ <string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"裝置必須重新啟動才能套用這項變更。請立即重新啟動或取消變更。"</string>
<!-- no translation found for accessibility_work_profile_app_description (5470883112342119165) -->
<skip />
</resources>
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java
index b99fb05..1a4dd1e 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java
@@ -103,7 +103,8 @@
private KeyguardSecurityModel mSecurityModel;
private LockPatternUtils mLockPatternUtils;
- private KeyguardSecurityViewFlipper mSecurityViewFlipper;
+ @VisibleForTesting
+ KeyguardSecurityViewFlipper mSecurityViewFlipper;
private boolean mIsVerifyUnlockOnly;
private SecurityMode mCurrentSecuritySelection = SecurityMode.Invalid;
private KeyguardSecurityView mCurrentSecurityView;
@@ -375,6 +376,9 @@
}
public boolean startDisappearAnimation(Runnable onFinishRunnable) {
+ if (mCurrentSecuritySelection == SecurityMode.Password) {
+ mSecurityViewFlipper.getWindowInsetsController().hide(WindowInsets.Type.ime());
+ }
if (mCurrentSecuritySelection != SecurityMode.None) {
return getSecurityView(mCurrentSecuritySelection).startDisappearAnimation(
onFinishRunnable);
@@ -397,7 +401,8 @@
return mSecurityViewFlipper.getTitle();
}
- private KeyguardSecurityView getSecurityView(SecurityMode securityMode) {
+ @VisibleForTesting
+ protected KeyguardSecurityView getSecurityView(SecurityMode securityMode) {
final int securityViewIdForMode = getSecurityViewIdForMode(securityMode);
KeyguardSecurityView view = null;
final int children = mSecurityViewFlipper.getChildCount();
diff --git a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java
index cf3538c..e02b1ec 100644
--- a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java
+++ b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java
@@ -15,6 +15,7 @@
package com.android.systemui.globalactions;
import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
+import static android.view.WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM;
import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;
import static android.view.WindowManager.ScreenshotSource.SCREENSHOT_GLOBAL_ACTIONS;
import static android.view.WindowManager.TAKE_SCREENSHOT_FULLSCREEN;
@@ -485,6 +486,8 @@
attrs.setTitle("ActionsDialog");
attrs.layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;
mDialog.getWindow().setAttributes(attrs);
+ // Don't acquire soft keyboard focus, to avoid destroying state when capturing bugreports
+ mDialog.getWindow().setFlags(FLAG_ALT_FOCUSABLE_IM, FLAG_ALT_FOCUSABLE_IM);
mDialog.show();
mWindowManagerFuncs.onGlobalActionsShown();
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/RotationButtonController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/RotationButtonController.java
index 0147e7f..ba32327 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/RotationButtonController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/RotationButtonController.java
@@ -29,6 +29,7 @@
import android.os.Looper;
import android.os.RemoteException;
import android.provider.Settings;
+import android.util.Log;
import android.view.IRotationWatcher.Stub;
import android.view.MotionEvent;
import android.view.Surface;
@@ -53,6 +54,7 @@
/** Contains logic that deals with showing a rotate suggestion button with animation. */
public class RotationButtonController {
+ private static final String TAG = "StatusBar/RotationButtonController";
private static final int BUTTON_FADE_IN_OUT_DURATION_MS = 100;
private static final int NAVBAR_HIDDEN_PENDING_ICON_TIMEOUT_MS = 20000;
@@ -138,6 +140,9 @@
try {
WindowManagerGlobal.getWindowManagerService()
.watchRotation(mRotationWatcher, mContext.getDisplay().getDisplayId());
+ } catch (IllegalArgumentException e) {
+ mListenersRegistered = false;
+ Log.w(TAG, "RegisterListeners for the display failed");
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
diff --git a/packages/SystemUI/tests/AndroidManifest.xml b/packages/SystemUI/tests/AndroidManifest.xml
index 12c7048..9c94b86 100644
--- a/packages/SystemUI/tests/AndroidManifest.xml
+++ b/packages/SystemUI/tests/AndroidManifest.xml
@@ -69,6 +69,11 @@
android:exported="false"
android:resizeableActivity="true" />
+ <activity
+ android:name="com.android.systemui.globalactions.GlobalActionsImeTest$TestActivity"
+ android:excludeFromRecents="true"
+ android:exported="false" />
+
<provider
android:name="androidx.lifecycle.ProcessLifecycleOwnerInitializer"
tools:replace="android:authorities"
diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerTest.java
index 64590fd..e324d84 100644
--- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerTest.java
+++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerTest.java
@@ -16,31 +16,75 @@
package com.android.keyguard;
+import static android.view.WindowInsets.Type.ime;
+
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
import android.content.Context;
-import android.test.UiThreadTest;
+import android.testing.AndroidTestingRunner;
+import android.testing.TestableLooper;
import android.view.LayoutInflater;
+import android.view.WindowInsetsController;
import androidx.test.filters.SmallTest;
-import androidx.test.runner.AndroidJUnit4;
import com.android.systemui.R;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.statusbar.policy.KeyguardStateController;
+import org.junit.Before;
+import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
@SmallTest
-@RunWith(AndroidJUnit4.class)
+@RunWith(AndroidTestingRunner.class)
+@TestableLooper.RunWithLooper()
public class KeyguardSecurityContainerTest extends SysuiTestCase {
- @UiThreadTest
+ @Mock
+ private KeyguardSecurityModel mKeyguardSecurityModel;
+ @Mock
+ private KeyguardStateController mKeyguardStateController;
+ @Mock
+ private KeyguardUpdateMonitor mKeyguardUpdateMonitor;
+ @Mock
+ private KeyguardSecurityContainer.SecurityCallback mSecurityCallback;
+ @Mock
+ private KeyguardSecurityView mSecurityView;
+ @Mock
+ private WindowInsetsController mWindowInsetsController;
+ @Mock
+ private KeyguardSecurityViewFlipper mSecurityViewFlipper;
+ @Rule
+ public MockitoRule mRule = MockitoJUnit.rule();
+ private KeyguardSecurityContainer mKeyguardSecurityContainer;
+
+ @Before
+ public void setup() {
+ mDependency.injectTestDependency(KeyguardStateController.class, mKeyguardStateController);
+ mDependency.injectTestDependency(KeyguardSecurityModel.class, mKeyguardSecurityModel);
+ mDependency.injectTestDependency(KeyguardUpdateMonitor.class, mKeyguardUpdateMonitor);
+ mKeyguardSecurityContainer = new KeyguardSecurityContainer(getContext()) {
+ @Override
+ protected KeyguardSecurityView getSecurityView(
+ KeyguardSecurityModel.SecurityMode securityMode) {
+ return mSecurityView;
+ }
+ };
+ mKeyguardSecurityContainer.mSecurityViewFlipper = mSecurityViewFlipper;
+ when(mSecurityViewFlipper.getWindowInsetsController()).thenReturn(mWindowInsetsController);
+ mKeyguardSecurityContainer.setSecurityCallback(mSecurityCallback);
+ }
+
@Test
public void showSecurityScreen_canInflateAllModes() {
- mDependency.injectMockDependency(KeyguardStateController.class);
- KeyguardSecurityContainer keyguardSecurityContainer =
- new KeyguardSecurityContainer(getContext());
-
Context context = getContext();
for (int theme : new int[] {R.style.Theme_SystemUI, R.style.Theme_SystemUI_Light}) {
@@ -49,7 +93,7 @@
KeyguardSecurityModel.SecurityMode[] modes =
KeyguardSecurityModel.SecurityMode.values();
for (KeyguardSecurityModel.SecurityMode mode : modes) {
- final int resId = keyguardSecurityContainer.getLayoutIdFor(mode);
+ final int resId = mKeyguardSecurityContainer.getLayoutIdFor(mode);
if (resId == 0) {
continue;
}
@@ -57,4 +101,15 @@
}
}
}
+
+ @Test
+ public void startDisappearAnimation_animatesKeyboard() {
+ when(mKeyguardSecurityModel.getSecurityMode(anyInt())).thenReturn(
+ KeyguardSecurityModel.SecurityMode.Password);
+ mKeyguardSecurityContainer.showPrimarySecurityScreen(false /* turningOff */);
+
+ mKeyguardSecurityContainer.startDisappearAnimation(null);
+ verify(mSecurityView).startDisappearAnimation(eq(null));
+ verify(mWindowInsetsController).hide(eq(ime()));
+ }
}
\ No newline at end of file
diff --git a/packages/SystemUI/tests/src/com/android/systemui/globalactions/GlobalActionsImeTest.java b/packages/SystemUI/tests/src/com/android/systemui/globalactions/GlobalActionsImeTest.java
new file mode 100644
index 0000000..9629079
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/globalactions/GlobalActionsImeTest.java
@@ -0,0 +1,152 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.globalactions;
+
+import static android.view.WindowInsets.Type.ime;
+
+import static org.junit.Assert.assertTrue;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.os.SystemClock;
+import android.view.View;
+import android.view.WindowInsets;
+import android.view.WindowInsetsController;
+import android.widget.EditText;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.test.filters.LargeTest;
+import androidx.test.platform.app.InstrumentationRegistry;
+import androidx.test.rule.ActivityTestRule;
+
+import org.junit.Rule;
+import org.junit.Test;
+
+import java.util.concurrent.TimeUnit;
+import java.util.function.BooleanSupplier;
+
+@LargeTest
+public class GlobalActionsImeTest {
+
+ @Rule
+ public ActivityTestRule<TestActivity> mActivityTestRule = new ActivityTestRule<>(
+ TestActivity.class, false, false);
+
+ /**
+ * This test verifies that GlobalActions, which is frequently used to capture bugreports,
+ * doesn't interfere with the IME, i.e. soft-keyboard state.
+ */
+ @Test
+ public void testGlobalActions_doesntStealImeControl() {
+ final TestActivity activity = mActivityTestRule.launchActivity(null);
+
+ activity.waitFor(() -> activity.mHasFocus && activity.mControlsIme && activity.mImeVisible);
+
+ InstrumentationRegistry.getInstrumentation().getUiAutomation().executeShellCommand(
+ "input keyevent --longpress POWER"
+ );
+
+ activity.waitFor(() -> !activity.mHasFocus);
+ // Give the dialog time to animate in, and steal IME focus. Unfortunately, there's currently
+ // no better way to wait for this.
+ SystemClock.sleep(TimeUnit.SECONDS.toMillis(2));
+
+ runAssertionOnMainThread(() -> {
+ assertTrue("IME should remain visible behind GlobalActions, but didn't",
+ activity.mControlsIme);
+ assertTrue("App behind GlobalActions should remain in control of IME, but didn't",
+ activity.mImeVisible);
+ });
+ }
+
+ /** Like Instrumentation.runOnMainThread(), but forwards AssertionErrors to the caller. */
+ private static void runAssertionOnMainThread(Runnable r) {
+ AssertionError[] t = new AssertionError[1];
+ InstrumentationRegistry.getInstrumentation().runOnMainSync(() -> {
+ try {
+ r.run();
+ } catch (AssertionError e) {
+ t[0] = e;
+ // Ignore assertion - throwing it here would crash the main thread.
+ }
+ });
+ if (t[0] != null) {
+ throw t[0];
+ }
+ }
+
+ public static class TestActivity extends Activity implements
+ WindowInsetsController.OnControllableInsetsChangedListener,
+ View.OnApplyWindowInsetsListener {
+
+ private EditText mContent;
+ boolean mHasFocus;
+ boolean mControlsIme;
+ boolean mImeVisible;
+
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ mContent = new EditText(this);
+ mContent.setCursorVisible(false); // Otherwise, main thread doesn't go idle.
+ setContentView(mContent);
+ mContent.requestFocus();
+
+ getWindow().getDecorView().setOnApplyWindowInsetsListener(this);
+ WindowInsetsController wic = mContent.getWindowInsetsController();
+ wic.addOnControllableInsetsChangedListener(this);
+ wic.show(ime());
+ }
+
+ @Override
+ public void onWindowFocusChanged(boolean hasFocus) {
+ synchronized (this) {
+ mHasFocus = hasFocus;
+ notifyAll();
+ }
+ }
+
+ @Override
+ public void onControllableInsetsChanged(@NonNull WindowInsetsController controller,
+ int typeMask) {
+ synchronized (this) {
+ mControlsIme = (typeMask & ime()) != 0;
+ notifyAll();
+ }
+ }
+
+ void waitFor(BooleanSupplier condition) {
+ synchronized (this) {
+ while (!condition.getAsBoolean()) {
+ try {
+ wait(TimeUnit.SECONDS.toMillis(5));
+ } catch (InterruptedException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ }
+ }
+
+ @Override
+ public WindowInsets onApplyWindowInsets(View v, WindowInsets insets) {
+ mImeVisible = insets.isVisible(ime());
+ return v.onApplyWindowInsets(insets);
+ }
+ }
+}
diff --git a/packages/Tethering/src/com/android/networkstack/tethering/EntitlementManager.java b/packages/Tethering/src/com/android/networkstack/tethering/EntitlementManager.java
index 23b8be1..3c6e8d8 100644
--- a/packages/Tethering/src/com/android/networkstack/tethering/EntitlementManager.java
+++ b/packages/Tethering/src/com/android/networkstack/tethering/EntitlementManager.java
@@ -80,6 +80,7 @@
// {@link TetheringManager.TETHERING_USB}
// {@link TetheringManager.TETHERING_BLUETOOTH}
private final BitSet mCurrentDownstreams;
+ private final BitSet mExemptedDownstreams;
private final Context mContext;
private final SharedLog mLog;
private final SparseIntArray mEntitlementCacheValue;
@@ -100,6 +101,7 @@
mContext = ctx;
mLog = log.forSubComponent(TAG);
mCurrentDownstreams = new BitSet();
+ mExemptedDownstreams = new BitSet();
mCurrentEntitlementResults = new SparseIntArray();
mEntitlementCacheValue = new SparseIntArray();
mPermissionChangeCallback = callback;
@@ -150,14 +152,30 @@
private boolean isCellularUpstreamPermitted(final TetheringConfiguration config) {
if (!isTetherProvisioningRequired(config)) return true;
- // If provisioning is required and EntitlementManager doesn't know any downstreams,
- // cellular upstream should not be allowed.
- if (mCurrentDownstreams.isEmpty()) return false;
+ // If provisioning is required and EntitlementManager doesn't know any downstreams, cellular
+ // upstream should not be enabled. Enable cellular upstream for exempted downstreams only
+ // when there is no non-exempted downstream.
+ if (mCurrentDownstreams.isEmpty()) return !mExemptedDownstreams.isEmpty();
return mCurrentEntitlementResults.indexOfValue(TETHER_ERROR_NO_ERROR) > -1;
}
/**
+ * Set exempted downstream type. If there is only exempted downstream type active,
+ * corresponding entitlement check will not be run and cellular upstream will be permitted
+ * by default. If a privileged app enables tethering without a provisioning check, and then
+ * another app enables tethering of the same type but does not disable the provisioning check,
+ * then the downstream immediately loses exempt status and a provisioning check is run.
+ * If any non-exempted downstream type is active, the cellular upstream will be gated by the
+ * result of entitlement check from non-exempted downstreams. If entitlement check is still
+ * in progress on non-exempt downstreams, ceullar upstream would default be disabled. When any
+ * non-exempted downstream gets positive entitlement result, ceullar upstream will be enabled.
+ */
+ public void setExemptedDownstreamType(final int type) {
+ mExemptedDownstreams.set(type, true);
+ }
+
+ /**
* This is called when tethering starts.
* Launch provisioning app if upstream is cellular.
*
@@ -170,6 +188,8 @@
mCurrentDownstreams.set(downstreamType, true);
+ mExemptedDownstreams.set(downstreamType, false);
+
final TetheringConfiguration config = mFetcher.fetchTetheringConfiguration();
if (!isTetherProvisioningRequired(config)) return;
@@ -200,6 +220,7 @@
// "tethering supported" may change without without tethering being notified properly.
// Remove the mapping all the time no matter provisioning is required or not.
removeDownstreamMapping(downstreamType);
+ mExemptedDownstreams.set(downstreamType, false);
}
/**
@@ -505,6 +526,13 @@
if (!mWaiting.block(DUMP_TIMEOUT)) {
pw.println("... dump timed out after " + DUMP_TIMEOUT + "ms");
}
+ pw.print("Exempted: [");
+ for (int type = mExemptedDownstreams.nextSetBit(0); type >= 0;
+ type = mExemptedDownstreams.nextSetBit(type + 1)) {
+ pw.print(typeString(type));
+ pw.print(", ");
+ }
+ pw.println("]");
}
private static String typeString(int type) {
diff --git a/packages/Tethering/src/com/android/networkstack/tethering/Tethering.java b/packages/Tethering/src/com/android/networkstack/tethering/Tethering.java
index 753abc9..ae6119f2 100644
--- a/packages/Tethering/src/com/android/networkstack/tethering/Tethering.java
+++ b/packages/Tethering/src/com/android/networkstack/tethering/Tethering.java
@@ -516,8 +516,12 @@
}
mActiveTetheringRequests.put(request.tetheringType, request);
- mEntitlementMgr.startProvisioningIfNeeded(request.tetheringType,
- request.showProvisioningUi);
+ if (request.exemptFromEntitlementCheck) {
+ mEntitlementMgr.setExemptedDownstreamType(request.tetheringType);
+ } else {
+ mEntitlementMgr.startProvisioningIfNeeded(request.tetheringType,
+ request.showProvisioningUi);
+ }
enableTetheringInternal(request.tetheringType, true /* enabled */, listener);
});
}
diff --git a/packages/Tethering/src/com/android/networkstack/tethering/TetheringService.java b/packages/Tethering/src/com/android/networkstack/tethering/TetheringService.java
index 3ed2115..d07c555f 100644
--- a/packages/Tethering/src/com/android/networkstack/tethering/TetheringService.java
+++ b/packages/Tethering/src/com/android/networkstack/tethering/TetheringService.java
@@ -16,6 +16,8 @@
package com.android.networkstack.tethering;
+import static android.Manifest.permission.ACCESS_NETWORK_STATE;
+import static android.Manifest.permission.TETHER_PRIVILEGED;
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
import static android.net.TetheringManager.TETHER_ERROR_NO_ACCESS_TETHERING_PERMISSION;
import static android.net.TetheringManager.TETHER_ERROR_NO_CHANGE_TETHERING_PERMISSION;
@@ -148,7 +150,11 @@
@Override
public void startTethering(TetheringRequestParcel request, String callerPkg,
IIntResultListener listener) {
- if (checkAndNotifyCommonError(callerPkg, listener)) return;
+ if (checkAndNotifyCommonError(callerPkg,
+ request.exemptFromEntitlementCheck /* onlyAllowPrivileged */,
+ listener)) {
+ return;
+ }
mTethering.startTethering(request, listener);
}
@@ -175,7 +181,7 @@
public void registerTetheringEventCallback(ITetheringEventCallback callback,
String callerPkg) {
try {
- if (!mService.hasTetherAccessPermission()) {
+ if (!hasTetherAccessPermission()) {
callback.onCallbackStopped(TETHER_ERROR_NO_ACCESS_TETHERING_PERMISSION);
return;
}
@@ -187,7 +193,7 @@
public void unregisterTetheringEventCallback(ITetheringEventCallback callback,
String callerPkg) {
try {
- if (!mService.hasTetherAccessPermission()) {
+ if (!hasTetherAccessPermission()) {
callback.onCallbackStopped(TETHER_ERROR_NO_ACCESS_TETHERING_PERMISSION);
return;
}
@@ -221,8 +227,13 @@
}
private boolean checkAndNotifyCommonError(String callerPkg, IIntResultListener listener) {
+ return checkAndNotifyCommonError(callerPkg, false /* onlyAllowPrivileged */, listener);
+ }
+
+ private boolean checkAndNotifyCommonError(final String callerPkg,
+ final boolean onlyAllowPrivileged, final IIntResultListener listener) {
try {
- if (!mService.hasTetherChangePermission(callerPkg)) {
+ if (!hasTetherChangePermission(callerPkg, onlyAllowPrivileged)) {
listener.onResult(TETHER_ERROR_NO_CHANGE_TETHERING_PERMISSION);
return true;
}
@@ -238,7 +249,7 @@
}
private boolean checkAndNotifyCommonError(String callerPkg, ResultReceiver receiver) {
- if (!mService.hasTetherChangePermission(callerPkg)) {
+ if (!hasTetherChangePermission(callerPkg, false /* onlyAllowPrivileged */)) {
receiver.send(TETHER_ERROR_NO_CHANGE_TETHERING_PERMISSION, null);
return true;
}
@@ -250,6 +261,30 @@
return false;
}
+ private boolean hasTetherPrivilegedPermission() {
+ return mService.checkCallingOrSelfPermission(TETHER_PRIVILEGED) == PERMISSION_GRANTED;
+ }
+
+ private boolean hasTetherChangePermission(final String callerPkg,
+ final boolean onlyAllowPrivileged) {
+ if (hasTetherPrivilegedPermission()) return true;
+
+ if (onlyAllowPrivileged || mTethering.isTetherProvisioningRequired()) return false;
+
+ int uid = Binder.getCallingUid();
+ // If callerPkg's uid is not same as Binder.getCallingUid(),
+ // checkAndNoteWriteSettingsOperation will return false and the operation will be
+ // denied.
+ return Settings.checkAndNoteWriteSettingsOperation(mService, uid, callerPkg,
+ false /* throwException */);
+ }
+
+ private boolean hasTetherAccessPermission() {
+ if (hasTetherPrivilegedPermission()) return true;
+
+ return mService.checkCallingOrSelfPermission(
+ ACCESS_NETWORK_STATE) == PERMISSION_GRANTED;
+ }
}
// if ro.tether.denied = true we default to no tethering
@@ -266,41 +301,6 @@
return tetherEnabledInSettings && mTethering.hasTetherableConfiguration();
}
- private boolean hasTetherChangePermission(String callerPkg) {
- if (checkCallingOrSelfPermission(
- android.Manifest.permission.TETHER_PRIVILEGED) == PERMISSION_GRANTED) {
- return true;
- }
-
- if (mTethering.isTetherProvisioningRequired()) return false;
-
-
- int uid = Binder.getCallingUid();
- // If callerPkg's uid is not same as Binder.getCallingUid(),
- // checkAndNoteWriteSettingsOperation will return false and the operation will be denied.
- if (Settings.checkAndNoteWriteSettingsOperation(mContext, uid, callerPkg,
- false /* throwException */)) {
- return true;
- }
-
- return false;
- }
-
- private boolean hasTetherAccessPermission() {
- if (checkCallingOrSelfPermission(
- android.Manifest.permission.TETHER_PRIVILEGED) == PERMISSION_GRANTED) {
- return true;
- }
-
- if (checkCallingOrSelfPermission(
- android.Manifest.permission.ACCESS_NETWORK_STATE) == PERMISSION_GRANTED) {
- return true;
- }
-
- return false;
- }
-
-
/**
* An injection method for testing.
*/
diff --git a/packages/Tethering/tests/unit/src/com/android/networkstack/tethering/EntitlementManagerTest.java b/packages/Tethering/tests/unit/src/com/android/networkstack/tethering/EntitlementManagerTest.java
index a692935..cdd0e24 100644
--- a/packages/Tethering/tests/unit/src/com/android/networkstack/tethering/EntitlementManagerTest.java
+++ b/packages/Tethering/tests/unit/src/com/android/networkstack/tethering/EntitlementManagerTest.java
@@ -543,4 +543,33 @@
assertEquals(1, mEnMgr.uiProvisionCount);
verify(mEntitlementFailedListener, times(1)).onUiEntitlementFailed(TETHERING_WIFI);
}
+
+ @Test
+ public void testsetExemptedDownstreamType() throws Exception {
+ setupForRequiredProvisioning();
+ // Cellular upstream is not permitted when no entitlement result.
+ assertFalse(mEnMgr.isCellularUpstreamPermitted());
+
+ // If there is exempted downstream and no other non-exempted downstreams, cellular is
+ // permitted.
+ mEnMgr.setExemptedDownstreamType(TETHERING_WIFI);
+ assertTrue(mEnMgr.isCellularUpstreamPermitted());
+
+ // If second downstream run entitlement check fail, cellular upstream is not permitted.
+ mEnMgr.fakeEntitlementResult = TETHER_ERROR_PROVISIONING_FAILED;
+ mEnMgr.notifyUpstream(true);
+ mLooper.dispatchAll();
+ mEnMgr.startProvisioningIfNeeded(TETHERING_USB, true);
+ mLooper.dispatchAll();
+ assertFalse(mEnMgr.isCellularUpstreamPermitted());
+
+ // When second downstream is down, exempted downstream can use cellular upstream.
+ assertEquals(1, mEnMgr.uiProvisionCount);
+ verify(mEntitlementFailedListener).onUiEntitlementFailed(TETHERING_USB);
+ mEnMgr.stopProvisioningIfNeeded(TETHERING_USB);
+ assertTrue(mEnMgr.isCellularUpstreamPermitted());
+
+ mEnMgr.stopProvisioningIfNeeded(TETHERING_WIFI);
+ assertFalse(mEnMgr.isCellularUpstreamPermitted());
+ }
}
diff --git a/packages/Tethering/tests/unit/src/com/android/networkstack/tethering/TetheringTest.java b/packages/Tethering/tests/unit/src/com/android/networkstack/tethering/TetheringTest.java
index fa260a4..2bd8ae0 100644
--- a/packages/Tethering/tests/unit/src/com/android/networkstack/tethering/TetheringTest.java
+++ b/packages/Tethering/tests/unit/src/com/android/networkstack/tethering/TetheringTest.java
@@ -57,6 +57,7 @@
import static org.junit.Assert.fail;
import static org.mockito.ArgumentMatchers.argThat;
import static org.mockito.ArgumentMatchers.notNull;
+import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.anyString;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.any;
@@ -172,6 +173,8 @@
private static final String TEST_P2P_IFNAME = "test_p2p-p2p0-0";
private static final String TEST_NCM_IFNAME = "test_ncm0";
private static final String TETHERING_NAME = "Tethering";
+ private static final String[] PROVISIONING_APP_NAME = {"some", "app"};
+ private static final String PROVISIONING_NO_UI_APP_NAME = "no_ui_app";
private static final int DHCPSERVER_START_TIMEOUT_MS = 1000;
@@ -539,16 +542,16 @@
}
private TetheringRequestParcel createTetheringRequestParcel(final int type) {
- return createTetheringRequestParcel(type, null, null);
+ return createTetheringRequestParcel(type, null, null, false);
}
private TetheringRequestParcel createTetheringRequestParcel(final int type,
- final LinkAddress serverAddr, final LinkAddress clientAddr) {
+ final LinkAddress serverAddr, final LinkAddress clientAddr, final boolean exempt) {
final TetheringRequestParcel request = new TetheringRequestParcel();
request.tetheringType = type;
request.localIPv4Address = serverAddr;
request.staticClientAddress = clientAddr;
- request.exemptFromEntitlementCheck = false;
+ request.exemptFromEntitlementCheck = exempt;
request.showProvisioningUi = false;
return request;
@@ -1659,7 +1662,7 @@
// Enable USB tethering and check that Tethering starts USB.
mTethering.startTethering(createTetheringRequestParcel(TETHERING_USB,
- null, null), firstResult);
+ null, null, false), firstResult);
mLooper.dispatchAll();
firstResult.assertHasResult();
verify(mUsbManager, times(1)).setCurrentFunctions(UsbManager.FUNCTION_RNDIS);
@@ -1667,7 +1670,7 @@
// Enable USB tethering again with the same request and expect no change to USB.
mTethering.startTethering(createTetheringRequestParcel(TETHERING_USB,
- null, null), secondResult);
+ null, null, false), secondResult);
mLooper.dispatchAll();
secondResult.assertHasResult();
verify(mUsbManager, never()).setCurrentFunctions(UsbManager.FUNCTION_NONE);
@@ -1676,7 +1679,7 @@
// Enable USB tethering with a different request and expect that USB is stopped and
// started.
mTethering.startTethering(createTetheringRequestParcel(TETHERING_USB,
- serverLinkAddr, clientLinkAddr), thirdResult);
+ serverLinkAddr, clientLinkAddr, false), thirdResult);
mLooper.dispatchAll();
thirdResult.assertHasResult();
verify(mUsbManager, times(1)).setCurrentFunctions(UsbManager.FUNCTION_NONE);
@@ -1700,7 +1703,7 @@
final ArgumentCaptor<DhcpServingParamsParcel> dhcpParamsCaptor =
ArgumentCaptor.forClass(DhcpServingParamsParcel.class);
mTethering.startTethering(createTetheringRequestParcel(TETHERING_USB,
- serverLinkAddr, clientLinkAddr), null);
+ serverLinkAddr, clientLinkAddr, false), null);
mLooper.dispatchAll();
verify(mUsbManager, times(1)).setCurrentFunctions(UsbManager.FUNCTION_RNDIS);
mTethering.interfaceStatusChanged(TEST_USB_IFNAME, true);
@@ -1762,6 +1765,69 @@
mLooper.stopAutoDispatch();
}
+ @Test
+ public void testExemptFromEntitlementCheck() throws Exception {
+ setupForRequiredProvisioning();
+ final TetheringRequestParcel wifiNotExemptRequest =
+ createTetheringRequestParcel(TETHERING_WIFI, null, null, false);
+ mTethering.startTethering(wifiNotExemptRequest, null);
+ mLooper.dispatchAll();
+ verify(mEntitleMgr).startProvisioningIfNeeded(TETHERING_WIFI, false);
+ verify(mEntitleMgr, never()).setExemptedDownstreamType(TETHERING_WIFI);
+ assertFalse(mEntitleMgr.isCellularUpstreamPermitted());
+ mTethering.stopTethering(TETHERING_WIFI);
+ mLooper.dispatchAll();
+ verify(mEntitleMgr).stopProvisioningIfNeeded(TETHERING_WIFI);
+ reset(mEntitleMgr);
+
+ setupForRequiredProvisioning();
+ final TetheringRequestParcel wifiExemptRequest =
+ createTetheringRequestParcel(TETHERING_WIFI, null, null, true);
+ mTethering.startTethering(wifiExemptRequest, null);
+ mLooper.dispatchAll();
+ verify(mEntitleMgr, never()).startProvisioningIfNeeded(TETHERING_WIFI, false);
+ verify(mEntitleMgr).setExemptedDownstreamType(TETHERING_WIFI);
+ assertTrue(mEntitleMgr.isCellularUpstreamPermitted());
+ mTethering.stopTethering(TETHERING_WIFI);
+ mLooper.dispatchAll();
+ verify(mEntitleMgr).stopProvisioningIfNeeded(TETHERING_WIFI);
+ reset(mEntitleMgr);
+
+ // If one app enables tethering without provisioning check first, then another app enables
+ // tethering of the same type but does not disable the provisioning check.
+ setupForRequiredProvisioning();
+ mTethering.startTethering(wifiExemptRequest, null);
+ mLooper.dispatchAll();
+ verify(mEntitleMgr, never()).startProvisioningIfNeeded(TETHERING_WIFI, false);
+ verify(mEntitleMgr).setExemptedDownstreamType(TETHERING_WIFI);
+ assertTrue(mEntitleMgr.isCellularUpstreamPermitted());
+ reset(mEntitleMgr);
+ setupForRequiredProvisioning();
+ mTethering.startTethering(wifiNotExemptRequest, null);
+ mLooper.dispatchAll();
+ verify(mEntitleMgr).startProvisioningIfNeeded(TETHERING_WIFI, false);
+ verify(mEntitleMgr, never()).setExemptedDownstreamType(TETHERING_WIFI);
+ assertFalse(mEntitleMgr.isCellularUpstreamPermitted());
+ mTethering.stopTethering(TETHERING_WIFI);
+ mLooper.dispatchAll();
+ verify(mEntitleMgr).stopProvisioningIfNeeded(TETHERING_WIFI);
+ reset(mEntitleMgr);
+ }
+
+ private void setupForRequiredProvisioning() {
+ // Produce some acceptable looking provision app setting if requested.
+ when(mResources.getStringArray(R.array.config_mobile_hotspot_provision_app))
+ .thenReturn(PROVISIONING_APP_NAME);
+ when(mResources.getString(R.string.config_mobile_hotspot_provision_app_no_ui))
+ .thenReturn(PROVISIONING_NO_UI_APP_NAME);
+ // Act like the CarrierConfigManager is present and ready unless told otherwise.
+ when(mContext.getSystemService(Context.CARRIER_CONFIG_SERVICE))
+ .thenReturn(mCarrierConfigManager);
+ when(mCarrierConfigManager.getConfigForSubId(anyInt())).thenReturn(mCarrierConfig);
+ mCarrierConfig.putBoolean(CarrierConfigManager.KEY_REQUIRE_ENTITLEMENT_CHECKS_BOOL, true);
+ mCarrierConfig.putBoolean(CarrierConfigManager.KEY_CARRIER_CONFIG_APPLIED_BOOL, true);
+ sendConfigurationChanged();
+ }
// TODO: Test that a request for hotspot mode doesn't interfere with an
// already operating tethering mode interface.
}
diff --git a/packages/WallpaperCropper/src/com/android/photos/views/TiledImageRenderer.java b/packages/WallpaperCropper/src/com/android/photos/views/TiledImageRenderer.java
index 210fdc6..3e053d5 100644
--- a/packages/WallpaperCropper/src/com/android/photos/views/TiledImageRenderer.java
+++ b/packages/WallpaperCropper/src/com/android/photos/views/TiledImageRenderer.java
@@ -20,9 +20,9 @@
import android.graphics.Bitmap;
import android.graphics.Rect;
import android.graphics.RectF;
-import android.util.LongSparseArray;
import android.util.DisplayMetrics;
import android.util.Log;
+import android.util.LongSparseArray;
import android.util.Pools.Pool;
import android.util.Pools.SynchronizedPool;
import android.view.View;
@@ -163,7 +163,7 @@
private static boolean isHighResolution(Context context) {
DisplayMetrics metrics = new DisplayMetrics();
- context.getDisplayNoVerify().getMetrics(metrics);
+ context.getDisplayNoVerify().getRealMetrics(metrics);
return metrics.heightPixels > 2048 || metrics.widthPixels > 2048;
}
diff --git a/packages/WallpaperCropper/src/com/android/wallpapercropper/WallpaperCropActivity.java b/packages/WallpaperCropper/src/com/android/wallpapercropper/WallpaperCropActivity.java
index fe9f60f..d8184f2 100644
--- a/packages/WallpaperCropper/src/com/android/wallpapercropper/WallpaperCropActivity.java
+++ b/packages/WallpaperCropper/src/com/android/wallpapercropper/WallpaperCropActivity.java
@@ -40,6 +40,7 @@
import android.view.Display;
import android.view.View;
import android.widget.Toast;
+import android.window.WindowMetricsHelper;
import com.android.gallery3d.common.Utils;
import com.android.gallery3d.exif.ExifInterface;
@@ -357,7 +358,8 @@
// Get the crop
boolean ltr = mCropView.getLayoutDirection() == View.LAYOUT_DIRECTION_LTR;
- Rect windowBounds = getWindowManager().getCurrentWindowMetrics().getBounds();
+ Rect windowBounds = WindowMetricsHelper.getBoundsExcludingNavigationBarAndCutout(
+ getWindowManager().getCurrentWindowMetrics());
boolean isPortrait = windowBounds.width() < windowBounds.height();
Point defaultWallpaperSize = getDefaultWallpaperSize(getResources(),
diff --git a/services/core/java/com/android/server/am/EventLogTags.logtags b/services/core/java/com/android/server/am/EventLogTags.logtags
index 823d2c8..b818ccf 100644
--- a/services/core/java/com/android/server/am/EventLogTags.logtags
+++ b/services/core/java/com/android/server/am/EventLogTags.logtags
@@ -106,4 +106,4 @@
30078 uc_finish_user_boot (userId|1|5)
30079 uc_dispatch_user_switch (oldUserId|1|5) (newUserId|1|5)
30080 uc_continue_user_switch (oldUserId|1|5) (newUserId|1|5)
-30081 uc_send_user_broadcast (userId|1|5) (IntentAction|3|)
\ No newline at end of file
+30081 uc_send_user_broadcast (userId|1|5),(IntentAction|3)
\ No newline at end of file
diff --git a/services/core/java/com/android/server/notification/ZenModeHelper.java b/services/core/java/com/android/server/notification/ZenModeHelper.java
index d862e4f..a490b9c 100644
--- a/services/core/java/com/android/server/notification/ZenModeHelper.java
+++ b/services/core/java/com/android/server/notification/ZenModeHelper.java
@@ -1369,7 +1369,7 @@
.setContentTitle(mContext.getResources().getString(title))
.setContentText(mContext.getResources().getString(content))
.setContentIntent(PendingIntent.getActivity(mContext, 0, onboardingIntent,
- PendingIntent.FLAG_UPDATE_CURRENT))
+ PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE))
.setAutoCancel(true)
.setLocalOnly(true)
.addExtras(extras)
diff --git a/services/core/java/com/android/server/pm/StagingManager.java b/services/core/java/com/android/server/pm/StagingManager.java
index a83fa32..b805a24 100644
--- a/services/core/java/com/android/server/pm/StagingManager.java
+++ b/services/core/java/com/android/server/pm/StagingManager.java
@@ -354,13 +354,19 @@
Slog.e(TAG, "Aborting checkpoint: " + errorMsg);
try {
if (supportsCheckpoint() && needsCheckpoint()) {
- mApexManager.revertActiveSessions();
+ // Only revert apex sessions if device supports updating apex
+ if (mApexManager.isApexSupported()) {
+ mApexManager.revertActiveSessions();
+ }
PackageHelper.getStorageManager().abortChanges(
"StagingManager initiated", false /*retry*/);
}
} catch (Exception e) {
Slog.wtf(TAG, "Failed to abort checkpoint", e);
- mApexManager.revertActiveSessions();
+ // Only revert apex sessions if device supports updating apex
+ if (mApexManager.isApexSupported()) {
+ mApexManager.revertActiveSessions();
+ }
mPowerManager.reboot(null);
}
}
diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java
index 16d96d9..29428a2 100644
--- a/services/core/java/com/android/server/pm/UserManagerService.java
+++ b/services/core/java/com/android/server/pm/UserManagerService.java
@@ -1330,6 +1330,9 @@
return userTypeDetails.getBadgeLabel(badgeIndex);
}
+ /**
+ * @return the color (not the resource ID) to be used for the user's badge in light theme
+ */
@Override
public @ColorRes int getUserBadgeColorResId(@UserIdInt int userId) {
checkManageOrInteractPermissionIfCallerInOtherProfileGroup(userId,
@@ -1337,11 +1340,26 @@
final UserInfo userInfo = getUserInfoNoChecks(userId);
final UserTypeDetails userTypeDetails = getUserTypeDetails(userInfo);
if (userInfo == null || userTypeDetails == null || !userTypeDetails.hasBadge()) {
+ Slog.e(LOG_TAG, "Requested badge dark color for non-badged user " + userId);
+ return Resources.ID_NULL;
+ }
+ return userTypeDetails.getBadgeColor(userInfo.profileBadge);
+ }
+
+ /**
+ * @return the color (not the resource ID) to be used for the user's badge in dark theme
+ */
+ @Override
+ public @ColorRes int getUserBadgeDarkColorResId(@UserIdInt int userId) {
+ checkManageOrInteractPermissionIfCallerInOtherProfileGroup(userId,
+ "getUserBadgeDarkColorResId");
+ final UserInfo userInfo = getUserInfoNoChecks(userId);
+ final UserTypeDetails userTypeDetails = getUserTypeDetails(userInfo);
+ if (userInfo == null || userTypeDetails == null || !userTypeDetails.hasBadge()) {
Slog.e(LOG_TAG, "Requested badge color for non-badged user " + userId);
return Resources.ID_NULL;
}
- final int badgeIndex = userInfo.profileBadge;
- return userTypeDetails.getBadgeColor(badgeIndex);
+ return userTypeDetails.getDarkThemeBadgeColor(userInfo.profileBadge);
}
@Override
diff --git a/services/core/java/com/android/server/pm/UserTypeDetails.java b/services/core/java/com/android/server/pm/UserTypeDetails.java
index 717737f..be6880e 100644
--- a/services/core/java/com/android/server/pm/UserTypeDetails.java
+++ b/services/core/java/com/android/server/pm/UserTypeDetails.java
@@ -116,11 +116,23 @@
*/
private final @Nullable int[] mBadgeColors;
+ /**
+ * Resource ID ({@link ColorRes}) of the colors badge put on icons when in dark theme.
+ * (The value is a resource ID referring to the color; it is not the color value itself).
+ *
+ * <p>This is an array because, in general, there may be multiple users of the same user type.
+ * In this case, the user is indexed according to its {@link UserInfo#profileBadge}.
+ *
+ * <p>Must be set if mIconBadge is set.
+ */
+ private final @Nullable int[] mDarkThemeBadgeColors;
+
private UserTypeDetails(@NonNull String name, boolean enabled, int maxAllowed,
@UserInfoFlag int baseType, @UserInfoFlag int defaultUserInfoPropertyFlags, int label,
int maxAllowedPerParent,
int iconBadge, int badgePlain, int badgeNoBackground,
@Nullable int[] badgeLabels, @Nullable int[] badgeColors,
+ @Nullable int[] darkThemeBadgeColors,
@Nullable Bundle defaultRestrictions) {
this.mName = name;
this.mEnabled = enabled;
@@ -136,6 +148,7 @@
this.mLabel = label;
this.mBadgeLabels = badgeLabels;
this.mBadgeColors = badgeColors;
+ this.mDarkThemeBadgeColors = darkThemeBadgeColors;
}
/**
@@ -222,6 +235,19 @@
return mBadgeColors[Math.min(badgeIndex, mBadgeColors.length - 1)];
}
+ /**
+ * Returns the Resource ID of the badgeIndexth dark theme badge color, where the badgeIndex is
+ * expected to be the {@link UserInfo#profileBadge} of the user.
+ * If dark theme badge colors haven't been set, use the light theme badge color.
+ * If badgeIndex exceeds the number of colors, returns the color for the highest index.
+ */
+ public @ColorRes int getDarkThemeBadgeColor(int badgeIndex) {
+ if (mDarkThemeBadgeColors == null || mDarkThemeBadgeColors.length == 0 || badgeIndex < 0) {
+ return getBadgeColor(badgeIndex);
+ }
+ return mDarkThemeBadgeColors[Math.min(badgeIndex, mDarkThemeBadgeColors.length - 1)];
+ }
+
public boolean isProfile() {
return (mBaseType & UserInfo.FLAG_PROFILE) != 0;
}
@@ -283,6 +309,8 @@
pw.println(mBadgeLabels != null ? mBadgeLabels.length : "0(null)");
pw.print(prefix); pw.print("mBadgeColors.length: ");
pw.println(mBadgeColors != null ? mBadgeColors.length : "0(null)");
+ pw.print(prefix); pw.print("mDarkThemeBadgeColors.length: ");
+ pw.println(mDarkThemeBadgeColors != null ? mDarkThemeBadgeColors.length : "0(null)");
}
/** Builder for a {@link UserTypeDetails}; see that class for documentation. */
@@ -298,6 +326,7 @@
private int mLabel = Resources.ID_NULL;
private @Nullable int[] mBadgeLabels = null;
private @Nullable int[] mBadgeColors = null;
+ private @Nullable int[] mDarkThemeBadgeColors = null;
private @DrawableRes int mIconBadge = Resources.ID_NULL;
private @DrawableRes int mBadgePlain = Resources.ID_NULL;
private @DrawableRes int mBadgeNoBackground = Resources.ID_NULL;
@@ -342,6 +371,14 @@
return this;
}
+ /**
+ * The badge colors when the badge is on a dark background.
+ */
+ public Builder setDarkThemeBadgeColors(@ColorRes int ... darkThemeBadgeColors) {
+ mDarkThemeBadgeColors = darkThemeBadgeColors;
+ return this;
+ }
+
public Builder setIconBadge(@DrawableRes int badgeIcon) {
mIconBadge = badgeIcon;
return this;
@@ -385,10 +422,10 @@
Preconditions.checkArgument(mBadgeColors != null && mBadgeColors.length != 0,
"UserTypeDetails " + mName + " has badge but no badgeColors.");
}
-
return new UserTypeDetails(mName, mEnabled, mMaxAllowed, mBaseType,
mDefaultUserInfoPropertyFlags, mLabel, mMaxAllowedPerParent,
mIconBadge, mBadgePlain, mBadgeNoBackground, mBadgeLabels, mBadgeColors,
+ mDarkThemeBadgeColors == null ? mBadgeColors : mDarkThemeBadgeColors,
mDefaultRestrictions);
}
diff --git a/services/core/java/com/android/server/pm/UserTypeFactory.java b/services/core/java/com/android/server/pm/UserTypeFactory.java
index 7d45516..2e8a267 100644
--- a/services/core/java/com/android/server/pm/UserTypeFactory.java
+++ b/services/core/java/com/android/server/pm/UserTypeFactory.java
@@ -116,6 +116,10 @@
com.android.internal.R.color.profile_badge_1,
com.android.internal.R.color.profile_badge_2,
com.android.internal.R.color.profile_badge_3)
+ .setDarkThemeBadgeColors(
+ com.android.internal.R.color.profile_badge_1_dark,
+ com.android.internal.R.color.profile_badge_2_dark,
+ com.android.internal.R.color.profile_badge_3_dark)
.setDefaultRestrictions(null);
}
@@ -292,6 +296,8 @@
setResAttributeArray(parser, builder::setBadgeLabels);
} else if (isProfile && "badge-colors".equals(childName)) {
setResAttributeArray(parser, builder::setBadgeColors);
+ } else if (isProfile && "badge-colors-dark".equals(childName)) {
+ setResAttributeArray(parser, builder::setDarkThemeBadgeColors);
} else {
Slog.w(LOG_TAG, "Unrecognized tag " + childName + " in "
+ parser.getPositionDescription());
diff --git a/services/core/java/com/android/server/policy/LegacyGlobalActions.java b/services/core/java/com/android/server/policy/LegacyGlobalActions.java
index 6eba59a..39f7ac0 100644
--- a/services/core/java/com/android/server/policy/LegacyGlobalActions.java
+++ b/services/core/java/com/android/server/policy/LegacyGlobalActions.java
@@ -16,6 +16,8 @@
package com.android.server.policy;
+import static android.view.WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM;
+
import android.app.ActivityManager;
import android.content.BroadcastReceiver;
import android.content.Context;
@@ -336,6 +338,8 @@
}
});
dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);
+ // Don't acquire soft keyboard focus, to avoid destroying state when capturing bugreports
+ mDialog.getWindow().setFlags(FLAG_ALT_FOCUSABLE_IM, FLAG_ALT_FOCUSABLE_IM);
dialog.setOnDismissListener(this);
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java
index f33e2eb..ed74e89 100644
--- a/services/core/java/com/android/server/wm/ActivityRecord.java
+++ b/services/core/java/com/android/server/wm/ActivityRecord.java
@@ -2120,12 +2120,20 @@
@Override
boolean fillsParent() {
- return occludesParent();
+ return occludesParent(true /* includingFinishing */);
}
- /** Returns true if this activity is opaque and fills the entire space of this task. */
+ /** Returns true if this activity is not finishing, is opaque and fills the entire space of
+ * this task. */
boolean occludesParent() {
- return !finishing && mOccludesParent;
+ return occludesParent(false /* includingFinishing */);
+ }
+
+ private boolean occludesParent(boolean includingFinishing) {
+ if (!includingFinishing && finishing) {
+ return false;
+ }
+ return mOccludesParent;
}
boolean setOccludesParent(boolean occludesParent) {
@@ -7547,7 +7555,7 @@
if (mThumbnail != null){
mThumbnail.dumpDebug(proto, THUMBNAIL);
}
- proto.write(FILLS_PARENT, mOccludesParent);
+ proto.write(FILLS_PARENT, fillsParent());
proto.write(APP_STOPPED, mAppStopped);
proto.write(TRANSLUCENT, !occludesParent());
proto.write(VISIBLE, mVisible);
diff --git a/services/core/java/com/android/server/wm/ActivityStack.java b/services/core/java/com/android/server/wm/ActivityStack.java
index 593e5e7..a84635d 100644
--- a/services/core/java/com/android/server/wm/ActivityStack.java
+++ b/services/core/java/com/android/server/wm/ActivityStack.java
@@ -1305,8 +1305,17 @@
/**
* Make sure that all activities that need to be visible in the stack (that is, they
* currently can be seen by the user) actually are and update their configuration.
+ * @param starting The top most activity in the task.
+ * The activity is either starting or resuming.
+ * Caller should ensure starting activity is visible.
+ * @param preserveWindows Flag indicating whether windows should be preserved when updating
+ * configuration in {@link mEnsureActivitiesVisibleHelper}.
+ * @param configChanges Parts of the configuration that changed for this activity for evaluating
+ * if the screen should be frozen as part of
+ * {@link mEnsureActivitiesVisibleHelper}.
+ *
*/
- void ensureActivitiesVisible(ActivityRecord starting, int configChanges,
+ void ensureActivitiesVisible(@Nullable ActivityRecord starting, int configChanges,
boolean preserveWindows) {
ensureActivitiesVisible(starting, configChanges, preserveWindows, true /* notifyClients */);
}
@@ -1315,9 +1324,19 @@
* Ensure visibility with an option to also update the configuration of visible activities.
* @see #ensureActivitiesVisible(ActivityRecord, int, boolean)
* @see RootWindowContainer#ensureActivitiesVisible(ActivityRecord, int, boolean)
+ * @param starting The top most activity in the task.
+ * The activity is either starting or resuming.
+ * Caller should ensure starting activity is visible.
+ * @param notifyClients Flag indicating whether the visibility updates should be sent to the
+ * clients in {@link mEnsureActivitiesVisibleHelper}.
+ * @param preserveWindows Flag indicating whether windows should be preserved when updating
+ * configuration in {@link mEnsureActivitiesVisibleHelper}.
+ * @param configChanges Parts of the configuration that changed for this activity for evaluating
+ * if the screen should be frozen as part of
+ * {@link mEnsureActivitiesVisibleHelper}.
*/
// TODO: Should be re-worked based on the fact that each task as a stack in most cases.
- void ensureActivitiesVisible(ActivityRecord starting, int configChanges,
+ void ensureActivitiesVisible(@Nullable ActivityRecord starting, int configChanges,
boolean preserveWindows, boolean notifyClients) {
mTopActivityOccludesKeyguard = false;
mTopDismissingKeyguardActivity = null;
diff --git a/services/core/java/com/android/server/wm/ActivityStarter.java b/services/core/java/com/android/server/wm/ActivityStarter.java
index 79e8ee3..bcdd6e3 100644
--- a/services/core/java/com/android/server/wm/ActivityStarter.java
+++ b/services/core/java/com/android/server/wm/ActivityStarter.java
@@ -1539,7 +1539,10 @@
*
* Note: This method should only be called from {@link #startActivityUnchecked}.
*/
- private int startActivityInner(final ActivityRecord r, ActivityRecord sourceRecord,
+
+ // TODO(b/152429287): Make it easier to exercise code paths through startActivityInner
+ @VisibleForTesting
+ int startActivityInner(final ActivityRecord r, ActivityRecord sourceRecord,
IVoiceInteractionSession voiceSession, IVoiceInteractor voiceInteractor,
int startFlags, boolean doResume, ActivityOptions options, Task inTask,
boolean restrictedBgActivity) {
@@ -1660,7 +1663,10 @@
// Also, we don't want to resume activities in a task that currently has an overlay
// as the starting activity just needs to be in the visible paused state until the
// over is removed.
- mTargetStack.ensureActivitiesVisible(mStartActivity, 0, !PRESERVE_WINDOWS);
+ // Passing {@code null} as the start parameter ensures all activities are made
+ // visible.
+ mTargetStack.ensureActivitiesVisible(null /* starting */,
+ 0 /* configChanges */, !PRESERVE_WINDOWS);
// Go ahead and tell window manager to execute app transition for this activity
// since the app transition will not be triggered through the resume channel.
mTargetStack.getDisplay().mDisplayContent.executeAppTransition();
diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
index 36caeec..f21ec6b 100644
--- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
+++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
@@ -3340,7 +3340,7 @@
// After reparenting (which only resizes the task to the stack bounds), resize the
// task to the actual bounds provided
- task.resize(bounds, resizeMode, preserveWindow, !DEFER_RESUME);
+ task.resize(bounds, resizeMode, preserveWindow);
}
} finally {
Binder.restoreCallingIdentity(ident);
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java
index 0f09752..e31eaf7 100644
--- a/services/core/java/com/android/server/wm/DisplayContent.java
+++ b/services/core/java/com/android/server/wm/DisplayContent.java
@@ -5527,7 +5527,7 @@
/**
* The animating activity which shows the recents task list. It is set between
* {@link RecentsAnimationController#initialize} and
- * {@link RecentsAnimationController#cancelAnimation}.
+ * {@link RecentsAnimationController#cleanupAnimation}.
*/
private ActivityRecord mAnimatingRecents;
@@ -5550,14 +5550,25 @@
* If {@link #mAnimatingRecents} still has fixed rotation, it should be moved to top so we
* don't clear {@link #mFixedRotationLaunchingApp} that will be handled by transition.
*/
- void onFinishRecentsAnimation() {
+ void onFinishRecentsAnimation(boolean moveRecentsToBack) {
final ActivityRecord animatingRecents = mAnimatingRecents;
mAnimatingRecents = null;
- if (animatingRecents != null && animatingRecents == mFixedRotationLaunchingApp
- && !animatingRecents.hasFixedRotationTransform()) {
- // The recents activity won't be the top, such as giving up the swipe up gesture
- // and return to the original top.
+ if (!moveRecentsToBack) {
+ // The recents activity will be the top, such as staying at recents list or
+ // returning to home (if home and recents are the same activity).
+ return;
+ }
+
+ if (animatingRecents != null && animatingRecents == mFixedRotationLaunchingApp) {
+ // Because it won't affect display orientation, just finish the transform.
+ animatingRecents.finishFixedRotationTransform();
mFixedRotationLaunchingApp = null;
+ } else {
+ // If there is already a launching activity that is not the recents, before its
+ // transition is completed, the recents animation may be started. So if the recents
+ // activity won't be the top, the display orientation should be updated according
+ // to the current top activity.
+ continueUpdateOrientationForDiffOrienLaunchingApp();
}
}
diff --git a/services/core/java/com/android/server/wm/EmbeddedWindowController.java b/services/core/java/com/android/server/wm/EmbeddedWindowController.java
index 484a5a8..9bbd4cd 100644
--- a/services/core/java/com/android/server/wm/EmbeddedWindowController.java
+++ b/services/core/java/com/android/server/wm/EmbeddedWindowController.java
@@ -28,6 +28,7 @@
import android.util.Slog;
import android.view.IWindow;
import android.view.InputApplicationHandle;
+import android.view.InputChannel;
/**
* Keeps track of embedded windows.
@@ -95,7 +96,7 @@
void remove(IWindow client) {
for (int i = mWindows.size() - 1; i >= 0; i--) {
if (mWindows.valueAt(i).mClient.asBinder() == client.asBinder()) {
- mWindows.removeAt(i);
+ mWindows.removeAt(i).onRemoved();
return;
}
}
@@ -104,7 +105,7 @@
void onWindowRemoved(WindowState host) {
for (int i = mWindows.size() - 1; i >= 0; i--) {
if (mWindows.valueAt(i).mHostWindowState == host) {
- mWindows.removeAt(i);
+ mWindows.removeAt(i).onRemoved();
}
}
}
@@ -132,6 +133,8 @@
@Nullable final ActivityRecord mHostActivityRecord;
final int mOwnerUid;
final int mOwnerPid;
+ final WindowManagerService mWmService;
+ InputChannel mInputChannel;
/**
* @param clientToken client token used to clean up the map if the embedding process dies
@@ -142,8 +145,9 @@
* @param ownerUid calling uid
* @param ownerPid calling pid used for anr blaming
*/
- EmbeddedWindow(IWindow clientToken, WindowState hostWindowState, int ownerUid,
- int ownerPid) {
+ EmbeddedWindow(WindowManagerService service, IWindow clientToken,
+ WindowState hostWindowState, int ownerUid, int ownerPid) {
+ mWmService = service;
mClient = clientToken;
mHostWindowState = hostWindowState;
mHostActivityRecord = (mHostWindowState != null) ? mHostWindowState.mActivityRecord
@@ -167,5 +171,29 @@
return new InputApplicationHandle(
mHostWindowState.mInputWindowHandle.inputApplicationHandle);
}
+
+ InputChannel openInputChannel() {
+ final String name = getName();
+
+ final InputChannel[] inputChannels = InputChannel.openInputChannelPair(name);
+ mInputChannel = inputChannels[0];
+ final InputChannel clientChannel = inputChannels[1];
+ mWmService.mInputManager.registerInputChannel(mInputChannel);
+
+ if (mInputChannel.getToken() != clientChannel.getToken()) {
+ throw new IllegalStateException("Client and Server tokens are expected to"
+ + "be the same");
+ }
+
+ return clientChannel;
+ }
+
+ void onRemoved() {
+ if (mInputChannel != null) {
+ mWmService.mInputManager.unregisterInputChannel(mInputChannel);
+ mInputChannel.dispose();
+ mInputChannel = null;
+ }
+ }
}
}
diff --git a/services/core/java/com/android/server/wm/EnsureActivitiesVisibleHelper.java b/services/core/java/com/android/server/wm/EnsureActivitiesVisibleHelper.java
index c92de2b..c4e03f5 100644
--- a/services/core/java/com/android/server/wm/EnsureActivitiesVisibleHelper.java
+++ b/services/core/java/com/android/server/wm/EnsureActivitiesVisibleHelper.java
@@ -21,6 +21,7 @@
import static com.android.server.wm.ActivityStack.TAG_VISIBILITY;
import static com.android.server.wm.ActivityTaskManagerDebugConfig.DEBUG_VISIBILITY;
+import android.annotation.Nullable;
import android.util.Slog;
import com.android.internal.util.function.pooled.PooledConsumer;
@@ -42,6 +43,16 @@
mContiner = container;
}
+ /**
+ * Update all attributes except {@link mContiner} to use in subsequent calculations.
+ *
+ * @param starting The activity that is being started
+ * @param configChanges Parts of the configuration that changed for this activity for evaluating
+ * if the screen should be frozen.
+ * @param preserveWindows Flag indicating whether windows should be preserved when updating.
+ * @param notifyClients Flag indicating whether the configuration and visibility changes shoulc
+ * be sent to the clients.
+ */
void reset(ActivityRecord starting, int configChanges, boolean preserveWindows,
boolean notifyClients) {
mStarting = starting;
@@ -60,8 +71,17 @@
* Ensure visibility with an option to also update the configuration of visible activities.
* @see ActivityStack#ensureActivitiesVisible(ActivityRecord, int, boolean)
* @see RootWindowContainer#ensureActivitiesVisible(ActivityRecord, int, boolean)
+ * @param starting The top most activity in the task.
+ * The activity is either starting or resuming.
+ * Caller should ensure starting activity is visible.
+ *
+ * @param configChanges Parts of the configuration that changed for this activity for evaluating
+ * if the screen should be frozen.
+ * @param preserveWindows Flag indicating whether windows should be preserved when updating.
+ * @param notifyClients Flag indicating whether the configuration and visibility changes shoulc
+ * be sent to the clients.
*/
- void process(ActivityRecord starting, int configChanges, boolean preserveWindows,
+ void process(@Nullable ActivityRecord starting, int configChanges, boolean preserveWindows,
boolean notifyClients) {
reset(starting, configChanges, preserveWindows, notifyClients);
diff --git a/services/core/java/com/android/server/wm/InsetsSourceProvider.java b/services/core/java/com/android/server/wm/InsetsSourceProvider.java
index dfd44f5..a6a21fc 100644
--- a/services/core/java/com/android/server/wm/InsetsSourceProvider.java
+++ b/services/core/java/com/android/server/wm/InsetsSourceProvider.java
@@ -219,6 +219,8 @@
return;
}
+ setServerVisible(mWin.wouldBeVisibleIfPolicyIgnored() && mWin.isVisibleByPolicy()
+ && !mWin.mGivenInsetsPending);
updateSourceFrame();
if (mControl != null) {
final Rect frame = mWin.getWindowFrames().mFrame;
@@ -228,8 +230,6 @@
mStateController.notifyControlChanged(mControlTarget);
}
}
- setServerVisible(mWin.wouldBeVisibleIfPolicyIgnored() && mWin.isVisibleByPolicy()
- && !mWin.mGivenInsetsPending);
}
/**
diff --git a/services/core/java/com/android/server/wm/RecentsAnimationController.java b/services/core/java/com/android/server/wm/RecentsAnimationController.java
index c96c664..d6ddcd0 100644
--- a/services/core/java/com/android/server/wm/RecentsAnimationController.java
+++ b/services/core/java/com/android/server/wm/RecentsAnimationController.java
@@ -734,13 +734,10 @@
if (reorderMode == REORDER_MOVE_TO_TOP || reorderMode == REORDER_KEEP_IN_PLACE) {
mDisplayContent.mAppTransition.notifyAppTransitionFinishedLocked(
mTargetActivityRecord.token);
- } else {
- // The target activity will be moved to original position (non-top). Since it won't
- // affect display orientation, just finish the transform.
- mTargetActivityRecord.finishFixedRotationTransform();
}
}
- mDisplayContent.mFixedRotationTransitionListener.onFinishRecentsAnimation();
+ mDisplayContent.mFixedRotationTransitionListener.onFinishRecentsAnimation(
+ reorderMode == REORDER_MOVE_TO_ORIGINAL_POSITION /* moveRecentsToBack */);
// Notify that the animation has ended
if (mStatusBar != null) {
diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java
index caa0ddb..4845da1 100644
--- a/services/core/java/com/android/server/wm/Task.java
+++ b/services/core/java/com/android/server/wm/Task.java
@@ -18,7 +18,6 @@
import static android.app.ActivityTaskManager.INVALID_TASK_ID;
import static android.app.ActivityTaskManager.RESIZE_MODE_FORCED;
-import static android.app.ActivityTaskManager.RESIZE_MODE_SYSTEM;
import static android.app.ActivityTaskManager.RESIZE_MODE_SYSTEM_SCREEN_ROTATION;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_ASSISTANT;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME;
@@ -29,7 +28,6 @@
import static android.app.WindowConfiguration.ROTATION_UNDEFINED;
import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM;
import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
-import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED;
import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY;
import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_SECONDARY;
import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED;
@@ -661,7 +659,7 @@
updateTaskDescription();
}
- boolean resize(Rect bounds, int resizeMode, boolean preserveWindow, boolean deferResume) {
+ boolean resize(Rect bounds, int resizeMode, boolean preserveWindow) {
mAtmService.deferWindowLayout();
try {
@@ -701,7 +699,7 @@
boolean kept = true;
if (updatedConfig) {
final ActivityRecord r = topRunningActivityLocked();
- if (r != null && !deferResume) {
+ if (r != null) {
kept = r.ensureActivityConfiguration(0 /* globalChanges */,
preserveWindow);
// Preserve other windows for resizing because if resizing happens when there
@@ -853,30 +851,11 @@
// TODO: Should this call be moved inside the resize method in WM?
toStack.prepareFreezingTaskBounds();
- // Make sure the task has the appropriate bounds/size for the stack it is in.
- final boolean toStackSplitScreenPrimary =
- toStackWindowingMode == WINDOWING_MODE_SPLIT_SCREEN_PRIMARY;
- final Rect configBounds = getRequestedOverrideBounds();
- if ((toStackWindowingMode == WINDOWING_MODE_FULLSCREEN
- || toStackWindowingMode == WINDOWING_MODE_SPLIT_SCREEN_SECONDARY)
- && !Objects.equals(configBounds, toStack.getRequestedOverrideBounds())) {
- kept = resize(toStack.getRequestedOverrideBounds(), RESIZE_MODE_SYSTEM,
- !mightReplaceWindow, deferResume);
- } else if (toStackWindowingMode == WINDOWING_MODE_FREEFORM) {
- Rect bounds = getLaunchBounds();
- if (bounds == null) {
- mStackSupervisor.getLaunchParamsController().layoutTask(this, null);
- bounds = configBounds;
- }
- kept = resize(bounds, RESIZE_MODE_FORCED, !mightReplaceWindow, deferResume);
- } else if (toStackSplitScreenPrimary || toStackWindowingMode == WINDOWING_MODE_PINNED) {
- if (toStackSplitScreenPrimary && moveStackMode == REPARENT_KEEP_STACK_AT_FRONT) {
- // Move recents to front so it is not behind home stack when going into docked
- // mode
- mStackSupervisor.moveRecentsStackToFront(reason);
- }
- kept = resize(toStack.getRequestedOverrideBounds(), RESIZE_MODE_SYSTEM,
- !mightReplaceWindow, deferResume);
+ if (toStackWindowingMode == WINDOWING_MODE_SPLIT_SCREEN_PRIMARY
+ && moveStackMode == REPARENT_KEEP_STACK_AT_FRONT) {
+ // Move recents to front so it is not behind home stack when going into docked
+ // mode
+ mStackSupervisor.moveRecentsStackToFront(reason);
}
} finally {
mAtmService.continueWindowLayout();
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index 814fa72..13a0b2c 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -8030,26 +8030,15 @@
IWindow window, IBinder hostInputToken, int flags, InputChannel outInputChannel) {
final InputApplicationHandle applicationHandle;
final String name;
- final InputChannel[] inputChannels;
final InputChannel clientChannel;
- final InputChannel serverChannel;
synchronized (mGlobalLock) {
EmbeddedWindowController.EmbeddedWindow win =
- new EmbeddedWindowController.EmbeddedWindow(window,
+ new EmbeddedWindowController.EmbeddedWindow(this, window,
mInputToWindowMap.get(hostInputToken), callingUid, callingPid);
- name = win.getName();
-
- inputChannels = InputChannel.openInputChannelPair(name);
- serverChannel = inputChannels[0];
- clientChannel = inputChannels[1];
- mInputManager.registerInputChannel(serverChannel);
+ clientChannel = win.openInputChannel();
mEmbeddedWindowController.add(clientChannel.getToken(), win);
- if (serverChannel.getToken() != clientChannel.getToken()) {
- throw new IllegalStateException("Client and Server channel are expected to"
- + "be the same");
- }
-
applicationHandle = win.getApplicationHandle();
+ name = win.getName();
}
updateInputChannel(clientChannel.getToken(), callingUid, callingPid, displayId, surface,
@@ -8057,10 +8046,6 @@
clientChannel.transferTo(outInputChannel);
clientChannel.dispose();
- // Prevent the java finalizer from breaking the input channel. But we won't
- // do any further management so we just release the java ref and let the
- // InputDispatcher hold the last ref.
- serverChannel.release();
}
private void updateInputChannel(IBinder channelToken, int callingUid, int callingPid,
diff --git a/services/core/java/com/android/server/wm/WindowToken.java b/services/core/java/com/android/server/wm/WindowToken.java
index 472773e..148264a 100644
--- a/services/core/java/com/android/server/wm/WindowToken.java
+++ b/services/core/java/com/android/server/wm/WindowToken.java
@@ -671,6 +671,11 @@
pw.print(" waitingToShow=true");
}
pw.println();
+ if (hasFixedRotationTransform()) {
+ pw.print(prefix);
+ pw.print("fixedRotationConfig=");
+ pw.println(mFixedRotationTransformState.mRotatedOverrideConfiguration);
+ }
}
@Override
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
index 02f4116..60d59b2 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
@@ -16155,18 +16155,24 @@
? R.string.personal_apps_suspension_tomorrow_text
: R.string.personal_apps_suspension_text);
final boolean ongoing = notificationState == PROFILE_OFF_DEADLINE_REACHED;
+ final int color = mContext.getColor(R.color.personal_apps_suspension_notification_color);
+ final Bundle extras = new Bundle();
+ // TODO: Create a separate string for this.
+ extras.putString(Notification.EXTRA_SUBSTITUTE_APP_NAME,
+ mContext.getString(R.string.notification_work_profile_content_description));
final Notification notification =
new Notification.Builder(mContext, SystemNotificationChannels.DEVICE_ADMIN)
- .setSmallIcon(android.R.drawable.stat_sys_warning)
+ .setSmallIcon(R.drawable.ic_corp_badge_no_background)
.setOngoing(ongoing)
.setAutoCancel(false)
.setContentTitle(mContext.getString(
R.string.personal_apps_suspension_title))
.setContentText(text)
.setStyle(new Notification.BigTextStyle().bigText(text))
- .setColor(mContext.getColor(R.color.system_notification_accent_color))
+ .setColor(color)
.addAction(turnProfileOnButton)
+ .addExtras(extras)
.build();
mInjector.getNotificationManager().notify(
SystemMessage.NOTE_PERSONAL_APPS_SUSPENDED, notification);
diff --git a/services/tests/servicestests/AndroidManifest.xml b/services/tests/servicestests/AndroidManifest.xml
index 270a3b5..3b38d94 100644
--- a/services/tests/servicestests/AndroidManifest.xml
+++ b/services/tests/servicestests/AndroidManifest.xml
@@ -79,6 +79,7 @@
<uses-permission android:name="android.permission.READ_DREAM_STATE"/>
<uses-permission android:name="android.permission.WRITE_DREAM_STATE"/>
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
+ <uses-permission android:name="android.permission.MODIFY_DAY_NIGHT_MODE"/>
<!-- Uses API introduced in O (26) -->
<uses-sdk android:minSdkVersion="1"
diff --git a/services/tests/servicestests/src/com/android/server/pm/UserManagerTest.java b/services/tests/servicestests/src/com/android/server/pm/UserManagerTest.java
index 6b3ee5a..44bb58f 100644
--- a/services/tests/servicestests/src/com/android/server/pm/UserManagerTest.java
+++ b/services/tests/servicestests/src/com/android/server/pm/UserManagerTest.java
@@ -347,6 +347,10 @@
final int badgeIndex = userInfo.profileBadge;
assertThat(mUserManager.getUserBadgeColor(userId)).isEqualTo(
Resources.getSystem().getColor(userTypeDetails.getBadgeColor(badgeIndex), null));
+ assertThat(mUserManager.getUserBadgeDarkColor(userId)).isEqualTo(
+ Resources.getSystem().getColor(userTypeDetails.getDarkThemeBadgeColor(badgeIndex),
+ null));
+
assertThat(mUserManager.getBadgedLabelForUser("Test", asHandle(userId))).isEqualTo(
Resources.getSystem().getString(userTypeDetails.getBadgeLabel(badgeIndex), "Test"));
diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java b/services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java
index edc9756..02d1f9b 100644
--- a/services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java
@@ -49,6 +49,7 @@
import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.times;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.verify;
+import static com.android.server.wm.ActivityStackSupervisor.PRESERVE_WINDOWS;
import static com.android.server.wm.WindowContainer.POSITION_BOTTOM;
import static com.android.server.wm.WindowContainer.POSITION_TOP;
@@ -56,10 +57,10 @@
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.ArgumentMatchers.anyObject;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
@@ -99,7 +100,6 @@
@Presubmit
@RunWith(WindowTestRunner.class)
public class ActivityStarterTests extends ActivityTestsBase {
- private ActivityStarter mStarter;
private ActivityStartController mController;
private ActivityMetricsLogger mActivityMetricsLogger;
private PackageManagerInternal mMockPackageManager;
@@ -127,8 +127,6 @@
mController = mock(ActivityStartController.class);
mActivityMetricsLogger = mock(ActivityMetricsLogger.class);
clearInvocations(mActivityMetricsLogger);
- mStarter = new ActivityStarter(mController, mService, mService.mStackSupervisor,
- mock(ActivityStartInterceptor.class));
}
@Test
@@ -181,6 +179,7 @@
* {@link ActivityStarter#execute} based on these preconditions and ensures the result matches
* the expected. It is important to note that the method also checks side effects of the start,
* such as ensuring {@link ActivityOptions#abort()} is called in the relevant scenarios.
+ *
* @param preconditions A bitmask representing the preconditions for the launch
* @param launchFlags The launch flags to be provided by the launch {@link Intent}.
* @param expectedResult The expected result from the launch.
@@ -202,7 +201,7 @@
final WindowProcessController wpc =
containsConditions(preconditions, PRECONDITION_NO_CALLER_APP)
? null : new WindowProcessController(service, ai, null, 0, -1, null, listener);
- doReturn(wpc).when(service).getProcessController(anyObject());
+ doReturn(wpc).when(service).getProcessController(any());
final Intent intent = new Intent();
intent.setFlags(launchFlags);
@@ -1034,4 +1033,46 @@
verify(recentTasks, times(1)).add(any());
}
+
+ @Test
+ public void testStartActivityInner_allSplitScreenPrimaryActivitiesVisible() {
+ // Given
+ final ActivityStarter starter = prepareStarter(0, false);
+
+ starter.setReason("testAllSplitScreenPrimaryActivitiesAreResumed");
+
+ final ActivityRecord targetRecord = new ActivityBuilder(mService).build();
+ targetRecord.setFocusable(false);
+ targetRecord.setVisibility(false);
+ final ActivityRecord sourceRecord = new ActivityBuilder(mService).build();
+
+ final ActivityStack stack = spy(
+ mRootWindowContainer.getDefaultTaskDisplayArea()
+ .createStack(WINDOWING_MODE_SPLIT_SCREEN_PRIMARY, ACTIVITY_TYPE_STANDARD,
+ /* onTop */true));
+
+ stack.addChild(targetRecord);
+
+ doReturn(stack).when(mRootWindowContainer)
+ .getLaunchStack(any(), any(), any(), anyBoolean(), any(), anyInt(), anyInt());
+
+ starter.mStartActivity = new ActivityBuilder(mService).build();
+
+ // When
+ starter.startActivityInner(
+ /* r */targetRecord,
+ /* sourceRecord */ sourceRecord,
+ /* voiceSession */null,
+ /* voiceInteractor */ null,
+ /* startFlags */ 0,
+ /* doResume */true,
+ /* options */null,
+ /* inTask */null,
+ /* restrictedBgActivity */false);
+
+ // Then
+ verify(stack).ensureActivitiesVisible(null, 0, !PRESERVE_WINDOWS);
+ verify(targetRecord).makeVisibleIfNeeded(null, true);
+ assertTrue(targetRecord.mVisibleRequested);
+ }
}
diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityTestsBase.java b/services/tests/wmtests/src/com/android/server/wm/ActivityTestsBase.java
index 466f1a9..1fefb0c 100644
--- a/services/tests/wmtests/src/com/android/server/wm/ActivityTestsBase.java
+++ b/services/tests/wmtests/src/com/android/server/wm/ActivityTestsBase.java
@@ -230,6 +230,7 @@
}
ActivityRecord build() {
+ SystemServicesTestRule.checkHoldsLock(mService.mGlobalLock);
try {
mService.deferWindowLayout();
return buildInner();
@@ -295,6 +296,7 @@
// fullscreen value is normally read from resources in ctor, so for testing we need
// to set it somewhere else since we can't mock resources.
doReturn(true).when(activity).occludesParent();
+ doReturn(true).when(activity).fillsParent();
mTask.addChild(activity);
// Make visible by default...
activity.setVisible(true);
@@ -393,6 +395,8 @@
}
Task build() {
+ SystemServicesTestRule.checkHoldsLock(mSupervisor.mService.mGlobalLock);
+
if (mStack == null && mCreateStack) {
TaskDisplayArea displayArea = mTaskDisplayArea != null ? mTaskDisplayArea
: mSupervisor.mRootWindowContainer.getDefaultTaskDisplayArea();
@@ -500,6 +504,8 @@
}
ActivityStack build() {
+ SystemServicesTestRule.checkHoldsLock(mRootWindowContainer.mWmService.mGlobalLock);
+
final int stackId = mStackId >= 0 ? mStackId : mTaskDisplayArea.getNextStackId();
final ActivityStack stack = mTaskDisplayArea.createStackUnchecked(
mWindowingMode, mActivityType, stackId, mOnTop, mInfo, mIntent,
diff --git a/services/tests/wmtests/src/com/android/server/wm/InsetsSourceProviderTest.java b/services/tests/wmtests/src/com/android/server/wm/InsetsSourceProviderTest.java
index 9bf9ffe..1d6dd0b 100644
--- a/services/tests/wmtests/src/com/android/server/wm/InsetsSourceProviderTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/InsetsSourceProviderTest.java
@@ -54,7 +54,6 @@
mSource.setVisible(true);
mProvider = new InsetsSourceProvider(mSource,
mDisplayContent.getInsetsStateController(), mDisplayContent);
- mProvider.setServerVisible(true);
mImeProvider = new InsetsSourceProvider(mImeSource,
mDisplayContent.getInsetsStateController(), mDisplayContent);
}
@@ -106,6 +105,7 @@
public void testPostLayout_frameProvider() {
final WindowState statusBar = createWindow(null, TYPE_APPLICATION, "statusBar");
statusBar.getFrameLw().set(0, 0, 500, 100);
+ statusBar.mHasSurface = true;
mProvider.setWindow(statusBar,
(displayFrames, windowState, rect) -> {
rect.set(10, 10, 20, 20);
diff --git a/services/tests/wmtests/src/com/android/server/wm/RecentsAnimationControllerTest.java b/services/tests/wmtests/src/com/android/server/wm/RecentsAnimationControllerTest.java
index 9066468..209db62 100644
--- a/services/tests/wmtests/src/com/android/server/wm/RecentsAnimationControllerTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/RecentsAnimationControllerTest.java
@@ -16,7 +16,6 @@
package com.android.server.wm;
-import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;
import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
import static android.view.Display.DEFAULT_DISPLAY;
@@ -159,7 +158,7 @@
hiddenActivity.setVisible(false);
mDefaultDisplay.getConfiguration().windowConfiguration.setRotation(
mDefaultDisplay.getRotation());
- mController.initialize(ACTIVITY_TYPE_HOME, new SparseBooleanArray(), homeActivity);
+ initializeRecentsAnimationController(mController, homeActivity);
// Ensure that we are animating the target activity as well
assertTrue(mController.isAnimatingTask(homeActivity.getTask()));
@@ -182,7 +181,7 @@
mDefaultDisplay.getConfiguration().windowConfiguration.setRotation(
mDefaultDisplay.getRotation());
- mController.initialize(ACTIVITY_TYPE_HOME, new SparseBooleanArray(), homeActivity);
+ initializeRecentsAnimationController(mController, homeActivity);
mController.startAnimation();
// Ensure that we are animating the app and wallpaper target
@@ -205,7 +204,7 @@
mDefaultDisplay.getConfiguration().windowConfiguration.setRotation(
mDefaultDisplay.getRotation());
- mController.initialize(ACTIVITY_TYPE_HOME, new SparseBooleanArray(), homeActivity);
+ initializeRecentsAnimationController(mController, homeActivity);
mController.startAnimation();
// Cancel the animation and ensure the controller is still running
@@ -231,7 +230,7 @@
doReturn(true).when(mDefaultDisplay.mWallpaperController).isWallpaperVisible();
// Start and finish the animation
- mController.initialize(ACTIVITY_TYPE_HOME, new SparseBooleanArray(), homeActivity);
+ initializeRecentsAnimationController(mController, homeActivity);
mController.startAnimation();
assertTrue(mController.isAnimatingTask(homeActivity.getTask()));
@@ -342,7 +341,7 @@
assertEquals(Configuration.ORIENTATION_LANDSCAPE,
mDefaultDisplay.getConfiguration().orientation);
- mController.initialize(ACTIVITY_TYPE_HOME, new SparseBooleanArray(), homeActivity);
+ initializeRecentsAnimationController(mController, homeActivity);
assertEquals(homeActivity, mDefaultDisplay.mFixedRotationLaunchingApp);
@@ -358,6 +357,30 @@
}
@Test
+ public void testClearFixedRotationLaunchingAppAfterCleanupAnimation() {
+ final ActivityRecord homeActivity = createHomeActivity();
+ homeActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
+ final ActivityRecord activity = createActivityRecord(mDefaultDisplay,
+ WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD);
+ // Assume an activity is launching to different rotation.
+ mDefaultDisplay.setFixedRotationLaunchingApp(activity,
+ (mDefaultDisplay.getRotation() + 1) % 4);
+
+ assertTrue(activity.hasFixedRotationTransform());
+ assertEquals(activity, mDefaultDisplay.mFixedRotationLaunchingApp);
+
+ // Before the transition is done, the recents animation is triggered.
+ initializeRecentsAnimationController(mController, homeActivity);
+ assertFalse(homeActivity.hasFixedRotationTransform());
+
+ // Simulate giving up the swipe up gesture to keep the original activity as top.
+ mController.cleanupAnimation(REORDER_MOVE_TO_ORIGINAL_POSITION);
+ // The rotation transform should be cleared after updating orientation with display.
+ assertFalse(activity.hasFixedRotationTransform());
+ assertNull(mDefaultDisplay.mFixedRotationLaunchingApp);
+ }
+
+ @Test
public void testWallpaperHasFixedRotationApplied() {
mWm.mIsFixedRotationTransformEnabled = true;
mWm.setRecentsAnimationController(mController);
@@ -394,7 +417,7 @@
doReturn(true).when(mDefaultDisplay.mWallpaperController).isWallpaperVisible();
// Start the recents animation
- mController.initialize(ACTIVITY_TYPE_HOME, new SparseBooleanArray(), homeActivity);
+ initializeRecentsAnimationController(mController, homeActivity);
mDefaultDisplay.mWallpaperController.adjustWallpaperWindows();
@@ -433,6 +456,11 @@
return homeActivity;
}
+ private static void initializeRecentsAnimationController(RecentsAnimationController controller,
+ ActivityRecord activity) {
+ controller.initialize(activity.getActivityType(), new SparseBooleanArray(), activity);
+ }
+
private static void verifyNoMoreInteractionsExceptAsBinder(IInterface binder) {
verify(binder, atLeast(0)).asBinder();
verifyNoMoreInteractions(binder);
diff --git a/services/tests/wmtests/src/com/android/server/wm/SystemServicesTestRule.java b/services/tests/wmtests/src/com/android/server/wm/SystemServicesTestRule.java
index bce1320..218261b 100644
--- a/services/tests/wmtests/src/com/android/server/wm/SystemServicesTestRule.java
+++ b/services/tests/wmtests/src/com/android/server/wm/SystemServicesTestRule.java
@@ -100,7 +100,6 @@
static int sNextDisplayId = DEFAULT_DISPLAY + 100;
static int sNextTaskId = 100;
- private final AtomicBoolean mCurrentMessagesProcessed = new AtomicBoolean(false);
private static final int[] TEST_USER_PROFILE_IDS = {};
private Context mContext;
@@ -419,20 +418,20 @@
if (wm == null) {
return;
}
- synchronized (mCurrentMessagesProcessed) {
- // Add a message to the handler queue and make sure it is fully processed before we move
- // on. This makes sure all previous messages in the handler are fully processed vs. just
- // popping them from the message queue.
- mCurrentMessagesProcessed.set(false);
- wm.mAnimator.getChoreographer().postFrameCallback(time -> {
- synchronized (mCurrentMessagesProcessed) {
- mCurrentMessagesProcessed.set(true);
- mCurrentMessagesProcessed.notifyAll();
- }
- });
- while (!mCurrentMessagesProcessed.get()) {
+ // Add a message to the handler queue and make sure it is fully processed before we move on.
+ // This makes sure all previous messages in the handler are fully processed vs. just popping
+ // them from the message queue.
+ final AtomicBoolean currentMessagesProcessed = new AtomicBoolean(false);
+ wm.mAnimator.getChoreographer().postFrameCallback(time -> {
+ synchronized (currentMessagesProcessed) {
+ currentMessagesProcessed.set(true);
+ currentMessagesProcessed.notifyAll();
+ }
+ });
+ while (!currentMessagesProcessed.get()) {
+ synchronized (currentMessagesProcessed) {
try {
- mCurrentMessagesProcessed.wait();
+ currentMessagesProcessed.wait();
} catch (InterruptedException e) {
}
}
diff --git a/services/tests/wmtests/src/com/android/server/wm/TaskStackChangedListenerTest.java b/services/tests/wmtests/src/com/android/server/wm/TaskStackChangedListenerTest.java
index 965edd4..2c17bbe 100644
--- a/services/tests/wmtests/src/com/android/server/wm/TaskStackChangedListenerTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/TaskStackChangedListenerTest.java
@@ -196,7 +196,6 @@
*/
@Test
@Presubmit
- @FlakyTest(bugId = 130388819)
public void testTaskChangeCallBacks() throws Exception {
final Object[] params = new Object[2];
final CountDownLatch taskCreatedLaunchLatch = new CountDownLatch(1);
diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowTestUtils.java b/services/tests/wmtests/src/com/android/server/wm/WindowTestUtils.java
index fc95556..4999361 100644
--- a/services/tests/wmtests/src/com/android/server/wm/WindowTestUtils.java
+++ b/services/tests/wmtests/src/com/android/server/wm/WindowTestUtils.java
@@ -34,14 +34,11 @@
/** Creates a {@link Task} and adds it to the specified {@link ActivityStack}. */
static Task createTaskInStack(WindowManagerService service, ActivityStack stack, int userId) {
- synchronized (service.mGlobalLock) {
- final Task task = new ActivityTestsBase.TaskBuilder(
- stack.mStackSupervisor)
- .setUserId(userId)
- .setStack(stack)
- .build();
- return task;
- }
+ final Task task = new ActivityTestsBase.TaskBuilder(stack.mStackSupervisor)
+ .setUserId(userId)
+ .setStack(stack)
+ .build();
+ return task;
}
/** Creates an {@link ActivityRecord} and adds it to the specified {@link Task}. */
@@ -52,23 +49,18 @@
}
static ActivityRecord createTestActivityRecord(ActivityStack stack) {
- synchronized (stack.mAtmService.mGlobalLock) {
- final ActivityRecord activity = new ActivityTestsBase.ActivityBuilder(
- stack.mAtmService)
- .setStack(stack)
- .setCreateTask(true)
- .build();
- postCreateActivitySetup(activity, stack.getDisplayContent());
- return activity;
- }
+ final ActivityRecord activity = new ActivityTestsBase.ActivityBuilder(stack.mAtmService)
+ .setStack(stack)
+ .setCreateTask(true)
+ .build();
+ postCreateActivitySetup(activity, stack.getDisplayContent());
+ return activity;
}
static ActivityRecord createTestActivityRecord(DisplayContent dc) {
- synchronized (dc.mWmService.mGlobalLock) {
- final ActivityRecord activity = new ActivityBuilder(dc.mWmService.mAtmService).build();
- postCreateActivitySetup(activity, dc);
- return activity;
- }
+ final ActivityRecord activity = new ActivityBuilder(dc.mWmService.mAtmService).build();
+ postCreateActivitySetup(activity, dc);
+ return activity;
}
private static void postCreateActivitySetup(ActivityRecord activity, DisplayContent dc) {
@@ -84,9 +76,9 @@
static TestWindowToken createTestWindowToken(int type, DisplayContent dc,
boolean persistOnEmpty) {
- synchronized (dc.mWmService.mGlobalLock) {
- return new TestWindowToken(type, dc, persistOnEmpty);
- }
+ SystemServicesTestRule.checkHoldsLock(dc.mWmService.mGlobalLock);
+
+ return new TestWindowToken(type, dc, persistOnEmpty);
}
/* Used so we can gain access to some protected members of the {@link WindowToken} class */
diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java b/services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java
index 0eaab52..a1e5b80 100644
--- a/services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java
+++ b/services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java
@@ -55,11 +55,7 @@
import org.junit.Before;
import org.junit.BeforeClass;
-/**
- * Common base class for window manager unit test classes.
- *
- * Make sure any requests to WM hold the WM lock if needed b/73966377
- */
+/** Common base class for window manager unit test classes. */
class WindowTestsBase extends SystemServiceTestsBase {
private static final String TAG = WindowTestsBase.class.getSimpleName();
@@ -94,43 +90,40 @@
@Before
public void setUpBase() {
+ mWm = mSystemServicesTestRule.getWindowManagerService();
+ SystemServicesTestRule.checkHoldsLock(mWm.mGlobalLock);
+
+ mTransaction = mSystemServicesTestRule.mTransaction;
+ mMockSession = mock(Session.class);
+ final Context context = getInstrumentation().getTargetContext();
// If @Before throws an exception, the error isn't logged. This will make sure any failures
// in the set up are clear. This can be removed when b/37850063 is fixed.
try {
- mMockSession = mock(Session.class);
-
- final Context context = getInstrumentation().getTargetContext();
-
- mWm = mSystemServicesTestRule.getWindowManagerService();
- mTransaction = mSystemServicesTestRule.mTransaction;
-
beforeCreateDisplay();
context.getDisplay().getDisplayInfo(mDisplayInfo);
mDisplayContent = createNewDisplay(true /* supportIme */);
// Set-up some common windows.
- synchronized (mWm.mGlobalLock) {
- mWallpaperWindow = createCommonWindow(null, TYPE_WALLPAPER, "wallpaperWindow");
- mImeWindow = createCommonWindow(null, TYPE_INPUT_METHOD, "mImeWindow");
- mDisplayContent.mInputMethodWindow = mImeWindow;
- mImeDialogWindow = createCommonWindow(null, TYPE_INPUT_METHOD_DIALOG,
- "mImeDialogWindow");
- mStatusBarWindow = createCommonWindow(null, TYPE_STATUS_BAR, "mStatusBarWindow");
- mNotificationShadeWindow = createCommonWindow(null, TYPE_NOTIFICATION_SHADE,
- "mNotificationShadeWindow");
- mNavBarWindow = createCommonWindow(null, TYPE_NAVIGATION_BAR, "mNavBarWindow");
- mDockedDividerWindow = createCommonWindow(null, TYPE_DOCK_DIVIDER,
- "mDockedDividerWindow");
- mAppWindow = createCommonWindow(null, TYPE_BASE_APPLICATION, "mAppWindow");
- mChildAppWindowAbove = createCommonWindow(mAppWindow,
- TYPE_APPLICATION_ATTACHED_DIALOG,
- "mChildAppWindowAbove");
- mChildAppWindowBelow = createCommonWindow(mAppWindow,
- TYPE_APPLICATION_MEDIA_OVERLAY,
- "mChildAppWindowBelow");
- mDisplayContent.getDisplayPolicy().setForceShowSystemBars(false);
- }
+ mWallpaperWindow = createCommonWindow(null, TYPE_WALLPAPER, "wallpaperWindow");
+ mImeWindow = createCommonWindow(null, TYPE_INPUT_METHOD, "mImeWindow");
+ mDisplayContent.mInputMethodWindow = mImeWindow;
+ mImeDialogWindow = createCommonWindow(null, TYPE_INPUT_METHOD_DIALOG,
+ "mImeDialogWindow");
+ mStatusBarWindow = createCommonWindow(null, TYPE_STATUS_BAR, "mStatusBarWindow");
+ mNotificationShadeWindow = createCommonWindow(null, TYPE_NOTIFICATION_SHADE,
+ "mNotificationShadeWindow");
+ mNavBarWindow = createCommonWindow(null, TYPE_NAVIGATION_BAR, "mNavBarWindow");
+ mDockedDividerWindow = createCommonWindow(null, TYPE_DOCK_DIVIDER,
+ "mDockedDividerWindow");
+ mAppWindow = createCommonWindow(null, TYPE_BASE_APPLICATION, "mAppWindow");
+ mChildAppWindowAbove = createCommonWindow(mAppWindow,
+ TYPE_APPLICATION_ATTACHED_DIALOG,
+ "mChildAppWindowAbove");
+ mChildAppWindowBelow = createCommonWindow(mAppWindow,
+ TYPE_APPLICATION_MEDIA_OVERLAY,
+ "mChildAppWindowBelow");
+ mDisplayContent.getDisplayPolicy().setForceShowSystemBars(false);
// Adding a display will cause freezing the display. Make sure to wait until it's
// unfrozen to not run into race conditions with the tests.
@@ -146,23 +139,19 @@
}
private WindowState createCommonWindow(WindowState parent, int type, String name) {
- synchronized (mWm.mGlobalLock) {
- final WindowState win = createWindow(parent, type, name);
- // Prevent common windows from been IMe targets
- win.mAttrs.flags |= FLAG_NOT_FOCUSABLE;
- return win;
- }
+ final WindowState win = createWindow(parent, type, name);
+ // Prevent common windows from been IME targets.
+ win.mAttrs.flags |= FLAG_NOT_FOCUSABLE;
+ return win;
}
private WindowToken createWindowToken(
DisplayContent dc, int windowingMode, int activityType, int type) {
- synchronized (mWm.mGlobalLock) {
- if (type < FIRST_APPLICATION_WINDOW || type > LAST_APPLICATION_WINDOW) {
- return WindowTestUtils.createTestWindowToken(type, dc);
- }
-
- return createActivityRecord(dc, windowingMode, activityType);
+ if (type < FIRST_APPLICATION_WINDOW || type > LAST_APPLICATION_WINDOW) {
+ return WindowTestUtils.createTestWindowToken(type, dc);
}
+
+ return createActivityRecord(dc, windowingMode, activityType);
}
ActivityRecord createActivityRecord(DisplayContent dc, int windowingMode, int activityType) {
@@ -176,78 +165,60 @@
}
WindowState createWindow(WindowState parent, int type, String name) {
- synchronized (mWm.mGlobalLock) {
- return (parent == null)
- ? createWindow(parent, type, mDisplayContent, name)
- : createWindow(parent, type, parent.mToken, name);
- }
+ return (parent == null)
+ ? createWindow(parent, type, mDisplayContent, name)
+ : createWindow(parent, type, parent.mToken, name);
}
WindowState createWindow(WindowState parent, int type, String name, int ownerId) {
- synchronized (mWm.mGlobalLock) {
- return (parent == null)
- ? createWindow(parent, type, mDisplayContent, name, ownerId)
- : createWindow(parent, type, parent.mToken, name, ownerId);
- }
+ return (parent == null)
+ ? createWindow(parent, type, mDisplayContent, name, ownerId)
+ : createWindow(parent, type, parent.mToken, name, ownerId);
}
WindowState createWindowOnStack(WindowState parent, int windowingMode, int activityType,
int type, DisplayContent dc, String name) {
- synchronized (mWm.mGlobalLock) {
- final WindowToken token = createWindowToken(dc, windowingMode, activityType, type);
- return createWindow(parent, type, token, name);
- }
+ final WindowToken token = createWindowToken(dc, windowingMode, activityType, type);
+ return createWindow(parent, type, token, name);
}
WindowState createAppWindow(Task task, int type, String name) {
- synchronized (mWm.mGlobalLock) {
- final ActivityRecord activity =
- WindowTestUtils.createTestActivityRecord(task.getDisplayContent());
- task.addChild(activity, 0);
- return createWindow(null, type, activity, name);
- }
+ final ActivityRecord activity =
+ WindowTestUtils.createTestActivityRecord(task.getDisplayContent());
+ task.addChild(activity, 0);
+ return createWindow(null, type, activity, name);
}
WindowState createWindow(WindowState parent, int type, DisplayContent dc, String name) {
- synchronized (mWm.mGlobalLock) {
- final WindowToken token = createWindowToken(
- dc, WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD, type);
- return createWindow(parent, type, token, name, 0 /* ownerId */);
- }
+ final WindowToken token = createWindowToken(
+ dc, WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD, type);
+ return createWindow(parent, type, token, name, 0 /* ownerId */);
}
WindowState createWindow(WindowState parent, int type, DisplayContent dc, String name,
int ownerId) {
- synchronized (mWm.mGlobalLock) {
- final WindowToken token = createWindowToken(
- dc, WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD, type);
- return createWindow(parent, type, token, name, ownerId);
- }
+ final WindowToken token = createWindowToken(
+ dc, WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD, type);
+ return createWindow(parent, type, token, name, ownerId);
}
WindowState createWindow(WindowState parent, int type, DisplayContent dc, String name,
boolean ownerCanAddInternalSystemWindow) {
- synchronized (mWm.mGlobalLock) {
- final WindowToken token = createWindowToken(
- dc, WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD, type);
- return createWindow(parent, type, token, name, 0 /* ownerId */,
- ownerCanAddInternalSystemWindow);
- }
+ final WindowToken token = createWindowToken(
+ dc, WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD, type);
+ return createWindow(parent, type, token, name, 0 /* ownerId */,
+ ownerCanAddInternalSystemWindow);
}
WindowState createWindow(WindowState parent, int type, WindowToken token, String name) {
- synchronized (mWm.mGlobalLock) {
- return createWindow(parent, type, token, name, 0 /* ownerId */,
- false /* ownerCanAddInternalSystemWindow */);
- }
+ return createWindow(parent, type, token, name, 0 /* ownerId */,
+ false /* ownerCanAddInternalSystemWindow */);
}
WindowState createWindow(WindowState parent, int type, WindowToken token, String name,
int ownerId) {
- synchronized (mWm.mGlobalLock) {
- return createWindow(parent, type, token, name, ownerId,
- false /* ownerCanAddInternalSystemWindow */);
- }
+ return createWindow(parent, type, token, name, ownerId,
+ false /* ownerCanAddInternalSystemWindow */);
}
WindowState createWindow(WindowState parent, int type, WindowToken token, String name,
@@ -261,19 +232,19 @@
String name, int ownerId, int userId, boolean ownerCanAddInternalSystemWindow,
WindowManagerService service, Session session, IWindow iWindow,
WindowState.PowerManagerWrapper powerManagerWrapper) {
- synchronized (service.mGlobalLock) {
- final WindowManager.LayoutParams attrs = new WindowManager.LayoutParams(type);
- attrs.setTitle(name);
+ SystemServicesTestRule.checkHoldsLock(service.mGlobalLock);
- final WindowState w = new WindowState(service, session, iWindow, token, parent,
- OP_NONE, 0, attrs, VISIBLE, ownerId, userId,
- ownerCanAddInternalSystemWindow,
- powerManagerWrapper);
- // TODO: Probably better to make this call in the WindowState ctor to avoid errors with
- // adding it to the token...
- token.addWindow(w);
- return w;
- }
+ final WindowManager.LayoutParams attrs = new WindowManager.LayoutParams(type);
+ attrs.setTitle(name);
+
+ final WindowState w = new WindowState(service, session, iWindow, token, parent,
+ OP_NONE, 0, attrs, VISIBLE, ownerId, userId,
+ ownerCanAddInternalSystemWindow,
+ powerManagerWrapper);
+ // TODO: Probably better to make this call in the WindowState ctor to avoid errors with
+ // adding it to the token...
+ token.addWindow(w);
+ return w;
}
static void makeWindowVisible(WindowState... windows) {
@@ -292,30 +263,24 @@
}
ActivityStack createTaskStackOnDisplay(int windowingMode, int activityType, DisplayContent dc) {
- synchronized (mWm.mGlobalLock) {
- return new ActivityTestsBase.StackBuilder(
- dc.mWmService.mAtmService.mRootWindowContainer)
- .setDisplay(dc)
- .setWindowingMode(windowingMode)
- .setActivityType(activityType)
- .setCreateActivity(false)
- .setIntent(new Intent())
- .build();
- }
+ return new ActivityTestsBase.StackBuilder(dc.mWmService.mRoot)
+ .setDisplay(dc)
+ .setWindowingMode(windowingMode)
+ .setActivityType(activityType)
+ .setCreateActivity(false)
+ .setIntent(new Intent())
+ .build();
}
- ActivityStack createTaskStackOnTaskDisplayArea(
- int windowingMode, int activityType, TaskDisplayArea tda) {
- synchronized (mWm.mGlobalLock) {
- return new ActivityTestsBase.StackBuilder(
- tda.mDisplayContent.mWmService.mAtmService.mRootWindowContainer)
- .setTaskDisplayArea(tda)
- .setWindowingMode(windowingMode)
- .setActivityType(activityType)
- .setCreateActivity(false)
- .setIntent(new Intent())
- .build();
- }
+ ActivityStack createTaskStackOnTaskDisplayArea(int windowingMode, int activityType,
+ TaskDisplayArea tda) {
+ return new ActivityTestsBase.StackBuilder(tda.mWmService.mRoot)
+ .setTaskDisplayArea(tda)
+ .setWindowingMode(windowingMode)
+ .setActivityType(activityType)
+ .setCreateActivity(false)
+ .setIntent(new Intent())
+ .build();
}
/** Creates a {@link Task} and adds it to the specified {@link ActivityStack}. */
@@ -365,9 +330,9 @@
/** Creates a {@link com.android.server.wm.WindowTestUtils.TestWindowState} */
WindowTestUtils.TestWindowState createWindowState(WindowManager.LayoutParams attrs,
WindowToken token) {
- synchronized (mWm.mGlobalLock) {
- return new WindowTestUtils.TestWindowState(mWm, mMockSession, mIWindow, attrs, token);
- }
+ SystemServicesTestRule.checkHoldsLock(mWm.mGlobalLock);
+
+ return new WindowTestUtils.TestWindowState(mWm, mMockSession, mIWindow, attrs, token);
}
/** Creates a {@link DisplayContent} as parts of simulate display info for test. */
diff --git a/telephony/java/android/telephony/ServiceState.java b/telephony/java/android/telephony/ServiceState.java
index 07d71d0..c6b06b4 100644
--- a/telephony/java/android/telephony/ServiceState.java
+++ b/telephony/java/android/telephony/ServiceState.java
@@ -1392,15 +1392,16 @@
/** @hide */
public boolean isUsingCarrierAggregation() {
+ boolean isUsingCa = false;
NetworkRegistrationInfo nri = getNetworkRegistrationInfo(
NetworkRegistrationInfo.DOMAIN_PS, AccessNetworkConstants.TRANSPORT_TYPE_WWAN);
if (nri != null) {
DataSpecificRegistrationInfo dsri = nri.getDataSpecificInfo();
if (dsri != null) {
- return dsri.isUsingCarrierAggregation();
+ isUsingCa = dsri.isUsingCarrierAggregation();
}
}
- return false;
+ return isUsingCa || getCellBandwidths().length > 1;
}
/** @hide */
diff --git a/test-runner/src/android/test/TouchUtils.java b/test-runner/src/android/test/TouchUtils.java
index f2f0be7..1122cd8 100644
--- a/test-runner/src/android/test/TouchUtils.java
+++ b/test-runner/src/android/test/TouchUtils.java
@@ -16,16 +16,23 @@
package android.test;
+import static android.view.WindowInsets.Type.displayCutout;
+import static android.view.WindowInsets.Type.navigationBars;
+
import android.app.Activity;
import android.app.Instrumentation;
-import android.graphics.Point;
+import android.graphics.Insets;
+import android.graphics.Rect;
import android.os.SystemClock;
-import android.view.Display;
+import android.util.Size;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewConfiguration;
import android.view.ViewGroup;
+import android.view.WindowInsets;
+import android.view.WindowManager;
+import android.view.WindowMetrics;
/**
* Reusable methods for generating touch events. These methods can be used with
@@ -59,13 +66,12 @@
* @param activity The activity that is in the foreground of the test case
*/
public static void dragQuarterScreenDown(InstrumentationTestCase test, Activity activity) {
- Display display = activity.getWindowManager().getDefaultDisplay();
- final Point size = new Point();
- display.getSize(size);
+ WindowManager wm = activity.getWindowManager();
+ final Size size = getSizeExcludingNavigationBarAndCutout(wm.getCurrentWindowMetrics());
- final float x = size.x / 2.0f;
- final float fromY = size.y * 0.5f;
- final float toY = size.y * 0.75f;
+ final float x = size.getWidth() / 2.0f;
+ final float fromY = size.getHeight() * 0.5f;
+ final float toY = size.getHeight() * 0.75f;
drag(test, x, x, fromY, toY, 4);
}
@@ -89,17 +95,27 @@
* @param activity The activity that is in the foreground of the test case
*/
public static void dragQuarterScreenUp(InstrumentationTestCase test, Activity activity) {
- Display display = activity.getWindowManager().getDefaultDisplay();
- final Point size = new Point();
- display.getSize(size);
+ WindowManager wm = activity.getWindowManager();
+ final Size size = getSizeExcludingNavigationBarAndCutout(wm.getCurrentWindowMetrics());
- final float x = size.x / 2.0f;
- final float fromY = size.y * 0.5f;
- final float toY = size.y * 0.25f;
+ final float x = size.getWidth() / 2.0f;
+ final float fromY = size.getHeight() * 0.5f;
+ final float toY = size.getHeight() * 0.25f;
drag(test, x, x, fromY, toY, 4);
}
+ private static Size getSizeExcludingNavigationBarAndCutout(WindowMetrics windowMetrics) {
+ WindowInsets windowInsets = windowMetrics.getWindowInsets();
+ final Insets insetsWithCutout = windowInsets
+ .getInsetsIgnoringVisibility(navigationBars() | displayCutout());
+ final int insetsWidth = insetsWithCutout.left + insetsWithCutout.right;
+ final int insetsHeight = insetsWithCutout.top + insetsWithCutout.bottom;
+
+ Rect bounds = windowMetrics.getBounds();
+ return new Size(bounds.width() - insetsWidth, bounds.height() - insetsHeight);
+ }
+
/**
* Scroll a ViewGroup to the bottom by repeatedly calling
* {@link #dragQuarterScreenUp(InstrumentationTestCase, Activity)}
@@ -222,8 +238,9 @@
*/
public static void dragViewToBottom(InstrumentationTestCase test, Activity activity, View v,
int stepCount) {
- int screenHeight =
- activity.getWindowManager().getCurrentWindowMetrics().getBounds().height();
+ WindowManager wm = activity.getWindowManager();
+ final int screenHeight = getSizeExcludingNavigationBarAndCutout(
+ wm.getCurrentWindowMetrics()).getHeight();
int[] xy = new int[2];
v.getLocationOnScreen(xy);
diff --git a/tests/GamePerformance/src/android/gameperformance/CustomControlView.java b/tests/GamePerformance/src/android/gameperformance/CustomControlView.java
index e63736b..8d11a41 100644
--- a/tests/GamePerformance/src/android/gameperformance/CustomControlView.java
+++ b/tests/GamePerformance/src/android/gameperformance/CustomControlView.java
@@ -15,20 +15,21 @@
*/
package android.gameperformance;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.CountDownLatch;
-
import android.annotation.MainThread;
import android.annotation.NonNull;
import android.annotation.WorkerThread;
import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
-import android.graphics.Point;
import android.graphics.drawable.AnimationDrawable;
+import android.view.WindowManager;
import android.widget.AbsoluteLayout;
import android.widget.ImageView;
+import android.window.WindowMetricsHelper;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.CountDownLatch;
/**
* View that holds requested number of UI controls as ImageView with an infinite animation.
@@ -42,9 +43,10 @@
public CustomControlView(@NonNull Context context) {
super(context);
- final Point size = new Point();
- context.getDisplay().getSize(size);
- mPerRowControlCount = size.x / CONTROL_DIMENSION;
+ final WindowManager wm = context.getSystemService(WindowManager.class);
+ final int width = WindowMetricsHelper.getBoundsExcludingNavigationBarAndCutout(
+ wm.getCurrentWindowMetrics()).width();
+ mPerRowControlCount = width / CONTROL_DIMENSION;
}
/**
diff --git a/tests/MirrorSurfaceTest/src/com/google/android/test/mirrorsurface/MirrorSurfaceActivity.java b/tests/MirrorSurfaceTest/src/com/google/android/test/mirrorsurface/MirrorSurfaceActivity.java
index 31532a2..8afe841 100644
--- a/tests/MirrorSurfaceTest/src/com/google/android/test/mirrorsurface/MirrorSurfaceActivity.java
+++ b/tests/MirrorSurfaceTest/src/com/google/android/test/mirrorsurface/MirrorSurfaceActivity.java
@@ -39,6 +39,7 @@
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
+import android.window.WindowMetricsHelper;
public class MirrorSurfaceActivity extends Activity implements View.OnClickListener,
View.OnLongClickListener, View.OnTouchListener {
@@ -89,7 +90,8 @@
.getSystemService(WindowManager.class);
mIWm = WindowManagerGlobal.getWindowManagerService();
- Rect windowBounds = mWm.getCurrentWindowMetrics().getBounds();
+ Rect windowBounds = WindowMetricsHelper.getBoundsExcludingNavigationBarAndCutout(
+ mWm.getCurrentWindowMetrics());
mWindowBounds.set(0, 0, windowBounds.width(), windowBounds.height());
mScaleText = findViewById(R.id.scale);
diff --git a/tests/utils/testutils/java/com/android/server/wm/test/filters/FrameworksTestsFilter.java b/tests/utils/testutils/java/com/android/server/wm/test/filters/FrameworksTestsFilter.java
index 0dd45ba..ea803f2 100644
--- a/tests/utils/testutils/java/com/android/server/wm/test/filters/FrameworksTestsFilter.java
+++ b/tests/utils/testutils/java/com/android/server/wm/test/filters/FrameworksTestsFilter.java
@@ -48,7 +48,8 @@
"android.view.InsetsStateTest",
"android.view.WindowMetricsTest",
"android.view.PendingInsetsControllerTest",
- "android.app.WindowContextTest"
+ "android.app.WindowContextTest",
+ "android.window.WindowMetricsHelperTest"
};
public FrameworksTestsFilter(Bundle testArgs) {