diff options
392 files changed, 6622 insertions, 2420 deletions
diff --git a/core/api/current.txt b/core/api/current.txt index d1e6c8282abd..164e14a1bc39 100644 --- a/core/api/current.txt +++ b/core/api/current.txt @@ -143,6 +143,7 @@ package android { field public static final String READ_MEDIA_AUDIO = "android.permission.READ_MEDIA_AUDIO"; field public static final String READ_MEDIA_IMAGES = "android.permission.READ_MEDIA_IMAGES"; field public static final String READ_MEDIA_VIDEO = "android.permission.READ_MEDIA_VIDEO"; + field public static final String READ_MEDIA_VISUAL_USER_SELECTED = "android.permission.READ_MEDIA_VISUAL_USER_SELECTED"; field public static final String READ_NEARBY_STREAMING_POLICY = "android.permission.READ_NEARBY_STREAMING_POLICY"; field public static final String READ_PHONE_NUMBERS = "android.permission.READ_PHONE_NUMBERS"; field public static final String READ_PHONE_STATE = "android.permission.READ_PHONE_STATE"; @@ -32546,6 +32547,7 @@ package android.os { field public static final String DISALLOW_BLUETOOTH = "no_bluetooth"; field public static final String DISALLOW_BLUETOOTH_SHARING = "no_bluetooth_sharing"; field public static final String DISALLOW_CAMERA_TOGGLE = "disallow_camera_toggle"; + field public static final String DISALLOW_CELLULAR_2G = "no_cellular_2g"; field public static final String DISALLOW_CHANGE_WIFI_STATE = "no_change_wifi_state"; field public static final String DISALLOW_CONFIG_BLUETOOTH = "no_config_bluetooth"; field public static final String DISALLOW_CONFIG_BRIGHTNESS = "no_config_brightness"; @@ -41761,6 +41763,7 @@ package android.telephony { field public static final String KEY_PING_TEST_BEFORE_DATA_SWITCH_BOOL = "ping_test_before_data_switch_bool"; field public static final String KEY_PREFER_2G_BOOL = "prefer_2g_bool"; field public static final String KEY_PREMIUM_CAPABILITY_MAXIMUM_NOTIFICATION_COUNT_INT_ARRAY = "premium_capability_maximum_notification_count_int_array"; + field public static final String KEY_PREMIUM_CAPABILITY_NETWORK_SETUP_TIME_MILLIS_LONG = "premium_capability_network_setup_time_millis_long"; field public static final String KEY_PREMIUM_CAPABILITY_NOTIFICATION_BACKOFF_HYSTERESIS_TIME_MILLIS_LONG = "premium_capability_notification_backoff_hysteresis_time_millis_long"; field public static final String KEY_PREMIUM_CAPABILITY_NOTIFICATION_DISPLAY_TIMEOUT_MILLIS_LONG = "premium_capability_notification_display_timeout_millis_long"; field public static final String KEY_PREMIUM_CAPABILITY_PURCHASE_CONDITION_BACKOFF_HYSTERESIS_TIME_MILLIS_LONG = "premium_capability_purchase_condition_backoff_hysteresis_time_millis_long"; @@ -44068,6 +44071,7 @@ package android.telephony { field public static final int PURCHASE_PREMIUM_CAPABILITY_RESULT_NETWORK_NOT_AVAILABLE = 12; // 0xc field public static final int PURCHASE_PREMIUM_CAPABILITY_RESULT_NOT_DEFAULT_DATA = 14; // 0xe field public static final int PURCHASE_PREMIUM_CAPABILITY_RESULT_OVERRIDDEN = 5; // 0x5 + field public static final int PURCHASE_PREMIUM_CAPABILITY_RESULT_PENDING_NETWORK_SETUP = 15; // 0xf field public static final int PURCHASE_PREMIUM_CAPABILITY_RESULT_REQUEST_FAILED = 11; // 0xb field public static final int PURCHASE_PREMIUM_CAPABILITY_RESULT_SUCCESS = 1; // 0x1 field public static final int PURCHASE_PREMIUM_CAPABILITY_RESULT_THROTTLED = 2; // 0x2 diff --git a/core/api/system-current.txt b/core/api/system-current.txt index 7cbf4617d991..352b4f98edd3 100644 --- a/core/api/system-current.txt +++ b/core/api/system-current.txt @@ -587,6 +587,7 @@ package android.app { field public static final String OPSTR_READ_MEDIA_AUDIO = "android:read_media_audio"; field public static final String OPSTR_READ_MEDIA_IMAGES = "android:read_media_images"; field public static final String OPSTR_READ_MEDIA_VIDEO = "android:read_media_video"; + field public static final String OPSTR_READ_MEDIA_VISUAL_USER_SELECTED = "android:read_media_visual_user_selected"; field public static final String OPSTR_RECEIVE_AMBIENT_TRIGGER_AUDIO = "android:receive_ambient_trigger_audio"; field public static final String OPSTR_RECEIVE_EMERGENCY_BROADCAST = "android:receive_emergency_broadcast"; field public static final String OPSTR_RECEIVE_EXPLICIT_USER_INTERACTION_AUDIO = "android:receive_explicit_user_interaction_audio"; @@ -13706,6 +13707,7 @@ package android.telephony { field public static final String ACTION_SIM_SLOT_STATUS_CHANGED = "android.telephony.action.SIM_SLOT_STATUS_CHANGED"; field public static final int ALLOWED_NETWORK_TYPES_REASON_ENABLE_2G = 3; // 0x3 field public static final int ALLOWED_NETWORK_TYPES_REASON_POWER = 1; // 0x1 + field public static final int ALLOWED_NETWORK_TYPES_REASON_USER_RESTRICTIONS = 4; // 0x4 field public static final int CALL_WAITING_STATUS_DISABLED = 2; // 0x2 field public static final int CALL_WAITING_STATUS_ENABLED = 1; // 0x1 field public static final int CALL_WAITING_STATUS_FDN_CHECK_FAILURE = 5; // 0x5 @@ -15923,10 +15925,17 @@ package android.view { package android.view.accessibility { + public abstract class AccessibilityDisplayProxy { + ctor public AccessibilityDisplayProxy(int, @NonNull java.util.concurrent.Executor, @NonNull java.util.List<android.accessibilityservice.AccessibilityServiceInfo>); + method public int getDisplayId(); + } + public final class AccessibilityManager { method public int getAccessibilityWindowId(@Nullable android.os.IBinder); method @RequiresPermission(android.Manifest.permission.MANAGE_ACCESSIBILITY) public void performAccessibilityShortcut(); + method @RequiresPermission(android.Manifest.permission.MANAGE_ACCESSIBILITY) public boolean registerDisplayProxy(@NonNull android.view.accessibility.AccessibilityDisplayProxy); method @RequiresPermission(android.Manifest.permission.MANAGE_ACCESSIBILITY) public void registerSystemAction(@NonNull android.app.RemoteAction, int); + method @RequiresPermission(android.Manifest.permission.MANAGE_ACCESSIBILITY) public boolean unregisterDisplayProxy(@NonNull android.view.accessibility.AccessibilityDisplayProxy); method @RequiresPermission(android.Manifest.permission.MANAGE_ACCESSIBILITY) public void unregisterSystemAction(int); } diff --git a/core/api/test-current.txt b/core/api/test-current.txt index 6e8713413d68..cdb1510b388e 100644 --- a/core/api/test-current.txt +++ b/core/api/test-current.txt @@ -47,6 +47,7 @@ package android { field public static final String SET_KEYBOARD_LAYOUT = "android.permission.SET_KEYBOARD_LAYOUT"; field public static final String SUSPEND_APPS = "android.permission.SUSPEND_APPS"; field public static final String TEST_BIOMETRIC = "android.permission.TEST_BIOMETRIC"; + field public static final String TEST_INPUT_METHOD = "android.permission.TEST_INPUT_METHOD"; field public static final String TEST_MANAGE_ROLLBACKS = "android.permission.TEST_MANAGE_ROLLBACKS"; field public static final String UPGRADE_RUNTIME_PERMISSIONS = "android.permission.UPGRADE_RUNTIME_PERMISSIONS"; field public static final String WRITE_DEVICE_CONFIG = "android.permission.WRITE_DEVICE_CONFIG"; @@ -3156,12 +3157,12 @@ package android.view.inputmethod { } public final class InputMethodManager { - method public void addVirtualStylusIdForTestSession(); + method @RequiresPermission(android.Manifest.permission.TEST_INPUT_METHOD) public void addVirtualStylusIdForTestSession(); method public int getDisplayId(); method @NonNull @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS_FULL) public java.util.List<android.view.inputmethod.InputMethodInfo> getInputMethodListAsUser(int); method public boolean hasActiveInputConnection(@Nullable android.view.View); - method public boolean isInputMethodPickerShown(); - method @RequiresPermission("android.permission.TEST_INPUT_METHOD") public void setStylusWindowIdleTimeoutForTest(long); + method @RequiresPermission(android.Manifest.permission.TEST_INPUT_METHOD) public boolean isInputMethodPickerShown(); + method @RequiresPermission(android.Manifest.permission.TEST_INPUT_METHOD) public void setStylusWindowIdleTimeoutForTest(long); field public static final long CLEAR_SHOW_FORCED_FLAG_WHEN_LEAVING = 214016041L; // 0xcc1a029L } diff --git a/core/java/android/app/AppOpsManager.java b/core/java/android/app/AppOpsManager.java index 1b972e0cb81a..267e5b699241 100644 --- a/core/java/android/app/AppOpsManager.java +++ b/core/java/android/app/AppOpsManager.java @@ -1360,9 +1360,17 @@ public class AppOpsManager { */ public static final int OP_RUN_LONG_JOBS = AppProtoEnums.APP_OP_RUN_LONG_JOBS; + /** + * Notify apps that they have been granted URI permission photos + * + * @hide + */ + public static final int OP_READ_MEDIA_VISUAL_USER_SELECTED = + AppProtoEnums.APP_OP_READ_MEDIA_VISUAL_USER_SELECTED; + /** @hide */ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) - public static final int _NUM_OP = 123; + public static final int _NUM_OP = 124; /** Access to coarse location information. */ public static final String OPSTR_COARSE_LOCATION = "android:coarse_location"; @@ -1833,6 +1841,14 @@ public class AppOpsManager { @SystemApi public static final String OPSTR_RECEIVE_AMBIENT_TRIGGER_AUDIO = "android:receive_ambient_trigger_audio"; + /** + * Notify apps that they have been granted URI permission photos + * + * @hide + */ + @SystemApi + public static final String OPSTR_READ_MEDIA_VISUAL_USER_SELECTED = + "android:read_media_visual_user_selected"; /** * Record audio from near-field microphone (ie. TV remote) @@ -1948,6 +1964,7 @@ public class AppOpsManager { OP_MANAGE_MEDIA, OP_TURN_SCREEN_ON, OP_RUN_LONG_JOBS, + OP_READ_MEDIA_VISUAL_USER_SELECTED, }; static final AppOpInfo[] sAppOpInfos = new AppOpInfo[]{ @@ -2329,7 +2346,11 @@ public class AppOpsManager { "RECEIVE_EXPLICIT_USER_INTERACTION_AUDIO").setDefaultMode( AppOpsManager.MODE_ALLOWED).build(), new AppOpInfo.Builder(OP_RUN_LONG_JOBS, OPSTR_RUN_LONG_JOBS, "RUN_LONG_JOBS") - .setPermission(Manifest.permission.RUN_LONG_JOBS).build() + .setPermission(Manifest.permission.RUN_LONG_JOBS).build(), + new AppOpInfo.Builder(OP_READ_MEDIA_VISUAL_USER_SELECTED, + OPSTR_READ_MEDIA_VISUAL_USER_SELECTED, "READ_MEDIA_VISUAL_USER_SELECTED") + .setPermission(Manifest.permission.READ_MEDIA_VISUAL_USER_SELECTED) + .setDefaultMode(AppOpsManager.MODE_ALLOWED).build() }; /** diff --git a/core/java/android/hardware/radio/ProgramSelector.java b/core/java/android/hardware/radio/ProgramSelector.java index 36ac1a0cb21c..8a9213515122 100644 --- a/core/java/android/hardware/radio/ProgramSelector.java +++ b/core/java/android/hardware/radio/ProgramSelector.java @@ -533,7 +533,6 @@ public final class ProgramSelector implements Parcelable { mProgramType = in.readInt(); mPrimaryId = in.readTypedObject(Identifier.CREATOR); mSecondaryIds = in.createTypedArray(Identifier.CREATOR); - Arrays.sort(mSecondaryIds); if (Stream.of(mSecondaryIds).anyMatch(id -> id == null)) { throw new IllegalArgumentException("secondaryIds list must not contain nulls"); } diff --git a/core/java/android/os/UserManager.java b/core/java/android/os/UserManager.java index 51dc643a73f3..f1879dd792a3 100644 --- a/core/java/android/os/UserManager.java +++ b/core/java/android/os/UserManager.java @@ -1488,6 +1488,22 @@ public class UserManager { public static final String KEY_RESTRICTIONS_PENDING = "restrictions_pending"; /** + * Specifies if a user is not allowed to use 2g networks. + * + * <p>This restriction can only be set by a device owner or a profile owner of an + * organization-owned managed profile on the parent profile. + * In all cases, the setting applies globally on the device and will prevent the device from + * scanning for or connecting to 2g networks, except in the case of an emergency. + * + * <p>The default value is <code>false</code>. + * + * @see DevicePolicyManager#addUserRestriction(ComponentName, String) + * @see DevicePolicyManager#clearUserRestriction(ComponentName, String) + * @see #getUserRestrictions() + */ + public static final String DISALLOW_CELLULAR_2G = "no_cellular_2g"; + + /** * List of key values that can be passed into the various user restriction related methods * in {@link UserManager} & {@link DevicePolicyManager}. * Note: This is slightly different from the real set of user restrictions listed in {@link @@ -1568,6 +1584,7 @@ public class UserManager { DISALLOW_SHARING_ADMIN_CONFIGURED_WIFI, DISALLOW_WIFI_DIRECT, DISALLOW_ADD_WIFI_CONFIG, + DISALLOW_CELLULAR_2G, }) @Retention(RetentionPolicy.SOURCE) public @interface UserRestrictionKey {} diff --git a/core/java/android/text/GraphemeClusterSegmentFinder.java b/core/java/android/text/GraphemeClusterSegmentFinder.java index 3335751e8817..656774f66792 100644 --- a/core/java/android/text/GraphemeClusterSegmentFinder.java +++ b/core/java/android/text/GraphemeClusterSegmentFinder.java @@ -49,6 +49,7 @@ public class GraphemeClusterSegmentFinder extends SegmentFinder { @Override public int previousStartBoundary(@IntRange(from = 0) int offset) { + if (offset == 0) return DONE; int boundary = mTextPaint.getTextRunCursor( mText, 0, mText.length(), false, offset, Paint.CURSOR_BEFORE); return boundary == -1 ? DONE : boundary; @@ -56,6 +57,7 @@ public class GraphemeClusterSegmentFinder extends SegmentFinder { @Override public int previousEndBoundary(@IntRange(from = 0) int offset) { + if (offset == 0) return DONE; int boundary = mTextPaint.getTextRunCursor( mText, 0, mText.length(), false, offset, Paint.CURSOR_BEFORE); // Check that there is another cursor position before, otherwise this is not a valid @@ -69,6 +71,7 @@ public class GraphemeClusterSegmentFinder extends SegmentFinder { @Override public int nextStartBoundary(@IntRange(from = 0) int offset) { + if (offset == mText.length()) return DONE; int boundary = mTextPaint.getTextRunCursor( mText, 0, mText.length(), false, offset, Paint.CURSOR_AFTER); // Check that there is another cursor position after, otherwise this is not a valid @@ -82,6 +85,7 @@ public class GraphemeClusterSegmentFinder extends SegmentFinder { @Override public int nextEndBoundary(@IntRange(from = 0) int offset) { + if (offset == mText.length()) return DONE; int boundary = mTextPaint.getTextRunCursor( mText, 0, mText.length(), false, offset, Paint.CURSOR_AFTER); return boundary == -1 ? DONE : boundary; diff --git a/core/java/android/text/Layout.java b/core/java/android/text/Layout.java index 1337d6a87df8..54ec07edd3ee 100644 --- a/core/java/android/text/Layout.java +++ b/core/java/android/text/Layout.java @@ -3000,6 +3000,18 @@ public abstract class Layout { } /** + * Returns the BiDi level of this run. + * + * @param runIndex the index of the BiDi run + * @return the BiDi level of this run. + * @hide + */ + @IntRange(from = 0) + public int getRunLevel(int runIndex) { + return (mDirections[runIndex * 2 + 1] >>> RUN_LEVEL_SHIFT) & RUN_LEVEL_MASK; + } + + /** * Returns true if the BiDi run is RTL. * * @param runIndex the index of the BiDi run diff --git a/core/java/android/text/TextUtils.java b/core/java/android/text/TextUtils.java index 596e4914896a..ff66e5f28275 100644 --- a/core/java/android/text/TextUtils.java +++ b/core/java/android/text/TextUtils.java @@ -2331,7 +2331,8 @@ public class TextUtils { return trimmed; } - private static boolean isNewline(int codePoint) { + /** @hide */ + public static boolean isNewline(int codePoint) { int type = Character.getType(codePoint); return type == Character.PARAGRAPH_SEPARATOR || type == Character.LINE_SEPARATOR || codePoint == LINE_FEED_CODE_POINT; diff --git a/core/java/android/view/SurfaceView.java b/core/java/android/view/SurfaceView.java index 198ac9d81ce8..b24303b41abd 100644 --- a/core/java/android/view/SurfaceView.java +++ b/core/java/android/view/SurfaceView.java @@ -121,16 +121,23 @@ public class SurfaceView extends View implements ViewRootImpl.SurfaceChangedCall private static final boolean DEBUG = false; private static final boolean DEBUG_POSITION = false; - @UnsupportedAppUsage + @UnsupportedAppUsage( + maxTargetSdk = Build.VERSION_CODES.TIRAMISU, + publicAlternatives = "Track {@link SurfaceHolder#addCallback} instead") final ArrayList<SurfaceHolder.Callback> mCallbacks = new ArrayList<>(); final int[] mLocation = new int[2]; - @UnsupportedAppUsage + @UnsupportedAppUsage( + maxTargetSdk = Build.VERSION_CODES.TIRAMISU, + publicAlternatives = "Use {@link SurfaceHolder#lockCanvas} instead") final ReentrantLock mSurfaceLock = new ReentrantLock(); - @UnsupportedAppUsage + @UnsupportedAppUsage( + maxTargetSdk = Build.VERSION_CODES.TIRAMISU, + publicAlternatives = "Use {@link SurfaceHolder#getSurface} instead") final Surface mSurface = new Surface(); // Current surface in use - @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023) + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023, + publicAlternatives = "Use {@link View#getVisibility} instead") boolean mDrawingStopped = true; // We use this to track if the application has produced a frame // in to the Surface. Up until that point, we should be careful not to punch @@ -156,13 +163,16 @@ public class SurfaceView extends View implements ViewRootImpl.SurfaceChangedCall int mSubLayer = APPLICATION_MEDIA_SUBLAYER; int mRequestedSubLayer = APPLICATION_MEDIA_SUBLAYER; - @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023) + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023, + publicAlternatives = "Use {@link SurfaceHolder#isCreating} instead") boolean mIsCreating = false; private final ViewTreeObserver.OnScrollChangedListener mScrollChangedListener = this::updateSurface; - @UnsupportedAppUsage + @UnsupportedAppUsage( + maxTargetSdk = Build.VERSION_CODES.TIRAMISU, + publicAlternatives = "Rely on {@link ViewTreeObserver#dispatchOnPreDraw} instead") private final ViewTreeObserver.OnPreDrawListener mDrawListener = () -> { // reposition ourselves where the surface is mHaveFrame = getWidth() > 0 && getHeight() > 0; @@ -176,24 +186,32 @@ public class SurfaceView extends View implements ViewRootImpl.SurfaceChangedCall boolean mViewVisibility = false; boolean mWindowStopped = false; - @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023) + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023, + publicAlternatives = "Use {@link View#getWidth} instead") int mRequestedWidth = -1; - @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023) + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023, + publicAlternatives = "Use {@link View#getHeight} instead") int mRequestedHeight = -1; /* Set SurfaceView's format to 565 by default to maintain backward * compatibility with applications assuming this format. */ - @UnsupportedAppUsage + @UnsupportedAppUsage( + maxTargetSdk = Build.VERSION_CODES.TIRAMISU, + publicAlternatives = "Use {@code SurfaceHolder.Callback#surfaceChanged} instead") int mRequestedFormat = PixelFormat.RGB_565; float mAlpha = 1f; boolean mClipSurfaceToBounds; int mBackgroundColor = Color.BLACK; - @UnsupportedAppUsage + @UnsupportedAppUsage( + maxTargetSdk = Build.VERSION_CODES.TIRAMISU, + publicAlternatives = "Use {@link View#getWidth} and {@link View#getHeight} to " + + "determine if the SurfaceView is onscreen and has a frame") boolean mHaveFrame = false; boolean mSurfaceCreated = false; - @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023) + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023, + publicAlternatives = "Time {@link SurfaceHolder#lockCanvas} instead") long mLastLockTime = 0; boolean mVisible = false; @@ -202,9 +220,13 @@ public class SurfaceView extends View implements ViewRootImpl.SurfaceChangedCall int mSurfaceWidth = -1; int mSurfaceHeight = -1; float mCornerRadius; - @UnsupportedAppUsage + @UnsupportedAppUsage( + maxTargetSdk = Build.VERSION_CODES.TIRAMISU, + publicAlternatives = "Use {@code SurfaceHolder.Callback#surfaceChanged} " + + "instead") int mFormat = -1; - @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023) + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023, + publicAlternatives = "Use {@link SurfaceHolder#getSurfaceFrame} instead") final Rect mSurfaceFrame = new Rect(); int mLastSurfaceWidth = -1, mLastSurfaceHeight = -1; @SurfaceControl.BufferTransform int mTransformHint = 0; @@ -1410,7 +1432,9 @@ public class SurfaceView extends View implements ViewRootImpl.SurfaceChangedCall * @return true if the surface has dimensions that are fixed in size * @hide */ - @UnsupportedAppUsage + @UnsupportedAppUsage( + maxTargetSdk = Build.VERSION_CODES.TIRAMISU, + publicAlternatives = "Track {@link SurfaceHolder#setFixedSize} instead") public boolean isFixedSize() { return (mRequestedWidth != -1 || mRequestedHeight != -1); } @@ -1446,7 +1470,9 @@ public class SurfaceView extends View implements ViewRootImpl.SurfaceChangedCall updateBackgroundColor(t); } - @UnsupportedAppUsage + @UnsupportedAppUsage( + maxTargetSdk = Build.VERSION_CODES.TIRAMISU, + publicAlternatives = "Use {@link SurfaceView#getHolder} instead") private final SurfaceHolder mSurfaceHolder = new SurfaceHolder() { private static final String LOG_TAG = "SurfaceHolder"; diff --git a/core/java/android/view/accessibility/AccessibilityDisplayProxy.java b/core/java/android/view/accessibility/AccessibilityDisplayProxy.java new file mode 100644 index 000000000000..85f5056e4116 --- /dev/null +++ b/core/java/android/view/accessibility/AccessibilityDisplayProxy.java @@ -0,0 +1,181 @@ +/* + * Copyright (C) 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.view.accessibility; + +import android.accessibilityservice.AccessibilityGestureEvent; +import android.accessibilityservice.AccessibilityService; +import android.accessibilityservice.AccessibilityServiceInfo; +import android.accessibilityservice.IAccessibilityServiceClient; +import android.accessibilityservice.MagnificationConfig; +import android.annotation.NonNull; +import android.annotation.Nullable; +import android.annotation.SystemApi; +import android.content.Context; +import android.graphics.Region; +import android.os.IBinder; +import android.view.KeyEvent; +import android.view.MotionEvent; +import android.view.inputmethod.EditorInfo; + +import com.android.internal.inputmethod.IAccessibilityInputMethodSessionCallback; +import com.android.internal.inputmethod.RemoteAccessibilityInputConnection; + +import java.util.List; +import java.util.concurrent.Executor; + +/** + * Allows a privileged app - an app with MANAGE_ACCESSIBILITY permission and SystemAPI access - to + * interact with the windows in the display that this proxy represents. Proxying the default display + * or a display that is not tracked will throw an exception. Only the real user has access to global + * clients like SystemUI. + * + * <p> + * To register and unregister a proxy, use + * {@link AccessibilityManager#registerDisplayProxy(AccessibilityDisplayProxy)} + * and {@link AccessibilityManager#unregisterDisplayProxy(AccessibilityDisplayProxy)}. If the app + * that has registered the proxy dies, the system will remove the proxy. + * + * TODO(241429275): Complete proxy impl and add additional support (if necessary) like cache methods + * @hide + */ +@SystemApi +public abstract class AccessibilityDisplayProxy { + private static final String LOG_TAG = "AccessibilityDisplayProxy"; + private static final int INVALID_CONNECTION_ID = -1; + + private List<AccessibilityServiceInfo> mInstalledAndEnabledServices; + private Executor mExecutor; + private int mConnectionId = INVALID_CONNECTION_ID; + private int mDisplayId; + IAccessibilityServiceClient mServiceClient; + + /** + * Constructs an AccessibilityDisplayProxy instance. + * @param displayId the id of the display to proxy. + * @param executor the executor used to execute proxy callbacks. + * @param installedAndEnabledServices the list of infos representing the installed and + * enabled a11y services. + */ + public AccessibilityDisplayProxy(int displayId, @NonNull Executor executor, + @NonNull List<AccessibilityServiceInfo> installedAndEnabledServices) { + mDisplayId = displayId; + mExecutor = executor; + // Typically, the context is the Service context of an accessibility service. + // Context is used for ResolveInfo check, which a proxy won't have, IME input + // (FLAG_INPUT_METHOD_EDITOR), which the proxy doesn't need, and tracing + // A11yInteractionClient methods. + // TODO(254097475): Enable tracing, potentially without exposing Context. + mServiceClient = new IAccessibilityServiceClientImpl(null, mExecutor); + mInstalledAndEnabledServices = installedAndEnabledServices; + } + + /** + * Returns the id of the display being proxy-ed. + */ + public int getDisplayId() { + return mDisplayId; + } + + /** + * An IAccessibilityServiceClient that handles interrupts and accessibility events. + */ + private class IAccessibilityServiceClientImpl extends + AccessibilityService.IAccessibilityServiceClientWrapper { + + IAccessibilityServiceClientImpl(Context context, Executor executor) { + super(context, executor, new AccessibilityService.Callbacks() { + @Override + public void onAccessibilityEvent(AccessibilityEvent event) { + // TODO: call AccessiiblityProxy.onAccessibilityEvent + } + + @Override + public void onInterrupt() { + // TODO: call AccessiiblityProxy.onInterrupt + } + @Override + public void onServiceConnected() { + // TODO: send service infos and call AccessiiblityProxy.onProxyConnected + } + @Override + public void init(int connectionId, IBinder windowToken) { + mConnectionId = connectionId; + } + + @Override + public boolean onGesture(AccessibilityGestureEvent gestureInfo) { + return false; + } + + @Override + public boolean onKeyEvent(KeyEvent event) { + return false; + } + + @Override + public void onMagnificationChanged(int displayId, @NonNull Region region, + MagnificationConfig config) { + } + + @Override + public void onMotionEvent(MotionEvent event) { + } + + @Override + public void onTouchStateChanged(int displayId, int state) { + } + + @Override + public void onSoftKeyboardShowModeChanged(int showMode) { + } + + @Override + public void onPerformGestureResult(int sequence, boolean completedSuccessfully) { + } + + @Override + public void onFingerprintCapturingGesturesChanged(boolean active) { + } + + @Override + public void onFingerprintGesture(int gesture) { + } + + @Override + public void onAccessibilityButtonClicked(int displayId) { + } + + @Override + public void onAccessibilityButtonAvailabilityChanged(boolean available) { + } + + @Override + public void onSystemActionsChanged() { + } + + @Override + public void createImeSession(IAccessibilityInputMethodSessionCallback callback) { + } + + @Override + public void startInput(@Nullable RemoteAccessibilityInputConnection inputConnection, + @NonNull EditorInfo editorInfo, boolean restarting) { + } + }); + } + } +} diff --git a/core/java/android/view/accessibility/AccessibilityManager.java b/core/java/android/view/accessibility/AccessibilityManager.java index 5433fa08ac18..423c560d5c57 100644 --- a/core/java/android/view/accessibility/AccessibilityManager.java +++ b/core/java/android/view/accessibility/AccessibilityManager.java @@ -1921,6 +1921,67 @@ public final class AccessibilityManager { } } + /** + * Registers an {@link AccessibilityDisplayProxy}, so this proxy can access UI content specific + * to its display. + * + * @param proxy the {@link AccessibilityDisplayProxy} to register. + * @return {@code true} if the proxy is successfully registered. + * + * @throws IllegalArgumentException if the proxy's display is not currently tracked by a11y, is + * {@link android.view.Display#DEFAULT_DISPLAY}, is or lower than + * {@link android.view.Display#INVALID_DISPLAY}, or is already being proxy-ed. + * + * @throws SecurityException if the app does not hold the + * {@link Manifest.permission#MANAGE_ACCESSIBILITY} permission. + * + * @hide + */ + @SystemApi + @RequiresPermission(Manifest.permission.MANAGE_ACCESSIBILITY) + public boolean registerDisplayProxy(@NonNull AccessibilityDisplayProxy proxy) { + final IAccessibilityManager service; + synchronized (mLock) { + service = getServiceLocked(); + if (service == null) { + return false; + } + } + + try { + return service.registerProxyForDisplay(proxy.mServiceClient, proxy.getDisplayId()); + } catch (RemoteException re) { + throw re.rethrowFromSystemServer(); + } + } + + /** + * Unregisters an {@link AccessibilityDisplayProxy}. + * + * @return {@code true} if the proxy is successfully unregistered. + * + * @throws SecurityException if the app does not hold the + * {@link Manifest.permission#MANAGE_ACCESSIBILITY} permission. + * + * @hide + */ + @SystemApi + @RequiresPermission(Manifest.permission.MANAGE_ACCESSIBILITY) + public boolean unregisterDisplayProxy(@NonNull AccessibilityDisplayProxy proxy) { + final IAccessibilityManager service; + synchronized (mLock) { + service = getServiceLocked(); + if (service == null) { + return false; + } + } + try { + return service.unregisterProxyForDisplay(proxy.getDisplayId()); + } catch (RemoteException re) { + throw re.rethrowFromSystemServer(); + } + } + private IAccessibilityManager getServiceLocked() { if (mService == null) { tryConnectToServiceLocked(null); diff --git a/core/java/android/view/accessibility/IAccessibilityManager.aidl b/core/java/android/view/accessibility/IAccessibilityManager.aidl index 36fdcce4e1f2..a25194804987 100644 --- a/core/java/android/view/accessibility/IAccessibilityManager.aidl +++ b/core/java/android/view/accessibility/IAccessibilityManager.aidl @@ -109,9 +109,9 @@ interface IAccessibilityManager { oneway void setAccessibilityWindowAttributes(int displayId, int windowId, int userId, in AccessibilityWindowAttributes attributes); - // Requires Manifest.permission.MANAGE_ACCESSIBILITY + @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.MANAGE_ACCESSIBILITY)") boolean registerProxyForDisplay(IAccessibilityServiceClient proxy, int displayId); - // Requires Manifest.permission.MANAGE_ACCESSIBILITY + @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.MANAGE_ACCESSIBILITY)") boolean unregisterProxyForDisplay(int displayId); } diff --git a/core/java/android/view/inputmethod/IInputMethodManagerGlobalInvoker.java b/core/java/android/view/inputmethod/IInputMethodManagerGlobalInvoker.java index aeff37c67444..1afa98769a5a 100644 --- a/core/java/android/view/inputmethod/IInputMethodManagerGlobalInvoker.java +++ b/core/java/android/view/inputmethod/IInputMethodManagerGlobalInvoker.java @@ -16,6 +16,7 @@ package android.view.inputmethod; +import android.Manifest; import android.annotation.AnyThread; import android.annotation.DurationMillisLong; import android.annotation.NonNull; @@ -353,6 +354,7 @@ final class IInputMethodManagerGlobalInvoker { } @AnyThread + @RequiresPermission(Manifest.permission.TEST_INPUT_METHOD) static boolean isInputMethodPickerShownForTest() { final IInputMethodManager service = getService(); if (service == null) { @@ -487,6 +489,7 @@ final class IInputMethodManagerGlobalInvoker { } @AnyThread + @RequiresPermission(Manifest.permission.TEST_INPUT_METHOD) static void addVirtualStylusIdForTestSession(IInputMethodClient client) { final IInputMethodManager service = getService(); if (service == null) { diff --git a/core/java/android/view/inputmethod/InputMethodManager.java b/core/java/android/view/inputmethod/InputMethodManager.java index 1697bf8bcf7b..9106ce27c27c 100644 --- a/core/java/android/view/inputmethod/InputMethodManager.java +++ b/core/java/android/view/inputmethod/InputMethodManager.java @@ -2596,6 +2596,7 @@ public final class InputMethodManager { * @hide */ @TestApi + @RequiresPermission(Manifest.permission.TEST_INPUT_METHOD) public void addVirtualStylusIdForTestSession() { synchronized (mH) { IInputMethodManagerGlobalInvoker.addVirtualStylusIdForTestSession(mClient); @@ -3465,6 +3466,7 @@ public final class InputMethodManager { * @hide */ @TestApi + @RequiresPermission(Manifest.permission.TEST_INPUT_METHOD) public boolean isInputMethodPickerShown() { return IInputMethodManagerGlobalInvoker.isInputMethodPickerShownForTest(); } diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java index b5c58fb4bfc0..1144b598e47a 100644 --- a/core/java/android/widget/TextView.java +++ b/core/java/android/widget/TextView.java @@ -69,6 +69,7 @@ import android.graphics.BaseCanvas; import android.graphics.BlendMode; import android.graphics.Canvas; import android.graphics.Insets; +import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.Paint.FontMetricsInt; import android.graphics.Path; @@ -200,6 +201,7 @@ import android.view.inputmethod.JoinOrSplitGesture; import android.view.inputmethod.RemoveSpaceGesture; import android.view.inputmethod.SelectGesture; import android.view.inputmethod.SelectRangeGesture; +import android.view.inputmethod.TextBoundsInfo; import android.view.inspector.InspectableProperty; import android.view.inspector.InspectableProperty.EnumEntry; import android.view.inspector.InspectableProperty.FlagEntry; @@ -12953,18 +12955,15 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener getLocalVisibleRect(rect); final RectF visibleRect = new RectF(rect); - final float[] characterBounds = new float[4 * (endIndex - startIndex)]; - mLayout.fillCharacterBounds(startIndex, endIndex, characterBounds, 0); + + final float[] characterBounds = getCharacterBounds(startIndex, endIndex, + viewportToContentHorizontalOffset, viewportToContentVerticalOffset); final int limit = endIndex - startIndex; for (int offset = 0; offset < limit; ++offset) { - final float left = - characterBounds[offset * 4] + viewportToContentHorizontalOffset; - final float top = - characterBounds[offset * 4 + 1] + viewportToContentVerticalOffset; - final float right = - characterBounds[offset * 4 + 2] + viewportToContentHorizontalOffset; - final float bottom = - characterBounds[offset * 4 + 3] + viewportToContentVerticalOffset; + final float left = characterBounds[offset * 4]; + final float top = characterBounds[offset * 4 + 1]; + final float right = characterBounds[offset * 4 + 2]; + final float bottom = characterBounds[offset * 4 + 3]; final boolean hasVisibleRegion = visibleRect.intersects(left, top, right, bottom); final boolean hasInVisibleRegion = !visibleRect.contains(left, top, right, bottom); @@ -12985,6 +12984,149 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener } /** + * Return the bounds of the characters in the given range, in TextView's coordinates. + * + * @param start the start index of the interested text range, inclusive. + * @param end the end index of the interested text range, exclusive. + * @param layoutLeft the left of the given {@code layout} in the editor view's coordinates. + * @param layoutTop the top of the given {@code layout} in the editor view's coordinates. + * @return the character bounds stored in a flattened array, in the editor view's coordinates. + */ + private float[] getCharacterBounds(int start, int end, float layoutLeft, float layoutTop) { + final float[] characterBounds = new float[4 * (end - start)]; + mLayout.fillCharacterBounds(start, end, characterBounds, 0); + for (int offset = 0; offset < end - start; ++offset) { + characterBounds[4 * offset] += layoutLeft; + characterBounds[4 * offset + 1] += layoutTop; + characterBounds[4 * offset + 2] += layoutLeft; + characterBounds[4 * offset + 3] += layoutTop; + } + return characterBounds; + } + + /** + * Creates the {@link TextBoundsInfo} for the text lines that intersects with the {@code rectF}. + * @hide + */ + public TextBoundsInfo getTextBoundsInfo(@NonNull RectF rectF) { + final Layout layout = getLayout(); + if (layout == null) { + // No valid text layout, return null. + return null; + } + final CharSequence text = layout.getText(); + if (text == null) { + // It's impossible that a layout has no text. Check here to avoid NPE. + return null; + } + + final Matrix localToGlobalMatrix = new Matrix(); + transformMatrixToGlobal(localToGlobalMatrix); + final Matrix globalToLocalMatrix = new Matrix(); + if (!localToGlobalMatrix.invert(globalToLocalMatrix)) { + // Can't map global rectF to local coordinates, this is almost impossible in practice. + return null; + } + + final float layoutLeft = viewportToContentHorizontalOffset(); + final float layoutTop = viewportToContentVerticalOffset(); + + final RectF localRectF = new RectF(rectF); + globalToLocalMatrix.mapRect(localRectF); + localRectF.offset(-layoutLeft, -layoutTop); + + // Text length is 0. There is no character bounds, return empty TextBoundsInfo. + // rectF doesn't intersect with the layout, return empty TextBoundsInfo. + if (!localRectF.intersects(0f, 0f, layout.getWidth(), layout.getHeight()) + || text.length() == 0) { + final TextBoundsInfo.Builder builder = new TextBoundsInfo.Builder(); + final SegmentFinder emptySegmentFinder = + new SegmentFinder.DefaultSegmentFinder(new int[0]); + builder.setStartAndEnd(0, 0) + .setMatrix(localToGlobalMatrix) + .setCharacterBounds(new float[0]) + .setCharacterBidiLevel(new int[0]) + .setCharacterFlags(new int[0]) + .setGraphemeSegmentFinder(emptySegmentFinder) + .setLineSegmentFinder(emptySegmentFinder) + .setWordSegmentFinder(emptySegmentFinder); + return builder.build(); + } + + final int startLine = layout.getLineForVertical((int) Math.floor(localRectF.top)); + final int endLine = layout.getLineForVertical((int) Math.floor(localRectF.bottom)); + final int start = layout.getLineStart(startLine); + final int end = layout.getLineEnd(endLine); + + // Compute character bounds. + final float[] characterBounds = getCharacterBounds(start, end, layoutLeft, layoutTop); + + // Compute character flags and BiDi levels. + final int[] characterFlags = new int[end - start]; + final int[] characterBidiLevels = new int[end - start]; + for (int line = startLine; line <= endLine; ++line) { + final int lineStart = layout.getLineStart(line); + final int lineEnd = layout.getLineEnd(line); + final Layout.Directions directions = layout.getLineDirections(line); + for (int i = 0; i < directions.getRunCount(); ++i) { + final int runStart = directions.getRunStart(i) + lineStart; + final int runEnd = Math.min(runStart + directions.getRunLength(i), lineEnd); + final int runLevel = directions.getRunLevel(i); + Arrays.fill(characterBidiLevels, runStart - start, runEnd - start, runLevel); + } + + final boolean lineIsRtl = + layout.getParagraphDirection(line) == Layout.DIR_RIGHT_TO_LEFT; + for (int index = lineStart; index < lineEnd; ++index) { + int flags = 0; + if (TextUtils.isWhitespace(text.charAt(index))) { + flags |= TextBoundsInfo.FLAG_CHARACTER_WHITESPACE; + } + if (TextUtils.isPunctuation(Character.codePointAt(text, index))) { + flags |= TextBoundsInfo.FLAG_CHARACTER_PUNCTUATION; + } + if (TextUtils.isNewline(Character.codePointAt(text, index))) { + flags |= TextBoundsInfo.FLAG_CHARACTER_LINEFEED; + } + if (lineIsRtl) { + flags |= TextBoundsInfo.FLAG_LINE_IS_RTL; + } + characterFlags[index - start] = flags; + } + } + + // Create grapheme SegmentFinder. + final SegmentFinder graphemeSegmentFinder = + new GraphemeClusterSegmentFinder(text, layout.getPaint()); + + // Create word SegmentFinder. + final WordIterator wordIterator = getWordIterator(); + wordIterator.setCharSequence(text, 0, text.length()); + final SegmentFinder wordSegmentFinder = new WordSegmentFinder(text, wordIterator); + + // Create line SegmentFinder. + final int lineCount = endLine - startLine + 1; + final int[] lineRanges = new int[2 * lineCount]; + for (int line = startLine; line <= endLine; ++line) { + final int offset = line - startLine; + lineRanges[2 * offset] = layout.getLineStart(line); + lineRanges[2 * offset + 1] = layout.getLineEnd(line); + } + final SegmentFinder lineSegmentFinder = new SegmentFinder.DefaultSegmentFinder(lineRanges); + + final TextBoundsInfo.Builder builder = new TextBoundsInfo.Builder(); + builder.setStartAndEnd(start, end) + .setMatrix(localToGlobalMatrix) + .setCharacterBounds(characterBounds) + .setCharacterBidiLevel(characterBidiLevels) + .setCharacterFlags(characterFlags) + .setGraphemeSegmentFinder(graphemeSegmentFinder) + .setLineSegmentFinder(lineSegmentFinder) + .setWordSegmentFinder(wordSegmentFinder); + return builder.build(); + } + + /** * @hide */ public boolean isPositionVisible(final float positionX, final float positionY) { diff --git a/core/java/com/android/internal/inputmethod/EditableInputConnection.java b/core/java/com/android/internal/inputmethod/EditableInputConnection.java index f600c36cd8c9..b155dd480ab2 100644 --- a/core/java/com/android/internal/inputmethod/EditableInputConnection.java +++ b/core/java/com/android/internal/inputmethod/EditableInputConnection.java @@ -25,6 +25,7 @@ import static android.view.inputmethod.InputConnectionProto.SELECTED_TEXT_START; import android.annotation.CallbackExecutor; import android.annotation.NonNull; import android.annotation.Nullable; +import android.graphics.RectF; import android.os.Bundle; import android.text.Editable; import android.text.Selection; @@ -46,9 +47,12 @@ import android.view.inputmethod.JoinOrSplitGesture; import android.view.inputmethod.RemoveSpaceGesture; import android.view.inputmethod.SelectGesture; import android.view.inputmethod.SelectRangeGesture; +import android.view.inputmethod.TextBoundsInfo; +import android.view.inputmethod.TextBoundsInfoResult; import android.widget.TextView; import java.util.concurrent.Executor; +import java.util.function.Consumer; import java.util.function.IntConsumer; /** @@ -262,6 +266,23 @@ public final class EditableInputConnection extends BaseInputConnection } @Override + public void requestTextBoundsInfo( + @NonNull RectF rectF, @Nullable @CallbackExecutor Executor executor, + @NonNull Consumer<TextBoundsInfoResult> consumer) { + final TextBoundsInfo textBoundsInfo = mTextView.getTextBoundsInfo(rectF); + final int resultCode; + if (textBoundsInfo != null) { + resultCode = TextBoundsInfoResult.CODE_SUCCESS; + } else { + resultCode = TextBoundsInfoResult.CODE_FAILED; + } + final TextBoundsInfoResult textBoundsInfoResult = + new TextBoundsInfoResult(resultCode, textBoundsInfo); + + executor.execute(() -> consumer.accept(textBoundsInfoResult)); + } + + @Override public boolean setImeConsumesInput(boolean imeConsumesInput) { if (mTextView == null) { return super.setImeConsumesInput(imeConsumesInput); diff --git a/core/java/com/android/internal/view/IInputMethodManager.aidl b/core/java/com/android/internal/view/IInputMethodManager.aidl index 423642acf2f7..f7bb16e8ba54 100644 --- a/core/java/com/android/internal/view/IInputMethodManager.aidl +++ b/core/java/com/android/internal/view/IInputMethodManager.aidl @@ -147,9 +147,9 @@ interface IInputMethodManager { boolean isStylusHandwritingAvailableAsUser(int userId); /** add virtual stylus id for test Stylus handwriting session **/ - @EnforcePermission("INJECT_EVENTS") + @EnforcePermission("TEST_INPUT_METHOD") @JavaPassthrough(annotation="@android.annotation.RequiresPermission(value = " - + "android.Manifest.permission.INJECT_EVENTS)") + + "android.Manifest.permission.TEST_INPUT_METHOD)") void addVirtualStylusIdForTestSession(in IInputMethodClient client); /** Set a stylus idle-timeout after which handwriting {@code InkWindow} will be removed. */ diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml index 953ea898fcf9..16e0a5967e78 100644 --- a/core/res/AndroidManifest.xml +++ b/core/res/AndroidManifest.xml @@ -1150,6 +1150,18 @@ android:description="@string/permdesc_readMediaImages" android:protectionLevel="dangerous" /> + <!-- Allows an application to read image or video files from external storage that a user has + selected via the permission prompt photo picker. Apps can check this permission to verify that + a user has decided to use the photo picker, instead of granting access to + {@link #READ_MEDIA_IMAGES or #READ_MEDIA_VIDEO}. It does not prevent apps from accessing the + standard photo picker manually. + <p>Protection level: dangerous --> + <permission android:name="android.permission.READ_MEDIA_VISUAL_USER_SELECTED" + android:permissionGroup="android.permission-group.UNDEFINED" + android:label="@string/permlab_readVisualUserSelect" + android:description="@string/permdesc_readVisualUserSelect" + android:protectionLevel="dangerous" /> + <!-- Allows an application to write to external storage. <p><strong>Note: </strong>If your app targets {@link android.os.Build.VERSION_CODES#R} or higher, this permission has no effect. @@ -4133,7 +4145,8 @@ android:protectionLevel="signature" /> <!-- Allows access to Test APIs defined in {@link android.view.inputmethod.InputMethodManager}. - @hide --> + @hide + @TestApi --> <permission android:name="android.permission.TEST_INPUT_METHOD" android:protectionLevel="signature" /> diff --git a/core/res/res/values-af/strings.xml b/core/res/res/values-af/strings.xml index 0ebce4019258..b20bfef07976 100644 --- a/core/res/res/values-af/strings.xml +++ b/core/res/res/values-af/strings.xml @@ -72,6 +72,10 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"Beller-ID se verstek is nie beperk nie. Volgende oproep: nie beperk nie"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"Diens nie verskaf nie."</string> <string name="CLIRPermanent" msgid="166443681876381118">"Jy kan nie die beller-ID-instelling verander nie."</string> + <!-- no translation found for auto_data_switch_title (3286350716870518297) --> + <skip /> + <!-- no translation found for auto_data_switch_content (803557715007110959) --> + <skip /> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"Geen mobiele datadiens nie"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"Noodoproepe is onbeskikbaar"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"Geen stemdiens nie"</string> diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml index a861f3cffa6b..2574fd8fba76 100644 --- a/core/res/res/values-am/strings.xml +++ b/core/res/res/values-am/strings.xml @@ -72,6 +72,10 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"የደዋይ ID ነባሪዎች ወደአልተከለከለም። ቀጥሎ ጥሪ፡አልተከለከለም"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"አገልግሎት አልቀረበም።"</string> <string name="CLIRPermanent" msgid="166443681876381118">"የደዋይ መታወቂያ ቅንብሮች መለወጥ አትችልም፡፡"</string> + <!-- no translation found for auto_data_switch_title (3286350716870518297) --> + <skip /> + <!-- no translation found for auto_data_switch_content (803557715007110959) --> + <skip /> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"ምንም የተንቀሳቃሽ ስልክ ውሂብ አገልግሎት የለም"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"የድንገተኛ አደጋ ጥሪ አይገኝም"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"ምንም የድምፅ ጥሪ አገልግሎት የለም"</string> diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml index 7623fb1682da..ba3ebb1a8884 100644 --- a/core/res/res/values-ar/strings.xml +++ b/core/res/res/values-ar/strings.xml @@ -76,6 +76,10 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"الإعداد التلقائي لمعرف المتصل هو غير محظور . الاتصال التالي: غير محظور"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"الخدمة غير متوفرة."</string> <string name="CLIRPermanent" msgid="166443681876381118">"لا يمكنك تغيير إعداد معرّف المتصل."</string> + <!-- no translation found for auto_data_switch_title (3286350716870518297) --> + <skip /> + <!-- no translation found for auto_data_switch_content (803557715007110959) --> + <skip /> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"لا تتوفّر خدمة بيانات جوّال."</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"لا تتوفّر مكالمات طوارئ."</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"لا تتوفر خدمة صوتية"</string> diff --git a/core/res/res/values-as/strings.xml b/core/res/res/values-as/strings.xml index 3a97bafe26cf..d49d3b1a6417 100644 --- a/core/res/res/values-as/strings.xml +++ b/core/res/res/values-as/strings.xml @@ -72,6 +72,10 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"কলাৰ আইডি সীমিত নকৰিবলৈ পূর্বনির্ধাৰণ কৰা হৈছে। পৰৱৰ্তী কল: সীমিত কৰা হোৱা নাই"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"সুবিধা যোগান ধৰা হোৱা নাই।"</string> <string name="CLIRPermanent" msgid="166443681876381118">"আপুনি কলাৰ আইডি ছেটিং সলনি কৰিব নোৱাৰে।"</string> + <!-- no translation found for auto_data_switch_title (3286350716870518297) --> + <skip /> + <!-- no translation found for auto_data_switch_content (803557715007110959) --> + <skip /> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"কোনো ম’বাইল ডেটা সেৱা নাই"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"জৰুৰীকালীন কল কৰাৰ সুবিধা উপলব্ধ নহয়"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"কোনো ভইচ সেৱা নাই"</string> diff --git a/core/res/res/values-az/strings.xml b/core/res/res/values-az/strings.xml index 0b361aca0d96..ffd1480da8ca 100644 --- a/core/res/res/values-az/strings.xml +++ b/core/res/res/values-az/strings.xml @@ -72,6 +72,10 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"Zəng edənin kimliyi defolt olaraq qadağan deyil. Növbəti zəng: Qadağan deyil"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"Xidmət təmin edilməyib."</string> <string name="CLIRPermanent" msgid="166443681876381118">"Çağrı kimliyi ayarını dəyişə bilməzsiniz."</string> + <!-- no translation found for auto_data_switch_title (3286350716870518297) --> + <skip /> + <!-- no translation found for auto_data_switch_content (803557715007110959) --> + <skip /> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"Mobil data xidməti yoxdur"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"Təcili zəng əlçatan deyil"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"Səsli xidmət yoxdur"</string> diff --git a/core/res/res/values-b+sr+Latn/strings.xml b/core/res/res/values-b+sr+Latn/strings.xml index 078c098efd58..b1ec940bb865 100644 --- a/core/res/res/values-b+sr+Latn/strings.xml +++ b/core/res/res/values-b+sr+Latn/strings.xml @@ -73,6 +73,10 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"ID pozivaoca podrazumevano nije ograničen. Sledeći poziv: Nije ograničen."</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"Usluga nije dobavljena."</string> <string name="CLIRPermanent" msgid="166443681876381118">"Ne možete da promenite podešavanje ID-a korisnika."</string> + <!-- no translation found for auto_data_switch_title (3286350716870518297) --> + <skip /> + <!-- no translation found for auto_data_switch_content (803557715007110959) --> + <skip /> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"Nema usluge mobilnih podataka"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"Hitni pozivi nisu dostupni"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"Nema glasovne usluge"</string> diff --git a/core/res/res/values-be/strings.xml b/core/res/res/values-be/strings.xml index 023e82c774ec..40605c5b4389 100644 --- a/core/res/res/values-be/strings.xml +++ b/core/res/res/values-be/strings.xml @@ -74,6 +74,10 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"Налады ідэнтыфікатару АВН па змаўчанні: не абмяжавана. Наступны выклік: не абмежавана"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"Служба не прадастаўляецца."</string> <string name="CLIRPermanent" msgid="166443681876381118">"Вы не можаце змяніць налады ідэнтыфікатара абанента, якi тэлефануе."</string> + <!-- no translation found for auto_data_switch_title (3286350716870518297) --> + <skip /> + <!-- no translation found for auto_data_switch_content (803557715007110959) --> + <skip /> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"Мабільная перадача даных недаступная"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"Экстранныя выклікі недаступныя"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"Няма сэрвісу галасавых выклікаў"</string> diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml index aaa080a355ba..a1c9d1c7a628 100644 --- a/core/res/res/values-bg/strings.xml +++ b/core/res/res/values-bg/strings.xml @@ -72,6 +72,10 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"Стандартната идентификация на повикванията е „разрешено“. За следващото обаждане тя е разрешена."</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"Услугата не е обезпечена."</string> <string name="CLIRPermanent" msgid="166443681876381118">"Не можете да променяте настройката за идентификация на обажданията."</string> + <!-- no translation found for auto_data_switch_title (3286350716870518297) --> + <skip /> + <!-- no translation found for auto_data_switch_content (803557715007110959) --> + <skip /> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"Няма достъп до мобилната услуга за данни"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"Няма достъп до спешните обаждания"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"Няма услуга за гласови обаждания"</string> diff --git a/core/res/res/values-bn/strings.xml b/core/res/res/values-bn/strings.xml index ee1db8e89ebd..fd69acdb859a 100644 --- a/core/res/res/values-bn/strings.xml +++ b/core/res/res/values-bn/strings.xml @@ -72,6 +72,10 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"ডিফল্টরূপে কলার আইডি সীমাবদ্ধ করা থাকে না৷ পরবর্তী কল: সীমাবদ্ধ নয়"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"পরিষেবা প্রস্তুত নয়৷"</string> <string name="CLIRPermanent" msgid="166443681876381118">"আপনি কলার আইডি এর সেটিংস পরিবর্তন করতে পারবেন না৷"</string> + <!-- no translation found for auto_data_switch_title (3286350716870518297) --> + <skip /> + <!-- no translation found for auto_data_switch_content (803557715007110959) --> + <skip /> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"মোবাইল ডেটা পরিষেবা নেই"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"জরুরি কল করা যাবে না"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"ভয়েস পরিষেবা নেই"</string> diff --git a/core/res/res/values-bs/strings.xml b/core/res/res/values-bs/strings.xml index 20f6bc12a952..455c9e95c9df 100644 --- a/core/res/res/values-bs/strings.xml +++ b/core/res/res/values-bs/strings.xml @@ -73,6 +73,8 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"Prikaz ID-a pozivaoca u zadanim postavkama nije zabranjen. Sljedeći poziv: nije zabranjen"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"Uslugu nije moguće koristiti."</string> <string name="CLIRPermanent" msgid="166443681876381118">"Ne možete promijeniti postavke ID-a pozivaoca."</string> + <string name="auto_data_switch_title" msgid="3286350716870518297">"Podaci su prebačeni na <xliff:g id="CARRIERDISPLAY">%s</xliff:g>"</string> + <string name="auto_data_switch_content" msgid="803557715007110959">"To uvijek možete promijeniti u postavkama"</string> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"Nema usluge prijenosa podataka na mobilnoj mreži"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"Hitni pozivi su nedostupni"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"Nema usluge govornih poziva"</string> diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml index 2142b6093dbb..43dc6764e8bd 100644 --- a/core/res/res/values-ca/strings.xml +++ b/core/res/res/values-ca/strings.xml @@ -72,6 +72,10 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"El valor predeterminat de l\'identificador de trucada és no restringit. Trucada següent: no restringit"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"No s\'ha proveït el servei."</string> <string name="CLIRPermanent" msgid="166443681876381118">"No pots canviar la configuració de l\'identificador de trucada."</string> + <!-- no translation found for auto_data_switch_title (3286350716870518297) --> + <skip /> + <!-- no translation found for auto_data_switch_content (803557715007110959) --> + <skip /> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"No hi ha servei de dades mòbils"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"Les trucades d\'emergència no estan disponibles"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"Sense servei de veu"</string> diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml index 7720d083409c..132a9f5bdc89 100644 --- a/core/res/res/values-cs/strings.xml +++ b/core/res/res/values-cs/strings.xml @@ -74,6 +74,10 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"Ve výchozím nastavení není funkce ID volajícího omezena. Příští hovor: Neomezeno"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"Služba není zřízena."</string> <string name="CLIRPermanent" msgid="166443681876381118">"Nastavení ID volajícího nesmíte měnit."</string> + <!-- no translation found for auto_data_switch_title (3286350716870518297) --> + <skip /> + <!-- no translation found for auto_data_switch_content (803557715007110959) --> + <skip /> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"Není k dispozici žádná mobilní datová služba"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"Tísňová volání jsou nedostupná"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"Hlasová volání nejsou k dispozici"</string> diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml index ecd64070a75b..9dd43341df34 100644 --- a/core/res/res/values-da/strings.xml +++ b/core/res/res/values-da/strings.xml @@ -72,6 +72,8 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"Standarder for opkalds-id til ikke begrænset. Næste opkald: Ikke begrænset"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"Tjenesten provisioneres ikke."</string> <string name="CLIRPermanent" msgid="166443681876381118">"Du kan ikke ændre indstillingen for opkalds-id\'et."</string> + <string name="auto_data_switch_title" msgid="3286350716870518297">"Der blev skiftet til <xliff:g id="CARRIERDISPLAY">%s</xliff:g>-data"</string> + <string name="auto_data_switch_content" msgid="803557715007110959">"Du kan altid ændre dette under Indstillinger"</string> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"Ingen mobildatatjeneste"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"Det er ikke muligt at foretage nødopkald"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"Ingen taletjeneste"</string> diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml index 3d5985c9f1cc..661c2cda1289 100644 --- a/core/res/res/values-de/strings.xml +++ b/core/res/res/values-de/strings.xml @@ -72,6 +72,10 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"Anrufer-ID ist standardmäßig nicht beschränkt. Nächster Anruf: Nicht beschränkt"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"Dienst nicht eingerichtet."</string> <string name="CLIRPermanent" msgid="166443681876381118">"Du kannst die Einstellung für die Anrufer-ID nicht ändern."</string> + <!-- no translation found for auto_data_switch_title (3286350716870518297) --> + <skip /> + <!-- no translation found for auto_data_switch_content (803557715007110959) --> + <skip /> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"Kein mobiler Datendienst"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"Notrufe nicht möglich"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"Keine Anrufe"</string> diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml index f84a9fb01066..8cb3989ba55a 100644 --- a/core/res/res/values-el/strings.xml +++ b/core/res/res/values-el/strings.xml @@ -72,6 +72,8 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"Η αναγνώριση κλήσης βρίσκεται από προεπιλογή στην \"μη περιορισμένη\". Επόμενη κλήση: Μη περιορισμένη"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"Η υπηρεσία δεν προβλέπεται."</string> <string name="CLIRPermanent" msgid="166443681876381118">"Δεν μπορείτε να αλλάξετε τη ρύθμιση του αναγνωριστικού καλούντος."</string> + <string name="auto_data_switch_title" msgid="3286350716870518297">"Έγινε εναλλαγή των δεδομένων σε <xliff:g id="CARRIERDISPLAY">%s</xliff:g>"</string> + <string name="auto_data_switch_content" msgid="803557715007110959">"Μπορείτε να αλλάξετε αυτήν την επιλογή ανά πάσα στιγμή στις Ρυθμίσεις"</string> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"Δεν υπάρχει υπηρεσία δεδομένων κινητής τηλεφωνίας"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"Οι κλήσεις έκτακτης ανάγκης δεν είναι διαθέσιμες"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"Δεν υπάρχει φωνητική υπηρεσία"</string> diff --git a/core/res/res/values-en-rAU/strings.xml b/core/res/res/values-en-rAU/strings.xml index 4c0510bef4cf..75db3826ac48 100644 --- a/core/res/res/values-en-rAU/strings.xml +++ b/core/res/res/values-en-rAU/strings.xml @@ -72,6 +72,8 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"Caller ID defaults to not restricted. Next call: Not restricted"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"Service not provisioned."</string> <string name="CLIRPermanent" msgid="166443681876381118">"You can\'t change the caller ID setting."</string> + <string name="auto_data_switch_title" msgid="3286350716870518297">"Switched data to <xliff:g id="CARRIERDISPLAY">%s</xliff:g>"</string> + <string name="auto_data_switch_content" msgid="803557715007110959">"You can change this at any time in Settings"</string> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"No mobile data service"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"Emergency calling unavailable"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"No voice service"</string> diff --git a/core/res/res/values-en-rCA/strings.xml b/core/res/res/values-en-rCA/strings.xml index 875ddf9f3829..883cd55ddaa3 100644 --- a/core/res/res/values-en-rCA/strings.xml +++ b/core/res/res/values-en-rCA/strings.xml @@ -72,6 +72,8 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"Caller ID defaults to not restricted. Next call: Not restricted"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"Service not provisioned."</string> <string name="CLIRPermanent" msgid="166443681876381118">"You can\'t change the caller ID setting."</string> + <string name="auto_data_switch_title" msgid="3286350716870518297">"Switched data to <xliff:g id="CARRIERDISPLAY">%s</xliff:g>"</string> + <string name="auto_data_switch_content" msgid="803557715007110959">"You can change this at any time in Settings"</string> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"No mobile data service"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"Emergency calling unavailable"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"No voice service"</string> diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml index 6e034b730083..c4c19da5d2b2 100644 --- a/core/res/res/values-en-rGB/strings.xml +++ b/core/res/res/values-en-rGB/strings.xml @@ -72,6 +72,8 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"Caller ID defaults to not restricted. Next call: Not restricted"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"Service not provisioned."</string> <string name="CLIRPermanent" msgid="166443681876381118">"You can\'t change the caller ID setting."</string> + <string name="auto_data_switch_title" msgid="3286350716870518297">"Switched data to <xliff:g id="CARRIERDISPLAY">%s</xliff:g>"</string> + <string name="auto_data_switch_content" msgid="803557715007110959">"You can change this at any time in Settings"</string> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"No mobile data service"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"Emergency calling unavailable"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"No voice service"</string> diff --git a/core/res/res/values-en-rIN/strings.xml b/core/res/res/values-en-rIN/strings.xml index 643f27f49220..d19199d5ae08 100644 --- a/core/res/res/values-en-rIN/strings.xml +++ b/core/res/res/values-en-rIN/strings.xml @@ -72,6 +72,8 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"Caller ID defaults to not restricted. Next call: Not restricted"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"Service not provisioned."</string> <string name="CLIRPermanent" msgid="166443681876381118">"You can\'t change the caller ID setting."</string> + <string name="auto_data_switch_title" msgid="3286350716870518297">"Switched data to <xliff:g id="CARRIERDISPLAY">%s</xliff:g>"</string> + <string name="auto_data_switch_content" msgid="803557715007110959">"You can change this at any time in Settings"</string> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"No mobile data service"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"Emergency calling unavailable"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"No voice service"</string> diff --git a/core/res/res/values-en-rXC/strings.xml b/core/res/res/values-en-rXC/strings.xml index 91e99fff4c7a..9037d70ec3b4 100644 --- a/core/res/res/values-en-rXC/strings.xml +++ b/core/res/res/values-en-rXC/strings.xml @@ -72,6 +72,8 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"Caller ID defaults to not restricted. Next call: Not restricted"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"Service not provisioned."</string> <string name="CLIRPermanent" msgid="166443681876381118">"You can\'t change the caller ID setting."</string> + <string name="auto_data_switch_title" msgid="3286350716870518297">"Switched data to <xliff:g id="CARRIERDISPLAY">%s</xliff:g>"</string> + <string name="auto_data_switch_content" msgid="803557715007110959">"You can change this anytime in Settings"</string> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"No mobile data service"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"Emergency calling unavailable"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"No voice service"</string> diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml index 6a45205a3558..9441f27d5daa 100644 --- a/core/res/res/values-es-rUS/strings.xml +++ b/core/res/res/values-es-rUS/strings.xml @@ -73,6 +73,10 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"El Identificador de llamadas está predeterminado en no restringido. Llamada siguiente: no restringido"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"Servicio no suministrado."</string> <string name="CLIRPermanent" msgid="166443681876381118">"No puedes cambiar la configuración del identificador de llamadas."</string> + <!-- no translation found for auto_data_switch_title (3286350716870518297) --> + <skip /> + <!-- no translation found for auto_data_switch_content (803557715007110959) --> + <skip /> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"No hay ningún servicio de datos móviles"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"Servicio de llamadas de emergencia no disponible"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"Sin servicio de voz"</string> diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml index 66f67b368c72..753aa8b93c5e 100644 --- a/core/res/res/values-es/strings.xml +++ b/core/res/res/values-es/strings.xml @@ -73,6 +73,10 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"La identificación del emisor presenta el valor predeterminado de no restringido. Siguiente llamada: No restringido"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"El servicio no se suministra."</string> <string name="CLIRPermanent" msgid="166443681876381118">"No puedes modificar la identificación de emisor."</string> + <!-- no translation found for auto_data_switch_title (3286350716870518297) --> + <skip /> + <!-- no translation found for auto_data_switch_content (803557715007110959) --> + <skip /> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"No hay ningún servicio de datos móviles"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"Servicio de llamadas de emergencia no disponible"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"Sin servicio de voz"</string> diff --git a/core/res/res/values-et/strings.xml b/core/res/res/values-et/strings.xml index 349a6b25c0c5..17897935cd86 100644 --- a/core/res/res/values-et/strings.xml +++ b/core/res/res/values-et/strings.xml @@ -72,6 +72,10 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"Helistaja ID pole vaikimisi piiratud. Järgmine kõne: pole piiratud"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"Teenus pole ette valmistatud."</string> <string name="CLIRPermanent" msgid="166443681876381118">"Helistaja ID seadet ei saa muuta."</string> + <!-- no translation found for auto_data_switch_title (3286350716870518297) --> + <skip /> + <!-- no translation found for auto_data_switch_content (803557715007110959) --> + <skip /> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"Mobiilne andmesideteenus puudub"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"Hädaabikõned pole saadaval"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"Häälkõned pole saadaval"</string> diff --git a/core/res/res/values-eu/strings.xml b/core/res/res/values-eu/strings.xml index d4759d5bf77b..8a7d0734a620 100644 --- a/core/res/res/values-eu/strings.xml +++ b/core/res/res/values-eu/strings.xml @@ -72,6 +72,10 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"Deitzailearen identitatea zerbitzuaren balio lehenetsiak ez du murriztapenik ezartzen. Hurrengo deia: murriztapenik gabe."</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"Zerbitzua ez da hornitu."</string> <string name="CLIRPermanent" msgid="166443681876381118">"Ezin duzu aldatu deitzailearen identitatearen ezarpena."</string> + <!-- no translation found for auto_data_switch_title (3286350716870518297) --> + <skip /> + <!-- no translation found for auto_data_switch_content (803557715007110959) --> + <skip /> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"Ez dago mugikorreko datu-zerbitzurik"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"Ezin da egin larrialdi-deirik"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"Ez dago ahots-deien zerbitzurik"</string> diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml index 4064353038b8..88bbcc62f2e0 100644 --- a/core/res/res/values-fa/strings.xml +++ b/core/res/res/values-fa/strings.xml @@ -72,6 +72,10 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"پیشفرض شناسه تماسگیرنده روی غیرمحدود است. تماس بعدی: بدون محدودیت"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"سرویس دارای مجوز نیست."</string> <string name="CLIRPermanent" msgid="166443681876381118">"شما میتوانید تنظیم شناسه تماسگیرنده را تغییر دهید."</string> + <!-- no translation found for auto_data_switch_title (3286350716870518297) --> + <skip /> + <!-- no translation found for auto_data_switch_content (803557715007110959) --> + <skip /> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"بدون سرویس داده تلفن همراه"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"تماس اضطراری دردسترس نیست"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"سرویس صوتی دردسترس نیست"</string> diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml index 8fedfb74fd1b..da3a91ef28be 100644 --- a/core/res/res/values-fi/strings.xml +++ b/core/res/res/values-fi/strings.xml @@ -72,6 +72,10 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"Soittajan tunnukseksi muutetaan rajoittamaton. Seuraava puhelu: ei rajoitettu"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"Palvelua ei tarjota."</string> <string name="CLIRPermanent" msgid="166443681876381118">"Et voi muuttaa soittajan tunnuksen asetusta."</string> + <!-- no translation found for auto_data_switch_title (3286350716870518297) --> + <skip /> + <!-- no translation found for auto_data_switch_content (803557715007110959) --> + <skip /> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"Ei mobiilidatapalvelua"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"Hätäpuhelut eivät ole käytettävissä"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"Ei äänipuheluja"</string> diff --git a/core/res/res/values-fr-rCA/strings.xml b/core/res/res/values-fr-rCA/strings.xml index e63b73436df6..d05d97bcdeae 100644 --- a/core/res/res/values-fr-rCA/strings.xml +++ b/core/res/res/values-fr-rCA/strings.xml @@ -73,6 +73,10 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"Par défaut, les numéros des appelants ne sont pas restreints. Appel suivant : non restreint"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"Ce service n\'est pas pris en charge."</string> <string name="CLIRPermanent" msgid="166443681876381118">"Impossible de modifier le paramètre relatif au numéro de l\'appelant."</string> + <!-- no translation found for auto_data_switch_title (3286350716870518297) --> + <skip /> + <!-- no translation found for auto_data_switch_content (803557715007110959) --> + <skip /> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"Aucun service de données cellulaires"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"Le service d\'appel d\'urgence n\'est pas accessible"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"Aucun service vocal"</string> diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml index 019fdf2840b5..cb2e201eafb5 100644 --- a/core/res/res/values-fr/strings.xml +++ b/core/res/res/values-fr/strings.xml @@ -73,6 +73,10 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"Par défaut, les numéros des appelants ne sont pas restreints. Appel suivant : non restreint"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"Ce service n\'est pas pris en charge."</string> <string name="CLIRPermanent" msgid="166443681876381118">"Impossible de modifier le paramètre relatif au numéro de l\'appelant."</string> + <!-- no translation found for auto_data_switch_title (3286350716870518297) --> + <skip /> + <!-- no translation found for auto_data_switch_content (803557715007110959) --> + <skip /> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"Aucun service de données mobiles"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"Appels d\'urgence non disponibles"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"Aucun service vocal"</string> diff --git a/core/res/res/values-gl/strings.xml b/core/res/res/values-gl/strings.xml index 219299fed39a..a3aed4138ed8 100644 --- a/core/res/res/values-gl/strings.xml +++ b/core/res/res/values-gl/strings.xml @@ -72,6 +72,10 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"O valor predeterminado do identificador de chamada é restrinxido. Próxima chamada: non restrinxido"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"Servizo non ofrecido."</string> <string name="CLIRPermanent" msgid="166443681876381118">"Non podes cambiar a configuración do identificador de chamada."</string> + <!-- no translation found for auto_data_switch_title (3286350716870518297) --> + <skip /> + <!-- no translation found for auto_data_switch_content (803557715007110959) --> + <skip /> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"Non hai servizo de datos para móbiles"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"As chamadas de emerxencia non están dispoñibles"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"Non hai servizo de chamadas de voz"</string> diff --git a/core/res/res/values-gu/strings.xml b/core/res/res/values-gu/strings.xml index 90dda1aa6841..2d9210b34e7f 100644 --- a/core/res/res/values-gu/strings.xml +++ b/core/res/res/values-gu/strings.xml @@ -72,6 +72,10 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"કૉલર ID પ્રતિબંધિત નહીં પર ડિફોલ્ટ છે. આગલો કૉલ: પ્રતિબંધિત નહીં"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"સેવાની જોગવાઈ કરી નથી."</string> <string name="CLIRPermanent" msgid="166443681876381118">"તમે કૉલર ID સેટિંગ બદલી શકતાં નથી."</string> + <!-- no translation found for auto_data_switch_title (3286350716870518297) --> + <skip /> + <!-- no translation found for auto_data_switch_content (803557715007110959) --> + <skip /> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"કોઈ મોબાઇલ ડેટા સેવા નથી"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"કોટોકટીની કૉલિંગ સેવા અનુપલબ્ધ"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"કોઈ વૉઇસ સેવા નથી"</string> diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml index af5bc1f067f0..9f0e9367a7a1 100644 --- a/core/res/res/values-hi/strings.xml +++ b/core/res/res/values-hi/strings.xml @@ -72,6 +72,10 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"कॉलर आईडी डिफ़ॉल्ट रूप से सीमित नहीं है. अगली कॉल: सीमित नहीं"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"सेवा प्रावधान की हुई नहीं है."</string> <string name="CLIRPermanent" msgid="166443681876381118">"आप कॉलर आईडी सेटिंग नहीं बदल सकते."</string> + <!-- no translation found for auto_data_switch_title (3286350716870518297) --> + <skip /> + <!-- no translation found for auto_data_switch_content (803557715007110959) --> + <skip /> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"मोबाइल डेटा सेवा पर रोक लगा दी गई है"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"आपातकालीन कॉल पर रोक लगा दी गई है"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"कोई वॉइस सेवा नहीं है"</string> diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml index 87df29a689ee..40a49db1c1fa 100644 --- a/core/res/res/values-hr/strings.xml +++ b/core/res/res/values-hr/strings.xml @@ -73,6 +73,8 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"Zadana postavka ID-a pozivatelja nema ograničenje. Sljedeći poziv: Nije ograničen"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"Usluga nije rezervirana."</string> <string name="CLIRPermanent" msgid="166443681876381118">"Ne možete promijeniti postavku ID-a pozivatelja."</string> + <string name="auto_data_switch_title" msgid="3286350716870518297">"Podaci su prebačeni na <xliff:g id="CARRIERDISPLAY">%s</xliff:g>"</string> + <string name="auto_data_switch_content" msgid="803557715007110959">"To uvijek možete promijeniti u postavkama"</string> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"Nema podatkovne mobilne usluge"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"Hitni pozivi nisu dostupni"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"Nema glasovnih usluga"</string> diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml index 3762fdeb4bcd..cf6132f2fbbd 100644 --- a/core/res/res/values-hu/strings.xml +++ b/core/res/res/values-hu/strings.xml @@ -72,6 +72,10 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"A hívóazonosító alapértelmezett értéke nem korlátozott. Következő hívás: nem korlátozott"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"A szolgáltatás nincs biztosítva."</string> <string name="CLIRPermanent" msgid="166443681876381118">"Nem tudja módosítani a hívó fél azonosítója beállítást."</string> + <!-- no translation found for auto_data_switch_title (3286350716870518297) --> + <skip /> + <!-- no translation found for auto_data_switch_content (803557715007110959) --> + <skip /> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"Nincs mobiladat-szolgáltatás"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"Segélyhívás nem lehetséges"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"Hangszolgáltatás letiltva"</string> diff --git a/core/res/res/values-hy/strings.xml b/core/res/res/values-hy/strings.xml index a11e24be55b5..4da9e3be3e15 100644 --- a/core/res/res/values-hy/strings.xml +++ b/core/res/res/values-hy/strings.xml @@ -72,6 +72,10 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"Զանգողի ID-ն լռելյայն չսահմանափակված է: Հաջորդ զանգը` չսահմանափակված"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"Ծառայությունը չի տրամադրվում:"</string> <string name="CLIRPermanent" msgid="166443681876381118">"Դուք չեք կարող փոխել զանգողի ID-ի կարգավորումները:"</string> + <!-- no translation found for auto_data_switch_title (3286350716870518297) --> + <skip /> + <!-- no translation found for auto_data_switch_content (803557715007110959) --> + <skip /> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"Բջջային ինտերնետի ծառայությունն արգելափակված է"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"Շտապ կանչերը հասանելի չեն"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"Ձայնային ծառայությունն անհասանելի է"</string> diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml index dbccee947097..2f2e524ebcbb 100644 --- a/core/res/res/values-in/strings.xml +++ b/core/res/res/values-in/strings.xml @@ -72,6 +72,10 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"ID penelepon diatur default ke tidak dibatasi. Panggilan selanjutnya: Tidak dibatasi"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"Layanan tidak diperlengkapi."</string> <string name="CLIRPermanent" msgid="166443681876381118">"Anda tidak dapat mengubah setelan ID penelepon."</string> + <!-- no translation found for auto_data_switch_title (3286350716870518297) --> + <skip /> + <!-- no translation found for auto_data_switch_content (803557715007110959) --> + <skip /> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"Tidak ada layanan data seluler"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"Panggilan darurat tidak tersedia"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"Tidak ada layanan panggilan suara"</string> diff --git a/core/res/res/values-is/strings.xml b/core/res/res/values-is/strings.xml index cfefc03d59d0..82a1b66f952a 100644 --- a/core/res/res/values-is/strings.xml +++ b/core/res/res/values-is/strings.xml @@ -72,6 +72,10 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"Númerabirting er sjálfgefið án takmarkana. Næsta símtal: Án takmarkana"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"Þjónustu ekki útdeilt."</string> <string name="CLIRPermanent" msgid="166443681876381118">"Þú getur ekki breytt stillingu númerabirtingar."</string> + <!-- no translation found for auto_data_switch_title (3286350716870518297) --> + <skip /> + <!-- no translation found for auto_data_switch_content (803557715007110959) --> + <skip /> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"Engin gagnaþjónusta fyrir farsíma"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"Neyðarsímtöl eru ekki í boði"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"Símtöl eru ekki í boði"</string> diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml index b05bf7978904..b499eea1c5e5 100644 --- a/core/res/res/values-it/strings.xml +++ b/core/res/res/values-it/strings.xml @@ -73,6 +73,10 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"ID chiamante generalmente non limitato. Prossima chiamata: non limitato"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"Servizio non fornito."</string> <string name="CLIRPermanent" msgid="166443681876381118">"Non è possibile modificare l\'impostazione ID chiamante."</string> + <!-- no translation found for auto_data_switch_title (3286350716870518297) --> + <skip /> + <!-- no translation found for auto_data_switch_content (803557715007110959) --> + <skip /> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"Nessun servizio dati mobile"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"Chiamate di emergenza non disponibili"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"Nessun servizio di telefonia"</string> diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml index 8656fcee9a2f..2ef493472d65 100644 --- a/core/res/res/values-iw/strings.xml +++ b/core/res/res/values-iw/strings.xml @@ -74,6 +74,8 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"זיהוי מתקשר עובר כברירת מחדל למצב לא מוגבל. השיחה הבאה: לא מוגבלת"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"השירות לא הוקצה."</string> <string name="CLIRPermanent" msgid="166443681876381118">"אינך יכול לשנות את הגדרת זיהוי המתקשר."</string> + <string name="auto_data_switch_title" msgid="3286350716870518297">"הנתונים עברו אל <xliff:g id="CARRIERDISPLAY">%s</xliff:g>"</string> + <string name="auto_data_switch_content" msgid="803557715007110959">"תמיד אפשר לשנות זאת ב\'הגדרות\'"</string> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"אין שירות של חבילת גלישה"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"שיחות חירום לא זמינות"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"אין אפשרות לבצע שיחות רגילות"</string> diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml index 69d0b9d2c12d..53fa0575a14a 100644 --- a/core/res/res/values-ja/strings.xml +++ b/core/res/res/values-ja/strings.xml @@ -72,6 +72,10 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"既定: 発信者番号通知、次の発信: 通知"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"提供可能なサービスがありません。"</string> <string name="CLIRPermanent" msgid="166443681876381118">"発信者番号の設定は変更できません。"</string> + <!-- no translation found for auto_data_switch_title (3286350716870518297) --> + <skip /> + <!-- no translation found for auto_data_switch_content (803557715007110959) --> + <skip /> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"モバイルデータ サービスのブロック"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"緊急通報のブロック"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"音声通話サービス停止"</string> diff --git a/core/res/res/values-ka/strings.xml b/core/res/res/values-ka/strings.xml index 6d32f2590034..57ff75ab3c83 100644 --- a/core/res/res/values-ka/strings.xml +++ b/core/res/res/values-ka/strings.xml @@ -72,6 +72,10 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"ნაგულისხმებად დაყენებულია ნომრის დაფარვის გამორთვა. შემდეგი ზარი: არ არის დაფარული."</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"სერვისი არ არის მიწოდებული."</string> <string name="CLIRPermanent" msgid="166443681876381118">"არ შეგიძლიათ აბონენტის ID პარამეტრების შეცვლა."</string> + <!-- no translation found for auto_data_switch_title (3286350716870518297) --> + <skip /> + <!-- no translation found for auto_data_switch_content (803557715007110959) --> + <skip /> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"მობილური ინტერნეტის სერვისი არ არის"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"გადაუდებელი ზარი მიუწვდომელია"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"ხმოვანი ზარების სერვისი არ არის"</string> diff --git a/core/res/res/values-kk/strings.xml b/core/res/res/values-kk/strings.xml index 0d9fd3ff215e..8f5b1c060240 100644 --- a/core/res/res/values-kk/strings.xml +++ b/core/res/res/values-kk/strings.xml @@ -72,6 +72,10 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"Қоңырау шалушының жеке анықтағышы бастапқы бойынша шектелмеген. Келесі қоңырау: Шектелмеген"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"Қызмет ұсынылмаған."</string> <string name="CLIRPermanent" msgid="166443681876381118">"Қоңырау шалушы идентификаторы параметрін өзгерту мүмкін емес."</string> + <!-- no translation found for auto_data_switch_title (3286350716870518297) --> + <skip /> + <!-- no translation found for auto_data_switch_content (803557715007110959) --> + <skip /> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"Мобильдік интернет қызметі жоқ"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"Жедел қызметке қоңырау шалу қолжетімді емес"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"Дауыстық қоңыраулар қызметі жоқ"</string> diff --git a/core/res/res/values-km/strings.xml b/core/res/res/values-km/strings.xml index 0c82b663a033..1eae9dbab013 100644 --- a/core/res/res/values-km/strings.xml +++ b/core/res/res/values-km/strings.xml @@ -72,6 +72,10 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"មិនបានដាក់កម្រិតលំនាំដើមលេខសម្គាល់អ្នកហៅ។ ការហៅបន្ទាប់៖ មិនបានដាក់កម្រិត។"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"មិនបានផ្ដល់សេវាកម្ម។"</string> <string name="CLIRPermanent" msgid="166443681876381118">"អ្នកមិនអាចប្ដូរការកំណត់លេខសម្គាល់អ្នកហៅបានទេ។"</string> + <!-- no translation found for auto_data_switch_title (3286350716870518297) --> + <skip /> + <!-- no translation found for auto_data_switch_content (803557715007110959) --> + <skip /> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"គ្មានសេវាកម្មទិន្នន័យចល័តទេ"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"ការហៅបន្ទាន់មិនអាចប្រើបានទេ"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"គ្មានសេវាកម្មជាសំឡេងទេ"</string> diff --git a/core/res/res/values-kn/strings.xml b/core/res/res/values-kn/strings.xml index e27527f0186c..821138a18cb7 100644 --- a/core/res/res/values-kn/strings.xml +++ b/core/res/res/values-kn/strings.xml @@ -72,6 +72,10 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"ಕರೆಮಾಡುವವರ ID ಅನ್ನು ನಿರ್ಬಂಧಿಸದಿರುವಂತೆ ಡಿಫಾಲ್ಟ್ ಮಾಡಲಾಗಿದೆ. ಮುಂದಿನ ಕರೆ: ನಿರ್ಬಂಧಿಸಲಾಗಿಲ್ಲ"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"ಸೇವೆಯನ್ನು ಪೂರೈಸಲಾಗಿಲ್ಲ."</string> <string name="CLIRPermanent" msgid="166443681876381118">"ನೀವು ಕಾಲರ್ ID ಸೆಟ್ಟಿಂಗ್ ಬದಲಾಯಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ."</string> + <!-- no translation found for auto_data_switch_title (3286350716870518297) --> + <skip /> + <!-- no translation found for auto_data_switch_content (803557715007110959) --> + <skip /> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"ಮೊಬೈಲ್ ಡೇಟಾ ಸೇವೆಯಿಲ್ಲ"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"ತುರ್ತು ಕರೆ ಲಭ್ಯವಿಲ್ಲ"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"ಧ್ವನಿ ಸೇವೆಯಿಲ್ಲ"</string> diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml index c953a39e8386..5f3c7cad0f62 100644 --- a/core/res/res/values-ko/strings.xml +++ b/core/res/res/values-ko/strings.xml @@ -72,6 +72,10 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"발신자 번호가 기본적으로 제한되지 않음으로 설정됩니다. 다음 통화: 제한되지 않음"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"서비스가 준비되지 않았습니다."</string> <string name="CLIRPermanent" msgid="166443681876381118">"발신자 번호 설정을 변경할 수 없습니다."</string> + <!-- no translation found for auto_data_switch_title (3286350716870518297) --> + <skip /> + <!-- no translation found for auto_data_switch_content (803557715007110959) --> + <skip /> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"모바일 데이터 서비스가 차단됨"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"긴급 전화를 사용할 수 없음"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"음성 서비스를 이용할 수 없음"</string> diff --git a/core/res/res/values-ky/strings.xml b/core/res/res/values-ky/strings.xml index dccc4a6a0d8e..6e7b355f1028 100644 --- a/core/res/res/values-ky/strings.xml +++ b/core/res/res/values-ky/strings.xml @@ -72,6 +72,10 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"Номурду аныктоонун демейки абалы \"чектелбейт\" деп коюлган. Кийинки чалуу: Чектелбейт"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"Кызмат камсыздалган эмес."</string> <string name="CLIRPermanent" msgid="166443681876381118">"Чалуучунун далдаштырма дайындары жөндөөлөрүн өзгөртө албайсыз."</string> + <!-- no translation found for auto_data_switch_title (3286350716870518297) --> + <skip /> + <!-- no translation found for auto_data_switch_content (803557715007110959) --> + <skip /> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"Мобилдик Интернет кызматы жок"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"Шашылыш чалуу бөгөттөлгөн"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"Аудио чалуу кызматы бөгөттөлгөн"</string> diff --git a/core/res/res/values-lo/strings.xml b/core/res/res/values-lo/strings.xml index c6524de6915b..7a76c2c2641b 100644 --- a/core/res/res/values-lo/strings.xml +++ b/core/res/res/values-lo/strings.xml @@ -72,6 +72,10 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"ໝາຍເລກຜູ່ໂທ ໄດ້ຮັບການຕັ້ງຄ່າເລີ່ມຕົ້ນເປັນ ບໍ່ຖືກຈຳກັດ. ການໂທຄັ້ງຕໍ່ໄປ: ບໍ່ຖືກຈຳກັດ."</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"ບໍ່ໄດ້ເປີດໃຊ້ບໍລິການ."</string> <string name="CLIRPermanent" msgid="166443681876381118">"ທ່ານບໍ່ສາມາດປ່ຽນແປງການຕັ້ງຄ່າ Caller ID"</string> + <!-- no translation found for auto_data_switch_title (3286350716870518297) --> + <skip /> + <!-- no translation found for auto_data_switch_content (803557715007110959) --> + <skip /> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"ບໍ່ມີບໍລິການອິນເຕີເນັດມືຖື"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"ບໍ່ສາມາດໃຊ້ການໂທສຸກເສີນໄດ້"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"ບໍ່ມີບໍລິການໂທສຽງ"</string> diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml index adf30e8145e2..e0d1fc7564f3 100644 --- a/core/res/res/values-lt/strings.xml +++ b/core/res/res/values-lt/strings.xml @@ -74,6 +74,10 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"Skambintojo ID pagal numatytuosius nustatymus yra neapribotas. Kitas skambutis: neapribotas"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"Paslauga neteikiama."</string> <string name="CLIRPermanent" msgid="166443681876381118">"Negalima pakeisti skambinančiojo ID nustatymo."</string> + <!-- no translation found for auto_data_switch_title (3286350716870518297) --> + <skip /> + <!-- no translation found for auto_data_switch_content (803557715007110959) --> + <skip /> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"Duomenų paslaugos mobiliesiems nėra"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"Skambučių pagalbos numeriu paslaugos nėra"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"Balso skambučių paslauga neteikiama"</string> diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml index 5631521d3c49..ec8cb7d69681 100644 --- a/core/res/res/values-lv/strings.xml +++ b/core/res/res/values-lv/strings.xml @@ -73,6 +73,10 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"Zvanītāja ID noklusējumi ir iestatīti uz Nav ierobežots. Nākamais zvans: nav ierobežots"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"Pakalpojums netiek nodrošināts."</string> <string name="CLIRPermanent" msgid="166443681876381118">"Zvanītāja ID iestatījumu nevar mainīt."</string> + <!-- no translation found for auto_data_switch_title (3286350716870518297) --> + <skip /> + <!-- no translation found for auto_data_switch_content (803557715007110959) --> + <skip /> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"Nav pieejams neviens datu pakalpojums mobilajām ierīcēm"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"Nav pieejami ārkārtas izsaukumi"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"Balss izsaukumu pakalpojums nedarbojas"</string> diff --git a/core/res/res/values-mk/strings.xml b/core/res/res/values-mk/strings.xml index a45d0a7a0f97..442047ddcb95 100644 --- a/core/res/res/values-mk/strings.xml +++ b/core/res/res/values-mk/strings.xml @@ -72,6 +72,10 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"Стандардно, ID на повикувач не е скриен. Следен повик: не е скриен"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"Услугата не е предвидена."</string> <string name="CLIRPermanent" msgid="166443681876381118">"Не може да го промените поставувањето за ID на повикувач."</string> + <!-- no translation found for auto_data_switch_title (3286350716870518297) --> + <skip /> + <!-- no translation found for auto_data_switch_content (803557715007110959) --> + <skip /> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"Нема услуга за мобилен интернет"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"Итните повици се недостапни"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"Нема услуга за говорни повици"</string> diff --git a/core/res/res/values-ml/strings.xml b/core/res/res/values-ml/strings.xml index 492cd5402fb5..5b59e66ce01f 100644 --- a/core/res/res/values-ml/strings.xml +++ b/core/res/res/values-ml/strings.xml @@ -72,6 +72,8 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"നിയന്ത്രിക്കേണ്ടതല്ലാത്ത സ്ഥിര കോളർ ഐഡികൾ. അടുത്ത കോൾ: നിയന്ത്രിച്ചിട്ടില്ല"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"സേവനം വ്യവസ്ഥ ചെയ്തിട്ടില്ല."</string> <string name="CLIRPermanent" msgid="166443681876381118">"വിളിച്ച നമ്പർ ക്രമീകരണം നിങ്ങൾക്ക് മാറ്റാനാവില്ല."</string> + <string name="auto_data_switch_title" msgid="3286350716870518297">"<xliff:g id="CARRIERDISPLAY">%s</xliff:g> എന്നതിലേക്ക് ഡാറ്റ മാറ്റി"</string> + <string name="auto_data_switch_content" msgid="803557715007110959">"നിങ്ങൾക്ക് ക്രമീകരണത്തിൽ ഏതുസമയത്തും ഇത് മാറ്റാം"</string> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"മൊബൈൽ ഡാറ്റാ സേവനമില്ല"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"എമർജൻസി കോളിംഗ് ലഭ്യമല്ല"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"വോയ്സ് സേവനമില്ല"</string> diff --git a/core/res/res/values-mn/strings.xml b/core/res/res/values-mn/strings.xml index 2c8aaae25565..03deebb66ce1 100644 --- a/core/res/res/values-mn/strings.xml +++ b/core/res/res/values-mn/strings.xml @@ -72,6 +72,10 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"Дуудлага хийгчийн ID хязгаарлагдсан. Дараагийн дуудлага: Хязгаарлагдсан"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"Үйлчилгээ провишн хийгдээгүй ."</string> <string name="CLIRPermanent" msgid="166443681876381118">"Та дуудлага хийгчийн ID тохиргоог солиж чадахгүй."</string> + <!-- no translation found for auto_data_switch_title (3286350716870518297) --> + <skip /> + <!-- no translation found for auto_data_switch_content (803557715007110959) --> + <skip /> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"Мобайл дата үйлчилгээ алга"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"Яаралтай дуудлага боломжтой"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"Дуу хоолойны үйлчилгээ алга"</string> diff --git a/core/res/res/values-mr/strings.xml b/core/res/res/values-mr/strings.xml index d47fea35b675..1d25e67016e5 100644 --- a/core/res/res/values-mr/strings.xml +++ b/core/res/res/values-mr/strings.xml @@ -72,6 +72,10 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"कॉलर आयडी डीफॉल्ट रूपात प्रतिबंधित नाही वर सेट असतो. पुढील कॉल: प्रतिबंधित नाही"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"सेवेची तरतूद केलेली नाही."</string> <string name="CLIRPermanent" msgid="166443681876381118">"तुम्ही कॉलर आयडी सेटिंग बदलू शकत नाही."</string> + <!-- no translation found for auto_data_switch_title (3286350716870518297) --> + <skip /> + <!-- no translation found for auto_data_switch_content (803557715007110959) --> + <skip /> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"मोबाइल डेटा सेवा नाही"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"आणीबाणी कॉलिंग अनुपलब्ध आहे"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"व्हॉइस सेवा नाही"</string> diff --git a/core/res/res/values-ms/strings.xml b/core/res/res/values-ms/strings.xml index deb343de11b1..72d3f2f3b0bb 100644 --- a/core/res/res/values-ms/strings.xml +++ b/core/res/res/values-ms/strings.xml @@ -72,6 +72,10 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"ID pemanggil secara lalainya ditetapkan kepada tidak dihadkan. Panggilan seterusnya: Tidak terhad"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"Perkhidmatan yang tidak diuntukkan."</string> <string name="CLIRPermanent" msgid="166443681876381118">"Anda tidak boleh mengubah tetapan ID pemanggil."</string> + <!-- no translation found for auto_data_switch_title (3286350716870518297) --> + <skip /> + <!-- no translation found for auto_data_switch_content (803557715007110959) --> + <skip /> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"Tiada perkhidmatan data mudah alih"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"Panggilan kecemasan tidak tersedia"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"Tiada perkhidmatan suara"</string> diff --git a/core/res/res/values-my/strings.xml b/core/res/res/values-my/strings.xml index 5f4167284217..5ff033dd1e47 100644 --- a/core/res/res/values-my/strings.xml +++ b/core/res/res/values-my/strings.xml @@ -72,6 +72,10 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"ပုံသေအားဖြင့် ခေါ်ဆိုသူအိုင်ဒီ(Caller ID)အား ကန့်သတ်မထားပါ။ နောက်ထပ်အဝင်ခေါ်ဆိုမှု-ကန့်သတ်မထားပါ။"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"ဝန်ဆောင်မှုအား ကန့်သတ်မထားပါ"</string> <string name="CLIRPermanent" msgid="166443681876381118">"သင်သည် ခေါ်ဆိုသူ ID ဆက်တင်ကို မပြောင်းလဲနိုင်ပါ။"</string> + <!-- no translation found for auto_data_switch_title (3286350716870518297) --> + <skip /> + <!-- no translation found for auto_data_switch_content (803557715007110959) --> + <skip /> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"မိုဘိုင်း ဒေတာဝန်ဆောင်မှု မရှိပါ"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"အရေးပေါ်ခေါ်ဆိုမှု မရနိုင်ပါ"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"ဖုန်းဝန်ဆောင်မှု မရှိပါ"</string> diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml index 0c9a98396e7f..bb4fbe4a2c99 100644 --- a/core/res/res/values-nb/strings.xml +++ b/core/res/res/values-nb/strings.xml @@ -72,6 +72,10 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"Nummervisning er ikke begrenset som standard. Neste anrop: Ikke begrenset"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"SIM-kortet er ikke tilrettelagt for tjenesten."</string> <string name="CLIRPermanent" msgid="166443681876381118">"Du kan ikke endre innstillingen for anrops-ID."</string> + <!-- no translation found for auto_data_switch_title (3286350716870518297) --> + <skip /> + <!-- no translation found for auto_data_switch_content (803557715007110959) --> + <skip /> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"Ingen mobildatatjeneste"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"Nødanrop er utilgjengelig"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"Ingen taletjeneste"</string> diff --git a/core/res/res/values-ne/strings.xml b/core/res/res/values-ne/strings.xml index e95d48b06947..ea96df0d69f9 100644 --- a/core/res/res/values-ne/strings.xml +++ b/core/res/res/values-ne/strings.xml @@ -72,6 +72,10 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"कलर ID पूर्वनिर्धारितको लागि रोकावट छैन। अर्को कल: रोकावट छैन"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"सेवाको व्यवस्था छैन।"</string> <string name="CLIRPermanent" msgid="166443681876381118">"तपाईं कलर ID सेटिङ परिवर्तन गर्न सक्नुहुन्न।"</string> + <!-- no translation found for auto_data_switch_title (3286350716870518297) --> + <skip /> + <!-- no translation found for auto_data_switch_content (803557715007110959) --> + <skip /> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"कुनै पनि मोबाइल डेटा सेवा उपलब्ध छैन"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"आपत्कालीन कल सेवा उपलब्ध छैन"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"कुनै पनि भ्वाइस सेवा उपलब्ध छैन"</string> diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml index 57235106789b..24877ddb8248 100644 --- a/core/res/res/values-nl/strings.xml +++ b/core/res/res/values-nl/strings.xml @@ -72,6 +72,10 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"Beller-ID standaard ingesteld op \'onbeperkt\'. Volgend gesprek: onbeperkt."</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"Service niet voorzien."</string> <string name="CLIRPermanent" msgid="166443681876381118">"U kunt de instelling voor de beller-ID niet wijzigen."</string> + <!-- no translation found for auto_data_switch_title (3286350716870518297) --> + <skip /> + <!-- no translation found for auto_data_switch_content (803557715007110959) --> + <skip /> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"Geen service voor mobiele data"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"Noodoproepen niet beschikbaar"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"Geen belservice"</string> diff --git a/core/res/res/values-or/strings.xml b/core/res/res/values-or/strings.xml index c4150dc43049..456fc8394401 100644 --- a/core/res/res/values-or/strings.xml +++ b/core/res/res/values-or/strings.xml @@ -72,6 +72,10 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"କଲର୍ ଆଇଡି ଡିଫଲ୍ଟ ଭାବରେ ପ୍ରତିବନ୍ଧିତ ନୁହେଁ। ପରବର୍ତ୍ତୀ କଲ୍: ପ୍ରତିବନ୍ଧିତ ନୁହେଁ"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"ସେବାର ସୁବିଧା ନାହିଁ।"</string> <string name="CLIRPermanent" msgid="166443681876381118">"ଆପଣ କଲର୍ ID ସେଟିଙ୍ଗ ବଦଳାଇପାରିବେ ନାହିଁ।"</string> + <!-- no translation found for auto_data_switch_title (3286350716870518297) --> + <skip /> + <!-- no translation found for auto_data_switch_content (803557715007110959) --> + <skip /> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"କୌଣସି ମୋବାଇଲ୍ ଡାଟା ସେବା ନାହିଁ"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"ଜରୁରୀକାଳୀନ କଲ୍ ଉପଲବ୍ଧ ନାହିଁ"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"କୌଣସି ଭଏସ୍ ସେବା ନାହିଁ"</string> diff --git a/core/res/res/values-pa/strings.xml b/core/res/res/values-pa/strings.xml index 96917c03b92c..79ab897bb561 100644 --- a/core/res/res/values-pa/strings.xml +++ b/core/res/res/values-pa/strings.xml @@ -72,6 +72,10 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"ਪ੍ਰਤਿਬੰਧਿਤ ਨਾ ਕਰਨ ਲਈ ਕਾਲਰ ਆਈ.ਡੀ. ਪੂਰਵ-ਨਿਰਧਾਰਤ। ਅਗਲੀ ਕਾਲ: ਪ੍ਰਤਿਬੰਧਿਤ ਨਹੀਂ"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"ਸੇਵਾ ਪ੍ਰਬੰਧਿਤ ਨਹੀਂ ਹੈ।"</string> <string name="CLIRPermanent" msgid="166443681876381118">"ਤੁਸੀਂ ਕਾਲਰ ਆਈ.ਡੀ. ਸੈਟਿੰਗ ਨਹੀਂ ਬਦਲ ਸਕਦੇ।"</string> + <!-- no translation found for auto_data_switch_title (3286350716870518297) --> + <skip /> + <!-- no translation found for auto_data_switch_content (803557715007110959) --> + <skip /> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"ਕੋਈ ਮੋਬਾਈਲ ਡਾਟਾ ਸੇਵਾ ਨਹੀਂ"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"ਸੰਕਟਕਾਲੀਨ ਕਾਲਿੰਗ ਉਪਲਬਧ ਨਹੀਂ"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"ਕੋਈ ਆਵਾਜ਼ੀ ਸੇਵਾ ਨਹੀਂ"</string> diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml index be9d3227a1f3..5e3a64a2280a 100644 --- a/core/res/res/values-pl/strings.xml +++ b/core/res/res/values-pl/strings.xml @@ -74,6 +74,10 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"ID rozmówcy ustawiony jest domyślnie na „nie zastrzeżony”. Następne połączenie: nie zastrzeżony"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"Usługa nie jest świadczona."</string> <string name="CLIRPermanent" msgid="166443681876381118">"Nie możesz zmienić ustawienia ID rozmówcy."</string> + <!-- no translation found for auto_data_switch_title (3286350716870518297) --> + <skip /> + <!-- no translation found for auto_data_switch_content (803557715007110959) --> + <skip /> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"Brak komórkowej usługi transmisji danych"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"Połączenia alarmowe są niedostępne"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"Brak usługi połączeń głosowych"</string> diff --git a/core/res/res/values-pt-rBR/strings.xml b/core/res/res/values-pt-rBR/strings.xml index ff352b13694e..34c0f0cc8a87 100644 --- a/core/res/res/values-pt-rBR/strings.xml +++ b/core/res/res/values-pt-rBR/strings.xml @@ -73,6 +73,10 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"O identificador de chamadas assume o padrão de não restrito. Próxima chamada: Não restrita"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"O serviço não foi habilitado."</string> <string name="CLIRPermanent" msgid="166443681876381118">"Não é possível alterar a configuração do identificador de chamadas."</string> + <!-- no translation found for auto_data_switch_title (3286350716870518297) --> + <skip /> + <!-- no translation found for auto_data_switch_content (803557715007110959) --> + <skip /> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"Nenhum serviço móvel de dados"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"Chamadas de emergência indisponíveis"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"Sem serviço de voz"</string> diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml index d343af6487b2..0fb835bb071f 100644 --- a/core/res/res/values-pt-rPT/strings.xml +++ b/core/res/res/values-pt-rPT/strings.xml @@ -73,6 +73,8 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"ID do autor da chamada é predefinido com não restrito. Chamada seguinte: Não restrita"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"Serviço não fornecido."</string> <string name="CLIRPermanent" msgid="166443681876381118">"Não pode alterar a definição da identificação de chamadas."</string> + <string name="auto_data_switch_title" msgid="3286350716870518297">"Os dados móveis foram alterados para o operador <xliff:g id="CARRIERDISPLAY">%s</xliff:g>"</string> + <string name="auto_data_switch_content" msgid="803557715007110959">"Pode alterar isto em qualquer altura nas Definições"</string> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"Sem serviço de dados móveis"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"Chamadas de emergência indisponíveis"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"Sem serviço de voz"</string> diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml index ff352b13694e..34c0f0cc8a87 100644 --- a/core/res/res/values-pt/strings.xml +++ b/core/res/res/values-pt/strings.xml @@ -73,6 +73,10 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"O identificador de chamadas assume o padrão de não restrito. Próxima chamada: Não restrita"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"O serviço não foi habilitado."</string> <string name="CLIRPermanent" msgid="166443681876381118">"Não é possível alterar a configuração do identificador de chamadas."</string> + <!-- no translation found for auto_data_switch_title (3286350716870518297) --> + <skip /> + <!-- no translation found for auto_data_switch_content (803557715007110959) --> + <skip /> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"Nenhum serviço móvel de dados"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"Chamadas de emergência indisponíveis"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"Sem serviço de voz"</string> diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml index b560b075254a..88aab00c36ee 100644 --- a/core/res/res/values-ro/strings.xml +++ b/core/res/res/values-ro/strings.xml @@ -73,6 +73,10 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"ID-ul apelantului este nerestricționat în mod prestabilit. Apelul următor: nerestricționat"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"Nu se asigură accesul la acest serviciu."</string> <string name="CLIRPermanent" msgid="166443681876381118">"Nu poți modifica setarea pentru ID-ul apelantului."</string> + <!-- no translation found for auto_data_switch_title (3286350716870518297) --> + <skip /> + <!-- no translation found for auto_data_switch_content (803557715007110959) --> + <skip /> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"Fără serviciu de date mobile"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"Apelurile de urgență nu sunt disponibile"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"Fără servicii vocale"</string> diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml index fbe67e2617e1..33bfe77889ac 100644 --- a/core/res/res/values-ru/strings.xml +++ b/core/res/res/values-ru/strings.xml @@ -74,6 +74,10 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"Идентификация абонента по умолчанию не запрещена. След. вызов: разрешена"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"Услуга не предоставляется."</string> <string name="CLIRPermanent" msgid="166443681876381118">"Невозможно изменить параметр идентификатора вызывающего абонента."</string> + <!-- no translation found for auto_data_switch_title (3286350716870518297) --> + <skip /> + <!-- no translation found for auto_data_switch_content (803557715007110959) --> + <skip /> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"Мобильный Интернет недоступен"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"Экстренные вызовы недоступны"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"Голосовые вызовы недоступны"</string> diff --git a/core/res/res/values-si/strings.xml b/core/res/res/values-si/strings.xml index 4cec8777d9c1..dd5b817b8bf0 100644 --- a/core/res/res/values-si/strings.xml +++ b/core/res/res/values-si/strings.xml @@ -72,6 +72,10 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"අමතන්නාගේ ID සුපුරුදු අනුව සීමා වී නැත. මීළඟ ඇමතුම: සීමා කර ඇත"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"සේවාවන් සපයා නැත."</string> <string name="CLIRPermanent" msgid="166443681876381118">"අමතන්නාගේ ID සැකසීම ඔබට වෙනස්කල නොහැක."</string> + <!-- no translation found for auto_data_switch_title (3286350716870518297) --> + <skip /> + <!-- no translation found for auto_data_switch_content (803557715007110959) --> + <skip /> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"ජංගම දත්ත සේවාව නැත"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"හදිසි ඇමතුම් ලබා ගත නොහැකිය"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"හඬ සේවාව නැත"</string> diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml index b98364a1b46a..40abf797e53c 100644 --- a/core/res/res/values-sk/strings.xml +++ b/core/res/res/values-sk/strings.xml @@ -74,6 +74,10 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"V predvolenom nastavení nie je identifikácia volajúceho obmedzená. Ďalší hovor: Bez obmedzenia"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"Služba nie je poskytovaná."</string> <string name="CLIRPermanent" msgid="166443681876381118">"Nemôžete meniť nastavenie identifikácie volajúcich."</string> + <!-- no translation found for auto_data_switch_title (3286350716870518297) --> + <skip /> + <!-- no translation found for auto_data_switch_content (803557715007110959) --> + <skip /> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"Žiadna mobilná dátová služba"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"Tiesňové volania nie sú k dispozícii"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"Žiadne hlasové hovory"</string> diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml index 6972abb06877..53a032121058 100644 --- a/core/res/res/values-sl/strings.xml +++ b/core/res/res/values-sl/strings.xml @@ -74,6 +74,10 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"ID klicatelja je ponastavljen na neomejeno. Naslednji klic: ni omejeno"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"Storitev ni nastavljena in omogočena."</string> <string name="CLIRPermanent" msgid="166443681876381118">"Ne morete spremeniti nastavitve ID-ja klicatelja."</string> + <!-- no translation found for auto_data_switch_title (3286350716870518297) --> + <skip /> + <!-- no translation found for auto_data_switch_content (803557715007110959) --> + <skip /> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"Ni mobilne podatkovne storitve"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"Klicanje v sili ni na voljo"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"Ni storitve za glasovne klice"</string> diff --git a/core/res/res/values-sq/strings.xml b/core/res/res/values-sq/strings.xml index cbac0f021f6e..6c3f145df951 100644 --- a/core/res/res/values-sq/strings.xml +++ b/core/res/res/values-sq/strings.xml @@ -72,6 +72,10 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"ID-ja e telefonuesit kalon me paracaktim në listën e të telefonuesve të pakufizuar. Telefonata e radhës: e pakufizuar!"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"Shërbimi nuk është përgatitur."</string> <string name="CLIRPermanent" msgid="166443681876381118">"Nuk mund ta ndryshosh cilësimin e ID-së së telefonuesit."</string> + <!-- no translation found for auto_data_switch_title (3286350716870518297) --> + <skip /> + <!-- no translation found for auto_data_switch_content (803557715007110959) --> + <skip /> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"Nuk ka shërbim të të dhënave celulare"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"Telefonatat e urgjencës nuk ofrohen"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"Nuk ka shërbim zanor"</string> diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml index d5549e71d9bd..d23b056e9a77 100644 --- a/core/res/res/values-sr/strings.xml +++ b/core/res/res/values-sr/strings.xml @@ -73,6 +73,10 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"ИД позиваоца подразумевано није ограничен. Следећи позив: Није ограничен."</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"Услуга није добављена."</string> <string name="CLIRPermanent" msgid="166443681876381118">"Не можете да промените подешавање ИД-а корисника."</string> + <!-- no translation found for auto_data_switch_title (3286350716870518297) --> + <skip /> + <!-- no translation found for auto_data_switch_content (803557715007110959) --> + <skip /> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"Нема услуге мобилних података"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"Хитни позиви нису доступни"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"Нема гласовне услуге"</string> diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml index d1c579d1eafb..ee6a8ac0d6d3 100644 --- a/core/res/res/values-sv/strings.xml +++ b/core/res/res/values-sv/strings.xml @@ -72,6 +72,10 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"Nummerpresentatörens standardinställning är inte blockerad. Nästa samtal: Inte blockerad"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"Tjänsten är inte etablerad."</string> <string name="CLIRPermanent" msgid="166443681876381118">"Det går inte att ändra inställningen för nummerpresentatör."</string> + <!-- no translation found for auto_data_switch_title (3286350716870518297) --> + <skip /> + <!-- no translation found for auto_data_switch_content (803557715007110959) --> + <skip /> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"Ingen mobildatatjänst"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"Det går inte att ringa nödsamtal"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"Tjänsten för röstsamtal har blockerats"</string> diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml index 2bc3f5765c05..7b9d89f603ab 100644 --- a/core/res/res/values-sw/strings.xml +++ b/core/res/res/values-sw/strings.xml @@ -72,6 +72,10 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"Chaguomsingi za ID ya mpigaji simu za kutozuia. Simu ifuatayo: Haijazuiliwa"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"Huduma haitathminiwi."</string> <string name="CLIRPermanent" msgid="166443681876381118">"Hauwezi kubadilisha mpangilio wa kitambulisho cha anayepiga."</string> + <!-- no translation found for auto_data_switch_title (3286350716870518297) --> + <skip /> + <!-- no translation found for auto_data_switch_content (803557715007110959) --> + <skip /> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"Hakuna huduma ya data kwa vifaa vya mkononi"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"Huduma ya kupiga simu za dharura haipatikani"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"Hakuna huduma za simu za sauti"</string> diff --git a/core/res/res/values-ta/strings.xml b/core/res/res/values-ta/strings.xml index 9e48a47acd79..2a0fc2c7f767 100644 --- a/core/res/res/values-ta/strings.xml +++ b/core/res/res/values-ta/strings.xml @@ -72,6 +72,10 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"அழைப்பாளர் ஐடி ஆனது வரையறுக்கப்படவில்லை என்பதற்கு இயல்பாக அமைக்கப்பட்டது. அடுத்த அழைப்பு: வரையறுக்கப்படவில்லை"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"சேவை ஒதுக்கப்படவில்லை."</string> <string name="CLIRPermanent" msgid="166443681876381118">"அழைப்பாளர் ஐடி அமைப்பை மாற்ற முடியாது."</string> + <!-- no translation found for auto_data_switch_title (3286350716870518297) --> + <skip /> + <!-- no translation found for auto_data_switch_content (803557715007110959) --> + <skip /> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"மொபைல் டேட்டா சேவையைப் பயன்படுத்த முடியாது"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"அவசர அழைப்பைச் செய்ய முடியாது"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"குரல் சேவை இல்லை"</string> diff --git a/core/res/res/values-te/strings.xml b/core/res/res/values-te/strings.xml index eff08bcbb898..a7c2d4e9058f 100644 --- a/core/res/res/values-te/strings.xml +++ b/core/res/res/values-te/strings.xml @@ -72,6 +72,10 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"కాలర్ ID ఆటోమేటిక్లపై పరిమితి లేదు. తర్వాత కాల్: పరిమితి లేదు"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"సేవ కేటాయించబడలేదు."</string> <string name="CLIRPermanent" msgid="166443681876381118">"మీరు కాలర్ ID సెట్టింగ్ను మార్చలేరు."</string> + <!-- no translation found for auto_data_switch_title (3286350716870518297) --> + <skip /> + <!-- no translation found for auto_data_switch_content (803557715007110959) --> + <skip /> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"మొబైల్ డేటా సేవ లేదు"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"అత్యవసర కాలింగ్ అందుబాటులో లేదు"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"వాయిస్ సర్వీస్ లేదు"</string> @@ -2071,7 +2075,7 @@ <string name="notification_appops_camera_active" msgid="8177643089272352083">"కెమెరా"</string> <string name="notification_appops_microphone_active" msgid="581333393214739332">"మైక్రోఫోన్"</string> <string name="notification_appops_overlay_active" msgid="5571732753262836481">"మీ స్క్రీన్పై ఇతర యాప్ల ద్వారా ప్రదర్శించబడుతోంది"</string> - <string name="notification_feedback_indicator" msgid="663476517711323016">"ఫీడ్బ్యాక్ను అందించండి"</string> + <string name="notification_feedback_indicator" msgid="663476517711323016">"ఫీడ్బ్యాక్ ఇవ్వండి"</string> <string name="notification_feedback_indicator_alerted" msgid="6552871804121942099">"ఈ నోటిఫికేషన్, ఆటోమేటిక్ సెట్టింగ్కు ప్రమోట్ చేయబడింది. ఫీడ్బ్యాక్ను అందించడానికి ట్యాప్ చేయండి."</string> <string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"ఈ నోటిఫికేషన్ స్థాయి నిశ్శబ్దంగా ఉండేలా తగ్గించబడింది. ఫీడ్బ్యాక్ను అందించడానికి ట్యాప్ చేయండి."</string> <string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"ఈ నోటిఫికేషన్కు ఎక్కువ ర్యాంక్ ఇవ్వబడింది. ఫీడ్బ్యాక్ను అందించడానికి ట్యాప్ చేయండి."</string> diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml index 72cbc3661549..c0ab275add7f 100644 --- a/core/res/res/values-th/strings.xml +++ b/core/res/res/values-th/strings.xml @@ -72,6 +72,8 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"หมายเลขผู้โทรได้รับการตั้งค่าเริ่มต้นเป็นไม่จำกัด การโทรครั้งต่อไป: ไม่จำกัด"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"ไม่มีการนำเสนอบริการ"</string> <string name="CLIRPermanent" msgid="166443681876381118">"คุณไม่สามารถเปลี่ยนการตั้งค่าหมายเลขผู้โทร"</string> + <string name="auto_data_switch_title" msgid="3286350716870518297">"เปลี่ยนไปใช้อินเทอร์เน็ตมือถือของ <xliff:g id="CARRIERDISPLAY">%s</xliff:g> แล้ว"</string> + <string name="auto_data_switch_content" msgid="803557715007110959">"คุณเปลี่ยนตัวเลือกนี้ได้ทุกเมื่อในการตั้งค่า"</string> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"ไม่มีบริการเน็ตมือถือ"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"หมายเลขฉุกเฉินไม่พร้อมใช้งาน"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"ไม่มีบริการเสียง"</string> diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml index e66999d6cb96..7b9807af7c0e 100644 --- a/core/res/res/values-tl/strings.xml +++ b/core/res/res/values-tl/strings.xml @@ -72,6 +72,8 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"Naka-default na hindi pinaghihigpitan ang Caller ID. Susunod na tawag: Hindi pinaghihigpitan"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"Hindi naprobisyon ang serbisyo."</string> <string name="CLIRPermanent" msgid="166443681876381118">"Hindi mo mababago ang setting ng caller ID."</string> + <string name="auto_data_switch_title" msgid="3286350716870518297">"Nailipat sa <xliff:g id="CARRIERDISPLAY">%s</xliff:g> ang data"</string> + <string name="auto_data_switch_content" msgid="803557715007110959">"Puwede mo itong baguhin anumang oras sa Mga Setting"</string> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"Walang serbisyo ng data sa mobile"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"Hindi available ang pang-emergency na pagtawag"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"Walang serbisyo para sa boses"</string> diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml index b6c4b4a61d4d..3459cb07491a 100644 --- a/core/res/res/values-tr/strings.xml +++ b/core/res/res/values-tr/strings.xml @@ -72,6 +72,10 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"Arayan kimliği varsayılanları kısıtlanmamıştır. Sonraki çağrı: Kısıtlanmamış"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"Hizmet sağlanamadı."</string> <string name="CLIRPermanent" msgid="166443681876381118">"Arayanın kimliği ayarını değiştiremezsiniz."</string> + <!-- no translation found for auto_data_switch_title (3286350716870518297) --> + <skip /> + <!-- no translation found for auto_data_switch_content (803557715007110959) --> + <skip /> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"Mobil veri hizmeti yok"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"Acil durum çağrısı kullanılamaz"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"Sesli çağrı hizmeti yok"</string> diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml index c408c5133ebb..2483a30365b6 100644 --- a/core/res/res/values-uk/strings.xml +++ b/core/res/res/values-uk/strings.xml @@ -74,6 +74,10 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"Ідентиф. абонента за умовч. не обмеж. Наст. дзвінок: не обмежений"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"Службу не ініціалізовано."</string> <string name="CLIRPermanent" msgid="166443681876381118">"Ви не можете змінювати налаштування ідентифікатора абонента."</string> + <!-- no translation found for auto_data_switch_title (3286350716870518297) --> + <skip /> + <!-- no translation found for auto_data_switch_content (803557715007110959) --> + <skip /> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"Службу передавання мобільних даних заблоковано"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"Екстрені виклики недоступні"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"Немає голосової служби"</string> diff --git a/core/res/res/values-ur/strings.xml b/core/res/res/values-ur/strings.xml index 778443158799..7de793c214c2 100644 --- a/core/res/res/values-ur/strings.xml +++ b/core/res/res/values-ur/strings.xml @@ -72,6 +72,10 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"کالر ID کی ڈیفالٹ ترتیب غیر محدود کردہ ہے۔ اگلی کال: غیر محدود کردہ"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"سروس فراہم نہیں کی گئی۔"</string> <string name="CLIRPermanent" msgid="166443681876381118">"آپ کالر ID کی ترتیبات تبدیل نہیں کر سکتے ہیں۔"</string> + <!-- no translation found for auto_data_switch_title (3286350716870518297) --> + <skip /> + <!-- no translation found for auto_data_switch_content (803557715007110959) --> + <skip /> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"کوئی موبائل ڈیٹا سروس دستیاب نہیں ہے"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"ہنگامی کالنگ دستیاب نہیں ہے"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"کوئی صوتی سروس نہیں"</string> diff --git a/core/res/res/values-uz/strings.xml b/core/res/res/values-uz/strings.xml index 5ac689d11930..8c8858512d7c 100644 --- a/core/res/res/values-uz/strings.xml +++ b/core/res/res/values-uz/strings.xml @@ -72,6 +72,10 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"Qo‘ng‘iroq qiluvchi ma’lumotlari cheklanmagan. Keyingi qo‘ng‘iroq: cheklanmagan"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"Xizmat ishalamaydi."</string> <string name="CLIRPermanent" msgid="166443681876381118">"Qo‘ng‘iroq qiluvchining ID raqami sozlamasini o‘zgartirib bo‘lmaydi."</string> + <!-- no translation found for auto_data_switch_title (3286350716870518297) --> + <skip /> + <!-- no translation found for auto_data_switch_content (803557715007110959) --> + <skip /> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"Mobil internet ishlamayapti"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"Favqulodda chaqiruv ishlamayapti"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"Ovozli chaqiruvlar ishlamaydi"</string> @@ -1592,7 +1596,7 @@ <string name="issued_by" msgid="7872459822431585684">"Tegishli:"</string> <string name="validity_period" msgid="1717724283033175968">"Yaroqliligi:"</string> <string name="issued_on" msgid="5855489688152497307">"Chiqarilgan sanasi:"</string> - <string name="expires_on" msgid="1623640879705103121">"Amal qilish muddati:"</string> + <string name="expires_on" msgid="1623640879705103121">"Muddati:"</string> <string name="serial_number" msgid="3479576915806623429">"Serial raqam:"</string> <string name="fingerprints" msgid="148690767172613723">"Barmoq izlari:"</string> <string name="sha256_fingerprint" msgid="7103976380961964600">"SHA-256 barmoq izi:"</string> diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml index e1b479cc295e..68bb062e42c6 100644 --- a/core/res/res/values-vi/strings.xml +++ b/core/res/res/values-vi/strings.xml @@ -72,6 +72,10 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"Số gọi đến mặc định thành không bị giới hạn. Cuộc gọi tiếp theo. Không bị giới hạn"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"Dịch vụ không được cấp phép."</string> <string name="CLIRPermanent" msgid="166443681876381118">"Bạn không thể thay đổi cài đặt ID người gọi."</string> + <!-- no translation found for auto_data_switch_title (3286350716870518297) --> + <skip /> + <!-- no translation found for auto_data_switch_content (803557715007110959) --> + <skip /> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"Không có dịch vụ dữ liệu di động"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"Không có dịch vụ gọi khẩn cấp"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"Không có dịch vụ thoại"</string> diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml index 5fce25e0ecdd..f2b033e5a1d9 100644 --- a/core/res/res/values-zh-rCN/strings.xml +++ b/core/res/res/values-zh-rCN/strings.xml @@ -72,6 +72,10 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"默认显示本机号码,在下一次通话中也显示"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"未提供服务。"</string> <string name="CLIRPermanent" msgid="166443681876381118">"您无法更改来电显示设置。"</string> + <!-- no translation found for auto_data_switch_title (3286350716870518297) --> + <skip /> + <!-- no translation found for auto_data_switch_content (803557715007110959) --> + <skip /> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"无法使用移动数据服务"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"无法使用紧急呼救服务"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"无法使用语音通话服务"</string> diff --git a/core/res/res/values-zh-rHK/strings.xml b/core/res/res/values-zh-rHK/strings.xml index 61a3f2048fbe..63995bbc6486 100644 --- a/core/res/res/values-zh-rHK/strings.xml +++ b/core/res/res/values-zh-rHK/strings.xml @@ -72,6 +72,10 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"預設顯示來電號碼,下一通電話也繼續顯示。"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"未提供此服務。"</string> <string name="CLIRPermanent" msgid="166443681876381118">"您無法更改來電顯示設定。"</string> + <!-- no translation found for auto_data_switch_title (3286350716870518297) --> + <skip /> + <!-- no translation found for auto_data_switch_content (803557715007110959) --> + <skip /> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"無法使用流動數據服務"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"無法撥打緊急電話"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"沒有語音服務"</string> diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml index 10dc699edf9b..55f9321cd9ec 100644 --- a/core/res/res/values-zh-rTW/strings.xml +++ b/core/res/res/values-zh-rTW/strings.xml @@ -72,6 +72,10 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"預設顯示本機號碼,下一通電話也繼續顯示。"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"無法提供此服務。"</string> <string name="CLIRPermanent" msgid="166443681876381118">"你無法變更來電顯示設定。"</string> + <!-- no translation found for auto_data_switch_title (3286350716870518297) --> + <skip /> + <!-- no translation found for auto_data_switch_content (803557715007110959) --> + <skip /> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"沒有行動數據傳輸服務"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"無法撥打緊急電話"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"無法使用語音通話服務"</string> diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml index 66d639ebb583..2218b7687720 100644 --- a/core/res/res/values-zu/strings.xml +++ b/core/res/res/values-zu/strings.xml @@ -72,6 +72,10 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"I-ID Yomshayeli ishintshela kokungavinjelwe. Ucingo olulandelayo: Aluvinjelwe"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"Isevisi ayilungiselelwe."</string> <string name="CLIRPermanent" msgid="166443681876381118">"Ngeke ukwazi ukuguqul izilungiselelo zemininingwane yoshayayo."</string> + <!-- no translation found for auto_data_switch_title (3286350716870518297) --> + <skip /> + <!-- no translation found for auto_data_switch_content (803557715007110959) --> + <skip /> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"Ayikho isevisi yedatha yeselula"</string> <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"Ukushaya okuphuthumayo akutholakali"</string> <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"Ayikho isevisi yezwi"</string> diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml index 509de3364f0e..1f459c6f623d 100644 --- a/core/res/res/values/strings.xml +++ b/core/res/res/values/strings.xml @@ -1933,6 +1933,11 @@ <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. "shared storage" refers to a storage space on the device that all apps with this permission can read from. [CHAR LIMIT=none] --> <string name="permdesc_readMediaImages">Allows the app to read image files from your shared storage.</string> + <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. "shared storage" refers to a storage space on the device that all apps with this permission can read from. [CHAR LIMIT=none] --> + <string name="permlab_readVisualUserSelect">read user selected image and video files from shared storage</string> + <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. "shared storage" refers to a storage space on the device that all apps with this permission can read from. [CHAR LIMIT=none] --> + <string name="permdesc_readVisualUserSelect">Allows the app to read image and video files that you select from your shared storage.</string> + <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. "shared storage" refers to a storage space on the device that all apps with this permission can write to. [CHAR LIMIT=none] --> <string name="permlab_sdcardWrite">modify or delete the contents of your shared storage</string> <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. "shared storage" refers to a storage space on the device that all apps with this permission can write to. [CHAR LIMIT=none] --> diff --git a/core/tests/BroadcastRadioTests/src/android/hardware/radio/tests/unittests/ProgramSelectorTest.java b/core/tests/BroadcastRadioTests/src/android/hardware/radio/tests/unittests/ProgramSelectorTest.java index 57b9cb1a9097..5bd018bea1d1 100644 --- a/core/tests/BroadcastRadioTests/src/android/hardware/radio/tests/unittests/ProgramSelectorTest.java +++ b/core/tests/BroadcastRadioTests/src/android/hardware/radio/tests/unittests/ProgramSelectorTest.java @@ -23,11 +23,13 @@ import static org.junit.Assert.assertThrows; import android.annotation.Nullable; import android.hardware.radio.ProgramSelector; import android.hardware.radio.RadioManager; +import android.os.Parcel; import org.junit.Test; public final class ProgramSelectorTest { + private static final int CREATOR_ARRAY_SIZE = 2; private static final int FM_PROGRAM_TYPE = ProgramSelector.PROGRAM_TYPE_FM; private static final int DAB_PROGRAM_TYPE = ProgramSelector.PROGRAM_TYPE_DAB; private static final long FM_FREQUENCY = 88500; @@ -97,6 +99,33 @@ public final class ProgramSelectorTest { } @Test + public void describeContents_forIdentifier() { + assertWithMessage("FM identifier contents") + .that(FM_IDENTIFIER.describeContents()).isEqualTo(0); + } + + @Test + public void newArray_forIdentifierCreator() { + ProgramSelector.Identifier[] identifiers = + ProgramSelector.Identifier.CREATOR.newArray(CREATOR_ARRAY_SIZE); + + assertWithMessage("Identifiers").that(identifiers).hasLength(CREATOR_ARRAY_SIZE); + } + + @Test + public void writeToParcel_forIdentifier() { + Parcel parcel = Parcel.obtain(); + + FM_IDENTIFIER.writeToParcel(parcel, /* flags= */ 0); + parcel.setDataPosition(0); + + ProgramSelector.Identifier identifierFromParcel = + ProgramSelector.Identifier.CREATOR.createFromParcel(parcel); + assertWithMessage("Identifier created from parcel") + .that(identifierFromParcel).isEqualTo(FM_IDENTIFIER); + } + + @Test public void getProgramType() { ProgramSelector selector = getFmSelector(/* secondaryIds= */ null, /* vendorIds= */ null); @@ -394,6 +423,34 @@ public final class ProgramSelectorTest { .that(selector1.strictEquals(selector2)).isTrue(); } + @Test + public void describeContents_forProgramSelector() { + assertWithMessage("FM selector contents") + .that(getFmSelector(/* secondaryIds= */ null, /* vendorIds= */ null) + .describeContents()).isEqualTo(0); + } + + @Test + public void newArray_forProgramSelectorCreator() { + ProgramSelector[] programSelectors = ProgramSelector.CREATOR.newArray(CREATOR_ARRAY_SIZE); + + assertWithMessage("Program selectors").that(programSelectors).hasLength(CREATOR_ARRAY_SIZE); + } + + @Test + public void writeToParcel_forProgramSelector() { + ProgramSelector selectorExpected = + getFmSelector(/* secondaryIds= */ null, /* vendorIds= */ null); + Parcel parcel = Parcel.obtain(); + + selectorExpected.writeToParcel(parcel, /* flags= */ 0); + parcel.setDataPosition(0); + + ProgramSelector selectorFromParcel = ProgramSelector.CREATOR.createFromParcel(parcel); + assertWithMessage("Program selector created from parcel") + .that(selectorFromParcel).isEqualTo(selectorExpected); + } + private ProgramSelector getFmSelector(@Nullable ProgramSelector.Identifier[] secondaryIds, @Nullable long[] vendorIds) { return new ProgramSelector(FM_PROGRAM_TYPE, FM_IDENTIFIER, secondaryIds, vendorIds); diff --git a/core/tests/BroadcastRadioTests/src/android/hardware/radio/tests/unittests/RadioAnnouncementTest.java b/core/tests/BroadcastRadioTests/src/android/hardware/radio/tests/unittests/RadioAnnouncementTest.java index 42143b92e9d8..6e1bb4b4c5a3 100644 --- a/core/tests/BroadcastRadioTests/src/android/hardware/radio/tests/unittests/RadioAnnouncementTest.java +++ b/core/tests/BroadcastRadioTests/src/android/hardware/radio/tests/unittests/RadioAnnouncementTest.java @@ -22,6 +22,7 @@ import static org.junit.Assert.assertThrows; import android.hardware.radio.Announcement; import android.hardware.radio.ProgramSelector; +import android.os.Parcel; import android.util.ArrayMap; import org.junit.Test; @@ -83,4 +84,35 @@ public final class RadioAnnouncementTest { vendorInfo.put("vendorKeyMock", "vendorValueMock"); return vendorInfo; } + + @Test + public void describeContents_forAnnouncement() { + assertWithMessage("Radio announcement contents") + .that(TEST_ANNOUNCEMENT.describeContents()).isEqualTo(0); + } + + @Test + public void newArray_forAnnouncementCreator() { + int sizeExpected = 2; + + Announcement[] announcements = Announcement.CREATOR.newArray(sizeExpected); + + assertWithMessage("Announcements").that(announcements).hasLength(sizeExpected); + } + + @Test + public void writeToParcel_forAnnouncement() { + Parcel parcel = Parcel.obtain(); + + TEST_ANNOUNCEMENT.writeToParcel(parcel, /* flags= */ 0); + parcel.setDataPosition(0); + + Announcement announcementFromParcel = Announcement.CREATOR.createFromParcel(parcel); + assertWithMessage("Selector of announcement created from parcel") + .that(announcementFromParcel.getSelector()).isEqualTo(FM_PROGRAM_SELECTOR); + assertWithMessage("Type of announcement created from parcel") + .that(announcementFromParcel.getType()).isEqualTo(TRAFFIC_ANNOUNCEMENT_TYPE); + assertWithMessage("Vendor info of announcement created from parcel") + .that(announcementFromParcel.getVendorInfo()).isEqualTo(VENDOR_INFO); + } } diff --git a/core/tests/BroadcastRadioTests/src/android/hardware/radio/tests/unittests/RadioManagerTest.java b/core/tests/BroadcastRadioTests/src/android/hardware/radio/tests/unittests/RadioManagerTest.java index be4d0d434d79..f838a5df2eae 100644 --- a/core/tests/BroadcastRadioTests/src/android/hardware/radio/tests/unittests/RadioManagerTest.java +++ b/core/tests/BroadcastRadioTests/src/android/hardware/radio/tests/unittests/RadioManagerTest.java @@ -33,6 +33,7 @@ import android.hardware.radio.ProgramSelector; import android.hardware.radio.RadioManager; import android.hardware.radio.RadioMetadata; import android.hardware.radio.RadioTuner; +import android.os.Parcel; import android.os.RemoteException; import android.util.ArrayMap; @@ -80,6 +81,8 @@ public final class RadioManagerTest { private static final int[] SUPPORTED_IDENTIFIERS_TYPES = new int[]{ ProgramSelector.IDENTIFIER_TYPE_AMFM_FREQUENCY, ProgramSelector.IDENTIFIER_TYPE_RDS_PI}; + private static final int CREATOR_ARRAY_SIZE = 3; + private static final RadioManager.FmBandDescriptor FM_BAND_DESCRIPTOR = createFmBandDescriptor(); private static final RadioManager.AmBandDescriptor AM_BAND_DESCRIPTOR = @@ -173,6 +176,22 @@ public final class RadioManagerTest { } @Test + public void describeContents_forBandDescriptor() { + RadioManager.BandDescriptor bandDescriptor = createFmBandDescriptor(); + + assertWithMessage("Band Descriptor contents") + .that(bandDescriptor.describeContents()).isEqualTo(0); + } + + @Test + public void newArray_forBandDescriptorCreator() { + RadioManager.BandDescriptor[] bandDescriptors = + RadioManager.BandDescriptor.CREATOR.newArray(CREATOR_ARRAY_SIZE); + + assertWithMessage("Band Descriptors").that(bandDescriptors).hasLength(CREATOR_ARRAY_SIZE); + } + + @Test public void isAmBand_forAmBandDescriptor_returnsTrue() { RadioManager.BandDescriptor bandDescriptor = createAmBandDescriptor(); @@ -219,18 +238,73 @@ public final class RadioManagerTest { } @Test + public void describeContents_forFmBandDescriptor() { + assertWithMessage("FM Band Descriptor contents") + .that(FM_BAND_DESCRIPTOR.describeContents()).isEqualTo(0); + } + + @Test + public void writeToParcel_forFmBandDescriptor() { + Parcel parcel = Parcel.obtain(); + + FM_BAND_DESCRIPTOR.writeToParcel(parcel, /* flags= */ 0); + parcel.setDataPosition(0); + + RadioManager.FmBandDescriptor fmBandDescriptorFromParcel = + RadioManager.FmBandDescriptor.CREATOR.createFromParcel(parcel); + assertWithMessage("FM Band Descriptor created from parcel") + .that(fmBandDescriptorFromParcel).isEqualTo(FM_BAND_DESCRIPTOR); + } + + @Test + public void newArray_forFmBandDescriptorCreator() { + RadioManager.FmBandDescriptor[] fmBandDescriptors = + RadioManager.FmBandDescriptor.CREATOR.newArray(CREATOR_ARRAY_SIZE); + + assertWithMessage("FM Band Descriptors") + .that(fmBandDescriptors).hasLength(CREATOR_ARRAY_SIZE); + } + + @Test public void isStereoSupported_forAmBandDescriptor() { assertWithMessage("AM Band Descriptor stereo") .that(AM_BAND_DESCRIPTOR.isStereoSupported()).isEqualTo(STEREO_SUPPORTED); } @Test + public void describeContents_forAmBandDescriptor() { + assertWithMessage("AM Band Descriptor contents") + .that(AM_BAND_DESCRIPTOR.describeContents()).isEqualTo(0); + } + + @Test + public void writeToParcel_forAmBandDescriptor() { + Parcel parcel = Parcel.obtain(); + + AM_BAND_DESCRIPTOR.writeToParcel(parcel, /* flags= */ 0); + parcel.setDataPosition(0); + + RadioManager.AmBandDescriptor amBandDescriptorFromParcel = + RadioManager.AmBandDescriptor.CREATOR.createFromParcel(parcel); + assertWithMessage("FM Band Descriptor created from parcel") + .that(amBandDescriptorFromParcel).isEqualTo(AM_BAND_DESCRIPTOR); + } + + @Test + public void newArray_forAmBandDescriptorCreator() { + RadioManager.AmBandDescriptor[] amBandDescriptors = + RadioManager.AmBandDescriptor.CREATOR.newArray(CREATOR_ARRAY_SIZE); + + assertWithMessage("AM Band Descriptors") + .that(amBandDescriptors).hasLength(CREATOR_ARRAY_SIZE); + } + + @Test public void equals_withSameFmBandDescriptors_returnsTrue() { - RadioManager.FmBandDescriptor fmBandDescriptor1 = createFmBandDescriptor(); - RadioManager.FmBandDescriptor fmBandDescriptor2 = createFmBandDescriptor(); + RadioManager.FmBandDescriptor fmBandDescriptorCompared = createFmBandDescriptor(); assertWithMessage("The same FM Band Descriptor") - .that(fmBandDescriptor1).isEqualTo(fmBandDescriptor2); + .that(FM_BAND_DESCRIPTOR).isEqualTo(fmBandDescriptorCompared); } @Test @@ -258,6 +332,44 @@ public final class RadioManagerTest { } @Test + public void hashCode_withSameFmBandDescriptors_equals() { + RadioManager.FmBandDescriptor fmBandDescriptorCompared = createFmBandDescriptor(); + + assertWithMessage("Hash code of the same FM Band Descriptor") + .that(fmBandDescriptorCompared.hashCode()).isEqualTo(FM_BAND_DESCRIPTOR.hashCode()); + } + + @Test + public void hashCode_withSameAmBandDescriptors_equals() { + RadioManager.AmBandDescriptor amBandDescriptorCompared = createAmBandDescriptor(); + + assertWithMessage("Hash code of the same AM Band Descriptor") + .that(amBandDescriptorCompared.hashCode()).isEqualTo(AM_BAND_DESCRIPTOR.hashCode()); + } + + @Test + public void hashCode_withFmBandDescriptorsOfDifferentAfSupports_notEquals() { + RadioManager.FmBandDescriptor fmBandDescriptorCompared = new RadioManager.FmBandDescriptor( + REGION, RadioManager.BAND_FM, FM_LOWER_LIMIT, FM_UPPER_LIMIT, FM_SPACING, + STEREO_SUPPORTED, RDS_SUPPORTED, TA_SUPPORTED, !AF_SUPPORTED, EA_SUPPORTED); + + assertWithMessage("Hash code of FM Band Descriptor of different spacing") + .that(fmBandDescriptorCompared.hashCode()) + .isNotEqualTo(FM_BAND_DESCRIPTOR.hashCode()); + } + + @Test + public void hashCode_withAmBandDescriptorsOfDifferentSpacings_notEquals() { + RadioManager.AmBandDescriptor amBandDescriptorCompared = + new RadioManager.AmBandDescriptor(REGION, RadioManager.BAND_AM, AM_LOWER_LIMIT, + AM_UPPER_LIMIT, AM_SPACING * 2, STEREO_SUPPORTED); + + assertWithMessage("Hash code of AM Band Descriptor of different spacing") + .that(amBandDescriptorCompared.hashCode()) + .isNotEqualTo(AM_BAND_DESCRIPTOR.hashCode()); + } + + @Test public void getType_forBandConfig() { RadioManager.BandConfig fmBandConfig = createFmBandConfig(); @@ -298,8 +410,24 @@ public final class RadioManagerTest { } @Test + public void describeContents_forBandConfig() { + RadioManager.BandConfig bandConfig = createFmBandConfig(); + + assertWithMessage("FM Band Config contents") + .that(bandConfig.describeContents()).isEqualTo(0); + } + + @Test + public void newArray_forBandConfigCreator() { + RadioManager.BandConfig[] bandConfigs = + RadioManager.BandConfig.CREATOR.newArray(CREATOR_ARRAY_SIZE); + + assertWithMessage("Band Configs").that(bandConfigs).hasLength(CREATOR_ARRAY_SIZE); + } + + @Test public void getStereo_forFmBandConfig() { - assertWithMessage("FM Band Config stereo ") + assertWithMessage("FM Band Config stereo") .that(FM_BAND_CONFIG.getStereo()).isEqualTo(STEREO_SUPPORTED); } @@ -328,12 +456,66 @@ public final class RadioManagerTest { } @Test + public void describeContents_forFmBandConfig() { + assertWithMessage("FM Band Config contents") + .that(FM_BAND_CONFIG.describeContents()).isEqualTo(0); + } + + @Test + public void writeToParcel_forFmBandConfig() { + Parcel parcel = Parcel.obtain(); + + FM_BAND_CONFIG.writeToParcel(parcel, /* flags= */ 0); + parcel.setDataPosition(0); + + RadioManager.FmBandConfig fmBandConfigFromParcel = + RadioManager.FmBandConfig.CREATOR.createFromParcel(parcel); + assertWithMessage("FM Band Config created from parcel") + .that(fmBandConfigFromParcel).isEqualTo(FM_BAND_CONFIG); + } + + @Test + public void newArray_forFmBandConfigCreator() { + RadioManager.FmBandConfig[] fmBandConfigs = + RadioManager.FmBandConfig.CREATOR.newArray(CREATOR_ARRAY_SIZE); + + assertWithMessage("FM Band Configs").that(fmBandConfigs).hasLength(CREATOR_ARRAY_SIZE); + } + + @Test public void getStereo_forAmBandConfig() { assertWithMessage("AM Band Config stereo") .that(AM_BAND_CONFIG.getStereo()).isEqualTo(STEREO_SUPPORTED); } @Test + public void describeContents_forAmBandConfig() { + assertWithMessage("AM Band Config contents") + .that(AM_BAND_CONFIG.describeContents()).isEqualTo(0); + } + + @Test + public void writeToParcel_forAmBandConfig() { + Parcel parcel = Parcel.obtain(); + + AM_BAND_CONFIG.writeToParcel(parcel, /* flags= */ 0); + parcel.setDataPosition(0); + + RadioManager.AmBandConfig amBandConfigFromParcel = + RadioManager.AmBandConfig.CREATOR.createFromParcel(parcel); + assertWithMessage("AM Band Config created from parcel") + .that(amBandConfigFromParcel).isEqualTo(AM_BAND_CONFIG); + } + + @Test + public void newArray_forAmBandConfigCreator() { + RadioManager.AmBandConfig[] amBandConfigs = + RadioManager.AmBandConfig.CREATOR.newArray(CREATOR_ARRAY_SIZE); + + assertWithMessage("AM Band Configs").that(amBandConfigs).hasLength(CREATOR_ARRAY_SIZE); + } + + @Test public void equals_withSameFmBandConfigs_returnsTrue() { RadioManager.FmBandConfig fmBandConfigCompared = createFmBandConfig(); @@ -387,6 +569,43 @@ public final class RadioManagerTest { } @Test + public void hashCode_withSameFmBandConfigs_equals() { + RadioManager.FmBandConfig fmBandConfigCompared = createFmBandConfig(); + + assertWithMessage("Hash code of the same FM Band Config") + .that(FM_BAND_CONFIG.hashCode()).isEqualTo(fmBandConfigCompared.hashCode()); + } + + @Test + public void hashCode_withSameAmBandConfigs_equals() { + RadioManager.AmBandConfig amBandConfigCompared = createAmBandConfig(); + + assertWithMessage("Hash code of the same AM Band Config") + .that(amBandConfigCompared.hashCode()).isEqualTo(AM_BAND_CONFIG.hashCode()); + } + + @Test + public void hashCode_withFmBandConfigsOfDifferentTypes_notEquals() { + RadioManager.FmBandConfig fmBandConfigCompared = new RadioManager.FmBandConfig( + new RadioManager.FmBandDescriptor(REGION, RadioManager.BAND_FM_HD, FM_LOWER_LIMIT, + FM_UPPER_LIMIT, FM_SPACING, STEREO_SUPPORTED, RDS_SUPPORTED, TA_SUPPORTED, + AF_SUPPORTED, EA_SUPPORTED)); + + assertWithMessage("Hash code of FM Band Config with different type") + .that(fmBandConfigCompared.hashCode()).isNotEqualTo(FM_BAND_CONFIG.hashCode()); + } + + @Test + public void hashCode_withAmBandConfigsOfDifferentStereoSupports_notEquals() { + RadioManager.AmBandConfig amBandConfigCompared = new RadioManager.AmBandConfig( + new RadioManager.AmBandDescriptor(REGION, RadioManager.BAND_AM, AM_LOWER_LIMIT, + AM_UPPER_LIMIT, AM_SPACING, !STEREO_SUPPORTED)); + + assertWithMessage("Hash code of AM Band Config with different stereo support") + .that(amBandConfigCompared.hashCode()).isNotEqualTo(AM_BAND_CONFIG.hashCode()); + } + + @Test public void getId_forModuleProperties() { assertWithMessage("Properties id") .that(AMFM_PROPERTIES.getId()).isEqualTo(PROPERTIES_ID); @@ -509,6 +728,12 @@ public final class RadioManagerTest { } @Test + public void describeContents_forModuleProperties() { + assertWithMessage("Module properties contents") + .that(AMFM_PROPERTIES.describeContents()).isEqualTo(0); + } + + @Test public void equals_withSameProperties_returnsTrue() { RadioManager.ModuleProperties propertiesCompared = createAmFmProperties(); @@ -530,6 +755,23 @@ public final class RadioManagerTest { } @Test + public void hashCode_withSameModuleProperties_equals() { + RadioManager.ModuleProperties propertiesCompared = createAmFmProperties(); + + assertWithMessage("Hash code of the same module properties") + .that(propertiesCompared.hashCode()).isEqualTo(AMFM_PROPERTIES.hashCode()); + } + + @Test + public void newArray_forModulePropertiesCreator() { + RadioManager.ModuleProperties[] modulePropertiesArray = + RadioManager.ModuleProperties.CREATOR.newArray(CREATOR_ARRAY_SIZE); + + assertWithMessage("Module properties array") + .that(modulePropertiesArray).hasLength(CREATOR_ARRAY_SIZE); + } + + @Test public void getSelector_forProgramInfo() { assertWithMessage("Selector of DAB program info") .that(DAB_PROGRAM_INFO.getSelector()).isEqualTo(DAB_SELECTOR); @@ -549,7 +791,7 @@ public final class RadioManagerTest { @Test public void getRelatedContent_forProgramInfo() { - assertWithMessage("Related contents of DAB program info") + assertWithMessage("DAB program info contents") .that(DAB_PROGRAM_INFO.getRelatedContent()) .containsExactly(DAB_SID_EXT_IDENTIFIER_RELATED); } @@ -627,6 +869,33 @@ public final class RadioManagerTest { } @Test + public void describeContents_forProgramInfo() { + assertWithMessage("Program info contents") + .that(DAB_PROGRAM_INFO.describeContents()).isEqualTo(0); + } + + @Test + public void newArray_forProgramInfoCreator() { + RadioManager.ProgramInfo[] programInfoArray = + RadioManager.ProgramInfo.CREATOR.newArray(CREATOR_ARRAY_SIZE); + + assertWithMessage("Program infos").that(programInfoArray).hasLength(CREATOR_ARRAY_SIZE); + } + + @Test + public void writeToParcel_forProgramInfo() { + Parcel parcel = Parcel.obtain(); + + DAB_PROGRAM_INFO.writeToParcel(parcel, /* flags= */ 0); + parcel.setDataPosition(0); + + RadioManager.ProgramInfo programInfoFromParcel = + RadioManager.ProgramInfo.CREATOR.createFromParcel(parcel); + assertWithMessage("Program info created from parcel") + .that(programInfoFromParcel).isEqualTo(DAB_PROGRAM_INFO); + } + + @Test public void equals_withSameProgramInfo_returnsTrue() { RadioManager.ProgramInfo dabProgramInfoCompared = createDabProgramInfo(DAB_SELECTOR); diff --git a/core/tests/BroadcastRadioTests/src/android/hardware/radio/tests/unittests/RadioMetadataTest.java b/core/tests/BroadcastRadioTests/src/android/hardware/radio/tests/unittests/RadioMetadataTest.java index fe15597a9514..5771135e32b8 100644 --- a/core/tests/BroadcastRadioTests/src/android/hardware/radio/tests/unittests/RadioMetadataTest.java +++ b/core/tests/BroadcastRadioTests/src/android/hardware/radio/tests/unittests/RadioMetadataTest.java @@ -20,18 +20,63 @@ import static com.google.common.truth.Truth.assertWithMessage; import static org.junit.Assert.assertThrows; +import android.graphics.Bitmap; import android.hardware.radio.RadioMetadata; +import android.os.Parcel; import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnitRunner; import java.util.Set; +@RunWith(MockitoJUnitRunner.class) public final class RadioMetadataTest { + private static final int CREATOR_ARRAY_SIZE = 3; private static final int INT_KEY_VALUE = 1; + private static final long TEST_UTC_SECOND_SINCE_EPOCH = 200; + private static final int TEST_TIME_ZONE_OFFSET_MINUTES = 1; private final RadioMetadata.Builder mBuilder = new RadioMetadata.Builder(); + @Mock + private Bitmap mBitmapValue; + + @Test + public void describeContents_forClock() { + RadioMetadata.Clock clock = new RadioMetadata.Clock(TEST_UTC_SECOND_SINCE_EPOCH, + TEST_TIME_ZONE_OFFSET_MINUTES); + + assertWithMessage("Describe contents for metadata clock") + .that(clock.describeContents()).isEqualTo(0); + } + + @Test + public void newArray_forClockCreator() { + RadioMetadata.Clock[] clocks = RadioMetadata.Clock.CREATOR.newArray(CREATOR_ARRAY_SIZE); + + assertWithMessage("Clock array size").that(clocks.length).isEqualTo(CREATOR_ARRAY_SIZE); + } + + @Test + public void writeToParcel_forClock() { + RadioMetadata.Clock clockExpected = new RadioMetadata.Clock(TEST_UTC_SECOND_SINCE_EPOCH, + TEST_TIME_ZONE_OFFSET_MINUTES); + Parcel parcel = Parcel.obtain(); + + clockExpected.writeToParcel(parcel, /* flags= */ 0); + parcel.setDataPosition(0); + + RadioMetadata.Clock clockFromParcel = RadioMetadata.Clock.CREATOR.createFromParcel(parcel); + assertWithMessage("UTC second since epoch of metadata clock created from parcel") + .that(clockFromParcel.getUtcEpochSeconds()).isEqualTo(TEST_UTC_SECOND_SINCE_EPOCH); + assertWithMessage("Time zone offset minutes of metadata clock created from parcel") + .that(clockFromParcel.getTimezoneOffsetMinutes()) + .isEqualTo(TEST_TIME_ZONE_OFFSET_MINUTES); + } + @Test public void putString_withIllegalKey() { String invalidStringKey = RadioMetadata.METADATA_KEY_RDS_PI; @@ -129,22 +174,56 @@ public final class RadioMetadataTest { } @Test + public void getBitmap_withKeyInMetadata() { + String key = RadioMetadata.METADATA_KEY_ICON; + RadioMetadata metadata = mBuilder.putBitmap(key, mBitmapValue).build(); + + assertWithMessage("Bitmap value for key %s in metadata", key) + .that(metadata.getBitmap(key)).isEqualTo(mBitmapValue); + } + + @Test + public void getBitmap_withKeyNotInMetadata() { + String key = RadioMetadata.METADATA_KEY_ICON; + RadioMetadata metadata = mBuilder.build(); + + assertWithMessage("Bitmap value for key %s not in metadata", key) + .that(metadata.getBitmap(key)).isNull(); + } + + @Test + public void getBitmapId_withKeyInMetadata() { + String key = RadioMetadata.METADATA_KEY_ART; + RadioMetadata metadata = mBuilder.putInt(key, INT_KEY_VALUE).build(); + + assertWithMessage("Bitmap id value for key %s in metadata", key) + .that(metadata.getBitmapId(key)).isEqualTo(INT_KEY_VALUE); + } + + @Test + public void getBitmapId_withKeyNotInMetadata() { + String key = RadioMetadata.METADATA_KEY_ART; + RadioMetadata metadata = mBuilder.build(); + + assertWithMessage("Bitmap id value for key %s not in metadata", key) + .that(metadata.getBitmapId(key)).isEqualTo(0); + } + + @Test public void getClock_withKeyInMetadata() { String key = RadioMetadata.METADATA_KEY_CLOCK; - long utcSecondsSinceEpochExpected = 200; - int timezoneOffsetMinutesExpected = 1; RadioMetadata metadata = mBuilder - .putClock(key, utcSecondsSinceEpochExpected, timezoneOffsetMinutesExpected) + .putClock(key, TEST_UTC_SECOND_SINCE_EPOCH, TEST_TIME_ZONE_OFFSET_MINUTES) .build(); RadioMetadata.Clock clockExpected = metadata.getClock(key); assertWithMessage("Number of seconds since epoch of value for key %s in metadata", key) .that(clockExpected.getUtcEpochSeconds()) - .isEqualTo(utcSecondsSinceEpochExpected); + .isEqualTo(TEST_UTC_SECOND_SINCE_EPOCH); assertWithMessage("Offset of timezone in minutes of value for key %s in metadata", key) .that(clockExpected.getTimezoneOffsetMinutes()) - .isEqualTo(timezoneOffsetMinutesExpected); + .isEqualTo(TEST_TIME_ZONE_OFFSET_MINUTES); } @Test @@ -180,12 +259,13 @@ public final class RadioMetadataTest { RadioMetadata metadata = mBuilder .putInt(RadioMetadata.METADATA_KEY_RDS_PI, INT_KEY_VALUE) .putString(RadioMetadata.METADATA_KEY_ARTIST, "artistTest") + .putBitmap(RadioMetadata.METADATA_KEY_ICON, mBitmapValue) .build(); Set<String> metadataSet = metadata.keySet(); assertWithMessage("Metadata set of non-empty metadata") - .that(metadataSet).containsExactly( + .that(metadataSet).containsExactly(RadioMetadata.METADATA_KEY_ICON, RadioMetadata.METADATA_KEY_RDS_PI, RadioMetadata.METADATA_KEY_ARTIST); } @@ -208,4 +288,46 @@ public final class RadioMetadataTest { .that(key).isEqualTo(RadioMetadata.METADATA_KEY_RDS_PI); } + @Test + public void equals_forMetadataWithSameContents_returnsTrue() { + RadioMetadata metadata = mBuilder + .putInt(RadioMetadata.METADATA_KEY_RDS_PI, INT_KEY_VALUE) + .putString(RadioMetadata.METADATA_KEY_ARTIST, "artistTest") + .build(); + RadioMetadata.Builder copyBuilder = new RadioMetadata.Builder(metadata); + RadioMetadata metadataCopied = copyBuilder.build(); + + assertWithMessage("Metadata with the same contents") + .that(metadataCopied).isEqualTo(metadata); + } + + @Test + public void describeContents_forMetadata() { + RadioMetadata metadata = mBuilder.build(); + + assertWithMessage("Metadata contents").that(metadata.describeContents()).isEqualTo(0); + } + + @Test + public void newArray_forRadioMetadataCreator() { + RadioMetadata[] metadataArray = RadioMetadata.CREATOR.newArray(CREATOR_ARRAY_SIZE); + + assertWithMessage("Radio metadata array").that(metadataArray).hasLength(CREATOR_ARRAY_SIZE); + } + + @Test + public void writeToParcel_forRadioMetadata() { + RadioMetadata metadataExpected = mBuilder + .putInt(RadioMetadata.METADATA_KEY_RDS_PI, INT_KEY_VALUE) + .putString(RadioMetadata.METADATA_KEY_ARTIST, "artistTest") + .build(); + Parcel parcel = Parcel.obtain(); + + metadataExpected.writeToParcel(parcel, /* flags= */ 0); + parcel.setDataPosition(0); + + RadioMetadata metadataFromParcel = RadioMetadata.CREATOR.createFromParcel(parcel); + assertWithMessage("Radio metadata created from parcel") + .that(metadataFromParcel).isEqualTo(metadataExpected); + } } diff --git a/core/tests/coretests/src/android/view/accessibility/AccessibilityManagerTest.java b/core/tests/coretests/src/android/view/accessibility/AccessibilityManagerTest.java index bb1a3b182f91..ee1e10f9009e 100644 --- a/core/tests/coretests/src/android/view/accessibility/AccessibilityManagerTest.java +++ b/core/tests/coretests/src/android/view/accessibility/AccessibilityManagerTest.java @@ -27,6 +27,7 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.accessibilityservice.AccessibilityServiceInfo; +import android.accessibilityservice.IAccessibilityServiceClient; import android.app.Instrumentation; import android.app.PendingIntent; import android.app.RemoteAction; @@ -34,6 +35,7 @@ import android.content.Intent; import android.graphics.drawable.Icon; import android.os.UserHandle; +import androidx.annotation.NonNull; import androidx.test.InstrumentationRegistry; import androidx.test.runner.AndroidJUnit4; @@ -51,6 +53,7 @@ import org.mockito.MockitoAnnotations; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.Executors; /** * Tests for the AccessibilityManager by mocking the backing service. @@ -70,6 +73,7 @@ public class AccessibilityManagerTest { LABEL, DESCRIPTION, TEST_PENDING_INTENT); + private static final int DISPLAY_ID = 22; @Mock private IAccessibilityManager mMockService; private MessageCapturingHandler mHandler; @@ -224,4 +228,45 @@ public class AccessibilityManagerTest { assertEquals(mFocusColorDefaultValue, manager.getAccessibilityFocusColor()); } + + @Test + public void testRegisterAccessibilityProxy() throws Exception { + // Accessibility does not need to be enabled for a proxy to be registered. + AccessibilityManager manager = + new AccessibilityManager(mInstrumentation.getContext(), mHandler, mMockService, + UserHandle.USER_CURRENT, true); + + + ArrayList<AccessibilityServiceInfo> infos = new ArrayList<>(); + infos.add(new AccessibilityServiceInfo()); + AccessibilityDisplayProxy proxy = new MyAccessibilityProxy(DISPLAY_ID, infos); + manager.registerDisplayProxy(proxy); + // Cannot access proxy.mServiceClient directly due to visibility. + verify(mMockService).registerProxyForDisplay(any(IAccessibilityServiceClient.class), + any(Integer.class)); + } + + @Test + public void testUnregisterAccessibilityProxy() throws Exception { + // Accessibility does not need to be enabled for a proxy to be registered. + final AccessibilityManager manager = + new AccessibilityManager(mInstrumentation.getContext(), mHandler, mMockService, + UserHandle.USER_CURRENT, true); + + final ArrayList<AccessibilityServiceInfo> infos = new ArrayList<>(); + infos.add(new AccessibilityServiceInfo()); + + final AccessibilityDisplayProxy proxy = new MyAccessibilityProxy(DISPLAY_ID, infos); + manager.registerDisplayProxy(proxy); + manager.unregisterDisplayProxy(proxy); + verify(mMockService).unregisterProxyForDisplay(proxy.getDisplayId()); + } + + private class MyAccessibilityProxy extends AccessibilityDisplayProxy { + // TODO(241429275): Will override A11yProxy methods in the future. + MyAccessibilityProxy(int displayId, + @NonNull List<AccessibilityServiceInfo> serviceInfos) { + super(displayId, Executors.newSingleThreadExecutor(), serviceInfos); + } + } } diff --git a/libs/WindowManager/Shell/tests/flicker/AndroidTest.xml b/libs/WindowManager/Shell/tests/flicker/AndroidTest.xml index d8ea0a52e651..2d6e8f54b6b6 100644 --- a/libs/WindowManager/Shell/tests/flicker/AndroidTest.xml +++ b/libs/WindowManager/Shell/tests/flicker/AndroidTest.xml @@ -13,8 +13,6 @@ <option name="run-command" value="cmd window tracing level all" /> <!-- set WM tracing to frame (avoid incomplete states) --> <option name="run-command" value="cmd window tracing frame" /> - <!-- set Layer tracing buffer size to 50mb --> - <option name="run-command" value="su root service call SurfaceFlinger 1029 i32 51200" /> <!-- ensure lock screen mode is swipe --> <option name="run-command" value="locksettings set-disabled false" /> <!-- restart launcher to activate TAPL --> diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/CommonConstants.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/CommonConstants.kt index 79978929cf3e..651d9356d9ba 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/CommonConstants.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/CommonConstants.kt @@ -21,6 +21,7 @@ package com.android.wm.shell.flicker import com.android.server.wm.traces.common.ComponentNameMatcher const val SYSTEM_UI_PACKAGE_NAME = "com.android.systemui" +const val LAUNCHER_UI_PACKAGE_NAME = "com.google.android.apps.nexuslauncher" val APP_PAIR_SPLIT_DIVIDER_COMPONENT = ComponentNameMatcher("", "AppPairSplitDivider#") val DOCKED_STACK_DIVIDER_COMPONENT = ComponentNameMatcher("", "DockedStackDivider#") val SPLIT_SCREEN_DIVIDER_COMPONENT = ComponentNameMatcher("", "StageCoordinatorSplitDivider#") diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/CopyContentInSplit.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/CopyContentInSplit.kt index 9e765752ea9e..2bce8e45c553 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/CopyContentInSplit.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/CopyContentInSplit.kt @@ -53,7 +53,7 @@ class CopyContentInSplit(testSpec: FlickerTestParameter) : SplitScreenBase(testS override val transition: FlickerBuilder.() -> Unit get() = { super.transition(this) - setup { SplitScreenUtils.enterSplit(wmHelper, tapl, primaryApp, textEditApp) } + setup { SplitScreenUtils.enterSplit(wmHelper, tapl, device, primaryApp, textEditApp) } transitions { SplitScreenUtils.copyContentInSplit( instrumentation, diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/DismissSplitScreenByDivider.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/DismissSplitScreenByDivider.kt index 45eae2e2fe40..475749834711 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/DismissSplitScreenByDivider.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/DismissSplitScreenByDivider.kt @@ -55,7 +55,7 @@ class DismissSplitScreenByDivider (testSpec: FlickerTestParameter) : SplitScreen get() = { super.transition(this) setup { - SplitScreenUtils.enterSplit(wmHelper, tapl, primaryApp, secondaryApp) + SplitScreenUtils.enterSplit(wmHelper, tapl, device, primaryApp, secondaryApp) } transitions { if (tapl.isTablet) { diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/DismissSplitScreenByGoHome.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/DismissSplitScreenByGoHome.kt index 6cfbb4789dc1..1d61955bc0a8 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/DismissSplitScreenByGoHome.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/DismissSplitScreenByGoHome.kt @@ -52,7 +52,7 @@ class DismissSplitScreenByGoHome( get() = { super.transition(this) setup { - SplitScreenUtils.enterSplit(wmHelper, tapl, primaryApp, secondaryApp) + SplitScreenUtils.enterSplit(wmHelper, tapl, device, primaryApp, secondaryApp) } transitions { tapl.goHome() diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/DragDividerToResize.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/DragDividerToResize.kt index a80c88aad3d9..8d771fe3a1ff 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/DragDividerToResize.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/DragDividerToResize.kt @@ -56,7 +56,7 @@ class DragDividerToResize(testSpec: FlickerTestParameter) : SplitScreenBase(test get() = { super.transition(this) setup { - SplitScreenUtils.enterSplit(wmHelper, tapl, primaryApp, secondaryApp) + SplitScreenUtils.enterSplit(wmHelper, tapl, device, primaryApp, secondaryApp) } transitions { SplitScreenUtils.dragDividerToResizeAndWait(device, wmHelper) diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/EnterSplitScreenFromOverview.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/EnterSplitScreenFromOverview.kt index 936afa9801b7..fb7b8b7926e3 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/EnterSplitScreenFromOverview.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/EnterSplitScreenFromOverview.kt @@ -34,7 +34,6 @@ import com.android.wm.shell.flicker.splitAppLayerBoundsIsVisibleAtEnd import com.android.wm.shell.flicker.splitScreenDividerBecomesVisible import com.android.wm.shell.flicker.splitScreenEntered import org.junit.Assume -import org.junit.Before import org.junit.FixMethodOrder import org.junit.Test import org.junit.runner.RunWith @@ -55,7 +54,6 @@ class EnterSplitScreenFromOverview(testSpec: FlickerTestParameter) : SplitScreen get() = { super.transition(this) setup { - tapl.workspace.switchToOverview().dismissAllTasks() primaryApp.launchViaIntent(wmHelper) secondaryApp.launchViaIntent(wmHelper) tapl.goHome() @@ -65,7 +63,7 @@ class EnterSplitScreenFromOverview(testSpec: FlickerTestParameter) : SplitScreen .waitForAndVerify() } transitions { - SplitScreenUtils.splitFromOverview(tapl) + SplitScreenUtils.splitFromOverview(tapl, device) SplitScreenUtils.waitForSplitComplete(wmHelper, primaryApp, secondaryApp) } } diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/SplitScreenBase.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/SplitScreenBase.kt index e6d6379e750c..c8413337a1e6 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/SplitScreenBase.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/SplitScreenBase.kt @@ -34,6 +34,7 @@ abstract class SplitScreenBase(testSpec: FlickerTestParameter) : BaseTest(testSp tapl.setEnableRotation(true) setRotation(testSpec.startRotation) tapl.setExpectedRotation(testSpec.startRotation) + tapl.workspace.switchToOverview().dismissAllTasks() } teardown { primaryApp.exit(wmHelper) diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/SplitScreenUtils.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/SplitScreenUtils.kt index 6453ed869681..ead451f07653 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/SplitScreenUtils.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/SplitScreenUtils.kt @@ -25,6 +25,7 @@ import android.view.ViewConfiguration import androidx.test.uiautomator.By import androidx.test.uiautomator.BySelector import androidx.test.uiautomator.UiDevice +import androidx.test.uiautomator.UiObject2 import androidx.test.uiautomator.Until import com.android.launcher3.tapl.LauncherInstrumentation import com.android.server.wm.flicker.helpers.ImeAppHelper @@ -38,13 +39,16 @@ import com.android.server.wm.traces.common.IComponentMatcher import com.android.server.wm.traces.common.IComponentNameMatcher import com.android.server.wm.traces.parser.toFlickerComponent import com.android.server.wm.traces.parser.windowmanager.WindowManagerStateHelper +import com.android.wm.shell.flicker.LAUNCHER_UI_PACKAGE_NAME import com.android.wm.shell.flicker.SYSTEM_UI_PACKAGE_NAME +import java.util.Collections internal object SplitScreenUtils { private const val TIMEOUT_MS = 3_000L private const val DRAG_DURATION_MS = 1_000L private const val NOTIFICATION_SCROLLER = "notification_stack_scroller" private const val DIVIDER_BAR = "docked_divider_handle" + private const val OVERVIEW_SNAPSHOT = "snapshot" private const val GESTURE_STEP_MS = 16L private const val LONG_PRESS_TIME_MS = 100L private val SPLIT_DECOR_MANAGER = ComponentNameMatcher("", "SplitDecorManager#") @@ -55,6 +59,8 @@ internal object SplitScreenUtils { get() = By.text("Flicker Test Notification") private val dividerBarSelector: BySelector get() = By.res(SYSTEM_UI_PACKAGE_NAME, DIVIDER_BAR) + private val overviewSnapshotSelector: BySelector + get() = By.res(LAUNCHER_UI_PACKAGE_NAME, OVERVIEW_SNAPSHOT) fun getPrimary(instrumentation: Instrumentation): StandardAppHelper = SimpleAppHelper( @@ -94,24 +100,39 @@ internal object SplitScreenUtils { fun enterSplit( wmHelper: WindowManagerStateHelper, tapl: LauncherInstrumentation, + device: UiDevice, primaryApp: StandardAppHelper, secondaryApp: StandardAppHelper ) { - tapl.workspace.switchToOverview().dismissAllTasks() primaryApp.launchViaIntent(wmHelper) secondaryApp.launchViaIntent(wmHelper) tapl.goHome() wmHelper.StateSyncBuilder().withHomeActivityVisible().waitForAndVerify() - splitFromOverview(tapl) + splitFromOverview(tapl, device) waitForSplitComplete(wmHelper, primaryApp, secondaryApp) } - fun splitFromOverview(tapl: LauncherInstrumentation) { + fun splitFromOverview(tapl: LauncherInstrumentation, device: UiDevice) { // Note: The initial split position in landscape is different between tablet and phone. // In landscape, tablet will let the first app split to right side, and phone will // split to left side. if (tapl.isTablet) { - tapl.workspace.switchToOverview().overviewActions.clickSplit().currentTask.open() + // TAPL's currentTask on tablet is sometimes not what we expected if the overview + // contains more than 3 task views. We need to use uiautomator directly to find the + // second task to split. + tapl.workspace.switchToOverview().overviewActions.clickSplit() + val snapshots = device.wait(Until.findObjects(overviewSnapshotSelector), TIMEOUT_MS) + if (snapshots == null || snapshots.size < 1) { + error("Fail to find a overview snapshot to split.") + } + + // Find the second task in the upper right corner in split select mode by sorting + // 'left' in descending order and 'top' in ascending order. + Collections.sort(snapshots, { t1: UiObject2, t2: UiObject2 -> + t2.getVisibleBounds().left - t1.getVisibleBounds().left}) + Collections.sort(snapshots, { t1: UiObject2, t2: UiObject2 -> + t1.getVisibleBounds().top - t2.getVisibleBounds().top}) + snapshots[0].click() } else { tapl.workspace .switchToOverview() diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/SwitchAppByDoubleTapDivider.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/SwitchAppByDoubleTapDivider.kt index ad7a531b589d..f7610c48a0f8 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/SwitchAppByDoubleTapDivider.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/SwitchAppByDoubleTapDivider.kt @@ -56,7 +56,7 @@ class SwitchAppByDoubleTapDivider(testSpec: FlickerTestParameter) : SplitScreenB get() = { super.transition(this) setup { - SplitScreenUtils.enterSplit(wmHelper, tapl, primaryApp, secondaryApp) + SplitScreenUtils.enterSplit(wmHelper, tapl, device, primaryApp, secondaryApp) } transitions { SplitScreenUtils.doubleTapDividerToSwitch(device) diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/SwitchBackToSplitFromAnotherApp.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/SwitchBackToSplitFromAnotherApp.kt index 553840cf0e47..993dba28bbc4 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/SwitchBackToSplitFromAnotherApp.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/SwitchBackToSplitFromAnotherApp.kt @@ -52,7 +52,7 @@ class SwitchBackToSplitFromAnotherApp(testSpec: FlickerTestParameter) : SplitScr get() = { super.transition(this) setup { - SplitScreenUtils.enterSplit(wmHelper, tapl, primaryApp, secondaryApp) + SplitScreenUtils.enterSplit(wmHelper, tapl, device, primaryApp, secondaryApp) thirdApp.launchViaIntent(wmHelper) wmHelper.StateSyncBuilder().withWindowSurfaceAppeared(thirdApp).waitForAndVerify() diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/SwitchBackToSplitFromHome.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/SwitchBackToSplitFromHome.kt index 1f117d0cbd94..2a552cdd67e8 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/SwitchBackToSplitFromHome.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/SwitchBackToSplitFromHome.kt @@ -51,7 +51,7 @@ class SwitchBackToSplitFromHome(testSpec: FlickerTestParameter) : SplitScreenBas get() = { super.transition(this) setup { - SplitScreenUtils.enterSplit(wmHelper, tapl, primaryApp, secondaryApp) + SplitScreenUtils.enterSplit(wmHelper, tapl, device, primaryApp, secondaryApp) tapl.goHome() wmHelper.StateSyncBuilder().withHomeActivityVisible().waitForAndVerify() diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/SwitchBackToSplitFromRecent.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/SwitchBackToSplitFromRecent.kt index d7b3ec2256c1..7f81baef315b 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/SwitchBackToSplitFromRecent.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/SwitchBackToSplitFromRecent.kt @@ -51,7 +51,7 @@ class SwitchBackToSplitFromRecent(testSpec: FlickerTestParameter) : SplitScreenB get() = { super.transition(this) setup { - SplitScreenUtils.enterSplit(wmHelper, tapl, primaryApp, secondaryApp) + SplitScreenUtils.enterSplit(wmHelper, tapl, device, primaryApp, secondaryApp) tapl.goHome() wmHelper.StateSyncBuilder().withHomeActivityVisible().waitForAndVerify() diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/SwitchBetweenSplitPairs.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/SwitchBetweenSplitPairs.kt new file mode 100644 index 000000000000..d84954dcdd09 --- /dev/null +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/SwitchBetweenSplitPairs.kt @@ -0,0 +1,248 @@ +/* + * Copyright (C) 2022 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.wm.shell.flicker.splitscreen + +import android.platform.test.annotations.FlakyTest +import android.platform.test.annotations.Postsubmit +import android.platform.test.annotations.Presubmit +import androidx.test.filters.RequiresDevice +import com.android.server.wm.flicker.FlickerParametersRunnerFactory +import com.android.server.wm.flicker.FlickerTestParameter +import com.android.server.wm.flicker.FlickerTestParameterFactory +import com.android.server.wm.flicker.dsl.FlickerBuilder +import com.android.wm.shell.flicker.SPLIT_SCREEN_DIVIDER_COMPONENT +import com.android.wm.shell.flicker.appWindowBecomesInvisible +import com.android.wm.shell.flicker.appWindowBecomesVisible +import com.android.wm.shell.flicker.appWindowIsInvisibleAtEnd +import com.android.wm.shell.flicker.appWindowIsVisibleAtStart +import com.android.wm.shell.flicker.appWindowIsVisibleAtEnd +import com.android.wm.shell.flicker.layerBecomesInvisible +import com.android.wm.shell.flicker.layerBecomesVisible +import com.android.wm.shell.flicker.splitAppLayerBoundsIsVisibleAtEnd +import com.android.wm.shell.flicker.splitAppLayerBoundsSnapToDivider +import com.android.wm.shell.flicker.splitScreenDividerIsVisibleAtStart +import com.android.wm.shell.flicker.splitScreenDividerIsVisibleAtEnd +import org.junit.FixMethodOrder +import org.junit.Test +import org.junit.runner.RunWith +import org.junit.runners.MethodSorters +import org.junit.runners.Parameterized + +/** + * Test quick switch between two split pairs. + * + * To run this test: `atest WMShellFlickerTests:SwitchBetweenSplitPairs` + */ +@RequiresDevice +@RunWith(Parameterized::class) +@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class) +@FixMethodOrder(MethodSorters.NAME_ASCENDING) +class SwitchBetweenSplitPairs(testSpec: FlickerTestParameter) : SplitScreenBase(testSpec) { + private val thirdApp = SplitScreenUtils.getIme(instrumentation) + private val fourthApp = SplitScreenUtils.getSendNotification(instrumentation) + + override val transition: FlickerBuilder.() -> Unit + get() = { + super.transition(this) + setup { + SplitScreenUtils.enterSplit(wmHelper, tapl, device, primaryApp, secondaryApp) + SplitScreenUtils.enterSplit(wmHelper, tapl, device, thirdApp, fourthApp) + SplitScreenUtils.waitForSplitComplete(wmHelper, thirdApp, fourthApp) + } + transitions { + tapl.launchedAppState.quickSwitchToPreviousApp() + SplitScreenUtils.waitForSplitComplete(wmHelper, primaryApp, secondaryApp) + } + teardown { + thirdApp.exit(wmHelper) + fourthApp.exit(wmHelper) + } + } + + @Postsubmit + @Test + fun cujCompleted() { + testSpec.appWindowIsVisibleAtStart(thirdApp) + testSpec.appWindowIsVisibleAtStart(fourthApp) + testSpec.splitScreenDividerIsVisibleAtStart() + + testSpec.appWindowIsVisibleAtEnd(primaryApp) + testSpec.appWindowIsVisibleAtEnd(secondaryApp) + testSpec.appWindowIsInvisibleAtEnd(thirdApp) + testSpec.appWindowIsInvisibleAtEnd(fourthApp) + testSpec.splitScreenDividerIsVisibleAtEnd() + } + + @Postsubmit + @Test + fun splitScreenDividerInvisibleAtMiddle() = + testSpec.assertLayers { + this.isVisible(SPLIT_SCREEN_DIVIDER_COMPONENT) + .then() + .isInvisible(SPLIT_SCREEN_DIVIDER_COMPONENT) + .then() + .isVisible(SPLIT_SCREEN_DIVIDER_COMPONENT) + } + + @FlakyTest(bugId = 247095572) + @Test + fun primaryAppLayerBecomesVisible() = testSpec.layerBecomesVisible(primaryApp) + + @FlakyTest(bugId = 247095572) + @Test + fun secondaryAppLayerBecomesVisible() = testSpec.layerBecomesVisible(secondaryApp) + + @FlakyTest(bugId = 247095572) + @Test + fun thirdAppLayerBecomesInvisible() = testSpec.layerBecomesInvisible(thirdApp) + + @FlakyTest(bugId = 247095572) + @Test + fun fourthAppLayerBecomesInvisible() = testSpec.layerBecomesInvisible(fourthApp) + + @Postsubmit + @Test + fun primaryAppBoundsIsVisibleAtEnd() = + testSpec.splitAppLayerBoundsIsVisibleAtEnd( + primaryApp, + landscapePosLeft = tapl.isTablet, + portraitPosTop = false + ) + + @Postsubmit + @Test + fun secondaryAppBoundsIsVisibleAtEnd() = + testSpec.splitAppLayerBoundsIsVisibleAtEnd( + secondaryApp, + landscapePosLeft = !tapl.isTablet, + portraitPosTop = true + ) + + @Postsubmit + @Test + fun thirdAppBoundsIsVisibleAtBegin() = + testSpec.assertLayersStart { + this.splitAppLayerBoundsSnapToDivider( + thirdApp, + landscapePosLeft = tapl.isTablet, + portraitPosTop = false, + testSpec.startRotation + ) + } + + @Postsubmit + @Test + fun fourthAppBoundsIsVisibleAtBegin() = + testSpec.assertLayersStart { + this.splitAppLayerBoundsSnapToDivider( + fourthApp, + landscapePosLeft = !tapl.isTablet, + portraitPosTop = true, + testSpec.startRotation + ) + } + + @Postsubmit + @Test + fun primaryAppWindowBecomesVisible() = testSpec.appWindowBecomesVisible(primaryApp) + + @Postsubmit + @Test + fun secondaryAppWindowBecomesVisible() = testSpec.appWindowBecomesVisible(secondaryApp) + + @Postsubmit + @Test + fun thirdAppWindowBecomesVisible() = testSpec.appWindowBecomesInvisible(thirdApp) + + @Postsubmit + @Test + fun fourthAppWindowBecomesVisible() = testSpec.appWindowBecomesInvisible(fourthApp) + + /** {@inheritDoc} */ + @FlakyTest(bugId = 251268711) + @Test + override fun entireScreenCovered() = + super.entireScreenCovered() + + /** {@inheritDoc} */ + @Presubmit + @Test + override fun navBarLayerIsVisibleAtStartAndEnd() = + super.navBarLayerIsVisibleAtStartAndEnd() + + /** {@inheritDoc} */ + @FlakyTest(bugId = 206753786) + @Test + override fun navBarLayerPositionAtStartAndEnd() = + super.navBarLayerPositionAtStartAndEnd() + + /** {@inheritDoc} */ + @Presubmit + @Test + override fun navBarWindowIsAlwaysVisible() = + super.navBarWindowIsAlwaysVisible() + + /** {@inheritDoc} */ + @Presubmit + @Test + override fun statusBarLayerIsVisibleAtStartAndEnd() = + super.statusBarLayerIsVisibleAtStartAndEnd() + + /** {@inheritDoc} */ + @Presubmit + @Test + override fun statusBarLayerPositionAtStartAndEnd() = + super.statusBarLayerPositionAtStartAndEnd() + + /** {@inheritDoc} */ + @Presubmit + @Test + override fun statusBarWindowIsAlwaysVisible() = + super.statusBarWindowIsAlwaysVisible() + + /** {@inheritDoc} */ + @Presubmit + @Test + override fun taskBarLayerIsVisibleAtStartAndEnd() = + super.taskBarLayerIsVisibleAtStartAndEnd() + + /** {@inheritDoc} */ + @Presubmit + @Test + override fun taskBarWindowIsAlwaysVisible() = + super.taskBarWindowIsAlwaysVisible() + + /** {@inheritDoc} */ + @FlakyTest + @Test + override fun visibleLayersShownMoreThanOneConsecutiveEntry() = + super.visibleLayersShownMoreThanOneConsecutiveEntry() + + /** {@inheritDoc} */ + @Presubmit + @Test + override fun visibleWindowsShownMoreThanOneConsecutiveEntry() = + super.visibleWindowsShownMoreThanOneConsecutiveEntry() + + companion object { + @Parameterized.Parameters(name = "{0}") + @JvmStatic + fun getParams(): List<FlickerTestParameter> { + return FlickerTestParameterFactory.getInstance().getConfigNonRotationTests() + } + } +} diff --git a/media/java/android/media/AudioPlaybackConfiguration.java b/media/java/android/media/AudioPlaybackConfiguration.java index 819358b49754..60e3a3068e9d 100644 --- a/media/java/android/media/AudioPlaybackConfiguration.java +++ b/media/java/android/media/AudioPlaybackConfiguration.java @@ -569,6 +569,17 @@ public final class AudioPlaybackConfiguration implements Parcelable { } } + private boolean isMuteAffectingActiveState() { + if (mMutedState == PLAYER_MUTE_INVALID) { + // mute state is not set, therefore it will not affect the active state + return false; + } + + return (mMutedState & PLAYER_MUTE_CLIENT_VOLUME) != 0 + || (mMutedState & PLAYER_MUTE_VOLUME_SHAPER) != 0 + || (mMutedState & PLAYER_MUTE_PLAYBACK_RESTRICTED) != 0; + } + /** * @hide * Returns true if the player is considered "active", i.e. actively playing with unmuted @@ -580,8 +591,7 @@ public final class AudioPlaybackConfiguration implements Parcelable { public boolean isActive() { switch (mPlayerState) { case PLAYER_STATE_STARTED: - return mMutedState == 0 - || mMutedState == PLAYER_MUTE_INVALID; // only send true if not muted + return !isMuteAffectingActiveState(); case PLAYER_STATE_UNKNOWN: case PLAYER_STATE_RELEASED: case PLAYER_STATE_IDLE: diff --git a/packages/CarrierDefaultApp/Android.bp b/packages/CarrierDefaultApp/Android.bp index 6990ad0fbd7d..62ffe3898667 100644 --- a/packages/CarrierDefaultApp/Android.bp +++ b/packages/CarrierDefaultApp/Android.bp @@ -13,4 +13,9 @@ android_app { libs: ["SliceStore"], platform_apis: true, certificate: "platform", + optimize: { + proguard_flags_files: [ + "proguard.flags", + ], + }, } diff --git a/packages/CarrierDefaultApp/assets/slice_store_test.html b/packages/CarrierDefaultApp/assets/slice_store_test.html new file mode 100644 index 000000000000..7ddbd2d5f245 --- /dev/null +++ b/packages/CarrierDefaultApp/assets/slice_store_test.html @@ -0,0 +1,78 @@ +<!-- + ~ Copyright (C) 2022 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. + --> + +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="UTF-8"> + <meta name="description" content=" + This is a HTML page that calls and verifies responses from the @JavascriptInterface functions of + SliceStoreWebInterface. Test SliceStore APIs using ADB shell commands and the APIs below: + + FROM TERMINAL: + Allow device to override carrier configs: + $ adb root + Set PREMIUM_CAPABILITY_PRIORITIZE_LATENCY enabled: + $ adb shell cmd phone cc set-value -p supported_premium_capabilities_int_array 34 + Set the carrier purchase URL to this test HTML file: + $ adb shell cmd phone cc set-value -p premium_capability_purchase_url_string \ + file:///android_asset/slice_store_test.html + OPTIONAL: Allow premium capability purchase on LTE: + $ adb shell cmd phone cc set-value -p premium_capability_supported_on_lte_bool true + OPTIONAL: Override ServiceState to fake a NR SA connection: + $ adb shell am broadcast -a com.android.internal.telephony.TestServiceState --ei data_rat 20 + + FROM TEST ACTIVITY: + TelephonyManager tm = getApplicationContext().getSystemService(TelephonyManager.class) + tm.isPremiumCapabilityAvailable(TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY); + LinkedBlockingQueue<Integer> purchaseRequests = new LinkedBlockingQueue<>(); + tm.purchasePremiumCapability(TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, + this.getMainExecutor(), request::offer); + + When the test application starts, this HTML will be loaded into the WebView along with the + associated JavaScript functions in file:///android_asset/slice_store_test.js. + Click on the buttons in the HTML to call the corresponding @JavascriptInterface APIs. + + RESET DEVICE STATE: + Clear carrier configurations that were set: + $ adb shell cmd phone cc clear-values + Clear ServiceState override that was set: + $ adb shell am broadcast -a com.android.internal.telephony.TestServiceState --es action reset + "> + <title>Test SliceStoreActivity</title> + <script type="text/javascript" src="slice_store_test.js"></script> +</head> +<body> + <h1>Test SliceStoreActivity</h1> + <h2>Get requested premium capability</h2> + <button type="button" onclick="testGetRequestedCapability()"> + Get requested premium capability + </button> + <p id="requested_capability"></p> + + <h2>Notify purchase successful</h2> + <button type="button" onclick="testNotifyPurchaseSuccessful(60000)"> + Notify purchase successful for 1 minute + </button> + <p id="purchase_successful"></p> + + <h2>Notify purchase failed</h2> + <button type="button" onclick="testNotifyPurchaseFailed()"> + Notify purchase failed + </button> + <p id="purchase_failed"></p> +</body> +</html> diff --git a/packages/CarrierDefaultApp/assets/slice_store_test.js b/packages/CarrierDefaultApp/assets/slice_store_test.js new file mode 100644 index 000000000000..f12a6daf8de3 --- /dev/null +++ b/packages/CarrierDefaultApp/assets/slice_store_test.js @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2022 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. + */ + +function testGetRequestedCapability() { + let capability = SliceStoreWebInterface.getRequestedCapability(); + document.getElementById("requested_capability").innerHTML = + "Premium capability requested: " + capability; +} + +function testNotifyPurchaseSuccessful(duration_ms_long = 0) { + SliceStoreWebInterface.notifyPurchaseSuccessful(duration); + document.getElementById("purchase_successful").innerHTML = + "Notified purchase success for duration: " + duration; +} + +function testNotifyPurchaseFailed() { + SliceStoreWebInterface.notifyPurchaseFailed(); + document.getElementById("purchase_failed").innerHTML = + "Notified purchase failed."; +} diff --git a/packages/CarrierDefaultApp/proguard.flags b/packages/CarrierDefaultApp/proguard.flags new file mode 100644 index 000000000000..64fec2ccbef2 --- /dev/null +++ b/packages/CarrierDefaultApp/proguard.flags @@ -0,0 +1,4 @@ +# Keep classes and methods that have the @JavascriptInterface annotation +-keepclassmembers class * { + @android.webkit.JavascriptInterface <methods>; +} diff --git a/packages/CarrierDefaultApp/src/com/android/carrierdefaultapp/SliceStoreActivity.java b/packages/CarrierDefaultApp/src/com/android/carrierdefaultapp/SliceStoreActivity.java index 602e31cbd130..348e3895690c 100644 --- a/packages/CarrierDefaultApp/src/com/android/carrierdefaultapp/SliceStoreActivity.java +++ b/packages/CarrierDefaultApp/src/com/android/carrierdefaultapp/SliceStoreActivity.java @@ -20,47 +20,63 @@ import android.annotation.NonNull; import android.annotation.Nullable; import android.app.Activity; import android.app.NotificationManager; +import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.telephony.CarrierConfigManager; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; import android.util.Log; +import android.view.KeyEvent; import android.webkit.WebView; import com.android.phone.slicestore.SliceStore; import java.net.MalformedURLException; import java.net.URL; +import java.util.concurrent.TimeUnit; /** * Activity that launches when the user clicks on the network boost notification. + * This will open a {@link WebView} for the carrier website to allow the user to complete the + * premium capability purchase. + * The carrier website can get the requested premium capability using the JavaScript interface + * method {@code SliceStoreWebInterface.getRequestedCapability()}. + * If the purchase is successful, the carrier website shall notify SliceStore using the JavaScript + * interface method {@code SliceStoreWebInterface.notifyPurchaseSuccessful(duration)}, where + * {@code duration} is the duration of the network boost. + * If the purchase was not successful, the carrier website shall notify SliceStore using the + * JavaScript interface method {@code SliceStoreWebInterface.notifyPurchaseFailed()}. + * If either of these notification methods are not called, the purchase cannot be completed + * successfully and the purchase request will eventually time out. */ public class SliceStoreActivity extends Activity { private static final String TAG = "SliceStoreActivity"; - private URL mUrl; - private WebView mWebView; - private int mPhoneId; + private @NonNull WebView mWebView; + private @NonNull Context mApplicationContext; private int mSubId; - private @TelephonyManager.PremiumCapability int mCapability; + @TelephonyManager.PremiumCapability protected int mCapability; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Intent intent = getIntent(); - mPhoneId = intent.getIntExtra(SliceStore.EXTRA_PHONE_ID, - SubscriptionManager.INVALID_PHONE_INDEX); mSubId = intent.getIntExtra(SliceStore.EXTRA_SUB_ID, SubscriptionManager.INVALID_SUBSCRIPTION_ID); mCapability = intent.getIntExtra(SliceStore.EXTRA_PREMIUM_CAPABILITY, SliceStore.PREMIUM_CAPABILITY_INVALID); - mUrl = getUrl(); - logd("onCreate: mPhoneId=" + mPhoneId + ", mSubId=" + mSubId + ", mCapability=" + mApplicationContext = getApplicationContext(); + URL url = getUrl(); + logd("onCreate: subId=" + mSubId + ", capability=" + TelephonyManager.convertPremiumCapabilityToString(mCapability) - + ", mUrl=" + mUrl); - getApplicationContext().getSystemService(NotificationManager.class) + + ", url=" + url); + + // Cancel network boost notification + mApplicationContext.getSystemService(NotificationManager.class) .cancel(SliceStoreBroadcastReceiver.NETWORK_BOOST_NOTIFICATION_TAG, mCapability); + + // Verify intent and values are valid if (!SliceStoreBroadcastReceiver.isIntentValid(intent)) { loge("Not starting SliceStoreActivity with an invalid Intent: " + intent); SliceStoreBroadcastReceiver.sendSliceStoreResponse( @@ -68,10 +84,15 @@ public class SliceStoreActivity extends Activity { finishAndRemoveTask(); return; } - if (mUrl == null) { - loge("Unable to create a URL from carrier configs."); - SliceStoreBroadcastReceiver.sendSliceStoreResponse( - intent, SliceStore.EXTRA_INTENT_CARRIER_ERROR); + if (url == null) { + String error = "Unable to create a URL from carrier configs."; + loge(error); + Intent data = new Intent(); + data.putExtra(SliceStore.EXTRA_FAILURE_CODE, + SliceStore.FAILURE_CODE_CARRIER_URL_UNAVAILABLE); + data.putExtra(SliceStore.EXTRA_FAILURE_REASON, error); + SliceStoreBroadcastReceiver.sendSliceStoreResponseWithData( + mApplicationContext, getIntent(), SliceStore.EXTRA_INTENT_CARRIER_ERROR, data); finishAndRemoveTask(); return; } @@ -83,12 +104,53 @@ public class SliceStoreActivity extends Activity { return; } + // Create a reference to this activity in SliceStoreBroadcastReceiver SliceStoreBroadcastReceiver.updateSliceStoreActivity(mCapability, this); + // Create and configure WebView mWebView = new WebView(this); + // Enable JavaScript for the carrier purchase website to send results back to SliceStore + mWebView.getSettings().setJavaScriptEnabled(true); + mWebView.addJavascriptInterface(new SliceStoreWebInterface(this), "SliceStoreWebInterface"); + + // Display WebView setContentView(mWebView); - mWebView.loadUrl(mUrl.toString()); - // TODO(b/245882601): Get back response from WebView + mWebView.loadUrl(url.toString()); + } + + protected void onPurchaseSuccessful(long duration) { + logd("onPurchaseSuccessful: Carrier website indicated successfully purchased premium " + + "capability " + TelephonyManager.convertPremiumCapabilityToString(mCapability) + + " for " + TimeUnit.MILLISECONDS.toMinutes(duration) + " minutes."); + Intent intent = new Intent(); + intent.putExtra(SliceStore.EXTRA_PURCHASE_DURATION, duration); + SliceStoreBroadcastReceiver.sendSliceStoreResponseWithData( + mApplicationContext, getIntent(), SliceStore.EXTRA_INTENT_SUCCESS, intent); + finishAndRemoveTask(); + } + + protected void onPurchaseFailed(@SliceStore.FailureCode int failureCode, + @Nullable String failureReason) { + logd("onPurchaseFailed: Carrier website indicated purchase failed for premium capability " + + TelephonyManager.convertPremiumCapabilityToString(mCapability) + " with code: " + + SliceStore.convertFailureCodeToString(failureCode) + " and reason: " + + failureReason); + Intent data = new Intent(); + data.putExtra(SliceStore.EXTRA_FAILURE_CODE, failureCode); + data.putExtra(SliceStore.EXTRA_FAILURE_REASON, failureReason); + SliceStoreBroadcastReceiver.sendSliceStoreResponseWithData( + mApplicationContext, getIntent(), SliceStore.EXTRA_INTENT_CARRIER_ERROR, data); + finishAndRemoveTask(); + } + + @Override + public boolean onKeyDown(int keyCode, @NonNull KeyEvent event) { + // Pressing back in the WebView will go to the previous page instead of closing SliceStore. + if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) { + mWebView.goBack(); + return true; + } + return super.onKeyDown(keyCode, event); } @Override @@ -100,8 +162,8 @@ public class SliceStoreActivity extends Activity { super.onDestroy(); } - private @Nullable URL getUrl() { - String url = getApplicationContext().getSystemService(CarrierConfigManager.class) + @Nullable private URL getUrl() { + String url = mApplicationContext.getSystemService(CarrierConfigManager.class) .getConfigForSubId(mSubId).getString( CarrierConfigManager.KEY_PREMIUM_CAPABILITY_PURCHASE_URL_STRING); try { diff --git a/packages/CarrierDefaultApp/src/com/android/carrierdefaultapp/SliceStoreBroadcastReceiver.java b/packages/CarrierDefaultApp/src/com/android/carrierdefaultapp/SliceStoreBroadcastReceiver.java index 7eb851dcdd58..7867ef1c6516 100644 --- a/packages/CarrierDefaultApp/src/com/android/carrierdefaultapp/SliceStoreBroadcastReceiver.java +++ b/packages/CarrierDefaultApp/src/com/android/carrierdefaultapp/SliceStoreBroadcastReceiver.java @@ -26,6 +26,7 @@ import android.content.Context; import android.content.Intent; import android.graphics.drawable.Icon; import android.os.UserHandle; +import android.telephony.AnomalyReporter; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; import android.text.TextUtils; @@ -37,6 +38,7 @@ import com.android.phone.slicestore.SliceStore; import java.lang.ref.WeakReference; import java.util.HashMap; import java.util.Map; +import java.util.UUID; /** * The SliceStoreBroadcastReceiver listens for {@link SliceStore#ACTION_START_SLICE_STORE} from the @@ -47,6 +49,12 @@ import java.util.Map; public class SliceStoreBroadcastReceiver extends BroadcastReceiver{ private static final String TAG = "SliceStoreBroadcastReceiver"; + /** + * UUID to report an anomaly when receiving a PendingIntent from an application or process + * other than the Phone process. + */ + private static final String UUID_BAD_PENDING_INTENT = "c360246e-95dc-4abf-9dc1-929a76cd7e53"; + /** Weak references to {@link SliceStoreActivity} for each capability, if it exists. */ private static final Map<Integer, WeakReference<SliceStoreActivity>> sSliceStoreActivities = new HashMap<>(); @@ -102,6 +110,28 @@ public class SliceStoreBroadcastReceiver extends BroadcastReceiver{ } /** + * Send the PendingIntent containing the corresponding SliceStore response with additional data. + * + * @param context The Context to use to send the PendingIntent. + * @param intent The Intent containing the PendingIntent extra. + * @param extra The extra to get the PendingIntent to send. + * @param data The Intent containing additional data to send with the PendingIntent. + */ + public static void sendSliceStoreResponseWithData(@NonNull Context context, + @NonNull Intent intent, @NonNull String extra, @NonNull Intent data) { + PendingIntent pendingIntent = intent.getParcelableExtra(extra, PendingIntent.class); + if (pendingIntent == null) { + loge("PendingIntent does not exist for extra: " + extra); + return; + } + try { + pendingIntent.send(context, 0 /* unused */, data); + } catch (PendingIntent.CanceledException e) { + loge("Unable to send " + getPendingIntentType(extra) + " intent: " + e); + } + } + + /** * Check whether the Intent is valid and can be used to complete purchases in the SliceStore. * This checks that all necessary extras exist and that the values are valid. * @@ -139,7 +169,8 @@ public class SliceStoreBroadcastReceiver extends BroadcastReceiver{ return isPendingIntentValid(intent, SliceStore.EXTRA_INTENT_CANCELED) && isPendingIntentValid(intent, SliceStore.EXTRA_INTENT_CARRIER_ERROR) && isPendingIntentValid(intent, SliceStore.EXTRA_INTENT_REQUEST_FAILED) - && isPendingIntentValid(intent, SliceStore.EXTRA_INTENT_NOT_DEFAULT_DATA); + && isPendingIntentValid(intent, SliceStore.EXTRA_INTENT_NOT_DEFAULT_DATA) + && isPendingIntentValid(intent, SliceStore.EXTRA_INTENT_SUCCESS); } private static boolean isPendingIntentValid(@NonNull Intent intent, @NonNull String extra) { @@ -148,12 +179,20 @@ public class SliceStoreBroadcastReceiver extends BroadcastReceiver{ if (pendingIntent == null) { loge("isPendingIntentValid: " + intentType + " intent not found."); return false; - } else if (pendingIntent.getCreatorPackage().equals(TelephonyManager.PHONE_PROCESS_NAME)) { - return true; } - loge("isPendingIntentValid: " + intentType + " intent was created by " - + pendingIntent.getCreatorPackage() + " instead of the phone process."); - return false; + String creatorPackage = pendingIntent.getCreatorPackage(); + if (!creatorPackage.equals(TelephonyManager.PHONE_PROCESS_NAME)) { + String logStr = "isPendingIntentValid: " + intentType + " intent was created by " + + creatorPackage + " instead of the phone process."; + loge(logStr); + AnomalyReporter.reportAnomaly(UUID.fromString(UUID_BAD_PENDING_INTENT), logStr); + return false; + } + if (!pendingIntent.isBroadcast()) { + loge("isPendingIntentValid: " + intentType + " intent is not a broadcast."); + return false; + } + return true; } @NonNull private static String getPendingIntentType(@NonNull String extra) { @@ -162,6 +201,7 @@ public class SliceStoreBroadcastReceiver extends BroadcastReceiver{ case SliceStore.EXTRA_INTENT_CARRIER_ERROR: return "carrier error"; case SliceStore.EXTRA_INTENT_REQUEST_FAILED: return "request failed"; case SliceStore.EXTRA_INTENT_NOT_DEFAULT_DATA: return "not default data"; + case SliceStore.EXTRA_INTENT_SUCCESS: return "success"; default: { loge("Unknown pending intent extra: " + extra); return "unknown(" + extra + ")"; @@ -292,7 +332,6 @@ public class SliceStoreBroadcastReceiver extends BroadcastReceiver{ logd("Closing SliceStore WebView since the user did not complete the purchase " + "in time."); sSliceStoreActivities.get(capability).get().finishAndRemoveTask(); - // TODO: Display a toast to indicate timeout for better UX? } } diff --git a/packages/CarrierDefaultApp/src/com/android/carrierdefaultapp/SliceStoreWebInterface.java b/packages/CarrierDefaultApp/src/com/android/carrierdefaultapp/SliceStoreWebInterface.java new file mode 100644 index 000000000000..ab5d0809a1f6 --- /dev/null +++ b/packages/CarrierDefaultApp/src/com/android/carrierdefaultapp/SliceStoreWebInterface.java @@ -0,0 +1,90 @@ +/* + * Copyright (C) 2022 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.carrierdefaultapp; + +import android.annotation.NonNull; +import android.annotation.Nullable; +import android.telephony.TelephonyManager; +import android.webkit.JavascriptInterface; + +import com.android.phone.slicestore.SliceStore; + +/** + * SliceStore web interface class allowing carrier websites to send responses back to SliceStore + * using JavaScript. + */ +public class SliceStoreWebInterface { + @NonNull SliceStoreActivity mActivity; + + public SliceStoreWebInterface(@NonNull SliceStoreActivity activity) { + mActivity = activity; + } + /** + * Interface method allowing the carrier website to get the premium capability + * that was requested to purchase. + * + * This can be called using the JavaScript below: + * <script type="text/javascript"> + * function getRequestedCapability(duration) { + * SliceStoreWebInterface.getRequestedCapability(); + * } + * </script> + */ + @JavascriptInterface + @TelephonyManager.PremiumCapability public int getRequestedCapability() { + return mActivity.mCapability; + } + + /** + * Interface method allowing the carrier website to notify the SliceStore of a successful + * premium capability purchase and the duration for which the premium capability is purchased. + * + * This can be called using the JavaScript below: + * <script type="text/javascript"> + * function notifyPurchaseSuccessful(duration_ms_long = 0) { + * SliceStoreWebInterface.notifyPurchaseSuccessful(duration_ms_long); + * } + * </script> + * + * @param duration The duration for which the premium capability is purchased in milliseconds. + */ + @JavascriptInterface + public void notifyPurchaseSuccessful(long duration) { + mActivity.onPurchaseSuccessful(duration); + } + + /** + * Interface method allowing the carrier website to notify the SliceStore of a failed + * premium capability purchase. + * + * This can be called using the JavaScript below: + * <script type="text/javascript"> + * function notifyPurchaseFailed() { + * SliceStoreWebInterface.notifyPurchaseFailed(); + * } + * </script> + * + * @param failureCode The failure code. + * @param failureReason If the failure code is {@link SliceStore#FAILURE_CODE_UNKNOWN}, + * the human-readable reason for failure. + */ + @JavascriptInterface + public void notifyPurchaseFailed(@SliceStore.FailureCode int failureCode, + @Nullable String failureReason) { + mActivity.onPurchaseFailed(failureCode, failureReason); + } +} diff --git a/packages/SettingsLib/res/values-uz/strings.xml b/packages/SettingsLib/res/values-uz/strings.xml index 1738e011287a..efb5eb974afe 100644 --- a/packages/SettingsLib/res/values-uz/strings.xml +++ b/packages/SettingsLib/res/values-uz/strings.xml @@ -548,7 +548,7 @@ <string name="shared_data_no_blobs_text" msgid="3108114670341737434">"Bu foydalanuvchining umumiy maʼlumotlari topilmadi."</string> <string name="shared_data_query_failure_text" msgid="3489828881998773687">"Umumiy maʼlumotlarni yuklashda xatolik yuz berdi. Qayta urining."</string> <string name="blob_id_text" msgid="8680078988996308061">"Umumiy maʼlumotlar identifikatori: <xliff:g id="BLOB_ID">%d</xliff:g>"</string> - <string name="blob_expires_text" msgid="7882727111491739331">"Amal qilish muddati: <xliff:g id="DATE">%s</xliff:g>"</string> + <string name="blob_expires_text" msgid="7882727111491739331">"Muddati: <xliff:g id="DATE">%s</xliff:g>"</string> <string name="shared_data_delete_failure_text" msgid="3842701391009628947">"Umumiy maʼlumotlarni oʻchirishda xatolik yuz berdi."</string> <string name="shared_data_no_accessors_dialog_text" msgid="8903738462570715315">"Bu umumiy maʼlumotlar yuzasidan kelgan soʻrov topilmadi. Oʻchirib tashlansinmi?"</string> <string name="accessor_info_title" msgid="8289823651512477787">"Umumiy maʼlumotlar bor ilovalar"</string> diff --git a/packages/SystemUI/res-keyguard/layout/keyguard_clock_switch.xml b/packages/SystemUI/res-keyguard/layout/keyguard_clock_switch.xml index d64587dcf362..c29714957318 100644 --- a/packages/SystemUI/res-keyguard/layout/keyguard_clock_switch.xml +++ b/packages/SystemUI/res-keyguard/layout/keyguard_clock_switch.xml @@ -31,7 +31,8 @@ android:layout_height="wrap_content" android:layout_alignParentStart="true" android:layout_alignParentTop="true" - android:paddingStart="@dimen/clock_padding_start" /> + android:paddingStart="@dimen/clock_padding_start" + android:visibility="invisible" /> <FrameLayout android:id="@+id/lockscreen_clock_view_large" android:layout_width="match_parent" diff --git a/packages/SystemUI/res-keyguard/values-af/strings.xml b/packages/SystemUI/res-keyguard/values-af/strings.xml index d5552f6ad44f..1ff549e43360 100644 --- a/packages/SystemUI/res-keyguard/values-af/strings.xml +++ b/packages/SystemUI/res-keyguard/values-af/strings.xml @@ -78,12 +78,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="4720554342633852066">"Patroon word vereis nadat toestel herbegin het"</string> <string name="kg_prompt_reason_restart_pin" msgid="1587671566498057656">"PIN word vereis nadat toestel herbegin het"</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"Wagwoord word vereis nadat toestel herbegin het"</string> - <!-- no translation found for kg_prompt_reason_timeout_pattern (5514969660010197363) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_pin (4227962059353859376) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_password (8810879144143933690) --> - <skip /> + <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Gebruik eerder ’n patroon vir bykomende sekuriteit"</string> + <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Gebruik eerder ’n PIN vir bykomende sekuriteit"</string> + <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Gebruik eerder ’n wagwoord vir bykomende sekuriteit"</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Toestel is deur administrateur gesluit"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Toestel is handmatig gesluit"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Nie herken nie"</string> @@ -93,6 +90,5 @@ <string name="clock_title_default" msgid="6342735240617459864">"Verstek"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"Borrel"</string> <string name="clock_title_analog" msgid="8409262532900918273">"Analoog"</string> - <!-- no translation found for keyguard_unlock_to_continue (7509503484250597743) --> - <skip /> + <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Ontsluit jou toestel om voort te gaan"</string> </resources> diff --git a/packages/SystemUI/res-keyguard/values-am/strings.xml b/packages/SystemUI/res-keyguard/values-am/strings.xml index 533e5a299e4c..f61c8cf64692 100644 --- a/packages/SystemUI/res-keyguard/values-am/strings.xml +++ b/packages/SystemUI/res-keyguard/values-am/strings.xml @@ -78,12 +78,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="4720554342633852066">"መሣሪያ ዳግም ከጀመረ በኋላ ሥርዓተ ጥለት ያስፈልጋል"</string> <string name="kg_prompt_reason_restart_pin" msgid="1587671566498057656">"መሣሪያ ዳግም ከተነሳ በኋላ ፒን ያስፈልጋል"</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"መሣሪያ ዳግም ከጀመረ በኋላ የይለፍ ቃል ያስፈልጋል"</string> - <!-- no translation found for kg_prompt_reason_timeout_pattern (5514969660010197363) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_pin (4227962059353859376) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_password (8810879144143933690) --> - <skip /> + <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"ለተጨማሪ ደህንነት በምትኩ ስርዓተ ጥለት ይጠቀሙ"</string> + <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"ለተጨማሪ ደህንነት በምትኩ ፒን ይጠቀሙ"</string> + <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"ለተጨማሪ ደህንነት በምትኩ የይለፍ ቃል ይጠቀሙ"</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"መሣሪያ በአስተዳዳሪ ተቆልፏል"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"መሣሪያ በተጠቃሚው ራሱ ተቆልፏል"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"አልታወቀም"</string> @@ -93,6 +90,5 @@ <string name="clock_title_default" msgid="6342735240617459864">"ነባሪ"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"አረፋ"</string> <string name="clock_title_analog" msgid="8409262532900918273">"አናሎግ"</string> - <!-- no translation found for keyguard_unlock_to_continue (7509503484250597743) --> - <skip /> + <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"ለመቀጠል መሣሪያዎን ይክፈቱ"</string> </resources> diff --git a/packages/SystemUI/res-keyguard/values-ar/strings.xml b/packages/SystemUI/res-keyguard/values-ar/strings.xml index 81ce7d3c9361..f3256babf1c6 100644 --- a/packages/SystemUI/res-keyguard/values-ar/strings.xml +++ b/packages/SystemUI/res-keyguard/values-ar/strings.xml @@ -78,12 +78,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="4720554342633852066">"يجب رسم النقش بعد إعادة تشغيل الجهاز"</string> <string name="kg_prompt_reason_restart_pin" msgid="1587671566498057656">"يجب إدخال رقم التعريف الشخصي بعد إعادة تشغيل الجهاز"</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"يجب إدخال كلمة المرور بعد إعادة تشغيل الجهاز"</string> - <!-- no translation found for kg_prompt_reason_timeout_pattern (5514969660010197363) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_pin (4227962059353859376) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_password (8810879144143933690) --> - <skip /> + <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"لمزيد من الأمان، استخدِم النقش بدلاً من ذلك."</string> + <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"لمزيد من الأمان، أدخِل رقم التعريف الشخصي بدلاً من ذلك."</string> + <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"لمزيد من الأمان، أدخِل كلمة المرور بدلاً من ذلك."</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"اختار المشرف قفل الجهاز"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"تم حظر الجهاز يدويًا"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"لم يتم التعرّف عليه."</string> @@ -93,6 +90,5 @@ <string name="clock_title_default" msgid="6342735240617459864">"تلقائي"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"فقاعة"</string> <string name="clock_title_analog" msgid="8409262532900918273">"ساعة تقليدية"</string> - <!-- no translation found for keyguard_unlock_to_continue (7509503484250597743) --> - <skip /> + <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"يجب فتح قفل الجهاز للمتابعة"</string> </resources> diff --git a/packages/SystemUI/res-keyguard/values-as/strings.xml b/packages/SystemUI/res-keyguard/values-as/strings.xml index 443f666c0faa..f9dc46fa6d53 100644 --- a/packages/SystemUI/res-keyguard/values-as/strings.xml +++ b/packages/SystemUI/res-keyguard/values-as/strings.xml @@ -78,12 +78,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="4720554342633852066">"ডিভাইচ ৰিষ্টাৰ্ট হোৱাৰ পাছত আৰ্হি দিয়াটো বাধ্যতামূলক"</string> <string name="kg_prompt_reason_restart_pin" msgid="1587671566498057656">"ডিভাইচ ৰিষ্টাৰ্ট হোৱাৰ পাছত পিন দিয়াটো বাধ্যতামূলক"</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"ডিভাইচ ৰিষ্টাৰ্ট হোৱাৰ পাছত পাছৱৰ্ড দিয়াটো বাধ্যতামূলক"</string> - <!-- no translation found for kg_prompt_reason_timeout_pattern (5514969660010197363) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_pin (4227962059353859376) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_password (8810879144143933690) --> - <skip /> + <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"অতিৰিক্ত সুৰক্ষাৰ বাবে, ইয়াৰ পৰিৱৰ্তে আৰ্হি ব্যৱহাৰ কৰক"</string> + <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"অতিৰিক্ত সুৰক্ষাৰ বাবে, ইয়াৰ পৰিৱৰ্তে পিন ব্যৱহাৰ কৰক"</string> + <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"অতিৰিক্ত সুৰক্ষাৰ বাবে, ইয়াৰ পৰিৱৰ্তে পাছৱৰ্ড ব্যৱহাৰ কৰক"</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"প্ৰশাসকে ডিভাইচ লক কৰি ৰাখিছে"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"ডিভাইচটো মেনুৱেলভাৱে লক কৰা হৈছিল"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"চিনাক্ত কৰিব পৰা নাই"</string> @@ -93,6 +90,5 @@ <string name="clock_title_default" msgid="6342735240617459864">"ডিফ’ল্ট"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"বাবল"</string> <string name="clock_title_analog" msgid="8409262532900918273">"এনাল’গ"</string> - <!-- no translation found for keyguard_unlock_to_continue (7509503484250597743) --> - <skip /> + <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"অব্যাহত ৰাখিবলৈ আপোনাৰ ডিভাইচটো আনলক কৰক"</string> </resources> diff --git a/packages/SystemUI/res-keyguard/values-az/strings.xml b/packages/SystemUI/res-keyguard/values-az/strings.xml index e12569715eca..65c1c931a52e 100644 --- a/packages/SystemUI/res-keyguard/values-az/strings.xml +++ b/packages/SystemUI/res-keyguard/values-az/strings.xml @@ -78,12 +78,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="4720554342633852066">"Cihaz yenidən başladıqdan sonra model tələb olunur"</string> <string name="kg_prompt_reason_restart_pin" msgid="1587671566498057656">"Cihaz yeniden başladıqdan sonra PIN tələb olunur"</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"Cihaz yeniden başladıqdan sonra parol tələb olunur"</string> - <!-- no translation found for kg_prompt_reason_timeout_pattern (5514969660010197363) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_pin (4227962059353859376) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_password (8810879144143933690) --> - <skip /> + <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Əlavə təhlükəsizlik üçün modeldən istifadə edin"</string> + <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Əlavə təhlükəsizlik üçün PIN istifadə edin"</string> + <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Əlavə təhlükəsizlik üçün paroldan istifadə edin"</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Cihaz admin tərəfindən kilidlənib"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Cihaz əl ilə kilidləndi"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Tanınmır"</string> @@ -93,6 +90,5 @@ <string name="clock_title_default" msgid="6342735240617459864">"Defolt"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"Qabarcıq"</string> <string name="clock_title_analog" msgid="8409262532900918273">"Analoq"</string> - <!-- no translation found for keyguard_unlock_to_continue (7509503484250597743) --> - <skip /> + <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Davam etmək üçün cihazınızın kilidini açın"</string> </resources> diff --git a/packages/SystemUI/res-keyguard/values-b+sr+Latn/strings.xml b/packages/SystemUI/res-keyguard/values-b+sr+Latn/strings.xml index f0d1ef2d6bc3..cf363dfdff6d 100644 --- a/packages/SystemUI/res-keyguard/values-b+sr+Latn/strings.xml +++ b/packages/SystemUI/res-keyguard/values-b+sr+Latn/strings.xml @@ -78,12 +78,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="4720554342633852066">"Treba da unesete šablon kada se uređaj ponovo pokrene"</string> <string name="kg_prompt_reason_restart_pin" msgid="1587671566498057656">"Treba da unesete PIN kada se uređaj ponovo pokrene"</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"Treba da unesete lozinku kada se uređaj ponovo pokrene"</string> - <!-- no translation found for kg_prompt_reason_timeout_pattern (5514969660010197363) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_pin (4227962059353859376) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_password (8810879144143933690) --> - <skip /> + <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Za dodatnu bezbednost koristite šablon"</string> + <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Za dodatnu bezbednost koristite PIN"</string> + <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Za dodatnu bezbednost koristite lozinku"</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Administrator je zaključao uređaj"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Uređaj je ručno zaključan"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Nije prepoznat"</string> @@ -93,6 +90,5 @@ <string name="clock_title_default" msgid="6342735240617459864">"Podrazumevani"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"Mehurići"</string> <string name="clock_title_analog" msgid="8409262532900918273">"Analogni"</string> - <!-- no translation found for keyguard_unlock_to_continue (7509503484250597743) --> - <skip /> + <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Otključajte uređaj da biste nastavili"</string> </resources> diff --git a/packages/SystemUI/res-keyguard/values-be/strings.xml b/packages/SystemUI/res-keyguard/values-be/strings.xml index e1af3eceada8..c2dedf30237f 100644 --- a/packages/SystemUI/res-keyguard/values-be/strings.xml +++ b/packages/SystemUI/res-keyguard/values-be/strings.xml @@ -78,12 +78,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="4720554342633852066">"Пасля перазапуску прылады патрабуецца ўзор"</string> <string name="kg_prompt_reason_restart_pin" msgid="1587671566498057656">"Пасля перазапуску прылады патрабуецца PIN-код"</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"Пасля перазапуску прылады патрабуецца пароль"</string> - <!-- no translation found for kg_prompt_reason_timeout_pattern (5514969660010197363) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_pin (4227962059353859376) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_password (8810879144143933690) --> - <skip /> + <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"У мэтах дадатковай бяспекі скарыстайце ўзор разблакіроўкі"</string> + <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"У мэтах дадатковай бяспекі скарыстайце PIN-код"</string> + <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"У мэтах дадатковай бяспекі скарыстайце пароль"</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Прылада заблакіравана адміністратарам"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Прылада была заблакіравана ўручную"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Не распазнана"</string> @@ -93,6 +90,5 @@ <string name="clock_title_default" msgid="6342735240617459864">"Стандартны"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"Бурбалкі"</string> <string name="clock_title_analog" msgid="8409262532900918273">"Са стрэлкамі"</string> - <!-- no translation found for keyguard_unlock_to_continue (7509503484250597743) --> - <skip /> + <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Каб працягнуць, разблакіруйце прыладу"</string> </resources> diff --git a/packages/SystemUI/res-keyguard/values-bg/strings.xml b/packages/SystemUI/res-keyguard/values-bg/strings.xml index 0b4417ac30e8..546a645b1736 100644 --- a/packages/SystemUI/res-keyguard/values-bg/strings.xml +++ b/packages/SystemUI/res-keyguard/values-bg/strings.xml @@ -78,12 +78,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="4720554342633852066">"След рестартиране на устройството се изисква фигура"</string> <string name="kg_prompt_reason_restart_pin" msgid="1587671566498057656">"След рестартиране на устройството се изисква ПИН код"</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"След рестартиране на устройството се изисква парола"</string> - <!-- no translation found for kg_prompt_reason_timeout_pattern (5514969660010197363) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_pin (4227962059353859376) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_password (8810879144143933690) --> - <skip /> + <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"За допълнителна сигурност използвайте фигура вместо това"</string> + <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"За допълнителна сигурност използвайте ПИН код вместо това"</string> + <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"За допълнителна сигурност използвайте парола вместо това"</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Устройството е заключено от администратора"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Устройството бе заключено ръчно"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Не е разпознато"</string> @@ -93,6 +90,5 @@ <string name="clock_title_default" msgid="6342735240617459864">"Стандартен"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"Балонен"</string> <string name="clock_title_analog" msgid="8409262532900918273">"Аналогов"</string> - <!-- no translation found for keyguard_unlock_to_continue (7509503484250597743) --> - <skip /> + <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Отключете устройството си, за да продължите"</string> </resources> diff --git a/packages/SystemUI/res-keyguard/values-bn/strings.xml b/packages/SystemUI/res-keyguard/values-bn/strings.xml index 485157984749..7b3df35dda6c 100644 --- a/packages/SystemUI/res-keyguard/values-bn/strings.xml +++ b/packages/SystemUI/res-keyguard/values-bn/strings.xml @@ -78,12 +78,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="4720554342633852066">"ডিভাইসটি পুনরায় চালু হওয়ার পর প্যাটার্নের প্রয়োজন হবে"</string> <string name="kg_prompt_reason_restart_pin" msgid="1587671566498057656">"ডিভাইসটি পুনরায় চালু হওয়ার পর পিন প্রয়োজন হবে"</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"ডিভাইসটি পুনরায় চালু হওয়ার পর পাসওয়ার্ডের প্রয়োজন হবে"</string> - <!-- no translation found for kg_prompt_reason_timeout_pattern (5514969660010197363) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_pin (4227962059353859376) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_password (8810879144143933690) --> - <skip /> + <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"অতিরিক্ত সুরক্ষার জন্য, এর বদলে প্যাটার্ন ব্যবহার করুন"</string> + <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"অতিরিক্ত সুরক্ষার জন্য, এর বদলে পিন ব্যবহার করুন"</string> + <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"অতিরিক্ত সুরক্ষার জন্য, এর বদলে পাসওয়ার্ড ব্যবহার করুন"</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"প্রশাসক ডিভাইসটি লক করেছেন"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"ডিভাইসটিকে ম্যানুয়ালি লক করা হয়েছে"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"শনাক্ত করা যায়নি"</string> @@ -93,6 +90,5 @@ <string name="clock_title_default" msgid="6342735240617459864">"ডিফল্ট"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"বাবল"</string> <string name="clock_title_analog" msgid="8409262532900918273">"অ্যানালগ"</string> - <!-- no translation found for keyguard_unlock_to_continue (7509503484250597743) --> - <skip /> + <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"চালিয়ে যেতে আপনার ডিভাইস আনলক করুন"</string> </resources> diff --git a/packages/SystemUI/res-keyguard/values-bs/strings.xml b/packages/SystemUI/res-keyguard/values-bs/strings.xml index 4705b4d9645f..bb9e690c7a48 100644 --- a/packages/SystemUI/res-keyguard/values-bs/strings.xml +++ b/packages/SystemUI/res-keyguard/values-bs/strings.xml @@ -78,12 +78,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="4720554342633852066">"Potreban je uzorak nakon što se uređaj ponovo pokrene"</string> <string name="kg_prompt_reason_restart_pin" msgid="1587671566498057656">"Potreban je PIN nakon što se uređaj ponovo pokrene"</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"Potrebna je lozinka nakon što se uređaj ponovo pokrene"</string> - <!-- no translation found for kg_prompt_reason_timeout_pattern (5514969660010197363) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_pin (4227962059353859376) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_password (8810879144143933690) --> - <skip /> + <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Radi dodatne zaštite, umjesto toga koristite uzorak"</string> + <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Radi dodatne zaštite, umjesto toga koristite PIN"</string> + <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Radi dodatne zašitite, umjesto toga koristite lozinku"</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Uređaj je zaključao administrator"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Uređaj je ručno zaključan"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Nije prepoznato"</string> @@ -93,6 +90,5 @@ <string name="clock_title_default" msgid="6342735240617459864">"Zadano"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"Mjehurići"</string> <string name="clock_title_analog" msgid="8409262532900918273">"Analogni"</string> - <!-- no translation found for keyguard_unlock_to_continue (7509503484250597743) --> - <skip /> + <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Otključajte uređaj da nastavite"</string> </resources> diff --git a/packages/SystemUI/res-keyguard/values-ca/strings.xml b/packages/SystemUI/res-keyguard/values-ca/strings.xml index 284eaebfbd8e..1c81c6008ab6 100644 --- a/packages/SystemUI/res-keyguard/values-ca/strings.xml +++ b/packages/SystemUI/res-keyguard/values-ca/strings.xml @@ -78,12 +78,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="4720554342633852066">"Cal introduir el patró quan es reinicia el dispositiu"</string> <string name="kg_prompt_reason_restart_pin" msgid="1587671566498057656">"Cal introduir el PIN quan es reinicia el dispositiu"</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"Cal introduir la contrasenya quan es reinicia el dispositiu"</string> - <!-- no translation found for kg_prompt_reason_timeout_pattern (5514969660010197363) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_pin (4227962059353859376) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_password (8810879144143933690) --> - <skip /> + <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Per a més seguretat, utilitza el patró"</string> + <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Per a més seguretat, utilitza el PIN"</string> + <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Per a més seguretat, utilitza la contrasenya"</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"L\'administrador ha bloquejat el dispositiu"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"El dispositiu s\'ha bloquejat manualment"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"No s\'ha reconegut"</string> @@ -93,6 +90,5 @@ <string name="clock_title_default" msgid="6342735240617459864">"Predeterminada"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"Bombolla"</string> <string name="clock_title_analog" msgid="8409262532900918273">"Analògica"</string> - <!-- no translation found for keyguard_unlock_to_continue (7509503484250597743) --> - <skip /> + <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Desbloqueja el dispositiu per continuar"</string> </resources> diff --git a/packages/SystemUI/res-keyguard/values-cs/strings.xml b/packages/SystemUI/res-keyguard/values-cs/strings.xml index 6b4f60742964..9a6178c8ffec 100644 --- a/packages/SystemUI/res-keyguard/values-cs/strings.xml +++ b/packages/SystemUI/res-keyguard/values-cs/strings.xml @@ -78,12 +78,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="4720554342633852066">"Po restartování zařízení je vyžadováno gesto"</string> <string name="kg_prompt_reason_restart_pin" msgid="1587671566498057656">"Po restartování zařízení je vyžadován kód PIN"</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"Po restartování zařízení je vyžadováno heslo"</string> - <!-- no translation found for kg_prompt_reason_timeout_pattern (5514969660010197363) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_pin (4227962059353859376) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_password (8810879144143933690) --> - <skip /> + <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Z bezpečnostních důvodů raději použijte gesto"</string> + <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Z bezpečnostních důvodů raději použijte PIN"</string> + <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Z bezpečnostních důvodů raději použijte heslo"</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Zařízení je uzamknuto administrátorem"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Zařízení bylo ručně uzamčeno"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Nerozpoznáno"</string> @@ -93,6 +90,5 @@ <string name="clock_title_default" msgid="6342735240617459864">"Výchozí"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"Bublina"</string> <string name="clock_title_analog" msgid="8409262532900918273">"Analogové"</string> - <!-- no translation found for keyguard_unlock_to_continue (7509503484250597743) --> - <skip /> + <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Pokud chcete pokračovat, odemkněte zařízení"</string> </resources> diff --git a/packages/SystemUI/res-keyguard/values-da/strings.xml b/packages/SystemUI/res-keyguard/values-da/strings.xml index 85238dfdab0f..aac1b8323383 100644 --- a/packages/SystemUI/res-keyguard/values-da/strings.xml +++ b/packages/SystemUI/res-keyguard/values-da/strings.xml @@ -78,12 +78,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="4720554342633852066">"Du skal angive et mønster, når du har genstartet enheden"</string> <string name="kg_prompt_reason_restart_pin" msgid="1587671566498057656">"Der skal angives en pinkode efter genstart af enheden"</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"Der skal angives en adgangskode efter genstart af enheden"</string> - <!-- no translation found for kg_prompt_reason_timeout_pattern (5514969660010197363) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_pin (4227962059353859376) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_password (8810879144143933690) --> - <skip /> + <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Øg sikkerheden ved at bruge dit oplåsningsmønter i stedet"</string> + <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Øg sikkerheden ved at bruge din pinkode i stedet"</string> + <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Øg sikkerheden ved at bruge din adgangskode i stedet"</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Enheden er blevet låst af administratoren"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Enheden blev låst manuelt"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Ikke genkendt"</string> @@ -93,6 +90,5 @@ <string name="clock_title_default" msgid="6342735240617459864">"Standard"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"Boble"</string> <string name="clock_title_analog" msgid="8409262532900918273">"Analog"</string> - <!-- no translation found for keyguard_unlock_to_continue (7509503484250597743) --> - <skip /> + <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Lås din enhed op for at fortsætte"</string> </resources> diff --git a/packages/SystemUI/res-keyguard/values-de/strings.xml b/packages/SystemUI/res-keyguard/values-de/strings.xml index 18befed429a9..5a340ff2f91a 100644 --- a/packages/SystemUI/res-keyguard/values-de/strings.xml +++ b/packages/SystemUI/res-keyguard/values-de/strings.xml @@ -78,12 +78,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="4720554342633852066">"Nach dem Neustart des Geräts ist die Eingabe des Musters erforderlich"</string> <string name="kg_prompt_reason_restart_pin" msgid="1587671566498057656">"Nach dem Neustart des Geräts ist die Eingabe der PIN erforderlich"</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"Nach dem Neustart des Geräts ist die Eingabe des Passworts erforderlich"</string> - <!-- no translation found for kg_prompt_reason_timeout_pattern (5514969660010197363) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_pin (4227962059353859376) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_password (8810879144143933690) --> - <skip /> + <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Verwende für mehr Sicherheit stattdessen dein Muster"</string> + <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Verwende für mehr Sicherheit stattdessen deine PIN"</string> + <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Verwende für mehr Sicherheit stattdessen dein Passwort"</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Gerät vom Administrator gesperrt"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Gerät manuell gesperrt"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Nicht erkannt"</string> @@ -93,6 +90,5 @@ <string name="clock_title_default" msgid="6342735240617459864">"Standard"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"Bubble"</string> <string name="clock_title_analog" msgid="8409262532900918273">"Analog"</string> - <!-- no translation found for keyguard_unlock_to_continue (7509503484250597743) --> - <skip /> + <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Gerät entsperren, um fortzufahren"</string> </resources> diff --git a/packages/SystemUI/res-keyguard/values-el/strings.xml b/packages/SystemUI/res-keyguard/values-el/strings.xml index 65b844862a9f..973139f52419 100644 --- a/packages/SystemUI/res-keyguard/values-el/strings.xml +++ b/packages/SystemUI/res-keyguard/values-el/strings.xml @@ -78,12 +78,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="4720554342633852066">"Απαιτείται μοτίβο μετά από την επανεκκίνηση της συσκευής"</string> <string name="kg_prompt_reason_restart_pin" msgid="1587671566498057656">"Απαιτείται PIN μετά από την επανεκκίνηση της συσκευής"</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"Απαιτείται κωδικός πρόσβασης μετά από την επανεκκίνηση της συσκευής"</string> - <!-- no translation found for kg_prompt_reason_timeout_pattern (5514969660010197363) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_pin (4227962059353859376) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_password (8810879144143933690) --> - <skip /> + <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Για πρόσθετη ασφάλεια, χρησιμοποιήστε εναλλακτικά μοτίβο"</string> + <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Για πρόσθετη ασφάλεια, χρησιμοποιήστε εναλλακτικά PIN"</string> + <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Για πρόσθετη ασφάλεια, χρησιμοποιήστε εναλλακτικά κωδικό πρόσβασης"</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Η συσκευή κλειδώθηκε από τον διαχειριστή"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Η συσκευή κλειδώθηκε με μη αυτόματο τρόπο"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Δεν αναγνωρίστηκε"</string> @@ -93,6 +90,5 @@ <string name="clock_title_default" msgid="6342735240617459864">"Προεπιλογή"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"Συννεφάκι"</string> <string name="clock_title_analog" msgid="8409262532900918273">"Αναλογικό"</string> - <!-- no translation found for keyguard_unlock_to_continue (7509503484250597743) --> - <skip /> + <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Ξεκλειδώστε τη συσκευή σας για να συνεχίσετε"</string> </resources> diff --git a/packages/SystemUI/res-keyguard/values-en-rAU/strings.xml b/packages/SystemUI/res-keyguard/values-en-rAU/strings.xml index 588f1b501f53..41eaa38949e8 100644 --- a/packages/SystemUI/res-keyguard/values-en-rAU/strings.xml +++ b/packages/SystemUI/res-keyguard/values-en-rAU/strings.xml @@ -78,12 +78,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="4720554342633852066">"Pattern required after device restarts"</string> <string name="kg_prompt_reason_restart_pin" msgid="1587671566498057656">"PIN required after device restarts"</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"Password required after device restarts"</string> - <!-- no translation found for kg_prompt_reason_timeout_pattern (5514969660010197363) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_pin (4227962059353859376) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_password (8810879144143933690) --> - <skip /> + <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"For additional security, use pattern instead"</string> + <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"For additional security, use PIN instead"</string> + <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"For additional security, use password instead"</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Device locked by admin"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Device was locked manually"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Not recognised"</string> @@ -93,6 +90,5 @@ <string name="clock_title_default" msgid="6342735240617459864">"Default"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"Bubble"</string> <string name="clock_title_analog" msgid="8409262532900918273">"Analogue"</string> - <!-- no translation found for keyguard_unlock_to_continue (7509503484250597743) --> - <skip /> + <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Unlock your device to continue"</string> </resources> diff --git a/packages/SystemUI/res-keyguard/values-en-rCA/strings.xml b/packages/SystemUI/res-keyguard/values-en-rCA/strings.xml index 08fc8d66c98d..c8ba237088f2 100644 --- a/packages/SystemUI/res-keyguard/values-en-rCA/strings.xml +++ b/packages/SystemUI/res-keyguard/values-en-rCA/strings.xml @@ -78,12 +78,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="4720554342633852066">"Pattern required after device restarts"</string> <string name="kg_prompt_reason_restart_pin" msgid="1587671566498057656">"PIN required after device restarts"</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"Password required after device restarts"</string> - <!-- no translation found for kg_prompt_reason_timeout_pattern (5514969660010197363) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_pin (4227962059353859376) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_password (8810879144143933690) --> - <skip /> + <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"For additional security, use pattern instead"</string> + <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"For additional security, use PIN instead"</string> + <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"For additional security, use password instead"</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Device locked by admin"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Device was locked manually"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Not recognised"</string> @@ -93,6 +90,5 @@ <string name="clock_title_default" msgid="6342735240617459864">"Default"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"Bubble"</string> <string name="clock_title_analog" msgid="8409262532900918273">"Analogue"</string> - <!-- no translation found for keyguard_unlock_to_continue (7509503484250597743) --> - <skip /> + <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Unlock your device to continue"</string> </resources> diff --git a/packages/SystemUI/res-keyguard/values-en-rGB/strings.xml b/packages/SystemUI/res-keyguard/values-en-rGB/strings.xml index 588f1b501f53..41eaa38949e8 100644 --- a/packages/SystemUI/res-keyguard/values-en-rGB/strings.xml +++ b/packages/SystemUI/res-keyguard/values-en-rGB/strings.xml @@ -78,12 +78,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="4720554342633852066">"Pattern required after device restarts"</string> <string name="kg_prompt_reason_restart_pin" msgid="1587671566498057656">"PIN required after device restarts"</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"Password required after device restarts"</string> - <!-- no translation found for kg_prompt_reason_timeout_pattern (5514969660010197363) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_pin (4227962059353859376) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_password (8810879144143933690) --> - <skip /> + <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"For additional security, use pattern instead"</string> + <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"For additional security, use PIN instead"</string> + <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"For additional security, use password instead"</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Device locked by admin"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Device was locked manually"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Not recognised"</string> @@ -93,6 +90,5 @@ <string name="clock_title_default" msgid="6342735240617459864">"Default"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"Bubble"</string> <string name="clock_title_analog" msgid="8409262532900918273">"Analogue"</string> - <!-- no translation found for keyguard_unlock_to_continue (7509503484250597743) --> - <skip /> + <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Unlock your device to continue"</string> </resources> diff --git a/packages/SystemUI/res-keyguard/values-en-rIN/strings.xml b/packages/SystemUI/res-keyguard/values-en-rIN/strings.xml index 588f1b501f53..41eaa38949e8 100644 --- a/packages/SystemUI/res-keyguard/values-en-rIN/strings.xml +++ b/packages/SystemUI/res-keyguard/values-en-rIN/strings.xml @@ -78,12 +78,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="4720554342633852066">"Pattern required after device restarts"</string> <string name="kg_prompt_reason_restart_pin" msgid="1587671566498057656">"PIN required after device restarts"</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"Password required after device restarts"</string> - <!-- no translation found for kg_prompt_reason_timeout_pattern (5514969660010197363) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_pin (4227962059353859376) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_password (8810879144143933690) --> - <skip /> + <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"For additional security, use pattern instead"</string> + <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"For additional security, use PIN instead"</string> + <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"For additional security, use password instead"</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Device locked by admin"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Device was locked manually"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Not recognised"</string> @@ -93,6 +90,5 @@ <string name="clock_title_default" msgid="6342735240617459864">"Default"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"Bubble"</string> <string name="clock_title_analog" msgid="8409262532900918273">"Analogue"</string> - <!-- no translation found for keyguard_unlock_to_continue (7509503484250597743) --> - <skip /> + <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Unlock your device to continue"</string> </resources> diff --git a/packages/SystemUI/res-keyguard/values-es-rUS/strings.xml b/packages/SystemUI/res-keyguard/values-es-rUS/strings.xml index c71a67865925..6314d902e2cf 100644 --- a/packages/SystemUI/res-keyguard/values-es-rUS/strings.xml +++ b/packages/SystemUI/res-keyguard/values-es-rUS/strings.xml @@ -78,12 +78,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="4720554342633852066">"Se requiere el patrón después de reiniciar el dispositivo"</string> <string name="kg_prompt_reason_restart_pin" msgid="1587671566498057656">"Se requiere el PIN después de reiniciar el dispositivo"</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"Se requiere la contraseña después de reiniciar el dispositivo"</string> - <!-- no translation found for kg_prompt_reason_timeout_pattern (5514969660010197363) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_pin (4227962059353859376) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_password (8810879144143933690) --> - <skip /> + <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Para seguridad adicional, usa un patrón"</string> + <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Para seguridad adicional, usa un PIN"</string> + <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Para seguridad adicional, usa una contraseña"</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Dispositivo bloqueado por el administrador"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"El dispositivo se bloqueó de forma manual"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"No se reconoció"</string> @@ -93,6 +90,5 @@ <string name="clock_title_default" msgid="6342735240617459864">"Predeterminado"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"Burbuja"</string> <string name="clock_title_analog" msgid="8409262532900918273">"Analógico"</string> - <!-- no translation found for keyguard_unlock_to_continue (7509503484250597743) --> - <skip /> + <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Desbloquea tu dispositivo para continuar"</string> </resources> diff --git a/packages/SystemUI/res-keyguard/values-es/strings.xml b/packages/SystemUI/res-keyguard/values-es/strings.xml index c6ee6980ff3b..5aecf84ce90e 100644 --- a/packages/SystemUI/res-keyguard/values-es/strings.xml +++ b/packages/SystemUI/res-keyguard/values-es/strings.xml @@ -78,12 +78,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="4720554342633852066">"Debes introducir el patrón después de reiniciar el dispositivo"</string> <string name="kg_prompt_reason_restart_pin" msgid="1587671566498057656">"Debes introducir el PIN después de reiniciar el dispositivo"</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"Debes introducir la contraseña después de reiniciar el dispositivo"</string> - <!-- no translation found for kg_prompt_reason_timeout_pattern (5514969660010197363) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_pin (4227962059353859376) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_password (8810879144143933690) --> - <skip /> + <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Para mayor seguridad, usa el patrón"</string> + <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Para mayor seguridad, usa el PIN"</string> + <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Para mayor seguridad, usa la contraseña"</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Dispositivo bloqueado por el administrador"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"El dispositivo se ha bloqueado manualmente"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"No se reconoce"</string> @@ -93,6 +90,5 @@ <string name="clock_title_default" msgid="6342735240617459864">"Predeterminado"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"Burbuja"</string> <string name="clock_title_analog" msgid="8409262532900918273">"Analógico"</string> - <!-- no translation found for keyguard_unlock_to_continue (7509503484250597743) --> - <skip /> + <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Desbloquea tu dispositivo para continuar"</string> </resources> diff --git a/packages/SystemUI/res-keyguard/values-et/strings.xml b/packages/SystemUI/res-keyguard/values-et/strings.xml index 071ede8a0b25..9306ff61774c 100644 --- a/packages/SystemUI/res-keyguard/values-et/strings.xml +++ b/packages/SystemUI/res-keyguard/values-et/strings.xml @@ -78,12 +78,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="4720554342633852066">"Pärast seadme taaskäivitamist tuleb sisestada muster"</string> <string name="kg_prompt_reason_restart_pin" msgid="1587671566498057656">"Pärast seadme taaskäivitamist tuleb sisestada PIN-kood"</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"Pärast seadme taaskäivitamist tuleb sisestada parool"</string> - <!-- no translation found for kg_prompt_reason_timeout_pattern (5514969660010197363) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_pin (4227962059353859376) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_password (8810879144143933690) --> - <skip /> + <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Kasutage tugevama turvalisuse huvides hoopis mustrit"</string> + <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Kasutage tugevama turvalisuse huvides hoopis PIN-koodi"</string> + <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Kasutage tugevama turvalisuse huvides hoopis parooli"</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Administraator lukustas seadme"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Seade lukustati käsitsi"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Ei tuvastatud"</string> @@ -93,6 +90,5 @@ <string name="clock_title_default" msgid="6342735240617459864">"Vaikenumbrilaud"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"Mull"</string> <string name="clock_title_analog" msgid="8409262532900918273">"Analoog"</string> - <!-- no translation found for keyguard_unlock_to_continue (7509503484250597743) --> - <skip /> + <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Jätkamiseks avage oma seade"</string> </resources> diff --git a/packages/SystemUI/res-keyguard/values-eu/strings.xml b/packages/SystemUI/res-keyguard/values-eu/strings.xml index 9b8e65b1dde7..4ebe0f0baf14 100644 --- a/packages/SystemUI/res-keyguard/values-eu/strings.xml +++ b/packages/SystemUI/res-keyguard/values-eu/strings.xml @@ -78,12 +78,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="4720554342633852066">"Eredua marraztu beharko duzu gailua berrabiarazten denean"</string> <string name="kg_prompt_reason_restart_pin" msgid="1587671566498057656">"PINa idatzi beharko duzu gailua berrabiarazten denean"</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"Pasahitza idatzi beharko duzu gailua berrabiarazten denean"</string> - <!-- no translation found for kg_prompt_reason_timeout_pattern (5514969660010197363) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_pin (4227962059353859376) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_password (8810879144143933690) --> - <skip /> + <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Babestuago egoteko, erabili eredua"</string> + <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Babestuago egoteko, erabili PINa"</string> + <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Babestuago egoteko, erabili pasahitza"</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Administratzaileak blokeatu egin du gailua"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Eskuz blokeatu da gailua"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Ez da ezagutu"</string> @@ -93,6 +90,5 @@ <string name="clock_title_default" msgid="6342735240617459864">"Lehenetsia"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"Puxikak"</string> <string name="clock_title_analog" msgid="8409262532900918273">"Analogikoa"</string> - <!-- no translation found for keyguard_unlock_to_continue (7509503484250597743) --> - <skip /> + <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Aurrera egiteko, desblokeatu gailua"</string> </resources> diff --git a/packages/SystemUI/res-keyguard/values-fa/strings.xml b/packages/SystemUI/res-keyguard/values-fa/strings.xml index 3583f1e60e7a..e9a2e87374c3 100644 --- a/packages/SystemUI/res-keyguard/values-fa/strings.xml +++ b/packages/SystemUI/res-keyguard/values-fa/strings.xml @@ -78,12 +78,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="4720554342633852066">"بعد از بازنشانی دستگاه باید الگو وارد شود"</string> <string name="kg_prompt_reason_restart_pin" msgid="1587671566498057656">"بعد از بازنشانی دستگاه باید پین وارد شود"</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"بعد از بازنشانی دستگاه باید گذرواژه وارد شود"</string> - <!-- no translation found for kg_prompt_reason_timeout_pattern (5514969660010197363) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_pin (4227962059353859376) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_password (8810879144143933690) --> - <skip /> + <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"برای امنیت بیشتر، بهجای آن از الگو استفاده کنید"</string> + <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"برای امنیت بیشتر، بهجای آن از پین استفاده کنید"</string> + <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"برای امنیت بیشتر، بهجای آن از گذرواژه استفاده کنید"</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"دستگاه توسط سرپرست سیستم قفل شده است"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"دستگاه بهصورت دستی قفل شده است"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"شناسایی نشد"</string> @@ -93,6 +90,5 @@ <string name="clock_title_default" msgid="6342735240617459864">"پیشفرض"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"حباب"</string> <string name="clock_title_analog" msgid="8409262532900918273">"آنالوگ"</string> - <!-- no translation found for keyguard_unlock_to_continue (7509503484250597743) --> - <skip /> + <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"برای ادامه، قفل دستگاهتان را باز کنید"</string> </resources> diff --git a/packages/SystemUI/res-keyguard/values-fi/strings.xml b/packages/SystemUI/res-keyguard/values-fi/strings.xml index a0ac6df2f029..e80869a757ed 100644 --- a/packages/SystemUI/res-keyguard/values-fi/strings.xml +++ b/packages/SystemUI/res-keyguard/values-fi/strings.xml @@ -78,12 +78,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="4720554342633852066">"Kuvio vaaditaan laitteen uudelleenkäynnistyksen jälkeen."</string> <string name="kg_prompt_reason_restart_pin" msgid="1587671566498057656">"PIN-koodi vaaditaan laitteen uudelleenkäynnistyksen jälkeen."</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"Salasana vaaditaan laitteen uudelleenkäynnistyksen jälkeen."</string> - <!-- no translation found for kg_prompt_reason_timeout_pattern (5514969660010197363) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_pin (4227962059353859376) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_password (8810879144143933690) --> - <skip /> + <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Lisäsuojaa saat, kun käytät sen sijaan kuviota"</string> + <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Lisäsuojaa saat, kun käytät sen sijaan PIN-koodia"</string> + <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Lisäsuojaa saat, kun käytät sen sijaan salasanaa"</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Järjestelmänvalvoja lukitsi laitteen."</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Laite lukittiin manuaalisesti"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Ei tunnistettu"</string> @@ -93,6 +90,5 @@ <string name="clock_title_default" msgid="6342735240617459864">"Oletus"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"Kupla"</string> <string name="clock_title_analog" msgid="8409262532900918273">"Analoginen"</string> - <!-- no translation found for keyguard_unlock_to_continue (7509503484250597743) --> - <skip /> + <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Jatka avaamalla laitteen lukitus"</string> </resources> diff --git a/packages/SystemUI/res-keyguard/values-fr/strings.xml b/packages/SystemUI/res-keyguard/values-fr/strings.xml index ec00ba3ae887..92d0617f0a10 100644 --- a/packages/SystemUI/res-keyguard/values-fr/strings.xml +++ b/packages/SystemUI/res-keyguard/values-fr/strings.xml @@ -78,12 +78,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="4720554342633852066">"Veuillez dessiner le schéma après le redémarrage de l\'appareil"</string> <string name="kg_prompt_reason_restart_pin" msgid="1587671566498057656">"Veuillez saisir le code après le redémarrage de l\'appareil"</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"Veuillez saisir le mot de passe après le redémarrage de l\'appareil"</string> - <!-- no translation found for kg_prompt_reason_timeout_pattern (5514969660010197363) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_pin (4227962059353859376) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_password (8810879144143933690) --> - <skip /> + <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Pour plus de sécurité, utilisez plutôt un schéma"</string> + <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Pour plus de sécurité, utilisez plutôt un code"</string> + <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Pour plus de sécurité, utilisez plutôt un mot de passe"</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Appareil verrouillé par l\'administrateur"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Appareil verrouillé manuellement"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Non reconnu"</string> @@ -93,6 +90,5 @@ <string name="clock_title_default" msgid="6342735240617459864">"Par défaut"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"Bulle"</string> <string name="clock_title_analog" msgid="8409262532900918273">"Analogique"</string> - <!-- no translation found for keyguard_unlock_to_continue (7509503484250597743) --> - <skip /> + <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Déverrouillez votre appareil pour continuer"</string> </resources> diff --git a/packages/SystemUI/res-keyguard/values-gl/strings.xml b/packages/SystemUI/res-keyguard/values-gl/strings.xml index a3f8e86cd5e6..776e90a32fa1 100644 --- a/packages/SystemUI/res-keyguard/values-gl/strings.xml +++ b/packages/SystemUI/res-keyguard/values-gl/strings.xml @@ -78,12 +78,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="4720554342633852066">"É necesario o padrón despois do reinicio do dispositivo"</string> <string name="kg_prompt_reason_restart_pin" msgid="1587671566498057656">"É necesario o PIN despois do reinicio do dispositivo"</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"É necesario o contrasinal despois do reinicio do dispositivo"</string> - <!-- no translation found for kg_prompt_reason_timeout_pattern (5514969660010197363) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_pin (4227962059353859376) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_password (8810879144143933690) --> - <skip /> + <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Utiliza un padrón para obter maior seguranza"</string> + <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Utiliza un PIN para obter maior seguranza"</string> + <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Utiliza un contrasinal para obter maior seguranza"</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"O administrador bloqueou o dispositivo"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"O dispositivo bloqueouse manualmente"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Non se recoñeceu"</string> @@ -93,6 +90,5 @@ <string name="clock_title_default" msgid="6342735240617459864">"Predeterminado"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"Burbulla"</string> <string name="clock_title_analog" msgid="8409262532900918273">"Analóxico"</string> - <!-- no translation found for keyguard_unlock_to_continue (7509503484250597743) --> - <skip /> + <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Desbloquea o dispositivo para continuar"</string> </resources> diff --git a/packages/SystemUI/res-keyguard/values-gu/strings.xml b/packages/SystemUI/res-keyguard/values-gu/strings.xml index c97fe017ec60..a8b9a3af8e86 100644 --- a/packages/SystemUI/res-keyguard/values-gu/strings.xml +++ b/packages/SystemUI/res-keyguard/values-gu/strings.xml @@ -78,12 +78,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="4720554342633852066">"ઉપકરણનો પુનઃપ્રારંભ થાય તે પછી પૅટર્ન જરૂરી છે"</string> <string name="kg_prompt_reason_restart_pin" msgid="1587671566498057656">"ઉપકરણનો પુનઃપ્રારંભ થાય તે પછી પિન જરૂરી છે"</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"ઉપકરણનો પુનઃપ્રારંભ થાય તે પછી પાસવર્ડ જરૂરી છે"</string> - <!-- no translation found for kg_prompt_reason_timeout_pattern (5514969660010197363) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_pin (4227962059353859376) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_password (8810879144143933690) --> - <skip /> + <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"વધારાની સુરક્ષા માટે, તેના બદલે પૅટર્નનો ઉપયોગ કરો"</string> + <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"વધારાની સુરક્ષા માટે, તેના બદલે પિનનો ઉપયોગ કરો"</string> + <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"વધારાની સુરક્ષા માટે, તેના બદલે પાસવર્ડનો ઉપયોગ કરો"</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"વ્યવસ્થાપકે ઉપકરણ લૉક કરેલું છે"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"ઉપકરણ મેન્યુઅલી લૉક કર્યું હતું"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"ઓળખાયેલ નથી"</string> @@ -93,6 +90,5 @@ <string name="clock_title_default" msgid="6342735240617459864">"ડિફૉલ્ટ"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"બબલ"</string> <string name="clock_title_analog" msgid="8409262532900918273">"એનાલોગ"</string> - <!-- no translation found for keyguard_unlock_to_continue (7509503484250597743) --> - <skip /> + <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"ચાલુ રાખવા માટે તમારા ડિવાઇસને અનલૉક કરો"</string> </resources> diff --git a/packages/SystemUI/res-keyguard/values-hi/strings.xml b/packages/SystemUI/res-keyguard/values-hi/strings.xml index 128300488f27..47560dd0ca7d 100644 --- a/packages/SystemUI/res-keyguard/values-hi/strings.xml +++ b/packages/SystemUI/res-keyguard/values-hi/strings.xml @@ -78,12 +78,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="4720554342633852066">"डिवाइस फिर से चालू होने के बाद पैटर्न ज़रूरी है"</string> <string name="kg_prompt_reason_restart_pin" msgid="1587671566498057656">"डिवाइस फिर से चालू होने के बाद पिन ज़रूरी है"</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"डिवाइस फिर से चालू होने के बाद पासवर्ड ज़रूरी है"</string> - <!-- no translation found for kg_prompt_reason_timeout_pattern (5514969660010197363) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_pin (4227962059353859376) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_password (8810879144143933690) --> - <skip /> + <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"ज़्यादा सुरक्षा के लिए, इसके बजाय पैटर्न का इस्तेमाल करें"</string> + <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"ज़्यादा सुरक्षा के लिए, इसके बजाय पिन का इस्तेमाल करें"</string> + <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"ज़्यादा सुरक्षा के लिए, इसके बजाय पासवर्ड का इस्तेमाल करें"</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"व्यवस्थापक ने डिवाइस को लॉक किया है"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"डिवाइस को मैन्युअल रूप से लॉक किया गया था"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"पहचान नहीं हो पाई"</string> @@ -93,6 +90,5 @@ <string name="clock_title_default" msgid="6342735240617459864">"डिफ़ॉल्ट"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"बबल"</string> <string name="clock_title_analog" msgid="8409262532900918273">"एनालॉग"</string> - <!-- no translation found for keyguard_unlock_to_continue (7509503484250597743) --> - <skip /> + <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"जारी रखने के लिए डिवाइस अनलॉक करें"</string> </resources> diff --git a/packages/SystemUI/res-keyguard/values-hr/strings.xml b/packages/SystemUI/res-keyguard/values-hr/strings.xml index 7a14a80e9bb3..efd1cbb07c93 100644 --- a/packages/SystemUI/res-keyguard/values-hr/strings.xml +++ b/packages/SystemUI/res-keyguard/values-hr/strings.xml @@ -78,12 +78,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="4720554342633852066">"Nakon ponovnog pokretanja uređaja morate unijeti uzorak"</string> <string name="kg_prompt_reason_restart_pin" msgid="1587671566498057656">"Nakon ponovnog pokretanja uređaja morate unijeti PIN"</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"Nakon ponovnog pokretanja uređaja morate unijeti zaporku"</string> - <!-- no translation found for kg_prompt_reason_timeout_pattern (5514969660010197363) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_pin (4227962059353859376) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_password (8810879144143933690) --> - <skip /> + <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Za dodatnu sigurnost upotrijebite uzorak"</string> + <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Za dodatnu sigurnost upotrijebite PIN"</string> + <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Za dodatnu sigurnost upotrijebite zaporku"</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Administrator je zaključao uređaj"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Uređaj je ručno zaključan"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Nije prepoznato"</string> @@ -93,6 +90,5 @@ <string name="clock_title_default" msgid="6342735240617459864">"Zadano"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"Mjehurić"</string> <string name="clock_title_analog" msgid="8409262532900918273">"Analogni"</string> - <!-- no translation found for keyguard_unlock_to_continue (7509503484250597743) --> - <skip /> + <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Otključajte uređaj da biste nastavili"</string> </resources> diff --git a/packages/SystemUI/res-keyguard/values-hu/strings.xml b/packages/SystemUI/res-keyguard/values-hu/strings.xml index a4fbf537d331..0421ff84f36e 100644 --- a/packages/SystemUI/res-keyguard/values-hu/strings.xml +++ b/packages/SystemUI/res-keyguard/values-hu/strings.xml @@ -78,12 +78,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="4720554342633852066">"Az eszköz újraindítását követően meg kell adni a mintát"</string> <string name="kg_prompt_reason_restart_pin" msgid="1587671566498057656">"Az eszköz újraindítását követően meg kell adni a PIN-kódot"</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"Az eszköz újraindítását követően meg kell adni a jelszót"</string> - <!-- no translation found for kg_prompt_reason_timeout_pattern (5514969660010197363) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_pin (4227962059353859376) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_password (8810879144143933690) --> - <skip /> + <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"A nagyobb biztonság érdekében használjon inkább mintát"</string> + <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"A nagyobb biztonság érdekében használjon inkább PIN-kódot"</string> + <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"A nagyobb biztonság érdekében használjon inkább jelszót"</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"A rendszergazda zárolta az eszközt"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Az eszközt manuálisan lezárták"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Nem ismerhető fel"</string> @@ -93,6 +90,5 @@ <string name="clock_title_default" msgid="6342735240617459864">"Alapértelmezett"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"Buborék"</string> <string name="clock_title_analog" msgid="8409262532900918273">"Analóg"</string> - <!-- no translation found for keyguard_unlock_to_continue (7509503484250597743) --> - <skip /> + <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"A folytatáshoz oldja fel az eszközét"</string> </resources> diff --git a/packages/SystemUI/res-keyguard/values-hy/strings.xml b/packages/SystemUI/res-keyguard/values-hy/strings.xml index 086eeb939941..d421c2998883 100644 --- a/packages/SystemUI/res-keyguard/values-hy/strings.xml +++ b/packages/SystemUI/res-keyguard/values-hy/strings.xml @@ -78,12 +78,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="4720554342633852066">"Սարքը վերագործարկելուց հետո անհրաժեշտ է մուտքագրել նախշը"</string> <string name="kg_prompt_reason_restart_pin" msgid="1587671566498057656">"Սարքը վերագործարկելուց հետո անհրաժեշտ է մուտքագրել PIN կոդը"</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"Սարքը վերագործարկելուց հետո անհրաժեշտ է մուտքագրել գաղտնաբառը"</string> - <!-- no translation found for kg_prompt_reason_timeout_pattern (5514969660010197363) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_pin (4227962059353859376) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_password (8810879144143933690) --> - <skip /> + <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Լրացուցիչ անվտանգության համար օգտագործեք նախշ"</string> + <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Լրացուցիչ անվտանգության համար օգտագործեք PIN կոդ"</string> + <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Լրացուցիչ անվտանգության համար օգտագործեք գաղտնաբառ"</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Սարքը կողպված է ադմինիստրատորի կողմից"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Սարքը կողպվել է ձեռքով"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Չհաջողվեց ճանաչել"</string> @@ -93,6 +90,5 @@ <string name="clock_title_default" msgid="6342735240617459864">"Կանխադրված"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"Պղպջակ"</string> <string name="clock_title_analog" msgid="8409262532900918273">"Անալոգային"</string> - <!-- no translation found for keyguard_unlock_to_continue (7509503484250597743) --> - <skip /> + <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Շարունակելու համար ապակողպեք ձեր սարքը"</string> </resources> diff --git a/packages/SystemUI/res-keyguard/values-in/strings.xml b/packages/SystemUI/res-keyguard/values-in/strings.xml index b43a0322fc7a..2061e85d8be7 100644 --- a/packages/SystemUI/res-keyguard/values-in/strings.xml +++ b/packages/SystemUI/res-keyguard/values-in/strings.xml @@ -78,12 +78,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="4720554342633852066">"Pola diperlukan setelah perangkat dimulai ulang"</string> <string name="kg_prompt_reason_restart_pin" msgid="1587671566498057656">"PIN diperlukan setelah perangkat dimulai ulang"</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"Sandi diperlukan setelah perangkat dimulai ulang"</string> - <!-- no translation found for kg_prompt_reason_timeout_pattern (5514969660010197363) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_pin (4227962059353859376) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_password (8810879144143933690) --> - <skip /> + <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Untuk keamanan tambahan, gunakan pola"</string> + <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Untuk keamanan tambahan, gunakan PIN"</string> + <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Untuk keamanan tambahan, gunakan sandi"</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Perangkat dikunci oleh admin"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Perangkat dikunci secara manual"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Tidak dikenali"</string> @@ -93,6 +90,5 @@ <string name="clock_title_default" msgid="6342735240617459864">"Default"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"Balon"</string> <string name="clock_title_analog" msgid="8409262532900918273">"Analog"</string> - <!-- no translation found for keyguard_unlock_to_continue (7509503484250597743) --> - <skip /> + <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Buka kunci perangkat untuk melanjutkan"</string> </resources> diff --git a/packages/SystemUI/res-keyguard/values-is/strings.xml b/packages/SystemUI/res-keyguard/values-is/strings.xml index 8bad961dae4b..ae3da5785603 100644 --- a/packages/SystemUI/res-keyguard/values-is/strings.xml +++ b/packages/SystemUI/res-keyguard/values-is/strings.xml @@ -78,12 +78,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="4720554342633852066">"Mynsturs er krafist þegar tækið er endurræst"</string> <string name="kg_prompt_reason_restart_pin" msgid="1587671566498057656">"PIN-númers er krafist þegar tækið er endurræst"</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"Aðgangsorðs er krafist þegar tækið er endurræst"</string> - <!-- no translation found for kg_prompt_reason_timeout_pattern (5514969660010197363) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_pin (4227962059353859376) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_password (8810879144143933690) --> - <skip /> + <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Fyrir aukið öryggi skaltu nota mynstur í staðinn"</string> + <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Fyrir aukið öryggi skaltu nota PIN-númer í staðinn"</string> + <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Fyrir aukið öryggi skaltu nota aðgangsorð í staðinn"</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Kerfisstjóri læsti tæki"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Tækinu var læst handvirkt"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Þekktist ekki"</string> @@ -93,6 +90,5 @@ <string name="clock_title_default" msgid="6342735240617459864">"Sjálfgefið"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"Blaðra"</string> <string name="clock_title_analog" msgid="8409262532900918273">"Með vísum"</string> - <!-- no translation found for keyguard_unlock_to_continue (7509503484250597743) --> - <skip /> + <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Taktu tækið úr lás til að halda áfram"</string> </resources> diff --git a/packages/SystemUI/res-keyguard/values-it/strings.xml b/packages/SystemUI/res-keyguard/values-it/strings.xml index 186177ff6d49..d1feea6a1f5d 100644 --- a/packages/SystemUI/res-keyguard/values-it/strings.xml +++ b/packages/SystemUI/res-keyguard/values-it/strings.xml @@ -78,12 +78,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="4720554342633852066">"Sequenza obbligatoria dopo il riavvio del dispositivo"</string> <string name="kg_prompt_reason_restart_pin" msgid="1587671566498057656">"PIN obbligatorio dopo il riavvio del dispositivo"</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"Password obbligatoria dopo il riavvio del dispositivo"</string> - <!-- no translation found for kg_prompt_reason_timeout_pattern (5514969660010197363) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_pin (4227962059353859376) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_password (8810879144143933690) --> - <skip /> + <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Per maggior sicurezza, usa invece la sequenza"</string> + <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Per maggior sicurezza, usa invece il PIN"</string> + <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Per maggior sicurezza, usa invece la password"</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Dispositivo bloccato dall\'amministratore"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Il dispositivo è stato bloccato manualmente"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Non riconosciuto"</string> @@ -93,6 +90,5 @@ <string name="clock_title_default" msgid="6342735240617459864">"Predefinito"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"Bolla"</string> <string name="clock_title_analog" msgid="8409262532900918273">"Analogico"</string> - <!-- no translation found for keyguard_unlock_to_continue (7509503484250597743) --> - <skip /> + <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Sblocca il dispositivo per continuare"</string> </resources> diff --git a/packages/SystemUI/res-keyguard/values-ka/strings.xml b/packages/SystemUI/res-keyguard/values-ka/strings.xml index 123cc39e47da..b56042a0309f 100644 --- a/packages/SystemUI/res-keyguard/values-ka/strings.xml +++ b/packages/SystemUI/res-keyguard/values-ka/strings.xml @@ -78,12 +78,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="4720554342633852066">"მოწყობილობის გადატვირთვის შემდეგ საჭიროა ნიმუშის დახატვა"</string> <string name="kg_prompt_reason_restart_pin" msgid="1587671566498057656">"მოწყობილობის გადატვირთვის შემდეგ საჭიროა PIN-კოდის შეყვანა"</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"მოწყობილობის გადატვირთვის შემდეგ საჭიროა პაროლის შეყვანა"</string> - <!-- no translation found for kg_prompt_reason_timeout_pattern (5514969660010197363) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_pin (4227962059353859376) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_password (8810879144143933690) --> - <skip /> + <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"დამატებითი უსაფრთხოებისთვის გამოიყენეთ ნიმუში"</string> + <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"დამატებითი უსაფრთხოებისთვის გამოიყენეთ PIN"</string> + <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"დამატებითი უსაფრთხოებისთვის გამოიყენეთ პაროლი"</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"მოწყობილობა ჩაკეტილია ადმინისტრატორის მიერ"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"მოწყობილობა ხელით ჩაიკეტა"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"არ არის ამოცნობილი"</string> @@ -93,6 +90,5 @@ <string name="clock_title_default" msgid="6342735240617459864">"ნაგულისხმევი"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"ბუშტი"</string> <string name="clock_title_analog" msgid="8409262532900918273">"ანალოგური"</string> - <!-- no translation found for keyguard_unlock_to_continue (7509503484250597743) --> - <skip /> + <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"გასაგრძელებლად განბლოკეთ თქვენი მოწყობილობა"</string> </resources> diff --git a/packages/SystemUI/res-keyguard/values-kk/strings.xml b/packages/SystemUI/res-keyguard/values-kk/strings.xml index 8daca5c6d59a..a4024dea3b7c 100644 --- a/packages/SystemUI/res-keyguard/values-kk/strings.xml +++ b/packages/SystemUI/res-keyguard/values-kk/strings.xml @@ -78,12 +78,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="4720554342633852066">"Құрылғы қайта іске қосылғаннан кейін, өрнекті енгізу қажет"</string> <string name="kg_prompt_reason_restart_pin" msgid="1587671566498057656">"Құрылғы қайта іске қосылғаннан кейін, PIN кодын енгізу қажет"</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"Құрылғы қайта іске қосылғаннан кейін, құпия сөзді енгізу қажет"</string> - <!-- no translation found for kg_prompt_reason_timeout_pattern (5514969660010197363) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_pin (4227962059353859376) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_password (8810879144143933690) --> - <skip /> + <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Қосымша қауіпсіздік үшін өрнекті пайдаланыңыз."</string> + <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Қосымша қауіпсіздік үшін PIN кодын пайдаланыңыз."</string> + <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Қосымша қауіпсіздік үшін құпия сөзді пайдаланыңыз."</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Құрылғыны әкімші құлыптаған"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Құрылғы қолмен құлыпталды"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Танылмады"</string> @@ -93,6 +90,5 @@ <string name="clock_title_default" msgid="6342735240617459864">"Әдепкі"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"Көпіршік"</string> <string name="clock_title_analog" msgid="8409262532900918273">"Аналогтық"</string> - <!-- no translation found for keyguard_unlock_to_continue (7509503484250597743) --> - <skip /> + <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Жалғастыру үшін құрылғының құлпын ашыңыз"</string> </resources> diff --git a/packages/SystemUI/res-keyguard/values-km/strings.xml b/packages/SystemUI/res-keyguard/values-km/strings.xml index 73f507c91ece..329912ab824d 100644 --- a/packages/SystemUI/res-keyguard/values-km/strings.xml +++ b/packages/SystemUI/res-keyguard/values-km/strings.xml @@ -78,12 +78,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="4720554342633852066">"តម្រូវឲ្យប្រើលំនាំ បន្ទាប់ពីឧបករណ៍ចាប់ផ្តើមឡើងវិញ"</string> <string name="kg_prompt_reason_restart_pin" msgid="1587671566498057656">"តម្រូវឲ្យបញ្ចូលកូដ PIN បន្ទាប់ពីឧបករណ៍ចាប់ផ្តើមឡើងវិញ"</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"តម្រូវឲ្យបញ្ចូលពាក្យសម្ងាត់ បន្ទាប់ពីឧបករណ៍ចាប់ផ្តើមឡើងវិញ"</string> - <!-- no translation found for kg_prompt_reason_timeout_pattern (5514969660010197363) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_pin (4227962059353859376) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_password (8810879144143933690) --> - <skip /> + <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"ដើម្បីសុវត្ថិភាពបន្ថែម សូមប្រើលំនាំជំនួសវិញ"</string> + <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"ដើម្បីសុវត្ថិភាពបន្ថែម សូមប្រើកូដ PIN ជំនួសវិញ"</string> + <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"ដើម្បីសុវត្ថិភាពបន្ថែម សូមប្រើពាក្យសម្ងាត់ជំនួសវិញ"</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"ឧបករណ៍ត្រូវបានចាក់សោដោយអ្នកគ្រប់គ្រង"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"ឧបករណ៍ត្រូវបានចាក់សោដោយអ្នកប្រើផ្ទាល់"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"មិនអាចសម្គាល់បានទេ"</string> @@ -93,6 +90,5 @@ <string name="clock_title_default" msgid="6342735240617459864">"លំនាំដើម"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"ពពុះ"</string> <string name="clock_title_analog" msgid="8409262532900918273">"អាណាឡូក"</string> - <!-- no translation found for keyguard_unlock_to_continue (7509503484250597743) --> - <skip /> + <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"ដោះសោឧបករណ៍របស់អ្នកដើម្បីបន្ត"</string> </resources> diff --git a/packages/SystemUI/res-keyguard/values-kn/strings.xml b/packages/SystemUI/res-keyguard/values-kn/strings.xml index c279ceac244e..d42d08d9fe6c 100644 --- a/packages/SystemUI/res-keyguard/values-kn/strings.xml +++ b/packages/SystemUI/res-keyguard/values-kn/strings.xml @@ -78,12 +78,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="4720554342633852066">"ಸಾಧನ ಮರುಪ್ರಾರಂಭಗೊಂಡ ನಂತರ ಪ್ಯಾಟರ್ನ್ ಅಗತ್ಯವಿರುತ್ತದೆ"</string> <string name="kg_prompt_reason_restart_pin" msgid="1587671566498057656">"ಸಾಧನ ಮರುಪ್ರಾರಂಭಗೊಂಡ ನಂತರ ಪಿನ್ ಅಗತ್ಯವಿರುತ್ತದೆ"</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"ಸಾಧನ ಮರುಪ್ರಾರಂಭಗೊಂಡ ನಂತರ ಪಾಸ್ವರ್ಡ್ ಅಗತ್ಯವಿರುತ್ತದೆ"</string> - <!-- no translation found for kg_prompt_reason_timeout_pattern (5514969660010197363) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_pin (4227962059353859376) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_password (8810879144143933690) --> - <skip /> + <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"ಹೆಚ್ಚುವರಿ ಭದ್ರತೆಗಾಗಿ, ಬದಲಿಗೆ ಪ್ಯಾಟರ್ನ್ ಅನ್ನು ಬಳಸಿ"</string> + <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"ಹೆಚ್ಚುವರಿ ಭದ್ರತೆಗಾಗಿ, ಬದಲಿಗೆ ಪಿನ್ ಬಳಸಿ"</string> + <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"ಹೆಚ್ಚುವರಿ ಭದ್ರತೆಗಾಗಿ, ಬದಲಿಗೆ ಪಾಸ್ವರ್ಡ್ ಅನ್ನು ಬಳಸಿ"</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"ನಿರ್ವಾಹಕರು ಸಾಧನವನ್ನು ಲಾಕ್ ಮಾಡಿದ್ದಾರೆ"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"ಸಾಧನವನ್ನು ಹಸ್ತಚಾಲಿತವಾಗಿ ಲಾಕ್ ಮಾಡಲಾಗಿದೆ"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"ಗುರುತಿಸಲಾಗಿಲ್ಲ"</string> @@ -93,6 +90,5 @@ <string name="clock_title_default" msgid="6342735240617459864">"ಡೀಫಾಲ್ಟ್"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"ಬಬಲ್"</string> <string name="clock_title_analog" msgid="8409262532900918273">"ಅನಲಾಗ್"</string> - <!-- no translation found for keyguard_unlock_to_continue (7509503484250597743) --> - <skip /> + <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"ಮುಂದುವರಿಸಲು, ನಿಮ್ಮ ಸಾಧನವನ್ನು ಅನ್ಲಾಕ್ ಮಾಡಿ"</string> </resources> diff --git a/packages/SystemUI/res-keyguard/values-ko/strings.xml b/packages/SystemUI/res-keyguard/values-ko/strings.xml index 4c058edbf688..e916fee1c3d8 100644 --- a/packages/SystemUI/res-keyguard/values-ko/strings.xml +++ b/packages/SystemUI/res-keyguard/values-ko/strings.xml @@ -78,12 +78,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="4720554342633852066">"기기가 다시 시작되면 패턴이 필요합니다."</string> <string name="kg_prompt_reason_restart_pin" msgid="1587671566498057656">"기기가 다시 시작되면 PIN이 필요합니다."</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"기기가 다시 시작되면 비밀번호가 필요합니다."</string> - <!-- no translation found for kg_prompt_reason_timeout_pattern (5514969660010197363) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_pin (4227962059353859376) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_password (8810879144143933690) --> - <skip /> + <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"보안 강화를 위해 대신 패턴 사용"</string> + <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"보안 강화를 위해 대신 PIN 사용"</string> + <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"보안 강화를 위해 대신 비밀번호 사용"</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"관리자가 기기를 잠갔습니다."</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"기기가 수동으로 잠금 설정되었습니다."</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"인식할 수 없음"</string> @@ -93,6 +90,5 @@ <string name="clock_title_default" msgid="6342735240617459864">"기본"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"버블"</string> <string name="clock_title_analog" msgid="8409262532900918273">"아날로그"</string> - <!-- no translation found for keyguard_unlock_to_continue (7509503484250597743) --> - <skip /> + <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"기기를 잠금 해제하여 계속"</string> </resources> diff --git a/packages/SystemUI/res-keyguard/values-ky/strings.xml b/packages/SystemUI/res-keyguard/values-ky/strings.xml index 7c7099e1cf61..88abd1e632eb 100644 --- a/packages/SystemUI/res-keyguard/values-ky/strings.xml +++ b/packages/SystemUI/res-keyguard/values-ky/strings.xml @@ -78,12 +78,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="4720554342633852066">"Түзмөк кайра күйгүзүлгөндөн кийин графикалык ачкычты тартуу талап кылынат"</string> <string name="kg_prompt_reason_restart_pin" msgid="1587671566498057656">"Түзмөк кайра күйгүзүлгөндөн кийин PIN-кодду киргизүү талап кылынат"</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"Түзмөк кайра күйгүзүлгөндөн кийин сырсөздү киргизүү талап кылынат"</string> - <!-- no translation found for kg_prompt_reason_timeout_pattern (5514969660010197363) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_pin (4227962059353859376) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_password (8810879144143933690) --> - <skip /> + <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Кошумча коопсуздук үчүн анын ордуна графикалык ачкычты колдонуңуз"</string> + <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Кошумча коопсуздук үчүн анын ордуна PIN кодду колдонуңуз"</string> + <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Кошумча коопсуздук үчүн анын ордуна сырсөздү колдонуңуз"</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Түзмөктү администратор кулпулап койгон"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Түзмөк кол менен кулпуланды"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Таанылган жок"</string> @@ -93,6 +90,5 @@ <string name="clock_title_default" msgid="6342735240617459864">"Демейки"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"Көбүк"</string> <string name="clock_title_analog" msgid="8409262532900918273">"Аналог"</string> - <!-- no translation found for keyguard_unlock_to_continue (7509503484250597743) --> - <skip /> + <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Улантуу үчүн түзмөгүңүздүн кулпусун ачыңыз"</string> </resources> diff --git a/packages/SystemUI/res-keyguard/values-lo/strings.xml b/packages/SystemUI/res-keyguard/values-lo/strings.xml index 5a6df42884b4..5001c3091df5 100644 --- a/packages/SystemUI/res-keyguard/values-lo/strings.xml +++ b/packages/SystemUI/res-keyguard/values-lo/strings.xml @@ -78,12 +78,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="4720554342633852066">"ຈຳເປັນຕ້ອງມີແບບຮູບປົດລັອກຫຼັງຈາກອຸປະກອນເລີ່ມລະບົບໃໝ່"</string> <string name="kg_prompt_reason_restart_pin" msgid="1587671566498057656">"ຈຳເປັນຕ້ອງມີ PIN ຫຼັງຈາກອຸປະກອນເລີ່ມລະບົບໃໝ່"</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"ຈຳເປັນຕ້ອງມີລະຫັດຜ່ານຫຼັງຈາກອຸປະກອນເລີ່ມລະບົບໃໝ່"</string> - <!-- no translation found for kg_prompt_reason_timeout_pattern (5514969660010197363) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_pin (4227962059353859376) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_password (8810879144143933690) --> - <skip /> + <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"ເພື່ອຄວາມປອດໄພເພີ່ມເຕີມ, ໃຫ້ໃຊ້ຮູບແບບແທນ"</string> + <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"ເພື່ອຄວາມປອດໄພເພີ່ມເຕີມ, ໃຫ້ໃຊ້ PIN ແທນ"</string> + <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"ເພື່ອຄວາມປອດໄພເພີ່ມເຕີມ, ໃຫ້ໃຊ້ລະຫັດຜ່ານແທນ"</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"ອຸປະກອນຖືກລັອກໂດຍຜູ້ເບິ່ງແຍງລະບົບ"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"ອຸປະກອນຖືກສັ່ງໃຫ້ລັອກ"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"ບໍ່ຮູ້ຈັກ"</string> @@ -93,6 +90,5 @@ <string name="clock_title_default" msgid="6342735240617459864">"ຄ່າເລີ່ມຕົ້ນ"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"ຟອງ"</string> <string name="clock_title_analog" msgid="8409262532900918273">"ໂມງເຂັມ"</string> - <!-- no translation found for keyguard_unlock_to_continue (7509503484250597743) --> - <skip /> + <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"ປົດລັອກອຸປະກອນຂອງທ່ານເພື່ອສືບຕໍ່"</string> </resources> diff --git a/packages/SystemUI/res-keyguard/values-lt/strings.xml b/packages/SystemUI/res-keyguard/values-lt/strings.xml index 4d98fd17baf8..20f6ad2f7500 100644 --- a/packages/SystemUI/res-keyguard/values-lt/strings.xml +++ b/packages/SystemUI/res-keyguard/values-lt/strings.xml @@ -78,12 +78,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="4720554342633852066">"Iš naujo paleidus įrenginį būtinas atrakinimo piešinys"</string> <string name="kg_prompt_reason_restart_pin" msgid="1587671566498057656">"Iš naujo paleidus įrenginį būtinas PIN kodas"</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"Iš naujo paleidus įrenginį būtinas slaptažodis"</string> - <!-- no translation found for kg_prompt_reason_timeout_pattern (5514969660010197363) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_pin (4227962059353859376) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_password (8810879144143933690) --> - <skip /> + <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Papildomai saugai užtikrinti geriau naudokite atrakinimo piešinį"</string> + <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Papildomai saugai užtikrinti geriau naudokite PIN kodą"</string> + <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Papildomai saugai užtikrinti geriau naudokite slaptažodį"</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Įrenginį užrakino administratorius"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Įrenginys užrakintas neautomatiškai"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Neatpažinta"</string> @@ -93,6 +90,5 @@ <string name="clock_title_default" msgid="6342735240617459864">"Numatytasis"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"Debesėlis"</string> <string name="clock_title_analog" msgid="8409262532900918273">"Analoginis"</string> - <!-- no translation found for keyguard_unlock_to_continue (7509503484250597743) --> - <skip /> + <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Įrenginio atrakinimas norint tęsti"</string> </resources> diff --git a/packages/SystemUI/res-keyguard/values-lv/strings.xml b/packages/SystemUI/res-keyguard/values-lv/strings.xml index 2660a069c949..7012c1671413 100644 --- a/packages/SystemUI/res-keyguard/values-lv/strings.xml +++ b/packages/SystemUI/res-keyguard/values-lv/strings.xml @@ -78,12 +78,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="4720554342633852066">"Pēc ierīces restartēšanas ir jāievada atbloķēšanas kombinācija."</string> <string name="kg_prompt_reason_restart_pin" msgid="1587671566498057656">"Pēc ierīces restartēšanas ir jāievada PIN kods."</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"Pēc ierīces restartēšanas ir jāievada parole."</string> - <!-- no translation found for kg_prompt_reason_timeout_pattern (5514969660010197363) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_pin (4227962059353859376) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_password (8810879144143933690) --> - <skip /> + <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Papildu drošībai izmantojiet kombināciju"</string> + <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Papildu drošībai izmantojiet PIN"</string> + <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Papildu drošībai izmantojiet paroli"</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Administrators bloķēja ierīci."</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Ierīce tika bloķēta manuāli."</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Nav atpazīts"</string> @@ -93,6 +90,5 @@ <string name="clock_title_default" msgid="6342735240617459864">"Noklusējums"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"Burbuļi"</string> <string name="clock_title_analog" msgid="8409262532900918273">"Analogais"</string> - <!-- no translation found for keyguard_unlock_to_continue (7509503484250597743) --> - <skip /> + <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Lai turpinātu, atbloķējiet ierīci"</string> </resources> diff --git a/packages/SystemUI/res-keyguard/values-ml/strings.xml b/packages/SystemUI/res-keyguard/values-ml/strings.xml index e62b4356822d..7919773548e8 100644 --- a/packages/SystemUI/res-keyguard/values-ml/strings.xml +++ b/packages/SystemUI/res-keyguard/values-ml/strings.xml @@ -78,12 +78,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="4720554342633852066">"ഉപകരണം റീസ്റ്റാർട്ടായശേഷം പാറ്റേൺ വരയ്ക്കേണ്ടതുണ്ട്"</string> <string name="kg_prompt_reason_restart_pin" msgid="1587671566498057656">"ഉപകരണം റീസ്റ്റാർട്ടായശേഷം പിൻ നൽകേണ്ടതുണ്ട്"</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"ഉപകരണം റീസ്റ്റാർട്ടായശേഷം പാസ്വേഡ് നൽകേണ്ടതുണ്ട്"</string> - <!-- no translation found for kg_prompt_reason_timeout_pattern (5514969660010197363) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_pin (4227962059353859376) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_password (8810879144143933690) --> - <skip /> + <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"അധിക സുരക്ഷയ്ക്കായി, പകരം പാറ്റേൺ ഉപയോഗിക്കുക"</string> + <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"അധിക സുരക്ഷയ്ക്കായി, പകരം പിൻ ഉപയോഗിക്കുക"</string> + <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"അധിക സുരക്ഷയ്ക്കായി, പകരം പാസ്വേഡ് ഉപയോഗിക്കുക"</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"ഉപകരണം അഡ്മിൻ ലോക്കുചെയ്തു"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"ഉപകരണം നേരിട്ട് ലോക്കുചെയ്തു"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"തിരിച്ചറിയുന്നില്ല"</string> @@ -93,6 +90,5 @@ <string name="clock_title_default" msgid="6342735240617459864">"ഡിഫോൾട്ട്"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"ബബിൾ"</string> <string name="clock_title_analog" msgid="8409262532900918273">"അനലോഗ്"</string> - <!-- no translation found for keyguard_unlock_to_continue (7509503484250597743) --> - <skip /> + <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"തുടരാൻ നിങ്ങളുടെ ഉപകരണം അൺലോക്ക് ചെയ്യുക"</string> </resources> diff --git a/packages/SystemUI/res-keyguard/values-mr/strings.xml b/packages/SystemUI/res-keyguard/values-mr/strings.xml index 1454b20d3797..580b547ae309 100644 --- a/packages/SystemUI/res-keyguard/values-mr/strings.xml +++ b/packages/SystemUI/res-keyguard/values-mr/strings.xml @@ -78,12 +78,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="4720554342633852066">"डिव्हाइस रीस्टार्ट झाल्यावर पॅटर्न आवश्यक आहे"</string> <string name="kg_prompt_reason_restart_pin" msgid="1587671566498057656">"डिव्हाइस रीस्टार्ट झाल्यावर पिन आवश्यक आहे"</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"डिव्हाइस रीस्टार्ट झाल्यावर पासवर्ड आवश्यक आहे"</string> - <!-- no translation found for kg_prompt_reason_timeout_pattern (5514969660010197363) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_pin (4227962059353859376) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_password (8810879144143933690) --> - <skip /> + <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"अतिरिक्त सुरक्षेसाठी, त्याऐवजी पॅटर्न वापरा"</string> + <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"अतिरिक्त सुरक्षेसाठी, त्याऐवजी पिन वापरा"</string> + <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"अतिरिक्त सुरक्षेसाठी, त्याऐवजी पासवर्ड वापरा"</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"प्रशासकाद्वारे लॉक केलेले डिव्हाइस"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"डिव्हाइस मॅन्युअली लॉक केले होते"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"ओळखले नाही"</string> @@ -93,6 +90,5 @@ <string name="clock_title_default" msgid="6342735240617459864">"डीफॉल्ट"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"बबल"</string> <string name="clock_title_analog" msgid="8409262532900918273">"अॅनालॉग"</string> - <!-- no translation found for keyguard_unlock_to_continue (7509503484250597743) --> - <skip /> + <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"पुढे सुरू ठेवण्यासाठी तुमचे डिव्हाइस अनलॉक करा"</string> </resources> diff --git a/packages/SystemUI/res-keyguard/values-ms/strings.xml b/packages/SystemUI/res-keyguard/values-ms/strings.xml index a6d1af9368ec..c179dcb61f24 100644 --- a/packages/SystemUI/res-keyguard/values-ms/strings.xml +++ b/packages/SystemUI/res-keyguard/values-ms/strings.xml @@ -78,12 +78,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="4720554342633852066">"Corak diperlukan setelah peranti dimulakan semula"</string> <string name="kg_prompt_reason_restart_pin" msgid="1587671566498057656">"PIN diperlukan setelah peranti dimulakan semula"</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"Kata laluan diperlukan setelah peranti dimulakan semula"</string> - <!-- no translation found for kg_prompt_reason_timeout_pattern (5514969660010197363) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_pin (4227962059353859376) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_password (8810879144143933690) --> - <skip /> + <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Untuk keselamatan tambahan, gunakan corak"</string> + <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Untuk keselamatan tambahan, gunakan PIN"</string> + <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Untuk keselamatan tambahan, gunakan kata laluan"</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Peranti dikunci oleh pentadbir"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Peranti telah dikunci secara manual"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Tidak dikenali"</string> @@ -93,6 +90,5 @@ <string name="clock_title_default" msgid="6342735240617459864">"Lalai"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"Gelembung"</string> <string name="clock_title_analog" msgid="8409262532900918273">"Analog"</string> - <!-- no translation found for keyguard_unlock_to_continue (7509503484250597743) --> - <skip /> + <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Buka kunci peranti anda untuk meneruskan"</string> </resources> diff --git a/packages/SystemUI/res-keyguard/values-my/strings.xml b/packages/SystemUI/res-keyguard/values-my/strings.xml index 5617a1188a40..7c69bdd47d75 100644 --- a/packages/SystemUI/res-keyguard/values-my/strings.xml +++ b/packages/SystemUI/res-keyguard/values-my/strings.xml @@ -78,12 +78,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="4720554342633852066">"စက်ပစ္စည်းကို ပိတ်ပြီးပြန်ဖွင့်လိုက်သည့်အခါတွင် ပုံစံ လိုအပ်ပါသည်"</string> <string name="kg_prompt_reason_restart_pin" msgid="1587671566498057656">"စက်ပစ္စည်းကို ပိတ်ပြီးပြန်ဖွင့်လိုက်သည့်အခါတွင် ပင်နံပါတ် လိုအပ်ပါသည်"</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"စက်ပစ္စည်းကို ပိတ်ပြီးပြန်ဖွင့်လိုက်သည့်အခါတွင် စကားဝှက် လိုအပ်ပါသည်"</string> - <!-- no translation found for kg_prompt_reason_timeout_pattern (5514969660010197363) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_pin (4227962059353859376) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_password (8810879144143933690) --> - <skip /> + <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"ထပ်ဆောင်းလုံခြုံရေးအတွက် ၎င်းအစား ပုံစံသုံးပါ"</string> + <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"ထပ်ဆောင်းလုံခြုံရေးအတွက် ၎င်းအစား ပင်နံပါတ်သုံးပါ"</string> + <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"ထပ်ဆောင်းလုံခြုံရေးအတွက် ၎င်းအစား စကားဝှက်သုံးပါ"</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"စက်ပစ္စည်းကို စီမံခန့်ခွဲသူက လော့ခ်ချထားပါသည်"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"စက်ပစ္စည်းကို ကိုယ်တိုင်ကိုယ်ကျ လော့ခ်ချထားခဲ့သည်"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"မသိ"</string> @@ -93,6 +90,5 @@ <string name="clock_title_default" msgid="6342735240617459864">"မူလ"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"ပူဖောင်းကွက်"</string> <string name="clock_title_analog" msgid="8409262532900918273">"ရိုးရိုး"</string> - <!-- no translation found for keyguard_unlock_to_continue (7509503484250597743) --> - <skip /> + <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"ရှေ့ဆက်ရန် သင့်စက်ကိုဖွင့်ပါ"</string> </resources> diff --git a/packages/SystemUI/res-keyguard/values-nb/strings.xml b/packages/SystemUI/res-keyguard/values-nb/strings.xml index 0ad9e951b1e4..e394d1fc8135 100644 --- a/packages/SystemUI/res-keyguard/values-nb/strings.xml +++ b/packages/SystemUI/res-keyguard/values-nb/strings.xml @@ -78,12 +78,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="4720554342633852066">"Du må tegne mønsteret etter at enheten har startet på nytt"</string> <string name="kg_prompt_reason_restart_pin" msgid="1587671566498057656">"Du må skrive inn PIN-koden etter at enheten har startet på nytt"</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"Du må skrive inn passordet etter at enheten har startet på nytt"</string> - <!-- no translation found for kg_prompt_reason_timeout_pattern (5514969660010197363) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_pin (4227962059353859376) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_password (8810879144143933690) --> - <skip /> + <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Bruk mønster i stedet, for å øke sikkerheten"</string> + <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Bruk PIN-kode i stedet, for å øke sikkerheten"</string> + <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Bruk passord i stedet, for å øke sikkerheten"</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Enheten er låst av administratoren"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Enheten ble låst manuelt"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Ikke gjenkjent"</string> @@ -93,6 +90,5 @@ <string name="clock_title_default" msgid="6342735240617459864">"Standard"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"Boble"</string> <string name="clock_title_analog" msgid="8409262532900918273">"Analog"</string> - <!-- no translation found for keyguard_unlock_to_continue (7509503484250597743) --> - <skip /> + <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Lås opp enheten for å fortsette"</string> </resources> diff --git a/packages/SystemUI/res-keyguard/values-ne/strings.xml b/packages/SystemUI/res-keyguard/values-ne/strings.xml index 196b74a5658b..9f329e923e35 100644 --- a/packages/SystemUI/res-keyguard/values-ne/strings.xml +++ b/packages/SystemUI/res-keyguard/values-ne/strings.xml @@ -78,12 +78,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="4720554342633852066">"यन्त्र पुनः सुरु भएपछि ढाँचा आवश्यक पर्दछ"</string> <string name="kg_prompt_reason_restart_pin" msgid="1587671566498057656">"यन्त्र पुनः सुरु भएपछि PIN आवश्यक पर्दछ"</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"यन्त्र पुनः सुरु भएपछि पासवर्ड आवश्यक पर्दछ"</string> - <!-- no translation found for kg_prompt_reason_timeout_pattern (5514969660010197363) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_pin (4227962059353859376) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_password (8810879144143933690) --> - <skip /> + <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"अतिरिक्त सुरक्षाका लागि यो प्रमाणीकरण विधिको साटो प्याटर्न प्रयोग गर्नुहोस्"</string> + <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"अतिरिक्त सुरक्षाका लागि यो प्रमाणीकरण विधिको साटो पिन प्रयोग गर्नुहोस्"</string> + <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"अतिरिक्त सुरक्षाका लागि यो प्रमाणीकरण विधिको साटो पासवर्ड प्रयोग गर्नुहोस्"</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"प्रशासकले यन्त्रलाई लक गर्नुभएको छ"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"यन्त्रलाई म्यानुअल तरिकाले लक गरिएको थियो"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"पहिचान भएन"</string> @@ -93,6 +90,5 @@ <string name="clock_title_default" msgid="6342735240617459864">"डिफल्ट"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"बबल"</string> <string name="clock_title_analog" msgid="8409262532900918273">"एनालग"</string> - <!-- no translation found for keyguard_unlock_to_continue (7509503484250597743) --> - <skip /> + <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"आफ्नो डिभाइस अनलक गरी जारी राख्नुहोस्"</string> </resources> diff --git a/packages/SystemUI/res-keyguard/values-nl/strings.xml b/packages/SystemUI/res-keyguard/values-nl/strings.xml index 747b3bbd9128..579824a2a734 100644 --- a/packages/SystemUI/res-keyguard/values-nl/strings.xml +++ b/packages/SystemUI/res-keyguard/values-nl/strings.xml @@ -78,12 +78,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="4720554342633852066">"Patroon vereist nadat het apparaat opnieuw is opgestart"</string> <string name="kg_prompt_reason_restart_pin" msgid="1587671566498057656">"Pincode vereist nadat het apparaat opnieuw is opgestart"</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"Wachtwoord vereist nadat het apparaat opnieuw is opgestart"</string> - <!-- no translation found for kg_prompt_reason_timeout_pattern (5514969660010197363) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_pin (4227962059353859376) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_password (8810879144143933690) --> - <skip /> + <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Gebruik in plaats daarvan het patroon voor extra beveiliging"</string> + <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Gebruik in plaats daarvan de pincode voor extra beveiliging"</string> + <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Gebruik in plaats daarvan het wachtwoord voor extra beveiliging"</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Apparaat vergrendeld door beheerder"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Apparaat is handmatig vergrendeld"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Niet herkend"</string> @@ -93,6 +90,5 @@ <string name="clock_title_default" msgid="6342735240617459864">"Standaard"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"Bel"</string> <string name="clock_title_analog" msgid="8409262532900918273">"Analoog"</string> - <!-- no translation found for keyguard_unlock_to_continue (7509503484250597743) --> - <skip /> + <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Ontgrendel je apparaat om door te gaan"</string> </resources> diff --git a/packages/SystemUI/res-keyguard/values-pa/strings.xml b/packages/SystemUI/res-keyguard/values-pa/strings.xml index bf1a359a2c75..5c3fff71ba22 100644 --- a/packages/SystemUI/res-keyguard/values-pa/strings.xml +++ b/packages/SystemUI/res-keyguard/values-pa/strings.xml @@ -78,12 +78,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="4720554342633852066">"ਡੀਵਾਈਸ ਦੇ ਮੁੜ-ਚਾਲੂ ਹੋਣ \'ਤੇ ਪੈਟਰਨ ਦੀ ਲੋੜ ਹੈ"</string> <string name="kg_prompt_reason_restart_pin" msgid="1587671566498057656">"ਡੀਵਾਈਸ ਦੇ ਮੁੜ-ਚਾਲੂ ਹੋਣ \'ਤੇ ਪਿੰਨ ਦੀ ਲੋੜ ਹੈ"</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"ਡੀਵਾਈਸ ਦੇ ਮੁੜ-ਚਾਲੂ ਹੋਣ \'ਤੇ ਪਾਸਵਰਡ ਦੀ ਲੋੜ ਹੈ"</string> - <!-- no translation found for kg_prompt_reason_timeout_pattern (5514969660010197363) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_pin (4227962059353859376) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_password (8810879144143933690) --> - <skip /> + <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"ਵਧੀਕ ਸੁਰੱਖਿਆ ਲਈ, ਇਸਦੀ ਬਜਾਏ ਪੈਟਰਨ ਵਰਤੋ"</string> + <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"ਵਧੀਕ ਸੁਰੱਖਿਆ ਲਈ, ਇਸਦੀ ਬਜਾਏ ਪਿੰਨ ਵਰਤੋ"</string> + <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"ਵਧੀਕ ਸੁਰੱਖਿਆ ਲਈ, ਇਸਦੀ ਬਜਾਏ ਪਾਸਵਰਡ ਵਰਤੋ"</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"ਪ੍ਰਸ਼ਾਸਕ ਵੱਲੋਂ ਡੀਵਾਈਸ ਨੂੰ ਲਾਕ ਕੀਤਾ ਗਿਆ"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"ਡੀਵਾਈਸ ਨੂੰ ਹੱਥੀਂ ਲਾਕ ਕੀਤਾ ਗਿਆ"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"ਪਛਾਣ ਨਹੀਂ ਹੋਈ"</string> @@ -93,6 +90,5 @@ <string name="clock_title_default" msgid="6342735240617459864">"ਪੂਰਵ-ਨਿਰਧਾਰਿਤ"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"ਬੁਲਬੁਲਾ"</string> <string name="clock_title_analog" msgid="8409262532900918273">"ਐਨਾਲੌਗ"</string> - <!-- no translation found for keyguard_unlock_to_continue (7509503484250597743) --> - <skip /> + <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"ਜਾਰੀ ਰੱਖਣ ਲਈ ਆਪਣੇ ਡੀਵਾਈਸ ਨੂੰ ਅਣਲਾਕ ਕਰੋ"</string> </resources> diff --git a/packages/SystemUI/res-keyguard/values-pl/strings.xml b/packages/SystemUI/res-keyguard/values-pl/strings.xml index c49149baa93a..373638601416 100644 --- a/packages/SystemUI/res-keyguard/values-pl/strings.xml +++ b/packages/SystemUI/res-keyguard/values-pl/strings.xml @@ -78,12 +78,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="4720554342633852066">"Po ponownym uruchomieniu urządzenia wymagany jest wzór"</string> <string name="kg_prompt_reason_restart_pin" msgid="1587671566498057656">"Po ponownym uruchomieniu urządzenia wymagany jest kod PIN"</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"Po ponownym uruchomieniu urządzenia wymagane jest hasło"</string> - <!-- no translation found for kg_prompt_reason_timeout_pattern (5514969660010197363) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_pin (4227962059353859376) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_password (8810879144143933690) --> - <skip /> + <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Ze względów bezpieczeństwa użyj wzoru"</string> + <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Ze względów bezpieczeństwa użyj kodu PIN"</string> + <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Ze względów bezpieczeństwa użyj hasła"</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Urządzenie zablokowane przez administratora"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Urządzenie zostało zablokowane ręcznie"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Nie rozpoznano"</string> @@ -93,6 +90,5 @@ <string name="clock_title_default" msgid="6342735240617459864">"Domyślna"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"Bąbelkowy"</string> <string name="clock_title_analog" msgid="8409262532900918273">"Analogowy"</string> - <!-- no translation found for keyguard_unlock_to_continue (7509503484250597743) --> - <skip /> + <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Odblokuj urządzenie, aby kontynuować"</string> </resources> diff --git a/packages/SystemUI/res-keyguard/values-ro/strings.xml b/packages/SystemUI/res-keyguard/values-ro/strings.xml index 547224e781b1..67ae0fcf7a8b 100644 --- a/packages/SystemUI/res-keyguard/values-ro/strings.xml +++ b/packages/SystemUI/res-keyguard/values-ro/strings.xml @@ -78,12 +78,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="4720554342633852066">"Modelul este necesar după repornirea dispozitivului"</string> <string name="kg_prompt_reason_restart_pin" msgid="1587671566498057656">"Codul PIN este necesar după repornirea dispozitivului"</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"Parola este necesară după repornirea dispozitivului"</string> - <!-- no translation found for kg_prompt_reason_timeout_pattern (5514969660010197363) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_pin (4227962059353859376) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_password (8810879144143933690) --> - <skip /> + <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Pentru mai multă securitate, folosește modelul"</string> + <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Pentru mai multă securitate, folosește codul PIN"</string> + <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Pentru mai multă securitate, folosește parola"</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Dispozitiv blocat de administrator"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Dispozitivul a fost blocat manual"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Nu este recunoscut"</string> @@ -93,6 +90,5 @@ <string name="clock_title_default" msgid="6342735240617459864">"Prestabilit"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"Balon"</string> <string name="clock_title_analog" msgid="8409262532900918273">"Analogic"</string> - <!-- no translation found for keyguard_unlock_to_continue (7509503484250597743) --> - <skip /> + <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Deblochează dispozitivul pentru a continua"</string> </resources> diff --git a/packages/SystemUI/res-keyguard/values-si/strings.xml b/packages/SystemUI/res-keyguard/values-si/strings.xml index e5862c358002..82df4cb781cb 100644 --- a/packages/SystemUI/res-keyguard/values-si/strings.xml +++ b/packages/SystemUI/res-keyguard/values-si/strings.xml @@ -78,12 +78,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="4720554342633852066">"උපාංගය නැවත ආරම්භ වූ පසු රටාව අවශ්යයි"</string> <string name="kg_prompt_reason_restart_pin" msgid="1587671566498057656">"උපාංගය නැවත ආරම්භ වූ පසු PIN අංකය අවශ්යයි"</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"උපාංගය නැවත ආරම්භ වූ පසු මුරපදය අවශ්යයි"</string> - <!-- no translation found for kg_prompt_reason_timeout_pattern (5514969660010197363) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_pin (4227962059353859376) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_password (8810879144143933690) --> - <skip /> + <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"අතිරේක ආරක්ෂාව සඳහා, ඒ වෙනුවට රටාව භාවිතා කරන්න"</string> + <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"අතිරේක ආරක්ෂාව සඳහා, ඒ වෙනුවට PIN භාවිතා කරන්න"</string> + <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"අතිරේක ආරක්ෂාව සඳහා, ඒ වෙනුවට මුරපදය භාවිතා කරන්න"</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"ඔබගේ පරිපාලක විසින් උපාංගය අගුළු දමා ඇත"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"උපාංගය හස්තීයව අගුලු දමන ලදී"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"හඳුනා නොගන්නා ලදී"</string> @@ -93,6 +90,5 @@ <string name="clock_title_default" msgid="6342735240617459864">"පෙරනිමි"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"බුබුළ"</string> <string name="clock_title_analog" msgid="8409262532900918273">"ප්රතිසමය"</string> - <!-- no translation found for keyguard_unlock_to_continue (7509503484250597743) --> - <skip /> + <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"ඉදිරියට යාමට ඔබේ උපාංගය අගුළු හරින්න"</string> </resources> diff --git a/packages/SystemUI/res-keyguard/values-sk/strings.xml b/packages/SystemUI/res-keyguard/values-sk/strings.xml index efe4ec864448..2d8b3b15c42b 100644 --- a/packages/SystemUI/res-keyguard/values-sk/strings.xml +++ b/packages/SystemUI/res-keyguard/values-sk/strings.xml @@ -78,12 +78,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="4720554342633852066">"Po reštartovaní zariadenia musíte zadať bezpečnostný vzor"</string> <string name="kg_prompt_reason_restart_pin" msgid="1587671566498057656">"Po reštartovaní zariadenia musíte zadať kód PIN"</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"Po reštartovaní zariadenia musíte zadať heslo"</string> - <!-- no translation found for kg_prompt_reason_timeout_pattern (5514969660010197363) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_pin (4227962059353859376) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_password (8810879144143933690) --> - <skip /> + <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"V rámci zvýšenia zabezpečenia použite radšej vzor"</string> + <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"V rámci zvýšenia zabezpečenia použite radšej PIN"</string> + <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"V rámci zvýšenia zabezpečenia použite radšej heslo"</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Zariadenie zamkol správca"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Zariadenie bolo uzamknuté ručne"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Nerozpoznané"</string> @@ -93,6 +90,5 @@ <string name="clock_title_default" msgid="6342735240617459864">"Predvolený"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"Bublina"</string> <string name="clock_title_analog" msgid="8409262532900918273">"Analógový"</string> - <!-- no translation found for keyguard_unlock_to_continue (7509503484250597743) --> - <skip /> + <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Ak chcete pokračovať, odomknite zariadenie"</string> </resources> diff --git a/packages/SystemUI/res-keyguard/values-sl/strings.xml b/packages/SystemUI/res-keyguard/values-sl/strings.xml index 52726c225498..4c4ea062b50a 100644 --- a/packages/SystemUI/res-keyguard/values-sl/strings.xml +++ b/packages/SystemUI/res-keyguard/values-sl/strings.xml @@ -78,12 +78,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="4720554342633852066">"Po vnovičnem zagonu naprave je treba vnesti vzorec"</string> <string name="kg_prompt_reason_restart_pin" msgid="1587671566498057656">"Po vnovičnem zagonu naprave je treba vnesti kodo PIN"</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"Po vnovičnem zagonu naprave je treba vnesti geslo"</string> - <!-- no translation found for kg_prompt_reason_timeout_pattern (5514969660010197363) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_pin (4227962059353859376) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_password (8810879144143933690) --> - <skip /> + <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Za dodatno varnost raje uporabite vzorec."</string> + <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Za dodatno varnost raje uporabite kodo PIN."</string> + <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Za dodatno varnost raje uporabite geslo."</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Napravo je zaklenil skrbnik"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Naprava je bila ročno zaklenjena"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Ni prepoznano"</string> @@ -93,6 +90,5 @@ <string name="clock_title_default" msgid="6342735240617459864">"Privzeto"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"Mehurček"</string> <string name="clock_title_analog" msgid="8409262532900918273">"Analogno"</string> - <!-- no translation found for keyguard_unlock_to_continue (7509503484250597743) --> - <skip /> + <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Za nadaljevanje odklenite napravo"</string> </resources> diff --git a/packages/SystemUI/res-keyguard/values-sq/strings.xml b/packages/SystemUI/res-keyguard/values-sq/strings.xml index a0a55944eced..78e217dfe331 100644 --- a/packages/SystemUI/res-keyguard/values-sq/strings.xml +++ b/packages/SystemUI/res-keyguard/values-sq/strings.xml @@ -78,12 +78,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="4720554342633852066">"Kërkohet motivi pas rinisjes së pajisjes"</string> <string name="kg_prompt_reason_restart_pin" msgid="1587671566498057656">"Kërkohet kodi PIN pas rinisjes së pajisjes"</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"Kërkohet fjalëkalimi pas rinisjes së pajisjes"</string> - <!-- no translation found for kg_prompt_reason_timeout_pattern (5514969660010197363) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_pin (4227962059353859376) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_password (8810879144143933690) --> - <skip /> + <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Për më shumë siguri, përdor motivin më mirë"</string> + <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Për më shumë siguri, përdor kodin PIN më mirë"</string> + <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Për më shumë siguri, përdor fjalëkalimin më mirë"</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Pajisja është e kyçur nga administratori"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Pajisja është kyçur manualisht"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Nuk njihet"</string> @@ -93,6 +90,5 @@ <string name="clock_title_default" msgid="6342735240617459864">"E parazgjedhur"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"Flluskë"</string> <string name="clock_title_analog" msgid="8409262532900918273">"Analoge"</string> - <!-- no translation found for keyguard_unlock_to_continue (7509503484250597743) --> - <skip /> + <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Shkyç pajisjen tënde për të vazhduar"</string> </resources> diff --git a/packages/SystemUI/res-keyguard/values-sr/strings.xml b/packages/SystemUI/res-keyguard/values-sr/strings.xml index e634fdcb586e..80d8755b8fee 100644 --- a/packages/SystemUI/res-keyguard/values-sr/strings.xml +++ b/packages/SystemUI/res-keyguard/values-sr/strings.xml @@ -78,12 +78,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="4720554342633852066">"Треба да унесете шаблон када се уређај поново покрене"</string> <string name="kg_prompt_reason_restart_pin" msgid="1587671566498057656">"Треба да унесете PIN када се уређај поново покрене"</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"Треба да унесете лозинку када се уређај поново покрене"</string> - <!-- no translation found for kg_prompt_reason_timeout_pattern (5514969660010197363) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_pin (4227962059353859376) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_password (8810879144143933690) --> - <skip /> + <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"За додатну безбедност користите шаблон"</string> + <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"За додатну безбедност користите PIN"</string> + <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"За додатну безбедност користите лозинку"</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Администратор је закључао уређај"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Уређај је ручно закључан"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Није препознат"</string> @@ -93,6 +90,5 @@ <string name="clock_title_default" msgid="6342735240617459864">"Подразумевани"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"Мехурићи"</string> <string name="clock_title_analog" msgid="8409262532900918273">"Аналогни"</string> - <!-- no translation found for keyguard_unlock_to_continue (7509503484250597743) --> - <skip /> + <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Откључајте уређај да бисте наставили"</string> </resources> diff --git a/packages/SystemUI/res-keyguard/values-sv/strings.xml b/packages/SystemUI/res-keyguard/values-sv/strings.xml index fc9beb1286a6..b5548b95ba56 100644 --- a/packages/SystemUI/res-keyguard/values-sv/strings.xml +++ b/packages/SystemUI/res-keyguard/values-sv/strings.xml @@ -78,12 +78,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="4720554342633852066">"Du måste rita mönster när du har startat om enheten"</string> <string name="kg_prompt_reason_restart_pin" msgid="1587671566498057656">"Du måste ange pinkod när du har startat om enheten"</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"Du måste ange lösenord när du har startat om enheten"</string> - <!-- no translation found for kg_prompt_reason_timeout_pattern (5514969660010197363) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_pin (4227962059353859376) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_password (8810879144143933690) --> - <skip /> + <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"För ytterligare säkerhet använder du mönstret i stället"</string> + <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"För ytterligare säkerhet använder du pinkoden i stället"</string> + <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"För ytterligare säkerhet använder du lösenordet i stället"</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Administratören har låst enheten"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Enheten har låsts manuellt"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Identifierades inte"</string> @@ -93,6 +90,5 @@ <string name="clock_title_default" msgid="6342735240617459864">"Standard"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"Bubbla"</string> <string name="clock_title_analog" msgid="8409262532900918273">"Analog"</string> - <!-- no translation found for keyguard_unlock_to_continue (7509503484250597743) --> - <skip /> + <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Lås upp enheten för att fortsätta"</string> </resources> diff --git a/packages/SystemUI/res-keyguard/values-sw/strings.xml b/packages/SystemUI/res-keyguard/values-sw/strings.xml index bcab24b013bb..02af18ecb0a5 100644 --- a/packages/SystemUI/res-keyguard/values-sw/strings.xml +++ b/packages/SystemUI/res-keyguard/values-sw/strings.xml @@ -78,12 +78,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="4720554342633852066">"Unafaa kuchora mchoro baada ya kuwasha kifaa upya"</string> <string name="kg_prompt_reason_restart_pin" msgid="1587671566498057656">"Unafaa kuweka PIN baada ya kuwasha kifaa upya"</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"Unafaa kuweka nenosiri baada ya kuwasha kifaa upya"</string> - <!-- no translation found for kg_prompt_reason_timeout_pattern (5514969660010197363) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_pin (4227962059353859376) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_password (8810879144143933690) --> - <skip /> + <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Kwa usalama wa ziada, tumia mchoro badala yake"</string> + <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Kwa usalama wa ziada, tumia PIN badala yake"</string> + <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Kwa usalama wa ziada, tumia nenosiri badala yake"</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Msimamizi amefunga kifaa"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Umefunga kifaa mwenyewe"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Haitambuliwi"</string> @@ -93,6 +90,5 @@ <string name="clock_title_default" msgid="6342735240617459864">"Chaguomsingi"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"Kiputo"</string> <string name="clock_title_analog" msgid="8409262532900918273">"Analogi"</string> - <!-- no translation found for keyguard_unlock_to_continue (7509503484250597743) --> - <skip /> + <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Fungua kifaa chako ili uendelee"</string> </resources> diff --git a/packages/SystemUI/res-keyguard/values-ta/strings.xml b/packages/SystemUI/res-keyguard/values-ta/strings.xml index 88d5760e7f6c..0d32d46626c4 100644 --- a/packages/SystemUI/res-keyguard/values-ta/strings.xml +++ b/packages/SystemUI/res-keyguard/values-ta/strings.xml @@ -78,12 +78,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="4720554342633852066">"சாதனத்தை மீண்டும் தொடங்கியதும், பேட்டர்னை வரைய வேண்டும்"</string> <string name="kg_prompt_reason_restart_pin" msgid="1587671566498057656">"சாதனத்தை மீண்டும் தொடங்கியதும், பின்னை உள்ளிட வேண்டும்"</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"சாதனத்தை மீண்டும் தொடங்கியதும், கடவுச்சொல்லை உள்ளிட வேண்டும்"</string> - <!-- no translation found for kg_prompt_reason_timeout_pattern (5514969660010197363) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_pin (4227962059353859376) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_password (8810879144143933690) --> - <skip /> + <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"கூடுதல் பாதுகாப்பிற்குப் பேட்டர்னைப் பயன்படுத்தவும்"</string> + <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"கூடுதல் பாதுகாப்பிற்குப் பின்னை (PIN) பயன்படுத்தவும்"</string> + <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"கூடுதல் பாதுகாப்பிற்குக் கடவுச்சொல்லைப் பயன்படுத்தவும்"</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"நிர்வாகி சாதனத்தைப் பூட்டியுள்ளார்"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"பயனர் சாதனத்தைப் பூட்டியுள்ளார்"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"அடையாளங்காணபடவில்லை"</string> @@ -93,6 +90,5 @@ <string name="clock_title_default" msgid="6342735240617459864">"இயல்பு"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"பபிள்"</string> <string name="clock_title_analog" msgid="8409262532900918273">"அனலாக்"</string> - <!-- no translation found for keyguard_unlock_to_continue (7509503484250597743) --> - <skip /> + <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"தொடர, சாதனத்தை அன்லாக் செய்யுங்கள்"</string> </resources> diff --git a/packages/SystemUI/res-keyguard/values-te/strings.xml b/packages/SystemUI/res-keyguard/values-te/strings.xml index 3a0111a193bd..f519daf10fd5 100644 --- a/packages/SystemUI/res-keyguard/values-te/strings.xml +++ b/packages/SystemUI/res-keyguard/values-te/strings.xml @@ -78,12 +78,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="4720554342633852066">"పరికరాన్ని పునఃప్రారంభించిన తర్వాత నమూనాను గీయాలి"</string> <string name="kg_prompt_reason_restart_pin" msgid="1587671566498057656">"డివైజ్ను పునఃప్రారంభించిన తర్వాత పిన్ నమోదు చేయాలి"</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"పరికరాన్ని పునఃప్రారంభించిన తర్వాత పాస్వర్డ్ను నమోదు చేయాలి"</string> - <!-- no translation found for kg_prompt_reason_timeout_pattern (5514969660010197363) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_pin (4227962059353859376) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_password (8810879144143933690) --> - <skip /> + <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"అదనపు సెక్యూరిటీ కోసం, బదులుగా ఆకృతిని ఉపయోగించండి"</string> + <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"అదనపు సెక్యూరిటీ కోసం, బదులుగా PINను ఉపయోగించండి"</string> + <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"అదనపు సెక్యూరిటీ కోసం, బదులుగా పాస్వర్డ్ను ఉపయోగించండి"</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"పరికరం నిర్వాహకుల ద్వారా లాక్ చేయబడింది"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"పరికరం మాన్యువల్గా లాక్ చేయబడింది"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"గుర్తించలేదు"</string> @@ -93,6 +90,5 @@ <string name="clock_title_default" msgid="6342735240617459864">"ఆటోమేటిక్"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"బబుల్"</string> <string name="clock_title_analog" msgid="8409262532900918273">"ఎనలాగ్"</string> - <!-- no translation found for keyguard_unlock_to_continue (7509503484250597743) --> - <skip /> + <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"కొనసాగించడానికి మీ పరికరాన్ని అన్లాక్ చేయండి"</string> </resources> diff --git a/packages/SystemUI/res-keyguard/values-tr/strings.xml b/packages/SystemUI/res-keyguard/values-tr/strings.xml index e5207623adc2..80dae8c9f124 100644 --- a/packages/SystemUI/res-keyguard/values-tr/strings.xml +++ b/packages/SystemUI/res-keyguard/values-tr/strings.xml @@ -78,12 +78,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="4720554342633852066">"Cihaz yeniden başladıktan sonra desen gerekir"</string> <string name="kg_prompt_reason_restart_pin" msgid="1587671566498057656">"Cihaz yeniden başladıktan sonra PIN gerekir"</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"Cihaz yeniden başladıktan sonra şifre gerekir"</string> - <!-- no translation found for kg_prompt_reason_timeout_pattern (5514969660010197363) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_pin (4227962059353859376) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_password (8810879144143933690) --> - <skip /> + <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Ek güvenlik için bunun yerine desen kullanın"</string> + <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Ek güvenlik için bunun yerine PIN kullanın"</string> + <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Ek güvenlik için bunun yerine şifre kullanın"</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Cihaz, yönetici tarafından kilitlendi"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Cihazın manuel olarak kilitlendi"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Tanınmadı"</string> @@ -93,6 +90,5 @@ <string name="clock_title_default" msgid="6342735240617459864">"Varsayılan"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"Baloncuk"</string> <string name="clock_title_analog" msgid="8409262532900918273">"Analog"</string> - <!-- no translation found for keyguard_unlock_to_continue (7509503484250597743) --> - <skip /> + <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Devam etmek için cihazınızın kilidini açın"</string> </resources> diff --git a/packages/SystemUI/res-keyguard/values-uk/strings.xml b/packages/SystemUI/res-keyguard/values-uk/strings.xml index 613181d6c96f..ff594ae88905 100644 --- a/packages/SystemUI/res-keyguard/values-uk/strings.xml +++ b/packages/SystemUI/res-keyguard/values-uk/strings.xml @@ -78,12 +78,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="4720554342633852066">"Після перезавантаження пристрою потрібно ввести ключ"</string> <string name="kg_prompt_reason_restart_pin" msgid="1587671566498057656">"Після перезавантаження пристрою потрібно ввести PIN-код"</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"Після перезавантаження пристрою потрібно ввести пароль"</string> - <!-- no translation found for kg_prompt_reason_timeout_pattern (5514969660010197363) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_pin (4227962059353859376) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_password (8810879144143933690) --> - <skip /> + <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"З міркувань додаткової безпеки скористайтеся ключем"</string> + <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"З міркувань додаткової безпеки скористайтеся PIN-кодом"</string> + <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"З міркувань додаткової безпеки скористайтеся паролем"</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Адміністратор заблокував пристрій"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Пристрій заблоковано вручну"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Не розпізнано"</string> @@ -93,6 +90,5 @@ <string name="clock_title_default" msgid="6342735240617459864">"За умовчанням"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"Бульбашковий"</string> <string name="clock_title_analog" msgid="8409262532900918273">"Аналоговий"</string> - <!-- no translation found for keyguard_unlock_to_continue (7509503484250597743) --> - <skip /> + <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Розблокуйте пристрій, щоб продовжити"</string> </resources> diff --git a/packages/SystemUI/res-keyguard/values-ur/strings.xml b/packages/SystemUI/res-keyguard/values-ur/strings.xml index a122f8537611..9308260b790f 100644 --- a/packages/SystemUI/res-keyguard/values-ur/strings.xml +++ b/packages/SystemUI/res-keyguard/values-ur/strings.xml @@ -78,12 +78,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="4720554342633852066">"آلہ دوبارہ چالو ہونے کے بعد پیٹرن درکار ہوتا ہے"</string> <string name="kg_prompt_reason_restart_pin" msgid="1587671566498057656">"آلہ دوبارہ چالو ہونے کے بعد PIN درکار ہوتا ہے"</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"آلہ دوبارہ چالو ہونے کے بعد پاس ورڈ درکار ہوتا ہے"</string> - <!-- no translation found for kg_prompt_reason_timeout_pattern (5514969660010197363) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_pin (4227962059353859376) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_password (8810879144143933690) --> - <skip /> + <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"اضافی سیکیورٹی کے لئے، اس کے بجائے پیٹرن استعمال کریں"</string> + <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"اضافی سیکیورٹی کے لئے، اس کے بجائے PIN استعمال کریں"</string> + <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"اضافی سیکیورٹی کے لئے، اس کے بجائے پاس ورڈ استعمال کریں"</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"آلہ منتظم کی جانب سے مقفل ہے"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"آلہ کو دستی طور پر مقفل کیا گیا تھا"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"تسلیم شدہ نہیں ہے"</string> @@ -93,6 +90,5 @@ <string name="clock_title_default" msgid="6342735240617459864">"ڈیفالٹ"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"بلبلہ"</string> <string name="clock_title_analog" msgid="8409262532900918273">"اینالاگ"</string> - <!-- no translation found for keyguard_unlock_to_continue (7509503484250597743) --> - <skip /> + <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"جاری رکھنے کے لئے اپنا آلہ غیر مقفل کریں"</string> </resources> diff --git a/packages/SystemUI/res-keyguard/values-vi/strings.xml b/packages/SystemUI/res-keyguard/values-vi/strings.xml index e7c9295815ad..2771adaba169 100644 --- a/packages/SystemUI/res-keyguard/values-vi/strings.xml +++ b/packages/SystemUI/res-keyguard/values-vi/strings.xml @@ -78,12 +78,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="4720554342633852066">"Yêu cầu hình mở khóa sau khi thiết bị khởi động lại"</string> <string name="kg_prompt_reason_restart_pin" msgid="1587671566498057656">"Yêu cầu mã PIN sau khi thiết bị khởi động lại"</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"Yêu cầu mật khẩu sau khi thiết bị khởi động lại"</string> - <!-- no translation found for kg_prompt_reason_timeout_pattern (5514969660010197363) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_pin (4227962059353859376) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_password (8810879144143933690) --> - <skip /> + <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Để tăng cường bảo mật, hãy sử dụng hình mở khoá"</string> + <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Để tăng cường bảo mật, hãy sử dụng mã PIN"</string> + <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Để tăng cường bảo mật, hãy sử dụng mật khẩu"</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Thiết bị đã bị quản trị viên khóa"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Thiết bị đã bị khóa theo cách thủ công"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Không nhận dạng được"</string> @@ -93,6 +90,5 @@ <string name="clock_title_default" msgid="6342735240617459864">"Mặc định"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"Bong bóng"</string> <string name="clock_title_analog" msgid="8409262532900918273">"Đồng hồ kim"</string> - <!-- no translation found for keyguard_unlock_to_continue (7509503484250597743) --> - <skip /> + <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Mở khoá thiết bị của bạn để tiếp tục"</string> </resources> diff --git a/packages/SystemUI/res-keyguard/values-zh-rCN/strings.xml b/packages/SystemUI/res-keyguard/values-zh-rCN/strings.xml index d37d645b15ee..fb9283801ad2 100644 --- a/packages/SystemUI/res-keyguard/values-zh-rCN/strings.xml +++ b/packages/SystemUI/res-keyguard/values-zh-rCN/strings.xml @@ -78,12 +78,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="4720554342633852066">"重启设备后需要绘制解锁图案"</string> <string name="kg_prompt_reason_restart_pin" msgid="1587671566498057656">"重启设备后需要输入 PIN 码"</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"重启设备后需要输入密码"</string> - <!-- no translation found for kg_prompt_reason_timeout_pattern (5514969660010197363) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_pin (4227962059353859376) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_password (8810879144143933690) --> - <skip /> + <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"为增强安全性,请改用图案"</string> + <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"为增强安全性,请改用 PIN 码"</string> + <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"为增强安全性,请改用密码"</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"管理员已锁定设备"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"此设备已手动锁定"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"无法识别"</string> @@ -93,6 +90,5 @@ <string name="clock_title_default" msgid="6342735240617459864">"默认"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"泡泡"</string> <string name="clock_title_analog" msgid="8409262532900918273">"指针"</string> - <!-- no translation found for keyguard_unlock_to_continue (7509503484250597743) --> - <skip /> + <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"解锁设备才能继续操作"</string> </resources> diff --git a/packages/SystemUI/res-keyguard/values-zh-rHK/strings.xml b/packages/SystemUI/res-keyguard/values-zh-rHK/strings.xml index 9dbb8f2dac73..49050e54b3ac 100644 --- a/packages/SystemUI/res-keyguard/values-zh-rHK/strings.xml +++ b/packages/SystemUI/res-keyguard/values-zh-rHK/strings.xml @@ -78,12 +78,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="4720554342633852066">"裝置重新啟動後,必須畫出上鎖圖案才能使用"</string> <string name="kg_prompt_reason_restart_pin" msgid="1587671566498057656">"裝置重新啟動後,必須輸入 PIN 碼才能使用"</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"裝置重新啟動後,必須輸入密碼才能使用"</string> - <!-- no translation found for kg_prompt_reason_timeout_pattern (5514969660010197363) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_pin (4227962059353859376) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_password (8810879144143933690) --> - <skip /> + <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"為提升安全性,請改用圖案"</string> + <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"為提升安全性,請改用 PIN"</string> + <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"為提升安全性,請改用密碼"</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"裝置已由管理員鎖定"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"使用者已手動將裝置上鎖"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"未能識別"</string> @@ -93,6 +90,5 @@ <string name="clock_title_default" msgid="6342735240617459864">"預設"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"泡泡"</string> <string name="clock_title_analog" msgid="8409262532900918273">"指針"</string> - <!-- no translation found for keyguard_unlock_to_continue (7509503484250597743) --> - <skip /> + <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"解鎖裝置以繼續"</string> </resources> diff --git a/packages/SystemUI/res-keyguard/values-zh-rTW/strings.xml b/packages/SystemUI/res-keyguard/values-zh-rTW/strings.xml index ebb88e13194b..e5a363c3633d 100644 --- a/packages/SystemUI/res-keyguard/values-zh-rTW/strings.xml +++ b/packages/SystemUI/res-keyguard/values-zh-rTW/strings.xml @@ -78,12 +78,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="4720554342633852066">"裝置重新啟動後需要畫出解鎖圖案"</string> <string name="kg_prompt_reason_restart_pin" msgid="1587671566498057656">"裝置重新啟動後需要輸入 PIN 碼"</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"裝置重新啟動後需要輸入密碼"</string> - <!-- no translation found for kg_prompt_reason_timeout_pattern (5514969660010197363) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_pin (4227962059353859376) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_password (8810879144143933690) --> - <skip /> + <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"為強化安全性,請改用解鎖圖案"</string> + <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"為強化安全性,請改用 PIN 碼"</string> + <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"為強化安全性,請改用密碼"</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"管理員已鎖定裝置"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"裝置已手動鎖定"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"無法識別"</string> @@ -93,6 +90,5 @@ <string name="clock_title_default" msgid="6342735240617459864">"預設"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"泡泡"</string> <string name="clock_title_analog" msgid="8409262532900918273">"類比"</string> - <!-- no translation found for keyguard_unlock_to_continue (7509503484250597743) --> - <skip /> + <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"解鎖裝置才能繼續操作"</string> </resources> diff --git a/packages/SystemUI/res-keyguard/values-zu/strings.xml b/packages/SystemUI/res-keyguard/values-zu/strings.xml index 57e56f713536..72ca6c0f8efc 100644 --- a/packages/SystemUI/res-keyguard/values-zu/strings.xml +++ b/packages/SystemUI/res-keyguard/values-zu/strings.xml @@ -78,12 +78,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="4720554342633852066">"Iphethini iyadingeka ngemuva kokuqala kabusha kwedivayisi"</string> <string name="kg_prompt_reason_restart_pin" msgid="1587671566498057656">"Iphinikhodi iyadingeka ngemuva kokuqala kabusha kwedivayisi"</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"Iphasiwedi iyadingeka ngemuva kokuqala kabusha kwedivayisi"</string> - <!-- no translation found for kg_prompt_reason_timeout_pattern (5514969660010197363) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_pin (4227962059353859376) --> - <skip /> - <!-- no translation found for kg_prompt_reason_timeout_password (8810879144143933690) --> - <skip /> + <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Ukuze uthole ukuvikeleka okwengeziwe, sebenzisa iphetheni esikhundleni salokho"</string> + <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Ukuze uthole ukuvikeleka okwengeziwe, sebenzisa i-PIN esikhundleni salokho"</string> + <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Ukuze uthole ukuvikeleka okwengeziwe, sebenzisa iphasiwedi esikhundleni salokho"</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Idivayisi ikhiywe ngumlawuli"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Idivayisi ikhiywe ngokwenza"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Akwaziwa"</string> @@ -93,6 +90,5 @@ <string name="clock_title_default" msgid="6342735240617459864">"Okuzenzekelayo"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"Ibhamuza"</string> <string name="clock_title_analog" msgid="8409262532900918273">"I-Analog"</string> - <!-- no translation found for keyguard_unlock_to_continue (7509503484250597743) --> - <skip /> + <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Vula idivayisi yakho ukuze uqhubeke"</string> </resources> diff --git a/packages/SystemUI/res/layout/media_session_view.xml b/packages/SystemUI/res/layout/media_session_view.xml index c526d9cc8dd3..9b8b611558fe 100644 --- a/packages/SystemUI/res/layout/media_session_view.xml +++ b/packages/SystemUI/res/layout/media_session_view.xml @@ -44,6 +44,15 @@ android:background="@drawable/qs_media_outline_album_bg" /> + <com.android.systemui.ripple.MultiRippleView + android:id="@+id/touch_ripple_view" + android:layout_width="match_parent" + android:layout_height="@dimen/qs_media_session_height_expanded" + app:layout_constraintStart_toStartOf="@id/album_art" + app:layout_constraintEnd_toEndOf="@id/album_art" + app:layout_constraintTop_toTopOf="@id/album_art" + app:layout_constraintBottom_toBottomOf="@id/album_art" /> + <!-- Guideline for output switcher --> <androidx.constraintlayout.widget.Guideline android:id="@+id/center_vertical_guideline" diff --git a/packages/SystemUI/res/values-af/strings.xml b/packages/SystemUI/res/values-af/strings.xml index 3dc85d70ffb2..2f2780b3546d 100644 --- a/packages/SystemUI/res/values-af/strings.xml +++ b/packages/SystemUI/res/values-af/strings.xml @@ -248,7 +248,8 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"Helderheid"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"Kleuromkering"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"Kleurregstelling"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Gebruikerinstellings"</string> + <!-- no translation found for quick_settings_more_user_settings (7634653308485206306) --> + <skip /> <string name="quick_settings_done" msgid="2163641301648855793">"Klaar"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Maak toe"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"Gekoppel"</string> @@ -727,6 +728,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"Skakel mobiele data af?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"Jy sal nie deur <xliff:g id="CARRIER">%s</xliff:g> toegang tot data of die internet hê nie. Internet sal net deur Wi-Fi beskikbaar wees."</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"jou diensverskaffer"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"Instellings kan nie jou antwoord verifieer nie omdat \'n program \'n toestemmingversoek verberg."</string> <string name="slice_permission_title" msgid="3262615140094151017">"Laat <xliff:g id="APP_0">%1$s</xliff:g> toe om <xliff:g id="APP_2">%2$s</xliff:g>-skyfies te wys?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"– Dit kan inligting van <xliff:g id="APP">%1$s</xliff:g> af lees"</string> @@ -785,12 +794,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"Vergrootglasvensterinstellings"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Tik om toeganklikheidkenmerke oop te maak Pasmaak of vervang knoppie in Instellings.\n\n"<annotation id="link">"Bekyk instellings"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Skuif knoppie na kant om dit tydelik te versteek"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Beweeg na links bo"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Beweeg na regs bo"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Beweeg na links onder"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Beweeg na regs onder"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Beweeg na rand en versteek"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Beweeg weg van rand en wys"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"wissel"</string> <string name="quick_controls_title" msgid="6839108006171302273">"Toestelkontroles"</string> <string name="controls_providers_title" msgid="6879775889857085056">"Kies program om kontroles by te voeg"</string> @@ -933,6 +948,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"Mobiele data"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"Gekoppel"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"Mobiele data sal nie outomaties koppel nie"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"Geen verbinding nie"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Geen ander netwerke beskikbaar nie"</string> diff --git a/packages/SystemUI/res/values-am/strings.xml b/packages/SystemUI/res/values-am/strings.xml index fb60f9b8aedd..3ccb68668514 100644 --- a/packages/SystemUI/res/values-am/strings.xml +++ b/packages/SystemUI/res/values-am/strings.xml @@ -248,7 +248,8 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"ብሩህነት"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"ተቃራኒ ቀለም"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"የቀለም ማስተካከያ"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"የተጠቃሚ ቅንብሮች"</string> + <!-- no translation found for quick_settings_more_user_settings (7634653308485206306) --> + <skip /> <string name="quick_settings_done" msgid="2163641301648855793">"ተከናውኗል"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"ዝጋ"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"ተገናኝቷል"</string> @@ -727,6 +728,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"የተንቀሳቃሽ ስልክ ውሂብ ይጥፋ?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"በ<xliff:g id="CARRIER">%s</xliff:g> በኩል የውሂብ ወይም የበይነመረቡ መዳረሻ አይኖረዎትም። በይነመረብ በWi-Fi በኩል ብቻ ነው የሚገኝ የሚሆነው።"</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"የእርስዎ አገልግሎት አቅራቢ"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"አንድ መተግበሪያ የፍቃድ ጥያቄ እያገደ ስለሆነ ቅንብሮች ጥያቄዎን ማረጋገጥ አይችሉም።"</string> <string name="slice_permission_title" msgid="3262615140094151017">"<xliff:g id="APP_0">%1$s</xliff:g> የ<xliff:g id="APP_2">%2$s</xliff:g> ቁራጮችን እንዲያሳይ ይፈቀድለት?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"- ከ<xliff:g id="APP">%1$s</xliff:g> የመጣ መረጃን ማንበብ ይችላል"</string> @@ -785,12 +794,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"የማጉያ መስኮት ቅንብሮች"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"የተደራሽነት ባህሪያትን ለመክፈት መታ ያድርጉ። ይህንን አዝራር በቅንብሮች ውስጥ ያብጁ ወይም ይተኩ።\n\n"<annotation id="link">"ቅንብሮችን አሳይ"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"ለጊዜው ለመደበቅ አዝራሩን ወደ ጠርዝ ያንቀሳቅሱ"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"ወደ ላይኛው ግራ አንቀሳቅስ"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"ወደ ላይኛው ቀኝ አንቀሳቅስ"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"የግርጌውን ግራ አንቀሳቅስ"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"ታችኛውን ቀኝ አንቀሳቅስ"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"ወደ ጠርዝ አንቀሳቅስ እና ደደብቅ"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"ጠርዙን ወደ ውጭ አንቀሳቅስ እና አሳይ"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"ቀያይር"</string> <string name="quick_controls_title" msgid="6839108006171302273">"የመሣሪያ መቆጣጠሪያዎች"</string> <string name="controls_providers_title" msgid="6879775889857085056">"መቆጣጠሪያዎችን ለማከል መተግበሪያ ይምረጡ"</string> @@ -933,6 +948,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"የተንቀሳቃሽ ስልክ ውሂብ"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"ተገናኝቷል"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"የተንቀሳቃሽ ስልክ ውሂብ በራስ-ሰር አይገናኝም"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"ግንኙነት የለም"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"ሌላ አውታረ መረብ የሉም"</string> diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml index f8567c7b7868..c90fb254d3f6 100644 --- a/packages/SystemUI/res/values-ar/strings.xml +++ b/packages/SystemUI/res/values-ar/strings.xml @@ -248,7 +248,8 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"السطوع"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"قلب الألوان"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"تصحيح الألوان"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"إعدادات المستخدم"</string> + <!-- no translation found for quick_settings_more_user_settings (7634653308485206306) --> + <skip /> <string name="quick_settings_done" msgid="2163641301648855793">"تم"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"إغلاق"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"متصل"</string> @@ -727,6 +728,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"هل تريد إيقاف بيانات الجوّال؟"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"لن تتمكّن من استخدام البيانات أو الإنترنت من خلال <xliff:g id="CARRIER">%s</xliff:g>. ولن يتوفر اتصال الإنترنت إلا عبر Wi-Fi."</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"مشغّل شبكة الجوّال"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"لا يمكن للإعدادات التحقق من ردك لأن هناك تطبيقًا يحجب طلب الإذن."</string> <string name="slice_permission_title" msgid="3262615140094151017">"هل تريد السماح لتطبيق <xliff:g id="APP_0">%1$s</xliff:g> بعرض شرائح <xliff:g id="APP_2">%2$s</xliff:g>؟"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"- يستطيع قراءة المعلومات من <xliff:g id="APP">%1$s</xliff:g>"</string> @@ -785,12 +794,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"إعدادات نافذة مكبّر الشاشة"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"انقر لفتح ميزات تسهيل الاستخدام. يمكنك تخصيص هذا الزر أو استبداله من الإعدادات.\n\n"<annotation id="link">"عرض الإعدادات"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"يمكنك نقل الزر إلى الحافة لإخفائه مؤقتًا."</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"نقل إلى أعلى يمين الشاشة"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"نقل إلى أعلى يسار الشاشة"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"نقل إلى أسفل يمين الشاشة"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"نقل إلى أسفل يسار الشاشة"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"نقله إلى الحافة وإخفاؤه"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"نقله إلى خارج الحافة وإظهاره"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"إيقاف/تفعيل"</string> <string name="quick_controls_title" msgid="6839108006171302273">"التحكم بالجهاز"</string> <string name="controls_providers_title" msgid="6879775889857085056">"اختيار تطبيق لإضافة عناصر التحكّم"</string> @@ -933,6 +948,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"بيانات الجوّال"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"متصلة بالإنترنت"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"لن يتم تلقائيًا الاتصال ببيانات الجوّال."</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"لا يتوفّر اتصال بالإنترنت"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"لا تتوفّر شبكات أخرى."</string> diff --git a/packages/SystemUI/res/values-as/strings.xml b/packages/SystemUI/res/values-as/strings.xml index 4fca5f2e1541..c363eee10440 100644 --- a/packages/SystemUI/res/values-as/strings.xml +++ b/packages/SystemUI/res/values-as/strings.xml @@ -248,7 +248,8 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"উজ্জ্বলতা"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"ৰং বিপৰীতকৰণ"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"ৰং শুধৰণী"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"ব্যৱহাৰকাৰীৰ ছেটিং"</string> + <!-- no translation found for quick_settings_more_user_settings (7634653308485206306) --> + <skip /> <string name="quick_settings_done" msgid="2163641301648855793">"সম্পন্ন কৰা হ’ল"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"বন্ধ কৰক"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"সংযোগ কৰা হ’ল"</string> @@ -727,6 +728,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"ম’বাইল ডেটা অফ কৰিবনে?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"আপুনি <xliff:g id="CARRIER">%s</xliff:g>ৰ জৰিয়তে ডেটা সংযোগ বা ইণ্টাৰনেট সংযোগ নাপাব। কেৱল ৱাই-ফাইৰ যোগেৰে ইণ্টাৰনেট উপলব্ধ হ\'ব।"</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"আপোনাৰ বাহক"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"এটা এপে অনুমতি বিচাৰি কৰা অনুৰোধ এটা ঢাকি ধৰা বাবে ছেটিঙৰ পৰা আপোনাৰ উত্তৰ সত্যাপন কৰিব পৰা নাই।"</string> <string name="slice_permission_title" msgid="3262615140094151017">"<xliff:g id="APP_0">%1$s</xliff:g>ক <xliff:g id="APP_2">%2$s</xliff:g>ৰ অংশ দেখুওৱাবলৈ অনুমতি দিবনে?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"- ই <xliff:g id="APP">%1$s</xliff:g>ৰ তথ্য পঢ়িব পাৰে"</string> @@ -785,12 +794,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"বিবৰ্ধকৰ ৱিণ্ড’ৰ ছেটিং"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"সাধ্য সুবিধাসমূহ খুলিবলৈ টিপক। ছেটিঙত এই বুটামটো কাষ্টমাইজ অথবা সলনি কৰক।\n\n"<annotation id="link">"ছেটিং চাওক"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"বুটামটোক সাময়িকভাৱে লুকুৱাবলৈ ইয়াক একেবাৰে কাষলৈ লৈ যাওক"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"শীৰ্ষৰ বাওঁফালে নিয়ক"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"শীৰ্ষৰ সোঁফালে নিয়ক"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"তলৰ বাওঁফালে নিয়ক"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"তলৰ সোঁফালে নিয়ক"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"কাষলৈ নিয়ক আৰু লুকুৱাওক"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"কাষৰ বাহিৰলৈ নিয়ক আৰু দেখুৱাওক"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"ট’গল কৰক"</string> <string name="quick_controls_title" msgid="6839108006171302273">"ডিভাইচৰ নিয়ন্ত্ৰণসমূহ"</string> <string name="controls_providers_title" msgid="6879775889857085056">"নিয়ন্ত্ৰণসমূহ যোগ কৰিবলৈ এপ্ বাছনি কৰক"</string> @@ -933,6 +948,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"ম’বাইল ডেটা"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"সংযোজিত হৈ আছে"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"ম’বাইল ডেটা স্বয়ংক্ৰিয়ভাৱে সংযুক্ত নহ’ব"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"সংযোগ নাই"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"অন্য কোনো নেটৱৰ্ক উপলব্ধ নহয়"</string> diff --git a/packages/SystemUI/res/values-az/strings.xml b/packages/SystemUI/res/values-az/strings.xml index 7fa603fa44d1..c5f143bd5b54 100644 --- a/packages/SystemUI/res/values-az/strings.xml +++ b/packages/SystemUI/res/values-az/strings.xml @@ -248,7 +248,8 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"Parlaqlıq"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"Rəng inversiyası"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"Rəng korreksiyası"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"İstifadəçi ayarları"</string> + <!-- no translation found for quick_settings_more_user_settings (7634653308485206306) --> + <skip /> <string name="quick_settings_done" msgid="2163641301648855793">"Hazır"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Bağlayın"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"Qoşulu"</string> @@ -727,6 +728,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"Mobil data söndürülsün?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"<xliff:g id="CARRIER">%s</xliff:g> ilə data və ya internetə daxil ola bilməyəcəksiniz. İnternet yalnız Wi-Fi ilə əlçatan olacaq."</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"operatorunuz"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"Tətbiq icazə sorğusunu gizlətdiyi üçün Ayarlar cavabınızı doğrulaya bilməz."</string> <string name="slice_permission_title" msgid="3262615140094151017">"<xliff:g id="APP_0">%1$s</xliff:g> tətbiqinə <xliff:g id="APP_2">%2$s</xliff:g> hissələrini göstərmək üçün icazə verilsin?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"- <xliff:g id="APP">%1$s</xliff:g> tətbiqindən məlumat oxuya bilər"</string> @@ -785,12 +794,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"Böyüdücü pəncərə ayarları"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Əlçatımlılıq funksiyalarını açmaq üçün toxunun. Ayarlarda bu düyməni fərdiləşdirin və ya dəyişdirin.\n\n"<annotation id="link">"Ayarlara baxın"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Düyməni müvəqqəti gizlətmək üçün kənara çəkin"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Yuxarıya sola köçürün"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Yuxarıya sağa köçürün"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Aşağıya sola köçürün"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Aşağıya sağa köçürün"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"İçəri keçirib gizlədin"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Kənara daşıyıb göstərin"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"keçirin"</string> <string name="quick_controls_title" msgid="6839108006171302273">"Cihaz kontrolları"</string> <string name="controls_providers_title" msgid="6879775889857085056">"Kontrol əlavə etmək üçün tətbiq seçin"</string> @@ -933,6 +948,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"Mobil data"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"Qoşulub"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"Mobil data avtomatik qoşulmayacaq"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"Bağlantı yoxdur"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Heç bir başqa şəbəkə əlçatan deyil"</string> diff --git a/packages/SystemUI/res/values-b+sr+Latn/strings.xml b/packages/SystemUI/res/values-b+sr+Latn/strings.xml index ffe49b2c195a..e61b692219bf 100644 --- a/packages/SystemUI/res/values-b+sr+Latn/strings.xml +++ b/packages/SystemUI/res/values-b+sr+Latn/strings.xml @@ -248,7 +248,8 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"Osvetljenost"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"Inverzija boja"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"Korekcija boja"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Korisnička podešavanja"</string> + <!-- no translation found for quick_settings_more_user_settings (7634653308485206306) --> + <skip /> <string name="quick_settings_done" msgid="2163641301648855793">"Gotovo"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Zatvori"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"Povezan"</string> @@ -727,6 +728,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"Želite da isključite mobilne podatke?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"Nećete imati pristup podacima ili internetu preko mobilnog operatera <xliff:g id="CARRIER">%s</xliff:g>. Internet će biti dostupan samo preko WiFi veze."</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"mobilni operater"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"Podešavanja ne mogu da verifikuju vaš odgovor jer aplikacija skriva zahtev za dozvolu."</string> <string name="slice_permission_title" msgid="3262615140094151017">"Želite li da dozvolite aplikaciji <xliff:g id="APP_0">%1$s</xliff:g> da prikazuje isečke iz aplikacije <xliff:g id="APP_2">%2$s</xliff:g>?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"– Može da čita podatke iz aplikacije <xliff:g id="APP">%1$s</xliff:g>"</string> @@ -785,12 +794,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"Podešavanja prozora za uvećanje"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Dodirnite za funkcije pristupačnosti. Prilagodite ili zamenite ovo dugme u Podešavanjima.\n\n"<annotation id="link">"Podešavanja"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Pomerite dugme do ivice da biste ga privremeno sakrili"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Premesti gore levo"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Premesti gore desno"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Premesti dole levo"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Premesti dole desno"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Premesti do ivice i sakrij"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Premesti izvan ivice i prikaži"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"uključite/isključite"</string> <string name="quick_controls_title" msgid="6839108006171302273">"Kontrole uređaja"</string> <string name="controls_providers_title" msgid="6879775889857085056">"Odaberite aplikaciju za dodavanje kontrola"</string> @@ -933,6 +948,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"Mobilni podaci"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"Povezano"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"Nije uspelo autom. povezivanje preko mob. podataka"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"Veza nije uspostavljena"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Nije dostupna nijedna druga mreža"</string> diff --git a/packages/SystemUI/res/values-be/strings.xml b/packages/SystemUI/res/values-be/strings.xml index 3e76985abbf7..827370f9db37 100644 --- a/packages/SystemUI/res/values-be/strings.xml +++ b/packages/SystemUI/res/values-be/strings.xml @@ -248,7 +248,8 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"Яркасць"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"Інверсія колераў"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"Карэкцыя колераў"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Налады карыстальніка"</string> + <!-- no translation found for quick_settings_more_user_settings (7634653308485206306) --> + <skip /> <string name="quick_settings_done" msgid="2163641301648855793">"Гатова"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Закрыць"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"Падлучана"</string> @@ -727,6 +728,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"Выключыць мабільную перадачу даных?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"У вас не будзе доступу да даных ці інтэрнэту праз аператара <xliff:g id="CARRIER">%s</xliff:g>. Інтэрнэт будзе даступны толькі праз Wi-Fi."</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"ваш аператар"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"Праграма хавае запыт на дазвол, таму ваш адказ немагчыма спраўдзіць у Наладах."</string> <string name="slice_permission_title" msgid="3262615140094151017">"Дазволіць праграме <xliff:g id="APP_0">%1$s</xliff:g> паказваць зрэзы праграмы <xliff:g id="APP_2">%2$s</xliff:g>?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"- Можа счытваць інфармацыю з праграмы <xliff:g id="APP">%1$s</xliff:g>"</string> @@ -785,12 +794,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"Налады акна лупы"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Націсніце, каб адкрыць спецыяльныя магчымасці. Рэгулюйце ці замяняйце кнопку ў Наладах.\n\n"<annotation id="link">"Прагляд налад"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Каб часова схаваць кнопку, перамясціце яе на край"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Перамясціць лявей і вышэй"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Перамясціць правей і вышэй"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Перамясціць лявей і ніжэй"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Перамясціць правей і ніжэй"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Перамясціць на край і схаваць"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Перамясціць за край і паказаць"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"уключыць/выключыць"</string> <string name="quick_controls_title" msgid="6839108006171302273">"Элементы кіравання прыладай"</string> <string name="controls_providers_title" msgid="6879775889857085056">"Выберыце праграму для дадавання элементаў кіравання"</string> @@ -933,6 +948,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"Мабільная перадача даных"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"Падключана"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"Мабільная перадача даных не ўключаецца аўтаматычна"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"Няма падключэння"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Больш няма даступных сетак"</string> diff --git a/packages/SystemUI/res/values-bg/strings.xml b/packages/SystemUI/res/values-bg/strings.xml index 572e13fe567e..880445bdfc13 100644 --- a/packages/SystemUI/res/values-bg/strings.xml +++ b/packages/SystemUI/res/values-bg/strings.xml @@ -248,7 +248,8 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"Яркост"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"Цветове: инверт."</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"Корекция на цветове"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Потребителски настройки"</string> + <!-- no translation found for quick_settings_more_user_settings (7634653308485206306) --> + <skip /> <string name="quick_settings_done" msgid="2163641301648855793">"Готово"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Затваряне"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"Установена е връзка"</string> @@ -727,6 +728,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"Да се изключат ли мобилните данни?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"Няма да можете да използвате данни или интернет чрез <xliff:g id="CARRIER">%s</xliff:g>. Ще имате достъп до интернет само през Wi-Fi."</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"оператора си"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"От Настройки не може да се получи потвърждение за отговора ви, защото заявката за разрешение се прикрива от приложение."</string> <string name="slice_permission_title" msgid="3262615140094151017">"Искате ли да разрешите на <xliff:g id="APP_0">%1$s</xliff:g> да показва части от <xliff:g id="APP_2">%2$s</xliff:g>?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"– Може да чете информация от <xliff:g id="APP">%1$s</xliff:g>"</string> @@ -785,12 +794,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"Настройки за инструмента за увеличаване на прозорци"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Докоснете, за да отворите функциите за достъпност. Персон./заменете бутона от настройките.\n\n"<annotation id="link">"Преглед на настройките"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Преместете бутона до края, за да го скриете временно"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Преместване горе вляво"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Преместване горе вдясно"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Преместване долу вляво"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Преместване долу вдясно"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Преместване в края и скриване"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Преместване в края и показване"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"превключване"</string> <string name="quick_controls_title" msgid="6839108006171302273">"Контроли за устройството"</string> <string name="controls_providers_title" msgid="6879775889857085056">"Изберете приложение, за да добавите контроли"</string> @@ -933,6 +948,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"Мобилни данни"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"Свързано"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"Връзката за мобилни данни няма да е автоматична"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"Няма връзка"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Няма други налични мрежи"</string> diff --git a/packages/SystemUI/res/values-bn/strings.xml b/packages/SystemUI/res/values-bn/strings.xml index 645f6ab84dfe..c74fc69660a1 100644 --- a/packages/SystemUI/res/values-bn/strings.xml +++ b/packages/SystemUI/res/values-bn/strings.xml @@ -248,7 +248,8 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"উজ্জ্বলতা"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"কালার ইনভার্সন"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"রঙ সংশোধন"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"ব্যবহারকারী সেটিংস"</string> + <!-- no translation found for quick_settings_more_user_settings (7634653308485206306) --> + <skip /> <string name="quick_settings_done" msgid="2163641301648855793">"সম্পন্ন হয়েছে"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"বন্ধ করুন"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"সংযুক্ত হয়েছে"</string> @@ -727,6 +728,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"মোবাইল ডেটা বন্ধ করবেন?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"আপনি \'<xliff:g id="CARRIER">%s</xliff:g>\'-এর মাধ্যমে ডেটা অথবা ইন্টারনেট অ্যাক্সেস করতে পারবেন না। শুধুমাত্র ওয়াই-ফাইয়ের মাধ্যমেই ইন্টারনেট অ্যাক্সেস করা যাবে।"</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"আপনার পরিষেবা প্রদানকারী"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"একটি অ্যাপ কোনও অনুমোদনের অনুরোধকে ঢেকে দিচ্ছে, তাই সেটিংস থেকে আপনার প্রতিক্রিয়া যাচাই করা যাচ্ছে না।"</string> <string name="slice_permission_title" msgid="3262615140094151017">"<xliff:g id="APP_0">%1$s</xliff:g> অ্যাপটিকে <xliff:g id="APP_2">%2$s</xliff:g> এর অংশ দেখানোর অনুমতি দেবেন?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"- এটি <xliff:g id="APP">%1$s</xliff:g> এর তথ্য অ্যাক্সেস করতে পারবে"</string> @@ -785,12 +794,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"\'ম্যাগনিফায়ার উইন্ডো\' সেটিংস"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"অ্যাক্সেসিবিলিটি ফিচার খুলতে ট্যাপ করুন। কাস্টমাইজ করুন বা সেটিংসে এই বোতামটি সরিয়ে দিন।\n\n"<annotation id="link">"সেটিংস দেখুন"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"এটি অস্থায়ীভাবে লুকাতে বোতামটি কোণে সরান"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"উপরে বাঁদিকে সরান"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"উপরে ডানদিকে সরান"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"নিচে বাঁদিকে সরান"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"নিচে ডান দিকে সরান"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"প্রান্তে যান ও আড়াল করুন"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"প্রান্ত থেকে সরান এবং দেখুন"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"টগল করুন"</string> <string name="quick_controls_title" msgid="6839108006171302273">"ডিভাইস কন্ট্রোল"</string> <string name="controls_providers_title" msgid="6879775889857085056">"কন্ট্রোল যোগ করতে অ্যাপ বেছে নিন"</string> @@ -933,6 +948,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"মোবাইল ডেটা"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"কানেক্ট করা আছে"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"মোবাইল ডেটা নিজে থেকে কানেক্ট হবে না"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"কানেকশন নেই"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"অন্য কোনও নেটওয়ার্ক উপলভ্য নেই"</string> diff --git a/packages/SystemUI/res/values-bs/strings.xml b/packages/SystemUI/res/values-bs/strings.xml index 183dfe071b7a..5356d74fe196 100644 --- a/packages/SystemUI/res/values-bs/strings.xml +++ b/packages/SystemUI/res/values-bs/strings.xml @@ -248,7 +248,7 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"Osvjetljenje"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"Inverzija boja"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"Ispravka boja"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Korisničke postavke"</string> + <string name="quick_settings_more_user_settings" msgid="7634653308485206306">"Upravljajte korisnicima"</string> <string name="quick_settings_done" msgid="2163641301648855793">"Gotovo"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Zatvori"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"Povezano"</string> @@ -727,6 +727,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"Isključiti prijenos podataka na mobilnoj mreži?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"Nećete imati pristup podacima ni internetu putem mobilnog operatera <xliff:g id="CARRIER">%s</xliff:g>. Internet će biti dostupan samo putem WiFi-ja."</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"vaš operater"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"Postavke ne mogu potvrditi vaš odgovor jer aplikacija zaklanja zahtjev za odobrenje."</string> <string name="slice_permission_title" msgid="3262615140094151017">"Dozvoliti aplikaciji <xliff:g id="APP_0">%1$s</xliff:g> da prikazuje isječke aplikacije <xliff:g id="APP_2">%2$s</xliff:g>?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"- Može čitati informacije iz aplikacije <xliff:g id="APP">%1$s</xliff:g>"</string> @@ -785,12 +793,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"Postavke prozora povećala"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Dodirnite da otvorite funkcije pristupačnosti. Prilagodite ili zamijenite dugme u Postavkama.\n\n"<annotation id="link">"Postavke"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Premjestite dugme do ivice da ga privremeno sakrijete"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Pomjeranje gore lijevo"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Pomjeranje gore desno"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Pomjeranje dolje lijevo"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Pomjeranje dolje desno"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Pomjeranje do ivice i sakrivanje"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Pomjeranje izvan ivice i prikaz"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"aktiviranje/deaktiviranje"</string> <string name="quick_controls_title" msgid="6839108006171302273">"Kontrole uređaja"</string> <string name="controls_providers_title" msgid="6879775889857085056">"Odaberite aplikaciju da dodate kontrole"</string> @@ -933,6 +947,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"Prijenos podataka na mobilnoj mreži"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"Povezano"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"Prijenos podataka se neće automatski povezati"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"Niste povezani s mrežom"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Druge mreže nisu dostupne"</string> diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml index daa63e61ce16..b61ee2c3b7e0 100644 --- a/packages/SystemUI/res/values-ca/strings.xml +++ b/packages/SystemUI/res/values-ca/strings.xml @@ -248,7 +248,8 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"Brillantor"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"Inversió de colors"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"Correcció de color"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Configuració d\'usuari"</string> + <!-- no translation found for quick_settings_more_user_settings (7634653308485206306) --> + <skip /> <string name="quick_settings_done" msgid="2163641301648855793">"Fet"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Tanca"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"Connectat"</string> @@ -727,6 +728,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"Vols desactivar les dades mòbils?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"No tindràs accés a dades ni a Internet mitjançant <xliff:g id="CARRIER">%s</xliff:g>. Internet només estarà disponible per Wi-Fi."</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"el teu operador de telefonia mòbil"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"Com que hi ha una aplicació que oculta una sol·licitud de permís, no es pot verificar la teva resposta des de la configuració."</string> <string name="slice_permission_title" msgid="3262615140094151017">"Vols permetre que <xliff:g id="APP_0">%1$s</xliff:g> mostri porcions de l\'aplicació <xliff:g id="APP_2">%2$s</xliff:g>?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"- Pot llegir informació de l\'aplicació <xliff:g id="APP">%1$s</xliff:g>"</string> @@ -785,12 +794,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"Configuració de la finestra de la lupa"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Toca per obrir funcions d\'accessibilitat. Personalitza o substitueix el botó a Configuració.\n\n"<annotation id="link">"Mostra"</annotation>"."</string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Mou el botó a l\'extrem per amagar-lo temporalment"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Mou a dalt a l\'esquerra"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Mou a dalt a la dreta"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Mou a baix a l\'esquerra"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Mou a baix a la dreta"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Mou dins de les vores i amaga"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Mou fora de les vores i mostra"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"commuta"</string> <string name="quick_controls_title" msgid="6839108006171302273">"Controls de dispositius"</string> <string name="controls_providers_title" msgid="6879775889857085056">"Selecciona l\'aplicació per afegir controls"</string> @@ -933,6 +948,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"Dades mòbils"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"Connectat"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"Les dades mòbils no es connectaran automàticament"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"Sense connexió"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"No hi ha cap altra xarxa disponible"</string> diff --git a/packages/SystemUI/res/values-cs/strings.xml b/packages/SystemUI/res/values-cs/strings.xml index cba944849c59..ee364681ba7e 100644 --- a/packages/SystemUI/res/values-cs/strings.xml +++ b/packages/SystemUI/res/values-cs/strings.xml @@ -248,7 +248,8 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"Jas"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"Převrácení barev"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"Korekce barev"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Uživatelské nastavení"</string> + <!-- no translation found for quick_settings_more_user_settings (7634653308485206306) --> + <skip /> <string name="quick_settings_done" msgid="2163641301648855793">"Hotovo"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Zavřít"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"Připojeno"</string> @@ -727,6 +728,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"Vypnout mobilní data?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"Prostřednictvím <xliff:g id="CARRIER">%s</xliff:g> nebudete moci používat data ani internet. Internet bude dostupný pouze přes Wi-Fi."</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"vašeho operátora"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"Žádost o oprávnění je blokována jinou aplikací. Nastavení proto vaši odpověď nemůže ověřit."</string> <string name="slice_permission_title" msgid="3262615140094151017">"Povolit aplikaci <xliff:g id="APP_0">%1$s</xliff:g> zobrazovat ukázky z aplikace <xliff:g id="APP_2">%2$s</xliff:g>?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"– Může číst informace z aplikace <xliff:g id="APP">%1$s</xliff:g>"</string> @@ -785,12 +794,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"Nastavení okna zvětšení"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Klepnutím otevřete funkce přístupnosti. Tlačítko lze upravit nebo nahradit v Nastavení.\n\n"<annotation id="link">"Nastavení"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Přesunutím tlačítka k okraji ho dočasně skryjete"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Přesunout vlevo nahoru"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Přesunout vpravo nahoru"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Přesunout vlevo dolů"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Přesunout vpravo dolů"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Přesunout k okraji a skrýt"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Přesunout okraj ven a zobrazit"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"přepnout"</string> <string name="quick_controls_title" msgid="6839108006171302273">"Ovládání zařízení"</string> <string name="controls_providers_title" msgid="6879775889857085056">"Vyberte aplikaci, pro kterou chcete přidat ovládací prvky"</string> @@ -933,6 +948,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"Mobilní data"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"Připojeno"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"Mobilní data se nebudou připojovat automaticky"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"Žádné připojení"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Žádné další sítě nejsou k dispozici"</string> diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml index a879cbb7db28..220014e4d21b 100644 --- a/packages/SystemUI/res/values-da/strings.xml +++ b/packages/SystemUI/res/values-da/strings.xml @@ -248,7 +248,7 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"Lysstyrke"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"Ombytning af farver"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"Farvekorrigering"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Brugerindstillinger"</string> + <string name="quick_settings_more_user_settings" msgid="7634653308485206306">"Administrer brugere"</string> <string name="quick_settings_done" msgid="2163641301648855793">"Udfør"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Luk"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"Tilsluttet"</string> @@ -727,6 +727,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"Vil du deaktivere mobildata?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"Du vil ikke have data- eller internetadgang via <xliff:g id="CARRIER">%s</xliff:g>. Der vil kun være adgang til internettet via Wi-Fi."</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"dit mobilselskab"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"Indstillinger kan ikke bekræfte dit svar, da en app dækker for en anmodning om tilladelse."</string> <string name="slice_permission_title" msgid="3262615140094151017">"Vil du give <xliff:g id="APP_0">%1$s</xliff:g> tilladelse til at vise eksempler fra <xliff:g id="APP_2">%2$s</xliff:g>?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"- Den kan læse oplysninger fra <xliff:g id="APP">%1$s</xliff:g>"</string> @@ -785,12 +793,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"Indstillinger for lupvindue"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Tryk for at åbne hjælpefunktioner. Tilpas eller erstat denne knap i Indstillinger.\n\n"<annotation id="link">"Se indstillingerne"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Flyt knappen til kanten for at skjule den midlertidigt"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Flyt op til venstre"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Flyt op til højre"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Flyt ned til venstre"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Flyt ned til højre"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Flyt ud til kanten, og skjul"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Flyt ud til kanten, og vis"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"slå til/fra"</string> <string name="quick_controls_title" msgid="6839108006171302273">"Enhedsstyring"</string> <string name="controls_providers_title" msgid="6879775889857085056">"Vælg en app for at tilføje styring"</string> @@ -933,6 +947,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"Mobildata"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"Forbundet"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"Ingen automatisk mobildataforbindelse"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"Der er ingen forbindelse"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Der er ingen andre tilgængelige netværk"</string> diff --git a/packages/SystemUI/res/values-de/strings.xml b/packages/SystemUI/res/values-de/strings.xml index fb135ff09eab..0b3af674fd42 100644 --- a/packages/SystemUI/res/values-de/strings.xml +++ b/packages/SystemUI/res/values-de/strings.xml @@ -248,7 +248,8 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"Helligkeit"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"Farbumkehr"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"Farbkorrektur"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Nutzereinstellungen"</string> + <!-- no translation found for quick_settings_more_user_settings (7634653308485206306) --> + <skip /> <string name="quick_settings_done" msgid="2163641301648855793">"Fertig"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Schließen"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"Verbunden"</string> @@ -727,6 +728,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"Mobile Daten deaktivieren?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"Du kannst dann nicht mehr über <xliff:g id="CARRIER">%s</xliff:g> auf Daten und das Internet zugreifen. Das Internet ist nur noch über WLAN verfügbar."</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"deinen Mobilfunkanbieter"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"Deine Eingabe wird von \"Einstellungen\" nicht erkannt, weil die Berechtigungsanfrage von einer App verdeckt wird."</string> <string name="slice_permission_title" msgid="3262615140094151017">"<xliff:g id="APP_0">%1$s</xliff:g> erlauben, Teile von <xliff:g id="APP_2">%2$s</xliff:g> anzuzeigen?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"– Darf Informationen aus <xliff:g id="APP">%1$s</xliff:g> lesen"</string> @@ -785,12 +794,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"Einstellungen für das Vergrößerungsfenster"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Tippe, um die Bedienungshilfen aufzurufen. Du kannst diese Schaltfläche in den Einstellungen anpassen oder ersetzen.\n\n"<annotation id="link">"Zu den Einstellungen"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Durch Ziehen an den Rand wird die Schaltfläche zeitweise ausgeblendet"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Nach oben links verschieben"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Nach rechts oben verschieben"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Nach unten links verschieben"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Nach unten rechts verschieben"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"An den Rand verschieben und verbergen"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Vom Rand verschieben und anzeigen"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"Wechseln"</string> <string name="quick_controls_title" msgid="6839108006171302273">"Gerätesteuerung"</string> <string name="controls_providers_title" msgid="6879775889857085056">"App zum Hinzufügen von Steuerelementen auswählen"</string> @@ -933,6 +948,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"Mobile Daten"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"Verbunden"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"Keine automatische Verbindung über mobile Daten"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"Keine Verbindung"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Keine anderen Netzwerke verfügbar"</string> diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml index 3d1595326030..d707e3ecd6cb 100644 --- a/packages/SystemUI/res/values-el/strings.xml +++ b/packages/SystemUI/res/values-el/strings.xml @@ -248,7 +248,7 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"Φωτεινότητα"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"Αντιστροφή χρωμάτων"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"Διόρθωση χρωμάτων"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Ρυθμίσεις χρήστη"</string> + <string name="quick_settings_more_user_settings" msgid="7634653308485206306">"Διαχείριση χρηστών"</string> <string name="quick_settings_done" msgid="2163641301648855793">"Τέλος"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Κλείσιμο"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"Συνδέθηκε"</string> @@ -727,6 +727,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"Απενεργοποίηση δεδομένων κινητής τηλεφωνίας;"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"Δεν θα έχετε πρόσβαση σε δεδομένα ή στο διαδίκτυο μέσω της εταιρείας κινητής τηλεφωνίας <xliff:g id="CARRIER">%s</xliff:g>. Θα έχετε πρόσβαση στο διαδίκτυο μόνο μέσω Wi-Fi."</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"η εταιρεία κινητής τηλεφωνίας"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"Επειδή μια εφαρμογή αποκρύπτει ένα αίτημα άδειας, δεν είναι δυνατή η επαλήθευση της απάντησής σας από τις Ρυθμίσεις."</string> <string name="slice_permission_title" msgid="3262615140094151017">"Να επιτρέπεται στο <xliff:g id="APP_0">%1$s</xliff:g> να εμφανίζει τμήματα της εφαρμογής <xliff:g id="APP_2">%2$s</xliff:g>;"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"- Μπορεί να διαβάζει πληροφορίες από την εφαρμογή <xliff:g id="APP">%1$s</xliff:g>"</string> @@ -785,12 +793,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"Ρυθμίσεις παραθύρου μεγεθυντικού φακού"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Πατήστε για άνοιγμα των λειτουργιών προσβασιμότητας. Προσαρμόστε ή αντικαταστήστε το κουμπί στις Ρυθμίσεις.\n\n"<annotation id="link">"Προβολή ρυθμίσεων"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Μετακινήστε το κουμπί στο άκρο για προσωρινή απόκρυψη"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Μετακίνηση επάνω αριστερά"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Μετακίνηση επάνω δεξιά"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Μετακίνηση κάτω αριστερά"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Μετακίνηση κάτω δεξιά"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Μετακίν. στο άκρο και απόκρυψη"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Μετακ. εκτός άκρου και εμφάν."</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"εναλλαγή"</string> <string name="quick_controls_title" msgid="6839108006171302273">"Στοιχεία ελέγχου συσκευής"</string> <string name="controls_providers_title" msgid="6879775889857085056">"Επιλογή εφαρμογής για προσθήκη στοιχείων ελέγχου"</string> @@ -933,6 +947,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"Δεδομένα κινητής τηλεφωνίας"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"Συνδέθηκε"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"Χωρίς αυτόματη σύνδεση δεδομένων κινητ. τηλεφωνίας"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"Χωρίς σύνδεση"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Δεν υπάρχουν άλλα διαθέσιμα δίκτυα"</string> diff --git a/packages/SystemUI/res/values-en-rAU/strings.xml b/packages/SystemUI/res/values-en-rAU/strings.xml index e7166acece78..3aaa5f5152d4 100644 --- a/packages/SystemUI/res/values-en-rAU/strings.xml +++ b/packages/SystemUI/res/values-en-rAU/strings.xml @@ -248,7 +248,7 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"Brightness"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"Colour inversion"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"Colour correction"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"User settings"</string> + <string name="quick_settings_more_user_settings" msgid="7634653308485206306">"Manage users"</string> <string name="quick_settings_done" msgid="2163641301648855793">"Done"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Close"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"Connected"</string> @@ -727,6 +727,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"Turn off mobile data?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"You won\'t have access to data or the Internet through <xliff:g id="CARRIER">%s</xliff:g>. Internet will only be available via Wi-Fi."</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"your operator"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"Because an app is obscuring a permission request, Settings can’t verify your response."</string> <string name="slice_permission_title" msgid="3262615140094151017">"Allow <xliff:g id="APP_0">%1$s</xliff:g> to show <xliff:g id="APP_2">%2$s</xliff:g> slices?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"– It can read information from <xliff:g id="APP">%1$s</xliff:g>"</string> @@ -785,12 +793,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"Magnifier window settings"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Tap to open accessibility features. Customise or replace this button in Settings.\n\n"<annotation id="link">"View settings"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Move button to the edge to hide it temporarily"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Move top left"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Move top right"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Move bottom left"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Move bottom right"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Move to edge and hide"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Move out edge and show"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"toggle"</string> <string name="quick_controls_title" msgid="6839108006171302273">"Device controls"</string> <string name="controls_providers_title" msgid="6879775889857085056">"Choose app to add controls"</string> @@ -933,6 +947,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"Mobile data"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"Connected"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"Mobile data won\'t auto‑connect"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"No connection"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"No other networks available"</string> diff --git a/packages/SystemUI/res/values-en-rCA/strings.xml b/packages/SystemUI/res/values-en-rCA/strings.xml index fe746d9669f9..fb56d9f34000 100644 --- a/packages/SystemUI/res/values-en-rCA/strings.xml +++ b/packages/SystemUI/res/values-en-rCA/strings.xml @@ -248,7 +248,7 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"Brightness"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"Colour inversion"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"Colour correction"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"User settings"</string> + <string name="quick_settings_more_user_settings" msgid="7634653308485206306">"Manage users"</string> <string name="quick_settings_done" msgid="2163641301648855793">"Done"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Close"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"Connected"</string> @@ -727,6 +727,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"Turn off mobile data?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"You won\'t have access to data or the Internet through <xliff:g id="CARRIER">%s</xliff:g>. Internet will only be available via Wi-Fi."</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"your carrier"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"Because an app is obscuring a permission request, Settings can’t verify your response."</string> <string name="slice_permission_title" msgid="3262615140094151017">"Allow <xliff:g id="APP_0">%1$s</xliff:g> to show <xliff:g id="APP_2">%2$s</xliff:g> slices?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"– It can read information from <xliff:g id="APP">%1$s</xliff:g>"</string> @@ -785,12 +793,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"Magnifier window settings"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Tap to open accessibility features. Customise or replace this button in Settings.\n\n"<annotation id="link">"View settings"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Move button to the edge to hide it temporarily"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Move top left"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Move top right"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Move bottom left"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Move bottom right"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Move to edge and hide"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Move out edge and show"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"toggle"</string> <string name="quick_controls_title" msgid="6839108006171302273">"Device controls"</string> <string name="controls_providers_title" msgid="6879775889857085056">"Choose app to add controls"</string> @@ -933,6 +947,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"Mobile data"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"Connected"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"Mobile data won\'t auto‑connect"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"No connection"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"No other networks available"</string> diff --git a/packages/SystemUI/res/values-en-rGB/strings.xml b/packages/SystemUI/res/values-en-rGB/strings.xml index e7166acece78..3aaa5f5152d4 100644 --- a/packages/SystemUI/res/values-en-rGB/strings.xml +++ b/packages/SystemUI/res/values-en-rGB/strings.xml @@ -248,7 +248,7 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"Brightness"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"Colour inversion"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"Colour correction"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"User settings"</string> + <string name="quick_settings_more_user_settings" msgid="7634653308485206306">"Manage users"</string> <string name="quick_settings_done" msgid="2163641301648855793">"Done"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Close"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"Connected"</string> @@ -727,6 +727,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"Turn off mobile data?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"You won\'t have access to data or the Internet through <xliff:g id="CARRIER">%s</xliff:g>. Internet will only be available via Wi-Fi."</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"your operator"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"Because an app is obscuring a permission request, Settings can’t verify your response."</string> <string name="slice_permission_title" msgid="3262615140094151017">"Allow <xliff:g id="APP_0">%1$s</xliff:g> to show <xliff:g id="APP_2">%2$s</xliff:g> slices?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"– It can read information from <xliff:g id="APP">%1$s</xliff:g>"</string> @@ -785,12 +793,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"Magnifier window settings"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Tap to open accessibility features. Customise or replace this button in Settings.\n\n"<annotation id="link">"View settings"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Move button to the edge to hide it temporarily"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Move top left"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Move top right"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Move bottom left"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Move bottom right"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Move to edge and hide"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Move out edge and show"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"toggle"</string> <string name="quick_controls_title" msgid="6839108006171302273">"Device controls"</string> <string name="controls_providers_title" msgid="6879775889857085056">"Choose app to add controls"</string> @@ -933,6 +947,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"Mobile data"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"Connected"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"Mobile data won\'t auto‑connect"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"No connection"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"No other networks available"</string> diff --git a/packages/SystemUI/res/values-en-rIN/strings.xml b/packages/SystemUI/res/values-en-rIN/strings.xml index e7166acece78..3aaa5f5152d4 100644 --- a/packages/SystemUI/res/values-en-rIN/strings.xml +++ b/packages/SystemUI/res/values-en-rIN/strings.xml @@ -248,7 +248,7 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"Brightness"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"Colour inversion"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"Colour correction"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"User settings"</string> + <string name="quick_settings_more_user_settings" msgid="7634653308485206306">"Manage users"</string> <string name="quick_settings_done" msgid="2163641301648855793">"Done"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Close"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"Connected"</string> @@ -727,6 +727,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"Turn off mobile data?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"You won\'t have access to data or the Internet through <xliff:g id="CARRIER">%s</xliff:g>. Internet will only be available via Wi-Fi."</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"your operator"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"Because an app is obscuring a permission request, Settings can’t verify your response."</string> <string name="slice_permission_title" msgid="3262615140094151017">"Allow <xliff:g id="APP_0">%1$s</xliff:g> to show <xliff:g id="APP_2">%2$s</xliff:g> slices?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"– It can read information from <xliff:g id="APP">%1$s</xliff:g>"</string> @@ -785,12 +793,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"Magnifier window settings"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Tap to open accessibility features. Customise or replace this button in Settings.\n\n"<annotation id="link">"View settings"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Move button to the edge to hide it temporarily"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Move top left"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Move top right"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Move bottom left"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Move bottom right"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Move to edge and hide"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Move out edge and show"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"toggle"</string> <string name="quick_controls_title" msgid="6839108006171302273">"Device controls"</string> <string name="controls_providers_title" msgid="6879775889857085056">"Choose app to add controls"</string> @@ -933,6 +947,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"Mobile data"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"Connected"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"Mobile data won\'t auto‑connect"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"No connection"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"No other networks available"</string> diff --git a/packages/SystemUI/res/values-en-rXC/strings.xml b/packages/SystemUI/res/values-en-rXC/strings.xml index b55b74415c8c..ee568382a214 100644 --- a/packages/SystemUI/res/values-en-rXC/strings.xml +++ b/packages/SystemUI/res/values-en-rXC/strings.xml @@ -248,7 +248,7 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"Brightness"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"Color inversion"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"Color correction"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"User settings"</string> + <string name="quick_settings_more_user_settings" msgid="7634653308485206306">"Manage users"</string> <string name="quick_settings_done" msgid="2163641301648855793">"Done"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Close"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"Connected"</string> @@ -727,6 +727,10 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"Turn off mobile data?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"You wont have access to data or the internet through <xliff:g id="CARRIER">%s</xliff:g>. Internet will only be available via Wi-Fi."</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"your carrier"</string> + <string name="auto_data_switch_disable_title" msgid="5146527155665190652">"Switch back to <xliff:g id="CARRIER">%s</xliff:g>?"</string> + <string name="auto_data_switch_disable_message" msgid="5885533647399535852">"Mobile data wont automatically switch based on availability"</string> + <string name="auto_data_switch_dialog_negative_button" msgid="2370876875999891444">"No thanks"</string> + <string name="auto_data_switch_dialog_positive_button" msgid="8531782041263087564">"Yes, switch"</string> <string name="touch_filtered_warning" msgid="8119511393338714836">"Because an app is obscuring a permission request, Settings can’t verify your response."</string> <string name="slice_permission_title" msgid="3262615140094151017">"Allow <xliff:g id="APP_0">%1$s</xliff:g> to show <xliff:g id="APP_2">%2$s</xliff:g> slices?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"- It can read information from <xliff:g id="APP">%1$s</xliff:g>"</string> @@ -785,12 +789,15 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"Magnifier window settings"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Tap to open accessibility features. Customize or replace this button in Settings.\n\n"<annotation id="link">"View settings"</annotation>""</string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Move button to the edge to hide it temporarily"</string> + <string name="accessibility_floating_button_undo" msgid="511112888715708241">"Undo"</string> + <string name="accessibility_floating_button_undo_message_text" msgid="3044079592757099698">"{count,plural, =1{{label} shortcut removed}other{# shortcuts removed}}"</string> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Move top left"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Move top right"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Move bottom left"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Move bottom right"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Move to edge and hide"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Move out edge and show"</string> + <string name="accessibility_floating_button_action_remove_menu" msgid="6730432848162552135">"Remove"</string> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"toggle"</string> <string name="quick_controls_title" msgid="6839108006171302273">"Device controls"</string> <string name="controls_providers_title" msgid="6879775889857085056">"Choose app to add controls"</string> @@ -933,6 +940,8 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"Mobile data"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"Connected"</string> + <string name="mobile_data_temp_connection_active" msgid="4590222725908806824">"Temporarily connected"</string> + <string name="mobile_data_poor_connection" msgid="819617772268371434">"Poor connection"</string> <string name="mobile_data_off_summary" msgid="3663995422004150567">"Mobile data won\'t auto‑connect"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"No connection"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"No other networks available"</string> diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml index e7a6cf1cbc64..6160caf86228 100644 --- a/packages/SystemUI/res/values-es-rUS/strings.xml +++ b/packages/SystemUI/res/values-es-rUS/strings.xml @@ -248,7 +248,8 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"Brillo"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"Invertir colores"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"Corregir colores"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Configuración del usuario"</string> + <!-- no translation found for quick_settings_more_user_settings (7634653308485206306) --> + <skip /> <string name="quick_settings_done" msgid="2163641301648855793">"Listo"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Cerrar"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"Conectado"</string> @@ -727,6 +728,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"¿Deseas desactivar los datos móviles?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"No tendrás acceso a datos móviles ni a Internet a través de <xliff:g id="CARRIER">%s</xliff:g>. Solo podrás conectarte a Internet mediante Wi‑Fi."</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"tu proveedor"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"Como una app está bloqueando una solicitud de permiso, Configuración no puede verificar tu respuesta."</string> <string name="slice_permission_title" msgid="3262615140094151017">"¿Permitir que <xliff:g id="APP_0">%1$s</xliff:g> muestre fragmentos de <xliff:g id="APP_2">%2$s</xliff:g>?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"- Puede leer información sobre <xliff:g id="APP">%1$s</xliff:g>"</string> @@ -785,12 +794,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"Configuración de la ventana de ampliación"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Presiona para abrir las funciones de accesibilidad. Personaliza o cambia botón en Config.\n\n"<annotation id="link">"Ver config"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Mueve el botón hacia el borde para ocultarlo temporalmente"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Mover arriba a la izquierda"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Mover arriba a la derecha"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Mover abajo a la izquierda"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Mover abajo a la derecha"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Mover fuera de borde y ocultar"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Mover fuera de borde y mostrar"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"activar o desactivar"</string> <string name="quick_controls_title" msgid="6839108006171302273">"Controles de dispositivos"</string> <string name="controls_providers_title" msgid="6879775889857085056">"Elige la app para agregar los controles"</string> @@ -933,6 +948,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"Datos móviles"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"Conexión establecida"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"No se conectarán automáticamente los datos móviles"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"Sin conexión"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"No hay otras redes disponibles"</string> diff --git a/packages/SystemUI/res/values-es/strings.xml b/packages/SystemUI/res/values-es/strings.xml index e8218b09852e..ed9e7d90cd6f 100644 --- a/packages/SystemUI/res/values-es/strings.xml +++ b/packages/SystemUI/res/values-es/strings.xml @@ -248,7 +248,8 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"Brillo"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"Invertir colores"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"Corrección de color"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Ajustes de usuario"</string> + <!-- no translation found for quick_settings_more_user_settings (7634653308485206306) --> + <skip /> <string name="quick_settings_done" msgid="2163641301648855793">"Hecho"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Cerrar"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"Conectado"</string> @@ -727,6 +728,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"¿Desactivar datos móviles?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"No tendrás acceso a datos móviles ni a Internet a través de <xliff:g id="CARRIER">%s</xliff:g>. Solo podrás conectarte a Internet mediante Wi‑Fi."</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"tu operador"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"Una aplicación impide ver una solicitud de permiso, por lo que Ajustes no puede verificar tu respuesta."</string> <string name="slice_permission_title" msgid="3262615140094151017">"¿Permitir que <xliff:g id="APP_0">%1$s</xliff:g> muestre fragmentos de <xliff:g id="APP_2">%2$s</xliff:g>?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"- Puede leer información de <xliff:g id="APP">%1$s</xliff:g>"</string> @@ -785,12 +794,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"Configuración de la ventana de la lupa"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Toca para abrir funciones de accesibilidad. Personaliza o sustituye este botón en Ajustes.\n\n"<annotation id="link">"Ver ajustes"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Mueve el botón hacia el borde para ocultarlo temporalmente"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Mover arriba a la izquierda"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Mover arriba a la derecha"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Mover abajo a la izquierda"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Mover abajo a la derecha"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Mover al borde y ocultar"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Mover al borde y mostrar"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"activar/desactivar"</string> <string name="quick_controls_title" msgid="6839108006171302273">"Control de dispositivos"</string> <string name="controls_providers_title" msgid="6879775889857085056">"Elige una aplicación para añadir controles"</string> @@ -839,7 +854,7 @@ <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> de <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string> <string name="controls_media_button_play" msgid="2705068099607410633">"Reproducir"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"Pausar"</string> - <string name="controls_media_button_prev" msgid="8126822360056482970">"Pista anterior"</string> + <string name="controls_media_button_prev" msgid="8126822360056482970">"Canción anterior"</string> <string name="controls_media_button_next" msgid="6662636627525947610">"Siguiente pista"</string> <string name="controls_media_button_connecting" msgid="3138354625847598095">"Conectando"</string> <string name="controls_media_smartspace_rec_title" msgid="1699818353932537407">"Reproducir"</string> @@ -933,6 +948,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"Datos móviles"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"Conectado"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"Los datos móviles no se conectarán automáticamente"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"Sin conexión"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"No hay otras redes disponibles"</string> diff --git a/packages/SystemUI/res/values-et/strings.xml b/packages/SystemUI/res/values-et/strings.xml index 11a9dc917142..417c2c2b5bdc 100644 --- a/packages/SystemUI/res/values-et/strings.xml +++ b/packages/SystemUI/res/values-et/strings.xml @@ -248,7 +248,8 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"Heledus"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"Värvide ümberpööramine"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"Värviparandus"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Kasutaja seaded"</string> + <!-- no translation found for quick_settings_more_user_settings (7634653308485206306) --> + <skip /> <string name="quick_settings_done" msgid="2163641301648855793">"Valmis"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Sule"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"Ühendatud"</string> @@ -727,6 +728,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"Kas lülitada mobiilne andmeside välja?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"Pärast seda pole teil operaatori <xliff:g id="CARRIER">%s</xliff:g> kaudu juurdepääsu andmesidele ega internetile. Internet on saadaval ainult WiFi kaudu."</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"teie operaator"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"Seaded ei saa teie vastust kinnitada, sest rakendus varjab loataotlust."</string> <string name="slice_permission_title" msgid="3262615140094151017">"Kas lubada rakendusel <xliff:g id="APP_0">%1$s</xliff:g> näidata rakenduse <xliff:g id="APP_2">%2$s</xliff:g> lõike?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"- See saab lugeda teavet rakendusest <xliff:g id="APP">%1$s</xliff:g>"</string> @@ -785,12 +794,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"Luubi akna seaded"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Puudutage juurdepääsufunktsioonide avamiseks. Kohandage nuppu või asendage see seadetes.\n\n"<annotation id="link">"Kuva seaded"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Teisaldage nupp serva, et see ajutiselt peita"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Teisalda üles vasakule"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Teisalda üles paremale"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Teisalda alla vasakule"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Teisalda alla paremale"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Teisalda serva ja kuva"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Teisalda servast eemale ja kuva"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"lülita"</string> <string name="quick_controls_title" msgid="6839108006171302273">"Seadmete juhikud"</string> <string name="controls_providers_title" msgid="6879775889857085056">"Valige juhtelementide lisamiseks rakendus"</string> @@ -933,6 +948,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"Mobiilne andmeside"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"Ühendatud"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"Mobiilset andmesideühendust ei looda automaatselt"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"Ühendus puudub"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Ühtegi muud võrku pole saadaval"</string> diff --git a/packages/SystemUI/res/values-eu/strings.xml b/packages/SystemUI/res/values-eu/strings.xml index 3714781f522c..ee1ba2367219 100644 --- a/packages/SystemUI/res/values-eu/strings.xml +++ b/packages/SystemUI/res/values-eu/strings.xml @@ -248,7 +248,8 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"Distira"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"Kolore-alderantzikatzea"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"Koloreen zuzenketa"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Erabiltzaile-ezarpenak"</string> + <!-- no translation found for quick_settings_more_user_settings (7634653308485206306) --> + <skip /> <string name="quick_settings_done" msgid="2163641301648855793">"Eginda"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Itxi"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"Konektatuta"</string> @@ -727,6 +728,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"Datu-konexioa desaktibatu nahi duzu?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"<xliff:g id="CARRIER">%s</xliff:g> erabilita ezingo dituzu erabili datuak edo Internet. Wifi-sare baten bidez soilik konektatu ahal izango zara Internetera."</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"Zure operadorea"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"Aplikazio bat baimen-eskaera oztopatzen ari denez, ezarpenek ezin dute egiaztatu erantzuna."</string> <string name="slice_permission_title" msgid="3262615140094151017">"<xliff:g id="APP_2">%2$s</xliff:g> aplikazioaren zatiak erakusteko baimena eman nahi diozu <xliff:g id="APP_0">%1$s</xliff:g> aplikazioari?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"- <xliff:g id="APP">%1$s</xliff:g> aplikazioaren informazioa irakur dezake."</string> @@ -785,12 +794,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"Luparen leihoaren ezarpenak"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Erabilerraztasun-eginbideak irekitzeko, sakatu hau. Ezarpenetan pertsonalizatu edo ordez dezakezu botoia.\n\n"<annotation id="link">"Ikusi ezarpenak"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Eraman botoia ertzera aldi baterako ezkutatzeko"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Eraman goialdera, ezkerretara"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Eraman goialdera, eskuinetara"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Eraman behealdera, ezkerretara"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Eraman behealdera, eskuinetara"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Eraman ertzera eta ezkutatu"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Atera ertzetik eta erakutsi"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"aldatu"</string> <string name="quick_controls_title" msgid="6839108006171302273">"Gailuak kontrolatzeko widgetak"</string> <string name="controls_providers_title" msgid="6879775889857085056">"Aukeratu aplikazio bat kontrolatzeko aukerak gehitzeko"</string> @@ -933,6 +948,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"Datu-konexioa"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> (<xliff:g id="NETWORKMODE">%2$s</xliff:g>)"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"Konektatuta"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"Ez da automatikoki aktibatuko datu-konexioa"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"Konexiorik gabe"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Ez dago beste sare erabilgarririk"</string> diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml index 183a9edc82fd..62d73ae464f2 100644 --- a/packages/SystemUI/res/values-fa/strings.xml +++ b/packages/SystemUI/res/values-fa/strings.xml @@ -248,7 +248,8 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"روشنایی"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"وارونگی رنگ"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"تصحیح رنگ"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"تنظیمات کاربر"</string> + <!-- no translation found for quick_settings_more_user_settings (7634653308485206306) --> + <skip /> <string name="quick_settings_done" msgid="2163641301648855793">"تمام"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"بستن"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"متصل"</string> @@ -727,6 +728,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"داده تلفن همراه خاموش شود؟"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"نمیتوانید ازطریق <xliff:g id="CARRIER">%s</xliff:g> به داده یا اینترنت دسترسی داشته باشید. اینترنت فقط ازطریق Wi-Fi در دسترس خواهد بود."</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"شرکت مخابراتی شما"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"چون برنامهای درحال ایجاد تداخل در درخواست مجوز است، «تنظیمات» نمیتواند پاسخ شما را تأیید کند."</string> <string name="slice_permission_title" msgid="3262615140094151017">"به <xliff:g id="APP_0">%1$s</xliff:g> اجازه داده شود تکههای <xliff:g id="APP_2">%2$s</xliff:g> را نشان دهد؟"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"- میتواند اطلاعات <xliff:g id="APP">%1$s</xliff:g> را بخواند"</string> @@ -785,12 +794,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"تنظیمات پنجره ذرهبین"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"برای باز کردن ویژگیهای دسترسپذیری ضربه بزنید. در تنظیمات این دکمه را سفارشی یا جایگزین کنید\n\n"<annotation id="link">"تنظیمات"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"برای پنهان کردن موقتی دکمه، آن را به لبه ببرید"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"انتقال به بالا سمت راست"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"انتقال به بالا سمت چپ"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"انتقال به پایین سمت راست"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"انتقال به پایین سمت چپ"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"انتقال به لبه و پنهان کردن"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"انتقال به خارج از لبه و نمایش"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"روشن/ خاموش کردن"</string> <string name="quick_controls_title" msgid="6839108006171302273">"کنترلهای دستگاه"</string> <string name="controls_providers_title" msgid="6879775889857085056">"انتخاب برنامه برای افزودن کنترلها"</string> @@ -933,6 +948,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"داده تلفن همراه"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"متصل است"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"داده تلفن همراه بهطور خودکار متصل نخواهد شد"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"اتصال برقرار نیست"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"شبکه دیگری وجود ندارد"</string> diff --git a/packages/SystemUI/res/values-fi/strings.xml b/packages/SystemUI/res/values-fi/strings.xml index df050150c4aa..bfb450fd7d04 100644 --- a/packages/SystemUI/res/values-fi/strings.xml +++ b/packages/SystemUI/res/values-fi/strings.xml @@ -248,7 +248,8 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"Kirkkaus"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"Käänteiset värit"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"Värinkorjaus"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Käyttäjäasetukset"</string> + <!-- no translation found for quick_settings_more_user_settings (7634653308485206306) --> + <skip /> <string name="quick_settings_done" msgid="2163641301648855793">"Valmis"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Sulje"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"Yhdistetty"</string> @@ -727,6 +728,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"Laitetaanko mobiilidata pois päältä?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"<xliff:g id="CARRIER">%s</xliff:g> ei enää tarjoa pääsyä dataan eikä internetyhteyttä, joka on saatavilla vain Wi-Fin kautta."</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"operaattorisi"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"Sovellus peittää käyttöoikeuspyynnön, joten Asetukset ei voi vahvistaa valintaasi."</string> <string name="slice_permission_title" msgid="3262615140094151017">"Saako <xliff:g id="APP_0">%1$s</xliff:g> näyttää osia sovelluksesta <xliff:g id="APP_2">%2$s</xliff:g>?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"– Se voi lukea tietoja sovelluksesta <xliff:g id="APP">%1$s</xliff:g>."</string> @@ -785,12 +794,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"Ikkunan suurennuksen asetukset"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Avaa esteettömyysominaisuudet napauttamalla. Yksilöi tai vaihda painike asetuksista.\n\n"<annotation id="link">"Avaa asetukset"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Piilota painike tilapäisesti siirtämällä se reunaan"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Siirrä vasempaan yläreunaan"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Siirrä oikeaan yläreunaan"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Siirrä vasempaan alareunaan"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Siirrä oikeaan alareunaan"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Siirrä reunaan ja piilota"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Siirrä pois reunasta ja näytä"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"vaihda"</string> <string name="quick_controls_title" msgid="6839108006171302273">"Laitehallinta"</string> <string name="controls_providers_title" msgid="6879775889857085056">"Valitse sovellus lisätäksesi säätimiä"</string> @@ -933,6 +948,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"Mobiilidata"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"Yhdistetty"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"Mobiilidata ei yhdisty automaattisesti"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"Ei yhteyttä"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Ei muita verkkoja käytettävissä"</string> diff --git a/packages/SystemUI/res/values-fr-rCA/strings.xml b/packages/SystemUI/res/values-fr-rCA/strings.xml index c5c941bf38b1..b2d925c9037e 100644 --- a/packages/SystemUI/res/values-fr-rCA/strings.xml +++ b/packages/SystemUI/res/values-fr-rCA/strings.xml @@ -248,7 +248,8 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"Luminosité"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"Inversion des couleurs"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"Correction des couleurs"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Paramètres utilisateur"</string> + <!-- no translation found for quick_settings_more_user_settings (7634653308485206306) --> + <skip /> <string name="quick_settings_done" msgid="2163641301648855793">"Terminé"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Fermer"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"Connecté"</string> @@ -727,6 +728,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"Désactiver les données cellulaires?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"Vous n\'aurez pas accès aux données ni à Internet avec <xliff:g id="CARRIER">%s</xliff:g>. Vous ne pourrez accéder à Internet que par Wi-Fi."</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"votre fournisseur de services"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"Une application obscurcit une demande d\'autorisation, alors Paramètres ne peut pas vérifier votre réponse."</string> <string name="slice_permission_title" msgid="3262615140094151017">"Autoriser <xliff:g id="APP_0">%1$s</xliff:g> à afficher <xliff:g id="APP_2">%2$s</xliff:g> tranches?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"- Il peut lire de l\'information de <xliff:g id="APP">%1$s</xliff:g>"</string> @@ -785,12 +794,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"Paramètres de la fenêtre de loupe"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Touchez pour ouvrir fonction. d\'access. Personnalisez ou remplacez bouton dans Param.\n\n"<annotation id="link">"Afficher param."</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Déplacez le bouton vers le bord pour le masquer temporairement"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Déplacer dans coin sup. gauche"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Déplacer dans coin sup. droit"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Déplacer dans coin inf. gauche"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Déplacer dans coin inf. droit"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Éloigner du bord et masquer"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Éloigner du bord et afficher"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"basculer"</string> <string name="quick_controls_title" msgid="6839108006171302273">"Commandes des appareils"</string> <string name="controls_providers_title" msgid="6879775889857085056">"Sélectionnez l\'application pour laquelle ajouter des commandes"</string> @@ -933,6 +948,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"Données cellulaires"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"Connexion active"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"Aucune connexion auto. des données cellulaires"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"Aucune connexion"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Aucun autre réseau n\'est accessible"</string> diff --git a/packages/SystemUI/res/values-fr/strings.xml b/packages/SystemUI/res/values-fr/strings.xml index 1a2b877da3da..12a88c642de8 100644 --- a/packages/SystemUI/res/values-fr/strings.xml +++ b/packages/SystemUI/res/values-fr/strings.xml @@ -248,7 +248,8 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"Luminosité"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"Inversion des couleurs"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"Correction des couleurs"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Paramètres utilisateur"</string> + <!-- no translation found for quick_settings_more_user_settings (7634653308485206306) --> + <skip /> <string name="quick_settings_done" msgid="2163641301648855793">"OK"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Fermer"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"Connecté"</string> @@ -727,6 +728,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"Désactiver les données mobiles ?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"Vous n\'aurez pas accès aux données mobiles ni à Internet via <xliff:g id="CARRIER">%s</xliff:g>. Vous ne pourrez accéder à Internet que par Wi-Fi."</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"votre opérateur"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"L\'application Paramètres ne peut pas valider votre réponse, car une application masque la demande d\'autorisation."</string> <string name="slice_permission_title" msgid="3262615140094151017">"Autoriser <xliff:g id="APP_0">%1$s</xliff:g> à afficher des éléments de <xliff:g id="APP_2">%2$s</xliff:g> ?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"- Accès aux informations de <xliff:g id="APP">%1$s</xliff:g>"</string> @@ -785,12 +794,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"Paramètres de la fenêtre d\'agrandissement"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Appuyez pour ouvrir fonctionnalités d\'accessibilité. Personnalisez ou remplacez bouton dans paramètres.\n\n"<annotation id="link">"Voir paramètres"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Déplacer le bouton vers le bord pour le masquer temporairement"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Déplacer en haut à gauche"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Déplacer en haut à droite"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Déplacer en bas à gauche"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Déplacer en bas à droite"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Rapprocher du bord et masquer"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Éloigner du bord et afficher"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"activer/désactiver"</string> <string name="quick_controls_title" msgid="6839108006171302273">"Commandes des appareils"</string> <string name="controls_providers_title" msgid="6879775889857085056">"Sélectionnez l\'appli pour laquelle ajouter des commandes"</string> @@ -933,6 +948,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"Données mobiles"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"Connecté"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"Pas de connexion automatique des données mobiles"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"Aucune connexion"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Aucun autre réseau disponible"</string> diff --git a/packages/SystemUI/res/values-gl/strings.xml b/packages/SystemUI/res/values-gl/strings.xml index e5def1ec0ca1..d18d596d5356 100644 --- a/packages/SystemUI/res/values-gl/strings.xml +++ b/packages/SystemUI/res/values-gl/strings.xml @@ -248,7 +248,8 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"Brillo"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"Inversión da cor"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"Corrección da cor"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Configuración de usuario"</string> + <!-- no translation found for quick_settings_more_user_settings (7634653308485206306) --> + <skip /> <string name="quick_settings_done" msgid="2163641301648855793">"Feito"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Pechar"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"Conectado"</string> @@ -727,6 +728,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"Queres desactivar os datos móbiles?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"Non terás acceso aos datos nin a Internet a través de <xliff:g id="CARRIER">%s</xliff:g>. Internet só estará dispoñible mediante a wifi."</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"o teu operador"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"Dado que unha aplicación se superpón sobre unha solicitude de permiso, a configuración non pode verificar a túa resposta."</string> <string name="slice_permission_title" msgid="3262615140094151017">"Queres permitir que <xliff:g id="APP_0">%1$s</xliff:g> mostre fragmentos de aplicación de <xliff:g id="APP_2">%2$s</xliff:g>?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"- Pode ler información da aplicación <xliff:g id="APP">%1$s</xliff:g>"</string> @@ -785,12 +794,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"Configuración da ventá da lupa"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Toca para abrir as funcións de accesibilidade. Cambia este botón en Configuración.\n\n"<annotation id="link">"Ver configuración"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Para ocultar temporalmente o botón, móveo ata o bordo"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Mover á parte super. esquerda"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Mover á parte superior dereita"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Mover á parte infer. esquerda"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Mover á parte inferior dereita"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Mover ao bordo e ocultar"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Mover fóra do bordo e mostrar"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"activar/desactivar"</string> <string name="quick_controls_title" msgid="6839108006171302273">"Control de dispositivos"</string> <string name="controls_providers_title" msgid="6879775889857085056">"Escolle unha aplicación para engadir controis"</string> @@ -933,6 +948,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"Datos móbiles"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"Conectada"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"Os datos móbiles non se conectarán automaticamente"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"Sen conexión"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Non hai outras redes dispoñibles"</string> diff --git a/packages/SystemUI/res/values-gu/strings.xml b/packages/SystemUI/res/values-gu/strings.xml index 552b0491bdb8..034c161f487c 100644 --- a/packages/SystemUI/res/values-gu/strings.xml +++ b/packages/SystemUI/res/values-gu/strings.xml @@ -248,7 +248,8 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"તેજ"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"વિપરીત રંગમાં બદલવું"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"રંગ સુધારણા"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"વપરાશકર્તા સેટિંગ"</string> + <!-- no translation found for quick_settings_more_user_settings (7634653308485206306) --> + <skip /> <string name="quick_settings_done" msgid="2163641301648855793">"થઈ ગયું"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"બંધ કરો"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"કનેક્ટ થયેલું"</string> @@ -727,6 +728,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"મોબાઇલ ડેટા બંધ કરીએ?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"તમને <xliff:g id="CARRIER">%s</xliff:g> મારફતે ડેટા અથવા ઇન્ટરનેટનો ઍક્સેસ મળશે નહીં. ઇન્ટરનેટ માત્ર વાઇ-ફાઇ દ્વારા ઉપલબ્ધ થશે."</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"તમારા કૅરિઅર"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"કોઈ ઍપ પરવાનગી વિનંતીને અસ્પષ્ટ કરતી હોવાને કારણે, સેટિંગ તમારા પ્રતિસાદને ચકાસી શકતું નથી."</string> <string name="slice_permission_title" msgid="3262615140094151017">"<xliff:g id="APP_0">%1$s</xliff:g>ને <xliff:g id="APP_2">%2$s</xliff:g> સ્લાઇસ બતાવવાની મંજૂરી આપીએ?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"- મારાથી <xliff:g id="APP">%1$s</xliff:g>ની માહિતી વાંચી શકાતી નથી"</string> @@ -785,12 +794,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"મેગ્નિફાયર વિન્ડોના સેટિંગ"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"ઍક્સેસિબિલિટી સુવિધાઓ ખોલવા માટે ટૅપ કરો. સેટિંગમાં આ બટનને કસ્ટમાઇઝ કરો અથવા બદલો.\n\n"<annotation id="link">"સેટિંગ જુઓ"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"તેને હંગામી રૂપે ખસેડવા માટે બટનને કિનારી પર ખસેડો"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"ઉપર ડાબે ખસેડો"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"ઉપર જમણે ખસેડો"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"નીચે ડાબે ખસેડો"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"નીચે જમણે ખસેડો"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"કિનારી પર ખસેડો અને છુપાવો"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"કિનારીથી ખસેડો અને બતાવો"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"ટૉગલ કરો"</string> <string name="quick_controls_title" msgid="6839108006171302273">"ડિવાઇસનાં નિયંત્રણો"</string> <string name="controls_providers_title" msgid="6879775889857085056">"નિયંત્રણો ઉમેરવા માટે ઍપ પસંદ કરો"</string> @@ -933,6 +948,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"મોબાઇલ ડેટા"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"કનેક્ટ કરેલું"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"મોબાઇલ ડેટા ઑટોમૅટિક રીતે કનેક્ટ થશે નહીં"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"કોઈ કનેક્શન નથી"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"બીજાં કોઈ નેટવર્ક ઉપલબ્ધ નથી"</string> diff --git a/packages/SystemUI/res/values-hi/strings.xml b/packages/SystemUI/res/values-hi/strings.xml index c0052d62531e..dc94a8de1fc2 100644 --- a/packages/SystemUI/res/values-hi/strings.xml +++ b/packages/SystemUI/res/values-hi/strings.xml @@ -248,7 +248,8 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"स्क्रीन की रोशनी"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"रंग बदलने की सुविधा"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"रंग में सुधार करने की सुविधा"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"उपयोगकर्ता सेटिंग"</string> + <!-- no translation found for quick_settings_more_user_settings (7634653308485206306) --> + <skip /> <string name="quick_settings_done" msgid="2163641301648855793">"हो गया"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"रद्द करें"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"कनेक्ट है"</string> @@ -727,6 +728,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"मोबाइल डेटा बंद करना चाहते हैं?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"आप <xliff:g id="CARRIER">%s</xliff:g> से डेटा या इंटरनेट का इस्तेमाल नहीं कर पाएंगे. इंटरनेट सिर्फ़ वाई-फ़ाई से चलेगा."</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"आपको मोबाइल और इंटरनेट सेवा देने वाली कंपनी"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"ऐप की वजह से मंज़ूरी के अनुरोध को समझने में दिक्कत हो रही है, इसलिए सेटिंग से आपके जवाब की पुष्टि नहीं हो पा रही है."</string> <string name="slice_permission_title" msgid="3262615140094151017">"<xliff:g id="APP_0">%1$s</xliff:g> को <xliff:g id="APP_2">%2$s</xliff:g> के हिस्से (स्लाइस) दिखाने की मंज़ूरी दें?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"- यह <xliff:g id="APP">%1$s</xliff:g> से सूचना पढ़ सकता है"</string> @@ -785,12 +794,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"ज़ूम करने की सुविधा वाली विंडो से जुड़ी सेटिंग"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"सुलभता सुविधाएं खोलने के लिए टैप करें. सेटिंग में, इस बटन को बदलें या अपने हिसाब से सेट करें.\n\n"<annotation id="link">"सेटिंग देखें"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"बटन को कुछ समय छिपाने के लिए, उसे किनारे पर ले जाएं"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"सबसे ऊपर बाईं ओर ले जाएं"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"सबसे ऊपर दाईं ओर ले जाएं"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"सबसे नीचे बाईं ओर ले जाएं"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"सबसे नीचे दाईं ओर ले जाएं"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"एज पर ले जाएं और छिपाएं"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"एज से निकालें और दिखाएं"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"टॉगल करें"</string> <string name="quick_controls_title" msgid="6839108006171302273">"डिवाइस कंट्रोल"</string> <string name="controls_providers_title" msgid="6879775889857085056">"कंट्रोल जोड़ने के लिए ऐप्लिकेशन चुनें"</string> @@ -933,6 +948,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"मोबाइल डेटा"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"कनेक्ट हो गया"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"मोबाइल डेटा अपने-आप कनेक्ट नहीं होगा"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"इंटरनेट कनेक्शन नहीं है"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"कोई दूसरा नेटवर्क उपलब्ध नहीं है"</string> diff --git a/packages/SystemUI/res/values-hr/strings.xml b/packages/SystemUI/res/values-hr/strings.xml index 60f0c8a86712..be5253fc8c07 100644 --- a/packages/SystemUI/res/values-hr/strings.xml +++ b/packages/SystemUI/res/values-hr/strings.xml @@ -248,7 +248,7 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"Svjetlina"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"Inverzija boja"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"Korekcija boja"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Korisničke postavke"</string> + <string name="quick_settings_more_user_settings" msgid="7634653308485206306">"Upravljajte korisnicima"</string> <string name="quick_settings_done" msgid="2163641301648855793">"Gotovo"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Zatvori"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"Povezano"</string> @@ -727,6 +727,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"Isključiti mobilne podatke?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"Nećete imati pristup mobilnim podacima ili internetu putem operatera <xliff:g id="CARRIER">%s</xliff:g>. Internet će biti dostupan samo putem Wi-Fija."</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"vaš mobilni operater"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"Budući da aplikacija prekriva zahtjev za dopuštenje, Postavke ne mogu potvrditi vaš odgovor."</string> <string name="slice_permission_title" msgid="3262615140094151017">"Želite li dopustiti aplikaciji <xliff:g id="APP_0">%1$s</xliff:g> da prikazuje isječke aplikacije <xliff:g id="APP_2">%2$s</xliff:g>?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"– može čitati informacije aplikacije <xliff:g id="APP">%1$s</xliff:g>"</string> @@ -785,12 +793,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"Postavke prozora povećala"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Dodirnite za otvaranje značajki pristupačnosti. Prilagodite ili zamijenite taj gumb u postavkama.\n\n"<annotation id="link">"Pregledajte postavke"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Pomaknite gumb do ruba da biste ga privremeno sakrili"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Premjesti u gornji lijevi kut"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Premjesti u gornji desni kut"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Premjesti u donji lijevi kut"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Premjesti u donji desni kut"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Premjesti na rub i sakrij"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Ukloni s ruba i prikaži"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"promijeni"</string> <string name="quick_controls_title" msgid="6839108006171302273">"Kontrole uređaja"</string> <string name="controls_providers_title" msgid="6879775889857085056">"Odabir aplikacije za dodavanje kontrola"</string> @@ -933,6 +947,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"Mobilni podaci"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"Povezano"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"Mobilna veza neće se automatski uspostaviti"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"Niste povezani"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Nije dostupna nijedna druga mreža"</string> diff --git a/packages/SystemUI/res/values-hu/strings.xml b/packages/SystemUI/res/values-hu/strings.xml index 0f6daa286ec9..cf074380b854 100644 --- a/packages/SystemUI/res/values-hu/strings.xml +++ b/packages/SystemUI/res/values-hu/strings.xml @@ -248,7 +248,8 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"Fényerő"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"Színek invertálása"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"Színjavítás"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Felhasználói beállítások"</string> + <!-- no translation found for quick_settings_more_user_settings (7634653308485206306) --> + <skip /> <string name="quick_settings_done" msgid="2163641301648855793">"Kész"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Bezárás"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"Csatlakoztatva"</string> @@ -727,6 +728,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"Kikapcsolja a mobiladatokat?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"Nem lesz adat-, illetve internet-hozzáférése a <xliff:g id="CARRIER">%s</xliff:g> szolgáltatón keresztül. Az internethez csak Wi-Fi-n keresztül csatlakozhat."</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"saját mobilszolgáltató"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"Mivel az egyik alkalmazás eltakarja az engedélykérést, a Beállítások alkalmazás nem tudja ellenőrizni az Ön válaszát."</string> <string name="slice_permission_title" msgid="3262615140094151017">"Engedélyezi a(z) <xliff:g id="APP_0">%1$s</xliff:g> alkalmazásnak, hogy részleteket mutasson a(z) <xliff:g id="APP_2">%2$s</xliff:g> alkalmazásból?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"– Információkat olvashat a(z) <xliff:g id="APP">%1$s</xliff:g> alkalmazásból"</string> @@ -785,12 +794,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"Nagyítóablak beállításai"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Koppintson a kisegítő lehetőségek megnyitásához. A gombot a Beállításokban módosíthatja.\n\n"<annotation id="link">"Beállítások"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"A gombot a szélre áthelyezve ideiglenesen elrejtheti"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Áthelyezés fel és balra"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Áthelyezés fel és jobbra"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Áthelyezés le és balra"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Áthelyezés le és jobbra"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Áthelyezés a szélen kívül és elrejtés"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Áthelyezés a szélen kívül és mutatás"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"váltás"</string> <string name="quick_controls_title" msgid="6839108006171302273">"Eszközvezérlők"</string> <string name="controls_providers_title" msgid="6879775889857085056">"Válasszon alkalmazást a vezérlők hozzáadásához"</string> @@ -933,6 +948,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"Mobiladat"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="NETWORKMODE">%2$s</xliff:g>/<xliff:g id="STATE">%1$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"Csatlakozva"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"Nincs automatikus mobiladat-kapcsolat"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"Nincs kapcsolat"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Nincs több rendelkezésre álló hálózat"</string> diff --git a/packages/SystemUI/res/values-hy/strings.xml b/packages/SystemUI/res/values-hy/strings.xml index 4724d5c876cc..bfd051b82b47 100644 --- a/packages/SystemUI/res/values-hy/strings.xml +++ b/packages/SystemUI/res/values-hy/strings.xml @@ -248,7 +248,8 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"Պայծառություն"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"Գունաշրջում"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"Գունաշտկում"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Օգտատիրոջ կարգավորումներ"</string> + <!-- no translation found for quick_settings_more_user_settings (7634653308485206306) --> + <skip /> <string name="quick_settings_done" msgid="2163641301648855793">"Պատրաստ է"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Փակել"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"Միացված է"</string> @@ -727,6 +728,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"Անջատե՞լ բջջային ինտերնետը"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"<xliff:g id="CARRIER">%s</xliff:g> օպերատորի բջջային ինտերնետը հասանելի չի լինի: Համացանցից կկարողանաք օգտվել միայն Wi-Fi-ի միջոցով:"</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"Ձեր"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"Քանի որ ներածումն արգելափակված է ինչ-որ հավելվածի կողմից, Կարգավորումները չեն կարող հաստատել ձեր պատասխանը:"</string> <string name="slice_permission_title" msgid="3262615140094151017">"Թույլատրե՞լ <xliff:g id="APP_0">%1$s</xliff:g> հավելվածին ցուցադրել հատվածներ <xliff:g id="APP_2">%2$s</xliff:g> հավելվածից"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"- Կարող է կարդալ տեղեկություններ <xliff:g id="APP">%1$s</xliff:g> հավելվածից"</string> @@ -785,12 +794,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"Խոշորացույցի պատուհանի կարգավորումներ"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Հատուկ գործառույթները բացելու համար հպեք։ Անհատականացրեք այս կոճակը կարգավորումներում։\n\n"<annotation id="link">"Կարգավորումներ"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Կոճակը ժամանակավորապես թաքցնելու համար այն տեղափոխեք էկրանի եզր"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Տեղափոխել վերև՝ ձախ"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Տեղափոխել վերև՝ աջ"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Տեղափոխել ներքև՝ ձախ"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Տեղափոխել ներքև՝ աջ"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Տեղափոխել եզրից դուրս և թաքցնել"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Տեղափոխել եզրից դուրս և ցուցադրել"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"միացնել/անջատել"</string> <string name="quick_controls_title" msgid="6839108006171302273">"Սարքերի կառավարման տարրեր"</string> <string name="controls_providers_title" msgid="6879775889857085056">"Ընտրեք հավելված` կառավարման տարրեր ավելացնելու համար"</string> @@ -933,6 +948,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"Բջջային ինտերնետ"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"Միացած է"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"Բջջային ինտերնետն ավտոմատ չի միանա"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"Կապ չկա"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Այլ հասանելի ցանցեր չկան"</string> diff --git a/packages/SystemUI/res/values-in/strings.xml b/packages/SystemUI/res/values-in/strings.xml index 8fefe4014081..87496cfb1510 100644 --- a/packages/SystemUI/res/values-in/strings.xml +++ b/packages/SystemUI/res/values-in/strings.xml @@ -248,7 +248,8 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"Kecerahan"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"Inversi warna"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"Koreksi warna"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Setelan pengguna"</string> + <!-- no translation found for quick_settings_more_user_settings (7634653308485206306) --> + <skip /> <string name="quick_settings_done" msgid="2163641301648855793">"Selesai"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Tutup"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"Terhubung"</string> @@ -727,6 +728,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"Nonaktifkan data seluler?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"Anda tidak akan dapat mengakses data atau internet melalui <xliff:g id="CARRIER">%s</xliff:g>. Internet hanya akan tersedia melalui Wi-Fi."</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"Operator Seluler Anda"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"Karena sebuah aplikasi menghalangi permintaan izin, Setelan tidak dapat memverifikasi respons Anda."</string> <string name="slice_permission_title" msgid="3262615140094151017">"Izinkan <xliff:g id="APP_0">%1$s</xliff:g> menampilkan potongan <xliff:g id="APP_2">%2$s</xliff:g>?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"- Dapat membaca informasi dari <xliff:g id="APP">%1$s</xliff:g>"</string> @@ -785,12 +794,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"Setelan jendela kaca pembesar"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Ketuk untuk membuka fitur aksesibilitas. Sesuaikan atau ganti tombol ini di Setelan.\n\n"<annotation id="link">"Lihat setelan"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Pindahkan tombol ke tepi agar tersembunyi untuk sementara"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Pindahkan ke kiri atas"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Pindahkan ke kanan atas"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Pindahkan ke kiri bawah"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Pindahkan ke kanan bawah"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Pindahkan ke tepi dan sembunyikan"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Pindahkan dari tepi dan tampilkan"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"alihkan"</string> <string name="quick_controls_title" msgid="6839108006171302273">"Kontrol perangkat"</string> <string name="controls_providers_title" msgid="6879775889857085056">"Pilih aplikasi untuk menambahkan kontrol"</string> @@ -933,6 +948,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"Data seluler"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"Terhubung"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"Data seluler tidak akan terhubung otomatis"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"Tidak ada koneksi"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Jaringan lain tidak tersedia"</string> diff --git a/packages/SystemUI/res/values-is/strings.xml b/packages/SystemUI/res/values-is/strings.xml index d22680e3cb10..3d7e2ea82466 100644 --- a/packages/SystemUI/res/values-is/strings.xml +++ b/packages/SystemUI/res/values-is/strings.xml @@ -248,7 +248,8 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"Birtustig"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"Umsnúningur lita"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"Litaleiðrétting"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Notandastillingar"</string> + <!-- no translation found for quick_settings_more_user_settings (7634653308485206306) --> + <skip /> <string name="quick_settings_done" msgid="2163641301648855793">"Lokið"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Loka"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"Tengt"</string> @@ -727,6 +728,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"Viltu slökkva á farsímagögnum?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"Þú munt ekki hafa aðgang að gögnum eða internetinu í gegnum <xliff:g id="CARRIER">%s</xliff:g>. Aðeins verður hægt að tengjast internetinu með Wi-Fi."</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"símafyrirtækið þitt"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"Stillingar geta ekki staðfest svarið þitt vegna þess að forrit er að fela heimildarbeiðni."</string> <string name="slice_permission_title" msgid="3262615140094151017">"Viltu leyfa <xliff:g id="APP_0">%1$s</xliff:g> að sýna sneiðar úr <xliff:g id="APP_2">%2$s</xliff:g>?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"- Það getur lesið upplýsingar úr <xliff:g id="APP">%1$s</xliff:g>"</string> @@ -785,12 +794,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"Stillingar stækkunarglugga"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Ýttu til að opna aðgengiseiginleika. Sérsníddu eða skiptu hnappinum út í stillingum.\n\n"<annotation id="link">"Skoða stillingar"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Færðu hnappinn að brúninni til að fela hann tímabundið"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Færa efst til vinstri"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Færa efst til hægri"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Færa neðst til vinstri"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Færa neðst til hægri"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Færa að jaðri og fela"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Færa að jaðri og birta"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"kveikja/slökkva"</string> <string name="quick_controls_title" msgid="6839108006171302273">"Tækjastjórnun"</string> <string name="controls_providers_title" msgid="6879775889857085056">"Veldu forrit til að bæta við stýringum"</string> @@ -933,6 +948,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"Farsímagögn"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"Tengt"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"Farsímagögn tengjast ekki sjálfkrafa"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"Engin tenging"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Engin önnur net í boði"</string> diff --git a/packages/SystemUI/res/values-it/strings.xml b/packages/SystemUI/res/values-it/strings.xml index df6c14f4ed11..111568057cb4 100644 --- a/packages/SystemUI/res/values-it/strings.xml +++ b/packages/SystemUI/res/values-it/strings.xml @@ -248,7 +248,8 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"Luminosità"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"Inversione dei colori"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"Correzione del colore"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Impostazioni utente"</string> + <!-- no translation found for quick_settings_more_user_settings (7634653308485206306) --> + <skip /> <string name="quick_settings_done" msgid="2163641301648855793">"Fine"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Chiudi"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"Connesso"</string> @@ -727,6 +728,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"Disattivare i dati mobili?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"Non avrai accesso ai dati o a Internet tramite <xliff:g id="CARRIER">%s</xliff:g>. Internet sarà disponibile soltanto tramite Wi-Fi."</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"il tuo operatore"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"Un\'app sta oscurando una richiesta di autorizzazione, pertanto Impostazioni non può verificare la tua risposta."</string> <string name="slice_permission_title" msgid="3262615140094151017">"Vuoi consentire all\'app <xliff:g id="APP_0">%1$s</xliff:g> di mostrare porzioni dell\'app <xliff:g id="APP_2">%2$s</xliff:g>?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"- Può leggere informazioni dell\'app <xliff:g id="APP">%1$s</xliff:g>"</string> @@ -785,12 +794,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"Impostazioni della finestra di ingrandimento"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Tocca per aprire funzioni di accessibilità. Personalizza o sostituisci il pulsante in Impostazioni.\n\n"<annotation id="link">"Vedi impostazioni"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Sposta il pulsante fino al bordo per nasconderlo temporaneamente"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Sposta in alto a sinistra"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Sposta in alto a destra"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Sposta in basso a sinistra"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Sposta in basso a destra"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Sposta fino a bordo e nascondi"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Sposta fuori da bordo e mostra"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"attiva/disattiva"</string> <string name="quick_controls_title" msgid="6839108006171302273">"Controllo dispositivi"</string> <string name="controls_providers_title" msgid="6879775889857085056">"Scegli un\'app per aggiungere controlli"</string> @@ -933,6 +948,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"Dati mobili"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"Connessione attiva"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"Nessuna connessione dati mobili automatica"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"Nessuna connessione"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Nessun\'altra rete disponibile"</string> diff --git a/packages/SystemUI/res/values-iw/strings.xml b/packages/SystemUI/res/values-iw/strings.xml index f24964ae27a9..1fe4e3e45372 100644 --- a/packages/SystemUI/res/values-iw/strings.xml +++ b/packages/SystemUI/res/values-iw/strings.xml @@ -248,7 +248,7 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"בהירות"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"היפוך צבעים"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"תיקון צבע"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"הגדרות המשתמש"</string> + <string name="quick_settings_more_user_settings" msgid="7634653308485206306">"ניהול משתמשים"</string> <string name="quick_settings_done" msgid="2163641301648855793">"סיום"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"סגירה"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"מחובר"</string> @@ -727,6 +727,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"לכבות את חבילת הגלישה?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"לא תהיה לך גישה לנתונים או לאינטרנט באמצעות <xliff:g id="CARRIER">%s</xliff:g>. אינטרנט יהיה זמין רק באמצעות Wi-Fi."</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"הספק שלך"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"יש אפליקציה שמסתירה את בקשת ההרשאה, ולכן אין אפשרות לאמת את התשובה בהגדרות."</string> <string name="slice_permission_title" msgid="3262615140094151017">"האם לאפשר ל-<xliff:g id="APP_0">%1$s</xliff:g> להציג חלקים מ-<xliff:g id="APP_2">%2$s</xliff:g>?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"- תהיה לה אפשרות לקרוא מידע מאפליקציית <xliff:g id="APP">%1$s</xliff:g>"</string> @@ -785,12 +793,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"ההגדרות של חלון ההגדלה"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"מקישים כדי לפתוח את תכונות הנגישות. אפשר להחליף את הלחצן או להתאים אותו אישית בהגדרות.\n\n"<annotation id="link">"הצגת ההגדרות"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"כדי להסתיר זמנית את הלחצן, יש להזיז אותו לקצה"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"העברה לפינה השמאלית העליונה"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"העברה לפינה הימנית העליונה"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"העברה לפינה השמאלית התחתונה"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"העברה לפינה הימנית התחתונה"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"העברה לשוליים והסתרה"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"העברה מהשוליים והצגה"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"החלפת מצב"</string> <string name="quick_controls_title" msgid="6839108006171302273">"פקדי מכשירים"</string> <string name="controls_providers_title" msgid="6879775889857085056">"יש לבחור אפליקציה כדי להוסיף פקדים"</string> @@ -933,6 +947,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"חבילת גלישה"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"מחובר"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"החיבור לנתונים סלולריים לא מתבצע באופן אוטומטי"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"אין חיבור"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"אין רשתות זמינות אחרות"</string> diff --git a/packages/SystemUI/res/values-ja/strings.xml b/packages/SystemUI/res/values-ja/strings.xml index 7ea72237c6b5..b00ceb4f1942 100644 --- a/packages/SystemUI/res/values-ja/strings.xml +++ b/packages/SystemUI/res/values-ja/strings.xml @@ -248,7 +248,8 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"画面の明るさ"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"色反転"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"色補正"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"ユーザー設定"</string> + <!-- no translation found for quick_settings_more_user_settings (7634653308485206306) --> + <skip /> <string name="quick_settings_done" msgid="2163641301648855793">"完了"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"閉じる"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"接続済み"</string> @@ -727,6 +728,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"モバイルデータを OFF にしますか?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"<xliff:g id="CARRIER">%s</xliff:g>でデータやインターネットにアクセスできなくなります。インターネットには Wi-Fi からのみ接続できます。"</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"携帯通信会社"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"アプリが許可リクエストを隠しているため、設定側でユーザーの応答を確認できません。"</string> <string name="slice_permission_title" msgid="3262615140094151017">"「<xliff:g id="APP_2">%2$s</xliff:g>」のスライスの表示を「<xliff:g id="APP_0">%1$s</xliff:g>」に許可しますか?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"- 「<xliff:g id="APP">%1$s</xliff:g>」からの情報の読み取り"</string> @@ -785,12 +794,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"拡大鏡ウィンドウの設定"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"タップしてユーザー補助機能を開きます。ボタンのカスタマイズや入れ替えを [設定] で行えます。\n\n"<annotation id="link">"設定を表示"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"ボタンを一時的に非表示にするには、端に移動させてください"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"左上に移動"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"右上に移動"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"左下に移動"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"右下に移動"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"端に移動して非表示"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"端から移動して表示"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"切り替え"</string> <string name="quick_controls_title" msgid="6839108006171302273">"デバイス コントロール"</string> <string name="controls_providers_title" msgid="6879775889857085056">"コントロールを追加するアプリの選択"</string> @@ -933,6 +948,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"モバイルデータ"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"接続済み"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"モバイルデータには自動接続しません"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"接続なし"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"利用できるネットワークはありません"</string> diff --git a/packages/SystemUI/res/values-ka/strings.xml b/packages/SystemUI/res/values-ka/strings.xml index 93c9d94e6cea..aab9a327d214 100644 --- a/packages/SystemUI/res/values-ka/strings.xml +++ b/packages/SystemUI/res/values-ka/strings.xml @@ -248,7 +248,8 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"განათება"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"ფერთა ინვერსია"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"ფერთა კორექცია"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"მომხმარებლის პარამეტრები"</string> + <!-- no translation found for quick_settings_more_user_settings (7634653308485206306) --> + <skip /> <string name="quick_settings_done" msgid="2163641301648855793">"დასრულდა"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"დახურვა"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"დაკავშირებულია"</string> @@ -727,6 +728,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"გსურთ მობილური ინტერნეტის გამორთვა?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"თქვენ არ გექნებათ მობილურ ინტერნეტზე ან ზოგადად ინტერნეტზე წვდომა <xliff:g id="CARRIER">%s</xliff:g>-ის მეშვეობით. ინტერნეტი მხოლოდ Wi-Fi-კავშირის მეშვეობით იქნება ხელმისაწვდომი."</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"თქვენი ოპერატორი"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"ვინაიდან აპი ფარავს ნებართვის მოთხოვნას, პარამეტრების მიერ თქვენი პასუხი ვერ დასტურდება."</string> <string name="slice_permission_title" msgid="3262615140094151017">"ანიჭებთ ნებართვას <xliff:g id="APP_0">%1$s</xliff:g>-ს, აჩვენოს <xliff:g id="APP_2">%2$s</xliff:g>-ის ფრაგმენტები?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"- მას შეუძლია ინფორმაციის <xliff:g id="APP">%1$s</xliff:g>-დან წაკითხვა"</string> @@ -785,12 +794,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"გადიდების ფანჯრის პარამეტრები"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"შეეხეთ მარტივი წვდომის ფუნქციების გასახსნელად. მოარგეთ ან შეცვალეთ ეს ღილაკი პარამეტრებში.\n\n"<annotation id="link">"პარამეტრების ნახვა"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"გადაიტანეთ ღილაკი კიდეში, რათა დროებით დამალოთ ის"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"ზევით და მარცხნივ გადატანა"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"ზევით და მარჯვნივ გადატანა"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"ქვევით და მარცხნივ გადატანა"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"ქვემოთ და მარჯვნივ გადატანა"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"კიდეში გადატანა და დამალვა"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"კიდეში გადატანა და გამოჩენა"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"გადართვა"</string> <string name="quick_controls_title" msgid="6839108006171302273">"მოწყობილ. მართვის საშუალებები"</string> <string name="controls_providers_title" msgid="6879775889857085056">"აირჩიეთ აპი მართვის საშუალებების დასამატებლად"</string> @@ -933,6 +948,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"მობილური ინტერნეტი"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"დაკავშირებული"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"მობილურ ინტერნეტს ავტომატურად არ დაუკავშირდება"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"კავშირი არ არის"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"სხვა ქსელები მიუწვდომელია"</string> diff --git a/packages/SystemUI/res/values-kk/strings.xml b/packages/SystemUI/res/values-kk/strings.xml index e096b7e2b7ac..19bfdf5e0174 100644 --- a/packages/SystemUI/res/values-kk/strings.xml +++ b/packages/SystemUI/res/values-kk/strings.xml @@ -248,7 +248,8 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"Жарықтығы"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"Түс инверсиясы"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"Түсті түзету"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Пайдаланушы параметрлері"</string> + <!-- no translation found for quick_settings_more_user_settings (7634653308485206306) --> + <skip /> <string name="quick_settings_done" msgid="2163641301648855793">"Дайын"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Жабу"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"Қосылды"</string> @@ -727,6 +728,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"Мобильдік интернет өшірілсін бе?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"<xliff:g id="CARRIER">%s</xliff:g> операторы арқылы деректерге немесе интернетке кіре алмайсыз. Интернетке тек Wi-Fi арқылы кіресіз."</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"операторыңыз"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"Басқа қолданба рұқсат сұрауын жасырып тұрғандықтан, параметрлер жауабыңызды растай алмайды."</string> <string name="slice_permission_title" msgid="3262615140094151017">"<xliff:g id="APP_0">%1$s</xliff:g> қолданбасына <xliff:g id="APP_2">%2$s</xliff:g> қолданбасының үзінділерін көрсетуге рұқсат берілсін бе?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"- Бұл <xliff:g id="APP">%1$s</xliff:g> қолданбасындағы ақпаратты оқи алады"</string> @@ -785,12 +794,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"Ұлғайтқыш терезесінің параметрлері"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Арнайы мүмкіндікті ашу үшін түртіңіз. Түймені параметрден реттеңіз не ауыстырыңыз.\n\n"<annotation id="link">"Параметрді көру"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Түймені уақытша жасыру үшін оны шетке қарай жылжытыңыз."</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Жоғарғы сол жаққа жылжыту"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Жоғарғы оң жаққа жылжыту"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Төменгі сол жаққа жылжыту"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Төменгі оң жаққа жылжыту"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Шетке жылжыту және жасыру"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Шетке жылжыту және көрсету"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"ауыстыру"</string> <string name="quick_controls_title" msgid="6839108006171302273">"Құрылғыны басқару элементтері"</string> <string name="controls_providers_title" msgid="6879775889857085056">"Басқару элементтері қосылатын қолданбаны таңдаңыз"</string> @@ -933,6 +948,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"Мобильдік интернет"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"Жалғанды"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"Мобильдік интернет автоматты түрде қосылмайды."</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"Байланыс жоқ"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Басқа қолжетімді желі жоқ"</string> diff --git a/packages/SystemUI/res/values-km/strings.xml b/packages/SystemUI/res/values-km/strings.xml index aa641e47630c..186244b7b803 100644 --- a/packages/SystemUI/res/values-km/strings.xml +++ b/packages/SystemUI/res/values-km/strings.xml @@ -248,7 +248,8 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"ពន្លឺ"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"ការបញ្ច្រាសពណ៌"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"ការកែតម្រូវពណ៌"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"ការកំណត់អ្នកប្រើប្រាស់"</string> + <!-- no translation found for quick_settings_more_user_settings (7634653308485206306) --> + <skip /> <string name="quick_settings_done" msgid="2163641301648855793">"រួចរាល់"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"បិទ"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"បានភ្ជាប់"</string> @@ -727,6 +728,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"បិទទិន្នន័យទូរសព្ទចល័ត?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"អ្នកនឹងមិនមានសិទ្ធិចូលប្រើទិន្នន័យ ឬអ៊ីនធឺណិតតាមរយៈ <xliff:g id="CARRIER">%s</xliff:g> បានឡើយ។ អ៊ីនធឺណិតនឹងអាចប្រើបានតាមរយៈ Wi-Fi តែប៉ុណ្ណោះ។"</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"ក្រុមហ៊ុនសេវាទូរសព្ទរបស់អ្នក"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"ការកំណត់មិនអាចផ្ទៀងផ្ទាត់ការឆ្លើយតបរបស់អ្នកបានទេ ដោយសារកម្មវិធីកំពុងបាំងសំណើសុំការអនុញ្ញាត។"</string> <string name="slice_permission_title" msgid="3262615140094151017">"អនុញ្ញាតឱ្យ <xliff:g id="APP_0">%1$s</xliff:g> បង្ហាញស្ថិតិប្រើប្រាស់របស់ <xliff:g id="APP_2">%2$s</xliff:g>?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"- វាអាចអានព័ត៌មានពី <xliff:g id="APP">%1$s</xliff:g>"</string> @@ -785,12 +794,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"ការកំណត់វិនដូកម្មវិធីពង្រីក"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"ចុចដើម្បីបើកមុខងារភាពងាយស្រួល។ ប្ដូរ ឬប្ដូរប៊ូតុងនេះតាមបំណងនៅក្នុងការកំណត់។\n\n"<annotation id="link">"មើលការកំណត់"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"ផ្លាស់ទីប៊ូតុងទៅគែម ដើម្បីលាក់វាជាបណ្ដោះអាសន្ន"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"ផ្លាស់ទីទៅខាងលើផ្នែកខាងឆ្វេង"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"ផ្លាស់ទីទៅខាងលើផ្នែកខាងស្ដាំ"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"ផ្លាស់ទីទៅខាងក្រោមផ្នែកខាងឆ្វេង"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"ផ្លាស់ទីទៅខាងក្រោមផ្នែកខាងស្ដាំ"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"ផ្លាស់ទីទៅផ្នែកខាងចុង រួចលាក់"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"ផ្លាស់ទីចេញពីផ្នែកខាងចុង រួចបង្ហាញ"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"បិទ/បើក"</string> <string name="quick_controls_title" msgid="6839108006171302273">"ផ្ទាំងគ្រប់គ្រងឧបករណ៍"</string> <string name="controls_providers_title" msgid="6879775889857085056">"ជ្រើសរើសកម្មវិធីដែលត្រូវបញ្ចូលផ្ទាំងគ្រប់គ្រង"</string> @@ -933,6 +948,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"ទិន្នន័យទូរសព្ទចល័ត"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"បានភ្ជាប់"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"ទិន្នន័យទូរសព្ទចល័តនឹងមិនភ្ជាប់ដោយស្វ័យប្រវត្តិទេ"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"មិនមានការតភ្ជាប់ទេ"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"មិនមានបណ្ដាញផ្សេងទៀតដែលអាចប្រើបានទេ"</string> diff --git a/packages/SystemUI/res/values-kn/strings.xml b/packages/SystemUI/res/values-kn/strings.xml index ab3f379e37d3..3341f8d7f7e2 100644 --- a/packages/SystemUI/res/values-kn/strings.xml +++ b/packages/SystemUI/res/values-kn/strings.xml @@ -248,7 +248,8 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"ಪ್ರಕಾಶಮಾನ"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"ಕಲರ್ ಇನ್ವರ್ಶನ್"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"ಬಣ್ಣದ ತಿದ್ದುಪಡಿ"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"ಬಳಕೆದಾರರ ಸೆಟ್ಟಿಂಗ್ಗಳು"</string> + <!-- no translation found for quick_settings_more_user_settings (7634653308485206306) --> + <skip /> <string name="quick_settings_done" msgid="2163641301648855793">"ಮುಗಿದಿದೆ"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"ಮುಚ್ಚಿರಿ"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"ಸಂಪರ್ಕಗೊಂಡಿದೆ"</string> @@ -727,6 +728,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"ಮೊಬೈಲ್ ಡೇಟಾ ಆಫ್ ಮಾಡಬೇಕೆ?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"ನೀವು <xliff:g id="CARRIER">%s</xliff:g> ಮೂಲಕ ಡೇಟಾ ಅಥವಾ ಇಂಟರ್ನೆಟ್ಗೆ ಪ್ರವೇಶವನ್ನು ಹೊಂದಿರುವುದಿಲ್ಲ. ಇಂಟರ್ನೆಟ್, ವೈ-ಫೈ ಮೂಲಕ ಮಾತ್ರ ಲಭ್ಯವಿರುತ್ತದೆ."</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"ನಿಮ್ಮ ವಾಹಕ"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"ಅನುಮತಿ ವಿನಂತಿಯನ್ನು ಅಪ್ಲಿಕೇಶನ್ ಮರೆಮಾಚುತ್ತಿರುವ ಕಾರಣ, ಸೆಟ್ಟಿಂಗ್ಗಳಿಗೆ ನಿಮ್ಮ ಪ್ರತಿಕ್ರಿಯೆಯನ್ನು ಪರಿಶೀಲಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ."</string> <string name="slice_permission_title" msgid="3262615140094151017">"<xliff:g id="APP_2">%2$s</xliff:g> ಸ್ಲೈಸ್ಗಳನ್ನು ತೋರಿಸಲು <xliff:g id="APP_0">%1$s</xliff:g> ಅನ್ನು ಅನುಮತಿಸುವುದೇ?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"- ಇದು <xliff:g id="APP">%1$s</xliff:g> ನಿಂದ ಮಾಹಿತಿಯನ್ನು ಓದಬಹುದು"</string> @@ -785,12 +794,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"ಮ್ಯಾಗ್ನಿಫೈರ್ ವಿಂಡೋ ಸೆಟ್ಟಿಂಗ್ಗಳು"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"ಪ್ರವೇಶಿಸುವಿಕೆ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ತೆರೆಯಲು ಟ್ಯಾಪ್ ಮಾಡಿ. ಸೆಟ್ಟಿಂಗ್ಗಳಲ್ಲಿ ಈ ಬಟನ್ ಅನ್ನು ಕಸ್ಟಮೈಸ್ ಮಾಡಿ ಅಥವಾ ಬದಲಾಯಿಸಿ.\n\n"<annotation id="link">"ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ವೀಕ್ಷಿಸಿ"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"ಅದನ್ನು ತಾತ್ಕಾಲಿಕವಾಗಿ ಮರೆಮಾಡಲು ಅಂಚಿಗೆ ಬಟನ್ ಸರಿಸಿ"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"ಎಡ ಮೇಲ್ಭಾಗಕ್ಕೆ ಸರಿಸಿ"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"ಬಲ ಮೇಲ್ಭಾಗಕ್ಕೆ ಸರಿಸಿ"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"ಸ್ಕ್ರೀನ್ನ ಎಡ ಕೆಳಭಾಗಕ್ಕೆ ಸರಿಸಿ"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"ಕೆಳಗಿನ ಬಲಭಾಗಕ್ಕೆ ಸರಿಸಿ"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"ಅಂಚಿಗೆ ಸರಿಸಿ ಮತ್ತು ಮರೆಮಾಡಿ"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"ಅಂಚನ್ನು ಸರಿಸಿ ಮತ್ತು ತೋರಿಸಿ"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"ಟಾಗಲ್ ಮಾಡಿ"</string> <string name="quick_controls_title" msgid="6839108006171302273">"ಸಾಧನ ನಿಯಂತ್ರಣಗಳು"</string> <string name="controls_providers_title" msgid="6879775889857085056">"ನಿಯಂತ್ರಣಗಳನ್ನು ಸೇರಿಸಲು ಆ್ಯಪ್ ಅನ್ನು ಆಯ್ಕೆಮಾಡಿ"</string> @@ -933,6 +948,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"ಮೊಬೈಲ್ ಡೇಟಾ"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"ಕನೆಕ್ಟ್ ಆಗಿದೆ"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"ಮೊಬೈಲ್ ಡೇಟಾ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಕನೆಕ್ಟ್ ಆಗುವುದಿಲ್ಲ"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"ಯಾವುದೇ ಕನೆಕ್ಷನ್ ಇಲ್ಲ"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"ಇತರ ಯಾವುದೇ ನೆಟ್ವರ್ಕ್ಗಳು ಲಭ್ಯವಿಲ್ಲ"</string> diff --git a/packages/SystemUI/res/values-ko/strings.xml b/packages/SystemUI/res/values-ko/strings.xml index 11da089fe626..783365ce5478 100644 --- a/packages/SystemUI/res/values-ko/strings.xml +++ b/packages/SystemUI/res/values-ko/strings.xml @@ -248,7 +248,8 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"밝기"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"색상 반전"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"색상 보정"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"사용자 설정"</string> + <!-- no translation found for quick_settings_more_user_settings (7634653308485206306) --> + <skip /> <string name="quick_settings_done" msgid="2163641301648855793">"완료"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"닫기"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"연결됨"</string> @@ -727,6 +728,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"모바일 데이터를 사용 중지하시겠습니까?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"<xliff:g id="CARRIER">%s</xliff:g>을(를) 통해 데이터 또는 인터넷에 액세스할 수 없게 됩니다. 인터넷은 Wi-Fi를 통해서만 사용할 수 있습니다."</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"이동통신사"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"앱이 권한 요청을 가리고 있기 때문에 설정에서 내 응답을 확인할 수 없습니다."</string> <string name="slice_permission_title" msgid="3262615140094151017">"<xliff:g id="APP_0">%1$s</xliff:g>에서 <xliff:g id="APP_2">%2$s</xliff:g>의 슬라이스를 표시하도록 허용하시겠습니까?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"- <xliff:g id="APP">%1$s</xliff:g>의 정보를 읽을 수 있음"</string> @@ -785,12 +794,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"돋보기 창 설정"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"접근성 기능을 열려면 탭하세요. 설정에서 이 버튼을 맞춤설정하거나 교체할 수 있습니다.\n\n"<annotation id="link">"설정 보기"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"버튼을 가장자리로 옮겨서 일시적으로 숨기세요."</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"왼쪽 상단으로 이동"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"오른쪽 상단으로 이동"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"왼쪽 하단으로 이동"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"오른쪽 하단으로 이동"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"가장자리로 옮겨서 숨기기"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"가장자리 바깥으로 옮겨서 표시"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"전환"</string> <string name="quick_controls_title" msgid="6839108006171302273">"기기 컨트롤"</string> <string name="controls_providers_title" msgid="6879775889857085056">"컨트롤을 추가할 앱을 선택하세요"</string> @@ -933,6 +948,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"모바일 데이터"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"연결됨"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"모바일 데이터가 자동으로 연결되지 않음"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"연결되지 않음"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"사용 가능한 다른 네트워크가 없음"</string> diff --git a/packages/SystemUI/res/values-ky/strings.xml b/packages/SystemUI/res/values-ky/strings.xml index 676076cdfb1e..b9da9f09d302 100644 --- a/packages/SystemUI/res/values-ky/strings.xml +++ b/packages/SystemUI/res/values-ky/strings.xml @@ -248,7 +248,8 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"Жарыктыгы"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"Түстөрдү инверсиялоо"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"Түстөрдү тууралоо"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Колдонуучунун параметрлери"</string> + <!-- no translation found for quick_settings_more_user_settings (7634653308485206306) --> + <skip /> <string name="quick_settings_done" msgid="2163641301648855793">"Бүттү"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Жабуу"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"Туташкан"</string> @@ -727,6 +728,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"Мобилдик Интернетти өчүрөсүзбү?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"<xliff:g id="CARRIER">%s</xliff:g> байланыш оператору аркылуу Интернетке кире албай каласыз. Интернетке Wi-Fi аркылуу гана кирүүгө болот."</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"байланыш операторуңуз"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"Уруксат берүү сурамыңыз көрүнбөй калгандыктан, Жөндөөлөр жообуңузду ырастай албай жатат."</string> <string name="slice_permission_title" msgid="3262615140094151017">"<xliff:g id="APP_0">%1$s</xliff:g> колдонмосуна <xliff:g id="APP_2">%2$s</xliff:g> үлгүлөрүн көрсөтүүгө уруксат берилсинби?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"- <xliff:g id="APP">%1$s</xliff:g> колдонмосунун маалыматын окуйт"</string> @@ -785,12 +794,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"Чоңойткуч терезесинин параметрлери"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Атайын мүмкүнчүлүктөрдү ачуу үчүн басыңыз. Бул баскычты Жөндөөлөрдөн өзгөртүңүз.\n\n"<annotation id="link">"Жөндөөлөрдү көрүү"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Баскычты убактылуу жашыра туруу үчүн экрандын четине жылдырыңыз"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Жогорку сол жакка жылдыруу"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Жогорку оң жакка жылдырыңыз"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Төмөнкү сол жакка жылдыруу"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Төмөнкү оң жакка жылдырыңыз"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Ичине жылдырып, көрсөтүңүз"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Сыртка жылдырып, көрсөтүңүз"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"өчүрүү/күйгүзүү"</string> <string name="quick_controls_title" msgid="6839108006171302273">"Түзмөктү башкаруу элементтери"</string> <string name="controls_providers_title" msgid="6879775889857085056">"Башкаруу элементтери кошула турган колдонмону тандоо"</string> @@ -933,6 +948,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"Мобилдик трафик"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"Туташты"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"Мобилдик трафик автоматтык түрдө туташтырылбайт"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"Байланыш жок"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Башка тармактар жеткиликсиз"</string> diff --git a/packages/SystemUI/res/values-lo/strings.xml b/packages/SystemUI/res/values-lo/strings.xml index 4fc25e27b7f5..d7dbb86e022f 100644 --- a/packages/SystemUI/res/values-lo/strings.xml +++ b/packages/SystemUI/res/values-lo/strings.xml @@ -248,7 +248,8 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"ຄວາມແຈ້ງ"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"ການປີ້ນສີ"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"ການແກ້ໄຂສີ"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"ຕັ້ງຄ່າຜູ້ໃຊ້"</string> + <!-- no translation found for quick_settings_more_user_settings (7634653308485206306) --> + <skip /> <string name="quick_settings_done" msgid="2163641301648855793">"ແລ້ວໆ"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"ປິດ"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"ເຊື່ອມຕໍ່ແລ້ວ"</string> @@ -727,6 +728,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"ປິດອິນເຕີເນັດມືຖືໄວ້ບໍ?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"ທ່ານຈະບໍ່ມີສິດເຂົ້າເຖິງຂໍ້ມູນ ຫຼື ອິນເຕີເນັດຜ່ານ <xliff:g id="CARRIER">%s</xliff:g>. ອິນເຕີເນັດຈະສາມາດໃຊ້ໄດ້ຜ່ານ Wi-Fi ເທົ່ານັ້ນ."</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"ຜູ້ໃຫ້ບໍລິການຂອງທ່ານ"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"ເນື່ອງຈາກມີແອັບໃດໜຶ່ງກຳລັງຂັດຂວາງການຂໍອະນຸຍາດ, ການຕັ້ງຄ່າຈຶ່ງບໍ່ສາມາດຢັ້ງຢືນການຕອບຮັບຂອງທ່ານໄດ້."</string> <string name="slice_permission_title" msgid="3262615140094151017">"ອະນຸຍາດ <xliff:g id="APP_0">%1$s</xliff:g> ໃຫ້ສະແດງ <xliff:g id="APP_2">%2$s</xliff:g> ສະໄລ້ບໍ?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"- ມັນສາມາດອ່ານຂໍ້ມູນຈາກ <xliff:g id="APP">%1$s</xliff:g>"</string> @@ -785,12 +794,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"ການຕັ້ງຄ່າໜ້າຈໍຂະຫຍາຍ"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"ແຕະເພື່ອເປີດຄຸນສົມບັດການຊ່ວຍເຂົ້າເຖິງ. ປັບແຕ່ງ ຫຼື ປ່ຽນປຸ່ມນີ້ໃນການຕັ້ງຄ່າ.\n\n"<annotation id="link">"ເບິ່ງການຕັ້ງຄ່າ"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"ຍ້າຍປຸ່ມໄປໃສ່ຂອບເພື່ອເຊື່ອງມັນຊົ່ວຄາວ"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"ຍ້າຍຊ້າຍເທິງ"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"ຍ້າຍຂວາເທິງ"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"ຍ້າຍຊ້າຍລຸ່ມ"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"ຍ້າຍຂວາລຸ່ມ"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"ຍ້າຍອອກຂອບ ແລະ ເຊື່ອງ"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"ຍ້າຍອອກຂອບ ແລະ ສະແດງ"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"ສະຫຼັບ"</string> <string name="quick_controls_title" msgid="6839108006171302273">"ການຄວບຄຸມອຸປະກອນ"</string> <string name="controls_providers_title" msgid="6879775889857085056">"ເລືອກແອັບເພື່ອເພີ່ມການຄວບຄຸມ"</string> @@ -933,6 +948,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"ອິນເຕີເນັດມືຖື"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"ເຊື່ອມຕໍ່ແລ້ວ"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"ຈະບໍ່ເຊື່ອມຕໍ່ອິນເຕີເນັດມືຖືອັດຕະໂນມັດ"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"ບໍ່ມີການເຊື່ອມຕໍ່"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"ບໍ່ມີເຄືອຂ່າຍອື່ນທີ່ສາມາດໃຊ້ໄດ້"</string> diff --git a/packages/SystemUI/res/values-lt/strings.xml b/packages/SystemUI/res/values-lt/strings.xml index b9d6f33c967c..e631ce2a389d 100644 --- a/packages/SystemUI/res/values-lt/strings.xml +++ b/packages/SystemUI/res/values-lt/strings.xml @@ -248,7 +248,8 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"Šviesumas"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"Spalvų inversija"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"Spalvų taisymas"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Naudotojo nustatymai"</string> + <!-- no translation found for quick_settings_more_user_settings (7634653308485206306) --> + <skip /> <string name="quick_settings_done" msgid="2163641301648855793">"Atlikta"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Uždaryti"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"Prijungtas"</string> @@ -727,6 +728,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"Išjungti mobiliojo ryšio duomenis?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"Naudodamiesi „<xliff:g id="CARRIER">%s</xliff:g>“ paslaugomis neturėsite galimybės pasiekti duomenų arba interneto. Internetą galėsite naudoti tik prisijungę prie „Wi-Fi“."</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"savo operatoriaus"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"Kadangi programa užstoja leidimo užklausą, nustatymuose negalima patvirtinti jūsų atsakymo."</string> <string name="slice_permission_title" msgid="3262615140094151017">"Leisti „<xliff:g id="APP_0">%1$s</xliff:g>“ rodyti „<xliff:g id="APP_2">%2$s</xliff:g>“ fragmentus?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"- Gali nuskaityti informaciją iš „<xliff:g id="APP">%1$s</xliff:g>“"</string> @@ -785,12 +794,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"Didinimo lango nustatymai"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Palietę atidarykite pritaikymo neįgaliesiems funkcijas. Tinkinkite arba pakeiskite šį mygtuką nustatymuose.\n\n"<annotation id="link">"Žr. nustatymus"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Perkelkite mygtuką prie krašto, kad laikinai jį paslėptumėte"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Perkelti į viršų kairėje"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Perkelti į viršų dešinėje"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Perkelti į apačią kairėje"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Perkelti į apačią dešinėje"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Perkelti į kraštą ir slėpti"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Perkelti iš krašto ir rodyti"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"perjungti"</string> <string name="quick_controls_title" msgid="6839108006171302273">"Įrenginio valdikliai"</string> <string name="controls_providers_title" msgid="6879775889857085056">"Pasirinkite programą, kad pridėtumėte valdiklių"</string> @@ -933,6 +948,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"Mobiliojo ryšio duomenys"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"Prisijungta"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"Naud. mob. r. duomenis nebus autom. prisijungiama"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"Nėra ryšio"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Nėra kitų pasiekiamų tinklų"</string> diff --git a/packages/SystemUI/res/values-lv/strings.xml b/packages/SystemUI/res/values-lv/strings.xml index 882ff7c8ae43..0a08654eb2e4 100644 --- a/packages/SystemUI/res/values-lv/strings.xml +++ b/packages/SystemUI/res/values-lv/strings.xml @@ -248,7 +248,8 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"Spilgtums"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"Krāsu inversija"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"Krāsu korekcija"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Lietotāja iestatījumi"</string> + <!-- no translation found for quick_settings_more_user_settings (7634653308485206306) --> + <skip /> <string name="quick_settings_done" msgid="2163641301648855793">"Gatavs"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Aizvērt"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"Pievienota"</string> @@ -727,6 +728,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"Vai izslēgt mobilos datus?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"Izmantojot mobilo sakaru operatora <xliff:g id="CARRIER">%s</xliff:g> pakalpojumus, nevarēsiet piekļūt datiem vai internetam. Internetam varēsiet piekļūt, tikai izmantojot Wi-Fi savienojumu."</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"jūsu mobilo sakaru operators"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"Lietotne Iestatījumi nevar verificēt jūsu atbildi, jo cita lietotne aizsedz atļaujas pieprasījumu."</string> <string name="slice_permission_title" msgid="3262615140094151017">"Vai atļaut lietotnei <xliff:g id="APP_0">%1$s</xliff:g> rādīt lietotnes <xliff:g id="APP_2">%2$s</xliff:g> sadaļas?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"- Var lasīt informāciju no lietotnes <xliff:g id="APP">%1$s</xliff:g>"</string> @@ -785,12 +794,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"Lupas loga iestatījumi"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Atveriet pieejamības funkcijas. Pielāgojiet vai aizstājiet šo pogu iestatījumos.\n\n"<annotation id="link">"Skatīt iestatījumus"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Lai īslaicīgi paslēptu pogu, pārvietojiet to uz malu"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Pārvietot augšpusē pa kreisi"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Pārvietot augšpusē pa labi"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Pārvietot apakšpusē pa kreisi"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Pārvietot apakšpusē pa labi"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Pārvietot uz malu un paslēpt"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Pārvietot no malas un parādīt"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"pārslēgt"</string> <string name="quick_controls_title" msgid="6839108006171302273">"Ierīču vadīklas"</string> <string name="controls_providers_title" msgid="6879775889857085056">"Izvēlieties lietotni, lai pievienotu vadīklas"</string> @@ -933,6 +948,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"Mobilie dati"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"Ir izveidots savienojums"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"Mobilo datu savienojums netiks veidots automātiski"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"Nav savienojuma"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Nav pieejams neviens cits tīkls"</string> diff --git a/packages/SystemUI/res/values-mk/strings.xml b/packages/SystemUI/res/values-mk/strings.xml index 0d98dc60477f..e714055585a9 100644 --- a/packages/SystemUI/res/values-mk/strings.xml +++ b/packages/SystemUI/res/values-mk/strings.xml @@ -248,7 +248,8 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"Осветленост"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"Инверзија на боите"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"Корекција на боите"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Кориснички поставки"</string> + <!-- no translation found for quick_settings_more_user_settings (7634653308485206306) --> + <skip /> <string name="quick_settings_done" msgid="2163641301648855793">"Готово"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Затвори"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"Поврзано"</string> @@ -727,6 +728,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"Да се исклучи мобилниот интернет?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"Нема да имате пристап до податоците или интернетот преку <xliff:g id="CARRIER">%s</xliff:g>. Интернетот ќе биде достапен само преку Wi-Fi."</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"вашиот оператор"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"Бидејќи апликацијата го прикрива барањето за дозвола, „Поставките“ не може да го потврдат вашиот одговор."</string> <string name="slice_permission_title" msgid="3262615140094151017">"Да се дозволи <xliff:g id="APP_0">%1$s</xliff:g> да прикажува делови од <xliff:g id="APP_2">%2$s</xliff:g>?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"- Може да чита информации од <xliff:g id="APP">%1$s</xliff:g>"</string> @@ -785,12 +794,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"Поставки за прозорец за лупа"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Допрете за функциите за пристапност. Приспособете или заменете го копчево во „Поставки“.\n\n"<annotation id="link">"Прикажи поставки"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Преместете го копчето до работ за да го сокриете привремено"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Премести горе лево"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Премести горе десно"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Премести долу лево"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Премести долу десно"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Премести до работ и сокриј"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Премести над работ и прикажи"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"вклучување/исклучување"</string> <string name="quick_controls_title" msgid="6839108006171302273">"Контроли за уредите"</string> <string name="controls_providers_title" msgid="6879775889857085056">"Изберете апликација за да додадете контроли"</string> @@ -933,6 +948,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"Мобилен интернет"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"Поврзано"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"Мобилниот интернет не може да се поврзе автоматски"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"Нема интернет-врска"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Нема други достапни мрежи"</string> diff --git a/packages/SystemUI/res/values-ml/strings.xml b/packages/SystemUI/res/values-ml/strings.xml index 868d75989943..666e60134d46 100644 --- a/packages/SystemUI/res/values-ml/strings.xml +++ b/packages/SystemUI/res/values-ml/strings.xml @@ -248,7 +248,7 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"തെളിച്ചം"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"നിറം വിപരീതമാക്കൽ"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"നിറം ശരിയാക്കൽ"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"ഉപയോക്തൃ ക്രമീകരണം"</string> + <string name="quick_settings_more_user_settings" msgid="7634653308485206306">"ഉപയോക്താക്കളെ മാനേജ് ചെയ്യുക"</string> <string name="quick_settings_done" msgid="2163641301648855793">"പൂർത്തിയാക്കി"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"അടയ്ക്കുക"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"കണക്റ്റുചെയ്തു"</string> @@ -727,6 +727,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"മൊബൈൽ ഡാറ്റ ഓഫാക്കണോ?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"നിങ്ങൾക്ക് ഡാറ്റയിലേക്ക് ആക്സസോ അല്ലെങ്കിൽ <xliff:g id="CARRIER">%s</xliff:g> മുഖേനയുള്ള ഇന്റർനെറ്റോ ഉണ്ടാകില്ല. വൈഫൈ മുഖേന മാത്രമായിരിക്കും ഇന്റർനെറ്റ് ലഭ്യത."</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"നിങ്ങളുടെ കാരിയർ"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"അനുമതി അഭ്യർത്ഥനയെ ഒരു ആപ്പ് മറയ്ക്കുന്നതിനാൽ, ക്രമീകരണത്തിന് നിങ്ങളുടെ പ്രതികരണം പരിശോധിച്ചുറപ്പിക്കാനാകില്ല."</string> <string name="slice_permission_title" msgid="3262615140094151017">"<xliff:g id="APP_2">%2$s</xliff:g> സ്ലൈസുകൾ കാണിക്കാൻ <xliff:g id="APP_0">%1$s</xliff:g>-നെ അനുവദിക്കണോ?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"- ഇതിന് <xliff:g id="APP">%1$s</xliff:g>-ൽ നിന്ന് വിവരങ്ങൾ വായിക്കാനാകും"</string> @@ -785,12 +793,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"മാഗ്നിഫയർ വിൻഡോ ക്രമീകരണം"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"ഉപയോഗസഹായി ഫീച്ചർ തുറക്കാൻ ടാപ്പ് ചെയ്യൂ. ക്രമീകരണത്തിൽ ഈ ബട്ടൺ ഇഷ്ടാനുസൃതമാക്കാം, മാറ്റാം.\n\n"<annotation id="link">"ക്രമീകരണം കാണൂ"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"തൽക്കാലം മറയ്ക്കുന്നതിന് ബട്ടൺ അരുകിലേക്ക് നീക്കുക"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"മുകളിൽ ഇടതുഭാഗത്തേക്ക് നീക്കുക"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"മുകളിൽ വലതുഭാഗത്തേക്ക് നീക്കുക"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"ചുവടെ ഇടതുഭാഗത്തേക്ക് നീക്കുക"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"ചുവടെ വലതുഭാഗത്തേക്ക് നീക്കുക"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"എഡ്ജിലേക്ക് നീക്കി മറയ്ക്കുക"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"എഡ്ജിൽ നിന്ന് നീക്കി കാണിക്കൂ"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"മാറ്റുക"</string> <string name="quick_controls_title" msgid="6839108006171302273">"ഉപകരണ നിയന്ത്രണങ്ങൾ"</string> <string name="controls_providers_title" msgid="6879775889857085056">"നിയന്ത്രണങ്ങൾ ചേർക്കാൻ ആപ്പ് തിരഞ്ഞെടുക്കുക"</string> @@ -933,6 +947,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"മൊബൈൽ ഡാറ്റ"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"കണക്റ്റ് ചെയ്തു"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"മൊബൈൽ ഡാറ്റ സ്വയം കണക്റ്റ് ചെയ്യില്ല"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"കണക്ഷനില്ല"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"മറ്റ് നെറ്റ്വർക്കുകളൊന്നും ലഭ്യമല്ല"</string> diff --git a/packages/SystemUI/res/values-mn/strings.xml b/packages/SystemUI/res/values-mn/strings.xml index 25929e6c2676..769cdda78337 100644 --- a/packages/SystemUI/res/values-mn/strings.xml +++ b/packages/SystemUI/res/values-mn/strings.xml @@ -248,7 +248,7 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"Тодрол"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"Өнгө хувиргалт"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"Өнгө тохируулга"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Хэрэглэгчийн тохиргоо"</string> + <string name="quick_settings_more_user_settings" msgid="7634653308485206306">"Хэрэглэгчдийг удирдах"</string> <string name="quick_settings_done" msgid="2163641301648855793">"Дууссан"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Хаах"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"Холбогдсон"</string> @@ -727,6 +727,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"Мобайл датаг унтраах уу?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"Та <xliff:g id="CARRIER">%s</xliff:g>-р дата эсвэл интернэтэд хандах боломжгүй болно. Интернэтэд зөвхөн Wi-Fi-р холбогдох боломжтой болно."</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"таны оператор компани"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"Апп нь зөвшөөрлийн хүсэлтийг танихгүй байгаа тул Тохиргооноос таны хариултыг баталгаажуулах боломжгүй байна."</string> <string name="slice_permission_title" msgid="3262615140094151017">"<xliff:g id="APP_0">%1$s</xliff:g>-д <xliff:g id="APP_2">%2$s</xliff:g>-н хэсгүүдийг (slices) харуулахыг зөвшөөрөх үү?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"- Энэ нь <xliff:g id="APP">%1$s</xliff:g>-с мэдээлэл унших боломжтой"</string> @@ -785,12 +793,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"Томруулагчийн цонхны тохиргоо"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Хандалтын онцлогуудыг нээхийн тулд товшино уу. Энэ товчлуурыг Тохиргоо хэсэгт өөрчилж эсвэл солиорой.\n\n"<annotation id="link">"Тохиргоог харах"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Үүнийг түр нуухын тулд товчлуурыг зах руу зөөнө үү"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Зүүн дээш зөөх"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Баруун дээш зөөх"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Зүүн доош зөөх"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Баруун доош зөөх"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Ирмэг рүү зөөж, нуух"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Ирмэгээс гаргаж, харуулах"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"асаах/унтраах"</string> <string name="quick_controls_title" msgid="6839108006171302273">"Төхөөрөмжийн хяналт"</string> <string name="controls_providers_title" msgid="6879775889857085056">"Хяналтууд нэмэхийн тулд аппыг сонгоно уу"</string> @@ -933,6 +947,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"Мобайл дата"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"Холбогдсон"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"Мобайл дата автоматаар холбогдохгүй"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"Холболт алга"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Өөр боломжтой сүлжээ байхгүй байна"</string> diff --git a/packages/SystemUI/res/values-mr/strings.xml b/packages/SystemUI/res/values-mr/strings.xml index c6e99a74518e..d45b1e599cee 100644 --- a/packages/SystemUI/res/values-mr/strings.xml +++ b/packages/SystemUI/res/values-mr/strings.xml @@ -248,7 +248,8 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"चमक"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"कलर इन्व्हर्जन"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"रंग सुधारणा"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"वापरकर्ता सेटिंग्ज"</string> + <!-- no translation found for quick_settings_more_user_settings (7634653308485206306) --> + <skip /> <string name="quick_settings_done" msgid="2163641301648855793">"पूर्ण झाले"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"बंद करा"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"कनेक्ट केलेले"</string> @@ -727,6 +728,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"मोबाइल डेटा बंद करायचा?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"तुम्हाला <xliff:g id="CARRIER">%s</xliff:g> मधून डेटा किंवा इंटरनेटचा अॅक्सेस नसेल. इंटरनेट फक्त वाय-फाय मार्फत उपलब्ध असेल."</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"तुमचा वाहक"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"अॅप परवानगी विनंती अस्पष्ट करत असल्याने, सेटिंग्ज तुमचा प्रतिसाद पडताळू शकत नाहीत."</string> <string name="slice_permission_title" msgid="3262615140094151017">"<xliff:g id="APP_0">%1$s</xliff:g> ला <xliff:g id="APP_2">%2$s</xliff:g> चे तुकडे दाखवण्याची अनुमती द्यायची का?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"- ते <xliff:g id="APP">%1$s</xliff:g> ची माहिती वाचू शकते"</string> @@ -785,12 +794,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"मॅग्निफायर विंडो सेटिंग्ज"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"अॅक्सेसिबिलिटी वैशिष्ट्ये उघडण्यासाठी, टॅप करा. सेटिंग्जमध्ये हे बटण कस्टमाइझ करा किंवा बदला.\n\n"<annotation id="link">"सेटिंग्ज पहा"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"बटण तात्पुरते लपवण्यासाठी ते कोपर्यामध्ये हलवा"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"वर डावीकडे हलवा"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"वर उजवीकडे हलवा"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"तळाशी डावीकडे हलवा"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"तळाशी उजवीकडे हलवा"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"एजवर हलवा आणि लपवा"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"एजवर हलवा आणि दाखवा"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"टॉगल करा"</string> <string name="quick_controls_title" msgid="6839108006171302273">"डिव्हाइस नियंत्रणे"</string> <string name="controls_providers_title" msgid="6879775889857085056">"नियंत्रणे जोडण्यासाठी ॲप निवडा"</string> @@ -933,6 +948,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"मोबाइल डेटा"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"कनेक्ट केले आहे"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"मोबाइल डेटा ऑटो-कनेक्ट होणार नाही"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"कोणतेही कनेक्शन नाही"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"इतर कोणतेही नेटवर्क उपलब्ध नाहीत"</string> diff --git a/packages/SystemUI/res/values-ms/strings.xml b/packages/SystemUI/res/values-ms/strings.xml index 99349b157f18..9e43396fcd08 100644 --- a/packages/SystemUI/res/values-ms/strings.xml +++ b/packages/SystemUI/res/values-ms/strings.xml @@ -248,7 +248,8 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"Kecerahan"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"Penyongsangan warna"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"Pembetulan warna"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Tetapan pengguna"</string> + <!-- no translation found for quick_settings_more_user_settings (7634653308485206306) --> + <skip /> <string name="quick_settings_done" msgid="2163641301648855793">"Selesai"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Tutup"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"Disambungkan"</string> @@ -727,6 +728,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"Matikan data mudah alih?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"Anda tidak akan mempunyai akses kepada data atau Internet melalui <xliff:g id="CARRIER">%s</xliff:g>. Internet hanya tersedia melaui Wi-Fi."</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"pembawa anda"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"Oleh sebab apl melindungi permintaan kebenaran, Tetapan tidak dapat mengesahkan jawapan anda."</string> <string name="slice_permission_title" msgid="3262615140094151017">"Benarkan <xliff:g id="APP_0">%1$s</xliff:g> menunjukkan <xliff:g id="APP_2">%2$s</xliff:g> hirisan?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"- Hos hirisan boleh membaca maklumat daripada <xliff:g id="APP">%1$s</xliff:g>"</string> @@ -785,12 +794,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"Tetapan tetingkap penggadang"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Ketik untuk membuka ciri kebolehaksesan. Sesuaikan/gantikan butang ini dalam Tetapan.\n\n"<annotation id="link">"Lihat tetapan"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Gerakkan butang ke tepi untuk disembunyikan buat sementara waktu"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Alihkan ke atas sebelah kiri"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Alihkan ke atas sebelah kanan"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Alihkan ke bawah sebelah kiri"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Alihkan ke bawah sebelah kanan"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Alihkan ke tepi dan sorokkan"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Alihkan ke tepi dan tunjukkan"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"togol"</string> <string name="quick_controls_title" msgid="6839108006171302273">"Kawalan peranti"</string> <string name="controls_providers_title" msgid="6879775889857085056">"Pilih apl untuk menambahkan kawalan"</string> @@ -933,6 +948,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"Data mudah alih"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"Disambungkan"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"Data mudah alih tidak akan autosambung"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"Tiada sambungan"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Tiada rangkaian lain yang tersedia"</string> diff --git a/packages/SystemUI/res/values-my/strings.xml b/packages/SystemUI/res/values-my/strings.xml index f30846ac1853..8f404b85639f 100644 --- a/packages/SystemUI/res/values-my/strings.xml +++ b/packages/SystemUI/res/values-my/strings.xml @@ -248,7 +248,8 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"အလင်းတောက်ပမှု"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"အရောင်ပြောင်းပြန်ပြုလုပ်ရန်"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"အရောင် အမှန်ပြင်ခြင်း"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"အသုံးပြုသူ ဆက်တင်များ"</string> + <!-- no translation found for quick_settings_more_user_settings (7634653308485206306) --> + <skip /> <string name="quick_settings_done" msgid="2163641301648855793">"ပြီးပါပြီ"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"ပိတ်ရန်"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"ချိတ်ဆက်ထား"</string> @@ -727,6 +728,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"မိုဘိုင်းဒေတာ ပိတ်မလား။"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"<xliff:g id="CARRIER">%s</xliff:g> မှတစ်ဆင့် ဒေတာ သို့မဟုတ် အင်တာနက်ကို မသုံးနိုင်ပါ။ Wi-Fi ဖြင့်သာ အင်တာနက် သုံးနိုင်သည်။"</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"သင်၏ ဝန်ဆောင်မှုပေးသူ"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"အပလီကေးရှင်းတစ်ခုက ခွင့်ပြုချက်တောင်းခံမှုကို ပိတ်ထားသောကြောင့် ဆက်တင်များသည် သင်၏ လုပ်ဆောင်ကို တုံ့ပြန်နိုင်ခြင်းမရှိပါ။"</string> <string name="slice_permission_title" msgid="3262615140094151017">"<xliff:g id="APP_0">%1$s</xliff:g> အား <xliff:g id="APP_2">%2$s</xliff:g> ၏အချပ်များ ပြသခွင့်ပြုပါသလား။"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"- ၎င်းသည် <xliff:g id="APP">%1$s</xliff:g> မှ အချက်အလက်ကို ဖတ်နိုင်သည်"</string> @@ -785,12 +794,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"မှန်ဘီလူးဝင်းဒိုး ဆက်တင်များ"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"အများသုံးစွဲနိုင်မှုဆိုင်ရာ ဝန်ဆောင်မှုများ ဖွင့်ရန် တို့ပါ။ ဆက်တင်များတွင် ဤခလုတ်ကို စိတ်ကြိုက်ပြင်ပါ (သို့) လဲပါ။\n\n"<annotation id="link">"ဆက်တင်များ ကြည့်ရန်"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"ခလုတ်ကို ယာယီဝှက်ရန် အစွန်းသို့ရွှေ့ပါ"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"ဘယ်ဘက်ထိပ်သို့ ရွှေ့ရန်"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"ညာဘက်ထိပ်သို့ ရွှေ့ရန်"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"ဘယ်ဘက်အောက်ခြေသို့ ရွှေ့ရန်"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"ညာဘက်အောက်ခြေသို့ ရွှေ့ရန်"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"အစွန်းသို့ရွှေ့ပြီး ဝှက်ရန်"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"အစွန်းမှရွှေ့ပြီး ပြရန်"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"ပြောင်းရန်"</string> <string name="quick_controls_title" msgid="6839108006171302273">"စက်ထိန်းစနစ်"</string> <string name="controls_providers_title" msgid="6879775889857085056">"ထိန်းချုပ်မှုများထည့်ရန် အက်ပ်ရွေးခြင်း"</string> @@ -933,6 +948,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"မိုဘိုင်းဒေတာ"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"ချိတ်ဆက်ထားသည်"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"မိုဘိုင်းဒေတာ အော်တိုမချိတ်ပါ"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"ချိတ်ဆက်မှုမရှိပါ"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"အခြားကွန်ရက်များ မရှိပါ"</string> diff --git a/packages/SystemUI/res/values-nb/strings.xml b/packages/SystemUI/res/values-nb/strings.xml index 117c8645ddc1..94b8e9049afb 100644 --- a/packages/SystemUI/res/values-nb/strings.xml +++ b/packages/SystemUI/res/values-nb/strings.xml @@ -248,7 +248,8 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"Lysstyrke"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"Fargeinvertering"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"Fargekorrigering"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Brukerinnstillinger"</string> + <!-- no translation found for quick_settings_more_user_settings (7634653308485206306) --> + <skip /> <string name="quick_settings_done" msgid="2163641301648855793">"Ferdig"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Lukk"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"Tilkoblet"</string> @@ -727,6 +728,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"Vil du slå av mobildata?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"Du får ikke tilgang til data eller internett via <xliff:g id="CARRIER">%s</xliff:g>. Internett er bare tilgjengelig via Wifi."</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"operatøren din"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"Fordi en app skjuler tillatelsesforespørselen, kan ikke Innstillinger bekrefte svaret ditt."</string> <string name="slice_permission_title" msgid="3262615140094151017">"Vil du tillate at <xliff:g id="APP_0">%1$s</xliff:g> viser <xliff:g id="APP_2">%2$s</xliff:g>-utsnitt?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"– Den kan lese informasjon fra <xliff:g id="APP">%1$s</xliff:g>"</string> @@ -785,12 +794,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"Innstillinger for forstørringsvindu"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Trykk for å åpne tilgj.funksjoner. Tilpass eller bytt knappen i Innstillinger.\n\n"<annotation id="link">"Se innstillingene"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Flytt knappen til kanten for å skjule den midlertidig"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Flytt til øverst til venstre"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Flytt til øverst til høyre"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Flytt til nederst til venstre"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Flytt til nederst til høyre"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Flytt til kanten og skjul"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Flytt ut kanten og vis"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"slå av/på"</string> <string name="quick_controls_title" msgid="6839108006171302273">"Enhetsstyring"</string> <string name="controls_providers_title" msgid="6879775889857085056">"Velg en app for å legge til kontroller"</string> @@ -933,6 +948,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"Mobildata"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"Tilkoblet"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"Mobildata kobler ikke til automatisk"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"Ingen tilkobling"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Ingen andre nettverk er tilgjengelige"</string> diff --git a/packages/SystemUI/res/values-ne/strings.xml b/packages/SystemUI/res/values-ne/strings.xml index 351971594b62..35937a9114f0 100644 --- a/packages/SystemUI/res/values-ne/strings.xml +++ b/packages/SystemUI/res/values-ne/strings.xml @@ -248,7 +248,8 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"उज्यालपन"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"कलर इन्भर्सन"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"कलर करेक्सन"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"प्रयोगकर्तासम्बन्धी सेटिङ"</string> + <!-- no translation found for quick_settings_more_user_settings (7634653308485206306) --> + <skip /> <string name="quick_settings_done" msgid="2163641301648855793">"भयो"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"बन्द गर्नुहोस्"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"जोडिएको"</string> @@ -727,6 +728,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"मोबाइल डेटा निष्क्रिय पार्ने हो?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"तपाईं <xliff:g id="CARRIER">%s</xliff:g> मार्फत डेटा वा इन्टरनेट प्रयोग गर्न सक्नुहुने छैन। Wi-Fi मार्फत मात्र इन्टरनेट उपलब्ध हुने छ।"</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"तपाईंको सेवा प्रदायक"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"कुनै एपको कारणले अनुमतिसम्बन्धी अनुरोध बुझ्न गाह्रो भइरहेकोले सेटिङहरूले तपाईंको प्रतिक्रिया प्रमाणित गर्न सक्दैनन्।"</string> <string name="slice_permission_title" msgid="3262615140094151017">"<xliff:g id="APP_0">%1$s</xliff:g> लाई <xliff:g id="APP_2">%2$s</xliff:g> का स्लाइसहरू देखाउन अनुमति दिने हो?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"- यसले <xliff:g id="APP">%1$s</xliff:g> बाट जानकारी पढ्न सक्छ"</string> @@ -785,12 +794,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"म्याग्निफायर विन्डोसम्बन्धी सेटिङ"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"सर्वसुलभता कायम गर्ने सुविधा खोल्न ट्याप गर्नुहोस्। सेटिङमा गई यो बटन कस्टमाइज गर्नुहोस् वा बदल्नुहोस्।\n\n"<annotation id="link">"सेटिङ हेर्नुहोस्"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"यो बटन केही बेर नदेखिने पार्न किनारातिर सार्नुहोस्"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"सिरानको बायाँतिर सार्नुहोस्"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"सिरानको दायाँतिर सार्नुहोस्"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"पुछारको बायाँतिर सार्नुहोस्"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"पुछारको दायाँतिर सार्नुहोस्"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"किनारामा सार्नुहोस् र नदेखिने पार्नु…"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"किनाराबाट सार्नुहोस् र देखिने पार्नु…"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"टगल गर्नुहोस्"</string> <string name="quick_controls_title" msgid="6839108006171302273">"डिभाइस नियन्त्रण गर्ने विजेटहरू"</string> <string name="controls_providers_title" msgid="6879775889857085056">"कन्ट्रोल थप्नु पर्ने एप छान्नुहोस्"</string> @@ -933,6 +948,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"मोबाइल डेटा"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"इन्टरनेटमा कनेक्ट गरिएको छ"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"मोबाइल डेटा स्वतः कनेक्ट हुँदैन"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"इन्टरनेट छैन"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"अन्य नेटवर्क उपलब्ध छैनन्"</string> diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml index 3c85148d8d1a..4de03314cec5 100644 --- a/packages/SystemUI/res/values-nl/strings.xml +++ b/packages/SystemUI/res/values-nl/strings.xml @@ -248,7 +248,8 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"Helderheid"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"Kleurinversie"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"Kleurcorrectie"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Gebruikersinstellingen"</string> + <!-- no translation found for quick_settings_more_user_settings (7634653308485206306) --> + <skip /> <string name="quick_settings_done" msgid="2163641301648855793">"Klaar"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Sluiten"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"Verbonden"</string> @@ -727,6 +728,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"Mobiele data uitzetten?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"Je hebt dan geen toegang meer tot data of internet via <xliff:g id="CARRIER">%s</xliff:g>. Internet is alleen nog beschikbaar via wifi."</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"je provider"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"Aangezien een app een rechtenverzoek afdekt, kan Instellingen je reactie niet verifiëren."</string> <string name="slice_permission_title" msgid="3262615140094151017">"<xliff:g id="APP_0">%1$s</xliff:g> toestaan om segmenten van <xliff:g id="APP_2">%2$s</xliff:g> te tonen?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"- Deze kan informatie lezen van <xliff:g id="APP">%1$s</xliff:g>"</string> @@ -785,12 +794,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"Instellingen voor vergrotingsvenster"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Tik voor toegankelijkheidsfuncties. Wijzig of vervang deze knop via Instellingen.\n\n"<annotation id="link">"Naar Instellingen"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Knop naar de rand verplaatsen om deze tijdelijk te verbergen"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Naar linksboven verplaatsen"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Naar rechtsboven verplaatsen"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Naar linksonder verplaatsen"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Naar rechtsonder verplaatsen"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Naar rand verplaatsen en verbergen"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Over rand verplaatsen en tonen"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"schakelen"</string> <string name="quick_controls_title" msgid="6839108006171302273">"Apparaatbediening"</string> <string name="controls_providers_title" msgid="6879775889857085056">"Kies de app waaraan je bedieningselementen wilt toevoegen"</string> @@ -933,6 +948,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"Mobiele data"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"Verbonden"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"Mobiele data maakt niet automatisch verbinding"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"Geen verbinding"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Geen andere netwerken beschikbaar"</string> diff --git a/packages/SystemUI/res/values-or/strings.xml b/packages/SystemUI/res/values-or/strings.xml index 1cb3436d95e3..16941b86f4c0 100644 --- a/packages/SystemUI/res/values-or/strings.xml +++ b/packages/SystemUI/res/values-or/strings.xml @@ -248,7 +248,8 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"ଉଜ୍ଜ୍ୱଳତା"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"ରଙ୍ଗ ଇନଭାର୍ସନ"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"ରଙ୍ଗ ସଂଶୋଧନ"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"ଉପଯୋଗକର୍ତ୍ତା ସେଟିଂସ"</string> + <!-- no translation found for quick_settings_more_user_settings (7634653308485206306) --> + <skip /> <string name="quick_settings_done" msgid="2163641301648855793">"ହୋଇଗଲା"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"ବନ୍ଦ କରନ୍ତୁ"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"ସଂଯୁକ୍ତ"</string> @@ -727,6 +728,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"ମୋବାଇଲ୍ ଡାଟା ବନ୍ଦ କରିବେ?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"ଡାଟା କିମ୍ବା ଇଣ୍ଟରନେଟ୍କୁ <xliff:g id="CARRIER">%s</xliff:g> ଦ୍ଵାରା ଆପଣଙ୍କର ଆକ୍ସେସ୍ ରହିବ ନାହିଁ। ଇଣ୍ଟରନେଟ୍ କେବଳ ୱାଇ-ଫାଇ ମାଧ୍ୟମରେ ଉପଲବ୍ଧ ହେବ।"</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"ଆପଣଙ୍କ କେରିଅର୍"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"ଗୋଟିଏ ଆପ୍ ଏକ ଅନୁମତି ଅନୁରୋଧକୁ ଦେଖିବାରେ ବାଧା ଦେଉଥିବାରୁ, ସେଟିଙ୍ଗ ଆପଣଙ୍କ ଉତ୍ତରକୁ ଯାଞ୍ଚ କରିପାରିବ ନାହିଁ।"</string> <string name="slice_permission_title" msgid="3262615140094151017">"<xliff:g id="APP_2">%2$s</xliff:g> ସ୍ଲାଇସ୍କୁ ଦେଖାଇବା ପାଇଁ <xliff:g id="APP_0">%1$s</xliff:g>କୁ ଅନୁମତି ଦେବେ?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"- ଏହା <xliff:g id="APP">%1$s</xliff:g>ରୁ ସୂଚନାକୁ ପଢ଼ିପାରିବ"</string> @@ -785,12 +794,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"ମ୍ୟାଗ୍ନିଫାୟର ୱିଣ୍ଡୋର ସେଟିଂସ"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"ଆକ୍ସେସିବିଲିଟୀ ଫିଚର ଖୋଲିବାକୁ ଟାପ କରନ୍ତୁ। ସେଟିଂସରେ ଏହି ବଟନକୁ କଷ୍ଟମାଇଜ କର କିମ୍ବା ବଦଳାଅ।\n\n"<annotation id="link">"ସେଟିଂସ ଦେଖନ୍ତୁ"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"ବଟନକୁ ଅସ୍ଥାୟୀ ଭାବେ ଲୁଚାଇବା ପାଇଁ ଏହାକୁ ଗୋଟିଏ ଧାରକୁ ମୁଭ୍ କରନ୍ତୁ"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"ଶୀର୍ଷ ବାମକୁ ମୁଭ୍ କରନ୍ତୁ"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"ଶୀର୍ଷ ଡାହାଣକୁ ମୁଭ୍ କରନ୍ତୁ"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"ନିମ୍ନ ବାମକୁ ମୁଭ୍ କରନ୍ତୁ"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"ନିମ୍ନ ଡାହାଣକୁ ମୁଭ୍ କରନ୍ତୁ"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"ଧାରକୁ ମୁଭ୍ କରି ଲୁଚାନ୍ତୁ"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"ଧାର ବାହାରକୁ ମୁଭ୍ କରି ଦେଖାନ୍ତୁ"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"ଟୋଗଲ୍ କରନ୍ତୁ"</string> <string name="quick_controls_title" msgid="6839108006171302273">"ଡିଭାଇସ୍ ନିୟନ୍ତ୍ରଣଗୁଡ଼ିକ"</string> <string name="controls_providers_title" msgid="6879775889857085056">"ନିୟନ୍ତ୍ରଣଗୁଡ଼ିକୁ ଯୋଗ କରିବାକୁ ଆପ୍ ବାଛନ୍ତୁ"</string> @@ -933,6 +948,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"ମୋବାଇଲ ଡାଟା"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"ସଂଯୋଗ କରାଯାଇଛି"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"ମୋବାଇଲ ଡାଟା ସ୍ୱତଃ-ସଂଯୋଗ ହେବ ନାହିଁ"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"ସଂଯୋଗ ନାହିଁ"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"ଅନ୍ୟ କୌଣସି ନେଟୱାର୍କ ଉପଲବ୍ଧ ନାହିଁ"</string> diff --git a/packages/SystemUI/res/values-pa/strings.xml b/packages/SystemUI/res/values-pa/strings.xml index 992ffd6d2b5d..fce69ec0fa33 100644 --- a/packages/SystemUI/res/values-pa/strings.xml +++ b/packages/SystemUI/res/values-pa/strings.xml @@ -248,7 +248,8 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"ਚਮਕ"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"ਰੰਗ ਪਲਟਨਾ"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"ਰੰਗ ਸੁਧਾਈ"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"ਵਰਤੋਂਕਾਰ ਸੈਟਿੰਗਾਂ"</string> + <!-- no translation found for quick_settings_more_user_settings (7634653308485206306) --> + <skip /> <string name="quick_settings_done" msgid="2163641301648855793">"ਹੋ ਗਿਆ"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"ਬੰਦ ਕਰੋ"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"ਕਨੈਕਟ ਕੀਤਾ"</string> @@ -727,6 +728,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"ਕੀ ਮੋਬਾਈਲ ਡਾਟਾ ਬੰਦ ਕਰਨਾ ਹੈ?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"ਤੁਸੀਂ <xliff:g id="CARRIER">%s</xliff:g> ਰਾਹੀਂ ਡਾਟੇ ਜਾਂ ਇੰਟਰਨੈੱਟ ਤੱਕ ਪਹੁੰਚ ਨਹੀਂ ਕਰ ਸਕੋਗੇ। ਇੰਟਰਨੈੱਟ ਸਿਰਫ਼ ਵਾਈ-ਫਾਈ ਰਾਹੀਂ ਉਪਲਬਧ ਹੋਵੇਗਾ।"</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"ਤੁਹਾਡਾ ਕੈਰੀਅਰ"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"ਕਿਸੇ ਐਪ ਵੱਲੋਂ ਇਜਾਜ਼ਤ ਬੇਨਤੀ ਨੂੰ ਢਕੇ ਜਾਣ ਕਾਰਨ ਸੈਟਿੰਗਾਂ ਤੁਹਾਡੇ ਜਵਾਬ ਦੀ ਪੁਸ਼ਟੀ ਨਹੀਂ ਕਰ ਸਕਦੀਆਂ।"</string> <string name="slice_permission_title" msgid="3262615140094151017">"ਕੀ <xliff:g id="APP_0">%1$s</xliff:g> ਨੂੰ <xliff:g id="APP_2">%2$s</xliff:g> ਦੇ ਹਿੱਸੇ ਦਿਖਾਉਣ ਦੇਣੇ ਹਨ?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"- ਇਹ <xliff:g id="APP">%1$s</xliff:g> ਵਿੱਚੋਂ ਜਾਣਕਾਰੀ ਪੜ੍ਹ ਸਕਦਾ ਹੈ"</string> @@ -785,12 +794,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"ਵੱਡਦਰਸ਼ੀ ਵਿੰਡੋ ਸੈਟਿੰਗਾਂ"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"ਪਹੁੰਚਯੋਗਤਾ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਖੋਲ੍ਹਣ ਲਈ ਟੈਪ ਕਰੋ। ਸੈਟਿੰਗਾਂ ਵਿੱਚ ਇਹ ਬਟਨ ਵਿਉਂਤਬੱਧ ਕਰੋ ਜਾਂ ਬਦਲੋ।\n\n"<annotation id="link">"ਸੈਟਿੰਗਾਂ ਦੇਖੋ"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"ਬਟਨ ਨੂੰ ਅਸਥਾਈ ਤੌਰ \'ਤੇ ਲੁਕਾਉਣ ਲਈ ਕਿਨਾਰੇ \'ਤੇ ਲਿਜਾਓ"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"ਉੱਪਰ ਵੱਲ ਖੱਬੇ ਲਿਜਾਓ"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"ਉੱਪਰ ਵੱਲ ਸੱਜੇ ਲਿਜਾਓ"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"ਹੇਠਾਂ ਵੱਲ ਖੱਬੇ ਲਿਜਾਓ"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"ਹੇਠਾਂ ਵੱਲ ਸੱਜੇ ਲਿਜਾਓ"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"ਕਿਨਾਰੇ ਵਿੱਚ ਲਿਜਾ ਕੇ ਲੁਕਾਓ"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"ਕਿਨਾਰੇ ਤੋਂ ਬਾਹਰ ਕੱਢ ਕੇ ਦਿਖਾਓ"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"ਟੌਗਲ ਕਰੋ"</string> <string name="quick_controls_title" msgid="6839108006171302273">"ਡੀਵਾਈਸ ਕੰਟਰੋਲ"</string> <string name="controls_providers_title" msgid="6879775889857085056">"ਕੰਟਰੋਲ ਸ਼ਾਮਲ ਕਰਨ ਲਈ ਐਪ ਚੁਣੋ"</string> @@ -933,6 +948,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"ਮੋਬਾਈਲ ਡਾਟਾ"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"ਕਨੈਕਟ ਹੈ"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"ਮੋਬਾਈਲ ਡਾਟਾ ਸਵੈ-ਕਨੈਕਟ ਨਹੀਂ ਹੋਵੇਗਾ"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"ਕੋਈ ਕਨੈਕਸ਼ਨ ਨਹੀਂ"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"ਕੋਈ ਹੋਰ ਨੈੱਟਵਰਕ ਉਪਲਬਧ ਨਹੀਂ ਹੈ"</string> diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml index b706359e657a..8787f365a565 100644 --- a/packages/SystemUI/res/values-pl/strings.xml +++ b/packages/SystemUI/res/values-pl/strings.xml @@ -248,7 +248,8 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"Jasność"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"Odwrócenie kolorów"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"Korekcja kolorów"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Ustawienia użytkownika"</string> + <!-- no translation found for quick_settings_more_user_settings (7634653308485206306) --> + <skip /> <string name="quick_settings_done" msgid="2163641301648855793">"Gotowe"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Zamknij"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"Połączono"</string> @@ -727,6 +728,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"Wyłączyć mobilną transmisję danych?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"Nie będziesz mieć dostępu do transmisji danych ani internetu w <xliff:g id="CARRIER">%s</xliff:g>. Internet będzie dostępny tylko przez Wi‑Fi."</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"Twój operator"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"Aplikacja Ustawienia nie może zweryfikować Twojej odpowiedzi, ponieważ inna aplikacja zasłania prośbę o udzielenie uprawnień."</string> <string name="slice_permission_title" msgid="3262615140094151017">"Zezwolić aplikacji <xliff:g id="APP_0">%1$s</xliff:g> na pokazywanie wycinków z aplikacji <xliff:g id="APP_2">%2$s</xliff:g>?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"- Może odczytywać informacje z aplikacji <xliff:g id="APP">%1$s</xliff:g>"</string> @@ -785,12 +794,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"Ustawienia okna powiększania"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Kliknij, aby otworzyć ułatwienia dostępu. Dostosuj lub zmień ten przycisk w Ustawieniach.\n\n"<annotation id="link">"Wyświetl ustawienia"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Przesuń przycisk do krawędzi, aby ukryć go tymczasowo"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Przenieś w lewy górny róg"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Przenieś w prawy górny róg"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Przenieś w lewy dolny róg"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Przenieś w prawy dolny róg"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Przenieś do krawędzi i ukryj"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Przenieś poza krawędź i pokaż"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"przełącz"</string> <string name="quick_controls_title" msgid="6839108006171302273">"Sterowanie urządzeniami"</string> <string name="controls_providers_title" msgid="6879775889857085056">"Wybierz aplikację, do której chcesz dodać elementy sterujące"</string> @@ -933,6 +948,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"Mobilna transmisja danych"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"Połączono"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"Mobilna transmisja danych nie połączy się automatycznie"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"Brak połączenia"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Brak innych dostępnych sieci"</string> diff --git a/packages/SystemUI/res/values-pt-rBR/strings.xml b/packages/SystemUI/res/values-pt-rBR/strings.xml index 78a6409e4c5e..e6f05806989a 100644 --- a/packages/SystemUI/res/values-pt-rBR/strings.xml +++ b/packages/SystemUI/res/values-pt-rBR/strings.xml @@ -248,7 +248,8 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"Brilho"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"Inversão de cores"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"Correção de cor"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Config. do usuário"</string> + <!-- no translation found for quick_settings_more_user_settings (7634653308485206306) --> + <skip /> <string name="quick_settings_done" msgid="2163641301648855793">"Concluído"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Fechar"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"Conectado"</string> @@ -727,6 +728,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"Desativar os dados móveis?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"Você não terá acesso a dados ou à Internet pela operadora <xliff:g id="CARRIER">%s</xliff:g>. A Internet só estará disponível via Wi-Fi."</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"sua operadora"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"Como um app está ocultando uma solicitação de permissão, as configurações não podem verificar sua resposta."</string> <string name="slice_permission_title" msgid="3262615140094151017">"Permitir que <xliff:g id="APP_0">%1$s</xliff:g> mostre partes do app <xliff:g id="APP_2">%2$s</xliff:g>?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"- Pode ler informações do app <xliff:g id="APP">%1$s</xliff:g>"</string> @@ -785,12 +794,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"Configurações da janela de lupa"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Toque para abrir os recursos de acessibilidade. Personalize ou substitua o botão nas Configurações.\n\n"<annotation id="link">"Ver configurações"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Mova o botão para a borda para ocultá-lo temporariamente"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Mover para o canto superior esquerdo"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Mover para o canto superior direito"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Mover para o canto inferior esquerdo"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Mover para o canto inferior direito"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Mover para a borda e ocultar"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Mover para fora da borda e exibir"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"alternar"</string> <string name="quick_controls_title" msgid="6839108006171302273">"Controles do dispositivo"</string> <string name="controls_providers_title" msgid="6879775889857085056">"Escolha um app para adicionar controles"</string> @@ -933,6 +948,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"Dados móveis"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"Conectado"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"Sem conexão automática com dados móveis"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"Sem conexão"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Nenhuma outra rede disponível"</string> diff --git a/packages/SystemUI/res/values-pt-rPT/strings.xml b/packages/SystemUI/res/values-pt-rPT/strings.xml index 30233b3dec71..6c07ce0732b0 100644 --- a/packages/SystemUI/res/values-pt-rPT/strings.xml +++ b/packages/SystemUI/res/values-pt-rPT/strings.xml @@ -248,7 +248,7 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"Brilho"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"Inversão de cores"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"Correção da cor"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Definições do utilizador"</string> + <string name="quick_settings_more_user_settings" msgid="7634653308485206306">"Gerir utilizadores"</string> <string name="quick_settings_done" msgid="2163641301648855793">"Concluído"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Fechar"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"Ligado"</string> @@ -727,6 +727,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"Desativar os dados móveis?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"Não terá acesso a dados ou à Internet através do operador <xliff:g id="CARRIER">%s</xliff:g>. A Internet estará disponível apenas por Wi-Fi."</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"o seu operador"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"Uma vez que uma app está a ocultar um pedido de autorização, as Definições não conseguem validar a sua resposta."</string> <string name="slice_permission_title" msgid="3262615140094151017">"Permitir que a app <xliff:g id="APP_0">%1$s</xliff:g> mostre partes da app <xliff:g id="APP_2">%2$s</xliff:g>?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"- Pode ler informações da app <xliff:g id="APP">%1$s</xliff:g>"</string> @@ -785,12 +793,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"Definições da janela da lupa"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Toque para abrir funcionalidades de acessibilidade. Personal. ou substitua botão em Defin.\n\n"<annotation id="link">"Ver defin."</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Mova o botão para a extremidade para o ocultar temporariamente"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Mover p/ parte sup. esquerda"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Mover parte superior direita"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Mover p/ parte infer. esquerda"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Mover parte inferior direita"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Mover p/ extremidade e ocultar"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Retirar extremidade e mostrar"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"ativar/desativar"</string> <string name="quick_controls_title" msgid="6839108006171302273">"Controlos de dispositivos"</string> <string name="controls_providers_title" msgid="6879775889857085056">"Escolha uma app para adicionar controlos"</string> @@ -933,6 +947,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"Dados móveis"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"Ligado"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"Sem ligação automática com dados móveis"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"Sem ligação"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Nenhuma outra rede disponível"</string> diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml index 78a6409e4c5e..e6f05806989a 100644 --- a/packages/SystemUI/res/values-pt/strings.xml +++ b/packages/SystemUI/res/values-pt/strings.xml @@ -248,7 +248,8 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"Brilho"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"Inversão de cores"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"Correção de cor"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Config. do usuário"</string> + <!-- no translation found for quick_settings_more_user_settings (7634653308485206306) --> + <skip /> <string name="quick_settings_done" msgid="2163641301648855793">"Concluído"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Fechar"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"Conectado"</string> @@ -727,6 +728,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"Desativar os dados móveis?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"Você não terá acesso a dados ou à Internet pela operadora <xliff:g id="CARRIER">%s</xliff:g>. A Internet só estará disponível via Wi-Fi."</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"sua operadora"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"Como um app está ocultando uma solicitação de permissão, as configurações não podem verificar sua resposta."</string> <string name="slice_permission_title" msgid="3262615140094151017">"Permitir que <xliff:g id="APP_0">%1$s</xliff:g> mostre partes do app <xliff:g id="APP_2">%2$s</xliff:g>?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"- Pode ler informações do app <xliff:g id="APP">%1$s</xliff:g>"</string> @@ -785,12 +794,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"Configurações da janela de lupa"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Toque para abrir os recursos de acessibilidade. Personalize ou substitua o botão nas Configurações.\n\n"<annotation id="link">"Ver configurações"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Mova o botão para a borda para ocultá-lo temporariamente"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Mover para o canto superior esquerdo"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Mover para o canto superior direito"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Mover para o canto inferior esquerdo"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Mover para o canto inferior direito"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Mover para a borda e ocultar"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Mover para fora da borda e exibir"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"alternar"</string> <string name="quick_controls_title" msgid="6839108006171302273">"Controles do dispositivo"</string> <string name="controls_providers_title" msgid="6879775889857085056">"Escolha um app para adicionar controles"</string> @@ -933,6 +948,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"Dados móveis"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"Conectado"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"Sem conexão automática com dados móveis"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"Sem conexão"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Nenhuma outra rede disponível"</string> diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml index 0d960626a397..080edfda3271 100644 --- a/packages/SystemUI/res/values-ro/strings.xml +++ b/packages/SystemUI/res/values-ro/strings.xml @@ -248,7 +248,8 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"Luminozitate"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"Inversarea culorilor"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"Corecția culorii"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Setări de utilizator"</string> + <!-- no translation found for quick_settings_more_user_settings (7634653308485206306) --> + <skip /> <string name="quick_settings_done" msgid="2163641301648855793">"Terminat"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Închide"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"Conectat"</string> @@ -727,6 +728,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"Dezactivezi datele mobile?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"Nu vei avea acces la date sau la internet prin intermediul <xliff:g id="CARRIER">%s</xliff:g>. Internetul va fi disponibil numai prin Wi-Fi."</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"operatorul tău"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"Deoarece o aplicație acoperă o solicitare de permisiune, Setările nu îți pot verifica răspunsul."</string> <string name="slice_permission_title" msgid="3262615140094151017">"Permiți ca <xliff:g id="APP_0">%1$s</xliff:g> să afișeze porțiuni din <xliff:g id="APP_2">%2$s</xliff:g>?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"- Poate citi informații din <xliff:g id="APP">%1$s</xliff:g>"</string> @@ -785,12 +794,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"Setările ferestrei de mărire"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Atinge ca să deschizi funcțiile de accesibilitate. Personalizează sau înlocuiește butonul în setări.\n\n"<annotation id="link">"Vezi setările"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Mută butonul spre margine pentru a-l ascunde temporar"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Mută în stânga sus"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Mută în dreapta sus"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Mută în stânga jos"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Mută în dreapta jos"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Mută la margine și ascunde"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Mută de la margine și afișează"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"Activează / dezactivează"</string> <string name="quick_controls_title" msgid="6839108006171302273">"Comenzile dispozitivelor"</string> <string name="controls_providers_title" msgid="6879775889857085056">"Alege aplicația pentru a adăuga comenzi"</string> @@ -933,6 +948,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"Date mobile"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"Conectat"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"Nu se conectează automat la date mobile"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"Nicio conexiune"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Nu sunt disponibile alte rețele"</string> diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml index 3d13b2cc088b..b42701ef102e 100644 --- a/packages/SystemUI/res/values-ru/strings.xml +++ b/packages/SystemUI/res/values-ru/strings.xml @@ -248,7 +248,8 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"Яркость"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"Инверсия цветов"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"Коррекция цвета"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Пользовательские настройки"</string> + <!-- no translation found for quick_settings_more_user_settings (7634653308485206306) --> + <skip /> <string name="quick_settings_done" msgid="2163641301648855793">"Готово"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Закрыть"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"Подключено"</string> @@ -727,6 +728,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"Отключить мобильный Интернет?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"Вы не сможете передавать данные или выходить в Интернет через оператора \"<xliff:g id="CARRIER">%s</xliff:g>\". Интернет будет доступен только по сети Wi-Fi."</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"ваш оператор"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"Невозможно принять ваше согласие, поскольку запрос скрыт другим приложением."</string> <string name="slice_permission_title" msgid="3262615140094151017">"Разрешить приложению \"<xliff:g id="APP_0">%1$s</xliff:g>\" показывать фрагменты приложения \"<xliff:g id="APP_2">%2$s</xliff:g>\"?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"– Ему станут доступны данные из приложения \"<xliff:g id="APP">%1$s</xliff:g>\"."</string> @@ -785,12 +794,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"Настройка окна лупы"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Нажмите, чтобы открыть спец. возможности. Настройте или замените эту кнопку в настройках.\n\n"<annotation id="link">"Настройки"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Чтобы временно скрыть кнопку, переместите ее к краю экрана"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Перенести в левый верхний угол"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Перенести в правый верхний угол"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Перенести в левый нижний угол"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Перенести в правый нижний угол"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Перенести к краю и скрыть"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Вернуть из-за края и показать"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"включить или отключить"</string> <string name="quick_controls_title" msgid="6839108006171302273">"Управление устройствами"</string> <string name="controls_providers_title" msgid="6879775889857085056">"Чтобы добавить виджеты управления, выберите приложение"</string> @@ -933,6 +948,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"Мобильный интернет"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"Подключено"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"Без автоподключения к мобильному интернету"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"Нет подключения к интернету"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Нет других доступных сетей"</string> diff --git a/packages/SystemUI/res/values-si/strings.xml b/packages/SystemUI/res/values-si/strings.xml index 01be742baee7..bd272c7386a0 100644 --- a/packages/SystemUI/res/values-si/strings.xml +++ b/packages/SystemUI/res/values-si/strings.xml @@ -248,7 +248,8 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"දීප්තිමත් බව"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"වර්ණ අපවර්තනය"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"වර්ණ නිවැරදි කිරීම"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"පරිශීලක සැකසීම්"</string> + <!-- no translation found for quick_settings_more_user_settings (7634653308485206306) --> + <skip /> <string name="quick_settings_done" msgid="2163641301648855793">"නිමයි"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"වසන්න"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"සම්බන්ධිත"</string> @@ -727,6 +728,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"ජංගම දත්ත ක්රියාවිරහිත කරන්නද?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"ඔබට <xliff:g id="CARRIER">%s</xliff:g> හරහා දත්ත හෝ අන්තර්ජාලයට පිවිසීමේ හැකියාවක් නැත. අන්තර්ජාලය Wi-Fi හරහා පමණක් ලබා ගත හැකිය."</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"ඔබගේ වාහකය"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"යෙදුමක් අවසර ඉල්ලීමක් කරන නිසා, සැකසීම්වලට ඔබගේ ප්රතිචාරය සත්යාපනය කළ නොහැකිය."</string> <string name="slice_permission_title" msgid="3262615140094151017">"<xliff:g id="APP_0">%1$s</xliff:g> හට කොටස් <xliff:g id="APP_2">%2$s</xliff:g>ක් පෙන්වීමට ඉඩ දෙන්නද?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"- එයට <xliff:g id="APP">%1$s</xliff:g> වෙතින් තොරතුරු කියවිය හැකිය"</string> @@ -785,12 +794,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"විශාලන කවුළු සැකසීම්"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"ප්රවේශ්යතා විශේෂාංග විවෘත කිරීමට තට්ටු කරන්න. සැකසීම් තුළ මෙම බොත්තම අභිරුචිකරණය හෝ ප්රතිස්ථාපනය කරන්න.\n\n"<annotation id="link">"සැකසීම් බලන්න"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"එය තාවකාලිකව සැඟවීමට බොත්තම දාරයට ගෙන යන්න"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"ඉහළ වමට ගෙන යන්න"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"ඉහළ දකුණට ගෙන යන්න"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"පහළ වමට ගෙන යන්න"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"පහළ දකුණට ගෙන යන්න"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"මායිමට ගෙන යන්න සහ සඟවන්න"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"මායිමෙන් පිටට ගන්න සහ පෙන්වන්න"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"ටොගල් කරන්න"</string> <string name="quick_controls_title" msgid="6839108006171302273">"උපාංග පාලන"</string> <string name="controls_providers_title" msgid="6879775889857085056">"පාලන එක් කිරීමට යෙදුම තෝරා ගන්න"</string> @@ -933,6 +948,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"ජංගම දත්ත"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"සම්බන්ධයි"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"ජංගම දත්ත ස්වංක්රියව සම්බන්ධ නොවනු ඇත"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"සම්බන්ධතාවයක් නැත"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"ලබා ගත හැකි වෙනත් ජාල නැත"</string> diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml index 76dce7465e1e..a0dd3c375485 100644 --- a/packages/SystemUI/res/values-sk/strings.xml +++ b/packages/SystemUI/res/values-sk/strings.xml @@ -248,7 +248,8 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"Jas"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"Inverzia farieb"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"Úprava farieb"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Používateľské nastavenia"</string> + <!-- no translation found for quick_settings_more_user_settings (7634653308485206306) --> + <skip /> <string name="quick_settings_done" msgid="2163641301648855793">"Hotovo"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Zavrieť"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"Pripojené"</string> @@ -727,6 +728,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"Chcete vypnúť mobilné dáta?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"Nebudete mať prístup k dátam ani internetu prostredníctvom operátora <xliff:g id="CARRIER">%s</xliff:g>. Internet bude k dispozícii iba cez Wi‑Fi."</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"váš operátor"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"Nastavenia nemôžu overiť vašu odpoveď, pretože určitá aplikácia blokuje žiadosť o povolenie."</string> <string name="slice_permission_title" msgid="3262615140094151017">"Povoliť aplikácii <xliff:g id="APP_0">%1$s</xliff:g> zobrazovať rezy z aplikácie <xliff:g id="APP_2">%2$s</xliff:g>?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"– Môže čítať informácie z aplikácie <xliff:g id="APP">%1$s</xliff:g>"</string> @@ -785,12 +794,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"Nastavenia okna lupy"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Funkcie dostupnosti otvoríte klepnutím. Tlačidlo prispôsobte alebo nahraďte v Nastav.\n\n"<annotation id="link">"Zobraz. nast."</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Ak chcete tlačidlo dočasne skryť, presuňte ho k okraju"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Presunúť doľava nahor"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Presunúť doprava nahor"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Presunúť doľava nadol"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Presunúť doprava nadol"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Presunúť k okraju a skryť"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Presunúť z okraja a zobraziť"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"prepínač"</string> <string name="quick_controls_title" msgid="6839108006171302273">"Ovládanie zariadení"</string> <string name="controls_providers_title" msgid="6879775889857085056">"Vyberte aplikáciu, ktorej ovládače si chcete pridať"</string> @@ -933,6 +948,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"Mobilné dáta"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"Pripojené"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"Automatické pripojenie cez mobilné dáta nefunguje"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"Bez pripojenia"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Nie sú k dispozícii žiadne ďalšie siete"</string> diff --git a/packages/SystemUI/res/values-sl/strings.xml b/packages/SystemUI/res/values-sl/strings.xml index cb306c2dc315..44108c3279bc 100644 --- a/packages/SystemUI/res/values-sl/strings.xml +++ b/packages/SystemUI/res/values-sl/strings.xml @@ -248,7 +248,8 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"Svetlost"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"Inverzija barv"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"Popravljanje barv"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Uporabniške nastavitve"</string> + <!-- no translation found for quick_settings_more_user_settings (7634653308485206306) --> + <skip /> <string name="quick_settings_done" msgid="2163641301648855793">"Končano"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Zapri"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"Povezava je vzpostavljena"</string> @@ -727,6 +728,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"Želite izklopiti prenos podatkov v mobilnih omrežjih?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"Prek operaterja »<xliff:g id="CARRIER">%s</xliff:g>« ne boste imeli dostopa do podatkovne povezave ali interneta. Internet bo na voljo samo prek povezave Wi-Fi."</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"svojega operaterja"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"Ker aplikacija zakriva zahtevo za dovoljenje, z nastavitvami ni mogoče preveriti vašega odziva."</string> <string name="slice_permission_title" msgid="3262615140094151017">"Želite dovoliti, da aplikacija <xliff:g id="APP_0">%1$s</xliff:g> prikaže izreze aplikacije <xliff:g id="APP_2">%2$s</xliff:g>?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"– lahko bere podatke v aplikaciji <xliff:g id="APP">%1$s</xliff:g>"</string> @@ -785,12 +794,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"Nastavitve okna povečevalnika"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Dotaknite se za funkcije za ljudi s posebnimi potrebami. Ta gumb lahko prilagodite ali zamenjate v nastavitvah.\n\n"<annotation id="link">"Ogled nastavitev"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Če želite gumb začasno skriti, ga premaknite ob rob."</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Premakni zgoraj levo"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Premakni zgoraj desno"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Premakni spodaj levo"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Premakni spodaj desno"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Premakni na rob in skrij"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Premakni z roba in pokaži"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"preklop"</string> <string name="quick_controls_title" msgid="6839108006171302273">"Kontrolniki naprave"</string> <string name="controls_providers_title" msgid="6879775889857085056">"Izberite aplikacijo za dodajanje kontrolnikov"</string> @@ -933,6 +948,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"Prenos podatkov v mobilnem omrežju"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"Povezano"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"Mobilna podatkovna povezava ne bo samodejna."</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"Ni povezave"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Nobeno drugo omrežje ni na voljo"</string> diff --git a/packages/SystemUI/res/values-sq/strings.xml b/packages/SystemUI/res/values-sq/strings.xml index 9a6d73c07008..7630261585f8 100644 --- a/packages/SystemUI/res/values-sq/strings.xml +++ b/packages/SystemUI/res/values-sq/strings.xml @@ -248,7 +248,8 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"Ndriçimi"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"Anasjellja e ngjyrës"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"Korrigjimi i ngjyrës"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Cilësimet e përdoruesit"</string> + <!-- no translation found for quick_settings_more_user_settings (7634653308485206306) --> + <skip /> <string name="quick_settings_done" msgid="2163641301648855793">"U krye"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Mbyll"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"I lidhur"</string> @@ -727,6 +728,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"Të çaktivizohen të dhënat celulare?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"Nuk do të kesh qasje te të dhënat ose interneti nëpërmjet <xliff:g id="CARRIER">%s</xliff:g>. Interneti do të ofrohet vetëm nëpërmjet Wi-Fi."</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"operatori yt celular"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"Duke qenë se një aplikacion po bllokon një kërkesë për leje, \"Cilësimet\" nuk mund të verifikojnë përgjigjen tënde."</string> <string name="slice_permission_title" msgid="3262615140094151017">"Të lejohet <xliff:g id="APP_0">%1$s</xliff:g> që të shfaqë pjesë të <xliff:g id="APP_2">%2$s</xliff:g>?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"- Mund të lexojë informacion nga <xliff:g id="APP">%1$s</xliff:g>"</string> @@ -785,12 +794,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"Cilësimet e dritares së zmadhimit"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Trokit dhe hap veçoritë e qasshmërisë. Modifiko ose ndërro butonin te \"Cilësimet\".\n\n"<annotation id="link">"Shih cilësimet"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Zhvendose butonin në skaj për ta fshehur përkohësisht"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Zhvendos lart majtas"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Zhvendos lart djathtas"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Zhvendos poshtë majtas"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Zhvendos poshtë djathtas"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Zhvendose te skaji dhe fshihe"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Zhvendose jashtë skajit dhe shfaqe"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"aktivizo/çaktivizo"</string> <string name="quick_controls_title" msgid="6839108006171302273">"Kontrollet e pajisjes"</string> <string name="controls_providers_title" msgid="6879775889857085056">"Zgjidh aplikacionin për të shtuar kontrollet"</string> @@ -933,6 +948,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"Të dhënat celulare"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"Lidhur"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"Të dhënat celulare nuk do të lidhen automatikisht"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"Nuk ka lidhje"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Nuk ofrohet asnjë rrjet tjetër"</string> diff --git a/packages/SystemUI/res/values-sr/strings.xml b/packages/SystemUI/res/values-sr/strings.xml index 0dff11f87eb6..2a7b88f42a08 100644 --- a/packages/SystemUI/res/values-sr/strings.xml +++ b/packages/SystemUI/res/values-sr/strings.xml @@ -248,7 +248,8 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"Осветљеност"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"Инверзија боја"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"Корекција боја"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Корисничка подешавања"</string> + <!-- no translation found for quick_settings_more_user_settings (7634653308485206306) --> + <skip /> <string name="quick_settings_done" msgid="2163641301648855793">"Готово"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Затвори"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"Повезан"</string> @@ -727,6 +728,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"Желите да искључите мобилне податке?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"Нећете имати приступ подацима или интернету преко мобилног оператера <xliff:g id="CARRIER">%s</xliff:g>. Интернет ће бити доступан само преко WiFi везе."</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"мобилни оператер"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"Подешавања не могу да верификују ваш одговор јер апликација скрива захтев за дозволу."</string> <string name="slice_permission_title" msgid="3262615140094151017">"Желите ли да дозволите апликацији <xliff:g id="APP_0">%1$s</xliff:g> да приказује исечке из апликације <xliff:g id="APP_2">%2$s</xliff:g>?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"– Може да чита податке из апликације <xliff:g id="APP">%1$s</xliff:g>"</string> @@ -785,12 +794,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"Подешавања прозора за увећање"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Додирните за функције приступачности. Прилагодите или замените ово дугме у Подешавањима.\n\n"<annotation id="link">"Подешавања"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Померите дугме до ивице да бисте га привремено сакрили"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Премести горе лево"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Премести горе десно"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Премести доле лево"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Премести доле десно"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Премести до ивице и сакриј"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Премести изван ивице и прикажи"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"укључите/искључите"</string> <string name="quick_controls_title" msgid="6839108006171302273">"Контроле уређаја"</string> <string name="controls_providers_title" msgid="6879775889857085056">"Одаберите апликацију за додавање контрола"</string> @@ -933,6 +948,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"Мобилни подаци"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"Повезано"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"Није успело аутом. повезивање преко моб. података"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"Веза није успостављена"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Није доступна ниједна друга мрежа"</string> diff --git a/packages/SystemUI/res/values-sv/strings.xml b/packages/SystemUI/res/values-sv/strings.xml index c1cdc5b5381c..48654d515882 100644 --- a/packages/SystemUI/res/values-sv/strings.xml +++ b/packages/SystemUI/res/values-sv/strings.xml @@ -248,7 +248,8 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"Ljusstyrka"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"Färginvertering"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"Färgkorrigering"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Användarinställningar"</string> + <!-- no translation found for quick_settings_more_user_settings (7634653308485206306) --> + <skip /> <string name="quick_settings_done" msgid="2163641301648855793">"Klart"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Stäng"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"Ansluten"</string> @@ -727,6 +728,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"Vill du inaktivera mobildata?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"Du kan inte skicka data eller använda internet via <xliff:g id="CARRIER">%s</xliff:g>. Internetanslutning blir bara möjlig via wifi."</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"din operatör"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"Svaret kan inte verifieras av Inställningar eftersom en app skymmer en begäran om behörighet."</string> <string name="slice_permission_title" msgid="3262615140094151017">"Tillåter du att bitar av <xliff:g id="APP_2">%2$s</xliff:g> visas i <xliff:g id="APP_0">%1$s</xliff:g>?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"– Kan läsa information från <xliff:g id="APP">%1$s</xliff:g>"</string> @@ -785,12 +794,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"Inställningar för förstoringsfönster"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Tryck för att öppna tillgänglighetsfunktioner. Anpassa/ersätt knappen i Inställningar.\n\n"<annotation id="link">"Inställningar"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Flytta knappen till kanten för att dölja den tillfälligt"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Flytta högst upp till vänster"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Flytta högst upp till höger"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Flytta längst ned till vänster"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Flytta längst ned till höger"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Flytta till kanten och dölj"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Flytta från kanten och visa"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"aktivera och inaktivera"</string> <string name="quick_controls_title" msgid="6839108006171302273">"Enhetsstyrning"</string> <string name="controls_providers_title" msgid="6879775889857085056">"Välj en app om du vill lägga till snabbkontroller"</string> @@ -933,6 +948,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"Mobildata"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"Ansluten"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"Du ansluts inte till mobildata automatiskt"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"Ingen anslutning"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Inga andra nätverk är tillgängliga"</string> diff --git a/packages/SystemUI/res/values-sw/strings.xml b/packages/SystemUI/res/values-sw/strings.xml index 8ed824e418b8..6bf2bc2f54d4 100644 --- a/packages/SystemUI/res/values-sw/strings.xml +++ b/packages/SystemUI/res/values-sw/strings.xml @@ -248,7 +248,8 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"Ung\'avu"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"Ugeuzaji rangi"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"Usahihishaji wa rangirangi"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Mipangilio ya mtumiaji"</string> + <!-- no translation found for quick_settings_more_user_settings (7634653308485206306) --> + <skip /> <string name="quick_settings_done" msgid="2163641301648855793">"Nimemaliza"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Funga"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"Imeunganishwa"</string> @@ -727,6 +728,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"Ungependa kuzima data ya mtandao wa simu?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"Hutaweza kufikia data au intaneti kupitia <xliff:g id="CARRIER">%s</xliff:g>. Intaneti itapatikana kupitia Wi-Fi pekee."</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"mtoa huduma wako"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"Kwa sababu programu nyingine inazuia ombi la ruhusa, hatuwezi kuthibitisha jibu lako katika Mipangilio."</string> <string name="slice_permission_title" msgid="3262615140094151017">"Ungependa kuruhusu <xliff:g id="APP_0">%1$s</xliff:g> ionyeshe vipengee <xliff:g id="APP_2">%2$s</xliff:g>?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"- Inaweza kusoma maelezo kutoka <xliff:g id="APP">%1$s</xliff:g>"</string> @@ -785,12 +794,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"Mipangilio ya dirisha la kikuzaji"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Gusa ili ufungue vipengele vya ufikivu. Weka mapendeleo au ubadilishe kitufe katika Mipangilio.\n\n"<annotation id="link">"Angalia mipangilio"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Sogeza kitufe kwenye ukingo ili ukifiche kwa muda"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Sogeza juu kushoto"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Sogeza juu kulia"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Sogeza chini kushoto"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Sogeza chini kulia"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Sogeza kwenye ukingo kisha ufiche"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Sogeza nje ya ukingo kisha uonyeshe"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"geuza"</string> <string name="quick_controls_title" msgid="6839108006171302273">"Vidhibiti vya vifaa"</string> <string name="controls_providers_title" msgid="6879775889857085056">"Chagua programu ili uweke vidhibiti"</string> @@ -933,6 +948,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"Data ya mtandao wa simu"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"Imeunganishwa"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"Data ya mtandao wa simu haitaunganishwa kiotomatiki"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"Hakuna muunganisho"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Hakuna mitandao mingine inayopatikana"</string> diff --git a/packages/SystemUI/res/values-ta/strings.xml b/packages/SystemUI/res/values-ta/strings.xml index 9397b6c65397..b291004b35c0 100644 --- a/packages/SystemUI/res/values-ta/strings.xml +++ b/packages/SystemUI/res/values-ta/strings.xml @@ -248,7 +248,8 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"ஒளிர்வு"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"கலர் இன்வெர்ஷன்"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"கலர் கரெக்ஷன்"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"பயனர் அமைப்புகள்"</string> + <!-- no translation found for quick_settings_more_user_settings (7634653308485206306) --> + <skip /> <string name="quick_settings_done" msgid="2163641301648855793">"முடிந்தது"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"மூடுக"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"இணைக்கப்பட்டது"</string> @@ -727,6 +728,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"மொபைல் டேட்டாவை ஆஃப் செய்யவா?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"<xliff:g id="CARRIER">%s</xliff:g> மூலம் டேட்டா அல்லது இணையத்தை உங்களால் பயன்படுத்த முடியாது. வைஃபை வழியாக மட்டுமே இணையத்தைப் பயன்படுத்த முடியும்."</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"உங்கள் மொபைல் நிறுவனம்"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"அனுமதிக் கோரிக்கையை ஆப்ஸ் மறைப்பதால், அமைப்புகளால் உங்கள் பதிலைச் சரிபார்க்க முடியாது."</string> <string name="slice_permission_title" msgid="3262615140094151017">"<xliff:g id="APP_0">%1$s</xliff:g> ஆப்ஸை, <xliff:g id="APP_2">%2$s</xliff:g> ஆப்ஸின் விழிப்பூட்டல்களைக் காண்பிக்க அனுமதிக்கவா?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"- இது, <xliff:g id="APP">%1$s</xliff:g> பயன்பாட்டிலிருந்து தகவலைப் படிக்கும்"</string> @@ -785,12 +794,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"சாளரத்தைப் பெரிதாக்கும் கருவிக்கான அமைப்புகள்"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"அணுகல்தன்மை அம்சத்தை திறக்க தட்டவும். அமைப்பில் பட்டனை பிரத்தியேகமாக்கலாம்/மாற்றலாம்.\n\n"<annotation id="link">"அமைப்பில் காண்க"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"பட்டனைத் தற்காலிகமாக மறைக்க ஓரத்திற்கு நகர்த்தும்"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"மேலே இடதுபுறத்திற்கு நகர்த்து"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"மேலே வலதுபுறத்திற்கு நகர்த்து"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"கீழே இடதுபுறத்திற்கு நகர்த்து"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"கீழே வலதுபுறத்திற்கு நகர்த்து"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"ஓரத்திற்கு நகர்த்தி மறை"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"ஓரத்திற்கு நகர்த்தி, காட்டு"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"நிலைமாற்று"</string> <string name="quick_controls_title" msgid="6839108006171302273">"சாதனக் கட்டுப்பாடுகள்"</string> <string name="controls_providers_title" msgid="6879775889857085056">"கட்டுப்பாடுகளைச் சேர்க்க வேண்டிய ஆப்ஸைத் தேர்ந்தெடுங்கள்"</string> @@ -933,6 +948,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"மொபைல் டேட்டா"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"இணைக்கப்பட்டது"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"மொபைல் டேட்டாவுடன் தானாக இணைக்காது"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"இணைப்பு இல்லை"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"வேறு நெட்வொர்க்குகள் எதுவும் கிடைக்கவில்லை"</string> diff --git a/packages/SystemUI/res/values-te/strings.xml b/packages/SystemUI/res/values-te/strings.xml index f202faeb28b6..4c34f45aee7d 100644 --- a/packages/SystemUI/res/values-te/strings.xml +++ b/packages/SystemUI/res/values-te/strings.xml @@ -248,7 +248,8 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"ప్రకాశం"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"కలర్ మార్పిడి"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"కలర్ కరెక్షన్"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"యూజర్ సెట్టింగ్లు"</string> + <!-- no translation found for quick_settings_more_user_settings (7634653308485206306) --> + <skip /> <string name="quick_settings_done" msgid="2163641301648855793">"పూర్తయింది"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"మూసివేయి"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"కనెక్ట్ చేయబడినది"</string> @@ -727,6 +728,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"మొబైల్ డేటాను ఆఫ్ చేయాలా?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"\"<xliff:g id="CARRIER">%s</xliff:g>\" ద్వారా మీకు డేటా లేదా ఇంటర్నెట్కు యాక్సెస్ ఉండదు. Wi-Fi ద్వారా మాత్రమే ఇంటర్నెట్ అందుబాటులో ఉంటుంది."</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"మీ క్యారియర్"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"అనుమతి రిక్వెస్ట్కు ఒక యాప్ అడ్డు తగులుతున్నందున సెట్టింగ్లు మీ ప్రతిస్పందనను ధృవీకరించలేకపోయాయి."</string> <string name="slice_permission_title" msgid="3262615140094151017">"<xliff:g id="APP_2">%2$s</xliff:g> స్లైస్లను చూపించడానికి <xliff:g id="APP_0">%1$s</xliff:g>ని అనుమతించండి?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"- ఇది <xliff:g id="APP">%1$s</xliff:g> నుండి సమాచారాన్ని చదువుతుంది"</string> @@ -785,12 +794,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"మాగ్నిఫయర్ విండో సెట్టింగ్లు"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"యాక్సెసిబిలిటీ ఫీచర్లను తెరవడానికి ట్యాప్ చేయండి. సెట్టింగ్లలో ఈ బటన్ను అనుకూలంగా మార్చండి లేదా రీప్లేస్ చేయండి.\n\n"<annotation id="link">"వీక్షణ సెట్టింగ్లు"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"తాత్కాలికంగా దానిని దాచడానికి బటన్ను చివరకు తరలించండి"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"ఎగువ ఎడమ వైపునకు తరలించు"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"ఎగువ కుడి వైపునకు తరలించు"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"దిగువ ఎడమ వైపునకు తరలించు"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"దిగువ కుడి వైపునకు తరలించు"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"అంచుకు తరలించి దాచండి"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"అంచుని తరలించి చూపించు"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"టోగుల్ చేయి"</string> <string name="quick_controls_title" msgid="6839108006171302273">"డివైజ్ కంట్రోల్స్"</string> <string name="controls_providers_title" msgid="6879775889857085056">"కంట్రోల్స్ను యాడ్ చేయడానికి యాప్ను ఎంచుకోండి"</string> @@ -933,6 +948,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"మొబైల్ డేటా"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"కనెక్ట్ చేయబడింది"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"మొబైల్ డేటా ఆటోమెటిక్గా కనెక్ట్ అవ్వదు"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"కనెక్షన్ లేదు"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"ఇతర నెట్వర్క్లేవీ అందుబాటులో లేవు"</string> diff --git a/packages/SystemUI/res/values-th/strings.xml b/packages/SystemUI/res/values-th/strings.xml index f21643724e1b..5de908c1db73 100644 --- a/packages/SystemUI/res/values-th/strings.xml +++ b/packages/SystemUI/res/values-th/strings.xml @@ -248,7 +248,7 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"ความสว่าง"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"การกลับสี"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"การแก้สี"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"การตั้งค่าผู้ใช้"</string> + <string name="quick_settings_more_user_settings" msgid="7634653308485206306">"จัดการผู้ใช้"</string> <string name="quick_settings_done" msgid="2163641301648855793">"เสร็จสิ้น"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"ปิด"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"เชื่อมต่อ"</string> @@ -727,6 +727,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"ปิดอินเทอร์เน็ตมือถือไหม"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"คุณจะใช้เน็ตมือถือหรืออินเทอร์เน็ตผ่าน \"<xliff:g id="CARRIER">%s</xliff:g>\" ไม่ได้ แต่จะใช้ผ่าน Wi-Fi ได้เท่านั้น"</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"ผู้ให้บริการของคุณ"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"เนื่องจากแอปหนึ่งได้บดบังคำขอสิทธิ์ ระบบจึงไม่สามารถยืนยันคำตอบของคุณสำหรับการตั้งค่าได้"</string> <string name="slice_permission_title" msgid="3262615140094151017">"อนุญาตให้ <xliff:g id="APP_0">%1$s</xliff:g> แสดงส่วนต่างๆ ของ <xliff:g id="APP_2">%2$s</xliff:g>"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"- อ่านข้อมูลจาก <xliff:g id="APP">%1$s</xliff:g> ได้"</string> @@ -785,12 +793,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"การตั้งค่าหน้าต่างแว่นขยาย"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"แตะเพื่อเปิดฟีเจอร์การช่วยเหลือพิเศษ ปรับแต่งหรือแทนที่ปุ่มนี้ในการตั้งค่า\n\n"<annotation id="link">"ดูการตั้งค่า"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"ย้ายปุ่มไปที่ขอบเพื่อซ่อนชั่วคราว"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"ย้ายไปด้านซ้ายบน"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"ย้ายไปด้านขวาบน"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"ย้ายไปด้านซ้ายล่าง"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"ย้ายไปด้านขาวล่าง"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"ย้ายไปที่ขอบและซ่อน"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"ย้ายออกจากขอบและแสดง"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"สลับ"</string> <string name="quick_controls_title" msgid="6839108006171302273">"ระบบควบคุมอุปกรณ์"</string> <string name="controls_providers_title" msgid="6879775889857085056">"เลือกแอปเพื่อเพิ่มตัวควบคุม"</string> @@ -933,6 +947,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"อินเทอร์เน็ตมือถือ"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"เชื่อมต่อแล้ว"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"อินเทอร์เน็ตมือถือจะไม่เชื่อมต่ออัตโนมัติ"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"ไม่มีการเชื่อมต่อ"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"ไม่มีเครือข่ายอื่นๆ ที่พร้อมใช้งาน"</string> diff --git a/packages/SystemUI/res/values-tl/strings.xml b/packages/SystemUI/res/values-tl/strings.xml index f1acf43e81ae..f47b90669856 100644 --- a/packages/SystemUI/res/values-tl/strings.xml +++ b/packages/SystemUI/res/values-tl/strings.xml @@ -248,7 +248,7 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"Brightness"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"Pag-invert ng kulay"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"Pagtatama ng kulay"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Mga setting ng user"</string> + <string name="quick_settings_more_user_settings" msgid="7634653308485206306">"Pamahalaan ang mga user"</string> <string name="quick_settings_done" msgid="2163641301648855793">"Tapos na"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Isara"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"Nakakonekta"</string> @@ -727,6 +727,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"I-off ang mobile data?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"Hindi ka magkaka-access sa data o internet sa pamamagitan ng <xliff:g id="CARRIER">%s</xliff:g>. Available lang ang internet sa pamamagitan ng Wi-Fi."</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"ang iyong carrier"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"Hindi ma-verify ng Mga Setting ang iyong tugon dahil may app na tumatakip sa isang kahilingan sa pagpapahintulot."</string> <string name="slice_permission_title" msgid="3262615140094151017">"Payagan ang <xliff:g id="APP_0">%1$s</xliff:g> na ipakita ang mga slice ng <xliff:g id="APP_2">%2$s</xliff:g>?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"- Nakakabasa ito ng impormasyon mula sa <xliff:g id="APP">%1$s</xliff:g>"</string> @@ -785,12 +793,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"Mga setting ng window ng magnifier"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"I-tap, buksan mga feature ng accessibility. I-customize o palitan button sa Mga Setting.\n\n"<annotation id="link">"Tingnan ang mga setting"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Ilipat ang button sa gilid para pansamantala itong itago"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Ilipat sa kaliwa sa itaas"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Ilipat sa kanan sa itaas"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Ilipat sa kaliwa sa ibaba"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Ilipat sa kanan sa ibaba"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Ilipat sa sulok at itago"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Alisin sa sulok at ipakita"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"i-toggle"</string> <string name="quick_controls_title" msgid="6839108006171302273">"Mga kontrol ng device"</string> <string name="controls_providers_title" msgid="6879775889857085056">"Pumili ng app para magdagdag ng mga kontrol"</string> @@ -933,6 +947,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"Mobile data"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"Nakakonekta"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"Hindi awtomatikong kokonekta ang mobile data"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"Walang koneksyon"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Walang available na iba pang network"</string> diff --git a/packages/SystemUI/res/values-tr/strings.xml b/packages/SystemUI/res/values-tr/strings.xml index 7b52a418a2a9..17dfa48ec036 100644 --- a/packages/SystemUI/res/values-tr/strings.xml +++ b/packages/SystemUI/res/values-tr/strings.xml @@ -248,7 +248,8 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"Parlaklık"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"Rengi ters çevirme"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"Renk düzeltme"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Kullanıcı ayarları"</string> + <!-- no translation found for quick_settings_more_user_settings (7634653308485206306) --> + <skip /> <string name="quick_settings_done" msgid="2163641301648855793">"Bitti"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Kapat"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"Bağlı"</string> @@ -727,6 +728,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"Mobil veri kapatılsın mı?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"<xliff:g id="CARRIER">%s</xliff:g> üzerinden veri veya internet erişiminiz olmayacak. İnternet yalnızca kablosuz bağlantı üzerinden kullanılabilecek."</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"operatörünüz"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"Bir uygulama bir izin isteğinin anlaşılmasını engellediğinden, Ayarlar, yanıtınızı doğrulayamıyor."</string> <string name="slice_permission_title" msgid="3262615140094151017">"<xliff:g id="APP_0">%1$s</xliff:g> uygulamasının, <xliff:g id="APP_2">%2$s</xliff:g> dilimlerini göstermesine izin verilsin mi?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"- <xliff:g id="APP">%1$s</xliff:g> uygulamasından bilgileri okuyabilir"</string> @@ -785,12 +794,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"Büyüteç penceresi ayarları"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Erişilebilirlik özelliklerini açmak için dokunun. Bu düğmeyi Ayarlar\'dan özelleştirin veya değiştirin.\n\n"<annotation id="link">"Ayarları göster"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Düğmeyi geçici olarak gizlemek için kenara taşıyın"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Sol üste taşı"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Sağ üste taşı"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Sol alta taşı"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Sağ alta taşı"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Kenara taşıyıp gizle"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Kenarın dışına taşıyıp göster"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"değiştir"</string> <string name="quick_controls_title" msgid="6839108006171302273">"Cihaz denetimleri"</string> <string name="controls_providers_title" msgid="6879775889857085056">"Denetim eklemek için uygulama seçin"</string> @@ -933,6 +948,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"Mobil veri"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"Bağlı"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"Mobil veri otomatik olarak bağlanmıyor"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"Bağlantı yok"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Kullanılabilir başka ağ yok"</string> diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml index 6bd9e30ef560..ff1b59467e5e 100644 --- a/packages/SystemUI/res/values-uk/strings.xml +++ b/packages/SystemUI/res/values-uk/strings.xml @@ -248,7 +248,8 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"Яскравість"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"Інверсія кольорів"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"Корекція кольору"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Налаштування користувача"</string> + <!-- no translation found for quick_settings_more_user_settings (7634653308485206306) --> + <skip /> <string name="quick_settings_done" msgid="2163641301648855793">"Готово"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Закрити"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"Під’єднано"</string> @@ -727,6 +728,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"Вимкнути мобільний Інтернет?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"Ви не матимете доступу до даних чи Інтернету через оператора <xliff:g id="CARRIER">%s</xliff:g>. Інтернет буде доступний лише через Wi-Fi."</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"ваш оператор"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"Не вдається підтвердити вашу відповідь у налаштуваннях, оскільки інший додаток заступає запит на дозвіл."</string> <string name="slice_permission_title" msgid="3262615140094151017">"Дозволити додатку <xliff:g id="APP_0">%1$s</xliff:g> показувати фрагменти додатка <xliff:g id="APP_2">%2$s</xliff:g>?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"- Має доступ до інформації з додатка <xliff:g id="APP">%1$s</xliff:g>"</string> @@ -785,12 +794,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"Налаштування розміру лупи"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Кнопка спеціальних можливостей. Змініть або замініть її в Налаштуваннях.\n\n"<annotation id="link">"Переглянути налаштування"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Щоб тимчасово сховати кнопку, перемістіть її на край екрана"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Перемістити ліворуч угору"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Перемістити праворуч угору"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Перемістити ліворуч униз"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Перемістити праворуч униз"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Перемістити до краю, приховати"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Перемістити від краю, показати"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"перемкнути"</string> <string name="quick_controls_title" msgid="6839108006171302273">"Керування пристроями"</string> <string name="controls_providers_title" msgid="6879775889857085056">"Виберіть, для якого додатка налаштувати елементи керування"</string> @@ -933,6 +948,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"Мобільний трафік"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"Підключено"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"Мобільний Інтернет не підключатиметься автоматично"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"Немає з\'єднання"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Інші мережі недоступні"</string> diff --git a/packages/SystemUI/res/values-ur/strings.xml b/packages/SystemUI/res/values-ur/strings.xml index ec382b250c2f..10e0e680023d 100644 --- a/packages/SystemUI/res/values-ur/strings.xml +++ b/packages/SystemUI/res/values-ur/strings.xml @@ -248,7 +248,8 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"چمکیلا پن"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"رنگوں کی تقلیب"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"رنگ کی اصلاح"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"صارف کی ترتیبات"</string> + <!-- no translation found for quick_settings_more_user_settings (7634653308485206306) --> + <skip /> <string name="quick_settings_done" msgid="2163641301648855793">"ہو گیا"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"بند کریں"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"مربوط"</string> @@ -727,6 +728,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"موبائل ڈیٹا آف کریں؟"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"آپ کو <xliff:g id="CARRIER">%s</xliff:g> کے ذریعے ڈیٹا یا انٹرنیٹ تک رسائی حاصل نہیں ہوگی۔ انٹرنیٹ صرف Wi-Fi کے ذریعے دستیاب ہوگا۔"</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"آپ کا کریئر"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"چونکہ ایک ایپ اجازت کی درخواست کو مبہم کر رہی ہے، لہذا ترتیبات آپ کے جواب کی توثیق نہیں کر سکتی ہیں۔"</string> <string name="slice_permission_title" msgid="3262615140094151017">"<xliff:g id="APP_0">%1$s</xliff:g> کو <xliff:g id="APP_2">%2$s</xliff:g> کے سلائسز دکھانے کی اجازت دیں؟"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"- یہ <xliff:g id="APP">%1$s</xliff:g> کی معلومات پڑھ سکتا ہے"</string> @@ -785,12 +794,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"میگنیفائر ونڈو کی ترتیبات"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"ایکسیسبیلٹی خصوصیات کھولنے کے لیے تھپتھپائیں۔ ترتیبات میں اس بٹن کو حسب ضرورت بنائیں یا تبدیل کریں۔\n\n"<annotation id="link">"ترتیبات ملاحظہ کریں"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"عارضی طور پر بٹن کو چھپانے کے لئے اسے کنارے پر لے جائیں"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"اوپر بائیں جانب لے جائیں"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"اوپر دائیں جانب لے جائيں"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"نیچے بائیں جانب لے جائیں"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"نیچے دائیں جانب لے جائیں"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"EDGE پر لے جائیں اور چھپائیں"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"EDGE اور شو سے باہر منتقل کریں"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"ٹوگل کریں"</string> <string name="quick_controls_title" msgid="6839108006171302273">"آلہ کے کنٹرولز"</string> <string name="controls_providers_title" msgid="6879775889857085056">"کنٹرولز شامل کرنے کے لیے ایپ منتخب کریں"</string> @@ -933,6 +948,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"موبائل ڈیٹا"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="NETWORKMODE">%2$s</xliff:g> / <xliff:g id="STATE">%1$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"منسلک ہے"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"موبائل ڈیٹا خودکار طور پر منسلک نہیں ہوگا"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"کوئی کنکشن نہیں"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"کوئی دوسرا نیٹ ورک دستیاب نہیں ہے"</string> diff --git a/packages/SystemUI/res/values-uz/strings.xml b/packages/SystemUI/res/values-uz/strings.xml index a666432371c9..184044d6aa29 100644 --- a/packages/SystemUI/res/values-uz/strings.xml +++ b/packages/SystemUI/res/values-uz/strings.xml @@ -248,7 +248,8 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"Yorqinlik"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"Ranglarni akslantirish"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"Ranglarni tuzatish"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Foydalanuvchi sozlamalari"</string> + <!-- no translation found for quick_settings_more_user_settings (7634653308485206306) --> + <skip /> <string name="quick_settings_done" msgid="2163641301648855793">"Tayyor"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Yopish"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"Ulangan"</string> @@ -727,6 +728,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"Mobil internet uzilsinmi?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"<xliff:g id="CARRIER">%s</xliff:g> orqali internetdan foydalana olmaysiz. Internet faqat Wi-Fi orqali ishlaydi."</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"aloqa operatoringiz"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"Ilova ruxsatnoma so‘roviga xalaqit qilayotgani tufayli, “Sozlamalar” ilovasi javobingizni tekshira olmaydi."</string> <string name="slice_permission_title" msgid="3262615140094151017">"<xliff:g id="APP_0">%1$s</xliff:g> ilovasiga <xliff:g id="APP_2">%2$s</xliff:g> ilovasidan fragmentlar ko‘rsatishga ruxsat berilsinmi?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"– <xliff:g id="APP">%1$s</xliff:g> ma’lumotlarini o‘qiy oladi"</string> @@ -785,12 +794,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"Lupa oynasi sozlamalari"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Maxsus imkoniyatlarni ochish uchun bosing Sozlamalardan moslay yoki almashtira olasiz.\n\n"<annotation id="link">"Sozlamalar"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Vaqtinchalik berkitish uchun tugmani qirra tomon suring"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Yuqori chapga surish"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Yuqori oʻngga surish"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Quyi chapga surish"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Quyi oʻngga surish"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Chetiga olib borish va yashirish"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Chetidan qaytarish va koʻrsatish"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"oʻzgartirish"</string> <string name="quick_controls_title" msgid="6839108006171302273">"Qurilmalarni boshqarish"</string> <string name="controls_providers_title" msgid="6879775889857085056">"Boshqaruv elementlarini kiritish uchun ilovani tanlang"</string> @@ -933,6 +948,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"Mobil internet"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"Ulandi"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"Mobil internetga avtomatik ulanmaydi"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"Internetga ulanmagansiz"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Boshqa tarmoqlar mavjud emas"</string> diff --git a/packages/SystemUI/res/values-vi/strings.xml b/packages/SystemUI/res/values-vi/strings.xml index 21200ca7d5bd..8ea3408c039a 100644 --- a/packages/SystemUI/res/values-vi/strings.xml +++ b/packages/SystemUI/res/values-vi/strings.xml @@ -248,7 +248,8 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"Độ sáng"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"Đảo màu"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"Chỉnh màu"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Cài đặt người dùng"</string> + <!-- no translation found for quick_settings_more_user_settings (7634653308485206306) --> + <skip /> <string name="quick_settings_done" msgid="2163641301648855793">"Xong"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Đóng"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"Đã kết nối"</string> @@ -727,6 +728,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"Tắt dữ liệu di động?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"Bạn sẽ không có quyền sử dụng dữ liệu hoặc truy cập Internet thông qua chế độ <xliff:g id="CARRIER">%s</xliff:g>. Bạn chỉ có thể truy cập Internet thông qua Wi-Fi."</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"nhà mạng của bạn"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"Vì ứng dụng đang che khuất yêu cầu cấp quyền nên Cài đặt không thể xác minh câu trả lời của bạn."</string> <string name="slice_permission_title" msgid="3262615140094151017">"Cho phép <xliff:g id="APP_0">%1$s</xliff:g> hiển thị các lát của <xliff:g id="APP_2">%2$s</xliff:g>?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"- Có thể đọc thông tin từ <xliff:g id="APP">%1$s</xliff:g>"</string> @@ -785,12 +794,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"Chế độ cài đặt cửa sổ phóng to"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Nhấn để mở bộ tính năng hỗ trợ tiếp cận. Tuỳ chỉnh/thay thế nút này trong phần Cài đặt.\n\n"<annotation id="link">"Xem chế độ cài đặt"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Di chuyển nút sang cạnh để ẩn nút tạm thời"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Chuyển lên trên cùng bên trái"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Chuyển lên trên cùng bên phải"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Chuyển tới dưới cùng bên trái"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Chuyển tới dưới cùng bên phải"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Chuyển đến cạnh và ẩn"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Chuyển ra xa cạnh và hiển thị"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"bật/tắt"</string> <string name="quick_controls_title" msgid="6839108006171302273">"Điều khiển thiết bị"</string> <string name="controls_providers_title" msgid="6879775889857085056">"Chọn ứng dụng để thêm các tùy chọn điều khiển"</string> @@ -933,6 +948,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"Dữ liệu di động"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"Đã kết nối"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"Dữ liệu di động sẽ không tự động kết nối"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"Không có kết nối mạng"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Không có mạng nào khác"</string> diff --git a/packages/SystemUI/res/values-zh-rCN/strings.xml b/packages/SystemUI/res/values-zh-rCN/strings.xml index 83508a16e7e4..1cead42790b9 100644 --- a/packages/SystemUI/res/values-zh-rCN/strings.xml +++ b/packages/SystemUI/res/values-zh-rCN/strings.xml @@ -248,7 +248,8 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"亮度"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"颜色反转"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"色彩校正"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"用户设置"</string> + <!-- no translation found for quick_settings_more_user_settings (7634653308485206306) --> + <skip /> <string name="quick_settings_done" msgid="2163641301648855793">"完成"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"关闭"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"已连接"</string> @@ -727,6 +728,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"要关闭移动数据网络吗?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"您将无法通过<xliff:g id="CARRIER">%s</xliff:g>使用移动数据或互联网,只能通过 WLAN 连接到互联网。"</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"您的运营商"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"由于某个应用遮挡了权限请求界面,因此“设置”应用无法验证您的回应。"</string> <string name="slice_permission_title" msgid="3262615140094151017">"要允许“<xliff:g id="APP_0">%1$s</xliff:g>”显示“<xliff:g id="APP_2">%2$s</xliff:g>”图块吗?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"- 可以读取“<xliff:g id="APP">%1$s</xliff:g>”中的信息"</string> @@ -785,12 +794,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"放大镜窗口设置"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"点按即可打开无障碍功能。您可在“设置”中自定义或更换此按钮。\n\n"<annotation id="link">"查看设置"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"将按钮移到边缘,即可暂时将其隐藏"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"移至左上角"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"移至右上角"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"移至左下角"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"移至右下角"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"移至边缘并隐藏"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"移至边缘以外并显示"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"开启/关闭"</string> <string name="quick_controls_title" msgid="6839108006171302273">"设备控制器"</string> <string name="controls_providers_title" msgid="6879775889857085056">"选择要添加控制器的应用"</string> @@ -933,6 +948,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"移动数据网络"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"已连接"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"系统将不会自动连接到移动数据网络"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"无网络连接"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"没有其他可用网络"</string> diff --git a/packages/SystemUI/res/values-zh-rHK/strings.xml b/packages/SystemUI/res/values-zh-rHK/strings.xml index 28420b38f4ed..cb90614293e4 100644 --- a/packages/SystemUI/res/values-zh-rHK/strings.xml +++ b/packages/SystemUI/res/values-zh-rHK/strings.xml @@ -248,7 +248,8 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"亮度"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"色彩反轉"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"色彩校正"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"使用者設定"</string> + <!-- no translation found for quick_settings_more_user_settings (7634653308485206306) --> + <skip /> <string name="quick_settings_done" msgid="2163641301648855793">"完成"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"關閉"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"已連線"</string> @@ -727,6 +728,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"要關閉流動數據嗎?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"您無法透過「<xliff:g id="CARRIER">%s</xliff:g>」使用流動數據或互聯網。如要使用互聯網,您必須連接 Wi-Fi。"</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"您的流動網絡供應商"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"由於某個應用程式已阻擋權限要求畫面,因此「設定」應用程式無法驗證您的回應。"</string> <string name="slice_permission_title" msgid="3262615140094151017">"要允許「<xliff:g id="APP_0">%1$s</xliff:g>」顯示「<xliff:g id="APP_2">%2$s</xliff:g>」的快訊嗎?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"- 可以讀取「<xliff:g id="APP">%1$s</xliff:g>」中的資料"</string> @@ -785,12 +794,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"放大鏡視窗設定"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"㩒一下就可以開無障礙功能。喺「設定」度自訂或者取代呢個按鈕。\n\n"<annotation id="link">"查看設定"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"將按鈕移到邊緣即可暫時隱藏"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"移去左上方"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"移去右上方"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"移到左下方"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"移去右下方"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"移到邊緣並隱藏"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"從邊緣移出並顯示"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"切換"</string> <string name="quick_controls_title" msgid="6839108006171302273">"裝置控制"</string> <string name="controls_providers_title" msgid="6879775889857085056">"選擇要新增控制項的應用程式"</string> @@ -933,6 +948,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"流動數據"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"已連線"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"不會自動連線至流動數據"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"沒有連線"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"沒有可用的其他網絡"</string> diff --git a/packages/SystemUI/res/values-zh-rTW/strings.xml b/packages/SystemUI/res/values-zh-rTW/strings.xml index 8a1a9e2cb4bf..ccad340d68b0 100644 --- a/packages/SystemUI/res/values-zh-rTW/strings.xml +++ b/packages/SystemUI/res/values-zh-rTW/strings.xml @@ -248,7 +248,8 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"亮度"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"色彩反轉"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"色彩校正"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"使用者設定"</string> + <!-- no translation found for quick_settings_more_user_settings (7634653308485206306) --> + <skip /> <string name="quick_settings_done" msgid="2163641301648855793">"完成"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"關閉"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"已連線"</string> @@ -727,6 +728,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"要關閉行動數據嗎?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"你將無法透過「<xliff:g id="CARRIER">%s</xliff:g>」使用行動數據或網際網路。你只能透過 Wi-Fi 使用網際網路。"</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"你的電信業者"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"由於某個應用程式覆蓋了權限要求畫面,因此「設定」應用程式無法驗證你的回應。"</string> <string name="slice_permission_title" msgid="3262615140094151017">"要允許「<xliff:g id="APP_0">%1$s</xliff:g>」顯示「<xliff:g id="APP_2">%2$s</xliff:g>」的區塊嗎?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"- 它可以讀取「<xliff:g id="APP">%1$s</xliff:g>」的資訊"</string> @@ -785,12 +794,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"放大鏡視窗設定"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"輕觸即可開啟無障礙功能。你可以前往「設定」自訂或更換這個按鈕。\n\n"<annotation id="link">"查看設定"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"將按鈕移到邊緣處即可暫時隱藏"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"移到左上方"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"移到右上方"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"移到左下方"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"移到右下方"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"移到邊緣並隱藏"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"從邊緣移出並顯示"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"切換"</string> <string name="quick_controls_title" msgid="6839108006171302273">"裝置控制"</string> <string name="controls_providers_title" msgid="6879775889857085056">"選擇應用程式以新增控制項"</string> @@ -933,6 +948,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"行動數據"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"已連線"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"系統將不會自動使用行動數據連線"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"沒有網路連線"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"沒有可用的其他網路"</string> diff --git a/packages/SystemUI/res/values-zu/strings.xml b/packages/SystemUI/res/values-zu/strings.xml index 9b376f0d4d67..b3464949a301 100644 --- a/packages/SystemUI/res/values-zu/strings.xml +++ b/packages/SystemUI/res/values-zu/strings.xml @@ -248,7 +248,8 @@ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"Ukugqama"</string> <string name="quick_settings_inversion_label" msgid="3501527749494755688">"Ukuguqulwa kombala"</string> <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"Ukulungiswa kombala"</string> - <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Amasethingi womsebenzisi"</string> + <!-- no translation found for quick_settings_more_user_settings (7634653308485206306) --> + <skip /> <string name="quick_settings_done" msgid="2163641301648855793">"Kwenziwe"</string> <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Vala"</string> <string name="quick_settings_connected" msgid="3873605509184830379">"Ixhunyiwe"</string> @@ -727,6 +728,14 @@ <string name="mobile_data_disable_title" msgid="5366476131671617790">"Vala idatha yeselula?"</string> <string name="mobile_data_disable_message" msgid="8604966027899770415">"Ngeke ube nokufinyelela kudatha noma ku-inthanethi nge-<xliff:g id="CARRIER">%s</xliff:g>. I-inthanethi izotholakala kuphela nge-Wi-Fi."</string> <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"inkampani yakho yenethiwekhi"</string> + <!-- no translation found for auto_data_switch_disable_title (5146527155665190652) --> + <skip /> + <!-- no translation found for auto_data_switch_disable_message (5885533647399535852) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_negative_button (2370876875999891444) --> + <skip /> + <!-- no translation found for auto_data_switch_dialog_positive_button (8531782041263087564) --> + <skip /> <string name="touch_filtered_warning" msgid="8119511393338714836">"Ngoba uhlelo lokusebenza lusitha isicelo semvume, Izilungiselelo azikwazi ukuqinisekisa impendulo yakho."</string> <string name="slice_permission_title" msgid="3262615140094151017">"Vumela i-<xliff:g id="APP_0">%1$s</xliff:g> ukuthi ibonise izingcezu ze-<xliff:g id="APP_2">%2$s</xliff:g>?"</string> <string name="slice_permission_text_1" msgid="6675965177075443714">"- Ingafunda ulwazi kusukela ku-<xliff:g id="APP">%1$s</xliff:g>"</string> @@ -785,12 +794,18 @@ <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"Amasethingi ewindi lesikhulisi"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Thepha ukuze uvule izakhi zokufinyelela. Enza ngendlela oyifisayo noma shintsha le nkinobho Kumasethingi.\n\n"<annotation id="link">"Buka amasethingi"</annotation></string> <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Hambisa inkinobho onqenqemeni ukuze uyifihle okwesikhashana"</string> + <!-- no translation found for accessibility_floating_button_undo (511112888715708241) --> + <skip /> + <!-- no translation found for accessibility_floating_button_undo_message_text (3044079592757099698) --> + <skip /> <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Hamba phezulu kwesokunxele"</string> <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Hamba phezulu ngakwesokudla"</string> <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Hamba phansi ngakwesokunxele"</string> <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Hamba phansi ngakwesokudla"</string> <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Hamba onqenqemeni ufihle"</string> <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Phuma onqenqemeni ubonise"</string> + <!-- no translation found for accessibility_floating_button_action_remove_menu (6730432848162552135) --> + <skip /> <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"guqula"</string> <string name="quick_controls_title" msgid="6839108006171302273">"Izilawuli zezinsiza"</string> <string name="controls_providers_title" msgid="6879775889857085056">"Khetha uhlelo lokusebenza ukwengeza izilawuli"</string> @@ -933,6 +948,10 @@ <string name="mobile_data_settings_title" msgid="3955246641380064901">"Idatha yeselula"</string> <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> <string name="mobile_data_connection_active" msgid="944490013299018227">"Ixhunyiwe"</string> + <!-- no translation found for mobile_data_temp_connection_active (4590222725908806824) --> + <skip /> + <!-- no translation found for mobile_data_poor_connection (819617772268371434) --> + <skip /> <string name="mobile_data_off_summary" msgid="3663995422004150567">"Idatha yeselula ngeke ikwazi ukuxhuma ngokuzenzekelayo"</string> <string name="mobile_data_no_connection" msgid="1713872434869947377">"Alukho uxhumano"</string> <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Awekho amanye amanethiwekhi atholakalayo"</string> diff --git a/packages/SystemUI/res/xml/media_session_collapsed.xml b/packages/SystemUI/res/xml/media_session_collapsed.xml index 9115d42fc42d..148e5ec1606f 100644 --- a/packages/SystemUI/res/xml/media_session_collapsed.xml +++ b/packages/SystemUI/res/xml/media_session_collapsed.xml @@ -34,6 +34,16 @@ app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent" /> + <!-- Touch ripple must have the same constraint as the album art. --> + <Constraint + android:id="@+id/touch_ripple_view" + android:layout_width="match_parent" + android:layout_height="@dimen/qs_media_session_height_collapsed" + app:layout_constraintStart_toStartOf="@+id/album_art" + app:layout_constraintEnd_toEndOf="@+id/album_art" + app:layout_constraintTop_toTopOf="@+id/album_art" + app:layout_constraintBottom_toBottomOf="@+id/album_art" /> + <Constraint android:id="@+id/header_title" android:layout_width="wrap_content" diff --git a/packages/SystemUI/res/xml/media_session_expanded.xml b/packages/SystemUI/res/xml/media_session_expanded.xml index 522dc686daa3..ac484d7dde8e 100644 --- a/packages/SystemUI/res/xml/media_session_expanded.xml +++ b/packages/SystemUI/res/xml/media_session_expanded.xml @@ -27,6 +27,16 @@ app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent" /> + <!-- Touch ripple must have the same constraint as the album art. --> + <Constraint + android:id="@+id/touch_ripple_view" + android:layout_width="match_parent" + android:layout_height="@dimen/qs_media_session_height_expanded" + app:layout_constraintStart_toStartOf="@+id/album_art" + app:layout_constraintEnd_toEndOf="@+id/album_art" + app:layout_constraintTop_toTopOf="@+id/album_art" + app:layout_constraintBottom_toBottomOf="@+id/album_art" /> + <Constraint android:id="@+id/header_title" android:layout_width="wrap_content" diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java index 93ee151f26c5..c756a17976bf 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java @@ -89,6 +89,7 @@ import com.android.settingslib.Utils; import com.android.systemui.Gefingerpoken; import com.android.systemui.R; import com.android.systemui.animation.Interpolators; +import com.android.systemui.classifier.FalsingA11yDelegate; import com.android.systemui.plugins.FalsingManager; import com.android.systemui.shared.system.SysUiStatsLog; import com.android.systemui.statusbar.policy.BaseUserSwitcherAdapter; @@ -136,6 +137,7 @@ public class KeyguardSecurityContainer extends ConstraintLayout { private GlobalSettings mGlobalSettings; private FalsingManager mFalsingManager; private UserSwitcherController mUserSwitcherController; + private FalsingA11yDelegate mFalsingA11yDelegate; private AlertDialog mAlertDialog; private boolean mSwipeUpToRetry; @@ -318,7 +320,8 @@ public class KeyguardSecurityContainer extends ConstraintLayout { void initMode(@Mode int mode, GlobalSettings globalSettings, FalsingManager falsingManager, UserSwitcherController userSwitcherController, - UserSwitcherViewMode.UserSwitcherCallback userSwitcherCallback) { + UserSwitcherViewMode.UserSwitcherCallback userSwitcherCallback, + FalsingA11yDelegate falsingA11yDelegate) { if (mCurrentMode == mode) return; Log.i(TAG, "Switching mode from " + modeToString(mCurrentMode) + " to " + modeToString(mode)); @@ -337,6 +340,7 @@ public class KeyguardSecurityContainer extends ConstraintLayout { } mGlobalSettings = globalSettings; mFalsingManager = falsingManager; + mFalsingA11yDelegate = falsingA11yDelegate; mUserSwitcherController = userSwitcherController; setupViewMode(); } @@ -361,7 +365,7 @@ public class KeyguardSecurityContainer extends ConstraintLayout { } mViewMode.init(this, mGlobalSettings, mSecurityViewFlipper, mFalsingManager, - mUserSwitcherController); + mUserSwitcherController, mFalsingA11yDelegate); } @Mode int getMode() { @@ -723,7 +727,8 @@ public class KeyguardSecurityContainer extends ConstraintLayout { default void init(@NonNull ConstraintLayout v, @NonNull GlobalSettings globalSettings, @NonNull KeyguardSecurityViewFlipper viewFlipper, @NonNull FalsingManager falsingManager, - @NonNull UserSwitcherController userSwitcherController) {}; + @NonNull UserSwitcherController userSwitcherController, + @NonNull FalsingA11yDelegate falsingA11yDelegate) {}; /** Reinitialize the location */ default void updateSecurityViewLocation() {}; @@ -828,7 +833,8 @@ public class KeyguardSecurityContainer extends ConstraintLayout { public void init(@NonNull ConstraintLayout v, @NonNull GlobalSettings globalSettings, @NonNull KeyguardSecurityViewFlipper viewFlipper, @NonNull FalsingManager falsingManager, - @NonNull UserSwitcherController userSwitcherController) { + @NonNull UserSwitcherController userSwitcherController, + @NonNull FalsingA11yDelegate falsingA11yDelegate) { mView = v; mViewFlipper = viewFlipper; @@ -865,6 +871,7 @@ public class KeyguardSecurityContainer extends ConstraintLayout { this::setupUserSwitcher; private UserSwitcherCallback mUserSwitcherCallback; + private FalsingA11yDelegate mFalsingA11yDelegate; UserSwitcherViewMode(UserSwitcherCallback userSwitcherCallback) { mUserSwitcherCallback = userSwitcherCallback; @@ -874,13 +881,15 @@ public class KeyguardSecurityContainer extends ConstraintLayout { public void init(@NonNull ConstraintLayout v, @NonNull GlobalSettings globalSettings, @NonNull KeyguardSecurityViewFlipper viewFlipper, @NonNull FalsingManager falsingManager, - @NonNull UserSwitcherController userSwitcherController) { + @NonNull UserSwitcherController userSwitcherController, + @NonNull FalsingA11yDelegate falsingA11yDelegate) { init(v, viewFlipper, globalSettings, /* leftAlignedByDefault= */false); mView = v; mViewFlipper = viewFlipper; mFalsingManager = falsingManager; mUserSwitcherController = userSwitcherController; mResources = v.getContext().getResources(); + mFalsingA11yDelegate = falsingA11yDelegate; if (mUserSwitcherViewGroup == null) { LayoutInflater.from(v.getContext()).inflate( @@ -978,6 +987,7 @@ public class KeyguardSecurityContainer extends ConstraintLayout { mUserSwitcher.setText(currentUserName); KeyguardUserSwitcherAnchor anchor = mView.findViewById(R.id.user_switcher_anchor); + anchor.setAccessibilityDelegate(mFalsingA11yDelegate); BaseUserSwitcherAdapter adapter = new BaseUserSwitcherAdapter(mUserSwitcherController) { @Override @@ -1048,7 +1058,7 @@ public class KeyguardSecurityContainer extends ConstraintLayout { anchor.setOnClickListener((v) -> { if (mFalsingManager.isFalseTap(LOW_PENALTY)) return; - mPopup = new KeyguardUserSwitcherPopupMenu(v.getContext(), mFalsingManager); + mPopup = new KeyguardUserSwitcherPopupMenu(mView.getContext(), mFalsingManager); mPopup.setAnchorView(anchor); mPopup.setAdapter(adapter); mPopup.setOnItemClickListener((parent, view, pos, id) -> { @@ -1137,7 +1147,8 @@ public class KeyguardSecurityContainer extends ConstraintLayout { public void init(@NonNull ConstraintLayout v, @NonNull GlobalSettings globalSettings, @NonNull KeyguardSecurityViewFlipper viewFlipper, @NonNull FalsingManager falsingManager, - @NonNull UserSwitcherController userSwitcherController) { + @NonNull UserSwitcherController userSwitcherController, + @NonNull FalsingA11yDelegate falsingA11yDelegate) { init(v, viewFlipper, globalSettings, /* leftAlignedByDefault= */true); mView = v; mViewFlipper = viewFlipper; diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java index 0b395a8760cf..79a01b9c9717 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java @@ -59,6 +59,7 @@ import com.android.settingslib.utils.ThreadUtils; import com.android.systemui.Gefingerpoken; import com.android.systemui.R; import com.android.systemui.biometrics.SidefpsController; +import com.android.systemui.classifier.FalsingA11yDelegate; import com.android.systemui.classifier.FalsingCollector; import com.android.systemui.flags.FeatureFlags; import com.android.systemui.flags.Flags; @@ -100,6 +101,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard private final FeatureFlags mFeatureFlags; private final SessionTracker mSessionTracker; private final Optional<SidefpsController> mSidefpsController; + private final FalsingA11yDelegate mFalsingA11yDelegate; private int mLastOrientation = Configuration.ORIENTATION_UNDEFINED; @@ -288,7 +290,8 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard FeatureFlags featureFlags, GlobalSettings globalSettings, SessionTracker sessionTracker, - Optional<SidefpsController> sidefpsController) { + Optional<SidefpsController> sidefpsController, + FalsingA11yDelegate falsingA11yDelegate) { super(view); mLockPatternUtils = lockPatternUtils; mUpdateMonitor = keyguardUpdateMonitor; @@ -309,6 +312,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard mGlobalSettings = globalSettings; mSessionTracker = sessionTracker; mSidefpsController = sidefpsController; + mFalsingA11yDelegate = falsingA11yDelegate; } @Override @@ -349,10 +353,21 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard if (!mSidefpsController.isPresent()) { return; } - if (mBouncerVisible - && getResources().getBoolean(R.bool.config_show_sidefps_hint_on_bouncer) - && mUpdateMonitor.isFingerprintDetectionRunning() - && !mUpdateMonitor.userNeedsStrongAuth()) { + final boolean sfpsEnabled = getResources().getBoolean( + R.bool.config_show_sidefps_hint_on_bouncer); + final boolean fpsDetectionRunning = mUpdateMonitor.isFingerprintDetectionRunning(); + final boolean needsStrongAuth = mUpdateMonitor.userNeedsStrongAuth(); + + boolean toShow = mBouncerVisible && sfpsEnabled && fpsDetectionRunning && !needsStrongAuth; + + if (DEBUG) { + Log.d(TAG, "sideFpsToShow=" + toShow + ", " + + "mBouncerVisible=" + mBouncerVisible + ", " + + "configEnabled=" + sfpsEnabled + ", " + + "fpsDetectionRunning=" + fpsDetectionRunning + ", " + + "needsStrongAuth=" + needsStrongAuth); + } + if (toShow) { mSidefpsController.get().show(); } else { mSidefpsController.get().hide(); @@ -625,7 +640,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard mView.initMode(mode, mGlobalSettings, mFalsingManager, mUserSwitcherController, () -> showMessage(getContext().getString(R.string.keyguard_unlock_to_continue), - null)); + null), mFalsingA11yDelegate); } public void reportFailedUnlockAttempt(int userId, int timeoutMs) { @@ -730,6 +745,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard private final UserSwitcherController mUserSwitcherController; private final SessionTracker mSessionTracker; private final Optional<SidefpsController> mSidefpsController; + private final FalsingA11yDelegate mFalsingA11yDelegate; @Inject Factory(KeyguardSecurityContainer view, @@ -749,7 +765,8 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard FeatureFlags featureFlags, GlobalSettings globalSettings, SessionTracker sessionTracker, - Optional<SidefpsController> sidefpsController) { + Optional<SidefpsController> sidefpsController, + FalsingA11yDelegate falsingA11yDelegate) { mView = view; mAdminSecondaryLockScreenControllerFactory = adminSecondaryLockScreenControllerFactory; mLockPatternUtils = lockPatternUtils; @@ -767,6 +784,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard mUserSwitcherController = userSwitcherController; mSessionTracker = sessionTracker; mSidefpsController = sidefpsController; + mFalsingA11yDelegate = falsingA11yDelegate; } public KeyguardSecurityContainerController create( @@ -777,7 +795,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard mKeyguardStateController, securityCallback, mSecurityViewFlipperController, mConfigurationController, mFalsingCollector, mFalsingManager, mUserSwitcherController, mFeatureFlags, mGlobalSettings, mSessionTracker, - mSidefpsController); + mSidefpsController, mFalsingA11yDelegate); } } } diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/MenuViewAppearance.java b/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/MenuViewAppearance.java index 034e96a13029..4a9807febc7f 100644 --- a/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/MenuViewAppearance.java +++ b/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/MenuViewAppearance.java @@ -136,11 +136,7 @@ class MenuViewAppearance { final Rect draggableBounds = getWindowAvailableBounds(); // Initializes start position for mapping the translation of the menu view. - final WindowMetrics windowMetrics = mWindowManager.getCurrentWindowMetrics(); - final WindowInsets windowInsets = windowMetrics.getWindowInsets(); - final Insets displayCutoutInsets = windowInsets.getInsetsIgnoringVisibility( - WindowInsets.Type.displayCutout()); - draggableBounds.offset(-displayCutoutInsets.left, -displayCutoutInsets.top); + draggableBounds.offsetTo(/* newLeft= */ 0, /* newTop= */ 0); draggableBounds.top += margin; draggableBounds.right -= getMenuWidth(); diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/MenuViewLayerController.java b/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/MenuViewLayerController.java index b1a64eda46ff..c7be907efc64 100644 --- a/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/MenuViewLayerController.java +++ b/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/MenuViewLayerController.java @@ -74,7 +74,8 @@ class MenuViewLayerController implements IAccessibilityFloatingMenu { params.receiveInsetsIgnoringZOrder = true; params.privateFlags |= PRIVATE_FLAG_EXCLUDE_FROM_SCREEN_MAGNIFICATION; params.windowAnimations = android.R.style.Animation_Translucent; - params.setFitInsetsTypes(WindowInsets.Type.navigationBars()); + params.setFitInsetsTypes( + WindowInsets.Type.systemBars() | WindowInsets.Type.displayCutout()); return params; } } diff --git a/packages/SystemUI/src/com/android/systemui/broadcast/UserBroadcastDispatcher.kt b/packages/SystemUI/src/com/android/systemui/broadcast/UserBroadcastDispatcher.kt index 22dc94a2c3f9..5850c9537ef0 100644 --- a/packages/SystemUI/src/com/android/systemui/broadcast/UserBroadcastDispatcher.kt +++ b/packages/SystemUI/src/com/android/systemui/broadcast/UserBroadcastDispatcher.kt @@ -21,6 +21,7 @@ import android.content.BroadcastReceiver import android.content.Context import android.os.Handler import android.os.Looper +import android.os.Trace import android.os.UserHandle import android.util.ArrayMap import android.util.ArraySet @@ -126,6 +127,7 @@ open class UserBroadcastDispatcher( action, userId, { + Trace.beginSection("registerReceiver act=$action user=$userId") context.registerReceiverAsUser( this, UserHandle.of(userId), @@ -134,11 +136,14 @@ open class UserBroadcastDispatcher( workerHandler, flags ) + Trace.endSection() logger.logContextReceiverRegistered(userId, flags, it) }, { try { + Trace.beginSection("unregisterReceiver act=$action user=$userId") context.unregisterReceiver(this) + Trace.endSection() logger.logContextReceiverUnregistered(userId, action) } catch (e: IllegalArgumentException) { Log.e(TAG, "Trying to unregister unregistered receiver for user $userId, " + diff --git a/packages/SystemUI/src/com/android/systemui/charging/WiredChargingRippleController.kt b/packages/SystemUI/src/com/android/systemui/charging/WiredChargingRippleController.kt index dec3d6b679c2..616e49c0b709 100644 --- a/packages/SystemUI/src/com/android/systemui/charging/WiredChargingRippleController.kt +++ b/packages/SystemUI/src/com/android/systemui/charging/WiredChargingRippleController.kt @@ -149,7 +149,7 @@ class WiredChargingRippleController @Inject constructor( } fun startRipple() { - if (rippleView.rippleInProgress || rippleView.parent != null) { + if (rippleView.rippleInProgress() || rippleView.parent != null) { // Skip if ripple is still playing, or not playing but already added the parent // (which might happen just before the animation starts or right after // the animation ends.) diff --git a/packages/SystemUI/src/com/android/systemui/charging/WirelessChargingLayout.java b/packages/SystemUI/src/com/android/systemui/charging/WirelessChargingLayout.java index c0cc6b41aafd..145569919e8e 100644 --- a/packages/SystemUI/src/com/android/systemui/charging/WirelessChargingLayout.java +++ b/packages/SystemUI/src/com/android/systemui/charging/WirelessChargingLayout.java @@ -33,9 +33,9 @@ import android.widget.TextView; import com.android.settingslib.Utils; import com.android.systemui.R; import com.android.systemui.animation.Interpolators; +import com.android.systemui.ripple.RippleAnimationConfig; import com.android.systemui.ripple.RippleShader.RippleShape; import com.android.systemui.ripple.RippleView; -import com.android.systemui.ripple.RippleViewKt; import java.text.NumberFormat; @@ -150,7 +150,7 @@ final class WirelessChargingLayout extends FrameLayout { mRippleView.setColor(color, 28); } else { mRippleView.setDuration(CIRCLE_RIPPLE_ANIMATION_DURATION); - mRippleView.setColor(color, RippleViewKt.RIPPLE_DEFAULT_ALPHA); + mRippleView.setColor(color, RippleAnimationConfig.RIPPLE_DEFAULT_ALPHA); } OnAttachStateChangeListener listener = new OnAttachStateChangeListener() { diff --git a/packages/SystemUI/src/com/android/systemui/classifier/BrightLineFalsingManager.java b/packages/SystemUI/src/com/android/systemui/classifier/BrightLineFalsingManager.java index 500f28004429..2245d8462c31 100644 --- a/packages/SystemUI/src/com/android/systemui/classifier/BrightLineFalsingManager.java +++ b/packages/SystemUI/src/com/android/systemui/classifier/BrightLineFalsingManager.java @@ -337,7 +337,8 @@ public class BrightLineFalsingManager implements FalsingManager { || mTestHarness || mDataProvider.isJustUnlockedWithFace() || mDataProvider.isDocked() - || mAccessibilityManager.isTouchExplorationEnabled(); + || mAccessibilityManager.isTouchExplorationEnabled() + || mDataProvider.isA11yAction(); } @Override diff --git a/packages/SystemUI/src/com/android/systemui/classifier/FalsingA11yDelegate.kt b/packages/SystemUI/src/com/android/systemui/classifier/FalsingA11yDelegate.kt new file mode 100644 index 000000000000..63d57cc3fc8d --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/classifier/FalsingA11yDelegate.kt @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2022 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.classifier + +import android.os.Bundle +import android.view.View +import android.view.accessibility.AccessibilityNodeInfo.ACTION_CLICK +import javax.inject.Inject + +/** + * Class that injects an artificial tap into the falsing collector. + * + * This is used for views that can be interacted with by A11y services and have falsing checks, as + * the gestures made by the A11y framework do not propagate motion events down the view hierarchy. + */ +class FalsingA11yDelegate @Inject constructor(private val falsingCollector: FalsingCollector) : + View.AccessibilityDelegate() { + override fun performAccessibilityAction(host: View?, action: Int, args: Bundle?): Boolean { + if (action == ACTION_CLICK) { + falsingCollector.onA11yAction() + } + return super.performAccessibilityAction(host, action, args) + } +} diff --git a/packages/SystemUI/src/com/android/systemui/classifier/FalsingCollector.java b/packages/SystemUI/src/com/android/systemui/classifier/FalsingCollector.java index 858bac30880b..66701080ddfb 100644 --- a/packages/SystemUI/src/com/android/systemui/classifier/FalsingCollector.java +++ b/packages/SystemUI/src/com/android/systemui/classifier/FalsingCollector.java @@ -132,5 +132,8 @@ public interface FalsingCollector { /** */ void updateFalseConfidence(FalsingClassifier.Result result); + + /** Indicates an a11y action was made. */ + void onA11yAction(); } diff --git a/packages/SystemUI/src/com/android/systemui/classifier/FalsingCollectorFake.java b/packages/SystemUI/src/com/android/systemui/classifier/FalsingCollectorFake.java index 0b7d6ab5acf7..cc25368161eb 100644 --- a/packages/SystemUI/src/com/android/systemui/classifier/FalsingCollectorFake.java +++ b/packages/SystemUI/src/com/android/systemui/classifier/FalsingCollectorFake.java @@ -157,4 +157,8 @@ public class FalsingCollectorFake implements FalsingCollector { @Override public void updateFalseConfidence(FalsingClassifier.Result result) { } + + @Override + public void onA11yAction() { + } } diff --git a/packages/SystemUI/src/com/android/systemui/classifier/FalsingCollectorImpl.java b/packages/SystemUI/src/com/android/systemui/classifier/FalsingCollectorImpl.java index da3d293d543b..8bdef1304fa4 100644 --- a/packages/SystemUI/src/com/android/systemui/classifier/FalsingCollectorImpl.java +++ b/packages/SystemUI/src/com/android/systemui/classifier/FalsingCollectorImpl.java @@ -375,6 +375,15 @@ class FalsingCollectorImpl implements FalsingCollector { mHistoryTracker.addResults(Collections.singleton(result), mSystemClock.uptimeMillis()); } + @Override + public void onA11yAction() { + if (mPendingDownEvent != null) { + mPendingDownEvent.recycle(); + mPendingDownEvent = null; + } + mFalsingDataProvider.onA11yAction(); + } + private boolean shouldSessionBeActive() { return mScreenOn && (mState == StatusBarState.KEYGUARD) && !mShowingAod; } diff --git a/packages/SystemUI/src/com/android/systemui/classifier/FalsingDataProvider.java b/packages/SystemUI/src/com/android/systemui/classifier/FalsingDataProvider.java index 3991a35e958a..09ebeeac163f 100644 --- a/packages/SystemUI/src/com/android/systemui/classifier/FalsingDataProvider.java +++ b/packages/SystemUI/src/com/android/systemui/classifier/FalsingDataProvider.java @@ -59,6 +59,7 @@ public class FalsingDataProvider { private MotionEvent mFirstRecentMotionEvent; private MotionEvent mLastMotionEvent; private boolean mJustUnlockedWithFace; + private boolean mA11YAction; @Inject public FalsingDataProvider( @@ -124,6 +125,7 @@ public class FalsingDataProvider { mPriorMotionEvents = mRecentMotionEvents; mRecentMotionEvents = new TimeLimitedMotionEventBuffer(MOTION_EVENT_AGE_MS); } + mA11YAction = false; } /** Returns screen width in pixels. */ @@ -334,6 +336,17 @@ public class FalsingDataProvider { mGestureFinalizedListeners.remove(listener); } + /** Return whether last gesture was an A11y action. */ + public boolean isA11yAction() { + return mA11YAction; + } + + /** Set whether last gesture was an A11y action. */ + public void onA11yAction() { + completePriorGesture(); + this.mA11YAction = true; + } + void onSessionStarted() { mSessionListeners.forEach(SessionListener::onSessionStarted); } diff --git a/packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardOverlayController.java b/packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardOverlayController.java index 9f338d1c6e1d..c853671519c0 100644 --- a/packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardOverlayController.java +++ b/packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardOverlayController.java @@ -31,6 +31,7 @@ import static com.android.systemui.clipboardoverlay.ClipboardOverlayEvent.CLIPBO import static com.android.systemui.clipboardoverlay.ClipboardOverlayEvent.CLIPBOARD_OVERLAY_SWIPE_DISMISSED; import static com.android.systemui.clipboardoverlay.ClipboardOverlayEvent.CLIPBOARD_OVERLAY_TAP_OUTSIDE; import static com.android.systemui.clipboardoverlay.ClipboardOverlayEvent.CLIPBOARD_OVERLAY_TIMED_OUT; +import static com.android.systemui.flags.Flags.CLIPBOARD_REMOTE_BEHAVIOR; import static java.util.Objects.requireNonNull; @@ -73,6 +74,7 @@ import com.android.systemui.R; import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.broadcast.BroadcastSender; import com.android.systemui.clipboardoverlay.dagger.ClipboardOverlayModule.OverlayWindowContext; +import com.android.systemui.flags.FeatureFlags; import com.android.systemui.screenshot.TimeoutHandler; import java.io.IOException; @@ -101,6 +103,8 @@ public class ClipboardOverlayController implements ClipboardListener.ClipboardOv private final ClipboardOverlayWindow mWindow; private final TimeoutHandler mTimeoutHandler; private final TextClassifier mTextClassifier; + private final ClipboardOverlayUtils mClipboardUtils; + private final FeatureFlags mFeatureFlags; private final ClipboardOverlayView mView; @@ -119,11 +123,15 @@ public class ClipboardOverlayController implements ClipboardListener.ClipboardOv private Animator mExitAnimator; private Animator mEnterAnimator; + private Runnable mOnUiUpdate; + private final ClipboardOverlayView.ClipboardOverlayCallbacks mClipboardCallbacks = new ClipboardOverlayView.ClipboardOverlayCallbacks() { @Override public void onInteraction() { - mTimeoutHandler.resetTimeout(); + if (mOnUiUpdate != null) { + mOnUiUpdate.run(); + } } @Override @@ -178,7 +186,10 @@ public class ClipboardOverlayController implements ClipboardListener.ClipboardOv ClipboardOverlayWindow clipboardOverlayWindow, BroadcastDispatcher broadcastDispatcher, BroadcastSender broadcastSender, - TimeoutHandler timeoutHandler, UiEventLogger uiEventLogger) { + TimeoutHandler timeoutHandler, + FeatureFlags featureFlags, + ClipboardOverlayUtils clipboardUtils, + UiEventLogger uiEventLogger) { mBroadcastDispatcher = broadcastDispatcher; mDisplayManager = requireNonNull(context.getSystemService(DisplayManager.class)); final Context displayContext = context.createDisplayContext(getDefaultDisplay()); @@ -199,6 +210,9 @@ public class ClipboardOverlayController implements ClipboardListener.ClipboardOv mTimeoutHandler = timeoutHandler; mTimeoutHandler.setDefaultTimeoutMillis(CLIPBOARD_DEFAULT_TIMEOUT_MILLIS); + mFeatureFlags = featureFlags; + mClipboardUtils = clipboardUtils; + mView.setCallbacks(mClipboardCallbacks); @@ -257,11 +271,13 @@ public class ClipboardOverlayController implements ClipboardListener.ClipboardOv boolean isSensitive = clipData != null && clipData.getDescription().getExtras() != null && clipData.getDescription().getExtras() .getBoolean(ClipDescription.EXTRA_IS_SENSITIVE); + boolean isRemote = mFeatureFlags.isEnabled(CLIPBOARD_REMOTE_BEHAVIOR) + && mClipboardUtils.isRemoteCopy(mContext, clipData, clipSource); if (clipData == null || clipData.getItemCount() == 0) { mView.showDefaultTextPreview(); } else if (!TextUtils.isEmpty(clipData.getItemAt(0).getText())) { ClipData.Item item = clipData.getItemAt(0); - if (DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_SYSTEMUI, + if (isRemote || DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_SYSTEMUI, CLIPBOARD_OVERLAY_SHOW_ACTIONS, false)) { if (item.getTextLinks() != null) { AsyncTask.execute(() -> classifyText(clipData.getItemAt(0), clipSource)); @@ -287,7 +303,13 @@ public class ClipboardOverlayController implements ClipboardListener.ClipboardOv maybeShowRemoteCopy(clipData); animateIn(); mView.announceForAccessibility(accessibilityAnnouncement); - mTimeoutHandler.resetTimeout(); + if (isRemote) { + mTimeoutHandler.cancelTimeout(); + mOnUiUpdate = null; + } else { + mOnUiUpdate = mTimeoutHandler::resetTimeout; + mOnUiUpdate.run(); + } } private void maybeShowRemoteCopy(ClipData clipData) { @@ -427,7 +449,9 @@ public class ClipboardOverlayController implements ClipboardListener.ClipboardOv @Override public void onAnimationEnd(Animator animation) { super.onAnimationEnd(animation); - mTimeoutHandler.resetTimeout(); + if (mOnUiUpdate != null) { + mOnUiUpdate.run(); + } } }); mEnterAnimator.start(); diff --git a/packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardOverlayUtils.java b/packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardOverlayUtils.java new file mode 100644 index 000000000000..cece764580d1 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardOverlayUtils.java @@ -0,0 +1,46 @@ +/* + * Copyright (C) 2022 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.clipboardoverlay; + +import android.content.ClipData; +import android.content.ClipDescription; +import android.content.ComponentName; +import android.content.Context; + +import com.android.systemui.R; + +import javax.inject.Inject; + +class ClipboardOverlayUtils { + + @Inject + ClipboardOverlayUtils() { + } + + boolean isRemoteCopy(Context context, ClipData clipData, String clipSource) { + if (clipData != null && clipData.getDescription().getExtras() != null + && clipData.getDescription().getExtras().getBoolean( + ClipDescription.EXTRA_IS_REMOTE_DEVICE)) { + ComponentName remoteComponent = ComponentName.unflattenFromString( + context.getResources().getString(R.string.config_remoteCopyPackage)); + if (remoteComponent != null) { + return remoteComponent.getPackageName().equals(clipSource); + } + } + return false; + } +} diff --git a/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsUiControllerImpl.kt b/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsUiControllerImpl.kt index bf7d71635694..6cb0e8b04869 100644 --- a/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsUiControllerImpl.kt +++ b/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsUiControllerImpl.kt @@ -24,7 +24,6 @@ import android.app.ActivityOptions import android.content.ComponentName import android.content.Context import android.content.Intent -import android.content.SharedPreferences import android.graphics.drawable.Drawable import android.graphics.drawable.LayerDrawable import android.service.controls.Control @@ -59,7 +58,10 @@ import com.android.systemui.dagger.qualifiers.Background import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.globalactions.GlobalActionsPopupMenu import com.android.systemui.plugins.ActivityStarter +import com.android.systemui.settings.UserFileManager +import com.android.systemui.settings.UserTracker import com.android.systemui.shade.ShadeController +import com.android.systemui.statusbar.policy.DeviceControlsControllerImpl import com.android.systemui.statusbar.policy.KeyguardStateController import com.android.systemui.util.concurrency.DelayableExecutor import dagger.Lazy @@ -76,13 +78,14 @@ class ControlsUiControllerImpl @Inject constructor ( @Main val uiExecutor: DelayableExecutor, @Background val bgExecutor: DelayableExecutor, val controlsListingController: Lazy<ControlsListingController>, - @Main val sharedPreferences: SharedPreferences, val controlActionCoordinator: ControlActionCoordinator, private val activityStarter: ActivityStarter, private val shadeController: ShadeController, private val iconCache: CustomIconCache, private val controlsMetricsLogger: ControlsMetricsLogger, - private val keyguardStateController: KeyguardStateController + private val keyguardStateController: KeyguardStateController, + private val userFileManager: UserFileManager, + private val userTracker: UserTracker, ) : ControlsUiController { companion object { @@ -110,6 +113,12 @@ class ControlsUiControllerImpl @Inject constructor ( private lateinit var onDismiss: Runnable private val popupThemedContext = ContextThemeWrapper(context, R.style.Control_ListPopupWindow) private var retainCache = false + private val sharedPreferences + get() = userFileManager.getSharedPreferences( + fileName = DeviceControlsControllerImpl.PREFS_CONTROLS_FILE, + mode = 0, + userId = userTracker.userId + ) private val collator = Collator.getInstance(context.resources.configuration.locales[0]) private val localeComparator = compareBy<SelectionItem, CharSequence>(collator) { diff --git a/packages/SystemUI/src/com/android/systemui/flags/Flags.kt b/packages/SystemUI/src/com/android/systemui/flags/Flags.kt index 40b5b0ac0e7d..7b1ba0d17b6f 100644 --- a/packages/SystemUI/src/com/android/systemui/flags/Flags.kt +++ b/packages/SystemUI/src/com/android/systemui/flags/Flags.kt @@ -230,7 +230,7 @@ object Flags { @JvmField val DREAM_MEDIA_TAP_TO_OPEN = UnreleasedFlag(906) // TODO(b/254513168): Tracking Bug - val UMO_SURFACE_RIPPLE = UnreleasedFlag(907) + @JvmField val UMO_SURFACE_RIPPLE = UnreleasedFlag(907) // 1000 - dock val SIMULATE_DOCK_THROUGH_CHARGING = ReleasedFlag(1000) @@ -326,6 +326,7 @@ object Flags { // 1700 - clipboard @JvmField val CLIPBOARD_OVERLAY_REFACTOR = UnreleasedFlag(1700) + @JvmField val CLIPBOARD_REMOTE_BEHAVIOR = UnreleasedFlag(1701) // 1800 - shade container @JvmField val LEAVE_SHADE_OPEN_FOR_BUGREPORT = UnreleasedFlag(1800, teamfood = true) diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/models/player/MediaViewHolder.kt b/packages/SystemUI/src/com/android/systemui/media/controls/models/player/MediaViewHolder.kt index 2511324a943e..a7f1b95555ba 100644 --- a/packages/SystemUI/src/com/android/systemui/media/controls/models/player/MediaViewHolder.kt +++ b/packages/SystemUI/src/com/android/systemui/media/controls/models/player/MediaViewHolder.kt @@ -26,6 +26,7 @@ import android.widget.TextView import androidx.constraintlayout.widget.Barrier import com.android.systemui.R import com.android.systemui.media.controls.models.GutsViewHolder +import com.android.systemui.ripple.MultiRippleView import com.android.systemui.util.animation.TransitionLayout private const val TAG = "MediaViewHolder" @@ -36,6 +37,7 @@ class MediaViewHolder constructor(itemView: View) { // Player information val albumView = itemView.requireViewById<ImageView>(R.id.album_art) + val multiRippleView = itemView.requireViewById<MultiRippleView>(R.id.touch_ripple_view) val appIcon = itemView.requireViewById<ImageView>(R.id.icon) val titleText = itemView.requireViewById<TextView>(R.id.header_title) val artistText = itemView.requireViewById<TextView>(R.id.header_artist) diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/ui/ColorSchemeTransition.kt b/packages/SystemUI/src/com/android/systemui/media/controls/ui/ColorSchemeTransition.kt index 61ef2f1838e7..918417fcd9a9 100644 --- a/packages/SystemUI/src/com/android/systemui/media/controls/ui/ColorSchemeTransition.kt +++ b/packages/SystemUI/src/com/android/systemui/media/controls/ui/ColorSchemeTransition.kt @@ -29,6 +29,7 @@ import com.android.internal.annotations.VisibleForTesting import com.android.settingslib.Utils import com.android.systemui.media.controls.models.player.MediaViewHolder import com.android.systemui.monet.ColorScheme +import com.android.systemui.ripple.MultiRippleController /** * A [ColorTransition] is an object that updates the colors of views each time [updateColorScheme] @@ -100,12 +101,14 @@ class ColorSchemeTransition internal constructor( private val context: Context, private val mediaViewHolder: MediaViewHolder, + private val multiRippleController: MultiRippleController, animatingColorTransitionFactory: AnimatingColorTransitionFactory ) { constructor( context: Context, - mediaViewHolder: MediaViewHolder - ) : this(context, mediaViewHolder, ::AnimatingColorTransition) + mediaViewHolder: MediaViewHolder, + multiRippleController: MultiRippleController, + ) : this(context, mediaViewHolder, multiRippleController, ::AnimatingColorTransition) val bgColor = context.getColor(com.android.systemui.R.color.material_dynamic_secondary95) val surfaceColor = @@ -125,6 +128,7 @@ internal constructor( val accentColorList = ColorStateList.valueOf(accentPrimary) mediaViewHolder.actionPlayPause.backgroundTintList = accentColorList mediaViewHolder.gutsViewHolder.setAccentPrimaryColor(accentPrimary) + multiRippleController.updateColor(accentPrimary) } val accentSecondary = diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/ui/MediaControlPanel.java b/packages/SystemUI/src/com/android/systemui/media/controls/ui/MediaControlPanel.java index 18ecadb28cf3..5b14cf34827a 100644 --- a/packages/SystemUI/src/com/android/systemui/media/controls/ui/MediaControlPanel.java +++ b/packages/SystemUI/src/com/android/systemui/media/controls/ui/MediaControlPanel.java @@ -76,6 +76,8 @@ import com.android.systemui.bluetooth.BroadcastDialogController; import com.android.systemui.broadcast.BroadcastSender; import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.dagger.qualifiers.Main; +import com.android.systemui.flags.FeatureFlags; +import com.android.systemui.flags.Flags; import com.android.systemui.media.controls.models.GutsViewHolder; import com.android.systemui.media.controls.models.player.MediaAction; import com.android.systemui.media.controls.models.player.MediaButton; @@ -95,6 +97,10 @@ import com.android.systemui.monet.ColorScheme; import com.android.systemui.monet.Style; import com.android.systemui.plugins.ActivityStarter; import com.android.systemui.plugins.FalsingManager; +import com.android.systemui.ripple.MultiRippleController; +import com.android.systemui.ripple.RippleAnimation; +import com.android.systemui.ripple.RippleAnimationConfig; +import com.android.systemui.ripple.RippleShader; import com.android.systemui.shared.system.SysUiStatsLog; import com.android.systemui.statusbar.NotificationLockscreenUserManager; import com.android.systemui.statusbar.policy.KeyguardStateController; @@ -209,6 +215,8 @@ public class MediaControlPanel { private boolean mIsCurrentBroadcastedApp = false; private boolean mShowBroadcastDialogButton = false; private String mSwitchBroadcastApp; + private MultiRippleController mMultiRippleController; + private FeatureFlags mFeatureFlags; /** * Initialize a new control panel @@ -236,7 +244,9 @@ public class MediaControlPanel { KeyguardStateController keyguardStateController, ActivityIntentHelper activityIntentHelper, NotificationLockscreenUserManager lockscreenUserManager, - BroadcastDialogController broadcastDialogController) { + BroadcastDialogController broadcastDialogController, + FeatureFlags featureFlags + ) { mContext = context; mBackgroundExecutor = backgroundExecutor; mMainExecutor = mainExecutor; @@ -262,6 +272,8 @@ public class MediaControlPanel { logSmartspaceCardReported(SMARTSPACE_CARD_CLICK_EVENT); return Unit.INSTANCE; }); + + mFeatureFlags = featureFlags; } /** @@ -381,7 +393,9 @@ public class MediaControlPanel { AnimatorSet exit = loadAnimator(R.anim.media_metadata_exit, Interpolators.EMPHASIZED_ACCELERATE, titleText, artistText); - mColorSchemeTransition = new ColorSchemeTransition(mContext, mMediaViewHolder); + mMultiRippleController = new MultiRippleController(vh.getMultiRippleView()); + mColorSchemeTransition = new ColorSchemeTransition( + mContext, mMediaViewHolder, mMultiRippleController); mMetadataAnimationHandler = new MetadataAnimationHandler(exit, enter); } @@ -982,6 +996,9 @@ public class MediaControlPanel { mLogger.logTapAction(button.getId(), mUid, mPackageName, mInstanceId); logSmartspaceCardReported(SMARTSPACE_CARD_CLICK_EVENT); action.run(); + if (mFeatureFlags.isEnabled(Flags.UMO_SURFACE_RIPPLE)) { + mMultiRippleController.play(createTouchRippleAnimation(button)); + } if (icon instanceof Animatable) { ((Animatable) icon).start(); @@ -997,6 +1014,26 @@ public class MediaControlPanel { } } + private RippleAnimation createTouchRippleAnimation(ImageButton button) { + float maxSize = mMediaViewHolder.getMultiRippleView().getWidth() * 2; + return new RippleAnimation( + new RippleAnimationConfig( + RippleShader.RippleShape.CIRCLE, + /* duration= */ 1500L, + /* centerX= */ button.getX() + button.getWidth() * 0.5f, + /* centerY= */ button.getY() + button.getHeight() * 0.5f, + /* maxWidth= */ maxSize, + /* maxHeight= */ maxSize, + /* pixelDensity= */ getContext().getResources().getDisplayMetrics().density, + mColorSchemeTransition.getAccentPrimary().getTargetColor(), + /* opacity= */ 100, + /* shouldFillRipple= */ false, + /* sparkleStrength= */ 0f, + /* shouldDistort= */ false + ) + ); + } + private void clearButton(final ImageButton button) { button.setImageDrawable(null); button.setContentDescription(null); diff --git a/packages/SystemUI/src/com/android/systemui/media/taptotransfer/receiver/MediaTttChipControllerReceiver.kt b/packages/SystemUI/src/com/android/systemui/media/taptotransfer/receiver/MediaTttChipControllerReceiver.kt index 7dd9fb4b9cd5..662d059aedcd 100644 --- a/packages/SystemUI/src/com/android/systemui/media/taptotransfer/receiver/MediaTttChipControllerReceiver.kt +++ b/packages/SystemUI/src/com/android/systemui/media/taptotransfer/receiver/MediaTttChipControllerReceiver.kt @@ -189,7 +189,7 @@ class MediaTttChipControllerReceiver @Inject constructor( } private fun startRipple(rippleView: ReceiverChipRippleView) { - if (rippleView.rippleInProgress) { + if (rippleView.rippleInProgress()) { // Skip if ripple is still playing return } diff --git a/packages/SystemUI/src/com/android/systemui/ripple/MultiRippleController.kt b/packages/SystemUI/src/com/android/systemui/ripple/MultiRippleController.kt new file mode 100644 index 000000000000..48df15c78ea5 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/ripple/MultiRippleController.kt @@ -0,0 +1,47 @@ +/* + * Copyright (C) 2022 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.ripple + +import androidx.annotation.VisibleForTesting + +/** Controller that handles playing [RippleAnimation]. */ +class MultiRippleController(private val multipleRippleView: MultiRippleView) { + + companion object { + /** Max number of ripple animations at a time. */ + @VisibleForTesting const val MAX_RIPPLE_NUMBER = 10 + } + + /** Updates all the ripple colors during the animation. */ + fun updateColor(color: Int) { + multipleRippleView.ripples.forEach { anim -> anim.updateColor(color) } + } + + fun play(rippleAnimation: RippleAnimation) { + if (multipleRippleView.ripples.size >= MAX_RIPPLE_NUMBER) { + return + } + + multipleRippleView.ripples.add(rippleAnimation) + + // Remove ripple once the animation is done + rippleAnimation.play { multipleRippleView.ripples.remove(rippleAnimation) } + + // Trigger drawing + multipleRippleView.invalidate() + } +} diff --git a/packages/SystemUI/src/com/android/systemui/ripple/MultiRippleView.kt b/packages/SystemUI/src/com/android/systemui/ripple/MultiRippleView.kt new file mode 100644 index 000000000000..c7f0b7e0056e --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/ripple/MultiRippleView.kt @@ -0,0 +1,67 @@ +/* + * Copyright (C) 2022 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.ripple + +import android.content.Context +import android.graphics.Canvas +import android.graphics.Paint +import android.util.AttributeSet +import android.util.Log +import android.view.View + +/** + * A view that allows multiple ripples to play. + * + * Use [MultiRippleController] to play ripple animations. + */ +class MultiRippleView(context: Context?, attrs: AttributeSet?) : View(context, attrs) { + + internal val ripples = ArrayList<RippleAnimation>() + private val ripplePaint = Paint() + private var isWarningLogged = false + + companion object { + const val TAG = "MultiRippleView" + } + + override fun onDraw(canvas: Canvas?) { + if (canvas == null || !canvas.isHardwareAccelerated) { + // Drawing with the ripple shader requires hardware acceleration, so skip + // if it's unsupported. + if (!isWarningLogged) { + // Only log once to not spam. + Log.w( + TAG, + "Can't draw ripple shader. $canvas does not support hardware acceleration." + ) + isWarningLogged = true + } + return + } + + var shouldInvalidate = false + + ripples.forEach { anim -> + ripplePaint.shader = anim.rippleShader + canvas.drawPaint(ripplePaint) + + shouldInvalidate = shouldInvalidate || anim.isPlaying() + } + + if (shouldInvalidate) invalidate() + } +} diff --git a/packages/SystemUI/src/com/android/systemui/ripple/RippleAnimation.kt b/packages/SystemUI/src/com/android/systemui/ripple/RippleAnimation.kt new file mode 100644 index 000000000000..aca9e254e4c3 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/ripple/RippleAnimation.kt @@ -0,0 +1,74 @@ +/* + * Copyright (C) 2022 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.ripple + +import android.animation.Animator +import android.animation.AnimatorListenerAdapter +import android.animation.ValueAnimator +import androidx.core.graphics.ColorUtils + +/** A single ripple animation. */ +class RippleAnimation(private val config: RippleAnimationConfig) { + internal val rippleShader: RippleShader = RippleShader(config.rippleShape) + private val animator: ValueAnimator = ValueAnimator.ofFloat(0f, 1f) + + init { + applyConfigToShader() + } + + /** Updates the ripple color during the animation. */ + fun updateColor(color: Int) { + config.apply { config.color = color } + applyConfigToShader() + } + + @JvmOverloads + fun play(onAnimationEnd: Runnable? = null) { + if (isPlaying()) { + return // Ignore if ripple effect is already playing + } + + animator.duration = config.duration + animator.addUpdateListener { updateListener -> + val now = updateListener.currentPlayTime + val progress = updateListener.animatedValue as Float + rippleShader.progress = progress + rippleShader.distortionStrength = if (config.shouldDistort) 1 - progress else 0f + rippleShader.time = now.toFloat() + } + animator.addListener( + object : AnimatorListenerAdapter() { + override fun onAnimationEnd(animation: Animator?) { + onAnimationEnd?.run() + } + } + ) + animator.start() + } + + /** Indicates whether the animation is playing. */ + fun isPlaying(): Boolean = animator.isRunning + + private fun applyConfigToShader() { + rippleShader.setCenter(config.centerX, config.centerY) + rippleShader.setMaxSize(config.maxWidth, config.maxHeight) + rippleShader.rippleFill = config.shouldFillRipple + rippleShader.pixelDensity = config.pixelDensity + rippleShader.color = ColorUtils.setAlphaComponent(config.color, config.opacity) + rippleShader.sparkleStrength = config.sparkleStrength + } +} diff --git a/packages/SystemUI/src/com/android/systemui/ripple/RippleAnimationConfig.kt b/packages/SystemUI/src/com/android/systemui/ripple/RippleAnimationConfig.kt new file mode 100644 index 000000000000..88122544c7cd --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/ripple/RippleAnimationConfig.kt @@ -0,0 +1,32 @@ +package com.android.systemui.ripple + +import android.graphics.Color + +/** + * A struct that holds the ripple animation configurations. + * + * <p>This configuration is designed to play a SINGLE animation. Do not reuse or modify the + * configuration parameters to play different animations, unless the value has to change within the + * single animation (e.g. Change color or opacity during the animation). Note that this data class + * is pulled out to make the [RippleAnimation] constructor succinct. + */ +data class RippleAnimationConfig( + val rippleShape: RippleShader.RippleShape = RippleShader.RippleShape.CIRCLE, + val duration: Long = 0L, + val centerX: Float = 0f, + val centerY: Float = 0f, + val maxWidth: Float = 0f, + val maxHeight: Float = 0f, + val pixelDensity: Float = 1f, + var color: Int = Color.WHITE, + val opacity: Int = RIPPLE_DEFAULT_ALPHA, + val shouldFillRipple: Boolean = false, + val sparkleStrength: Float = RIPPLE_SPARKLE_STRENGTH, + val shouldDistort: Boolean = true +) { + companion object { + const val RIPPLE_SPARKLE_STRENGTH: Float = 0.3f + const val RIPPLE_DEFAULT_COLOR: Int = 0xffffffff.toInt() + const val RIPPLE_DEFAULT_ALPHA: Int = 45 // full opacity is 255. + } +} diff --git a/packages/SystemUI/src/com/android/systemui/ripple/RippleView.kt b/packages/SystemUI/src/com/android/systemui/ripple/RippleView.kt index 1e51ffa292b7..a6d79303962f 100644 --- a/packages/SystemUI/src/com/android/systemui/ripple/RippleView.kt +++ b/packages/SystemUI/src/com/android/systemui/ripple/RippleView.kt @@ -28,10 +28,6 @@ import android.view.View import androidx.core.graphics.ColorUtils import com.android.systemui.ripple.RippleShader.RippleShape -private const val RIPPLE_SPARKLE_STRENGTH: Float = 0.3f -private const val RIPPLE_DEFAULT_COLOR: Int = 0xffffffff.toInt() -const val RIPPLE_DEFAULT_ALPHA: Int = 45 - /** * A generic expanding ripple effect. * @@ -45,8 +41,8 @@ open class RippleView(context: Context?, attrs: AttributeSet?) : View(context, a private set private val ripplePaint = Paint() + private val animator = ValueAnimator.ofFloat(0f, 1f) - var rippleInProgress: Boolean = false var duration: Long = 1750 private var maxWidth: Float = 0.0f @@ -80,9 +76,9 @@ open class RippleView(context: Context?, attrs: AttributeSet?) : View(context, a this.rippleShape = rippleShape rippleShader = RippleShader(rippleShape) - rippleShader.color = RIPPLE_DEFAULT_COLOR + rippleShader.color = RippleAnimationConfig.RIPPLE_DEFAULT_COLOR rippleShader.progress = 0f - rippleShader.sparkleStrength = RIPPLE_SPARKLE_STRENGTH + rippleShader.sparkleStrength = RippleAnimationConfig.RIPPLE_SPARKLE_STRENGTH rippleShader.pixelDensity = resources.displayMetrics.density ripplePaint.shader = rippleShader @@ -90,10 +86,9 @@ open class RippleView(context: Context?, attrs: AttributeSet?) : View(context, a @JvmOverloads fun startRipple(onAnimationEnd: Runnable? = null) { - if (rippleInProgress) { + if (animator.isRunning) { return // Ignore if ripple effect is already playing } - val animator = ValueAnimator.ofFloat(0f, 1f) animator.duration = duration animator.addUpdateListener { updateListener -> val now = updateListener.currentPlayTime @@ -105,19 +100,17 @@ open class RippleView(context: Context?, attrs: AttributeSet?) : View(context, a } animator.addListener(object : AnimatorListenerAdapter() { override fun onAnimationEnd(animation: Animator?) { - rippleInProgress = false onAnimationEnd?.run() } }) animator.start() - rippleInProgress = true } /** Set the color to be used for the ripple. * * The alpha value of the color will be applied to the ripple. The alpha range is [0-100]. */ - fun setColor(color: Int, alpha: Int = RIPPLE_DEFAULT_ALPHA) { + fun setColor(color: Int, alpha: Int = RippleAnimationConfig.RIPPLE_DEFAULT_ALPHA) { rippleShader.color = ColorUtils.setAlphaComponent(color, alpha) } @@ -137,6 +130,9 @@ open class RippleView(context: Context?, attrs: AttributeSet?) : View(context, a rippleShader.sparkleStrength = strength } + /** Indicates whether the ripple animation is playing. */ + fun rippleInProgress(): Boolean = animator.isRunning + override fun onDraw(canvas: Canvas?) { if (canvas == null || !canvas.isHardwareAccelerated) { // Drawing with the ripple shader requires hardware acceleration, so skip diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/ImageExporter.java b/packages/SystemUI/src/com/android/systemui/screenshot/ImageExporter.java index e3658defc52a..c8c133774766 100644 --- a/packages/SystemUI/src/com/android/systemui/screenshot/ImageExporter.java +++ b/packages/SystemUI/src/com/android/systemui/screenshot/ImageExporter.java @@ -38,6 +38,8 @@ import androidx.concurrent.futures.CallbackToFutureAdapter; import androidx.exifinterface.media.ExifInterface; import com.android.internal.annotations.VisibleForTesting; +import com.android.systemui.flags.FeatureFlags; +import com.android.systemui.flags.Flags; import com.google.common.util.concurrent.ListenableFuture; @@ -85,10 +87,12 @@ class ImageExporter { private final ContentResolver mResolver; private CompressFormat mCompressFormat = CompressFormat.PNG; private int mQuality = 100; + private final FeatureFlags mFlags; @Inject - ImageExporter(ContentResolver resolver) { + ImageExporter(ContentResolver resolver, FeatureFlags flags) { mResolver = resolver; + mFlags = flags; } /** @@ -161,7 +165,7 @@ class ImageExporter { ZonedDateTime captureTime, UserHandle owner) { final Task task = new Task(mResolver, requestId, bitmap, captureTime, mCompressFormat, - mQuality, /* publish */ true, owner); + mQuality, /* publish */ true, owner, mFlags); return CallbackToFutureAdapter.getFuture( (completer) -> { @@ -209,9 +213,11 @@ class ImageExporter { private final UserHandle mOwner; private final String mFileName; private final boolean mPublish; + private final FeatureFlags mFlags; Task(ContentResolver resolver, UUID requestId, Bitmap bitmap, ZonedDateTime captureTime, - CompressFormat format, int quality, boolean publish, UserHandle owner) { + CompressFormat format, int quality, boolean publish, UserHandle owner, + FeatureFlags flags) { mResolver = resolver; mRequestId = requestId; mBitmap = bitmap; @@ -221,6 +227,7 @@ class ImageExporter { mOwner = owner; mFileName = createFilename(mCaptureTime, mFormat); mPublish = publish; + mFlags = flags; } public Result execute() throws ImageExportException, InterruptedException { @@ -234,7 +241,7 @@ class ImageExporter { start = Instant.now(); } - uri = createEntry(mResolver, mFormat, mCaptureTime, mFileName, mOwner); + uri = createEntry(mResolver, mFormat, mCaptureTime, mFileName, mOwner, mFlags); throwIfInterrupted(); writeImage(mResolver, mBitmap, mFormat, mQuality, uri); @@ -278,13 +285,15 @@ class ImageExporter { } private static Uri createEntry(ContentResolver resolver, CompressFormat format, - ZonedDateTime time, String fileName, UserHandle owner) throws ImageExportException { + ZonedDateTime time, String fileName, UserHandle owner, FeatureFlags flags) + throws ImageExportException { Trace.beginSection("ImageExporter_createEntry"); try { final ContentValues values = createMetadata(time, format, fileName); Uri baseUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; - if (UserHandle.myUserId() != owner.getIdentifier()) { + if (flags.isEnabled(Flags.SCREENSHOT_WORK_PROFILE_POLICY) + && UserHandle.myUserId() != owner.getIdentifier()) { baseUri = ContentProvider.maybeAddUserId(baseUri, owner.getIdentifier()); } Uri uri = resolver.insert(baseUri, values); diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotController.java b/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotController.java index d524a356a323..9b5295d1bb3d 100644 --- a/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotController.java +++ b/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotController.java @@ -1043,8 +1043,13 @@ public class ScreenshotController { } private boolean isUserSetupComplete(UserHandle owner) { - return Settings.Secure.getInt(mContext.createContextAsUser(owner, 0) - .getContentResolver(), SETTINGS_SECURE_USER_SETUP_COMPLETE, 0) == 1; + if (mFlags.isEnabled(SCREENSHOT_WORK_PROFILE_POLICY)) { + return Settings.Secure.getInt(mContext.createContextAsUser(owner, 0) + .getContentResolver(), SETTINGS_SECURE_USER_SETUP_COMPLETE, 0) == 1; + } else { + return Settings.Secure.getInt(mContext.getContentResolver(), + SETTINGS_SECURE_USER_SETUP_COMPLETE, 0) == 1; + } } /** diff --git a/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java b/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java index d584fa9895fd..24501972e375 100644 --- a/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java +++ b/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java @@ -33,7 +33,6 @@ import static com.android.systemui.classifier.Classifier.GENERIC; import static com.android.systemui.classifier.Classifier.QS_COLLAPSE; import static com.android.systemui.classifier.Classifier.QUICK_SETTINGS; import static com.android.systemui.classifier.Classifier.UNLOCK; -import static com.android.systemui.shade.NotificationPanelView.DEBUG; import static com.android.systemui.shade.ShadeExpansionStateManagerKt.STATE_CLOSED; import static com.android.systemui.shade.ShadeExpansionStateManagerKt.STATE_OPEN; import static com.android.systemui.shade.ShadeExpansionStateManagerKt.STATE_OPENING; @@ -42,7 +41,6 @@ import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_Q import static com.android.systemui.statusbar.StatusBarState.KEYGUARD; import static com.android.systemui.statusbar.StatusBarState.SHADE; import static com.android.systemui.statusbar.VibratorHelper.TOUCH_VIBRATION_ATTRIBUTES; -import static com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout.ROWS_ALL; import static com.android.systemui.statusbar.notification.stack.StackStateAnimator.ANIMATION_DURATION_FOLD_TO_AOD; import static com.android.systemui.util.DumpUtilsKt.asIndenting; @@ -52,10 +50,10 @@ import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.ValueAnimator; import android.annotation.NonNull; +import android.annotation.Nullable; import android.app.Fragment; import android.app.StatusBarManager; import android.content.ContentResolver; -import android.content.res.Configuration; import android.content.res.Resources; import android.database.ContentObserver; import android.graphics.Canvas; @@ -103,7 +101,6 @@ import android.view.accessibility.AccessibilityNodeInfo; import android.view.animation.Interpolator; import android.widget.FrameLayout; -import androidx.annotation.Nullable; import androidx.constraintlayout.widget.ConstraintSet; import com.android.internal.annotations.VisibleForTesting; @@ -174,16 +171,13 @@ import com.android.systemui.statusbar.RemoteInputController; import com.android.systemui.statusbar.StatusBarState; import com.android.systemui.statusbar.SysuiStatusBarStateController; import com.android.systemui.statusbar.VibratorHelper; -import com.android.systemui.statusbar.events.PrivacyDotViewController; import com.android.systemui.statusbar.notification.AnimatableProperty; import com.android.systemui.statusbar.notification.ConversationNotificationManager; import com.android.systemui.statusbar.notification.DynamicPrivacyController; import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator; import com.android.systemui.statusbar.notification.PropertyAnimator; import com.android.systemui.statusbar.notification.ViewGroupFadeHelper; -import com.android.systemui.statusbar.notification.collection.ListEntry; import com.android.systemui.statusbar.notification.collection.NotificationEntry; -import com.android.systemui.statusbar.notification.collection.render.ShadeViewManager; import com.android.systemui.statusbar.notification.row.ActivatableNotificationView; import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow; import com.android.systemui.statusbar.notification.row.ExpandableView; @@ -209,7 +203,6 @@ import com.android.systemui.statusbar.phone.KeyguardStatusBarView; import com.android.systemui.statusbar.phone.KeyguardStatusBarViewController; import com.android.systemui.statusbar.phone.LockscreenGestureLogger; import com.android.systemui.statusbar.phone.LockscreenGestureLogger.LockscreenUiEvent; -import com.android.systemui.statusbar.phone.NotificationIconAreaController; import com.android.systemui.statusbar.phone.PhoneStatusBarView; import com.android.systemui.statusbar.phone.ScreenOffAnimationController; import com.android.systemui.statusbar.phone.ScrimController; @@ -256,28 +249,15 @@ public final class NotificationPanelViewController { private static final boolean DEBUG_LOGCAT = Compile.IS_DEBUG && Log.isLoggable(TAG, Log.DEBUG); private static final boolean SPEW_LOGCAT = Compile.IS_DEBUG && Log.isLoggable(TAG, Log.VERBOSE); private static final boolean DEBUG_DRAWABLE = false; - private static final VibrationEffect ADDITIONAL_TAP_REQUIRED_VIBRATION_EFFECT = VibrationEffect.get(VibrationEffect.EFFECT_STRENGTH_MEDIUM, false); - - /** - * The parallax amount of the quick settings translation when dragging down the panel - */ + /** The parallax amount of the quick settings translation when dragging down the panel. */ private static final float QS_PARALLAX_AMOUNT = 0.175f; - - /** - * Fling expanding QS. - */ + /** Fling expanding QS. */ public static final int FLING_EXPAND = 0; - - /** - * Fling collapsing QS, potentially stopping when QS becomes QQS. - */ + /** Fling collapsing QS, potentially stopping when QS becomes QQS. */ private static final int FLING_COLLAPSE = 1; - - /** - * Fling until QS is completely hidden. - */ + /** Fling until QS is completely hidden. */ private static final int FLING_HIDE = 2; private static final long ANIMATION_DELAY_ICON_FADE_IN = ActivityLaunchAnimator.TIMINGS.getTotalDuration() @@ -291,6 +271,18 @@ public final class NotificationPanelViewController { * when flinging. A low value will make it that most flings will reach the maximum overshoot. */ private static final float FACTOR_OF_HIGH_VELOCITY_FOR_MAX_OVERSHOOT = 0.5f; + /** + * Maximum time before which we will expand the panel even for slow motions when getting a + * touch passed over from launcher. + */ + private static final int MAX_TIME_TO_OPEN_WHEN_FLINGING_FROM_LAUNCHER = 300; + private static final int MAX_DOWN_EVENT_BUFFER_SIZE = 50; + private static final String COUNTER_PANEL_OPEN = "panel_open"; + private static final String COUNTER_PANEL_OPEN_QS = "panel_open_qs"; + private static final String COUNTER_PANEL_OPEN_PEEK = "panel_open_peek"; + private static final Rect M_DUMMY_DIRTY_RECT = new Rect(0, 0, 1, 1); + private static final Rect EMPTY_RECT = new Rect(); + private final StatusBarTouchableRegionManager mStatusBarTouchableRegionManager; private final Resources mResources; private final KeyguardStateController mKeyguardStateController; @@ -299,49 +291,24 @@ public final class NotificationPanelViewController { private final LockscreenGestureLogger mLockscreenGestureLogger; private final SystemClock mSystemClock; private final ShadeLogger mShadeLog; - private final DozeParameters mDozeParameters; - private final OnHeightChangedListener mOnHeightChangedListener = new OnHeightChangedListener(); - private final Runnable mCollapseExpandAction = new CollapseExpandAction(); - private final OnOverscrollTopChangedListener - mOnOverscrollTopChangedListener = - new OnOverscrollTopChangedListener(); - private final OnEmptySpaceClickListener - mOnEmptySpaceClickListener = - new OnEmptySpaceClickListener(); - private final MyOnHeadsUpChangedListener - mOnHeadsUpChangedListener = - new MyOnHeadsUpChangedListener(); - private final HeightListener mHeightListener = new HeightListener(); + private final Runnable mCollapseExpandAction = this::collapseOrExpand; + private final NsslOverscrollTopChangedListener mOnOverscrollTopChangedListener = + new NsslOverscrollTopChangedListener(); + private final NotificationStackScrollLayout.OnEmptySpaceClickListener + mOnEmptySpaceClickListener = (x, y) -> onEmptySpaceClick(); + private final ShadeHeadsUpChangedListener mOnHeadsUpChangedListener = + new ShadeHeadsUpChangedListener(); + private final QS.HeightListener mHeightListener = this::onQsHeightChanged; private final ConfigurationListener mConfigurationListener = new ConfigurationListener(); private final SettingsChangeObserver mSettingsChangeObserver; - - @VisibleForTesting - final StatusBarStateListener mStatusBarStateListener = - new StatusBarStateListener(); + private final StatusBarStateListener mStatusBarStateListener = new StatusBarStateListener(); private final NotificationPanelView mView; private final VibratorHelper mVibratorHelper; private final MetricsLogger mMetricsLogger; private final ConfigurationController mConfigurationController; private final Provider<FlingAnimationUtils.Builder> mFlingAnimationUtilsBuilder; private final NotificationStackScrollLayoutController mNotificationStackScrollLayoutController; - private final NotificationIconAreaController mNotificationIconAreaController; - - /** - * Maximum time before which we will expand the panel even for slow motions when getting a - * touch passed over from launcher. - */ - private static final int MAX_TIME_TO_OPEN_WHEN_FLINGING_FROM_LAUNCHER = 300; - - private static final int MAX_DOWN_EVENT_BUFFER_SIZE = 50; - - private static final String COUNTER_PANEL_OPEN = "panel_open"; - private static final String COUNTER_PANEL_OPEN_QS = "panel_open_qs"; - private static final String COUNTER_PANEL_OPEN_PEEK = "panel_open_peek"; - - private static final Rect M_DUMMY_DIRTY_RECT = new Rect(0, 0, 1, 1); - private static final Rect EMPTY_RECT = new Rect(); - private final InteractionJankMonitor mInteractionJankMonitor; private final LayoutInflater mLayoutInflater; private final FeatureFlags mFeatureFlags; @@ -361,9 +328,7 @@ public final class NotificationPanelViewController { private final KeyguardStatusBarViewComponent.Factory mKeyguardStatusBarViewComponentFactory; private final FragmentService mFragmentService; private final ScrimController mScrimController; - private final PrivacyDotViewController mPrivacyDotViewController; private final NotificationRemoteInputManager mRemoteInputManager; - private final LockscreenShadeTransitionController mLockscreenShadeTransitionController; private final ShadeTransitionController mShadeTransitionController; private final TapAgainViewController mTapAgainViewController; @@ -380,6 +345,11 @@ public final class NotificationPanelViewController { private final Interpolator mBounceInterpolator; private final NotificationShadeWindowController mNotificationShadeWindowController; private final ShadeExpansionStateManager mShadeExpansionStateManager; + private final QS.ScrollListener mQsScrollListener = this::onQsPanelScrollChanged; + private final FalsingTapListener mFalsingTapListener = this::falsingAdditionalTapRequired; + private final FragmentListener mQsFragmentListener = new QsFragmentListener(); + private final AccessibilityDelegate mAccessibilityDelegate = new ShadeAccessibilityDelegate(); + private long mDownTime; private boolean mTouchSlopExceededBeforeDown; private boolean mIsLaunchAnimationRunning; @@ -401,13 +371,11 @@ public final class NotificationPanelViewController { private float mKeyguardNotificationTopPadding; /** Current max allowed keyguard notifications determined by measuring the panel. */ private int mMaxAllowedKeyguardNotifications; - private KeyguardQsUserSwitchController mKeyguardQsUserSwitchController; private KeyguardUserSwitcherController mKeyguardUserSwitcherController; private KeyguardStatusBarView mKeyguardStatusBar; private KeyguardStatusBarViewController mKeyguardStatusBarViewController; - @VisibleForTesting - QS mQs; + private QS mQs; private FrameLayout mQsFrame; private final QsFrameTranslateController mQsFrameTranslateController; private KeyguardStatusViewController mKeyguardStatusViewController; @@ -420,18 +388,11 @@ public final class NotificationPanelViewController { private float mQuickQsHeaderHeight; private final ScreenOffAnimationController mScreenOffAnimationController; private final UnlockedScreenOffAnimationController mUnlockedScreenOffAnimationController; - private int mQsTrackingPointer; private VelocityTracker mQsVelocityTracker; private boolean mQsTracking; - - /** - * If set, the ongoing touch gesture might both trigger the expansion in {@link - * NotificationPanelView} and - * the expansion for quick settings. - */ + /** Whether the ongoing gesture might both trigger the expansion in both the view and QS. */ private boolean mConflictingQsExpansionGesture; - private boolean mPanelExpanded; /** @@ -486,11 +447,9 @@ public final class NotificationPanelViewController { * Used for split shade, two finger gesture as well as accessibility shortcut to QS. * It needs to be set when movement starts as it resets at the end of expansion/collapse. */ - @VisibleForTesting - boolean mQsExpandImmediate; + private boolean mQsExpandImmediate; private boolean mTwoFingerQsExpandPossible; private String mHeaderDebugInfo; - /** * If we are in a panel collapsing motion, we reset scrollY of our scroll view but still * need to take this into account in our panel height calculation. @@ -498,7 +457,6 @@ public final class NotificationPanelViewController { private boolean mQsAnimatorExpand; private boolean mIsLaunchTransitionFinished; private ValueAnimator mQsSizeChangeAnimator; - private boolean mQsScrimEnabled = true; private boolean mQsTouchAboveFalsingThreshold; private int mQsFalsingThreshold; @@ -516,39 +474,27 @@ public final class NotificationPanelViewController { private final FalsingManager mFalsingManager; private final FalsingCollector mFalsingCollector; - private final Runnable mHeadsUpExistenceChangedRunnable = () -> { - setHeadsUpAnimatingAway(false); - updatePanelExpansionAndVisibility(); - }; private boolean mShowIconsWhenExpanded; private int mIndicationBottomPadding; private int mAmbientIndicationBottomPadding; + /** Whether the notifications are displayed full width (no margins on the side). */ private boolean mIsFullWidth; private boolean mBlockingExpansionForCurrentTouch; + // Following variables maintain state of events when input focus transfer may occur. + private boolean mExpectingSynthesizedDown; + private boolean mLastEventSynthesizedDown; - /** - * Following variables maintain state of events when input focus transfer may occur. - */ - private boolean mExpectingSynthesizedDown; // expecting to see synthesized DOWN event - private boolean mLastEventSynthesizedDown; // last event was synthesized DOWN event - - /** - * Current dark amount that follows regular interpolation curve of animation. - */ + /** Current dark amount that follows regular interpolation curve of animation. */ private float mInterpolatedDarkAmount; - /** * Dark amount that animates from 0 to 1 or vice-versa in linear manner, even if the * interpolation curve is different. */ private float mLinearDarkAmount; - private boolean mPulsing; private boolean mHideIconsDuringLaunchAnimation = true; private int mStackScrollerMeasuringPass; - /** - * Non-null if there's a heads-up notification that we're currently tracking the position of. - */ + /** Non-null if a heads-up notification's position is being tracked. */ @Nullable private ExpandableNotificationRow mTrackedHeadsUpNotification; private final ArrayList<Consumer<ExpandableNotificationRow>> @@ -578,8 +524,9 @@ public final class NotificationPanelViewController { private final CommandQueue mCommandQueue; private final UserManager mUserManager; private final MediaDataManager mMediaDataManager; + @PanelState + private int mCurrentPanelState = STATE_CLOSED; private final SysUiState mSysUiState; - private final NotificationShadeDepthController mDepthController; private final NavigationBarController mNavigationBarController; private final int mDisplayId; @@ -589,6 +536,7 @@ public final class NotificationPanelViewController { private boolean mHeadsUpPinnedMode; private boolean mAllowExpandForSmallExpansion; private Runnable mExpandAfterLayoutRunnable; + private Runnable mHideExpandedRunnable; /** * The padding between the start of notifications and the qs boundary on the lockscreen. @@ -596,94 +544,51 @@ public final class NotificationPanelViewController { * qs boundary to be padded. */ private int mLockscreenNotificationQSPadding; - /** * The amount of progress we are currently in if we're transitioning to the full shade. * 0.0f means we're not transitioning yet, while 1 means we're all the way in the full * shade. This value can also go beyond 1.1 when we're overshooting! */ private float mTransitioningToFullShadeProgress; - /** * Position of the qs bottom during the full shade transition. This is needed as the toppadding * can change during state changes, which makes it much harder to do animations */ private int mTransitionToFullShadeQSPosition; - - /** - * Distance that the full shade transition takes in order for qs to fully transition to the - * shade. - */ + /** Distance a full shade transition takes in order for qs to fully transition to the shade. */ private int mDistanceForQSFullShadeTransition; - - /** - * The translation amount for QS for the full shade transition - */ + /** The translation amount for QS for the full shade transition. */ private float mQsTranslationForFullShadeTransition; - /** - * The maximum overshoot allowed for the top padding for the full shade transition - */ + /** The maximum overshoot allowed for the top padding for the full shade transition. */ private int mMaxOverscrollAmountForPulse; - - /** - * Should we animate the next bounds update - */ + /** Should we animate the next bounds update. */ private boolean mAnimateNextNotificationBounds; - /** - * The delay for the next bounds animation - */ + /** The delay for the next bounds animation. */ private long mNotificationBoundsAnimationDelay; - - /** - * The duration of the notification bounds animation - */ + /** The duration of the notification bounds animation. */ private long mNotificationBoundsAnimationDuration; - /** - * Is this a collapse that started on the panel where we should allow the panel to intercept - */ + /** Whether a collapse that started on the panel should allow the panel to intercept. */ private boolean mIsPanelCollapseOnQQS; - private boolean mAnimatingQS; - - /** - * The end bounds of a clipping animation. - */ + /** The end bounds of a clipping animation. */ private final Rect mQsClippingAnimationEndBounds = new Rect(); - - /** - * The animator for the qs clipping bounds. - */ + /** The animator for the qs clipping bounds. */ private ValueAnimator mQsClippingAnimation = null; - - /** - * Is the current animator resetting the qs translation. - */ + /** Whether the current animator is resetting the qs translation. */ private boolean mIsQsTranslationResetAnimator; - /** - * Is the current animator resetting the pulse expansion after a drag down - */ + /** Whether the current animator is resetting the pulse expansion after a drag down. */ private boolean mIsPulseExpansionResetAnimator; private final Rect mKeyguardStatusAreaClipBounds = new Rect(); private final Region mQsInterceptRegion = new Region(); - - /** - * The alpha of the views which only show on the keyguard but not in shade / shade locked - */ + /** Alpha of the views which only show on the keyguard but not in shade / shade locked. */ private float mKeyguardOnlyContentAlpha = 1.0f; - - /** - * The translationY of the views which only show on the keyguard but in shade / shade locked. - */ + /** Y translation of the views that only show on the keyguard but in shade / shade locked. */ private int mKeyguardOnlyTransitionTranslationY = 0; - private float mUdfpsMaxYBurnInOffset; - - /** - * Are we currently in gesture navigation - */ + /** Are we currently in gesture navigation. */ private boolean mIsGestureNavigation; private int mOldLayoutDirection; private NotificationShelfController mNotificationShelfController; @@ -696,6 +601,7 @@ public final class NotificationPanelViewController { private int mQsClipTop; private int mQsClipBottom; private boolean mQsVisible; + private final ContentResolver mContentResolver; private float mMinFraction; @@ -714,55 +620,7 @@ public final class NotificationPanelViewController { private final NotificationListContainer mNotificationListContainer; private final NotificationStackSizeCalculator mNotificationStackSizeCalculator; - private final NPVCDownEventState.Buffer mLastDownEvents; - - private final Runnable mAnimateKeyguardBottomAreaInvisibleEndRunnable = - () -> mKeyguardBottomArea.setVisibility(View.GONE); - - private final AccessibilityDelegate mAccessibilityDelegate = new AccessibilityDelegate() { - @Override - public void onInitializeAccessibilityNodeInfo(View host, - AccessibilityNodeInfo info) { - super.onInitializeAccessibilityNodeInfo(host, info); - info.addAction(AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_FORWARD); - info.addAction(AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_UP); - } - - @Override - public boolean performAccessibilityAction(View host, int action, Bundle args) { - if (action - == AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_FORWARD.getId() - || action - == AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_UP.getId()) { - mStatusBarKeyguardViewManager.showBouncer(true); - return true; - } - return super.performAccessibilityAction(host, action, args); - } - }; - - private final FalsingTapListener mFalsingTapListener = new FalsingTapListener() { - @Override - public void onAdditionalTapRequired() { - if (mStatusBarStateController.getState() == StatusBarState.SHADE_LOCKED) { - mTapAgainViewController.show(); - } else { - mKeyguardIndicationController.showTransientIndication( - R.string.notification_tap_again); - } - - if (!mStatusBarStateController.isDozing()) { - mVibratorHelper.vibrate( - Process.myUid(), - mView.getContext().getPackageName(), - ADDITIONAL_TAP_REQUIRED_VIBRATION_EFFECT, - "falsing-additional-tap-required", - TOUCH_VIBRATION_ATTRIBUTES); - } - } - }; - private final CameraGestureHelper mCameraGestureHelper; private final KeyguardBottomAreaViewModel mKeyguardBottomAreaViewModel; private final KeyguardBottomAreaInteractor mKeyguardBottomAreaInteractor; @@ -812,8 +670,20 @@ public final class NotificationPanelViewController { private boolean mGestureWaitForTouchSlop; private boolean mIgnoreXTouchSlop; private boolean mExpandLatencyTracking; + private final Runnable mFlingCollapseRunnable = () -> fling(0, false /* expand */, mNextCollapseSpeedUpFactor, false /* expandBecauseOfFalsing */); + private final Runnable mAnimateKeyguardBottomAreaInvisibleEndRunnable = + () -> mKeyguardBottomArea.setVisibility(View.GONE); + private final Runnable mHeadsUpExistenceChangedRunnable = () -> { + setHeadsUpAnimatingAway(false); + updatePanelExpansionAndVisibility(); + }; + private final Runnable mMaybeHideExpandedRunnable = () -> { + if (getExpansionFraction() == 0.0f) { + getView().post(mHideExpandedRunnable); + } + }; @Inject public NotificationPanelViewController(NotificationPanelView view, @@ -848,7 +718,6 @@ public final class NotificationPanelViewController { KeyguardUserSwitcherComponent.Factory keyguardUserSwitcherComponentFactory, KeyguardStatusBarViewComponent.Factory keyguardStatusBarViewComponentFactory, LockscreenShadeTransitionController lockscreenShadeTransitionController, - NotificationIconAreaController notificationIconAreaController, AuthController authController, ScrimController scrimController, UserManager userManager, @@ -857,7 +726,6 @@ public final class NotificationPanelViewController { AmbientState ambientState, LockIconViewController lockIconViewController, KeyguardMediaController keyguardMediaController, - PrivacyDotViewController privacyDotViewController, TapAgainViewController tapAgainViewController, NavigationModeController navigationModeController, NavigationBarController navigationBarController, @@ -895,7 +763,6 @@ public final class NotificationPanelViewController { mLockscreenGestureLogger = lockscreenGestureLogger; mShadeExpansionStateManager = shadeExpansionStateManager; mShadeLog = shadeLogger; - TouchHandler touchHandler = createTouchHandler(); mView.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() { @Override public void onViewAttachedToWindow(View v) { @@ -903,13 +770,12 @@ public final class NotificationPanelViewController { } @Override - public void onViewDetachedFromWindow(View v) { - } + public void onViewDetachedFromWindow(View v) {} }); - mView.addOnLayoutChangeListener(createLayoutChangeListener()); - mView.setOnTouchListener(touchHandler); - mView.setOnConfigurationChangedListener(createOnConfigurationChangedListener()); + mView.addOnLayoutChangeListener(new ShadeLayoutChangeListener()); + mView.setOnTouchListener(createTouchHandler()); + mView.setOnConfigurationChangedListener(config -> loadDimens()); mResources = mView.getResources(); mKeyguardStateController = keyguardStateController; @@ -945,7 +811,6 @@ public final class NotificationPanelViewController { mInteractionJankMonitor = interactionJankMonitor; mSystemClock = systemClock; mKeyguardMediaController = keyguardMediaController; - mPrivacyDotViewController = privacyDotViewController; mMetricsLogger = metricsLogger; mConfigurationController = configurationController; mFlingAnimationUtilsBuilder = flingAnimationUtilsBuilder; @@ -957,7 +822,6 @@ public final class NotificationPanelViewController { mKeyguardBottomAreaViewControllerProvider = keyguardBottomAreaViewControllerProvider; mNotificationsQSContainerController.init(); mNotificationStackScrollLayoutController = notificationStackScrollLayoutController; - mNotificationIconAreaController = notificationIconAreaController; mKeyguardStatusViewComponentFactory = keyguardStatusViewComponentFactory; mKeyguardStatusBarViewComponentFactory = keyguardStatusBarViewComponentFactory; mDepthController = notificationShadeDepthController; @@ -1000,10 +864,7 @@ public final class NotificationPanelViewController { mShadeTransitionController = shadeTransitionController; lockscreenShadeTransitionController.setNotificationPanelController(this); shadeTransitionController.setNotificationPanelViewController(this); - DynamicPrivacyControlListener - dynamicPrivacyControlListener = - new DynamicPrivacyControlListener(); - dynamicPrivacyController.addListener(dynamicPrivacyControlListener); + dynamicPrivacyController.addListener(this::onDynamicPrivacyChanged); shadeExpansionStateManager.addStateListener(this::onPanelStateChanged); @@ -1027,13 +888,14 @@ public final class NotificationPanelViewController { mIsGestureNavigation = QuickStepContract.isGesturalMode(currentMode); mView.setBackgroundColor(Color.TRANSPARENT); - OnAttachStateChangeListener onAttachStateChangeListener = new OnAttachStateChangeListener(); + ShadeAttachStateChangeListener + onAttachStateChangeListener = new ShadeAttachStateChangeListener(); mView.addOnAttachStateChangeListener(onAttachStateChangeListener); if (mView.isAttachedToWindow()) { onAttachStateChangeListener.onViewAttachedToWindow(mView); } - mView.setOnApplyWindowInsetsListener(new OnApplyWindowInsetsListener()); + mView.setOnApplyWindowInsetsListener((v, insets) -> onApplyShadeWindowInsets(insets)); if (DEBUG_DRAWABLE) { mView.getOverlay().add(new DebugDrawable()); @@ -1052,57 +914,68 @@ public final class NotificationPanelViewController { new KeyguardUnlockAnimationController.KeyguardUnlockAnimationListener() { @Override public void onUnlockAnimationFinished() { - // Make sure the clock is in the correct position after the unlock animation - // so that it's not in the wrong place when we show the keyguard again. - positionClockAndNotifications(true /* forceClockUpdate */); + unlockAnimationFinished(); } @Override public void onUnlockAnimationStarted( boolean playingCannedAnimation, boolean isWakeAndUnlock, - long unlockAnimationStartDelay, + long startDelay, long unlockAnimationDuration) { - // Disable blurs while we're unlocking so that panel expansion does not - // cause blurring. This will eventually be re-enabled by the panel view on - // ACTION_UP, since the user's finger might still be down after a swipe to - // unlock gesture, and we don't want that to cause blurring either. - mDepthController.setBlursDisabledForUnlock(mTracking); - - if (playingCannedAnimation && !isWakeAndUnlock) { - // Hide the panel so it's not in the way or the surface behind the - // keyguard, which will be appearing. If we're wake and unlocking, the - // lock screen is hidden instantly so should not be flung away. - if (isTracking() || isFlinging()) { - // Instant collpase the notification panel since the notification - // panel is already in the middle animating - onTrackingStopped(false); - instantCollapse(); - } else { - mView.animate() - .alpha(0f) - .setStartDelay(0) - // Translate up by 4%. - .translationY(mView.getHeight() * -0.04f) - // This start delay is to give us time to animate out before - // the launcher icons animation starts, so use that as our - // duration. - .setDuration(unlockAnimationStartDelay) - .setInterpolator(EMPHASIZED_ACCELERATE) - .withEndAction(() -> { - instantCollapse(); - mView.setAlpha(1f); - mView.setTranslationY(0f); - }) - .start(); - } - } + unlockAnimationStarted(playingCannedAnimation, isWakeAndUnlock, startDelay); } }); mCameraGestureHelper = cameraGestureHelper; mKeyguardBottomAreaInteractor = keyguardBottomAreaInteractor; } + private void unlockAnimationFinished() { + // Make sure the clock is in the correct position after the unlock animation + // so that it's not in the wrong place when we show the keyguard again. + positionClockAndNotifications(true /* forceClockUpdate */); + } + + private void unlockAnimationStarted( + boolean playingCannedAnimation, + boolean isWakeAndUnlock, + long unlockAnimationStartDelay) { + // Disable blurs while we're unlocking so that panel expansion does not + // cause blurring. This will eventually be re-enabled by the panel view on + // ACTION_UP, since the user's finger might still be down after a swipe to + // unlock gesture, and we don't want that to cause blurring either. + mDepthController.setBlursDisabledForUnlock(mTracking); + + if (playingCannedAnimation && !isWakeAndUnlock) { + // Hide the panel so it's not in the way or the surface behind the + // keyguard, which will be appearing. If we're wake and unlocking, the + // lock screen is hidden instantly so should not be flung away. + if (isTracking() || mIsFlinging) { + // Instant collapse the notification panel since the notification + // panel is already in the middle animating + onTrackingStopped(false); + instantCollapse(); + } else { + mView.animate() + .alpha(0f) + .setStartDelay(0) + // Translate up by 4%. + .translationY(mView.getHeight() * -0.04f) + // This start delay is to give us time to animate out before + // the launcher icons animation starts, so use that as our + // duration. + .setDuration(unlockAnimationStartDelay) + .setInterpolator(EMPHASIZED_ACCELERATE) + .withEndAction(() -> { + instantCollapse(); + mView.setAlpha(1f); + mView.setTranslationY(0f); + }) + .start(); + } + } + } + @VisibleForTesting void onFinishInflate() { loadDimens(); @@ -1139,7 +1012,7 @@ public final class NotificationPanelViewController { R.id.notification_stack_scroller); mNotificationStackScrollLayoutController.attach(stackScrollLayout); mNotificationStackScrollLayoutController.setOnHeightChangedListener( - mOnHeightChangedListener); + new NsslHeightChangedListener()); mNotificationStackScrollLayoutController.setOverscrollTopChangedListener( mOnOverscrollTopChangedListener); mNotificationStackScrollLayoutController.setOnScrollListener(this::onNotificationScrolled); @@ -1260,11 +1133,6 @@ public final class NotificationPanelViewController { } } - private void setCentralSurfaces(CentralSurfaces centralSurfaces) { - // TODO: this can be injected. - mCentralSurfaces = centralSurfaces; - } - public void updateResources() { mSplitShadeNotificationsScrimMarginBottom = mResources.getDimensionPixelSize( @@ -1350,7 +1218,7 @@ public final class NotificationPanelViewController { @VisibleForTesting void reInflateViews() { - if (DEBUG_LOGCAT) Log.d(TAG, "reInflateViews"); + debugLog("reInflateViews"); // Re-inflate the status view group. KeyguardStatusView keyguardStatusView = mNotificationContainerParent.findViewById(R.id.keyguard_status_view); @@ -1429,6 +1297,11 @@ public final class NotificationPanelViewController { mNotificationPanelUnfoldAnimationController.ifPresent(u -> u.setup(mView)); } + @VisibleForTesting + void setQs(QS qs) { + mQs = qs; + } + private void attachSplitShadeMediaPlayerContainer(FrameLayout container) { mKeyguardMediaController.attachSplitShadeContainer(container); } @@ -1443,12 +1316,7 @@ public final class NotificationPanelViewController { } @VisibleForTesting - boolean getClosing() { - return mClosing; - } - - @VisibleForTesting - boolean getIsFlinging() { + boolean isFlinging() { return mIsFlinging; } @@ -1923,13 +1791,13 @@ public final class NotificationPanelViewController { setQsExpandImmediate(true); setShowShelfOnly(true); } - if (DEBUG) this.logf("collapse: " + this); + debugLog("collapse: %s", this); if (canPanelBeCollapsed()) { cancelHeightAnimator(); notifyExpandingStarted(); // Set after notifyExpandingStarted, as notifyExpandingStarted resets the closing state. - setIsClosing(true); + setClosing(true); if (delayed) { mNextCollapseSpeedUpFactor = speedUpFactor; this.mView.postDelayed(mFlingCollapseRunnable, 120); @@ -1939,13 +1807,19 @@ public final class NotificationPanelViewController { } } - private void setQsExpandImmediate(boolean expandImmediate) { + @VisibleForTesting + void setQsExpandImmediate(boolean expandImmediate) { if (expandImmediate != mQsExpandImmediate) { mQsExpandImmediate = expandImmediate; mShadeExpansionStateManager.notifyExpandImmediateChange(expandImmediate); } } + @VisibleForTesting + boolean isQsExpandImmediate() { + return mQsExpandImmediate; + } + private void setShowShelfOnly(boolean shelfOnly) { mNotificationStackScrollLayoutController.setShouldShowShelfOnly( shelfOnly && !mSplitShadeEnabled); @@ -2015,7 +1889,7 @@ public final class NotificationPanelViewController { // case but currently motion in portrait looks worse than when using flingSettings. // TODO: make below function transitioning smoothly also in portrait with null target mLockscreenShadeTransitionController.goToLockedShade( - /* expandedView= */null, /* needsQSAnimation= */false); + /* expandedView= */null, /* needsQSAnimation= */true); } else if (isFullyCollapsed()) { expand(true /* animate */); } else { @@ -2032,12 +1906,12 @@ public final class NotificationPanelViewController { } } - public void fling(float vel, boolean expand) { + private void fling(float vel) { GestureRecorder gr = mCentralSurfaces.getGestureRecorder(); if (gr != null) { gr.tag("fling " + ((vel > 0) ? "open" : "closed"), "notifications,v=" + vel); } - fling(vel, expand, 1.0f /* collapseSpeedUpFactor */, false); + fling(vel, true, 1.0f /* collapseSpeedUpFactor */, false); } @VisibleForTesting @@ -2124,7 +1998,7 @@ public final class NotificationPanelViewController { @Override public void onAnimationEnd(Animator animation) { if (shouldSpringBack && !mCancelled) { - // After the shade is flinged open to an overscrolled state, spring back + // After the shade is flung open to an overscrolled state, spring back // the shade by reducing section padding to 0. springBack(); } else { @@ -2154,7 +2028,7 @@ public final class NotificationPanelViewController { } private boolean onQsIntercept(MotionEvent event) { - if (DEBUG_LOGCAT) Log.d(TAG, "onQsIntercept"); + debugLog("onQsIntercept"); int pointerIndex = event.findPointerIndex(mQsTrackingPointer); if (pointerIndex < 0) { pointerIndex = 0; @@ -2215,7 +2089,7 @@ public final class NotificationPanelViewController { if ((h > touchSlop || (h < -touchSlop && mQsExpanded)) && Math.abs(h) > Math.abs(x - mInitialTouchX) && shouldQuickSettingsIntercept(mInitialTouchX, mInitialTouchY, h)) { - if (DEBUG_LOGCAT) Log.d(TAG, "onQsIntercept - start tracking expansion"); + debugLog("onQsIntercept - start tracking expansion"); mView.getParent().requestDisallowInterceptTouchEvent(true); mShadeLog.onQsInterceptMoveQsTrackingEnabled(h); mQsTracking = true; @@ -2274,7 +2148,7 @@ public final class NotificationPanelViewController { private void initDownStates(MotionEvent event) { if (event.getActionMasked() == MotionEvent.ACTION_DOWN) { mQsTouchAboveFalsingThreshold = mQsFullyExpanded; - mDozingOnDown = isDozing(); + mDozingOnDown = mDozing; mDownX = event.getX(); mDownY = event.getY(); mCollapsedOnDown = isFullyCollapsed(); @@ -2324,7 +2198,7 @@ public final class NotificationPanelViewController { float vel = getCurrentQSVelocity(); boolean expandsQs = flingExpandsQs(vel); if (expandsQs) { - if (mFalsingManager.isUnlockingDisabled() || isFalseTouch(QUICK_SETTINGS)) { + if (mFalsingManager.isUnlockingDisabled() || isFalseTouch()) { expandsQs = false; } else { logQsSwipeDown(y); @@ -2363,9 +2237,9 @@ public final class NotificationPanelViewController { } } - private boolean isFalseTouch(@Classifier.InteractionType int interactionType) { + private boolean isFalseTouch() { if (mFalsingManager.isClassifierEnabled()) { - return mFalsingManager.isFalseTouch(interactionType); + return mFalsingManager.isFalseTouch(Classifier.QUICK_SETTINGS); } return !mQsTouchAboveFalsingThreshold; } @@ -2491,7 +2365,7 @@ public final class NotificationPanelViewController { private void handleQsDown(MotionEvent event) { if (event.getActionMasked() == MotionEvent.ACTION_DOWN && shouldQuickSettingsIntercept( event.getX(), event.getY(), -1)) { - if (DEBUG_LOGCAT) Log.d(TAG, "handleQsDown"); + debugLog("handleQsDown"); mFalsingCollector.onQsDown(); mShadeLog.logMotionEvent(event, "handleQsDown: down action, QS tracking enabled"); mQsTracking = true; @@ -2505,9 +2379,7 @@ public final class NotificationPanelViewController { } } - /** - * Input focus transfer is about to happen. - */ + /** Input focus transfer is about to happen. */ public void startWaitingForOpenPanelGesture() { if (!isFullyCollapsed()) { return; @@ -2539,7 +2411,7 @@ public final class NotificationPanelViewController { } else { // Window never will receive touch events that typically trigger haptic on open. maybeVibrateOnOpening(false /* openingWithTouch */); - fling(velocity > 1f ? 1000f * velocity : 0, true /* expand */); + fling(velocity > 1f ? 1000f * velocity : 0 /* expand */); } onTrackingStopped(false); } @@ -2613,7 +2485,7 @@ public final class NotificationPanelViewController { break; case MotionEvent.ACTION_MOVE: - if (DEBUG_LOGCAT) Log.d(TAG, "onQSTouch move"); + debugLog("onQSTouch move"); mShadeLog.logMotionEvent(event, "onQsTouch: move action, setting QS expansion"); setQsExpansionHeight(h + mInitialHeightOnTouch); if (h >= getFalsingThreshold()) { @@ -2690,6 +2562,9 @@ public final class NotificationPanelViewController { navigationBarView.onStatusBarPanelStateChanged(); } mShadeExpansionStateManager.onQsExpansionChanged(expanded); + mShadeLog.logQsExpansionChanged("QS Expansion Changed.", expanded, + mQsMinExpansionHeight, mQsMaxExpansionHeight, mStackScrollerOverscrolling, + mDozing, mQsAnimatorExpand, mAnimatingQS); } } @@ -2901,7 +2776,7 @@ public final class NotificationPanelViewController { } private int calculateLeftQsClippingBound() { - if (isFullWidth()) { + if (mIsFullWidth) { // left bounds can ignore insets, it should always reach the edge of the screen return 0; } else { @@ -2910,7 +2785,7 @@ public final class NotificationPanelViewController { } private int calculateRightQsClippingBound() { - if (isFullWidth()) { + if (mIsFullWidth) { return getView().getRight() + mDisplayRightInset; } else { return mNotificationStackScrollLayoutController.getRight(); @@ -2978,7 +2853,7 @@ public final class NotificationPanelViewController { // Fancy clipping for quick settings int radius = mScrimCornerRadius; boolean clipStatusView = false; - if (isFullWidth()) { + if (mIsFullWidth) { // The padding on this area is large enough that we can use a cheaper clipping strategy mKeyguardStatusAreaClipBounds.set(left, top, right, bottom); clipStatusView = qsVisible; @@ -3041,11 +2916,23 @@ public final class NotificationPanelViewController { // relative to NotificationStackScrollLayout int nsslLeft = left - mNotificationStackScrollLayoutController.getLeft(); int nsslRight = right - mNotificationStackScrollLayoutController.getLeft(); - int nsslTop = top - mNotificationStackScrollLayoutController.getTop(); + int nsslTop = getNotificationsClippingTopBounds(top); int nsslBottom = bottom - mNotificationStackScrollLayoutController.getTop(); int bottomRadius = mSplitShadeEnabled ? radius : 0; + int topRadius = mSplitShadeEnabled && mExpandingFromHeadsUp ? 0 : radius; mNotificationStackScrollLayoutController.setRoundedClippingBounds( - nsslLeft, nsslTop, nsslRight, nsslBottom, radius, bottomRadius); + nsslLeft, nsslTop, nsslRight, nsslBottom, topRadius, bottomRadius); + } + + private int getNotificationsClippingTopBounds(int qsTop) { + if (mSplitShadeEnabled && mExpandingFromHeadsUp) { + // in split shade nssl has extra top margin so clipping at top 0 is not enough, we need + // to set top clipping bound to negative value to allow HUN to go up to the top edge of + // the screen without clipping. + return -mAmbientState.getStackTopMargin(); + } else { + return qsTop - mNotificationStackScrollLayoutController.getTop(); + } } private float getQSEdgePosition() { @@ -3116,10 +3003,7 @@ public final class NotificationPanelViewController { } } - /** - * @return the topPadding of notifications when on keyguard not respecting quick settings - * expansion - */ + /** Returns the topPadding of notifications when on keyguard not respecting QS expansion. */ private int getKeyguardNotificationStaticPadding() { if (!mKeyguardShowing) { return 0; @@ -3151,7 +3035,7 @@ public final class NotificationPanelViewController { * shade. 0.0f means we're not transitioning yet. */ public void setTransitionToFullShadeAmount(float pxAmount, boolean animate, long delay) { - if (animate && isFullWidth()) { + if (animate && mIsFullWidth) { animateNextNotificationBounds(StackStateAnimator.ANIMATION_DURATION_GO_TO_FULL_SHADE, delay); mIsQsTranslationResetAnimator = mQsTranslationForFullShadeTransition > 0.0f; @@ -3200,10 +3084,7 @@ public final class NotificationPanelViewController { updateQsExpansion(); } - /** - * Notify the panel that the pulse expansion has finished and that we're going to the full - * shade - */ + /** Called when pulse expansion has finished and this is going to the full shade. */ public void onPulseExpansionFinished() { animateNextNotificationBounds(StackStateAnimator.ANIMATION_DURATION_GO_TO_FULL_SHADE, 0); mIsPulseExpansionResetAnimator = true; @@ -3258,9 +3139,7 @@ public final class NotificationPanelViewController { } } - /** - * @see #flingSettings(float, int, Runnable, boolean) - */ + /** @see #flingSettings(float, int, Runnable, boolean) */ public void flingSettings(float vel, int type) { flingSettings(vel, type, null /* onFinishRunnable */, false /* isClick */); } @@ -3393,7 +3272,8 @@ public final class NotificationPanelViewController { return !mSplitShadeEnabled && (isInSettings() || mIsPanelCollapseOnQQS); } - public int getMaxPanelHeight() { + @VisibleForTesting + int getMaxPanelHeight() { int min = mStatusBarMinHeight; if (!(mBarState == KEYGUARD) && mNotificationStackScrollLayoutController.getNotGoneChildCount() == 0) { @@ -3427,19 +3307,35 @@ public final class NotificationPanelViewController { } private void onHeightUpdated(float expandedHeight) { + if (expandedHeight <= 0) { + mShadeLog.logExpansionChanged("onHeightUpdated: fully collapsed.", + mExpandedFraction, isExpanded(), mTracking, mExpansionDragDownAmountPx); + } else if (isFullyExpanded()) { + mShadeLog.logExpansionChanged("onHeightUpdated: fully expanded.", + mExpandedFraction, isExpanded(), mTracking, mExpansionDragDownAmountPx); + } if (!mQsExpanded || mQsExpandImmediate || mIsExpanding && mQsExpandedWhenExpandingStarted) { // Updating the clock position will set the top padding which might // trigger a new panel height and re-position the clock. // This is a circular dependency and should be avoided, otherwise we'll have // a stack overflow. if (mStackScrollerMeasuringPass > 2) { - if (DEBUG_LOGCAT) Log.d(TAG, "Unstable notification panel height. Aborting."); + debugLog("Unstable notification panel height. Aborting."); } else { positionClockAndNotifications(); } } - if (mQsExpandImmediate || (mQsExpanded && !mQsTracking && mQsExpansionAnimator == null - && !mQsExpansionFromOverscroll)) { + // Below is true when QS are expanded and we swipe up from the same bottom of panel to + // close the whole shade with one motion. Also this will be always true when closing + // split shade as there QS are always expanded so every collapsing motion is motion from + // expanded QS to closed panel + boolean collapsingShadeFromExpandedQs = mQsExpanded && !mQsTracking + && mQsExpansionAnimator == null && !mQsExpansionFromOverscroll; + boolean goingBetweenClosedShadeAndExpandedQs = + mQsExpandImmediate || collapsingShadeFromExpandedQs; + // we don't want to update QS expansion when HUN is visible because then the whole shade is + // initially hidden, even though it has non-zero height + if (goingBetweenClosedShadeAndExpandedQs && !mHeadsUpManager.isTrackingHeadsUp()) { float qsExpansionFraction; if (mSplitShadeEnabled) { qsExpansionFraction = 1; @@ -3560,9 +3456,7 @@ public final class NotificationPanelViewController { return alpha; } - /** - * Hides the header when notifications are colliding with it. - */ + /** Hides the header when notifications are colliding with it. */ private void updateHeader() { if (mBarState == KEYGUARD) { mKeyguardStatusBarViewController.updateViewState(); @@ -3705,7 +3599,7 @@ public final class NotificationPanelViewController { if (mAnimateAfterExpanding) { notifyExpandingStarted(); beginJankMonitoring(); - fling(0, true /* expand */); + fling(0 /* expand */); } else { setExpandedFraction(1f); } @@ -3742,6 +3636,24 @@ public final class NotificationPanelViewController { } + private void falsingAdditionalTapRequired() { + if (mStatusBarStateController.getState() == StatusBarState.SHADE_LOCKED) { + mTapAgainViewController.show(); + } else { + mKeyguardIndicationController.showTransientIndication( + R.string.notification_tap_again); + } + + if (!mStatusBarStateController.isDozing()) { + mVibratorHelper.vibrate( + Process.myUid(), + mView.getContext().getPackageName(), + ADDITIONAL_TAP_REQUIRED_VIBRATION_EFFECT, + "falsing-additional-tap-required", + TOUCH_VIBRATION_ATTRIBUTES); + } + } + private void onTrackingStarted() { mFalsingCollector.onTrackingStarted(!mKeyguardStateController.canDismissLockScreen()); endClosing(); @@ -3776,7 +3688,7 @@ public final class NotificationPanelViewController { private void updateMaxHeadsUpTranslation() { mNotificationStackScrollLayoutController.setHeadsUpBoundaries( - getHeight(), mNavigationBarBottomHeight); + mView.getHeight(), mNavigationBarBottomHeight); } @VisibleForTesting @@ -3821,7 +3733,8 @@ public final class NotificationPanelViewController { || !isTracking()); } - public int getMaxPanelTransitionDistance() { + @VisibleForTesting + int getMaxPanelTransitionDistance() { // Traditionally the value is based on the number of notifications. On split-shade, we want // the required distance to be a specific and constant value, to make sure the expansion // motion has the expected speed. We also only want this on non-lockscreen for now. @@ -3877,10 +3790,9 @@ public final class NotificationPanelViewController { } @VisibleForTesting - void setIsClosing(boolean isClosing) { - boolean wasClosing = isClosing(); - mClosing = isClosing; - if (wasClosing != isClosing) { + void setClosing(boolean isClosing) { + if (mClosing != isClosing) { + mClosing = isClosing; mShadeExpansionStateManager.notifyPanelCollapsingChanged(isClosing); } mAmbientState.setIsClosing(isClosing); @@ -3893,10 +3805,6 @@ public final class NotificationPanelViewController { } } - public boolean isDozing() { - return mDozing; - } - public void setQsScrimEnabled(boolean qsScrimEnabled) { boolean changed = mQsScrimEnabled != qsScrimEnabled; mQsScrimEnabled = qsScrimEnabled; @@ -3909,7 +3817,7 @@ public final class NotificationPanelViewController { mKeyguardStatusViewController.dozeTimeTick(); } - private boolean onMiddleClicked() { + private void onMiddleClicked() { switch (mBarState) { case KEYGUARD: if (!mDozingOnDown) { @@ -3931,14 +3839,12 @@ public final class NotificationPanelViewController { startUnlockHintAnimation(); } } - return true; + break; case StatusBarState.SHADE_LOCKED: if (!mQsExpanded) { mStatusBarStateController.setState(KEYGUARD); } - return true; - default: - return true; + break; } } @@ -4012,17 +3918,9 @@ public final class NotificationPanelViewController { updateStatusBarIcons(); } - /** - * @return whether the notifications are displayed full width and don't have any margins on - * the side. - */ - public boolean isFullWidth() { - return mIsFullWidth; - } - private void updateStatusBarIcons() { boolean showIconsWhenExpanded = - (isPanelVisibleBecauseOfHeadsUp() || isFullWidth()) + (isPanelVisibleBecauseOfHeadsUp() || mIsFullWidth) && getExpandedHeight() < getOpeningHeight(); if (showIconsWhenExpanded && isOnKeyguard()) { showIconsWhenExpanded = false; @@ -4037,10 +3935,7 @@ public final class NotificationPanelViewController { return mBarState == KEYGUARD; } - /** - * Called when heads-up notification is being dragged up or down to indicate what's the starting - * height for shade motion - */ + /** Called when a HUN is dragged up or down to indicate the starting height for shade motion. */ public void setHeadsUpDraggingStartingHeight(int startHeight) { mHeadsUpStartHeight = startHeight; float scrimMinFraction; @@ -4094,25 +3989,18 @@ public final class NotificationPanelViewController { setLaunchingAffordance(false); } - /** - * Set whether we are currently launching an affordance. This is currently only set when - * launched via a camera gesture. - */ + /** Set whether we are currently launching an affordance (i.e. camera gesture). */ private void setLaunchingAffordance(boolean launchingAffordance) { mLaunchingAffordance = launchingAffordance; mKeyguardBypassController.setLaunchingAffordance(launchingAffordance); } - /** - * Return true when a bottom affordance is launching an occluded activity with a splash screen. - */ + /** Returns whether a bottom affordance is launching an occluded activity with splash screen. */ public boolean isLaunchingAffordanceWithPreview() { return mLaunchingAffordance; } - /** - * Whether the camera application can be launched for the camera launch gesture. - */ + /** Whether the camera application can be launched by the camera launch gesture. */ public boolean canCameraGestureBeLaunched() { return mCameraGestureHelper.canCameraGestureBeLaunched(mBarState); } @@ -4125,22 +4013,19 @@ public final class NotificationPanelViewController { && mHeadsUpAppearanceController.shouldBeVisible()) { return false; } - return !isFullWidth() || !mShowIconsWhenExpanded; + return !mIsFullWidth || !mShowIconsWhenExpanded; } - public final QS.ScrollListener mScrollListener = new QS.ScrollListener() { - @Override - public void onQsPanelScrollChanged(int scrollY) { - mLargeScreenShadeHeaderController.setQsScrollY(scrollY); - if (scrollY > 0 && !mQsFullyExpanded) { - if (DEBUG_LOGCAT) Log.d(TAG, "Scrolling while not expanded. Forcing expand"); - // If we are scrolling QS, we should be fully expanded. - expandWithQs(); - } + private void onQsPanelScrollChanged(int scrollY) { + mLargeScreenShadeHeaderController.setQsScrollY(scrollY); + if (scrollY > 0 && !mQsFullyExpanded) { + debugLog("Scrolling while not expanded. Forcing expand"); + // If we are scrolling QS, we should be fully expanded. + expandWithQs(); } - }; + } - private final FragmentListener mFragmentListener = new FragmentListener() { + private final class QsFragmentListener implements FragmentListener { @Override public void onFragmentViewCreated(String tag, Fragment fragment) { mQs = (QS) fragment; @@ -4157,7 +4042,7 @@ public final class NotificationPanelViewController { final int height = bottom - top; final int oldHeight = oldBottom - oldTop; if (height != oldHeight) { - mHeightListener.onQsHeightChanged(); + onQsHeightChanged(); } }); mQs.setCollapsedMediaVisibilityChangedListener((visible) -> { @@ -4170,7 +4055,7 @@ public final class NotificationPanelViewController { mLockscreenShadeTransitionController.setQS(mQs); mShadeTransitionController.setQs(mQs); mNotificationStackScrollLayoutController.setQsHeader((ViewGroup) mQs.getHeader()); - mQs.setScrollListener(mScrollListener); + mQs.setScrollListener(mQsScrollListener); updateQsExpansion(); } @@ -4183,7 +4068,7 @@ public final class NotificationPanelViewController { mQs = null; } } - }; + } private void animateNextNotificationBounds(long duration, long delay) { mAnimateNextNotificationBounds = true; @@ -4273,13 +4158,7 @@ public final class NotificationPanelViewController { mKeyguardStatusViewController.setStatusAccessibilityImportance(mode); } - /** - * TODO: this should be removed. - * It's not correct to pass this view forward because other classes will end up adding - * children to it. Theme will be out of sync. - * - * @return bottom area view - */ + //TODO(b/254875405): this should be removed. public KeyguardBottomAreaView getKeyguardBottomAreaView() { return mKeyguardBottomArea; } @@ -4308,11 +4187,8 @@ public final class NotificationPanelViewController { mHeadsUpAppearanceController = headsUpAppearanceController; } - /** - * Starts the animation before we dismiss Keyguard, i.e. an disappearing animation on the - * security view of the bouncer. - */ - public void onBouncerPreHideAnimation() { + /** Called before animating Keyguard dismissal, i.e. the animation dismissing the bouncer. */ + public void startBouncerPreHideAnimation() { if (mKeyguardQsUserSwitchController != null) { mKeyguardQsUserSwitchController.setKeyguardQsUserSwitchVisibility( mBarState, @@ -4329,9 +4205,7 @@ public final class NotificationPanelViewController { } } - /** - * Updates the views to the initial state for the fold to AOD animation - */ + /** Updates the views to the initial state for the fold to AOD animation. */ public void prepareFoldToAodAnimation() { // Force show AOD UI even if we are not locked showAodUi(); @@ -4373,14 +4247,11 @@ public final class NotificationPanelViewController { public void onAnimationEnd(Animator animation) { endAction.run(); } - }).setUpdateListener(anim -> { - mKeyguardStatusViewController.animateFoldToAod(anim.getAnimatedFraction()); - }).start(); + }).setUpdateListener(anim -> mKeyguardStatusViewController.animateFoldToAod( + anim.getAnimatedFraction())).start(); } - /** - * Cancels fold to AOD transition and resets view state - */ + /** Cancels fold to AOD transition and resets view state. */ public void cancelFoldToAodAnimation() { cancelAnimation(); resetAlpha(); @@ -4424,42 +4295,11 @@ public final class NotificationPanelViewController { } } - public boolean hasActiveClearableNotifications() { - return mNotificationStackScrollLayoutController.hasActiveClearableNotifications(ROWS_ALL); - } public RemoteInputController.Delegate createRemoteInputDelegate() { return mNotificationStackScrollLayoutController.createDelegate(); } - /** - * Updates the notification views' sections and status bar icons. This is - * triggered by the NotificationPresenter whenever there are changes to the underlying - * notification data being displayed. In the new notification pipeline, this is handled in - * {@link ShadeViewManager}. - */ - public void updateNotificationViews() { - mNotificationStackScrollLayoutController.updateFooter(); - - mNotificationIconAreaController.updateNotificationIcons(createVisibleEntriesList()); - } - - private List<ListEntry> createVisibleEntriesList() { - List<ListEntry> entries = new ArrayList<>( - mNotificationStackScrollLayoutController.getChildCount()); - for (int i = 0; i < mNotificationStackScrollLayoutController.getChildCount(); i++) { - View view = mNotificationStackScrollLayoutController.getChildAt(i); - if (view instanceof ExpandableNotificationRow) { - entries.add(((ExpandableNotificationRow) view).getEntry()); - } - } - return entries; - } - - public void onUpdateRowStates() { - mNotificationStackScrollLayoutController.onUpdateRowStates(); - } - public boolean hasPulsingNotifications() { return mNotificationListContainer.hasPulsingNotifications(); } @@ -4476,16 +4316,6 @@ public final class NotificationPanelViewController { mNotificationStackScrollLayoutController.runAfterAnimationFinished(r); } - private Runnable mHideExpandedRunnable; - private final Runnable mMaybeHideExpandedRunnable = new Runnable() { - @Override - public void run() { - if (getExpansionFraction() == 0.0f) { - mView.post(mHideExpandedRunnable); - } - } - }; - /** * Initialize objects instead of injecting to avoid circular dependencies. * @@ -4495,7 +4325,9 @@ public final class NotificationPanelViewController { CentralSurfaces centralSurfaces, Runnable hideExpandedRunnable, NotificationShelfController notificationShelfController) { - setCentralSurfaces(centralSurfaces); + // TODO(b/254859580): this can be injected. + mCentralSurfaces = centralSurfaces; + mHideExpandedRunnable = hideExpandedRunnable; mNotificationStackScrollLayoutController.setShelfController(notificationShelfController); mNotificationShelfController = notificationShelfController; @@ -4503,10 +4335,6 @@ public final class NotificationPanelViewController { updateMaxDisplayedNotifications(true); } - public void setAlpha(float alpha) { - mView.setAlpha(alpha); - } - public void resetTranslation() { mView.setTranslationX(0f); } @@ -4525,22 +4353,18 @@ public final class NotificationPanelViewController { ViewGroupFadeHelper.reset(mView); } - public void addOnGlobalLayoutListener(ViewTreeObserver.OnGlobalLayoutListener listener) { + void addOnGlobalLayoutListener(ViewTreeObserver.OnGlobalLayoutListener listener) { mView.getViewTreeObserver().addOnGlobalLayoutListener(listener); } - public void removeOnGlobalLayoutListener(ViewTreeObserver.OnGlobalLayoutListener listener) { + void removeOnGlobalLayoutListener(ViewTreeObserver.OnGlobalLayoutListener listener) { mView.getViewTreeObserver().removeOnGlobalLayoutListener(listener); } - public MyOnHeadsUpChangedListener getOnHeadsUpChangedListener() { + public ShadeHeadsUpChangedListener getOnHeadsUpChangedListener() { return mOnHeadsUpChangedListener; } - public int getHeight() { - return mView.getHeight(); - } - public void setHeaderDebugInfo(String text) { if (DEBUG_DRAWABLE) mHeaderDebugInfo = text; } @@ -4549,10 +4373,6 @@ public final class NotificationPanelViewController { mConfigurationListener.onThemeChanged(); } - private OnLayoutChangeListener createLayoutChangeListener() { - return new OnLayoutChangeListener(); - } - @VisibleForTesting TouchHandler createTouchHandler() { return new TouchHandler(); @@ -4607,10 +4427,6 @@ public final class NotificationPanelViewController { } }; - private OnConfigurationChangedListener createOnConfigurationChangedListener() { - return new OnConfigurationChangedListener(); - } - public NotificationStackScrollLayoutController getNotificationStackScrollLayoutController() { return mNotificationStackScrollLayoutController; } @@ -4651,13 +4467,7 @@ public final class NotificationPanelViewController { ); } - private void unregisterSettingsChangeListener() { - mContentResolver.unregisterContentObserver(mSettingsChangeObserver); - } - - /** - * Updates notification panel-specific flags on {@link SysUiState}. - */ + /** Updates notification panel-specific flags on {@link SysUiState}. */ public void updateSystemUiStateFlags() { if (SysUiState.DEBUG) { Log.d(TAG, "Updating panel sysui state flags: fullyExpanded=" @@ -4669,8 +4479,10 @@ public final class NotificationPanelViewController { .commitUpdate(mDisplayId); } - private void logf(String fmt, Object... args) { - Log.v(TAG, (mViewName != null ? (mViewName + ": ") : "") + String.format(fmt, args)); + private void debugLog(String fmt, Object... args) { + if (DEBUG_LOGCAT) { + Log.d(TAG, (mViewName != null ? (mViewName + ": ") : "") + String.format(fmt, args)); + } } @VisibleForTesting @@ -4734,9 +4546,8 @@ public final class NotificationPanelViewController { * Maybe vibrate as panel is opened. * * @param openingWithTouch Whether the panel is being opened with touch. If the panel is - * instead - * being opened programmatically (such as by the open panel gesture), we - * always play haptic. + * instead being opened programmatically (such as by the open panel + * gesture), we always play haptic. */ private void maybeVibrateOnOpening(boolean openingWithTouch) { if (mVibrateOnOpening) { @@ -4835,8 +4646,8 @@ public final class NotificationPanelViewController { } else if (!mCentralSurfaces.isBouncerShowing() && !mStatusBarKeyguardViewManager.isShowingAlternateAuthOrAnimating() && !mKeyguardStateController.isKeyguardGoingAway()) { - boolean expands = onEmptySpaceClick(); - onTrackingStopped(expands); + onEmptySpaceClick(); + onTrackingStopped(true); } mVelocityTracker.clear(); } @@ -4848,7 +4659,7 @@ public final class NotificationPanelViewController { private void endClosing() { if (mClosing) { - setIsClosing(false); + setClosing(false); onClosingFinished(); } } @@ -4883,7 +4694,7 @@ public final class NotificationPanelViewController { boolean expandBecauseOfFalsing) { float target = expand ? getMaxPanelHeight() : 0; if (!expand) { - setIsClosing(true); + setClosing(true); } flingToHeight(vel, expand, target, collapseSpeedUpFactor, expandBecauseOfFalsing); } @@ -4918,13 +4729,9 @@ public final class NotificationPanelViewController { animator.start(); } - public String getName() { - return mViewName; - } - @VisibleForTesting void setExpandedHeight(float height) { - if (DEBUG) logf("setExpandedHeight(%.1f)", height); + debugLog("setExpandedHeight(%.1f)", height); setExpandedHeightInternal(height); } @@ -5016,7 +4823,7 @@ public final class NotificationPanelViewController { return mExpandedHeight; } - public float getExpandedFraction() { + private float getExpandedFraction() { return mExpandedFraction; } @@ -5032,10 +4839,6 @@ public final class NotificationPanelViewController { return mClosing || mIsLaunchAnimationRunning; } - public boolean isFlinging() { - return mIsFlinging; - } - public boolean isTracking() { return mTracking; } @@ -5182,8 +4985,7 @@ public final class NotificationPanelViewController { */ public void updatePanelExpansionAndVisibility() { mShadeExpansionStateManager.onPanelExpansionChanged( - mExpandedFraction, isExpanded(), - mTracking, mExpansionDragDownAmountPx); + mExpandedFraction, isExpanded(), mTracking, mExpansionDragDownAmountPx); updateVisibility(); } @@ -5196,16 +4998,11 @@ public final class NotificationPanelViewController { && !mIsSpringBackAnimation; } - /** - * Gets called when the user performs a click anywhere in the empty area of the panel. - * - * @return whether the panel will be expanded after the action performed by this method - */ - private boolean onEmptySpaceClick() { - if (mHintAnimationRunning) { - return true; + /** Called when the user performs a click anywhere in the empty area of the panel. */ + private void onEmptySpaceClick() { + if (!mHintAnimationRunning) { + onMiddleClicked(); } - return onMiddleClicked(); } @VisibleForTesting @@ -5222,7 +5019,7 @@ public final class NotificationPanelViewController { /** Returns the NotificationPanelView. */ public ViewGroup getView() { - // TODO: remove this method, or at least reduce references to it. + // TODO(b/254878364): remove this method, or at least reduce references to it. return mView; } @@ -5262,12 +5059,11 @@ public final class NotificationPanelViewController { return mShadeExpansionStateManager; } - private class OnHeightChangedListener implements ExpandableView.OnHeightChangedListener { + private final class NsslHeightChangedListener implements + ExpandableView.OnHeightChangedListener { @Override public void onHeightChanged(ExpandableView view, boolean needsAnimation) { - - // Block update if we are in quick settings and just the top padding changed - // (i.e. view == null). + // Block update if we are in QS and just the top padding changed (i.e. view == null). if (view == null && mQsExpanded) { return; } @@ -5291,26 +5087,22 @@ public final class NotificationPanelViewController { } @Override - public void onReset(ExpandableView view) { - } + public void onReset(ExpandableView view) {} } - private class CollapseExpandAction implements Runnable { - @Override - public void run() { - onQsExpansionStarted(); - if (mQsExpanded) { - flingSettings(0 /* vel */, FLING_COLLAPSE, null /* onFinishRunnable */, - true /* isClick */); - } else if (isQsExpansionEnabled()) { - mLockscreenGestureLogger.write(MetricsEvent.ACTION_SHADE_QS_TAP, 0, 0); - flingSettings(0 /* vel */, FLING_EXPAND, null /* onFinishRunnable */, - true /* isClick */); - } + private void collapseOrExpand() { + onQsExpansionStarted(); + if (mQsExpanded) { + flingSettings(0 /* vel */, FLING_COLLAPSE, null /* onFinishRunnable */, + true /* isClick */); + } else if (isQsExpansionEnabled()) { + mLockscreenGestureLogger.write(MetricsEvent.ACTION_SHADE_QS_TAP, 0, 0); + flingSettings(0 /* vel */, FLING_EXPAND, null /* onFinishRunnable */, + true /* isClick */); } } - private class OnOverscrollTopChangedListener implements + private final class NsslOverscrollTopChangedListener implements NotificationStackScrollLayout.OnOverscrollTopChangedListener { @Override public void onOverscrollTopChanged(float amount, boolean isRubberbanded) { @@ -5354,27 +5146,16 @@ public final class NotificationPanelViewController { } } - private class DynamicPrivacyControlListener implements DynamicPrivacyController.Listener { - @Override - public void onDynamicPrivacyChanged() { - // Do not request animation when pulsing or waking up, otherwise the clock wiill be out - // of sync with the notification panel. - if (mLinearDarkAmount != 0) { - return; - } - mAnimateNextPositionUpdate = true; - } - } - - private class OnEmptySpaceClickListener implements - NotificationStackScrollLayout.OnEmptySpaceClickListener { - @Override - public void onEmptySpaceClicked(float x, float y) { - onEmptySpaceClick(); + private void onDynamicPrivacyChanged() { + // Do not request animation when pulsing or waking up, otherwise the clock will be out + // of sync with the notification panel. + if (mLinearDarkAmount != 0) { + return; } + mAnimateNextPositionUpdate = true; } - private class MyOnHeadsUpChangedListener implements OnHeadsUpChangedListener { + private final class ShadeHeadsUpChangedListener implements OnHeadsUpChangedListener { @Override public void onHeadsUpPinnedModeChanged(final boolean inPinnedMode) { if (inPinnedMode) { @@ -5414,32 +5195,31 @@ public final class NotificationPanelViewController { } } - private class HeightListener implements QS.HeightListener { - public void onQsHeightChanged() { - mQsMaxExpansionHeight = mQs != null ? mQs.getDesiredHeight() : 0; - if (mQsExpanded && mQsFullyExpanded) { - mQsExpansionHeight = mQsMaxExpansionHeight; - requestScrollerTopPaddingUpdate(false /* animate */); - updateExpandedHeightToMaxHeight(); - } - if (mAccessibilityManager.isEnabled()) { - mView.setAccessibilityPaneTitle(determineAccessibilityPaneTitle()); - } - mNotificationStackScrollLayoutController.setMaxTopPadding(mQsMaxExpansionHeight); + private void onQsHeightChanged() { + mQsMaxExpansionHeight = mQs != null ? mQs.getDesiredHeight() : 0; + if (mQsExpanded && mQsFullyExpanded) { + mQsExpansionHeight = mQsMaxExpansionHeight; + requestScrollerTopPaddingUpdate(false /* animate */); + updateExpandedHeightToMaxHeight(); + } + if (mAccessibilityManager.isEnabled()) { + mView.setAccessibilityPaneTitle(determineAccessibilityPaneTitle()); } + mNotificationStackScrollLayoutController.setMaxTopPadding(mQsMaxExpansionHeight); } - private class ConfigurationListener implements ConfigurationController.ConfigurationListener { + private final class ConfigurationListener implements + ConfigurationController.ConfigurationListener { @Override public void onThemeChanged() { - if (DEBUG_LOGCAT) Log.d(TAG, "onThemeChanged"); + debugLog("onThemeChanged"); reInflateViews(); } @Override public void onSmallestScreenWidthChanged() { Trace.beginSection("onSmallestScreenWidthChanged"); - if (DEBUG_LOGCAT) Log.d(TAG, "onSmallestScreenWidthChanged"); + debugLog("onSmallestScreenWidthChanged"); // Can affect multi-user switcher visibility as it depends on screen size by default: // it is enabled only for devices with large screens (see config_keyguardUserSwitcher) @@ -5456,27 +5236,26 @@ public final class NotificationPanelViewController { @Override public void onDensityOrFontScaleChanged() { - if (DEBUG_LOGCAT) Log.d(TAG, "onDensityOrFontScaleChanged"); + debugLog("onDensityOrFontScaleChanged"); reInflateViews(); } } - private class SettingsChangeObserver extends ContentObserver { - + private final class SettingsChangeObserver extends ContentObserver { SettingsChangeObserver(Handler handler) { super(handler); } @Override public void onChange(boolean selfChange) { - if (DEBUG_LOGCAT) Log.d(TAG, "onSettingsChanged"); + debugLog("onSettingsChanged"); // Can affect multi-user switcher visibility reInflateViews(); } } - private class StatusBarStateListener implements StateListener { + private final class StatusBarStateListener implements StateListener { @Override public void onStateChanged(int statusBarState) { boolean goingToFullShade = mStatusBarStateController.goingToFullShade(); @@ -5632,21 +5411,19 @@ public final class NotificationPanelViewController { setExpandedFraction(1f); } - /** - * Sets the overstretch amount in raw pixels when dragging down. - */ - public void setOverStrechAmount(float amount) { + /** Sets the overstretch amount in raw pixels when dragging down. */ + public void setOverStretchAmount(float amount) { float progress = amount / mView.getHeight(); - float overstretch = Interpolators.getOvershootInterpolation(progress); - mOverStretchAmount = overstretch * mMaxOverscrollAmountForPulse; + float overStretch = Interpolators.getOvershootInterpolation(progress); + mOverStretchAmount = overStretch * mMaxOverscrollAmountForPulse; positionClockAndNotifications(true /* forceUpdate */); } - private class OnAttachStateChangeListener implements View.OnAttachStateChangeListener { + private final class ShadeAttachStateChangeListener implements View.OnAttachStateChangeListener { @Override public void onViewAttachedToWindow(View v) { mFragmentService.getFragmentHostManager(mView) - .addTagListener(QS.TAG, mFragmentListener); + .addTagListener(QS.TAG, mQsFragmentListener); mStatusBarStateController.addCallback(mStatusBarStateListener); mStatusBarStateListener.onStateChanged(mStatusBarStateController.getState()); mConfigurationController.addCallback(mConfigurationListener); @@ -5661,16 +5438,16 @@ public final class NotificationPanelViewController { @Override public void onViewDetachedFromWindow(View v) { - unregisterSettingsChangeListener(); + mContentResolver.unregisterContentObserver(mSettingsChangeObserver); mFragmentService.getFragmentHostManager(mView) - .removeTagListener(QS.TAG, mFragmentListener); + .removeTagListener(QS.TAG, mQsFragmentListener); mStatusBarStateController.removeCallback(mStatusBarStateListener); mConfigurationController.removeCallback(mConfigurationListener); mFalsingManager.removeTapListener(mFalsingTapListener); } } - private final class OnLayoutChangeListener implements View.OnLayoutChangeListener { + private final class ShadeLayoutChangeListener implements View.OnLayoutChangeListener { @Override public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) { @@ -5679,7 +5456,7 @@ public final class NotificationPanelViewController { mHasLayoutedSinceDown = true; if (mUpdateFlingOnLayout) { abortAnimations(); - fling(mUpdateFlingVelocity, true /* expands */); + fling(mUpdateFlingVelocity); mUpdateFlingOnLayout = false; } updateMaxDisplayedNotifications(!shouldAvoidChangingNotificationsCount()); @@ -5713,14 +5490,11 @@ public final class NotificationPanelViewController { updateExpandedHeight(getExpandedHeight()); updateHeader(); - // If we are running a size change animation, the animation takes care of the height of - // the container. However, if we are not animating, we always need to make the QS - // container - // the desired height so when closing the QS detail, it stays smaller after the size - // change - // animation is finished but the detail view is still being animated away (this - // animation - // takes longer than the size change animation). + // If we are running a size change animation, the animation takes care of the height + // of the container. However, if we are not animating, we always need to make the QS + // container the desired height so when closing the QS detail, it stays smaller after + // the size change animation is finished but the detail view is still being animated + // away (this animation takes longer than the size change animation). if (mQsSizeChangeAnimator == null && mQs != null) { mQs.setHeightOverride(mQs.getDesiredHeight()); } @@ -5746,13 +5520,12 @@ public final class NotificationPanelViewController { } } - private class DebugDrawable extends Drawable { - + private final class DebugDrawable extends Drawable { private final Set<Integer> mDebugTextUsedYPositions = new HashSet<>(); private final Paint mDebugPaint = new Paint(); @Override - public void draw(@androidx.annotation.NonNull @NonNull Canvas canvas) { + public void draw(@NonNull Canvas canvas) { mDebugTextUsedYPositions.clear(); mDebugPaint.setColor(Color.RED); @@ -5830,18 +5603,17 @@ public final class NotificationPanelViewController { } } - private class OnApplyWindowInsetsListener implements View.OnApplyWindowInsetsListener { - public WindowInsets onApplyWindowInsets(View v, WindowInsets insets) { - // the same types of insets that are handled in NotificationShadeWindowView - int insetTypes = WindowInsets.Type.systemBars() | WindowInsets.Type.displayCutout(); - Insets combinedInsets = insets.getInsetsIgnoringVisibility(insetTypes); - mDisplayTopInset = combinedInsets.top; - mDisplayRightInset = combinedInsets.right; + @NonNull + private WindowInsets onApplyShadeWindowInsets(WindowInsets insets) { + // the same types of insets that are handled in NotificationShadeWindowView + int insetTypes = WindowInsets.Type.systemBars() | WindowInsets.Type.displayCutout(); + Insets combinedInsets = insets.getInsetsIgnoringVisibility(insetTypes); + mDisplayTopInset = combinedInsets.top; + mDisplayRightInset = combinedInsets.right; - mNavigationBarBottomHeight = insets.getStableInsetBottom(); - updateMaxHeadsUpTranslation(); - return insets; - } + mNavigationBarBottomHeight = insets.getStableInsetBottom(); + updateMaxHeadsUpTranslation(); + return insets; } /** Removes any pending runnables that would collapse the panel. */ @@ -5849,9 +5621,6 @@ public final class NotificationPanelViewController { mView.removeCallbacks(mMaybeHideExpandedRunnable); } - @PanelState - private int mCurrentPanelState = STATE_CLOSED; - private void onPanelStateChanged(@PanelState int state) { updateQSExpansionEnabledAmbient(); @@ -5888,6 +5657,11 @@ public final class NotificationPanelViewController { } @VisibleForTesting + StateListener getStatusBarStateListener() { + return mStatusBarStateListener; + } + + @VisibleForTesting boolean isHintAnimationRunning() { return mHintAnimationRunning; } @@ -5935,7 +5709,7 @@ public final class NotificationPanelViewController { } if (!isFullyCollapsed() && onQsIntercept(event)) { - if (DEBUG_LOGCAT) Log.d(TAG, "onQsIntercept true"); + debugLog("onQsIntercept true"); return true; } if (mInstantExpanding || !mNotificationsDragEnabled || mTouchDisabled || (mMotionAborted @@ -6138,7 +5912,6 @@ public final class NotificationPanelViewController { * * Flinging is also enabled in order to open or close the shade. */ - int pointerIndex = event.findPointerIndex(mTrackingPointer); if (pointerIndex < 0) { pointerIndex = 0; @@ -6154,6 +5927,7 @@ public final class NotificationPanelViewController { switch (event.getActionMasked()) { case MotionEvent.ACTION_DOWN: + mShadeLog.logMotionEvent(event, "onTouch: down action"); startExpandMotion(x, y, false /* startTracking */, mExpandedHeight); mMinExpandHeight = 0.0f; mPanelClosedOnDown = isFullyCollapsed(); @@ -6242,6 +6016,7 @@ public final class NotificationPanelViewController { case MotionEvent.ACTION_UP: case MotionEvent.ACTION_CANCEL: + mShadeLog.logMotionEvent(event, "onTouch: up/cancel action"); addMovement(event); endMotionEvent(event, x, y, false /* forceCancel */); // mHeightAnimator is null, there is no remaining frame, ends instrumenting. @@ -6258,15 +6033,6 @@ public final class NotificationPanelViewController { } } - /** Listens for config changes. */ - public class OnConfigurationChangedListener implements - NotificationPanelView.OnConfigurationChangedListener { - @Override - public void onConfigurationChanged(Configuration newConfig) { - loadDimens(); - } - } - static class SplitShadeTransitionAdapter extends Transition { private static final String PROP_BOUNDS = "splitShadeTransitionAdapter:bounds"; private static final String[] TRANSITION_PROPERTIES = { PROP_BOUNDS }; @@ -6316,5 +6082,27 @@ public final class NotificationPanelViewController { return TRANSITION_PROPERTIES; } } + + private final class ShadeAccessibilityDelegate extends AccessibilityDelegate { + @Override + public void onInitializeAccessibilityNodeInfo(View host, + AccessibilityNodeInfo info) { + super.onInitializeAccessibilityNodeInfo(host, info); + info.addAction(AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_FORWARD); + info.addAction(AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_UP); + } + + @Override + public boolean performAccessibilityAction(View host, int action, Bundle args) { + if (action + == AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_FORWARD.getId() + || action + == AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_UP.getId()) { + mStatusBarKeyguardViewManager.showBouncer(true); + return true; + } + return super.performAccessibilityAction(host, action, args); + } + } } diff --git a/packages/SystemUI/src/com/android/systemui/shade/ShadeLogger.kt b/packages/SystemUI/src/com/android/systemui/shade/ShadeLogger.kt index 2b788d85a14c..7f1bba350af1 100644 --- a/packages/SystemUI/src/com/android/systemui/shade/ShadeLogger.kt +++ b/packages/SystemUI/src/com/android/systemui/shade/ShadeLogger.kt @@ -77,4 +77,50 @@ class ShadeLogger @Inject constructor(@ShadeLog private val buffer: LogBuffer) { } ) } + + fun logExpansionChanged( + message: String, + fraction: Float, + expanded: Boolean, + tracking: Boolean, + dragDownPxAmount: Float, + ) { + log(LogLevel.VERBOSE, { + str1 = message + double1 = fraction.toDouble() + bool1 = expanded + bool2 = tracking + long1 = dragDownPxAmount.toLong() + }, { + "$str1 fraction=$double1,expanded=$bool1," + + "tracking=$bool2," + "dragDownPxAmount=$dragDownPxAmount" + }) + } + + fun logQsExpansionChanged( + message: String, + qsExpanded: Boolean, + qsMinExpansionHeight: Int, + qsMaxExpansionHeight: Int, + stackScrollerOverscrolling: Boolean, + dozing: Boolean, + qsAnimatorExpand: Boolean, + animatingQs: Boolean + ) { + log(LogLevel.VERBOSE, { + str1 = message + bool1 = qsExpanded + int1 = qsMinExpansionHeight + int2 = qsMaxExpansionHeight + bool2 = stackScrollerOverscrolling + bool3 = dozing + bool4 = qsAnimatorExpand + // 0 = false, 1 = true + long1 = animatingQs.compareTo(false).toLong() + }, { + "$str1 qsExpanded=$bool1,qsMinExpansionHeight=$int1,qsMaxExpansionHeight=$int2," + + "stackScrollerOverscrolling=$bool2,dozing=$bool3,qsAnimatorExpand=$bool4," + + "animatingQs=$long1" + }) + } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeTransitionController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeTransitionController.kt index a2e4536ce45f..b8302d706e8d 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeTransitionController.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeTransitionController.kt @@ -663,7 +663,7 @@ class LockscreenShadeTransitionController @Inject constructor( } else { pulseHeight = height val overflow = nsslController.setPulseHeight(height) - notificationPanelController.setOverStrechAmount(overflow) + notificationPanelController.setOverStretchAmount(overflow) val transitionHeight = if (keyguardBypassController.bypassEnabled) height else 0.0f transitionToShadeAmountCommon(transitionHeight) } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/HeadsUpCoordinator.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/HeadsUpCoordinator.kt index 8a31ed9271ad..470cbcb842c4 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/HeadsUpCoordinator.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/HeadsUpCoordinator.kt @@ -198,6 +198,13 @@ class HeadsUpCoordinator @Inject constructor( // At this point we just need to initiate the transfer val summaryUpdate = mPostedEntries[logicalSummary.key] + // Because we now know for certain that some child is going to alert for this summary + // (as we have found a child to transfer the alert to), mark the group as having + // interrupted. This will allow us to know in the future that the "should heads up" + // state of this group has already been handled, just not via the summary entry itself. + logicalSummary.setInterruption() + mLogger.logSummaryMarkedInterrupted(logicalSummary.key, childToReceiveParentAlert.key) + // If the summary was not attached, then remove the alert from the detached summary. // Otherwise we can simply ignore its posted update. if (!isSummaryAttached) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/HeadsUpCoordinatorLogger.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/HeadsUpCoordinatorLogger.kt index dfaa291c6bb6..473c35d6095a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/HeadsUpCoordinatorLogger.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/HeadsUpCoordinatorLogger.kt @@ -69,4 +69,13 @@ class HeadsUpCoordinatorLogger constructor( "updating entry via ranking applied: $str1 updated shouldHeadsUp=$bool1" }) } + + fun logSummaryMarkedInterrupted(summaryKey: String, childKey: String) { + buffer.log(TAG, LogLevel.DEBUG, { + str1 = summaryKey + str2 = childKey + }, { + "marked group summary as interrupted: $str1 for alert transfer to child: $str2" + }) + } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java index df705c5afeef..c4ef28e889ca 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java @@ -1383,7 +1383,7 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable if (height < minExpansionHeight) { mClipRect.left = 0; mClipRect.right = getWidth(); - mClipRect.top = 0; + mClipRect.top = getNotificationsClippingTopBound(); mClipRect.bottom = (int) height; height = minExpansionHeight; setRequestedClipBounds(mClipRect); @@ -1444,6 +1444,17 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable notifyAppearChangedListeners(); } + private int getNotificationsClippingTopBound() { + if (isHeadsUpTransition()) { + // HUN in split shade can go higher than bottom of NSSL when swiping up so we want + // to give it extra clipping margin. Because clipping has rounded corners, we also + // need to account for that corner clipping. + return -mAmbientState.getStackTopMargin() - mCornerRadius; + } else { + return 0; + } + } + private void notifyAppearChangedListeners() { float appear; float expandAmount; @@ -1482,7 +1493,6 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable public void updateClipping() { boolean clipped = mRequestedClipBounds != null && !mInHeadsUpPinnedMode && !mHeadsUpAnimatingAway; - boolean clipToOutline = false; if (mIsClipped != clipped) { mIsClipped = clipped; } @@ -1498,7 +1508,7 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable setClipBounds(null); } - setClipToOutline(clipToOutline); + setClipToOutline(false); } /** diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java index d227ed366ecb..eb7a7427e07a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java @@ -3468,10 +3468,7 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces { mNavigationBarController.showPinningEscapeToast(mDisplayId); } - /** - * TODO: Remove this method. Views should not be passed forward. Will cause theme issues. - * @return bottom area view - */ + //TODO(b/254875405): this should be removed. @Override public KeyguardBottomAreaView getKeyguardBottomAreaView() { return mNotificationPanelViewController.getKeyguardBottomAreaView(); @@ -4184,7 +4181,7 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces { */ @Override public void onBouncerPreHideAnimation() { - mNotificationPanelViewController.onBouncerPreHideAnimation(); + mNotificationPanelViewController.startBouncerPreHideAnimation(); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/DeviceControlsControllerImpl.kt b/packages/SystemUI/src/com/android/systemui/statusbar/policy/DeviceControlsControllerImpl.kt index bc2ae64dd946..e3266115f777 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/DeviceControlsControllerImpl.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/DeviceControlsControllerImpl.kt @@ -67,7 +67,7 @@ public class DeviceControlsControllerImpl @Inject constructor( internal const val QS_DEFAULT_POSITION = 7 internal const val PREFS_CONTROLS_SEEDING_COMPLETED = "SeedingCompleted" - internal const val PREFS_CONTROLS_FILE = "controls_prefs" + const val PREFS_CONTROLS_FILE = "controls_prefs" internal const val PREFS_SETTINGS_DIALOG_ATTEMPTS = "show_settings_attempts" private const val SEEDING_MAX = 2 } diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.java index f9bec65ab677..52f8ef8b7ebc 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.java @@ -55,6 +55,7 @@ import com.android.keyguard.KeyguardSecurityModel.SecurityMode; import com.android.systemui.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.biometrics.SidefpsController; +import com.android.systemui.classifier.FalsingA11yDelegate; import com.android.systemui.classifier.FalsingCollector; import com.android.systemui.flags.FeatureFlags; import com.android.systemui.log.SessionTracker; @@ -143,6 +144,8 @@ public class KeyguardSecurityContainerControllerTest extends SysuiTestCase { private SidefpsController mSidefpsController; @Mock private KeyguardPasswordViewController mKeyguardPasswordViewControllerMock; + @Mock + private FalsingA11yDelegate mFalsingA11yDelegate; @Captor private ArgumentCaptor<KeyguardUpdateMonitorCallback> mKeyguardUpdateMonitorCallback; @@ -186,7 +189,8 @@ public class KeyguardSecurityContainerControllerTest extends SysuiTestCase { mKeyguardStateController, mKeyguardSecurityViewFlipperController, mConfigurationController, mFalsingCollector, mFalsingManager, mUserSwitcherController, mFeatureFlags, mGlobalSettings, - mSessionTracker, Optional.of(mSidefpsController)).create(mSecurityCallback); + mSessionTracker, Optional.of(mSidefpsController), mFalsingA11yDelegate).create( + mSecurityCallback); } @Test @@ -225,7 +229,8 @@ public class KeyguardSecurityContainerControllerTest extends SysuiTestCase { mKeyguardSecurityContainerController.updateResources(); verify(mView, never()).initMode(eq(MODE_DEFAULT), eq(mGlobalSettings), eq(mFalsingManager), eq(mUserSwitcherController), - any(KeyguardSecurityContainer.UserSwitcherViewMode.UserSwitcherCallback.class)); + any(KeyguardSecurityContainer.UserSwitcherViewMode.UserSwitcherCallback.class), + eq(mFalsingA11yDelegate)); // Update rotation. Should trigger update mConfiguration.orientation = Configuration.ORIENTATION_LANDSCAPE; @@ -233,7 +238,8 @@ public class KeyguardSecurityContainerControllerTest extends SysuiTestCase { mKeyguardSecurityContainerController.updateResources(); verify(mView).initMode(eq(MODE_DEFAULT), eq(mGlobalSettings), eq(mFalsingManager), eq(mUserSwitcherController), - any(KeyguardSecurityContainer.UserSwitcherViewMode.UserSwitcherCallback.class)); + any(KeyguardSecurityContainer.UserSwitcherViewMode.UserSwitcherCallback.class), + eq(mFalsingA11yDelegate)); } private void touchDown() { @@ -269,7 +275,8 @@ public class KeyguardSecurityContainerControllerTest extends SysuiTestCase { mKeyguardSecurityContainerController.showSecurityScreen(SecurityMode.Pattern); verify(mView).initMode(eq(MODE_DEFAULT), eq(mGlobalSettings), eq(mFalsingManager), eq(mUserSwitcherController), - any(KeyguardSecurityContainer.UserSwitcherViewMode.UserSwitcherCallback.class)); + any(KeyguardSecurityContainer.UserSwitcherViewMode.UserSwitcherCallback.class), + eq(mFalsingA11yDelegate)); } @Test @@ -282,7 +289,8 @@ public class KeyguardSecurityContainerControllerTest extends SysuiTestCase { mKeyguardSecurityContainerController.showSecurityScreen(SecurityMode.Pattern); verify(mView).initMode(eq(MODE_ONE_HANDED), eq(mGlobalSettings), eq(mFalsingManager), eq(mUserSwitcherController), - any(KeyguardSecurityContainer.UserSwitcherViewMode.UserSwitcherCallback.class)); + any(KeyguardSecurityContainer.UserSwitcherViewMode.UserSwitcherCallback.class), + eq(mFalsingA11yDelegate)); } @Test @@ -293,7 +301,8 @@ public class KeyguardSecurityContainerControllerTest extends SysuiTestCase { mKeyguardSecurityContainerController.showSecurityScreen(SecurityMode.Password); verify(mView).initMode(eq(MODE_DEFAULT), eq(mGlobalSettings), eq(mFalsingManager), eq(mUserSwitcherController), - any(KeyguardSecurityContainer.UserSwitcherViewMode.UserSwitcherCallback.class)); + any(KeyguardSecurityContainer.UserSwitcherViewMode.UserSwitcherCallback.class), + eq(mFalsingA11yDelegate)); } @Test @@ -307,7 +316,8 @@ public class KeyguardSecurityContainerControllerTest extends SysuiTestCase { mKeyguardSecurityContainerController.showSecurityScreen(SecurityMode.Password); verify(mView).initMode(anyInt(), any(GlobalSettings.class), any(FalsingManager.class), any(UserSwitcherController.class), - captor.capture()); + captor.capture(), + eq(mFalsingA11yDelegate)); captor.getValue().showUnlockToContinueMessage(); verify(mKeyguardPasswordViewControllerMock).showMessage( getContext().getString(R.string.keyguard_unlock_to_continue), null); diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerTest.java index 82d3ca785161..1bd14e558fa0 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerTest.java +++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerTest.java @@ -31,6 +31,7 @@ import static androidx.constraintlayout.widget.ConstraintSet.WRAP_CONTENT; import static com.android.keyguard.KeyguardSecurityContainer.MODE_DEFAULT; import static com.android.keyguard.KeyguardSecurityContainer.MODE_ONE_HANDED; +import static com.android.keyguard.KeyguardSecurityContainer.MODE_USER_SWITCHER; import static com.google.common.truth.Truth.assertThat; @@ -54,6 +55,7 @@ import androidx.test.filters.SmallTest; import com.android.systemui.R; import com.android.systemui.SysuiTestCase; +import com.android.systemui.classifier.FalsingA11yDelegate; import com.android.systemui.plugins.FalsingManager; import com.android.systemui.statusbar.policy.UserSwitcherController; import com.android.systemui.user.data.source.UserRecord; @@ -87,6 +89,8 @@ public class KeyguardSecurityContainerTest extends SysuiTestCase { private FalsingManager mFalsingManager; @Mock private UserSwitcherController mUserSwitcherController; + @Mock + private FalsingA11yDelegate mFalsingA11yDelegate; private KeyguardSecurityContainer mKeyguardSecurityContainer; @@ -111,15 +115,14 @@ public class KeyguardSecurityContainerTest extends SysuiTestCase { when(mUserSwitcherController.getCurrentUserName()).thenReturn("Test User"); when(mUserSwitcherController.isKeyguardShowing()).thenReturn(true); } + @Test public void testOnApplyWindowInsets() { int paddingBottom = getContext().getResources() .getDimensionPixelSize(R.dimen.keyguard_security_view_bottom_margin); int imeInsetAmount = paddingBottom + 1; int systemBarInsetAmount = 0; - - mKeyguardSecurityContainer.initMode(MODE_DEFAULT, mGlobalSettings, mFalsingManager, - mUserSwitcherController, () -> {}); + initMode(MODE_DEFAULT); Insets imeInset = Insets.of(0, 0, 0, imeInsetAmount); Insets systemBarInset = Insets.of(0, 0, 0, systemBarInsetAmount); @@ -140,8 +143,7 @@ public class KeyguardSecurityContainerTest extends SysuiTestCase { .getDimensionPixelSize(R.dimen.keyguard_security_view_bottom_margin); int systemBarInsetAmount = paddingBottom + 1; - mKeyguardSecurityContainer.initMode(MODE_DEFAULT, mGlobalSettings, mFalsingManager, - mUserSwitcherController, () -> {}); + initMode(MODE_DEFAULT); Insets imeInset = Insets.of(0, 0, 0, imeInsetAmount); Insets systemBarInset = Insets.of(0, 0, 0, systemBarInsetAmount); @@ -157,11 +159,8 @@ public class KeyguardSecurityContainerTest extends SysuiTestCase { @Test public void testDefaultViewMode() { - mKeyguardSecurityContainer.initMode(MODE_ONE_HANDED, mGlobalSettings, mFalsingManager, - mUserSwitcherController, () -> { - }); - mKeyguardSecurityContainer.initMode(MODE_DEFAULT, mGlobalSettings, mFalsingManager, - mUserSwitcherController, () -> {}); + initMode(MODE_ONE_HANDED); + initMode(MODE_DEFAULT); ConstraintSet.Constraint viewFlipperConstraint = getViewConstraint(mSecurityViewFlipper.getId()); assertThat(viewFlipperConstraint.layout.topToTop).isEqualTo(PARENT_ID); @@ -377,8 +376,7 @@ public class KeyguardSecurityContainerTest extends SysuiTestCase { private void setupUserSwitcher() { when(mGlobalSettings.getInt(any(), anyInt())).thenReturn(ONE_HANDED_KEYGUARD_SIDE_RIGHT); - mKeyguardSecurityContainer.initMode(KeyguardSecurityContainer.MODE_USER_SWITCHER, - mGlobalSettings, mFalsingManager, mUserSwitcherController, () -> {}); + initMode(MODE_USER_SWITCHER); } private ArrayList<UserRecord> buildUserRecords(int count) { @@ -396,8 +394,7 @@ public class KeyguardSecurityContainerTest extends SysuiTestCase { private void setupForUpdateKeyguardPosition(boolean oneHandedMode) { int mode = oneHandedMode ? MODE_ONE_HANDED : MODE_DEFAULT; - mKeyguardSecurityContainer.initMode(mode, mGlobalSettings, mFalsingManager, - mUserSwitcherController, () -> {}); + initMode(mode); } /** Get the ConstraintLayout constraint of the view. */ @@ -406,4 +403,10 @@ public class KeyguardSecurityContainerTest extends SysuiTestCase { constraintSet.clone(mKeyguardSecurityContainer); return constraintSet.getConstraint(viewId); } + + private void initMode(int mode) { + mKeyguardSecurityContainer.initMode(mode, mGlobalSettings, mFalsingManager, + mUserSwitcherController, () -> { + }, mFalsingA11yDelegate); + } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/classifier/BrightLineFalsingManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/classifier/BrightLineFalsingManagerTest.java index 94813497cb4c..b811aab6d35f 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/classifier/BrightLineFalsingManagerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/classifier/BrightLineFalsingManagerTest.java @@ -96,7 +96,6 @@ public class BrightLineFalsingManagerTest extends SysuiTestCase { assertThat(mBrightLineFalsingManager.isFalseTap(1)).isFalse(); } - @Test public void testA11yDisablesTap() { assertThat(mBrightLineFalsingManager.isFalseTouch(Classifier.GENERIC)).isTrue(); @@ -159,4 +158,11 @@ public class BrightLineFalsingManagerTest extends SysuiTestCase { }); assertThat(mBrightLineFalsingManager.isProximityNear()).isFalse(); } + + @Test + public void testA11yAction() { + assertThat(mBrightLineFalsingManager.isFalseTap(1)).isTrue(); + when(mFalsingDataProvider.isA11yAction()).thenReturn(true); + assertThat(mBrightLineFalsingManager.isFalseTap(1)).isFalse(); + } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/classifier/FalsingA11yDelegateTest.kt b/packages/SystemUI/tests/src/com/android/systemui/classifier/FalsingA11yDelegateTest.kt new file mode 100644 index 000000000000..2c904e7e3735 --- /dev/null +++ b/packages/SystemUI/tests/src/com/android/systemui/classifier/FalsingA11yDelegateTest.kt @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2022 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.classifier + +import android.testing.AndroidTestingRunner +import android.view.View +import android.view.accessibility.AccessibilityNodeInfo.ACTION_CLICK +import android.view.accessibility.AccessibilityNodeInfo.ACTION_LONG_CLICK +import androidx.test.filters.SmallTest +import com.android.systemui.SysuiTestCase +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith +import org.mockito.Mock +import org.mockito.Mockito.never +import org.mockito.Mockito.verify +import org.mockito.MockitoAnnotations + +@SmallTest +@RunWith(AndroidTestingRunner::class) +class FalsingA11yDelegateTest : SysuiTestCase() { + @Mock lateinit var falsingCollector: FalsingCollector + @Mock lateinit var view: View + lateinit var underTest: FalsingA11yDelegate + + @Before + fun setup() { + MockitoAnnotations.initMocks(this) + underTest = FalsingA11yDelegate(falsingCollector) + } + + @Test + fun testPerformAccessibilityAction_ACTION_CLICK() { + underTest.performAccessibilityAction(view, ACTION_CLICK, null) + verify(falsingCollector).onA11yAction() + } + + @Test + fun testPerformAccessibilityAction_not_ACTION_CLICK() { + underTest.performAccessibilityAction(view, ACTION_LONG_CLICK, null) + verify(falsingCollector, never()).onA11yAction() + } +} diff --git a/packages/SystemUI/tests/src/com/android/systemui/classifier/FalsingCollectorImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/classifier/FalsingCollectorImplTest.java index fa9c41a3cbb6..442bf918ad8c 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/classifier/FalsingCollectorImplTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/classifier/FalsingCollectorImplTest.java @@ -267,4 +267,10 @@ public class FalsingCollectorImplTest extends SysuiTestCase { mFalsingCollector.onTouchEvent(up); verify(mFalsingDataProvider, times(2)).onMotionEvent(any(MotionEvent.class)); } + + @Test + public void testOnA11yAction() { + mFalsingCollector.onA11yAction(); + verify(mFalsingDataProvider).onA11yAction(); + } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/classifier/FalsingDataProviderTest.java b/packages/SystemUI/tests/src/com/android/systemui/classifier/FalsingDataProviderTest.java index 5dc607fd342b..d315c2da0703 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/classifier/FalsingDataProviderTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/classifier/FalsingDataProviderTest.java @@ -310,4 +310,10 @@ public class FalsingDataProviderTest extends ClassifierTest { // an empty array. assertThat(mDataProvider.getPriorMotionEvents()).isNotNull(); } + + @Test + public void test_MotionEventComplete_A11yAction() { + mDataProvider.onA11yAction(); + assertThat(mDataProvider.isA11yAction()).isTrue(); + } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/clipboardoverlay/ClipboardOverlayControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/clipboardoverlay/ClipboardOverlayControllerTest.java index b7f1c1a9f001..a872e4b96cce 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/clipboardoverlay/ClipboardOverlayControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/clipboardoverlay/ClipboardOverlayControllerTest.java @@ -19,7 +19,9 @@ package com.android.systemui.clipboardoverlay; import static com.android.systemui.clipboardoverlay.ClipboardOverlayEvent.CLIPBOARD_OVERLAY_DISMISS_TAPPED; import static com.android.systemui.clipboardoverlay.ClipboardOverlayEvent.CLIPBOARD_OVERLAY_SHARE_TAPPED; import static com.android.systemui.clipboardoverlay.ClipboardOverlayEvent.CLIPBOARD_OVERLAY_SWIPE_DISMISSED; +import static com.android.systemui.flags.Flags.CLIPBOARD_REMOTE_BEHAVIOR; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.never; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; @@ -37,6 +39,7 @@ import androidx.test.runner.AndroidJUnit4; import com.android.internal.logging.UiEventLogger; import com.android.systemui.SysuiTestCase; import com.android.systemui.broadcast.BroadcastSender; +import com.android.systemui.flags.FakeFeatureFlags; import com.android.systemui.screenshot.TimeoutHandler; import org.junit.After; @@ -62,7 +65,10 @@ public class ClipboardOverlayControllerTest extends SysuiTestCase { @Mock private TimeoutHandler mTimeoutHandler; @Mock + private ClipboardOverlayUtils mClipboardUtils; + @Mock private UiEventLogger mUiEventLogger; + private FakeFeatureFlags mFeatureFlags = new FakeFeatureFlags(); @Mock private Animator mAnimator; @@ -73,7 +79,6 @@ public class ClipboardOverlayControllerTest extends SysuiTestCase { private ArgumentCaptor<ClipboardOverlayView.ClipboardOverlayCallbacks> mOverlayCallbacksCaptor; private ClipboardOverlayView.ClipboardOverlayCallbacks mCallbacks; - @Before public void setup() { MockitoAnnotations.initMocks(this); @@ -84,6 +89,8 @@ public class ClipboardOverlayControllerTest extends SysuiTestCase { mSampleClipData = new ClipData("Test", new String[]{"text/plain"}, new ClipData.Item("Test Item")); + mFeatureFlags.set(CLIPBOARD_REMOTE_BEHAVIOR, false); + mOverlayController = new ClipboardOverlayController( mContext, mClipboardOverlayView, @@ -91,6 +98,8 @@ public class ClipboardOverlayControllerTest extends SysuiTestCase { getFakeBroadcastDispatcher(), mBroadcastSender, mTimeoutHandler, + mFeatureFlags, + mClipboardUtils, mUiEventLogger); verify(mClipboardOverlayView).setCallbacks(mOverlayCallbacksCaptor.capture()); mCallbacks = mOverlayCallbacksCaptor.getValue(); @@ -186,4 +195,33 @@ public class ClipboardOverlayControllerTest extends SysuiTestCase { verify(mUiEventLogger, times(1)).log(CLIPBOARD_OVERLAY_SWIPE_DISMISSED); verify(mUiEventLogger, never()).log(CLIPBOARD_OVERLAY_DISMISS_TAPPED); } + + @Test + public void test_remoteCopy_withFlagOn() { + mFeatureFlags.set(CLIPBOARD_REMOTE_BEHAVIOR, true); + when(mClipboardUtils.isRemoteCopy(any(), any(), any())).thenReturn(true); + + mOverlayController.setClipData(mSampleClipData, ""); + + verify(mTimeoutHandler, never()).resetTimeout(); + } + + @Test + public void test_remoteCopy_withFlagOff() { + when(mClipboardUtils.isRemoteCopy(any(), any(), any())).thenReturn(true); + + mOverlayController.setClipData(mSampleClipData, ""); + + verify(mTimeoutHandler).resetTimeout(); + } + + @Test + public void test_nonRemoteCopy() { + mFeatureFlags.set(CLIPBOARD_REMOTE_BEHAVIOR, true); + when(mClipboardUtils.isRemoteCopy(any(), any(), any())).thenReturn(false); + + mOverlayController.setClipData(mSampleClipData, ""); + + verify(mTimeoutHandler).resetTimeout(); + } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/clipboardoverlay/ClipboardOverlayUtilsTest.java b/packages/SystemUI/tests/src/com/android/systemui/clipboardoverlay/ClipboardOverlayUtilsTest.java new file mode 100644 index 000000000000..09b1699d3ffc --- /dev/null +++ b/packages/SystemUI/tests/src/com/android/systemui/clipboardoverlay/ClipboardOverlayUtilsTest.java @@ -0,0 +1,103 @@ +/* + * Copyright (C) 2022 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.clipboardoverlay; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import android.content.ClipData; +import android.content.ClipDescription; +import android.os.PersistableBundle; +import android.testing.TestableResources; + +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; + +import com.android.systemui.R; +import com.android.systemui.SysuiTestCase; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; + +@SmallTest +@RunWith(AndroidJUnit4.class) +public class ClipboardOverlayUtilsTest extends SysuiTestCase { + + private ClipboardOverlayUtils mClipboardUtils; + + @Before + public void setUp() { + mClipboardUtils = new ClipboardOverlayUtils(); + } + + @Test + public void test_extra_withPackage_returnsTrue() { + PersistableBundle b = new PersistableBundle(); + b.putBoolean(ClipDescription.EXTRA_IS_REMOTE_DEVICE, true); + ClipData data = constructClipData( + new String[]{"text/plain"}, new ClipData.Item("6175550000"), b); + TestableResources res = mContext.getOrCreateTestableResources(); + res.addOverride( + R.string.config_remoteCopyPackage, "com.android.remote/.RemoteActivity"); + + assertTrue(mClipboardUtils.isRemoteCopy(mContext, data, "com.android.remote")); + } + + @Test + public void test_noExtra_returnsFalse() { + ClipData data = constructClipData( + new String[]{"text/plain"}, new ClipData.Item("6175550000"), null); + TestableResources res = mContext.getOrCreateTestableResources(); + res.addOverride( + R.string.config_remoteCopyPackage, "com.android.remote/.RemoteActivity"); + + assertFalse(mClipboardUtils.isRemoteCopy(mContext, data, "com.android.remote")); + } + + @Test + public void test_falseExtra_returnsFalse() { + PersistableBundle b = new PersistableBundle(); + b.putBoolean(ClipDescription.EXTRA_IS_REMOTE_DEVICE, false); + ClipData data = constructClipData( + new String[]{"text/plain"}, new ClipData.Item("6175550000"), b); + TestableResources res = mContext.getOrCreateTestableResources(); + res.addOverride( + R.string.config_remoteCopyPackage, "com.android.remote/.RemoteActivity"); + + assertFalse(mClipboardUtils.isRemoteCopy(mContext, data, "com.android.remote")); + } + + @Test + public void test_wrongPackage_returnsFalse() { + PersistableBundle b = new PersistableBundle(); + b.putBoolean(ClipDescription.EXTRA_IS_REMOTE_DEVICE, true); + ClipData data = constructClipData( + new String[]{"text/plain"}, new ClipData.Item("6175550000"), b); + + assertFalse(mClipboardUtils.isRemoteCopy(mContext, data, "")); + } + + static ClipData constructClipData(String[] mimeTypes, ClipData.Item item, + PersistableBundle extras) { + ClipDescription description = new ClipDescription("Test", mimeTypes); + if (extras != null) { + description.setExtras(extras); + } + return new ClipData(description, item); + } +} diff --git a/packages/SystemUI/tests/src/com/android/systemui/controls/ui/ControlsUiControllerImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/controls/ui/ControlsUiControllerImplTest.kt new file mode 100644 index 000000000000..49c7442b9708 --- /dev/null +++ b/packages/SystemUI/tests/src/com/android/systemui/controls/ui/ControlsUiControllerImplTest.kt @@ -0,0 +1,155 @@ +/* + * Copyright (C) 2022 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.controls.ui + +import android.content.ComponentName +import android.testing.AndroidTestingRunner +import android.testing.TestableLooper +import androidx.test.filters.SmallTest +import com.android.systemui.SysuiTestCase +import com.android.systemui.controls.ControlsMetricsLogger +import com.android.systemui.controls.CustomIconCache +import com.android.systemui.controls.controller.ControlsController +import com.android.systemui.controls.controller.StructureInfo +import com.android.systemui.controls.management.ControlsListingController +import com.android.systemui.plugins.ActivityStarter +import com.android.systemui.settings.UserFileManager +import com.android.systemui.settings.UserTracker +import com.android.systemui.shade.ShadeController +import com.android.systemui.statusbar.policy.DeviceControlsControllerImpl +import com.android.systemui.statusbar.policy.KeyguardStateController +import com.android.systemui.util.FakeSharedPreferences +import com.android.systemui.util.concurrency.FakeExecutor +import com.android.systemui.util.time.FakeSystemClock +import com.google.common.truth.Truth.assertThat +import dagger.Lazy +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith +import org.mockito.Mock +import org.mockito.Mockito.anyInt +import org.mockito.Mockito.anyString +import org.mockito.Mockito.mock +import org.mockito.Mockito.times +import org.mockito.Mockito.verify +import org.mockito.Mockito.`when` +import org.mockito.MockitoAnnotations + +@SmallTest +@RunWith(AndroidTestingRunner::class) +@TestableLooper.RunWithLooper +class ControlsUiControllerImplTest : SysuiTestCase() { + @Mock lateinit var controlsController: ControlsController + @Mock lateinit var controlsListingController: ControlsListingController + @Mock lateinit var controlActionCoordinator: ControlActionCoordinator + @Mock lateinit var activityStarter: ActivityStarter + @Mock lateinit var shadeController: ShadeController + @Mock lateinit var iconCache: CustomIconCache + @Mock lateinit var controlsMetricsLogger: ControlsMetricsLogger + @Mock lateinit var keyguardStateController: KeyguardStateController + @Mock lateinit var userFileManager: UserFileManager + @Mock lateinit var userTracker: UserTracker + val sharedPreferences = FakeSharedPreferences() + + var uiExecutor = FakeExecutor(FakeSystemClock()) + var bgExecutor = FakeExecutor(FakeSystemClock()) + lateinit var underTest: ControlsUiControllerImpl + + @Before + fun setup() { + MockitoAnnotations.initMocks(this) + + underTest = + ControlsUiControllerImpl( + Lazy { controlsController }, + context, + uiExecutor, + bgExecutor, + Lazy { controlsListingController }, + controlActionCoordinator, + activityStarter, + shadeController, + iconCache, + controlsMetricsLogger, + keyguardStateController, + userFileManager, + userTracker + ) + `when`( + userFileManager.getSharedPreferences( + DeviceControlsControllerImpl.PREFS_CONTROLS_FILE, + 0, + 0 + ) + ) + .thenReturn(sharedPreferences) + `when`(userFileManager.getSharedPreferences(anyString(), anyInt(), anyInt())) + .thenReturn(sharedPreferences) + `when`(userTracker.userId).thenReturn(0) + } + + @Test + fun testGetPreferredStructure() { + val structureInfo = mock(StructureInfo::class.java) + underTest.getPreferredStructure(listOf(structureInfo)) + verify(userFileManager, times(2)) + .getSharedPreferences( + fileName = DeviceControlsControllerImpl.PREFS_CONTROLS_FILE, + mode = 0, + userId = 0 + ) + } + + @Test + fun testGetPreferredStructure_differentUserId() { + val structureInfo = + listOf( + StructureInfo(ComponentName.unflattenFromString("pkg/.cls1"), "a", ArrayList()), + StructureInfo(ComponentName.unflattenFromString("pkg/.cls2"), "b", ArrayList()), + ) + sharedPreferences + .edit() + .putString("controls_component", structureInfo[0].componentName.flattenToString()) + .putString("controls_structure", structureInfo[0].structure.toString()) + .commit() + + val differentSharedPreferences = FakeSharedPreferences() + differentSharedPreferences + .edit() + .putString("controls_component", structureInfo[1].componentName.flattenToString()) + .putString("controls_structure", structureInfo[1].structure.toString()) + .commit() + + val previousPreferredStructure = underTest.getPreferredStructure(structureInfo) + + `when`( + userFileManager.getSharedPreferences( + DeviceControlsControllerImpl.PREFS_CONTROLS_FILE, + 0, + 1 + ) + ) + .thenReturn(differentSharedPreferences) + `when`(userTracker.userId).thenReturn(1) + + val currentPreferredStructure = underTest.getPreferredStructure(structureInfo) + + assertThat(previousPreferredStructure).isEqualTo(structureInfo[0]) + assertThat(currentPreferredStructure).isEqualTo(structureInfo[1]) + assertThat(currentPreferredStructure).isNotEqualTo(previousPreferredStructure) + } +} diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/ColorSchemeTransitionTest.kt b/packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/ColorSchemeTransitionTest.kt index 5bb74e5a31f1..a8f413848009 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/ColorSchemeTransitionTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/ColorSchemeTransitionTest.kt @@ -25,6 +25,7 @@ import com.android.systemui.SysuiTestCase import com.android.systemui.media.controls.models.GutsViewHolder import com.android.systemui.media.controls.models.player.MediaViewHolder import com.android.systemui.monet.ColorScheme +import com.android.systemui.ripple.MultiRippleController import junit.framework.Assert.assertEquals import org.junit.After import org.junit.Before @@ -60,6 +61,7 @@ class ColorSchemeTransitionTest : SysuiTestCase() { private lateinit var animatingColorTransitionFactory: AnimatingColorTransitionFactory @Mock private lateinit var mediaViewHolder: MediaViewHolder @Mock private lateinit var gutsViewHolder: GutsViewHolder + @Mock private lateinit var multiRippleController: MultiRippleController @JvmField @Rule val mockitoRule = MockitoJUnit.rule() @@ -70,7 +72,12 @@ class ColorSchemeTransitionTest : SysuiTestCase() { whenever(extractColor.invoke(colorScheme)).thenReturn(TARGET_COLOR) colorSchemeTransition = - ColorSchemeTransition(context, mediaViewHolder, animatingColorTransitionFactory) + ColorSchemeTransition( + context, + mediaViewHolder, + multiRippleController, + animatingColorTransitionFactory + ) colorTransition = object : AnimatingColorTransition(DEFAULT_COLOR, extractColor, applyColor) { diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/MediaControlPanelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/MediaControlPanelTest.kt index 584305334b6f..81901569bde8 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/MediaControlPanelTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/MediaControlPanelTest.kt @@ -59,6 +59,8 @@ import com.android.systemui.R import com.android.systemui.SysuiTestCase import com.android.systemui.bluetooth.BroadcastDialogController import com.android.systemui.broadcast.BroadcastSender +import com.android.systemui.flags.FakeFeatureFlags +import com.android.systemui.flags.Flags import com.android.systemui.media.controls.MediaTestUtils import com.android.systemui.media.controls.models.GutsViewHolder import com.android.systemui.media.controls.models.player.MediaAction @@ -76,6 +78,7 @@ import com.android.systemui.media.controls.util.MediaUiEventLogger import com.android.systemui.media.dialog.MediaOutputDialogFactory import com.android.systemui.plugins.ActivityStarter import com.android.systemui.plugins.FalsingManager +import com.android.systemui.ripple.MultiRippleView import com.android.systemui.statusbar.NotificationLockscreenUserManager import com.android.systemui.statusbar.policy.KeyguardStateController import com.android.systemui.util.animation.TransitionLayout @@ -174,6 +177,7 @@ public class MediaControlPanelTest : SysuiTestCase() { private lateinit var cancelText: TextView private lateinit var dismiss: FrameLayout private lateinit var dismissText: TextView + private lateinit var multiRippleView: MultiRippleView private lateinit var session: MediaSession private lateinit var device: MediaDeviceData @@ -205,6 +209,8 @@ public class MediaControlPanelTest : SysuiTestCase() { private lateinit var recSubtitle2: TextView private lateinit var recSubtitle3: TextView private var shouldShowBroadcastButton: Boolean = false + private val fakeFeatureFlag = + FakeFeatureFlags().apply { this.set(Flags.UMO_SURFACE_RIPPLE, false) } @JvmField @Rule val mockito = MockitoJUnit.rule() @@ -244,7 +250,8 @@ public class MediaControlPanelTest : SysuiTestCase() { keyguardStateController, activityIntentHelper, lockscreenUserManager, - broadcastDialogController + broadcastDialogController, + fakeFeatureFlag ) { override fun loadAnimator( animId: Int, @@ -374,6 +381,8 @@ public class MediaControlPanelTest : SysuiTestCase() { ) } + multiRippleView = MultiRippleView(context, null) + whenever(viewHolder.player).thenReturn(view) whenever(viewHolder.appIcon).thenReturn(appIcon) whenever(viewHolder.albumView).thenReturn(albumView) @@ -414,6 +423,8 @@ public class MediaControlPanelTest : SysuiTestCase() { whenever(viewHolder.getAction(R.id.action4)).thenReturn(action4) whenever(viewHolder.actionsTopBarrier).thenReturn(actionsTopBarrier) + + whenever(viewHolder.multiRippleView).thenReturn(multiRippleView) } /** Initialize elements for the recommendation view holder */ @@ -1973,6 +1984,50 @@ public class MediaControlPanelTest : SysuiTestCase() { assertThat(expandedSet.getVisibility(recSubtitle3.id)).isEqualTo(ConstraintSet.GONE) } + @Test + fun onButtonClick_touchRippleFlagEnabled_playsTouchRipple() { + fakeFeatureFlag.set(Flags.UMO_SURFACE_RIPPLE, true) + val semanticActions = + MediaButton( + playOrPause = + MediaAction( + icon = null, + action = {}, + contentDescription = "play", + background = null + ) + ) + val data = mediaData.copy(semanticActions = semanticActions) + player.attachPlayer(viewHolder) + player.bindPlayer(data, KEY) + + viewHolder.actionPlayPause.callOnClick() + + assertThat(viewHolder.multiRippleView.ripples.size).isEqualTo(1) + } + + @Test + fun onButtonClick_touchRippleFlagDisabled_doesNotPlayTouchRipple() { + fakeFeatureFlag.set(Flags.UMO_SURFACE_RIPPLE, false) + val semanticActions = + MediaButton( + playOrPause = + MediaAction( + icon = null, + action = {}, + contentDescription = "play", + background = null + ) + ) + val data = mediaData.copy(semanticActions = semanticActions) + player.attachPlayer(viewHolder) + player.bindPlayer(data, KEY) + + viewHolder.actionPlayPause.callOnClick() + + assertThat(viewHolder.multiRippleView.ripples.size).isEqualTo(0) + } + private fun getScrubbingChangeListener(): SeekBarViewModel.ScrubbingChangeListener = withArgCaptor { verify(seekBarViewModel).setScrubbingChangeListener(capture()) diff --git a/packages/SystemUI/tests/src/com/android/systemui/ripple/MultiRippleControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/ripple/MultiRippleControllerTest.kt new file mode 100644 index 000000000000..05512e5bf1ce --- /dev/null +++ b/packages/SystemUI/tests/src/com/android/systemui/ripple/MultiRippleControllerTest.kt @@ -0,0 +1,104 @@ +/* + * Copyright (C) 2022 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.ripple + +import android.graphics.Color +import android.testing.AndroidTestingRunner +import androidx.test.filters.SmallTest +import com.android.systemui.SysuiTestCase +import com.android.systemui.ripple.MultiRippleController.Companion.MAX_RIPPLE_NUMBER +import com.android.systemui.util.concurrency.FakeExecutor +import com.android.systemui.util.time.FakeSystemClock +import com.google.common.truth.Truth.assertThat +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith + +@SmallTest +@RunWith(AndroidTestingRunner::class) +class MultiRippleControllerTest : SysuiTestCase() { + private lateinit var multiRippleController: MultiRippleController + private lateinit var multiRippleView: MultiRippleView + private lateinit var rippleAnimationConfig: RippleAnimationConfig + private val fakeSystemClock = FakeSystemClock() + + // FakeExecutor is needed to run animator. + private val fakeExecutor = FakeExecutor(fakeSystemClock) + + @Before + fun setup() { + rippleAnimationConfig = RippleAnimationConfig(duration = 1000L) + multiRippleView = MultiRippleView(context, null) + multiRippleController = MultiRippleController(multiRippleView) + } + + @Test + fun updateColor_updatesColor() { + val initialColor = Color.WHITE + val expectedColor = Color.RED + + fakeExecutor.execute { + val rippleAnimation = + RippleAnimation(rippleAnimationConfig.apply { this.color = initialColor }) + + with(multiRippleController) { + play(rippleAnimation) + updateColor(expectedColor) + } + + assertThat(rippleAnimationConfig.color).isEqualTo(expectedColor) + } + } + + @Test + fun play_playsRipple() { + fakeExecutor.execute { + val rippleAnimation = RippleAnimation(rippleAnimationConfig) + + multiRippleController.play(rippleAnimation) + + assertThat(multiRippleView.ripples.size).isEqualTo(1) + assertThat(multiRippleView.ripples[0]).isEqualTo(rippleAnimation) + } + } + + @Test + fun play_doesNotExceedMaxRipple() { + fakeExecutor.execute { + for (i in 0..MAX_RIPPLE_NUMBER + 10) { + multiRippleController.play(RippleAnimation(rippleAnimationConfig)) + } + + assertThat(multiRippleView.ripples.size).isEqualTo(MAX_RIPPLE_NUMBER) + } + } + + @Test + fun play_onEnd_removesAnimation() { + fakeExecutor.execute { + val rippleAnimation = RippleAnimation(rippleAnimationConfig) + multiRippleController.play(rippleAnimation) + + assertThat(multiRippleView.ripples.size).isEqualTo(1) + assertThat(multiRippleView.ripples[0]).isEqualTo(rippleAnimation) + + fakeSystemClock.advanceTime(rippleAnimationConfig.duration) + + assertThat(multiRippleView.ripples.size).isEqualTo(0) + } + } +} diff --git a/packages/SystemUI/tests/src/com/android/systemui/ripple/RippleAnimationTest.kt b/packages/SystemUI/tests/src/com/android/systemui/ripple/RippleAnimationTest.kt new file mode 100644 index 000000000000..7662282a04f4 --- /dev/null +++ b/packages/SystemUI/tests/src/com/android/systemui/ripple/RippleAnimationTest.kt @@ -0,0 +1,106 @@ +/* + * Copyright (C) 2022 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.ripple + +import android.graphics.Color +import android.testing.AndroidTestingRunner +import androidx.core.graphics.ColorUtils +import androidx.test.filters.SmallTest +import com.android.systemui.SysuiTestCase +import com.android.systemui.util.concurrency.FakeExecutor +import com.android.systemui.util.time.FakeSystemClock +import com.google.common.truth.Truth.assertThat +import org.junit.Test +import org.junit.runner.RunWith + +@SmallTest +@RunWith(AndroidTestingRunner::class) +class RippleAnimationTest : SysuiTestCase() { + + private val fakeSystemClock = FakeSystemClock() + private val fakeExecutor = FakeExecutor(fakeSystemClock) + + @Test + fun init_shaderHasCorrectConfig() { + val config = + RippleAnimationConfig( + duration = 3000L, + pixelDensity = 2f, + color = Color.RED, + opacity = 30, + shouldFillRipple = true, + sparkleStrength = 0.3f + ) + val rippleAnimation = RippleAnimation(config) + + with(rippleAnimation.rippleShader) { + assertThat(rippleFill).isEqualTo(config.shouldFillRipple) + assertThat(pixelDensity).isEqualTo(config.pixelDensity) + assertThat(color).isEqualTo(ColorUtils.setAlphaComponent(config.color, config.opacity)) + assertThat(sparkleStrength).isEqualTo(config.sparkleStrength) + } + } + + @Test + fun updateColor_updatesColorCorrectly() { + val initialColor = Color.WHITE + val expectedColor = Color.RED + val config = RippleAnimationConfig(color = initialColor) + val rippleAnimation = RippleAnimation(config) + + fakeExecutor.execute { + with(rippleAnimation) { + play() + updateColor(expectedColor) + } + + assertThat(config.color).isEqualTo(expectedColor) + } + } + + @Test + fun play_updatesIsPlaying() { + val config = RippleAnimationConfig(duration = 1000L) + val rippleAnimation = RippleAnimation(config) + + fakeExecutor.execute { + rippleAnimation.play() + + assertThat(rippleAnimation.isPlaying()).isTrue() + + // move time to finish the animation + fakeSystemClock.advanceTime(config.duration) + + assertThat(rippleAnimation.isPlaying()).isFalse() + } + } + + @Test + fun play_onEnd_triggersOnAnimationEnd() { + val config = RippleAnimationConfig(duration = 1000L) + val rippleAnimation = RippleAnimation(config) + var animationEnd = false + + fakeExecutor.execute { + rippleAnimation.play(onAnimationEnd = { animationEnd = true }) + + fakeSystemClock.advanceTime(config.duration) + + assertThat(animationEnd).isTrue() + } + } +} diff --git a/packages/SystemUI/tests/src/com/android/systemui/screenshot/ImageExporterTest.java b/packages/SystemUI/tests/src/com/android/systemui/screenshot/ImageExporterTest.java index 4c44dacab1a2..f4bc232702e8 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/screenshot/ImageExporterTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/screenshot/ImageExporterTest.java @@ -23,6 +23,7 @@ import static org.junit.Assert.assertTrue; import static java.nio.charset.StandardCharsets.US_ASCII; +import android.content.ContentProvider; import android.content.ContentResolver; import android.content.ContentValues; import android.graphics.Bitmap; @@ -31,9 +32,11 @@ import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; +import android.net.Uri; import android.os.Build; import android.os.ParcelFileDescriptor; import android.os.Process; +import android.os.UserHandle; import android.provider.MediaStore; import android.testing.AndroidTestingRunner; @@ -41,11 +44,18 @@ import androidx.exifinterface.media.ExifInterface; import androidx.test.filters.MediumTest; import com.android.systemui.SysuiTestCase; +import com.android.systemui.flags.FakeFeatureFlags; +import com.android.systemui.flags.Flags; import com.google.common.util.concurrent.ListenableFuture; +import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.MockitoAnnotations; import java.io.ByteArrayInputStream; import java.io.IOException; @@ -60,7 +70,6 @@ import java.util.concurrent.Executor; @RunWith(AndroidTestingRunner.class) @MediumTest // file I/O public class ImageExporterTest extends SysuiTestCase { - /** Executes directly in the caller's thread */ private static final Executor DIRECT_EXECUTOR = Runnable::run; private static final byte[] EXIF_FILE_TAG = "Exif\u0000\u0000".getBytes(US_ASCII); @@ -68,6 +77,15 @@ public class ImageExporterTest extends SysuiTestCase { private static final ZonedDateTime CAPTURE_TIME = ZonedDateTime.of(LocalDateTime.of(2020, 12, 15, 13, 15), ZoneId.of("EST")); + private FakeFeatureFlags mFeatureFlags = new FakeFeatureFlags(); + @Mock + private ContentResolver mMockContentResolver; + + @Before + public void setup() { + MockitoAnnotations.initMocks(this); + } + @Test public void testImageFilename() { assertEquals("image file name", "Screenshot_20201215-131500.png", @@ -92,7 +110,8 @@ public class ImageExporterTest extends SysuiTestCase { @Test public void testImageExport() throws ExecutionException, InterruptedException, IOException { ContentResolver contentResolver = mContext.getContentResolver(); - ImageExporter exporter = new ImageExporter(contentResolver); + mFeatureFlags.set(Flags.SCREENSHOT_WORK_PROFILE_POLICY, true); + ImageExporter exporter = new ImageExporter(contentResolver, mFeatureFlags); UUID requestId = UUID.fromString("3c11da99-9284-4863-b1d5-6f3684976814"); Bitmap original = createCheckerBitmap(10, 10, 10); @@ -168,6 +187,44 @@ public class ImageExporterTest extends SysuiTestCase { values.getAsLong(MediaStore.MediaColumns.DATE_EXPIRES)); } + @Test + public void testSetUser() { + mFeatureFlags.set(Flags.SCREENSHOT_WORK_PROFILE_POLICY, true); + ImageExporter exporter = new ImageExporter(mMockContentResolver, mFeatureFlags); + + UserHandle imageUserHande = UserHandle.of(10); + + ArgumentCaptor<Uri> uriCaptor = ArgumentCaptor.forClass(Uri.class); + // Capture the URI and then return null to bail out of export. + Mockito.when(mMockContentResolver.insert(uriCaptor.capture(), Mockito.any())).thenReturn( + null); + exporter.export(DIRECT_EXECUTOR, UUID.fromString("3c11da99-9284-4863-b1d5-6f3684976814"), + null, CAPTURE_TIME, imageUserHande); + + Uri expected = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; + expected = ContentProvider.maybeAddUserId(expected, imageUserHande.getIdentifier()); + + assertEquals(expected, uriCaptor.getValue()); + } + + @Test + public void testSetUser_noWorkProfile() { + mFeatureFlags.set(Flags.SCREENSHOT_WORK_PROFILE_POLICY, false); + ImageExporter exporter = new ImageExporter(mMockContentResolver, mFeatureFlags); + + UserHandle imageUserHandle = UserHandle.of(10); + + ArgumentCaptor<Uri> uriCaptor = ArgumentCaptor.forClass(Uri.class); + // Capture the URI and then return null to bail out of export. + Mockito.when(mMockContentResolver.insert(uriCaptor.capture(), Mockito.any())).thenReturn( + null); + exporter.export(DIRECT_EXECUTOR, UUID.fromString("3c11da99-9284-4863-b1d5-6f3684976814"), + null, CAPTURE_TIME, imageUserHandle); + + // The user handle should be ignored here since the flag is off. + assertEquals(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, uriCaptor.getValue()); + } + @SuppressWarnings("SameParameterValue") private Bitmap createCheckerBitmap(int tileSize, int w, int h) { Bitmap bitmap = Bitmap.createBitmap(w * tileSize, h * tileSize, Bitmap.Config.ARGB_8888); diff --git a/packages/SystemUI/tests/src/com/android/systemui/screenshot/TakeScreenshotServiceTest.kt b/packages/SystemUI/tests/src/com/android/systemui/screenshot/TakeScreenshotServiceTest.kt index 3a4da86b8045..fa1fedb7c119 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/screenshot/TakeScreenshotServiceTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/screenshot/TakeScreenshotServiceTest.kt @@ -62,7 +62,7 @@ import org.mockito.Mockito.verifyZeroInteractions import org.mockito.Mockito.`when` as whenever private const val USER_ID = 1 -private const val TASK_ID = 1 +private const val TASK_ID = 11 @RunWith(AndroidTestingRunner::class) @SmallTest diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerTest.java index dbf9e67dfe19..45b4353d0ec0 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerTest.java @@ -129,7 +129,6 @@ import com.android.systemui.statusbar.QsFrameTranslateController; import com.android.systemui.statusbar.StatusBarStateControllerImpl; import com.android.systemui.statusbar.SysuiStatusBarStateController; import com.android.systemui.statusbar.VibratorHelper; -import com.android.systemui.statusbar.events.PrivacyDotViewController; import com.android.systemui.statusbar.notification.ConversationNotificationManager; import com.android.systemui.statusbar.notification.DynamicPrivacyController; import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator; @@ -153,7 +152,6 @@ import com.android.systemui.statusbar.phone.KeyguardBypassController; import com.android.systemui.statusbar.phone.KeyguardStatusBarView; import com.android.systemui.statusbar.phone.KeyguardStatusBarViewController; import com.android.systemui.statusbar.phone.LockscreenGestureLogger; -import com.android.systemui.statusbar.phone.NotificationIconAreaController; import com.android.systemui.statusbar.phone.ScreenOffAnimationController; import com.android.systemui.statusbar.phone.ScrimController; import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; @@ -199,7 +197,6 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase { @Mock private KeyguardBottomAreaView mKeyguardBottomArea; @Mock private KeyguardBottomAreaViewController mKeyguardBottomAreaViewController; @Mock private KeyguardBottomAreaView mQsFrame; - @Mock private NotificationIconAreaController mNotificationAreaController; @Mock private HeadsUpManagerPhone mHeadsUpManager; @Mock private NotificationShelfController mNotificationShelfController; @Mock private KeyguardStatusBarView mKeyguardStatusBar; @@ -227,7 +224,7 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase { @Mock private Resources mResources; @Mock private Configuration mConfiguration; @Mock private KeyguardClockSwitch mKeyguardClockSwitch; - @Mock private MediaHierarchyManager mMediaHiearchyManager; + @Mock private MediaHierarchyManager mMediaHierarchyManager; @Mock private ConversationNotificationManager mConversationNotificationManager; @Mock private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager; @Mock private KeyguardStatusViewComponent.Factory mKeyguardStatusViewComponentFactory; @@ -254,7 +251,6 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase { @Mock private UiEventLogger mUiEventLogger; @Mock private LockIconViewController mLockIconViewController; @Mock private KeyguardMediaController mKeyguardMediaController; - @Mock private PrivacyDotViewController mPrivacyDotViewController; @Mock private NavigationModeController mNavigationModeController; @Mock private NavigationBarController mNavigationBarController; @Mock private LargeScreenShadeHeaderController mLargeScreenShadeHeaderController; @@ -294,7 +290,7 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase { private ConfigurationController mConfigurationController; private SysuiStatusBarStateController mStatusBarStateController; private NotificationPanelViewController mNotificationPanelViewController; - private View.AccessibilityDelegate mAccessibiltyDelegate; + private View.AccessibilityDelegate mAccessibilityDelegate; private NotificationsQuickSettingsContainer mNotificationContainerParent; private List<View.OnAttachStateChangeListener> mOnAttachStateChangeListeners; private Handler mMainHandler; @@ -456,7 +452,7 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase { mShadeLog, mConfigurationController, () -> flingAnimationUtilsBuilder, mStatusBarTouchableRegionManager, - mConversationNotificationManager, mMediaHiearchyManager, + mConversationNotificationManager, mMediaHierarchyManager, mStatusBarKeyguardViewManager, mNotificationsQSContainerController, mNotificationStackScrollLayoutController, @@ -465,7 +461,6 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase { mKeyguardUserSwitcherComponentFactory, mKeyguardStatusBarViewComponentFactory, mLockscreenShadeTransitionController, - mNotificationAreaController, mAuthController, mScrimController, mUserManager, @@ -474,7 +469,6 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase { mAmbientState, mLockIconViewController, mKeyguardMediaController, - mPrivacyDotViewController, mTapAgainViewController, mNavigationModeController, mNavigationBarController, @@ -516,9 +510,9 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase { ArgumentCaptor<View.AccessibilityDelegate> accessibilityDelegateArgumentCaptor = ArgumentCaptor.forClass(View.AccessibilityDelegate.class); verify(mView).setAccessibilityDelegate(accessibilityDelegateArgumentCaptor.capture()); - mAccessibiltyDelegate = accessibilityDelegateArgumentCaptor.getValue(); + mAccessibilityDelegate = accessibilityDelegateArgumentCaptor.getValue(); mNotificationPanelViewController.getStatusBarStateController() - .addCallback(mNotificationPanelViewController.mStatusBarStateListener); + .addCallback(mNotificationPanelViewController.getStatusBarStateListener()); mNotificationPanelViewController .setHeadsUpAppearanceController(mock(HeadsUpAppearanceController.class)); verify(mNotificationStackScrollLayoutController) @@ -773,8 +767,8 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase { 0L /* eventTime */, MotionEvent.ACTION_UP, 0f /* x */, 300f /* y */, 0 /* metaState */)); - assertThat(mNotificationPanelViewController.getClosing()).isTrue(); - assertThat(mNotificationPanelViewController.getIsFlinging()).isTrue(); + assertThat(mNotificationPanelViewController.isClosing()).isTrue(); + assertThat(mNotificationPanelViewController.isFlinging()).isTrue(); // simulate touch that does not exceed touch slop onTouchEvent(MotionEvent.obtain(2L /* downTime */, @@ -788,8 +782,8 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase { 0 /* metaState */)); // fling should still be called after a touch that does not exceed touch slop - assertThat(mNotificationPanelViewController.getClosing()).isTrue(); - assertThat(mNotificationPanelViewController.getIsFlinging()).isTrue(); + assertThat(mNotificationPanelViewController.isClosing()).isTrue(); + assertThat(mNotificationPanelViewController.isFlinging()).isTrue(); } @Test @@ -844,7 +838,7 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase { @Test public void testA11y_initializeNode() { AccessibilityNodeInfo nodeInfo = new AccessibilityNodeInfo(); - mAccessibiltyDelegate.onInitializeAccessibilityNodeInfo(mView, nodeInfo); + mAccessibilityDelegate.onInitializeAccessibilityNodeInfo(mView, nodeInfo); List<AccessibilityNodeInfo.AccessibilityAction> actionList = nodeInfo.getActionList(); assertThat(actionList).containsAtLeastElementsIn( @@ -856,7 +850,7 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase { @Test public void testA11y_scrollForward() { - mAccessibiltyDelegate.performAccessibilityAction( + mAccessibilityDelegate.performAccessibilityAction( mView, AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_FORWARD.getId(), null); @@ -866,7 +860,7 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase { @Test public void testA11y_scrollUp() { - mAccessibiltyDelegate.performAccessibilityAction( + mAccessibilityDelegate.performAccessibilityAction( mView, AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_UP.getId(), null); @@ -1282,7 +1276,7 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase { mNotificationPanelViewController.expandWithQs(); verify(mLockscreenShadeTransitionController).goToLockedShade( - /* expandedView= */null, /* needsQSAnimation= */false); + /* expandedView= */null, /* needsQSAnimation= */true); } @Test @@ -1329,11 +1323,11 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase { public void testQsToBeImmediatelyExpandedWhenOpeningPanelInSplitShade() { enableSplitShade(/* enabled= */ true); mShadeExpansionStateManager.updateState(STATE_CLOSED); - assertThat(mNotificationPanelViewController.mQsExpandImmediate).isFalse(); + assertThat(mNotificationPanelViewController.isQsExpandImmediate()).isFalse(); mShadeExpansionStateManager.updateState(STATE_OPENING); - assertThat(mNotificationPanelViewController.mQsExpandImmediate).isTrue(); + assertThat(mNotificationPanelViewController.isQsExpandImmediate()).isTrue(); } @Test @@ -1345,18 +1339,18 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase { // going to lockscreen would trigger STATE_OPENING mShadeExpansionStateManager.updateState(STATE_OPENING); - assertThat(mNotificationPanelViewController.mQsExpandImmediate).isFalse(); + assertThat(mNotificationPanelViewController.isQsExpandImmediate()).isFalse(); } @Test public void testQsImmediateResetsWhenPanelOpensOrCloses() { - mNotificationPanelViewController.mQsExpandImmediate = true; + mNotificationPanelViewController.setQsExpandImmediate(true); mShadeExpansionStateManager.updateState(STATE_OPEN); - assertThat(mNotificationPanelViewController.mQsExpandImmediate).isFalse(); + assertThat(mNotificationPanelViewController.isQsExpandImmediate()).isFalse(); - mNotificationPanelViewController.mQsExpandImmediate = true; + mNotificationPanelViewController.setQsExpandImmediate(true); mShadeExpansionStateManager.updateState(STATE_CLOSED); - assertThat(mNotificationPanelViewController.mQsExpandImmediate).isFalse(); + assertThat(mNotificationPanelViewController.isQsExpandImmediate()).isFalse(); } @Test @@ -1399,7 +1393,7 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase { @Test public void interceptTouchEvent_withinQs_shadeExpanded_startsQsTracking() { - mNotificationPanelViewController.mQs = mQs; + mNotificationPanelViewController.setQs(mQs); when(mQsFrame.getX()).thenReturn(0f); when(mQsFrame.getWidth()).thenReturn(1000); when(mQsHeader.getTop()).thenReturn(0); @@ -1419,7 +1413,7 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase { @Test public void interceptTouchEvent_withinQs_shadeExpanded_inSplitShade_doesNotStartQsTracking() { enableSplitShade(true); - mNotificationPanelViewController.mQs = mQs; + mNotificationPanelViewController.setQs(mQs); when(mQsFrame.getX()).thenReturn(0f); when(mQsFrame.getWidth()).thenReturn(1000); when(mQsHeader.getTop()).thenReturn(0); @@ -1495,7 +1489,7 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase { @Test public void onLayoutChange_fullWidth_updatesQSWithFullWithTrue() { - mNotificationPanelViewController.mQs = mQs; + mNotificationPanelViewController.setQs(mQs); setIsFullWidth(true); @@ -1504,7 +1498,7 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase { @Test public void onLayoutChange_notFullWidth_updatesQSWithFullWithFalse() { - mNotificationPanelViewController.mQs = mQs; + mNotificationPanelViewController.setQs(mQs); setIsFullWidth(false); @@ -1513,7 +1507,7 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase { @Test public void onLayoutChange_qsNotSet_doesNotCrash() { - mNotificationPanelViewController.mQs = null; + mNotificationPanelViewController.setQs(null); triggerLayoutChange(); } @@ -1539,7 +1533,7 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase { @Test public void setQsExpansion_lockscreenShadeTransitionInProgress_usesLockscreenSquishiness() { float squishinessFraction = 0.456f; - mNotificationPanelViewController.mQs = mQs; + mNotificationPanelViewController.setQs(mQs); when(mLockscreenShadeTransitionController.getQsSquishTransitionFraction()) .thenReturn(squishinessFraction); when(mNotificationStackScrollLayoutController.getNotificationSquishinessFraction()) @@ -1567,7 +1561,7 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase { public void setQsExpansion_lockscreenShadeTransitionNotInProgress_usesStandardSquishiness() { float lsSquishinessFraction = 0.456f; float nsslSquishinessFraction = 0.987f; - mNotificationPanelViewController.mQs = mQs; + mNotificationPanelViewController.setQs(mQs); when(mLockscreenShadeTransitionController.getQsSquishTransitionFraction()) .thenReturn(lsSquishinessFraction); when(mNotificationStackScrollLayoutController.getNotificationSquishinessFraction()) @@ -1586,7 +1580,7 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase { @Test public void onEmptySpaceClicked_notDozingAndOnKeyguard_requestsFaceAuth() { StatusBarStateController.StateListener statusBarStateListener = - mNotificationPanelViewController.mStatusBarStateListener; + mNotificationPanelViewController.getStatusBarStateListener(); statusBarStateListener.onStateChanged(KEYGUARD); mNotificationPanelViewController.setDozing(false, false); @@ -1601,7 +1595,7 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase { @Test public void onEmptySpaceClicked_notDozingAndFaceDetectionIsNotRunning_startsUnlockAnimation() { StatusBarStateController.StateListener statusBarStateListener = - mNotificationPanelViewController.mStatusBarStateListener; + mNotificationPanelViewController.getStatusBarStateListener(); statusBarStateListener.onStateChanged(KEYGUARD); mNotificationPanelViewController.setDozing(false, false); when(mUpdateMonitor.requestFaceAuth(NOTIFICATION_PANEL_CLICKED)).thenReturn(false); @@ -1616,7 +1610,7 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase { @Test public void onEmptySpaceClicked_notDozingAndFaceDetectionIsRunning_doesNotStartUnlockHint() { StatusBarStateController.StateListener statusBarStateListener = - mNotificationPanelViewController.mStatusBarStateListener; + mNotificationPanelViewController.getStatusBarStateListener(); statusBarStateListener.onStateChanged(KEYGUARD); mNotificationPanelViewController.setDozing(false, false); when(mUpdateMonitor.requestFaceAuth(NOTIFICATION_PANEL_CLICKED)).thenReturn(true); @@ -1631,7 +1625,7 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase { @Test public void onEmptySpaceClicked_whenDozingAndOnKeyguard_doesNotRequestFaceAuth() { StatusBarStateController.StateListener statusBarStateListener = - mNotificationPanelViewController.mStatusBarStateListener; + mNotificationPanelViewController.getStatusBarStateListener(); statusBarStateListener.onStateChanged(KEYGUARD); mNotificationPanelViewController.setDozing(true, false); @@ -1645,7 +1639,7 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase { @Test public void onEmptySpaceClicked_whenStatusBarShadeLocked_doesNotRequestFaceAuth() { StatusBarStateController.StateListener statusBarStateListener = - mNotificationPanelViewController.mStatusBarStateListener; + mNotificationPanelViewController.getStatusBarStateListener(); statusBarStateListener.onStateChanged(SHADE_LOCKED); mEmptySpaceClickListenerCaptor.getValue().onEmptySpaceClicked(0, 0); @@ -1664,11 +1658,11 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase { public void onShadeFlingClosingEnd_mAmbientStateSetClose_thenOnExpansionStopped() { // Given: Shade is expanded mNotificationPanelViewController.notifyExpandingFinished(); - mNotificationPanelViewController.setIsClosing(false); + mNotificationPanelViewController.setClosing(false); // When: Shade flings to close not canceled mNotificationPanelViewController.notifyExpandingStarted(); - mNotificationPanelViewController.setIsClosing(true); + mNotificationPanelViewController.setClosing(true); mNotificationPanelViewController.onFlingEnd(false); // Then: AmbientState's mIsClosing should be set to false diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/HeadsUpCoordinatorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/HeadsUpCoordinatorTest.kt index 3ff7639e9262..f96c39f007dd 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/HeadsUpCoordinatorTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/HeadsUpCoordinatorTest.kt @@ -406,6 +406,10 @@ class HeadsUpCoordinatorTest : SysuiTestCase() { verify(mHeadsUpManager, never()).showNotification(mGroupSummary) verify(mHeadsUpManager).showNotification(mGroupSibling1) + + // In addition make sure we have explicitly marked the summary as having interrupted due + // to the alert being transferred + assertTrue(mGroupSummary.hasInterrupted()) } @Test @@ -424,6 +428,7 @@ class HeadsUpCoordinatorTest : SysuiTestCase() { verify(mHeadsUpManager, never()).showNotification(mGroupSummary) verify(mHeadsUpManager).showNotification(mGroupChild1) + assertTrue(mGroupSummary.hasInterrupted()) } @Test @@ -449,6 +454,7 @@ class HeadsUpCoordinatorTest : SysuiTestCase() { verify(mHeadsUpManager, never()).showNotification(mGroupSummary) verify(mHeadsUpManager).showNotification(mGroupSibling1) verify(mHeadsUpManager, never()).showNotification(mGroupSibling2) + assertTrue(mGroupSummary.hasInterrupted()) } @Test @@ -474,6 +480,7 @@ class HeadsUpCoordinatorTest : SysuiTestCase() { verify(mHeadsUpManager, never()).showNotification(mGroupSummary) verify(mHeadsUpManager).showNotification(mGroupChild1) verify(mHeadsUpManager, never()).showNotification(mGroupChild2) + assertTrue(mGroupSummary.hasInterrupted()) } @Test @@ -512,6 +519,7 @@ class HeadsUpCoordinatorTest : SysuiTestCase() { verify(mHeadsUpManager).showNotification(mGroupPriority) verify(mHeadsUpManager, never()).showNotification(mGroupSibling1) verify(mHeadsUpManager, never()).showNotification(mGroupSibling2) + assertTrue(mGroupSummary.hasInterrupted()) } @Test @@ -548,6 +556,7 @@ class HeadsUpCoordinatorTest : SysuiTestCase() { verify(mHeadsUpManager).showNotification(mGroupPriority) verify(mHeadsUpManager, never()).showNotification(mGroupSibling1) verify(mHeadsUpManager, never()).showNotification(mGroupSibling2) + assertTrue(mGroupSummary.hasInterrupted()) } @Test @@ -582,6 +591,7 @@ class HeadsUpCoordinatorTest : SysuiTestCase() { verify(mHeadsUpManager).showNotification(mGroupPriority) verify(mHeadsUpManager, never()).showNotification(mGroupSibling1) verify(mHeadsUpManager, never()).showNotification(mGroupSibling2) + assertTrue(mGroupSummary.hasInterrupted()) } @Test @@ -672,6 +682,35 @@ class HeadsUpCoordinatorTest : SysuiTestCase() { } @Test + fun testNoTransfer_groupSummaryNotAlerting() { + // When we have a group where the summary should not alert and exactly one child should + // alert, we should never mark the group summary as interrupted (because it doesn't). + setShouldHeadsUp(mGroupSummary, false) + setShouldHeadsUp(mGroupChild1, true) + setShouldHeadsUp(mGroupChild2, false) + + mCollectionListener.onEntryAdded(mGroupSummary) + mCollectionListener.onEntryAdded(mGroupChild1) + mCollectionListener.onEntryAdded(mGroupChild2) + val groupEntry = GroupEntryBuilder() + .setSummary(mGroupSummary) + .setChildren(listOf(mGroupChild1, mGroupChild2)) + .build() + mBeforeTransformGroupsListener.onBeforeTransformGroups(listOf(groupEntry)) + verify(mHeadsUpViewBinder, never()).bindHeadsUpView(any(), any()) + mBeforeFinalizeFilterListener.onBeforeFinalizeFilter(listOf(groupEntry)) + + verify(mHeadsUpViewBinder, never()).bindHeadsUpView(eq(mGroupSummary), any()) + finishBind(mGroupChild1) + verify(mHeadsUpViewBinder, never()).bindHeadsUpView(eq(mGroupChild2), any()) + + verify(mHeadsUpManager, never()).showNotification(mGroupSummary) + verify(mHeadsUpManager).showNotification(mGroupChild1) + verify(mHeadsUpManager, never()).showNotification(mGroupChild2) + assertFalse(mGroupSummary.hasInterrupted()) + } + + @Test fun testOnRankingApplied_newEntryShouldAlert() { // GIVEN that mEntry has never interrupted in the past, and now should // and is new enough to do so diff --git a/packages/VpnDialogs/res/values-es-rUS/strings.xml b/packages/VpnDialogs/res/values-es-rUS/strings.xml index 108a24e7930e..232b53ab3d48 100644 --- a/packages/VpnDialogs/res/values-es-rUS/strings.xml +++ b/packages/VpnDialogs/res/values-es-rUS/strings.xml @@ -17,7 +17,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="prompt" msgid="3183836924226407828">"Solicitud de conexión"</string> - <string name="warning" msgid="809658604548412033">"<xliff:g id="APP">%s</xliff:g> quiere configurar una conexión VPN capaz de controlar el tráfico de la red. Acéptala solo si confías en la fuente. <br /> <br /> <img src=vpn_icon /> aparece en la parte superior de la pantalla cuando se activa la VPN."</string> + <string name="warning" msgid="809658604548412033">"<xliff:g id="APP">%s</xliff:g> quiere configurar una conexión VPN capaz de supervisar el tráfico de la red. Acéptala solo si confías en la fuente. <br /> <br /> <img src=vpn_icon /> aparece en la parte superior de la pantalla cuando se activa la VPN."</string> <string name="warning" product="tv" msgid="5188957997628124947">"<xliff:g id="APP">%s</xliff:g> quiere configurar una conexión VPN que le permita supervisar el tráfico de red. Solo acéptala si confías en la fuente. <br /> <br /> <img src=vpn_icon /> aparecerá en tu pantalla cuando se active la VPN."</string> <string name="legacy_title" msgid="192936250066580964">"La VPN está conectada."</string> <string name="session" msgid="6470628549473641030">"Sesión:"</string> diff --git a/packages/VpnDialogs/res/values-es/strings.xml b/packages/VpnDialogs/res/values-es/strings.xml index 9bf86f51f8fe..4e21fd099892 100644 --- a/packages/VpnDialogs/res/values-es/strings.xml +++ b/packages/VpnDialogs/res/values-es/strings.xml @@ -17,7 +17,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="prompt" msgid="3183836924226407828">"Solicitud de conexión"</string> - <string name="warning" msgid="809658604548412033">"<xliff:g id="APP">%s</xliff:g> quiere configurar una conexión VPN para controlar el tráfico de red. Solo debes aceptarla si confías en la fuente. <br /> <br /> <img src=vpn_icon /> aparece en la parte superior de la pantalla cuando se active la conexión VPN."</string> + <string name="warning" msgid="809658604548412033">"<xliff:g id="APP">%s</xliff:g> quiere configurar una conexión VPN para controlar el tráfico de red. Solo debes aceptarla si confías en la fuente. <br /> <br /> <img src=vpn_icon /> aparece en la parte superior de la pantalla cuando la conexión VPN está activa."</string> <string name="warning" product="tv" msgid="5188957997628124947">"<xliff:g id="APP">%s</xliff:g> quiere configurar una conexión VPN que le permita monitorizar el tráfico de red. Acéptalo solo si confías en la fuente. <br /> <br /> <img src=vpn_icon /> aparecerá en la pantalla cuando la VPN esté activa."</string> <string name="legacy_title" msgid="192936250066580964">"La VPN está conectada"</string> <string name="session" msgid="6470628549473641030">"Sesión:"</string> diff --git a/packages/VpnDialogs/res/values-nl/strings.xml b/packages/VpnDialogs/res/values-nl/strings.xml index 33f8a89a1562..76f56afb63df 100644 --- a/packages/VpnDialogs/res/values-nl/strings.xml +++ b/packages/VpnDialogs/res/values-nl/strings.xml @@ -17,7 +17,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="prompt" msgid="3183836924226407828">"Verbindingsverzoek"</string> - <string name="warning" msgid="809658604548412033">"<xliff:g id="APP">%s</xliff:g> wil een VPN-verbinding opzetten om netwerkverkeer te controleren. Accepteer het verzoek alleen als je de bron vertrouwt. <br /> <br /> <img src=vpn_icon /> wordt boven aan je scherm weergegeven wanneer VPN actief is."</string> + <string name="warning" msgid="809658604548412033">"<xliff:g id="APP">%s</xliff:g> wil een VPN-verbinding instellen waarmee de app het netwerkverkeer kan bijhouden. Accepteer dit alleen als je de bron vertrouwt. <br /> <br /> <img src=vpn_icon /> verschijnt op je scherm als het VPN actief is."</string> <string name="warning" product="tv" msgid="5188957997628124947">"<xliff:g id="APP">%s</xliff:g> wil een VPN-verbinding instellen waarmee de app het netwerkverkeer kan bijhouden. Accepteer dit alleen als je de bron vertrouwt. <br /> <br /> <img src=vpn_icon /> verschijnt op je scherm als het VPN actief is."</string> <string name="legacy_title" msgid="192936250066580964">"Verbinding met VPN"</string> <string name="session" msgid="6470628549473641030">"Sessie:"</string> diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java index 47b415630de8..e3ae03cbcdd8 100644 --- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java +++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java @@ -3651,6 +3651,10 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub throw new IllegalArgumentException("The display " + displayId + " does not exist or is" + " not tracked by accessibility."); } + if (mProxyManager.isProxyed(displayId)) { + throw new IllegalArgumentException("The display " + displayId + " is already being" + + "proxy-ed"); + } mProxyManager.registerProxy(client, displayId); return true; diff --git a/services/accessibility/java/com/android/server/accessibility/ProxyAccessibilityServiceConnection.java b/services/accessibility/java/com/android/server/accessibility/ProxyAccessibilityServiceConnection.java index 934b665d7dae..247f320adecd 100644 --- a/services/accessibility/java/com/android/server/accessibility/ProxyAccessibilityServiceConnection.java +++ b/services/accessibility/java/com/android/server/accessibility/ProxyAccessibilityServiceConnection.java @@ -32,6 +32,7 @@ import android.os.Handler; import android.os.IBinder; import android.os.RemoteCallback; import android.view.KeyEvent; +import android.view.accessibility.AccessibilityDisplayProxy; import android.view.accessibility.AccessibilityNodeInfo; import androidx.annotation.Nullable; @@ -44,7 +45,7 @@ import java.util.List; import java.util.Set; /** - * Represents the system connection to an {@link android.view.accessibility.AccessibilityProxy}. + * Represents the system connection to an {@link AccessibilityDisplayProxy}. * * <p>Most methods are no-ops since this connection does not need to capture input or listen to * hardware-related changes. diff --git a/services/accessibility/java/com/android/server/accessibility/ProxyManager.java b/services/accessibility/java/com/android/server/accessibility/ProxyManager.java index fb0b8f3b17b1..a2ce61063aaf 100644 --- a/services/accessibility/java/com/android/server/accessibility/ProxyManager.java +++ b/services/accessibility/java/com/android/server/accessibility/ProxyManager.java @@ -16,6 +16,8 @@ package com.android.server.accessibility; import android.accessibilityservice.IAccessibilityServiceClient; +import java.util.HashSet; + /** * Manages proxy connections. * @@ -26,6 +28,7 @@ import android.accessibilityservice.IAccessibilityServiceClient; */ public class ProxyManager { private final Object mLock; + private final HashSet<Integer> mDisplayIds = new HashSet<>(); ProxyManager(Object lock) { mLock = lock; @@ -35,12 +38,21 @@ public class ProxyManager { * TODO: Create the proxy service connection. */ public void registerProxy(IAccessibilityServiceClient client, int displayId) { + mDisplayIds.add(displayId); } /** * TODO: Unregister the proxy service connection based on display id. */ public boolean unregisterProxy(int displayId) { + mDisplayIds.remove(displayId); return true; } + + /** + * Checks if a display id is being proxy-ed. + */ + public boolean isProxyed(int displayId) { + return mDisplayIds.contains(displayId); + } } diff --git a/services/core/java/com/android/server/am/UserController.java b/services/core/java/com/android/server/am/UserController.java index 82d239f59f1e..8d3890ce9d5a 100644 --- a/services/core/java/com/android/server/am/UserController.java +++ b/services/core/java/com/android/server/am/UserController.java @@ -2185,8 +2185,6 @@ class UserController implements Handler.Callback { mHandler.sendMessage(mHandler.obtainMessage(COMPLETE_USER_SWITCH_MSG, newUserId, 0)); uss.switching = false; - mHandler.removeMessages(REPORT_USER_SWITCH_COMPLETE_MSG); - mHandler.sendMessage(mHandler.obtainMessage(REPORT_USER_SWITCH_COMPLETE_MSG, newUserId, 0)); stopGuestOrEphemeralUserIfBackground(oldUserId); stopUserOnSwitchIfEnforced(oldUserId); if (oldUserId == UserHandle.USER_SYSTEM) { @@ -2200,21 +2198,22 @@ class UserController implements Handler.Callback { @VisibleForTesting void completeUserSwitch(int newUserId) { - if (isUserSwitchUiEnabled()) { - // If there is no challenge set, dismiss the keyguard right away - if (!mInjector.getKeyguardManager().isDeviceSecure(newUserId)) { - // Wait until the keyguard is dismissed to unfreeze - mInjector.dismissKeyguard( - new Runnable() { - public void run() { - unfreezeScreen(); - } - }, - "User Switch"); - return; - } else { + final boolean isUserSwitchUiEnabled = isUserSwitchUiEnabled(); + final Runnable runnable = () -> { + if (isUserSwitchUiEnabled) { unfreezeScreen(); } + mHandler.removeMessages(REPORT_USER_SWITCH_COMPLETE_MSG); + mHandler.sendMessage(mHandler.obtainMessage( + REPORT_USER_SWITCH_COMPLETE_MSG, newUserId, 0)); + }; + + // If there is no challenge set, dismiss the keyguard right away + if (isUserSwitchUiEnabled && !mInjector.getKeyguardManager().isDeviceSecure(newUserId)) { + // Wait until the keyguard is dismissed to unfreeze + mInjector.dismissKeyguard(runnable, "User Switch"); + } else { + runnable.run(); } } diff --git a/services/core/java/com/android/server/biometrics/sensors/AcquisitionClient.java b/services/core/java/com/android/server/biometrics/sensors/AcquisitionClient.java index 1d90954c44f6..055c63dd7e69 100644 --- a/services/core/java/com/android/server/biometrics/sensors/AcquisitionClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/AcquisitionClient.java @@ -38,8 +38,7 @@ import java.util.function.Supplier; * Abstract {@link HalClientMonitor} subclass that operations eligible/interested in acquisition * messages should extend. */ -public abstract class AcquisitionClient<T> extends HalClientMonitor<T> implements Interruptable, - ErrorConsumer { +public abstract class AcquisitionClient<T> extends HalClientMonitor<T> implements ErrorConsumer { private static final String TAG = "Biometrics/AcquisitionClient"; @@ -217,4 +216,9 @@ public abstract class AcquisitionClient<T> extends HalClientMonitor<T> implement HARDWARE_FEEDBACK_VIBRATION_ATTRIBUTES); } } + + @Override + public boolean isInterruptable() { + return true; + } } diff --git a/services/core/java/com/android/server/biometrics/sensors/BaseClientMonitor.java b/services/core/java/com/android/server/biometrics/sensors/BaseClientMonitor.java index da7781add8c6..0216e49b531b 100644 --- a/services/core/java/com/android/server/biometrics/sensors/BaseClientMonitor.java +++ b/services/core/java/com/android/server/biometrics/sensors/BaseClientMonitor.java @@ -193,9 +193,9 @@ public abstract class BaseClientMonitor implements IBinder.DeathRecipient { } // If the current client dies we should cancel the current operation. - if (this instanceof Interruptable) { + if (this.isInterruptable()) { Slog.e(TAG, "Binder died, cancelling client"); - ((Interruptable) this).cancel(); + this.cancel(); } mToken = null; if (clearListener) { @@ -320,4 +320,12 @@ public abstract class BaseClientMonitor implements IBinder.DeathRecipient { } callback.onClientFinished(this, true /* success */); } + + /** + * Checks if other client monitor can interrupt current client monitor + * @return if current client can be interrupted + */ + public boolean isInterruptable() { + return false; + } } diff --git a/services/core/java/com/android/server/biometrics/sensors/BiometricSchedulerOperation.java b/services/core/java/com/android/server/biometrics/sensors/BiometricSchedulerOperation.java index dacec38b0e7e..4825f1dea66f 100644 --- a/services/core/java/com/android/server/biometrics/sensors/BiometricSchedulerOperation.java +++ b/services/core/java/com/android/server/biometrics/sensors/BiometricSchedulerOperation.java @@ -46,7 +46,7 @@ public class BiometricSchedulerOperation { /** * The operation is added to the list of pending operations, but a subsequent operation - * has been added. This state only applies to {@link Interruptable} operations. When this + * has been added. This state only applies to interruptable operations. When this * operation reaches the head of the queue, it will send ERROR_CANCELED and finish. */ protected static final int STATE_WAITING_IN_QUEUE_CANCELING = 1; @@ -347,9 +347,9 @@ public class BiometricSchedulerOperation { return mClientMonitor == clientMonitor; } - /** If this operation is {@link Interruptable}. */ + /** If this operation is interruptable. */ public boolean isInterruptable() { - return mClientMonitor instanceof Interruptable; + return mClientMonitor.isInterruptable(); } private boolean isHalOperation() { diff --git a/services/core/java/com/android/server/biometrics/sensors/Interruptable.java b/services/core/java/com/android/server/biometrics/sensors/Interruptable.java deleted file mode 100644 index 4f645efcccf0..000000000000 --- a/services/core/java/com/android/server/biometrics/sensors/Interruptable.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * 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.server.biometrics.sensors; - -import android.annotation.NonNull; - -/** - * Interface that {@link BaseClientMonitor} subclasses eligible for cancellation should implement. - */ -public interface Interruptable { - /** - * Requests to end the ClientMonitor's lifecycle. - */ - void cancel(); - - /** - * Notifies the client that it needs to finish before - * {@link BaseClientMonitor#start(ClientMonitorCallback)} was invoked. This usually happens - * if the client is still waiting in the pending queue and got notified that a subsequent - * operation is preempting it. - * - * This method must invoke - * {@link ClientMonitorCallback#onClientFinished(BaseClientMonitor, boolean)} on the - * given callback (with success). - * - * @param callback invoked when the operation is completed. - */ - void cancelWithoutStarting(@NonNull ClientMonitorCallback callback); -} diff --git a/services/core/java/com/android/server/biometrics/sensors/face/aidl/Sensor.java b/services/core/java/com/android/server/biometrics/sensors/face/aidl/Sensor.java index 800d4b8acf61..0f5cdc3e1cf8 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/aidl/Sensor.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/aidl/Sensor.java @@ -59,7 +59,6 @@ import com.android.server.biometrics.sensors.BaseClientMonitor; import com.android.server.biometrics.sensors.BiometricScheduler; import com.android.server.biometrics.sensors.EnumerateConsumer; import com.android.server.biometrics.sensors.ErrorConsumer; -import com.android.server.biometrics.sensors.Interruptable; import com.android.server.biometrics.sensors.LockoutCache; import com.android.server.biometrics.sensors.LockoutConsumer; import com.android.server.biometrics.sensors.LockoutResetDispatcher; @@ -638,7 +637,7 @@ public class Sensor { public void onBinderDied() { final BaseClientMonitor client = mScheduler.getCurrentClient(); - if (client instanceof Interruptable) { + if (client.isInterruptable()) { Slog.e(mTag, "Sending ERROR_HW_UNAVAILABLE for client: " + client); final ErrorConsumer errorConsumer = (ErrorConsumer) client; errorConsumer.onError(FaceManager.FACE_ERROR_HW_UNAVAILABLE, diff --git a/services/core/java/com/android/server/connectivity/Vpn.java b/services/core/java/com/android/server/connectivity/Vpn.java index 45b0f0a6d04a..c671a2c0cdad 100644 --- a/services/core/java/com/android/server/connectivity/Vpn.java +++ b/services/core/java/com/android/server/connectivity/Vpn.java @@ -28,6 +28,7 @@ import static android.net.VpnManager.NOTIFICATION_CHANNEL_VPN; import static android.os.PowerWhitelistManager.REASON_VPN; import static android.os.UserHandle.PER_USER_RANGE; +import static com.android.net.module.util.NetworkStackConstants.IPV6_MIN_MTU; import static com.android.server.vcn.util.PersistableBundleUtils.STRING_DESERIALIZER; import static java.util.Objects.requireNonNull; @@ -84,6 +85,7 @@ import android.net.VpnManager; import android.net.VpnProfileState; import android.net.VpnService; import android.net.VpnTransportInfo; +import android.net.ipsec.ike.ChildSaProposal; import android.net.ipsec.ike.ChildSessionCallback; import android.net.ipsec.ike.ChildSessionConfiguration; import android.net.ipsec.ike.ChildSessionParams; @@ -93,6 +95,7 @@ import android.net.ipsec.ike.IkeSessionConfiguration; import android.net.ipsec.ike.IkeSessionConnectionInfo; import android.net.ipsec.ike.IkeSessionParams; import android.net.ipsec.ike.IkeTunnelConnectionParams; +import android.net.ipsec.ike.exceptions.IkeIOException; import android.net.ipsec.ike.exceptions.IkeNetworkLostException; import android.net.ipsec.ike.exceptions.IkeNonProtocolException; import android.net.ipsec.ike.exceptions.IkeProtocolException; @@ -140,6 +143,7 @@ import com.android.net.module.util.NetworkStackConstants; import com.android.server.DeviceIdleInternal; import com.android.server.LocalServices; import com.android.server.net.BaseNetworkObserver; +import com.android.server.vcn.util.MtuUtils; import com.android.server.vcn.util.PersistableBundleUtils; import libcore.io.IoUtils; @@ -152,6 +156,8 @@ import java.io.OutputStream; import java.net.Inet4Address; import java.net.Inet6Address; import java.net.InetAddress; +import java.net.NetworkInterface; +import java.net.SocketException; import java.net.UnknownHostException; import java.nio.charset.StandardCharsets; import java.security.GeneralSecurityException; @@ -165,6 +171,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; +import java.util.HashSet; import java.util.List; import java.util.Objects; import java.util.Set; @@ -551,6 +558,24 @@ public class Vpn { return DATA_STALL_RESET_DELAYS_SEC[count]; } } + + /** Gets the MTU of an interface using Java NetworkInterface primitives */ + public int getJavaNetworkInterfaceMtu(@Nullable String iface, int defaultValue) + throws SocketException { + if (iface == null) return defaultValue; + + final NetworkInterface networkInterface = NetworkInterface.getByName(iface); + return networkInterface == null ? defaultValue : networkInterface.getMTU(); + } + + /** Calculates the VPN Network's max MTU based on underlying network and configuration */ + public int calculateVpnMtu( + @NonNull List<ChildSaProposal> childProposals, + int maxMtu, + int underlyingMtu, + boolean isIpv4) { + return MtuUtils.getMtu(childProposals, maxMtu, underlyingMtu, isIpv4); + } } @VisibleForTesting @@ -1397,6 +1422,11 @@ public class Vpn { } private LinkProperties makeLinkProperties() { + // The design of disabling IPv6 is only enabled for IKEv2 VPN because it needs additional + // logic to handle IPv6 only VPN, and the IPv6 only VPN may be restarted when its MTU + // is lower than 1280. The logic is controlled by IKEv2VpnRunner, so the design is only + // enabled for IKEv2 VPN. + final boolean disableIPV6 = (isIkev2VpnRunner() && mConfig.mtu < IPV6_MIN_MTU); boolean allowIPv4 = mConfig.allowIPv4; boolean allowIPv6 = mConfig.allowIPv6; @@ -1406,6 +1436,7 @@ public class Vpn { if (mConfig.addresses != null) { for (LinkAddress address : mConfig.addresses) { + if (disableIPV6 && address.isIpv6()) continue; lp.addLinkAddress(address); allowIPv4 |= address.getAddress() instanceof Inet4Address; allowIPv6 |= address.getAddress() instanceof Inet6Address; @@ -1414,8 +1445,9 @@ public class Vpn { if (mConfig.routes != null) { for (RouteInfo route : mConfig.routes) { + final InetAddress address = route.getDestination().getAddress(); + if (disableIPV6 && address instanceof Inet6Address) continue; lp.addRoute(route); - InetAddress address = route.getDestination().getAddress(); if (route.getType() == RouteInfo.RTN_UNICAST) { allowIPv4 |= address instanceof Inet4Address; @@ -1426,7 +1458,8 @@ public class Vpn { if (mConfig.dnsServers != null) { for (String dnsServer : mConfig.dnsServers) { - InetAddress address = InetAddresses.parseNumericAddress(dnsServer); + final InetAddress address = InetAddresses.parseNumericAddress(dnsServer); + if (disableIPV6 && address instanceof Inet6Address) continue; lp.addDnsServer(address); allowIPv4 |= address instanceof Inet4Address; allowIPv6 |= address instanceof Inet6Address; @@ -1440,7 +1473,7 @@ public class Vpn { NetworkStackConstants.IPV4_ADDR_ANY, 0), null /*gateway*/, null /*iface*/, RTN_UNREACHABLE)); } - if (!allowIPv6) { + if (!allowIPv6 || disableIPV6) { lp.addRoute(new RouteInfo(new IpPrefix( NetworkStackConstants.IPV6_ADDR_ANY, 0), null /*gateway*/, null /*iface*/, RTN_UNREACHABLE)); @@ -1576,6 +1609,18 @@ public class Vpn { updateState(DetailedState.DISCONNECTED, "agentDisconnect"); } + @GuardedBy("this") + private void startNewNetworkAgent(NetworkAgent oldNetworkAgent, String reason) { + // Initialize the state for a new agent, while keeping the old one connected + // in case this new connection fails. + mNetworkAgent = null; + updateState(DetailedState.CONNECTING, reason); + // Bringing up a new NetworkAgent to prevent the data leakage before tearing down the old + // NetworkAgent. + agentConnect(); + agentDisconnect(oldNetworkAgent); + } + /** * Establish a VPN network and return the file descriptor of the VPN interface. This methods * returns {@code null} if the application is revoked or not prepared. @@ -1665,16 +1710,7 @@ public class Vpn { setUnderlyingNetworks(config.underlyingNetworks); } } else { - // Initialize the state for a new agent, while keeping the old one connected - // in case this new connection fails. - mNetworkAgent = null; - updateState(DetailedState.CONNECTING, "establish"); - // Set up forwarding and DNS rules. - agentConnect(); - // Remove the old tun's user forwarding rules - // The new tun's user rules have already been added above so they will take over - // as rules are deleted. This prevents data leakage as the rules are moved over. - agentDisconnect(oldNetworkAgent); + startNewNetworkAgent(oldNetworkAgent, "establish"); } if (oldConnection != null) { @@ -2711,6 +2747,17 @@ public class Vpn { void onSessionLost(int token, @Nullable Exception exception); } + private static boolean isIPv6Only(List<LinkAddress> linkAddresses) { + boolean hasIPV6 = false; + boolean hasIPV4 = false; + for (final LinkAddress address : linkAddresses) { + hasIPV6 |= address.isIpv6(); + hasIPV4 |= address.isIpv4(); + } + + return hasIPV6 && !hasIPV4; + } + /** * Internal class managing IKEv2/IPsec VPN connectivity * @@ -2924,15 +2971,27 @@ public class Vpn { try { final String interfaceName = mTunnelIface.getInterfaceName(); - final int maxMtu = mProfile.getMaxMtu(); final List<LinkAddress> internalAddresses = childConfig.getInternalAddresses(); final List<String> dnsAddrStrings = new ArrayList<>(); + int vpnMtu; + vpnMtu = calculateVpnMtu(); + + // If the VPN is IPv6 only and its MTU is lower than 1280, mark the network as lost + // and send the VpnManager event to the VPN app. + if (isIPv6Only(internalAddresses) && vpnMtu < IPV6_MIN_MTU) { + onSessionLost( + token, + new IkeIOException( + new IOException("No valid addresses for MTU < 1280"))); + return; + } final Collection<RouteInfo> newRoutes = VpnIkev2Utils.getRoutesFromTrafficSelectors( childConfig.getOutboundTrafficSelectors()); for (final LinkAddress address : internalAddresses) { mTunnelIface.addAddress(address.getAddress(), address.getPrefixLength()); } + for (InetAddress addr : childConfig.getInternalDnsServers()) { dnsAddrStrings.add(addr.getHostAddress()); } @@ -2950,7 +3009,7 @@ public class Vpn { if (mVpnRunner != this) return; mInterface = interfaceName; - mConfig.mtu = maxMtu; + mConfig.mtu = vpnMtu; mConfig.interfaze = mInterface; mConfig.addresses.clear(); @@ -3053,12 +3112,54 @@ public class Vpn { // Ignore stale runner. if (mVpnRunner != this) return; + final LinkProperties oldLp = makeLinkProperties(); + + final boolean underlyingNetworkHasChanged = + !Arrays.equals(mConfig.underlyingNetworks, new Network[]{network}); mConfig.underlyingNetworks = new Network[] {network}; - mNetworkCapabilities = - new NetworkCapabilities.Builder(mNetworkCapabilities) - .setUnderlyingNetworks(Collections.singletonList(network)) - .build(); - doSetUnderlyingNetworks(mNetworkAgent, Collections.singletonList(network)); + mConfig.mtu = calculateVpnMtu(); + + final LinkProperties newLp = makeLinkProperties(); + + // If MTU is < 1280, IPv6 addresses will be removed. If there are no addresses + // left (e.g. IPv6-only VPN network), mark VPN as having lost the session. + if (newLp.getLinkAddresses().isEmpty()) { + onSessionLost( + token, + new IkeIOException( + new IOException("No valid addresses for MTU < 1280"))); + return; + } + + final Set<LinkAddress> removedAddrs = new HashSet<>(oldLp.getLinkAddresses()); + removedAddrs.removeAll(newLp.getLinkAddresses()); + + // If addresses were removed despite no IKE config change, IPv6 addresses must + // have been removed due to MTU size. Restart the VPN to ensure all IPv6 + // unconnected sockets on the new VPN network are closed and retried on the new + // VPN network. + if (!removedAddrs.isEmpty()) { + startNewNetworkAgent( + mNetworkAgent, "MTU too low for IPv6; restarting network agent"); + + for (LinkAddress removed : removedAddrs) { + mTunnelIface.removeAddress( + removed.getAddress(), removed.getPrefixLength()); + } + } else { + // Put below 3 updates into else block is because agentConnect() will do + // those things, so there is no need to do the redundant work. + if (!newLp.equals(oldLp)) doSendLinkProperties(mNetworkAgent, newLp); + if (underlyingNetworkHasChanged) { + mNetworkCapabilities = + new NetworkCapabilities.Builder(mNetworkCapabilities) + .setUnderlyingNetworks( + Collections.singletonList(network)) + .build(); + doSetUnderlyingNetworks(mNetworkAgent, + Collections.singletonList(network)); + } + } } mTunnelIface.setUnderlyingNetwork(network); @@ -3108,6 +3209,60 @@ public class Vpn { startOrMigrateIkeSession(network); } + @NonNull + private IkeSessionParams getIkeSessionParams(@NonNull Network underlyingNetwork) { + final IkeTunnelConnectionParams ikeTunConnParams = + mProfile.getIkeTunnelConnectionParams(); + if (ikeTunConnParams != null) { + final IkeSessionParams.Builder builder = + new IkeSessionParams.Builder(ikeTunConnParams.getIkeSessionParams()) + .setNetwork(underlyingNetwork); + return builder.build(); + } else { + return VpnIkev2Utils.buildIkeSessionParams(mContext, mProfile, underlyingNetwork); + } + } + + @NonNull + private ChildSessionParams getChildSessionParams() { + final IkeTunnelConnectionParams ikeTunConnParams = + mProfile.getIkeTunnelConnectionParams(); + if (ikeTunConnParams != null) { + return ikeTunConnParams.getTunnelModeChildSessionParams(); + } else { + return VpnIkev2Utils.buildChildSessionParams(mProfile.getAllowedAlgorithms()); + } + } + + private int calculateVpnMtu() { + final Network underlyingNetwork = mIkeConnectionInfo.getNetwork(); + final LinkProperties lp = mConnectivityManager.getLinkProperties(underlyingNetwork); + if (underlyingNetwork == null || lp == null) { + // Return the max MTU defined in VpnProfile as the fallback option when there is no + // underlying network or LinkProperties is null. + return mProfile.getMaxMtu(); + } + + int underlyingMtu = lp.getMtu(); + + // Try to get MTU from kernel if MTU is not set in LinkProperties. + if (underlyingMtu == 0) { + try { + underlyingMtu = mDeps.getJavaNetworkInterfaceMtu(lp.getInterfaceName(), + mProfile.getMaxMtu()); + } catch (SocketException e) { + Log.d(TAG, "Got a SocketException when getting MTU from kernel: " + e); + return mProfile.getMaxMtu(); + } + } + + return mDeps.calculateVpnMtu( + getChildSessionParams().getSaProposals(), + mProfile.getMaxMtu(), + underlyingMtu, + mIkeConnectionInfo.getLocalAddress() instanceof Inet4Address); + } + /** * Start a new IKE session. * @@ -3158,24 +3313,6 @@ public class Vpn { // (non-default) network, and start the new one. resetIkeState(); - // Get Ike options from IkeTunnelConnectionParams if it's available in the - // profile. - final IkeTunnelConnectionParams ikeTunConnParams = - mProfile.getIkeTunnelConnectionParams(); - final IkeSessionParams ikeSessionParams; - final ChildSessionParams childSessionParams; - if (ikeTunConnParams != null) { - final IkeSessionParams.Builder builder = new IkeSessionParams.Builder( - ikeTunConnParams.getIkeSessionParams()).setNetwork(underlyingNetwork); - ikeSessionParams = builder.build(); - childSessionParams = ikeTunConnParams.getTunnelModeChildSessionParams(); - } else { - ikeSessionParams = VpnIkev2Utils.buildIkeSessionParams( - mContext, mProfile, underlyingNetwork); - childSessionParams = VpnIkev2Utils.buildChildSessionParams( - mProfile.getAllowedAlgorithms()); - } - // TODO: Remove the need for adding two unused addresses with // IPsec tunnels. final InetAddress address = InetAddress.getLocalHost(); @@ -3193,8 +3330,8 @@ public class Vpn { mSession = mIkev2SessionCreator.createIkeSession( mContext, - ikeSessionParams, - childSessionParams, + getIkeSessionParams(underlyingNetwork), + getChildSessionParams(), mExecutor, new VpnIkev2Utils.IkeSessionCallbackImpl( TAG, IkeV2VpnRunner.this, token), diff --git a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java index 0eaa5e452a58..1225d9956cd3 100644 --- a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java +++ b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java @@ -4413,7 +4413,7 @@ public final class InputMethodManagerService extends IInputMethodManager.Stub * a stylus deviceId is not already registered on device. */ @BinderThread - @EnforcePermission(Manifest.permission.INJECT_EVENTS) + @EnforcePermission(Manifest.permission.TEST_INPUT_METHOD) @Override public void addVirtualStylusIdForTestSession(IInputMethodClient client) { int uid = Binder.getCallingUid(); diff --git a/services/core/java/com/android/server/location/contexthub/ContextHubService.java b/services/core/java/com/android/server/location/contexthub/ContextHubService.java index 51851bedba73..6232028bbabe 100644 --- a/services/core/java/com/android/server/location/contexthub/ContextHubService.java +++ b/services/core/java/com/android/server/location/contexthub/ContextHubService.java @@ -129,7 +129,7 @@ public class ContextHubService extends IContextHubService.Stub { new RemoteCallbackList<>(); // Proxy object to communicate with the Context Hub HAL - private IContextHubWrapper mContextHubWrapper; + private final IContextHubWrapper mContextHubWrapper; // The manager for transaction queue private ContextHubTransactionManager mTransactionManager; @@ -210,8 +210,24 @@ public class ContextHubService extends IContextHubService.Stub { } public ContextHubService(Context context, IContextHubWrapper contextHubWrapper) { + Log.i(TAG, "Starting Context Hub Service init"); mContext = context; - init(contextHubWrapper, /* isFirstInit= */ true); + long startTimeNs = SystemClock.elapsedRealtimeNanos(); + mContextHubWrapper = contextHubWrapper; + if (!initContextHubServiceState(startTimeNs)) { + Log.e(TAG, "Failed to initialize the Context Hub Service"); + return; + } + initDefaultClientMap(); + + initLocationSettingNotifications(); + initWifiSettingNotifications(); + initAirplaneModeSettingNotifications(); + initMicrophoneSettingNotifications(); + initBtSettingNotifications(); + + scheduleDailyMetricSnapshot(); + Log.i(TAG, "Finished Context Hub Service init"); } /** @@ -293,11 +309,10 @@ public class ContextHubService extends IContextHubService.Stub { * Initializes the private state of the ContextHubService * * @param startTimeNs the start time when init was called - * @param isFirstInit if true, this is the first time init is called - boot time * * @return if mContextHubWrapper is not null and a full state init was done */ - private boolean initContextHubServiceState(long startTimeNs, boolean isFirstInit) { + private boolean initContextHubServiceState(long startTimeNs) { if (mContextHubWrapper == null) { mTransactionManager = null; mClientManager = null; @@ -317,12 +332,10 @@ public class ContextHubService extends IContextHubService.Stub { hubInfo = new Pair(Collections.emptyList(), Collections.emptyList()); } - if (isFirstInit) { - long bootTimeNs = SystemClock.elapsedRealtimeNanos() - startTimeNs; - int numContextHubs = hubInfo.first.size(); - ContextHubStatsLog.write(ContextHubStatsLog.CONTEXT_HUB_BOOTED, bootTimeNs, - numContextHubs); - } + long bootTimeNs = SystemClock.elapsedRealtimeNanos() - startTimeNs; + int numContextHubs = hubInfo.first.size(); + ContextHubStatsLog.write(ContextHubStatsLog.CONTEXT_HUB_BOOTED, bootTimeNs, + numContextHubs); mContextHubIdToInfoMap = Collections.unmodifiableMap( ContextHubServiceUtil.createContextHubInfoMap(hubInfo.first)); @@ -749,31 +762,6 @@ public class ContextHubService extends IContextHubService.Stub { } /** - * Handles a service restart or service init for the first time - * - * @param contextHubWrapper the Context Hub wrapper - * @param isFirstInit if true, this is the first time init is called - boot time - */ - private void init(IContextHubWrapper contextHubWrapper, boolean isFirstInit) { - Log.i(TAG, "Starting Context Hub Service init"); - long startTimeNs = SystemClock.elapsedRealtimeNanos(); - mContextHubWrapper = contextHubWrapper; - if (!initContextHubServiceState(startTimeNs, isFirstInit)) { - Log.e(TAG, "Failed to initialize the Context Hub Service"); - return; - } - initDefaultClientMap(); - - initLocationSettingNotifications(); - initWifiSettingNotifications(); - initAirplaneModeSettingNotifications(); - initMicrophoneSettingNotifications(); - initBtSettingNotifications(); - - scheduleDailyMetricSnapshot(); - } - - /** * Handles a unicast or broadcast message from a nanoapp. * * @param contextHubId the ID of the hub the message came from diff --git a/services/core/java/com/android/server/pm/ApexPackageInfo.java b/services/core/java/com/android/server/pm/ApexPackageInfo.java deleted file mode 100644 index 672ae2eb0fb2..000000000000 --- a/services/core/java/com/android/server/pm/ApexPackageInfo.java +++ /dev/null @@ -1,419 +0,0 @@ -/* - * Copyright (C) 2022 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.server.pm; - -import static com.android.server.pm.ApexManager.MATCH_ACTIVE_PACKAGE; -import static com.android.server.pm.ApexManager.MATCH_FACTORY_PACKAGE; - -import android.annotation.NonNull; -import android.annotation.Nullable; -import android.apex.ApexInfo; -import android.content.pm.PackageManager; -import android.util.ArrayMap; -import android.util.Pair; -import android.util.PrintWriterPrinter; - -import com.android.internal.annotations.GuardedBy; -import com.android.internal.util.IndentingPrintWriter; -import com.android.internal.util.Preconditions; -import com.android.server.pm.parsing.PackageParser2; -import com.android.server.pm.parsing.pkg.AndroidPackageUtils; -import com.android.server.pm.parsing.pkg.ParsedPackage; -import com.android.server.pm.pkg.AndroidPackage; -import com.android.server.pm.pkg.PackageStateInternal; -import com.android.server.pm.pkg.parsing.ParsingPackageUtils; - -import java.io.File; -import java.io.PrintWriter; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashSet; -import java.util.List; -import java.util.concurrent.ExecutorService; - -/** - * A temporary holder to store PackageInfo for scanned apex packages. We will unify the scan/install - * flows of APK and APEX and PMS will be the only source of truth for all package information - * including both APK and APEX. This class will no longer be needed when the migration is done. - */ -class ApexPackageInfo { - public static final boolean ENABLE_FEATURE_SCAN_APEX = true; - - private static final String TAG = "ApexManager"; - private static final String VNDK_APEX_MODULE_NAME_PREFIX = "com.android.vndk."; - - private final Object mLock = new Object(); - - @GuardedBy("mLock") - private List<Pair<ApexInfo, AndroidPackage>> mAllPackagesCache; - - @Nullable - private final PackageManagerService mPackageManager; - - ApexPackageInfo() { - mPackageManager = null; - } - - ApexPackageInfo(@NonNull PackageManagerService pms) { - mPackageManager = pms; - } - - /** - * Called by package manager service to scan apex package files when device boots up. - * - * @param allPackages All apex packages to scan. - * @param packageParser The package parser to support apex package parsing and caching parsed - * results. - * @param executorService An executor to support parallel package parsing. - */ - List<ApexManager.ScanResult> scanApexPackages(ApexInfo[] allPackages, - @NonNull PackageParser2 packageParser, @NonNull ExecutorService executorService) { - synchronized (mLock) { - return scanApexPackagesInternalLocked(allPackages, packageParser, executorService); - } - } - - void notifyScanResult(List<ApexManager.ScanResult> scanResults) { - synchronized (mLock) { - notifyScanResultLocked(scanResults); - } - } - - /** - * Retrieves information about an APEX package. - * - * @param packageName the package name to look for. Note that this is the package name reported - * in the APK container manifest (i.e. AndroidManifest.xml), which might - * differ from the one reported in the APEX manifest (i.e. - * apex_manifest.json). - * @param flags the type of package to return. This may match to active packages - * and factory (pre-installed) packages. - * @return a PackageInfo object with the information about the package, or null if the package - * is not found. - */ - @Nullable - Pair<ApexInfo, AndroidPackage> getPackageInfo(String packageName, - @ApexManager.PackageInfoFlags int flags) { - synchronized (mLock) { - Preconditions.checkState(mAllPackagesCache != null, - "APEX packages have not been scanned"); - boolean matchActive = (flags & MATCH_ACTIVE_PACKAGE) != 0; - boolean matchFactory = (flags & MATCH_FACTORY_PACKAGE) != 0; - for (int i = 0, size = mAllPackagesCache.size(); i < size; i++) { - final Pair<ApexInfo, AndroidPackage> pair = mAllPackagesCache.get(i); - var apexInfo = pair.first; - var pkg = pair.second; - if (!pkg.getPackageName().equals(packageName)) { - continue; - } - if ((matchActive && apexInfo.isActive) - || (matchFactory && apexInfo.isFactory)) { - return pair; - } - } - return null; - } - } - - /** - * Retrieves information about all active APEX packages. - * - * @return list containing information about different active packages. - */ - @NonNull - List<Pair<ApexInfo, AndroidPackage>> getActivePackages() { - synchronized (mLock) { - Preconditions.checkState(mAllPackagesCache != null, - "APEX packages have not been scanned"); - final List<Pair<ApexInfo, AndroidPackage>> activePackages = new ArrayList<>(); - for (int i = 0; i < mAllPackagesCache.size(); i++) { - final var pair = mAllPackagesCache.get(i); - if (pair.first.isActive) { - activePackages.add(pair); - } - } - return activePackages; - } - } - - /** - * Retrieves information about all pre-installed APEX packages. - * - * @return list containing information about different pre-installed packages. - */ - @NonNull - List<Pair<ApexInfo, AndroidPackage>> getFactoryPackages() { - synchronized (mLock) { - Preconditions.checkState(mAllPackagesCache != null, - "APEX packages have not been scanned"); - final List<Pair<ApexInfo, AndroidPackage>> factoryPackages = new ArrayList<>(); - for (int i = 0; i < mAllPackagesCache.size(); i++) { - final var pair = mAllPackagesCache.get(i); - if (pair.first.isFactory) { - factoryPackages.add(pair); - } - } - return factoryPackages; - } - } - - /** - * Retrieves information about all inactive APEX packages. - * - * @return list containing information about different inactive packages. - */ - @NonNull - List<Pair<ApexInfo, AndroidPackage>> getInactivePackages() { - synchronized (mLock) { - Preconditions.checkState(mAllPackagesCache != null, - "APEX packages have not been scanned"); - final List<Pair<ApexInfo, AndroidPackage>> inactivePackages = new ArrayList<>(); - for (int i = 0; i < mAllPackagesCache.size(); i++) { - final var pair = mAllPackagesCache.get(i); - if (!pair.first.isActive) { - inactivePackages.add(pair); - } - } - return inactivePackages; - } - } - - /** - * Checks if {@code packageName} is an apex package. - * - * @param packageName package to check. - * @return {@code true} if {@code packageName} is an apex package. - */ - boolean isApexPackage(String packageName) { - synchronized (mLock) { - Preconditions.checkState(mAllPackagesCache != null, - "APEX packages have not been scanned"); - for (int i = 0, size = mAllPackagesCache.size(); i < size; i++) { - final var pair = mAllPackagesCache.get(i); - if (pair.second.getPackageName().equals(packageName)) { - return true; - } - } - } - return false; - } - - /** - * Called to update cached PackageInfo when installing rebootless APEX. - */ - void notifyPackageInstalled(ApexInfo apexInfo, PackageParser2 packageParser) - throws PackageManagerException { - final int flags = PackageManager.GET_META_DATA - | PackageManager.GET_SIGNING_CERTIFICATES - | PackageManager.GET_SIGNATURES; - final ParsedPackage parsedPackage = packageParser.parsePackage( - new File(apexInfo.modulePath), flags, /* useCaches= */ false); - notifyPackageInstalled(apexInfo, parsedPackage.hideAsFinal()); - } - - void notifyPackageInstalled(ApexInfo apexInfo, AndroidPackage pkg) { - final String packageName = pkg.getPackageName(); - synchronized (mLock) { - for (int i = 0, size = mAllPackagesCache.size(); i < size; i++) { - var pair = mAllPackagesCache.get(i); - var oldApexInfo = pair.first; - var oldApexPkg = pair.second; - if (oldApexInfo.isActive && oldApexPkg.getPackageName().equals(packageName)) { - if (oldApexInfo.isFactory) { - oldApexInfo.isActive = false; - mAllPackagesCache.add(Pair.create(apexInfo, pkg)); - } else { - mAllPackagesCache.set(i, Pair.create(apexInfo, pkg)); - } - break; - } - } - } - } - - /** - * Dumps various state information to the provided {@link PrintWriter} object. - * - * @param pw the {@link PrintWriter} object to send information to. - * @param packageName a {@link String} containing a package name, or {@code null}. If set, only - * information about that specific package will be dumped. - */ - void dump(PrintWriter pw, @Nullable String packageName) { - final IndentingPrintWriter ipw = new IndentingPrintWriter(pw, " ", 120); - synchronized (mLock) { - if (mAllPackagesCache == null) { - ipw.println("APEX packages have not been scanned"); - return; - } - } - ipw.println("Active APEX packages:"); - dumpPackages(getActivePackages(), packageName, ipw); - ipw.println("Inactive APEX packages:"); - dumpPackages(getInactivePackages(), packageName, ipw); - ipw.println("Factory APEX packages:"); - dumpPackages(getFactoryPackages(), packageName, ipw); - } - - @GuardedBy("mLock") - private void notifyScanResultLocked(List<ApexManager.ScanResult> scanResults) { - mAllPackagesCache = new ArrayList<>(); - final int flags = PackageManager.GET_META_DATA - | PackageManager.GET_SIGNING_CERTIFICATES - | PackageManager.GET_SIGNATURES; - - HashSet<String> activePackagesSet = new HashSet<>(); - HashSet<String> factoryPackagesSet = new HashSet<>(); - for (ApexManager.ScanResult result : scanResults) { - ApexInfo ai = result.apexInfo; - String packageName = result.pkg.getPackageName(); - if (!packageName.equals(result.packageName)) { - throw new IllegalStateException("Unmatched package name: " - + result.packageName + " != " + packageName - + ", path=" + ai.modulePath); - } - mAllPackagesCache.add(Pair.create(ai, result.pkg)); - if (ai.isActive) { - if (!activePackagesSet.add(packageName)) { - throw new IllegalStateException( - "Two active packages have the same name: " + packageName); - } - } - if (ai.isFactory) { - // Don't throw when the duplicating APEX is VNDK APEX - if (!factoryPackagesSet.add(packageName) - && !ai.moduleName.startsWith(VNDK_APEX_MODULE_NAME_PREFIX)) { - throw new IllegalStateException( - "Two factory packages have the same name: " + packageName); - } - } - } - } - - @GuardedBy("mLock") - private List<ApexManager.ScanResult> scanApexPackagesInternalLocked(final ApexInfo[] allPkgs, - PackageParser2 packageParser, ExecutorService executorService) { - if (allPkgs == null || allPkgs.length == 0) { - notifyScanResultLocked(Collections.EMPTY_LIST); - return Collections.EMPTY_LIST; - } - - ArrayMap<File, ApexInfo> parsingApexInfo = new ArrayMap<>(); - ParallelPackageParser parallelPackageParser = - new ParallelPackageParser(packageParser, executorService); - for (ApexInfo ai : allPkgs) { - File apexFile = new File(ai.modulePath); - parallelPackageParser.submit(apexFile, - ParsingPackageUtils.PARSE_COLLECT_CERTIFICATES); - parsingApexInfo.put(apexFile, ai); - } - - List<ApexManager.ScanResult> results = new ArrayList<>(parsingApexInfo.size()); - // Process results one by one - for (int i = 0; i < parsingApexInfo.size(); i++) { - ParallelPackageParser.ParseResult parseResult = parallelPackageParser.take(); - Throwable throwable = parseResult.throwable; - ApexInfo ai = parsingApexInfo.get(parseResult.scanFile); - - if (throwable == null) { - // TODO: When ENABLE_FEATURE_SCAN_APEX is finalized, remove this and the entire - // calling path code - ScanPackageUtils.applyPolicy(parseResult.parsedPackage, - PackageManagerService.SCAN_AS_SYSTEM, - mPackageManager == null ? null : mPackageManager.getPlatformPackage(), - false); - // Calling hideAsFinal to assign derived fields for the app info flags. - AndroidPackage finalPkg = parseResult.parsedPackage.hideAsFinal(); - results.add(new ApexManager.ScanResult(ai, finalPkg, finalPkg.getPackageName())); - } else if (throwable instanceof PackageManagerException) { - throw new IllegalStateException("Unable to parse: " + ai.modulePath, throwable); - } else { - throw new IllegalStateException("Unexpected exception occurred while parsing " - + ai.modulePath, throwable); - } - } - - notifyScanResultLocked(results); - return results; - } - - /** - * @see #dumpPackages(List, String, IndentingPrintWriter) - */ - static void dumpPackageStates(List<PackageStateInternal> packageStates, boolean isActive, - @Nullable String packageName, IndentingPrintWriter ipw) { - ipw.println(); - ipw.increaseIndent(); - for (int i = 0, size = packageStates.size(); i < size; i++) { - final var packageState = packageStates.get(i); - var pkg = packageState.getPkg(); - if (packageName != null && !packageName.equals(pkg.getPackageName())) { - continue; - } - ipw.println(pkg.getPackageName()); - ipw.increaseIndent(); - ipw.println("Version: " + pkg.getLongVersionCode()); - ipw.println("Path: " + pkg.getBaseApkPath()); - ipw.println("IsActive: " + isActive); - ipw.println("IsFactory: " + !packageState.isUpdatedSystemApp()); - ipw.println("ApplicationInfo: "); - ipw.increaseIndent(); - // TODO: Dump the package manually - AndroidPackageUtils.generateAppInfoWithoutState(pkg) - .dump(new PrintWriterPrinter(ipw), ""); - ipw.decreaseIndent(); - ipw.decreaseIndent(); - } - ipw.decreaseIndent(); - ipw.println(); - } - - /** - * Dump information about the packages contained in a particular cache - * @param packagesCache the cache to print information about. - * @param packageName a {@link String} containing a package name, or {@code null}. If set, - * only information about that specific package will be dumped. - * @param ipw the {@link IndentingPrintWriter} object to send information to. - */ - static void dumpPackages(List<Pair<ApexInfo, AndroidPackage>> packagesCache, - @Nullable String packageName, IndentingPrintWriter ipw) { - ipw.println(); - ipw.increaseIndent(); - for (int i = 0, size = packagesCache.size(); i < size; i++) { - final var pair = packagesCache.get(i); - var apexInfo = pair.first; - var pkg = pair.second; - if (packageName != null && !packageName.equals(pkg.getPackageName())) { - continue; - } - ipw.println(pkg.getPackageName()); - ipw.increaseIndent(); - ipw.println("Version: " + pkg.getLongVersionCode()); - ipw.println("Path: " + pkg.getBaseApkPath()); - ipw.println("IsActive: " + apexInfo.isActive); - ipw.println("IsFactory: " + apexInfo.isFactory); - ipw.println("ApplicationInfo: "); - ipw.increaseIndent(); - // TODO: Dump the package manually - AndroidPackageUtils.generateAppInfoWithoutState(pkg) - .dump(new PrintWriterPrinter(ipw), ""); - ipw.decreaseIndent(); - ipw.decreaseIndent(); - } - ipw.decreaseIndent(); - ipw.println(); - } -}
\ No newline at end of file diff --git a/services/core/java/com/android/server/pm/AppDataHelper.java b/services/core/java/com/android/server/pm/AppDataHelper.java index b8e1e9ae1832..f3cfa95ff86d 100644 --- a/services/core/java/com/android/server/pm/AppDataHelper.java +++ b/services/core/java/com/android/server/pm/AppDataHelper.java @@ -61,7 +61,7 @@ import java.util.concurrent.Future; /** * Prepares app data for users */ -final class AppDataHelper { +public class AppDataHelper { private static final boolean DEBUG_APP_DATA = false; private final PackageManagerService mPm; diff --git a/services/core/java/com/android/server/pm/ComputerEngine.java b/services/core/java/com/android/server/pm/ComputerEngine.java index b9967f94876a..d381e32ed5da 100644 --- a/services/core/java/com/android/server/pm/ComputerEngine.java +++ b/services/core/java/com/android/server/pm/ComputerEngine.java @@ -63,7 +63,6 @@ import android.Manifest; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.UserIdInt; -import android.apex.ApexInfo; import android.app.ActivityManager; import android.content.ComponentName; import android.content.Context; @@ -112,6 +111,7 @@ import android.util.LogPrinter; import android.util.LongSparseLongArray; import android.util.MathUtils; import android.util.Pair; +import android.util.PrintWriterPrinter; import android.util.Slog; import android.util.SparseArray; import android.util.Xml; @@ -396,7 +396,6 @@ public class ComputerEngine implements Computer { private final UserManagerService mUserManager; private final PermissionManagerServiceInternal mPermissionManager; private final ApexManager mApexManager; - private final ApexPackageInfo mApexPackageInfo; private final PackageManagerServiceInjector mInjector; private final ComponentResolverApi mComponentResolver; private final InstantAppResolverConnection mInstantAppResolverConnection; @@ -452,7 +451,6 @@ public class ComputerEngine implements Computer { mContext = args.service.mContext; mInjector = args.service.mInjector; mApexManager = args.service.mApexManager; - mApexPackageInfo = args.service.mApexPackageInfo; mInstantAppResolverConnection = args.service.mInstantAppResolverConnection; mDefaultAppProvider = args.service.getDefaultAppProvider(); mDomainVerificationManager = args.service.mDomainVerificationManager; @@ -968,10 +966,8 @@ public class ComputerEngine implements Computer { if (p != null) { PackageStateInternal ps = mSettings.getPackage(packageName); if (ps == null) return null; - if (ApexPackageInfo.ENABLE_FEATURE_SCAN_APEX) { - if (!matchApex && p.isApex()) { - return null; - } + if (!matchApex && p.isApex()) { + return null; } if (filterSharedLibPackage(ps, filterCallingUid, userId, flags)) { return null; @@ -987,24 +983,6 @@ public class ComputerEngine implements Computer { } return ai; } - if (!ApexPackageInfo.ENABLE_FEATURE_SCAN_APEX) { - if (matchApex) { - // For APKs, PackageInfo.applicationInfo is not exactly the same as ApplicationInfo - // returned from getApplicationInfo, but for APEX packages difference shouldn't be - // very big. - // TODO(b/155328545): generate proper application info for APEXes as well. - int apexFlags = ApexManager.MATCH_ACTIVE_PACKAGE; - if ((flags & PackageManager.MATCH_SYSTEM_ONLY) != 0) { - apexFlags = ApexManager.MATCH_FACTORY_PACKAGE; - } - final var pair = mApexPackageInfo.getPackageInfo(packageName, apexFlags); - if (pair == null) { - return null; - } - return PackageInfoUtils.generateApplicationInfo(pair.second, flags, - PackageUserStateInternal.DEFAULT, userId, null); - } - } if ("android".equals(packageName) || "system".equals(packageName)) { return androidApplication(); } @@ -1553,22 +1531,10 @@ public class ComputerEngine implements Computer { final boolean matchApex = (flags & MATCH_APEX) != 0; if (matchFactoryOnly) { // Instant app filtering for APEX modules is ignored - if (!ApexPackageInfo.ENABLE_FEATURE_SCAN_APEX) { - if (matchApex) { - final var pair = mApexPackageInfo.getPackageInfo(packageName, - ApexManager.MATCH_FACTORY_PACKAGE); - if (pair == null) { - return null; - } - return PackageInfoUtils.generate(pair.second, pair.first, flags, null, userId); - } - } final PackageStateInternal ps = mSettings.getDisabledSystemPkg(packageName); if (ps != null) { - if (ApexPackageInfo.ENABLE_FEATURE_SCAN_APEX) { - if (!matchApex && ps.getPkg() != null && ps.getPkg().isApex()) { - return null; - } + if (!matchApex && ps.getPkg() != null && ps.getPkg().isApex()) { + return null; } if (filterSharedLibPackage(ps, filterCallingUid, userId, flags)) { return null; @@ -1589,10 +1555,8 @@ public class ComputerEngine implements Computer { } if (p != null) { final PackageStateInternal ps = getPackageStateInternal(p.getPackageName()); - if (ApexPackageInfo.ENABLE_FEATURE_SCAN_APEX) { - if (!matchApex && p.isApex()) { - return null; - } + if (!matchApex && p.isApex()) { + return null; } if (filterSharedLibPackage(ps, filterCallingUid, userId, flags)) { return null; @@ -1614,16 +1578,6 @@ public class ComputerEngine implements Computer { } return generatePackageInfo(ps, flags, userId); } - if (!ApexPackageInfo.ENABLE_FEATURE_SCAN_APEX) { - if (matchApex) { - final var pair = mApexPackageInfo.getPackageInfo(packageName, - ApexManager.MATCH_ACTIVE_PACKAGE); - if (pair == null) { - return null; - } - return PackageInfoUtils.generate(pair.second, pair.first, flags, null, userId); - } - } return null; } @@ -1692,10 +1646,8 @@ public class ComputerEngine implements Computer { ps = psDisabled; } } - if (ApexPackageInfo.ENABLE_FEATURE_SCAN_APEX) { - if (!listApex && ps.getPkg() != null && ps.getPkg().isApex()) { - continue; - } + if (!listApex && ps.getPkg() != null && ps.getPkg().isApex()) { + continue; } if (filterSharedLibPackage(ps, callingUid, userId, flags)) { continue; @@ -1722,10 +1674,8 @@ public class ComputerEngine implements Computer { ps = psDisabled; } } - if (ApexPackageInfo.ENABLE_FEATURE_SCAN_APEX) { - if (!listApex && p.isApex()) { - continue; - } + if (!listApex && p.isApex()) { + continue; } if (filterSharedLibPackage(ps, callingUid, userId, flags)) { continue; @@ -1739,22 +1689,6 @@ public class ComputerEngine implements Computer { } } } - if (!ApexPackageInfo.ENABLE_FEATURE_SCAN_APEX) { - if (listApex) { - List<Pair<ApexInfo, AndroidPackage>> pairs; - if (listFactory) { - pairs = mApexPackageInfo.getFactoryPackages(); - } else { - pairs = mApexPackageInfo.getActivePackages(); - } - - for (int index = 0; index < pairs.size(); index++) { - var pair = pairs.get(index); - list.add(PackageInfoUtils.generate(pair.second, pair.first, flags, null, - userId)); - } - } - } return new ParceledListSlice<>(list); } @@ -3155,24 +3089,56 @@ public class ComputerEngine implements Computer { } private void dumpApex(PrintWriter pw, String packageName) { - if (ApexPackageInfo.ENABLE_FEATURE_SCAN_APEX) { - final IndentingPrintWriter ipw = new IndentingPrintWriter(pw, " ", 120); - List<PackageStateInternal> activePackages = new ArrayList<>(); - List<PackageStateInternal> inactivePackages = new ArrayList<>(); - List<PackageStateInternal> factoryActivePackages = new ArrayList<>(); - List<PackageStateInternal> factoryInactivePackages = new ArrayList<>(); - generateApexPackageInfo(activePackages, inactivePackages, factoryActivePackages, - factoryInactivePackages); - ipw.println("Active APEX packages:"); - ApexPackageInfo.dumpPackageStates(activePackages, true, packageName, ipw); - ipw.println("Inactive APEX packages:"); - ApexPackageInfo.dumpPackageStates(inactivePackages, false, packageName, ipw); - ipw.println("Factory APEX packages:"); - ApexPackageInfo.dumpPackageStates(factoryActivePackages, true, packageName, ipw); - ApexPackageInfo.dumpPackageStates(factoryInactivePackages, false, packageName, ipw); - } else { - mApexPackageInfo.dump(pw, packageName); + final IndentingPrintWriter ipw = new IndentingPrintWriter(pw, " ", 120); + List<PackageStateInternal> activePackages = new ArrayList<>(); + List<PackageStateInternal> inactivePackages = new ArrayList<>(); + List<PackageStateInternal> factoryActivePackages = new ArrayList<>(); + List<PackageStateInternal> factoryInactivePackages = new ArrayList<>(); + generateApexPackageInfo(activePackages, inactivePackages, factoryActivePackages, + factoryInactivePackages); + ipw.println("Active APEX packages:"); + dumpApexPackageStates(activePackages, true, packageName, ipw); + ipw.println("Inactive APEX packages:"); + dumpApexPackageStates(inactivePackages, false, packageName, ipw); + ipw.println("Factory APEX packages:"); + dumpApexPackageStates(factoryActivePackages, true, packageName, ipw); + dumpApexPackageStates(factoryInactivePackages, false, packageName, ipw); + } + + + /** + * Dump information about the packages contained in a particular cache + * @param packageStates the states to print information about. + * @param packageName a {@link String} containing a package name, or {@code null}. If set, + * only information about that specific package will be dumped. + * @param ipw the {@link IndentingPrintWriter} object to send information to. + */ + private static void dumpApexPackageStates(List<PackageStateInternal> packageStates, + boolean isActive, @Nullable String packageName, IndentingPrintWriter ipw) { + ipw.println(); + ipw.increaseIndent(); + for (int i = 0, size = packageStates.size(); i < size; i++) { + final var packageState = packageStates.get(i); + var pkg = packageState.getPkg(); + if (packageName != null && !packageName.equals(pkg.getPackageName())) { + continue; + } + ipw.println(pkg.getPackageName()); + ipw.increaseIndent(); + ipw.println("Version: " + pkg.getLongVersionCode()); + ipw.println("Path: " + pkg.getBaseApkPath()); + ipw.println("IsActive: " + isActive); + ipw.println("IsFactory: " + !packageState.isUpdatedSystemApp()); + ipw.println("ApplicationInfo: "); + ipw.increaseIndent(); + // TODO: Dump the package manually + AndroidPackageUtils.generateAppInfoWithoutState(pkg) + .dump(new PrintWriterPrinter(ipw), ""); + ipw.decreaseIndent(); + ipw.decreaseIndent(); } + ipw.decreaseIndent(); + ipw.println(); } // The body of findPreferredActivity. @@ -3551,12 +3517,8 @@ public class ComputerEngine implements Computer { @Override public boolean isApexPackage(String packageName) { - if (!ApexPackageInfo.ENABLE_FEATURE_SCAN_APEX) { - return mApexPackageInfo.isApexPackage(packageName); - } else { - final AndroidPackage pkg = mPackages.get(packageName); - return pkg != null && pkg.isApex(); - } + final AndroidPackage pkg = mPackages.get(packageName); + return pkg != null && pkg.isApex(); } @Override @@ -4563,10 +4525,8 @@ public class ComputerEngine implements Computer { effectiveFlags |= PackageManager.MATCH_ANY_USER; } if (ps.getPkg() != null) { - if (ApexPackageInfo.ENABLE_FEATURE_SCAN_APEX) { - if (!listApex && ps.getPkg().isApex()) { - continue; - } + if (!listApex && ps.getPkg().isApex()) { + continue; } if (filterSharedLibPackage(ps, callingUid, userId, flags)) { continue; @@ -4596,10 +4556,8 @@ public class ComputerEngine implements Computer { if (pkg == null) { continue; } - if (ApexPackageInfo.ENABLE_FEATURE_SCAN_APEX) { - if (!listApex && pkg.isApex()) { - continue; - } + if (!listApex && pkg.isApex()) { + continue; } if (filterSharedLibPackage(packageState, Binder.getCallingUid(), userId, flags)) { continue; diff --git a/services/core/java/com/android/server/pm/InitAppsHelper.java b/services/core/java/com/android/server/pm/InitAppsHelper.java index 6f5909615db2..12b5ab8a3160 100644 --- a/services/core/java/com/android/server/pm/InitAppsHelper.java +++ b/services/core/java/com/android/server/pm/InitAppsHelper.java @@ -72,7 +72,6 @@ final class InitAppsHelper { private final int mSystemScanFlags; private final InstallPackageHelper mInstallPackageHelper; private final ApexManager mApexManager; - private final ApexPackageInfo mApexPackageInfo; private final ExecutorService mExecutorService; /* Tracks how long system scan took */ private long mSystemScanTime; @@ -96,13 +95,11 @@ final class InitAppsHelper { private final List<String> mStubSystemApps = new ArrayList<>(); // TODO(b/198166813): remove PMS dependency - InitAppsHelper(PackageManagerService pm, - ApexManager apexManager, ApexPackageInfo apexPackageInfo, + InitAppsHelper(PackageManagerService pm, ApexManager apexManager, InstallPackageHelper installPackageHelper, List<ScanPartition> systemPartitions) { mPm = pm; mApexManager = apexManager; - mApexPackageInfo = apexPackageInfo; mInstallPackageHelper = installPackageHelper; mSystemPartitions = systemPartitions; mDirsToScanAsSystem = getSystemScanPartitions(); @@ -165,16 +162,8 @@ final class InitAppsHelper { Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "scanApexPackages"); try { - final List<ApexManager.ScanResult> apexScanResults; - if (ApexPackageInfo.ENABLE_FEATURE_SCAN_APEX) { - apexScanResults = mInstallPackageHelper.scanApexPackages( - mApexManager.getAllApexInfos(), mSystemParseFlags, mSystemScanFlags, - packageParser, mExecutorService); - } else { - apexScanResults = mApexPackageInfo.scanApexPackages( - mApexManager.getAllApexInfos(), packageParser, mExecutorService); - } - return apexScanResults; + return mInstallPackageHelper.scanApexPackages(mApexManager.getAllApexInfos(), + mSystemParseFlags, mSystemScanFlags, packageParser, mExecutorService); } finally { Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER); } diff --git a/services/core/java/com/android/server/pm/InstallingSession.java b/services/core/java/com/android/server/pm/InstallingSession.java index 16b3a815c075..88469f539f94 100644 --- a/services/core/java/com/android/server/pm/InstallingSession.java +++ b/services/core/java/com/android/server/pm/InstallingSession.java @@ -572,19 +572,15 @@ class InstallingSession { } try (PackageParser2 packageParser = mPm.mInjector.getScanningPackageParser()) { ApexInfo apexInfo = mPm.mApexManager.installPackage(apexes[0]); - if (ApexPackageInfo.ENABLE_FEATURE_SCAN_APEX) { - // APEX has been handled successfully by apexd. Let's continue the install flow - // so it will be scanned and registered with the system. - // TODO(b/225756739): Improve atomicity of rebootless APEX install. - // The newly installed APEX will not be reverted even if - // processApkInstallRequests() fails. Need a way to keep info stored in apexd - // and PMS in sync in the face of install failures. - request.setApexInfo(apexInfo); - mPm.mHandler.post(() -> processApkInstallRequests(true, requests)); - return; - } else { - mPm.mApexPackageInfo.notifyPackageInstalled(apexInfo, packageParser); - } + // APEX has been handled successfully by apexd. Let's continue the install flow + // so it will be scanned and registered with the system. + // TODO(b/225756739): Improve atomicity of rebootless APEX install. + // The newly installed APEX will not be reverted even if + // processApkInstallRequests() fails. Need a way to keep info stored in apexd + // and PMS in sync in the face of install failures. + request.setApexInfo(apexInfo); + mPm.mHandler.post(() -> processApkInstallRequests(true, requests)); + return; } } catch (PackageManagerException e) { request.setError("APEX installation failed", e); diff --git a/services/core/java/com/android/server/pm/PackageInstallerSession.java b/services/core/java/com/android/server/pm/PackageInstallerSession.java index 0369a83ec9c1..72ec510031e2 100644 --- a/services/core/java/com/android/server/pm/PackageInstallerSession.java +++ b/services/core/java/com/android/server/pm/PackageInstallerSession.java @@ -2763,10 +2763,11 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { "Missing existing base package"); } - // Default to require only if existing base apk has fs-verity. + // Default to require only if existing base apk has fs-verity signature. mVerityFoundForApks = PackageManagerServiceUtils.isApkVerityEnabled() && params.mode == SessionParams.MODE_INHERIT_EXISTING - && VerityUtils.hasFsverity(pkgInfo.applicationInfo.getBaseCodePath()); + && (new File(VerityUtils.getFsveritySignatureFilePath( + pkgInfo.applicationInfo.getBaseCodePath()))).exists(); final List<File> removedFiles = getRemovedFilesLocked(); final List<String> removeSplitList = new ArrayList<>(); diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 23cf26236e87..b979e7a3e093 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -690,7 +690,6 @@ public class PackageManagerService implements PackageSender, TestUtilityService private final ModuleInfoProvider mModuleInfoProvider; final ApexManager mApexManager; - final ApexPackageInfo mApexPackageInfo; final PackageManagerServiceInjector mInjector; @@ -1641,7 +1640,6 @@ public class PackageManagerService implements PackageSender, TestUtilityService mSharedLibraries = injector.getSharedLibrariesImpl(); mApexManager = testParams.apexManager; - mApexPackageInfo = new ApexPackageInfo(this); mArtManagerService = testParams.artManagerService; mAvailableFeatures = testParams.availableFeatures; mBackgroundDexOptService = testParams.backgroundDexOptService; @@ -1841,7 +1839,6 @@ public class PackageManagerService implements PackageSender, TestUtilityService mProtectedPackages = new ProtectedPackages(mContext); mApexManager = injector.getApexManager(); - mApexPackageInfo = new ApexPackageInfo(this); mAppsFilter = mInjector.getAppsFilter(); mInstantAppRegistry = new InstantAppRegistry(mContext, mPermissionManager, @@ -1979,8 +1976,8 @@ public class PackageManagerService implements PackageSender, TestUtilityService + ver.fingerprint + " to " + PackagePartitions.FINGERPRINT); } - mInitAppsHelper = new InitAppsHelper(this, mApexManager, mApexPackageInfo, - mInstallPackageHelper, mInjector.getSystemPartitions()); + mInitAppsHelper = new InitAppsHelper(this, mApexManager, mInstallPackageHelper, + mInjector.getSystemPartitions()); // when upgrading from pre-M, promote system app permissions from install to runtime mPromoteSystemApps = diff --git a/services/core/java/com/android/server/pm/UserRestrictionsUtils.java b/services/core/java/com/android/server/pm/UserRestrictionsUtils.java index d1f3341e4258..dbd026efed8a 100644 --- a/services/core/java/com/android/server/pm/UserRestrictionsUtils.java +++ b/services/core/java/com/android/server/pm/UserRestrictionsUtils.java @@ -147,7 +147,8 @@ public class UserRestrictionsUtils { UserManager.DISALLOW_WIFI_TETHERING, UserManager.DISALLOW_SHARING_ADMIN_CONFIGURED_WIFI, UserManager.DISALLOW_WIFI_DIRECT, - UserManager.DISALLOW_ADD_WIFI_CONFIG + UserManager.DISALLOW_ADD_WIFI_CONFIG, + UserManager.DISALLOW_CELLULAR_2G }); public static final Set<String> DEPRECATED_USER_RESTRICTIONS = Sets.newArraySet( @@ -195,7 +196,8 @@ public class UserRestrictionsUtils { UserManager.DISALLOW_CHANGE_WIFI_STATE, UserManager.DISALLOW_WIFI_TETHERING, UserManager.DISALLOW_WIFI_DIRECT, - UserManager.DISALLOW_ADD_WIFI_CONFIG + UserManager.DISALLOW_ADD_WIFI_CONFIG, + UserManager.DISALLOW_CELLULAR_2G ); /** @@ -234,7 +236,8 @@ public class UserRestrictionsUtils { UserManager.DISALLOW_CHANGE_WIFI_STATE, UserManager.DISALLOW_WIFI_TETHERING, UserManager.DISALLOW_WIFI_DIRECT, - UserManager.DISALLOW_ADD_WIFI_CONFIG + UserManager.DISALLOW_ADD_WIFI_CONFIG, + UserManager.DISALLOW_CELLULAR_2G ); /** diff --git a/services/core/java/com/android/server/utils/EventLogger.java b/services/core/java/com/android/server/utils/EventLogger.java index 11766a3d70bd..770cb7258319 100644 --- a/services/core/java/com/android/server/utils/EventLogger.java +++ b/services/core/java/com/android/server/utils/EventLogger.java @@ -26,7 +26,9 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.text.SimpleDateFormat; import java.util.ArrayDeque; +import java.util.ArrayList; import java.util.Date; +import java.util.List; import java.util.Locale; /** @@ -79,20 +81,34 @@ public class EventLogger { enqueue(event.printLog(logType, tag)); } + /** Dumps events into the given {@link DumpSink}. */ + public synchronized void dump(DumpSink dumpSink) { + dumpSink.sink(mTag, new ArrayList<>(mEvents)); + } + /** Dumps events using {@link PrintWriter}. */ public synchronized void dump(PrintWriter pw) { dump(pw, "" /* prefix */); } /** Dumps events using {@link PrintWriter} with a certain indent. */ - public synchronized void dump(PrintWriter pw, String prefix) { - pw.println(prefix + "Events log: " + mTag); - String indent = prefix + " "; + public synchronized void dump(PrintWriter pw, String indent) { + pw.println(indent + "Events log: " + mTag); + + String childrenIndention = indent + " "; for (Event evt : mEvents) { - pw.println(indent + evt.toString()); + pw.println(childrenIndention + evt.toString()); } } + /** Receives events from {@link EventLogger} upon a {@link #dump(DumpSink)} call. **/ + public interface DumpSink { + + /** Processes given events into some pipeline with a given tag. **/ + void sink(String tag, List<Event> events); + + } + public abstract static class Event { /** Timestamps formatter. */ diff --git a/services/core/java/com/android/server/wm/Transition.java b/services/core/java/com/android/server/wm/Transition.java index 80c980310664..7700188656e3 100644 --- a/services/core/java/com/android/server/wm/Transition.java +++ b/services/core/java/com/android/server/wm/Transition.java @@ -469,6 +469,48 @@ class Transition extends Binder implements BLASTSyncEngine.TransactionReadyListe } /** + * Records that a particular container has been reparented. This only effects windows that have + * already been collected in the transition. This should be called before reparenting because + * the old parent may be removed during reparenting, for example: + * {@link Task#shouldRemoveSelfOnLastChildRemoval} + */ + void collectReparentChange(@NonNull WindowContainer wc, @NonNull WindowContainer newParent) { + if (!mChanges.containsKey(wc)) { + // #collectReparentChange() will be called when the window is reparented. Skip if it is + // a window that has not been collected, which means we don't care about this window for + // the current transition. + return; + } + final ChangeInfo change = mChanges.get(wc); + // Use the current common ancestor if there are multiple reparent, and the original parent + // has been detached. Otherwise, use the original parent before the transition. + final WindowContainer prevParent = + change.mStartParent == null || change.mStartParent.isAttached() + ? change.mStartParent + : change.mCommonAncestor; + if (prevParent == null || !prevParent.isAttached()) { + Slog.w(TAG, "Trying to collect reparenting of a window after the previous parent has" + + " been detached: " + wc); + return; + } + if (prevParent == newParent) { + Slog.w(TAG, "Trying to collect reparenting of a window that has not been reparented: " + + wc); + return; + } + if (!newParent.isAttached()) { + Slog.w(TAG, "Trying to collect reparenting of a window that is not attached after" + + " reparenting: " + wc); + return; + } + WindowContainer ancestor = newParent; + while (prevParent != ancestor && !prevParent.isDescendantOf(ancestor)) { + ancestor = ancestor.getParent(); + } + change.mCommonAncestor = ancestor; + } + + /** * @return {@code true} if `wc` is a participant or is a descendant of one. */ boolean isInTransition(WindowContainer wc) { @@ -1524,20 +1566,7 @@ class Transition extends Binder implements BLASTSyncEngine.TransactionReadyListe return out; } - // Find the top-most shared ancestor of app targets. - WindowContainer<?> ancestor = topApp.getParent(); - // Go up ancestor parent chain until all targets are descendants. - ancestorLoop: - while (ancestor != null) { - for (int i = sortedTargets.size() - 1; i >= 0; --i) { - final WindowContainer wc = sortedTargets.get(i); - if (!isWallpaper(wc) && !wc.isDescendantOf(ancestor)) { - ancestor = ancestor.getParent(); - continue ancestorLoop; - } - } - break; - } + WindowContainer<?> ancestor = findCommonAncestor(sortedTargets, changes, topApp); // make leash based on highest (z-order) direct child of ancestor with a participant. WindowContainer leashReference = sortedTargets.get(0); @@ -1654,6 +1683,46 @@ class Transition extends Binder implements BLASTSyncEngine.TransactionReadyListe return out; } + /** + * Finds the top-most common ancestor of app targets. + * + * Makes sure that the previous parent is also a descendant to make sure the animation won't + * be covered by other windows below the previous parent. For example, when reparenting an + * activity from PiP Task to split screen Task. + */ + @NonNull + private static WindowContainer<?> findCommonAncestor( + @NonNull ArrayList<WindowContainer> targets, + @NonNull ArrayMap<WindowContainer, ChangeInfo> changes, + @NonNull WindowContainer<?> topApp) { + WindowContainer<?> ancestor = topApp.getParent(); + // Go up ancestor parent chain until all targets are descendants. Ancestor should never be + // null because all targets are attached. + for (int i = targets.size() - 1; i >= 0; i--) { + final WindowContainer wc = targets.get(i); + if (isWallpaper(wc)) { + // Skip the non-app window. + continue; + } + while (!wc.isDescendantOf(ancestor)) { + ancestor = ancestor.getParent(); + } + + // Make sure the previous parent is also a descendant to make sure the animation won't + // be covered by other windows below the previous parent. For example, when reparenting + // an activity from PiP Task to split screen Task. + final ChangeInfo change = changes.get(wc); + final WindowContainer prevParent = change.mCommonAncestor; + if (prevParent == null || !prevParent.isAttached()) { + continue; + } + while (prevParent != ancestor && !prevParent.isDescendantOf(ancestor)) { + ancestor = ancestor.getParent(); + } + } + return ancestor; + } + private static WindowManager.LayoutParams getLayoutParamsForAnimationsStyle(int type, ArrayList<WindowContainer> sortedTargets) { // Find the layout params of the top-most application window that is part of the @@ -1772,10 +1841,19 @@ class Transition extends Binder implements BLASTSyncEngine.TransactionReadyListe @Retention(RetentionPolicy.SOURCE) @interface Flag {} - // Usually "post" change state. + /** + * "Parent" that is also included in the transition. When populating the parent changes, we + * may skip the intermediate parents, so this may not be the actual parent in the hierarchy. + */ WindowContainer mEndParent; - // Parent before change state. + /** Actual parent window before change state. */ WindowContainer mStartParent; + /** + * When the window is reparented during the transition, this is the common ancestor window + * of the {@link #mStartParent} and the current parent. This is needed because the + * {@link #mStartParent} may have been detached when the transition starts. + */ + WindowContainer mCommonAncestor; // State tracking boolean mExistenceChanged = false; diff --git a/services/core/java/com/android/server/wm/TransitionController.java b/services/core/java/com/android/server/wm/TransitionController.java index ac85c9a36bcc..37bef3a833ee 100644 --- a/services/core/java/com/android/server/wm/TransitionController.java +++ b/services/core/java/com/android/server/wm/TransitionController.java @@ -533,6 +533,17 @@ class TransitionController { mCollectingTransition.collectVisibleChange(wc); } + /** + * Records that a particular container has been reparented. This only effects windows that have + * already been collected in the transition. This should be called before reparenting because + * the old parent may be removed during reparenting, for example: + * {@link Task#shouldRemoveSelfOnLastChildRemoval} + */ + void collectReparentChange(@NonNull WindowContainer wc, @NonNull WindowContainer newParent) { + if (!isCollecting()) return; + mCollectingTransition.collectReparentChange(wc, newParent); + } + /** @see Transition#mStatusBarTransitionDelay */ void setStatusBarTransitionDelay(long delay) { if (mCollectingTransition == null) return; diff --git a/services/core/java/com/android/server/wm/WindowContainer.java b/services/core/java/com/android/server/wm/WindowContainer.java index 0b5de85c5cab..73d4496bdeb5 100644 --- a/services/core/java/com/android/server/wm/WindowContainer.java +++ b/services/core/java/com/android/server/wm/WindowContainer.java @@ -542,6 +542,10 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer< throw new IllegalArgumentException("WC=" + this + " already child of " + mParent); } + // Collect before removing child from old parent, because the old parent may be removed if + // this is the last child in it. + mTransitionController.collectReparentChange(this, newParent); + // The display object before reparenting as that might lead to old parent getting removed // from the display if it no longer has any child. final DisplayContent prevDc = oldParent.getDisplayContent(); diff --git a/services/credentials/java/com/android/server/credentials/CredentialManagerUi.java b/services/credentials/java/com/android/server/credentials/CredentialManagerUi.java index 69fb1eaa7543..5f25e3df8a9a 100644 --- a/services/credentials/java/com/android/server/credentials/CredentialManagerUi.java +++ b/services/credentials/java/com/android/server/credentials/CredentialManagerUi.java @@ -16,7 +16,6 @@ package com.android.server.credentials; import android.annotation.NonNull; -import android.app.Activity; import android.content.Context; import android.content.Intent; import android.credentials.ui.IntentFactory; @@ -48,7 +47,7 @@ public class CredentialManagerUi { }; private void handleUiResult(int resultCode, Bundle resultData) { - if (resultCode == Activity.RESULT_OK) { + if (resultCode == UserSelectionDialogResult.RESULT_CODE_DIALOG_COMPLETE_WITH_SELECTION) { UserSelectionDialogResult selection = UserSelectionDialogResult .fromResultData(resultData); if (selection != null) { @@ -56,7 +55,7 @@ public class CredentialManagerUi { } else { Slog.i(TAG, "No selection found in UI result"); } - } else if (resultCode == Activity.RESULT_CANCELED) { + } else if (resultCode == UserSelectionDialogResult.RESULT_CODE_DIALOG_CANCELED) { mCallbacks.onUiCancelation(); } } diff --git a/services/tests/mockingservicestests/Android.bp b/services/tests/mockingservicestests/Android.bp index 16317fedc583..73b1907c9f42 100644 --- a/services/tests/mockingservicestests/Android.bp +++ b/services/tests/mockingservicestests/Android.bp @@ -78,6 +78,12 @@ android_test { "servicestests-core-utils", ], + java_resources: [ + ":apex.test", + ":test.rebootless_apex_v1", + ":test.rebootless_apex_v2", + ], + jni_libs: [ "libpsi", ], diff --git a/services/tests/servicestests/src/com/android/server/pm/ApexManagerTest.java b/services/tests/mockingservicestests/src/com/android/server/pm/ApexManagerTest.java index a7739ed2c169..aabec2206333 100644 --- a/services/tests/servicestests/src/com/android/server/pm/ApexManagerTest.java +++ b/services/tests/mockingservicestests/src/com/android/server/pm/ApexManagerTest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2019 The Android Open Source Project + * Copyright (C) 2022 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. @@ -31,25 +31,29 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import static org.testng.Assert.assertThrows; +import android.annotation.NonNull; +import android.annotation.Nullable; import android.apex.ApexInfo; import android.apex.ApexSessionInfo; import android.apex.ApexSessionParams; import android.apex.IApexService; -import android.content.Context; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageManager; +import android.os.Build; import android.os.Environment; import android.os.RemoteException; import android.os.ServiceSpecificException; import android.platform.test.annotations.Presubmit; import androidx.test.filters.SmallTest; -import androidx.test.platform.app.InstrumentationRegistry; import androidx.test.runner.AndroidJUnit4; import com.android.server.pm.parsing.PackageParser2; -import com.android.server.pm.parsing.TestPackageParser2; import com.android.server.pm.pkg.AndroidPackage; +import com.android.server.pm.pkg.parsing.ParsingPackageUtils; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; @@ -60,88 +64,139 @@ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.List; +import java.util.Objects; @SmallTest @Presubmit @RunWith(AndroidJUnit4.class) public class ApexManagerTest { + + @Rule + public final MockSystemRule mMockSystem = new MockSystemRule(); + private static final String TEST_APEX_PKG = "com.android.apex.test"; private static final String TEST_APEX_FILE_NAME = "apex.test.apex"; private static final int TEST_SESSION_ID = 99999999; private static final int[] TEST_CHILD_SESSION_ID = {8888, 7777}; private ApexManager mApexManager; - private Context mContext; private PackageParser2 mPackageParser2; private IApexService mApexService = mock(IApexService.class); + private PackageManagerService mPmService; + + private InstallPackageHelper mInstallPackageHelper; + @Before - public void setUp() throws RemoteException { - mContext = InstrumentationRegistry.getInstrumentation().getContext(); + public void setUp() throws Exception { ApexManager.ApexManagerImpl managerImpl = spy(new ApexManager.ApexManagerImpl()); doReturn(mApexService).when(managerImpl).waitForApexService(); + when(mApexService.getActivePackages()).thenReturn(new ApexInfo[0]); mApexManager = managerImpl; - mPackageParser2 = new TestPackageParser2(); - } - - @Test - public void testGetPackageInfo_setFlagsMatchActivePackage() throws RemoteException { - ApexInfo[] apexInfo = createApexInfoForTestPkg(true, false); - ApexPackageInfo apexPackageInfo = new ApexPackageInfo(); - apexPackageInfo.scanApexPackages( - apexInfo, mPackageParser2, ParallelPackageParser.makeExecutorService()); - final var activePair = apexPackageInfo.getPackageInfo(TEST_APEX_PKG, - ApexManager.MATCH_ACTIVE_PACKAGE); - - assertThat(activePair).isNotNull(); - assertThat(activePair.second.getPackageName()).contains(TEST_APEX_PKG); - - final var factoryPair = apexPackageInfo.getPackageInfo(TEST_APEX_PKG, - ApexManager.MATCH_FACTORY_PACKAGE); + mPackageParser2 = new PackageParser2(null, null, null, new PackageParser2.Callback() { + @Override + public boolean isChangeEnabled(long changeId, @NonNull ApplicationInfo appInfo) { + return true; + } - assertThat(factoryPair).isNull(); + @Override + public boolean hasFeature(String feature) { + return true; + } + }); + + mMockSystem.system().stageNominalSystemState(); + mPmService = new PackageManagerService(mMockSystem.mocks().getInjector(), + false /*factoryTest*/, + MockSystem.Companion.getDEFAULT_VERSION_INFO().fingerprint, + false /*isEngBuild*/, + false /*isUserDebugBuild*/, + Build.VERSION_CODES.CUR_DEVELOPMENT, + Build.VERSION.INCREMENTAL); + mMockSystem.system().validateFinalState(); + mInstallPackageHelper = new InstallPackageHelper(mPmService, mock(AppDataHelper.class)); + } + + @NonNull + private List<ApexManager.ScanResult> scanApexInfos(ApexInfo[] apexInfos) { + return mInstallPackageHelper.scanApexPackages(apexInfos, + ParsingPackageUtils.PARSE_IS_SYSTEM_DIR, + PackageManagerService.SCAN_AS_SYSTEM, mPackageParser2, + ParallelPackageParser.makeExecutorService()); + } + + @Nullable + private ApexManager.ScanResult findActive(@NonNull List<ApexManager.ScanResult> results) { + return results.stream() + .filter(it -> it.apexInfo.isActive) + .filter(it -> Objects.equals(it.packageName, TEST_APEX_PKG)) + .findFirst() + .orElse(null); + } + + @Nullable + private ApexManager.ScanResult findFactory(@NonNull List<ApexManager.ScanResult> results, + @NonNull String packageName) { + return results.stream() + .filter(it -> it.apexInfo.isFactory) + .filter(it -> Objects.equals(it.packageName, packageName)) + .findFirst() + .orElse(null); + } + + @NonNull + private AndroidPackage mockParsePackage(@NonNull PackageParser2 parser, + @NonNull ApexInfo apexInfo) { + var flags = PackageManager.GET_META_DATA | PackageManager.GET_SIGNING_CERTIFICATES; + try { + var parsedPackage = parser.parsePackage(new File(apexInfo.modulePath), flags, + /* useCaches= */ false); + ScanPackageUtils.applyPolicy(parsedPackage, + PackageManagerService.SCAN_AS_APEX | PackageManagerService.SCAN_AS_SYSTEM, + mPmService.getPlatformPackage(), /* isUpdatedSystemApp */ false); + // isUpdatedSystemApp is ignoreable above, only used for shared library adjustment + return parsedPackage.hideAsFinal(); + } catch (PackageManagerException e) { + throw new RuntimeException(e); + } } @Test - public void testGetPackageInfo_setFlagsMatchFactoryPackage() throws RemoteException { - ApexInfo[] apexInfo = createApexInfoForTestPkg(false, true); - ApexPackageInfo apexPackageInfo = new ApexPackageInfo(); - apexPackageInfo.scanApexPackages( - apexInfo, mPackageParser2, ParallelPackageParser.makeExecutorService()); - var factoryPair = apexPackageInfo.getPackageInfo(TEST_APEX_PKG, - ApexManager.MATCH_FACTORY_PACKAGE); - - assertThat(factoryPair).isNotNull(); - assertThat(factoryPair.second.getPackageName()).contains(TEST_APEX_PKG); + public void testScanActivePackage() { + var apexInfos = createApexInfoForTestPkg(true, false); + var results = scanApexInfos(apexInfos); + var active = findActive(results); + var factory = findFactory(results, TEST_APEX_PKG); - final var activePair = apexPackageInfo.getPackageInfo(TEST_APEX_PKG, - ApexManager.MATCH_ACTIVE_PACKAGE); + assertThat(active).isNotNull(); + assertThat(active.packageName).isEqualTo(TEST_APEX_PKG); - assertThat(activePair).isNull(); + assertThat(factory).isNull(); } @Test - public void testGetPackageInfo_setFlagsNone() throws RemoteException { - ApexInfo[] apexInfo = createApexInfoForTestPkg(false, true); - ApexPackageInfo apexPackageInfo = new ApexPackageInfo(); - apexPackageInfo.scanApexPackages( - apexInfo, mPackageParser2, ParallelPackageParser.makeExecutorService()); + public void testScanFactoryPackage() { + var apexInfos = createApexInfoForTestPkg(false, true); + var results = scanApexInfos(apexInfos); + var active = findActive(results); + var factory = findFactory(results, TEST_APEX_PKG); - assertThat(apexPackageInfo.getPackageInfo(TEST_APEX_PKG, 0)).isNull(); + assertThat(factory).isNotNull(); + assertThat(factory.packageName).contains(TEST_APEX_PKG); + + assertThat(active).isNull(); } @Test - public void testGetApexSystemServices() throws RemoteException { - ApexInfo[] apexInfo = new ApexInfo[] { + public void testGetApexSystemServices() { + ApexInfo[] apexInfo = new ApexInfo[]{ createApexInfoForTestPkg(false, true, 1), // only active apex reports apex-system-service createApexInfoForTestPkg(true, false, 2), }; - ApexPackageInfo apexPackageInfo = new ApexPackageInfo(); - List<ApexManager.ScanResult> scanResults = apexPackageInfo.scanApexPackages( - apexInfo, mPackageParser2, ParallelPackageParser.makeExecutorService()); + List<ApexManager.ScanResult> scanResults = scanApexInfos(apexInfo); mApexManager.notifyScanResult(scanResults); List<ApexSystemServiceInfo> services = mApexManager.getApexSystemServices(); @@ -151,73 +206,11 @@ public class ApexManagerTest { } @Test - public void testGetActivePackages() throws RemoteException { - ApexInfo[] apexInfo = createApexInfoForTestPkg(true, true); - ApexPackageInfo apexPackageInfo = new ApexPackageInfo(); - apexPackageInfo.scanApexPackages( - apexInfo, mPackageParser2, ParallelPackageParser.makeExecutorService()); - - assertThat(apexPackageInfo.getActivePackages()).isNotEmpty(); - } - - @Test - public void testGetActivePackages_noneActivePackages() throws RemoteException { - ApexInfo[] apexInfo = createApexInfoForTestPkg(false, true); - ApexPackageInfo apexPackageInfo = new ApexPackageInfo(); - apexPackageInfo.scanApexPackages( - apexInfo, mPackageParser2, ParallelPackageParser.makeExecutorService()); - - assertThat(apexPackageInfo.getActivePackages()).isEmpty(); - } - - @Test - public void testGetFactoryPackages() throws RemoteException { - ApexInfo [] apexInfo = createApexInfoForTestPkg(false, true); - ApexPackageInfo apexPackageInfo = new ApexPackageInfo(); - apexPackageInfo.scanApexPackages( - apexInfo, mPackageParser2, ParallelPackageParser.makeExecutorService()); - - assertThat(apexPackageInfo.getFactoryPackages()).isNotEmpty(); - } - - @Test - public void testGetFactoryPackages_noneFactoryPackages() throws RemoteException { - ApexInfo[] apexInfo = createApexInfoForTestPkg(true, false); - ApexPackageInfo apexPackageInfo = new ApexPackageInfo(); - apexPackageInfo.scanApexPackages( - apexInfo, mPackageParser2, ParallelPackageParser.makeExecutorService()); - - assertThat(apexPackageInfo.getFactoryPackages()).isEmpty(); - } - - @Test - public void testGetInactivePackages() throws RemoteException { - ApexInfo[] apexInfo = createApexInfoForTestPkg(false, true); - ApexPackageInfo apexPackageInfo = new ApexPackageInfo(); - apexPackageInfo.scanApexPackages( - apexInfo, mPackageParser2, ParallelPackageParser.makeExecutorService()); - - assertThat(apexPackageInfo.getInactivePackages()).isNotEmpty(); - } - - @Test - public void testGetInactivePackages_noneInactivePackages() throws RemoteException { - ApexInfo[] apexInfo = createApexInfoForTestPkg(true, false); - ApexPackageInfo apexPackageInfo = new ApexPackageInfo(); - apexPackageInfo.scanApexPackages( - apexInfo, mPackageParser2, ParallelPackageParser.makeExecutorService()); - - assertThat(apexPackageInfo.getInactivePackages()).isEmpty(); - } - - @Test - public void testIsApexPackage() throws RemoteException { - ApexInfo[] apexInfo = createApexInfoForTestPkg(false, true); - ApexPackageInfo apexPackageInfo = new ApexPackageInfo(); - apexPackageInfo.scanApexPackages( - apexInfo, mPackageParser2, ParallelPackageParser.makeExecutorService()); - - assertThat(apexPackageInfo.isApexPackage(TEST_APEX_PKG)).isTrue(); + public void testIsApexPackage() { + var apexInfos = createApexInfoForTestPkg(false, true); + var results = scanApexInfos(apexInfos); + var factory = findFactory(results, TEST_APEX_PKG); + assertThat(factory.pkg.isApex()).isTrue(); } @Test @@ -328,16 +321,14 @@ public class ApexManagerTest { assertThat(activeApex.apexModuleName).isEqualTo(TEST_APEX_PKG); ApexInfo[] apexInfo = createApexInfoForTestPkg(true, true); - ApexPackageInfo apexPackageInfo = new ApexPackageInfo(); - List<ApexManager.ScanResult> scanResults = apexPackageInfo.scanApexPackages( - apexInfo, mPackageParser2, ParallelPackageParser.makeExecutorService()); + List<ApexManager.ScanResult> scanResults = scanApexInfos(apexInfo); mApexManager.notifyScanResult(scanResults); assertThat(mApexManager.getApkInApexInstallError(activeApex.apexModuleName)).isNull(); mApexManager.reportErrorWithApkInApex(activeApex.apexDirectory.getAbsolutePath(), "Some random error"); assertThat(mApexManager.getApkInApexInstallError(activeApex.apexModuleName)) - .isEqualTo("Some random error"); + .isEqualTo("Some random error"); } /** @@ -357,9 +348,7 @@ public class ApexManagerTest { when(fakeApkInApex.getPackageName()).thenReturn("randomPackageName"); ApexInfo[] apexInfo = createApexInfoForTestPkg(true, true); - ApexPackageInfo apexPackageInfo = new ApexPackageInfo(); - List<ApexManager.ScanResult> scanResults = apexPackageInfo.scanApexPackages( - apexInfo, mPackageParser2, ParallelPackageParser.makeExecutorService()); + List<ApexManager.ScanResult> scanResults = scanApexInfos(apexInfo); mApexManager.notifyScanResult(scanResults); assertThat(mApexManager.getApksInApex(activeApex.apexModuleName)).isEmpty(); @@ -371,11 +360,9 @@ public class ApexManagerTest { public void testInstallPackage_activeOnSystem() throws Exception { ApexInfo activeApexInfo = createApexInfo("test.apex_rebootless", 1, /* isActive= */ true, /* isFactory= */ true, extractResource("test.apex_rebootless_v1", - "test.rebootless_apex_v1.apex")); + "test.rebootless_apex_v1.apex")); ApexInfo[] apexInfo = new ApexInfo[]{activeApexInfo}; - ApexPackageInfo apexPackageInfo = new ApexPackageInfo(); - apexPackageInfo.scanApexPackages( - apexInfo, mPackageParser2, ParallelPackageParser.makeExecutorService()); + var results = scanApexInfos(apexInfo); File finalApex = extractResource("test.rebootles_apex_v2", "test.rebootless_apex_v2.apex"); ApexInfo newApexInfo = createApexInfo("test.apex_rebootless", 2, /* isActive= */ true, @@ -384,32 +371,28 @@ public class ApexManagerTest { File installedApex = extractResource("installed", "test.rebootless_apex_v2.apex"); newApexInfo = mApexManager.installPackage(installedApex); - apexPackageInfo.notifyPackageInstalled(newApexInfo, mPackageParser2); - var newInfo = apexPackageInfo.getPackageInfo("test.apex.rebootless", - ApexManager.MATCH_ACTIVE_PACKAGE); - assertThat(newInfo.second.getBaseApkPath()).isEqualTo(finalApex.getAbsolutePath()); - assertThat(newInfo.second.getLongVersionCode()).isEqualTo(2); + var newPkg = mockParsePackage(mPackageParser2, newApexInfo); + assertThat(newPkg.getBaseApkPath()).isEqualTo(finalApex.getAbsolutePath()); + assertThat(newPkg.getLongVersionCode()).isEqualTo(2); - var factoryInfo = apexPackageInfo.getPackageInfo("test.apex.rebootless", - ApexManager.MATCH_FACTORY_PACKAGE); - assertThat(factoryInfo.second.getBaseApkPath()).isEqualTo(activeApexInfo.modulePath); - assertThat(factoryInfo.second.getLongVersionCode()).isEqualTo(1); - assertThat(factoryInfo.second.isSystem()).isTrue(); + var factoryPkg = mockParsePackage(mPackageParser2, + findFactory(results, "test.apex.rebootless").apexInfo); + assertThat(factoryPkg.getBaseApkPath()).isEqualTo(activeApexInfo.modulePath); + assertThat(factoryPkg.getLongVersionCode()).isEqualTo(1); + assertThat(factoryPkg.isSystem()).isTrue(); } @Test public void testInstallPackage_activeOnData() throws Exception { ApexInfo factoryApexInfo = createApexInfo("test.apex_rebootless", 1, /* isActive= */ false, /* isFactory= */ true, extractResource("test.apex_rebootless_v1", - "test.rebootless_apex_v1.apex")); + "test.rebootless_apex_v1.apex")); ApexInfo activeApexInfo = createApexInfo("test.apex_rebootless", 1, /* isActive= */ true, /* isFactory= */ false, extractResource("test.apex.rebootless@1", - "test.rebootless_apex_v1.apex")); + "test.rebootless_apex_v1.apex")); ApexInfo[] apexInfo = new ApexInfo[]{factoryApexInfo, activeApexInfo}; - ApexPackageInfo apexPackageInfo = new ApexPackageInfo(); - apexPackageInfo.scanApexPackages( - apexInfo, mPackageParser2, ParallelPackageParser.makeExecutorService()); + var results = scanApexInfos(apexInfo); File finalApex = extractResource("test.rebootles_apex_v2", "test.rebootless_apex_v2.apex"); ApexInfo newApexInfo = createApexInfo("test.apex_rebootless", 2, /* isActive= */ true, @@ -418,30 +401,20 @@ public class ApexManagerTest { File installedApex = extractResource("installed", "test.rebootless_apex_v2.apex"); newApexInfo = mApexManager.installPackage(installedApex); - apexPackageInfo.notifyPackageInstalled(newApexInfo, mPackageParser2); - var newInfo = apexPackageInfo.getPackageInfo("test.apex.rebootless", - ApexManager.MATCH_ACTIVE_PACKAGE); - assertThat(newInfo.second.getBaseApkPath()).isEqualTo(finalApex.getAbsolutePath()); - assertThat(newInfo.second.getLongVersionCode()).isEqualTo(2); + var newPkg = mockParsePackage(mPackageParser2, newApexInfo); + assertThat(newPkg.getBaseApkPath()).isEqualTo(finalApex.getAbsolutePath()); + assertThat(newPkg.getLongVersionCode()).isEqualTo(2); - var factoryInfo = apexPackageInfo.getPackageInfo("test.apex.rebootless", - ApexManager.MATCH_FACTORY_PACKAGE); - assertThat(factoryInfo.second.getBaseApkPath()).isEqualTo(factoryApexInfo.modulePath); - assertThat(factoryInfo.second.getLongVersionCode()).isEqualTo(1); - assertThat(factoryInfo.second.isSystem()).isTrue(); + var factoryPkg = mockParsePackage(mPackageParser2, + findFactory(results, "test.apex.rebootless").apexInfo); + assertThat(factoryPkg.getBaseApkPath()).isEqualTo(factoryApexInfo.modulePath); + assertThat(factoryPkg.getLongVersionCode()).isEqualTo(1); + assertThat(factoryPkg.isSystem()).isTrue(); } @Test public void testInstallPackageBinderCallFails() throws Exception { - ApexInfo activeApexInfo = createApexInfo("test.apex_rebootless", 1, /* isActive= */ true, - /* isFactory= */ false, extractResource("test.apex_rebootless_v1", - "test.rebootless_apex_v1.apex")); - ApexInfo[] apexInfo = new ApexInfo[]{activeApexInfo}; - ApexPackageInfo apexPackageInfo = new ApexPackageInfo(); - apexPackageInfo.scanApexPackages( - apexInfo, mPackageParser2, ParallelPackageParser.makeExecutorService()); - when(mApexService.installAndActivatePackage(anyString())).thenThrow( new RuntimeException("install failed :(")); @@ -452,14 +425,12 @@ public class ApexManagerTest { } @Test - public void testGetActivePackageNameForApexModuleName() throws Exception { + public void testGetActivePackageNameForApexModuleName() { final String moduleName = "com.android.module_name"; ApexInfo[] apexInfo = createApexInfoForTestPkg(true, false); apexInfo[0].moduleName = moduleName; - ApexPackageInfo apexPackageInfo = new ApexPackageInfo(); - List<ApexManager.ScanResult> scanResults = apexPackageInfo.scanApexPackages( - apexInfo, mPackageParser2, ParallelPackageParser.makeExecutorService()); + List<ApexManager.ScanResult> scanResults = scanApexInfos(apexInfo); mApexManager.notifyScanResult(scanResults); assertThat(mApexManager.getActivePackageNameForApexModuleName(moduleName)) @@ -472,12 +443,13 @@ public class ApexManagerTest { when(mApexService.getActivePackages()).thenReturn(new ApexInfo[]{apex}); final File backingApexFile = mApexManager.getBackingApexFile( - new File("/apex/" + TEST_APEX_PKG + "/apk/App/App.apk")); + new File(mMockSystem.system().getApexDirectory(), + TEST_APEX_PKG + "/apk/App/App.apk")); assertThat(backingApexFile.getAbsolutePath()).isEqualTo(apex.modulePath); } @Test - public void testGetBackingApexFile_fileNotOnApexMountPoint_returnsNull() throws Exception { + public void testGetBackingApexFile_fileNotOnApexMountPoint_returnsNull() { File result = mApexManager.getBackingApexFile( new File("/data/local/tmp/whatever/does-not-matter")); assertThat(result).isNull(); @@ -489,22 +461,23 @@ public class ApexManagerTest { when(mApexService.getActivePackages()).thenReturn(new ApexInfo[]{apex}); final File backingApexFile = mApexManager.getBackingApexFile( - new File("/apex/com.wrong.apex/apk/App")); + new File(mMockSystem.system().getApexDirectory(), "com.wrong.apex/apk/App")); assertThat(backingApexFile).isNull(); } @Test - public void testGetBackingApexFiles_topLevelApexDir_returnsNull() throws Exception { + public void testGetBackingApexFiles_topLevelApexDir_returnsNull() { assertThat(mApexManager.getBackingApexFile(Environment.getApexDirectory())).isNull(); assertThat(mApexManager.getBackingApexFile(new File("/apex/"))).isNull(); assertThat(mApexManager.getBackingApexFile(new File("/apex//"))).isNull(); } @Test - public void testGetBackingApexFiles_flattenedApex() throws Exception { + public void testGetBackingApexFiles_flattenedApex() { ApexManager flattenedApexManager = new ApexManager.ApexManagerFlattenedApex(); final File backingApexFile = flattenedApexManager.getBackingApexFile( - new File("/apex/com.android.apex.cts.shim/app/CtsShim/CtsShim.apk")); + new File(mMockSystem.system().getApexDirectory(), + "com.android.apex.cts.shim/app/CtsShim/CtsShim.apk")); assertThat(backingApexFile).isNull(); } @@ -521,7 +494,7 @@ public class ApexManagerTest { } private ApexInfo createApexInfoForTestPkg(boolean isActive, boolean isFactory, int version) { - File apexFile = extractResource(TEST_APEX_PKG, TEST_APEX_FILE_NAME); + File apexFile = extractResource(TEST_APEX_PKG, TEST_APEX_FILE_NAME); ApexInfo apexInfo = new ApexInfo(); apexInfo.isActive = isActive; apexInfo.isFactory = isFactory; diff --git a/services/tests/mockingservicestests/src/com/android/server/pm/InitAppsHelperTest.kt b/services/tests/mockingservicestests/src/com/android/server/pm/InitAppsHelperTest.kt index 2165301f56c2..15b4975bb2b9 100644 --- a/services/tests/mockingservicestests/src/com/android/server/pm/InitAppsHelperTest.kt +++ b/services/tests/mockingservicestests/src/com/android/server/pm/InitAppsHelperTest.kt @@ -83,7 +83,7 @@ class InitAppsHelperTest { val pms = createPackageManagerService() assertThat(pms.isFirstBoot).isEqualTo(true) assertThat(pms.isDeviceUpgrading).isEqualTo(false) - val initAppsHelper = InitAppsHelper(pms, rule.mocks().apexManager, null, null, + val initAppsHelper = InitAppsHelper(pms, rule.mocks().apexManager, null, listOf<ScanPartition>()) assertThat( initAppsHelper.systemScanFlags and PackageManagerService.SCAN_FIRST_BOOT_OR_UPGRADE) @@ -98,7 +98,7 @@ class InitAppsHelperTest { val pms = createPackageManagerService() assertThat(pms.isFirstBoot).isEqualTo(false) assertThat(pms.isDeviceUpgrading).isEqualTo(true) - val initAppsHelper = InitAppsHelper(pms, rule.mocks().apexManager, null, null, + val initAppsHelper = InitAppsHelper(pms, rule.mocks().apexManager, null, listOf<ScanPartition>()) assertThat( initAppsHelper.systemScanFlags and PackageManagerService.SCAN_FIRST_BOOT_OR_UPGRADE) @@ -112,7 +112,7 @@ class InitAppsHelperTest { val pms = createPackageManagerService() assertThat(pms.isFirstBoot).isEqualTo(false) assertThat(pms.isDeviceUpgrading).isEqualTo(false) - val initAppsHelper = InitAppsHelper(pms, rule.mocks().apexManager, null, null, + val initAppsHelper = InitAppsHelper(pms, rule.mocks().apexManager, null, listOf<ScanPartition>()) assertThat( initAppsHelper.systemScanFlags and PackageManagerService.SCAN_FIRST_BOOT_OR_UPGRADE) @@ -126,7 +126,7 @@ class InitAppsHelperTest { val pms = createPackageManagerService() assertThat(pms.isFirstBoot).isEqualTo(false) assertThat(pms.isDeviceUpgrading).isEqualTo(true) - val initAppsHelper = InitAppsHelper(pms, rule.mocks().apexManager, null, null, + val initAppsHelper = InitAppsHelper(pms, rule.mocks().apexManager, null, listOf<ScanPartition>()) assertThat( initAppsHelper.systemScanFlags and PackageManagerService.SCAN_FIRST_BOOT_OR_UPGRADE) diff --git a/services/tests/mockingservicestests/src/com/android/server/pm/MockSystem.kt b/services/tests/mockingservicestests/src/com/android/server/pm/MockSystem.kt index dc7bcd625ee3..dd6c7334a45a 100644 --- a/services/tests/mockingservicestests/src/com/android/server/pm/MockSystem.kt +++ b/services/tests/mockingservicestests/src/com/android/server/pm/MockSystem.kt @@ -78,14 +78,6 @@ import com.android.server.testutils.mock import com.android.server.testutils.nullable import com.android.server.testutils.whenever import com.android.server.utils.WatchedArrayMap -import java.io.File -import java.io.IOException -import java.nio.file.Files -import java.security.PublicKey -import java.security.cert.CertificateException -import java.util.Arrays -import java.util.Random -import java.util.concurrent.FutureTask import libcore.util.HexEncoding import org.junit.Assert import org.junit.rules.TestRule @@ -94,6 +86,14 @@ import org.junit.runners.model.Statement import org.mockito.AdditionalMatchers.or import org.mockito.Mockito import org.mockito.quality.Strictness +import java.io.File +import java.io.IOException +import java.nio.file.Files +import java.security.PublicKey +import java.security.cert.CertificateException +import java.util.Arrays +import java.util.Random +import java.util.concurrent.FutureTask /** * A utility for mocking behavior of the system and dependencies when testing PackageManagerService @@ -104,6 +104,9 @@ import org.mockito.quality.Strictness class MockSystem(withSession: (StaticMockitoSessionBuilder) -> Unit = {}) { private val random = Random() val mocks = Mocks() + + // TODO: getBackingApexFile does not handle paths that aren't /apex + val apexDirectory = File("/apex") val packageCacheDirectory: File = Files.createTempDirectory("packageCache").toFile() val rootDirectory: File = @@ -297,7 +300,9 @@ class MockSystem(withSession: (StaticMockitoSessionBuilder) -> Unit = {}) { whenever(mocks.systemConfig.sharedLibraries).thenReturn(DEFAULT_SHARED_LIBRARIES_LIST) whenever(mocks.systemConfig.defaultVrComponents).thenReturn(ArraySet()) whenever(mocks.systemConfig.hiddenApiWhitelistedApps).thenReturn(ArraySet()) + wheneverStatic { SystemProperties.set(anyString(), anyString()) }.thenDoNothing() wheneverStatic { SystemProperties.getBoolean("fw.free_cache_v2", true) }.thenReturn(true) + wheneverStatic { Environment.getApexDirectory() }.thenReturn(apexDirectory) wheneverStatic { Environment.getPackageCacheDirectory() }.thenReturn(packageCacheDirectory) wheneverStatic { SystemProperties.digestOf("ro.build.fingerprint") }.thenReturn("cacheName") wheneverStatic { Environment.getRootDirectory() }.thenReturn(rootDirectory) diff --git a/services/tests/mockingservicestests/utils-mockito/com/android/server/extendedtestutils/ExtendedMockitoUtils.kt b/services/tests/mockingservicestests/utils-mockito/com/android/server/extendedtestutils/ExtendedMockitoUtils.kt index 72ae77e48e25..a0a6743903ad 100644 --- a/services/tests/mockingservicestests/utils-mockito/com/android/server/extendedtestutils/ExtendedMockitoUtils.kt +++ b/services/tests/mockingservicestests/utils-mockito/com/android/server/extendedtestutils/ExtendedMockitoUtils.kt @@ -33,9 +33,14 @@ fun <T> wheneverStatic(mockedMethod: MockedMethod<T>) = object : CustomStaticStu override fun thenReturn(value: T) { ExtendedMockito.doReturn(value).wheneverStatic(mockedMethod) } + + override fun thenDoNothing() { + ExtendedMockito.doNothing().wheneverStatic(mockedMethod) + } } interface CustomStaticStubber<T> { fun thenAnswer(answer: Answer<T>) fun thenReturn(value: T) + fun thenDoNothing() } diff --git a/services/tests/servicestests/Android.bp b/services/tests/servicestests/Android.bp index 8a932f165ca6..61bb57e145f8 100644 --- a/services/tests/servicestests/Android.bp +++ b/services/tests/servicestests/Android.bp @@ -124,9 +124,6 @@ android_test { ":PackageParserTestApp4", ":PackageParserTestApp5", ":PackageParserTestApp6", - ":apex.test", - ":test.rebootless_apex_v1", - ":test.rebootless_apex_v2", ":com.android.apex.cts.shim.v1_prebuilt", ":com.android.apex.cts.shim.v2_different_certificate_prebuilt", ":com.android.apex.cts.shim.v2_unsigned_apk_container_prebuilt", diff --git a/services/tests/servicestests/src/com/android/server/biometrics/sensors/BaseClientMonitorTest.java b/services/tests/servicestests/src/com/android/server/biometrics/sensors/BaseClientMonitorTest.java index 8e6d90c839d8..3a9c0f0f1790 100644 --- a/services/tests/servicestests/src/com/android/server/biometrics/sensors/BaseClientMonitorTest.java +++ b/services/tests/servicestests/src/com/android/server/biometrics/sensors/BaseClientMonitorTest.java @@ -107,7 +107,7 @@ public class BaseClientMonitorTest { assertThat(mClientMonitor.getRequestId()).isEqualTo(id); } - private class TestClientMonitor extends BaseClientMonitor implements Interruptable { + private class TestClientMonitor extends BaseClientMonitor { public boolean mCanceled = false; TestClientMonitor() { @@ -129,5 +129,10 @@ public class BaseClientMonitorTest { public void cancelWithoutStarting(@NonNull ClientMonitorCallback callback) { mCanceled = true; } + + @Override + public boolean isInterruptable() { + return true; + } } } diff --git a/services/tests/servicestests/src/com/android/server/biometrics/sensors/BiometricSchedulerOperationTest.java b/services/tests/servicestests/src/com/android/server/biometrics/sensors/BiometricSchedulerOperationTest.java index 9e9d70332f00..3c77a3593001 100644 --- a/services/tests/servicestests/src/com/android/server/biometrics/sensors/BiometricSchedulerOperationTest.java +++ b/services/tests/servicestests/src/com/android/server/biometrics/sensors/BiometricSchedulerOperationTest.java @@ -57,11 +57,16 @@ public class BiometricSchedulerOperationTest { public interface FakeHal {} public abstract static class InterruptableMonitor<T> - extends HalClientMonitor<T> implements Interruptable { + extends HalClientMonitor<T> { public InterruptableMonitor() { super(null, null, null, null, 0, null, 0, 0, mock(BiometricLogger.class), mock(BiometricContext.class)); } + + @Override + public boolean isInterruptable() { + return true; + } } @Rule @@ -293,7 +298,6 @@ public class BiometricSchedulerOperationTest { assertThat(mOperation.isCanceling()).isTrue(); verify(mClientMonitor).cancel(); - verify(mClientMonitor, never()).cancelWithoutStarting(any()); verify(mClientMonitor, never()).destroy(); mStartedCallbackCaptor.getValue().onClientFinished(mClientMonitor, true); diff --git a/services/tests/servicestests/src/com/android/server/biometrics/sensors/BiometricSchedulerTest.java b/services/tests/servicestests/src/com/android/server/biometrics/sensors/BiometricSchedulerTest.java index ffacbf331d89..9f30c7578540 100644 --- a/services/tests/servicestests/src/com/android/server/biometrics/sensors/BiometricSchedulerTest.java +++ b/services/tests/servicestests/src/com/android/server/biometrics/sensors/BiometricSchedulerTest.java @@ -34,7 +34,6 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -import static org.mockito.Mockito.withSettings; import android.content.Context; import android.hardware.biometrics.BiometricAuthenticator; @@ -475,8 +474,8 @@ public class BiometricSchedulerTest { @Test public void testInterruptPrecedingClients_whenExpected() { - final BaseClientMonitor interruptableMonitor = mock(BaseClientMonitor.class, - withSettings().extraInterfaces(Interruptable.class)); + final BaseClientMonitor interruptableMonitor = mock(BaseClientMonitor.class); + when(interruptableMonitor.isInterruptable()).thenReturn(true); final BaseClientMonitor interrupter = mock(BaseClientMonitor.class); when(interrupter.interruptsPrecedingClients()).thenReturn(true); @@ -491,8 +490,8 @@ public class BiometricSchedulerTest { @Test public void testDoesNotInterruptPrecedingClients_whenNotExpected() { - final BaseClientMonitor interruptableMonitor = mock(BaseClientMonitor.class, - withSettings().extraInterfaces(Interruptable.class)); + final BaseClientMonitor interruptableMonitor = mock(BaseClientMonitor.class); + when(interruptableMonitor.isInterruptable()).thenReturn(true); final BaseClientMonitor interrupter = mock(BaseClientMonitor.class); when(interrupter.interruptsPrecedingClients()).thenReturn(false); diff --git a/services/tests/servicestests/src/com/android/server/utils/EventLoggerTest.java b/services/tests/servicestests/src/com/android/server/utils/EventLoggerTest.java index 4762696d7c61..aafc16db50da 100644 --- a/services/tests/servicestests/src/com/android/server/utils/EventLoggerTest.java +++ b/services/tests/servicestests/src/com/android/server/utils/EventLoggerTest.java @@ -29,8 +29,10 @@ import org.junit.runners.Parameterized; import java.io.PrintWriter; import java.io.StringWriter; +import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; +import java.util.List; @SmallTest @RunWith(Enclosed.class) @@ -51,17 +53,25 @@ public class EventLoggerTest { private StringWriter mTestStringWriter; private PrintWriter mTestPrintWriter; + private TestDumpSink mTestConsumer; private EventLogger mEventLogger; @Before public void setUp() { mTestStringWriter = new StringWriter(); mTestPrintWriter = new PrintWriter(mTestStringWriter); + mTestConsumer = new TestDumpSink(); mEventLogger = new EventLogger(EVENTS_LOGGER_SIZE, EVENTS_LOGGER_TAG); } @Test - public void testThatConsumeOfEmptyLoggerProducesEmptyList() { + public void testThatConsumerProducesEmptyListFromEmptyLog() { + mEventLogger.dump(mTestConsumer); + assertThat(mTestConsumer.getLastKnownConsumedEvents()).isEmpty(); + } + + @Test + public void testThatPrintWriterProducesEmptyListFromEmptyLog() { mEventLogger.dump(mTestPrintWriter); assertThat(mTestStringWriter.toString()).isEmpty(); } @@ -102,10 +112,12 @@ public class EventLoggerTest { }); } + private TestDumpSink mTestConsumer; private EventLogger mEventLogger; private final StringWriter mTestStringWriter; private final PrintWriter mTestPrintWriter; + private final EventLogger.Event[] mEventsToInsert; private final EventLogger.Event[] mExpectedEvents; @@ -119,11 +131,25 @@ public class EventLoggerTest { @Before public void setUp() { + mTestConsumer = new TestDumpSink(); mEventLogger = new EventLogger(EVENTS_LOGGER_SIZE, EVENTS_LOGGER_TAG); } @Test - public void testThatLoggingWorksAsExpected() { + public void testThatConsumerDumpsEventsAsExpected() { + for (EventLogger.Event event: mEventsToInsert) { + mEventLogger.enqueue(event); + } + + mEventLogger.dump(mTestConsumer); + + assertThat(mTestConsumer.getLastKnownConsumedEvents()) + .containsExactlyElementsIn(mExpectedEvents); + } + + + @Test + public void testThatPrintWriterDumpsEventsAsExpected() { for (EventLogger.Event event: mEventsToInsert) { mEventLogger.enqueue(event); } @@ -149,11 +175,27 @@ public class EventLoggerTest { return stringWriter.toString(); } - private static class TestEvent extends EventLogger.Event { + + private static final class TestEvent extends EventLogger.Event { @Override public String eventToString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); } } + + private static final class TestDumpSink implements EventLogger.DumpSink { + + private final ArrayList<EventLogger.Event> mEvents = new ArrayList<>(); + + @Override + public void sink(String tag, List<EventLogger.Event> events) { + mEvents.clear(); + mEvents.addAll(events); + } + + public ArrayList<EventLogger.Event> getLastKnownConsumedEvents() { + return new ArrayList<>(mEvents); + } + } } diff --git a/services/tests/wmtests/src/com/android/server/wm/TransitionTests.java b/services/tests/wmtests/src/com/android/server/wm/TransitionTests.java index d4c9087a9a69..35b9710f5528 100644 --- a/services/tests/wmtests/src/com/android/server/wm/TransitionTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/TransitionTests.java @@ -1520,6 +1520,29 @@ public class TransitionTests extends WindowTestsBase { transition.abort(); } + @Test + public void testCollectReparentChange() { + registerTestTransitionPlayer(); + + // Reparent activity in transition. + final Task lastParent = createTask(mDisplayContent); + final Task newParent = createTask(mDisplayContent); + final ActivityRecord activity = createActivityRecord(lastParent); + doReturn(true).when(lastParent).shouldRemoveSelfOnLastChildRemoval(); + doNothing().when(activity).setDropInputMode(anyInt()); + activity.mVisibleRequested = true; + + final Transition transition = new Transition(TRANSIT_CHANGE, 0 /* flags */, + activity.mTransitionController, mWm.mSyncEngine); + activity.mTransitionController.moveToCollecting(transition); + transition.collect(activity); + activity.reparent(newParent, POSITION_TOP); + + // ChangeInfo#mCommonAncestor should be set after reparent. + final Transition.ChangeInfo change = transition.mChanges.get(activity); + assertEquals(newParent.getDisplayArea(), change.mCommonAncestor); + } + private static void makeTaskOrganized(Task... tasks) { final ITaskOrganizer organizer = mock(ITaskOrganizer.class); for (Task t : tasks) { diff --git a/telephony/java/android/telephony/CarrierConfigManager.java b/telephony/java/android/telephony/CarrierConfigManager.java index 2c7867cfd1a2..7be40b873bf8 100644 --- a/telephony/java/android/telephony/CarrierConfigManager.java +++ b/telephony/java/android/telephony/CarrierConfigManager.java @@ -8774,6 +8774,22 @@ public class CarrierConfigManager { "premium_capability_purchase_condition_backoff_hysteresis_time_millis_long"; /** + * The amount of time in milliseconds within which the network must set up a slicing + * configuration for the premium capability after + * {@link TelephonyManager#purchasePremiumCapability(int, Executor, Consumer)} + * returns {@link TelephonyManager#PURCHASE_PREMIUM_CAPABILITY_RESULT_SUCCESS}. + * During the setup time, calls to + * {@link TelephonyManager#purchasePremiumCapability(int, Executor, Consumer)} will return + * {@link TelephonyManager#PURCHASE_PREMIUM_CAPABILITY_RESULT_PENDING_NETWORK_SETUP}. + * If the network fails set up a slicing configuration for the premium capability within the + * setup time, subsequent purchase requests will be allowed to go through again. + * + * The default value is 5 minutes. + */ + public static final String KEY_PREMIUM_CAPABILITY_NETWORK_SETUP_TIME_MILLIS_LONG = + "premium_capability_network_setup_time_millis_long"; + + /** * The URL to redirect to when the user clicks on the notification for a network boost via * premium capabilities after applications call * {@link TelephonyManager#purchasePremiumCapability(int, Executor, Consumer)}. @@ -9496,6 +9512,8 @@ public class CarrierConfigManager { sDefaults.putLong( KEY_PREMIUM_CAPABILITY_PURCHASE_CONDITION_BACKOFF_HYSTERESIS_TIME_MILLIS_LONG, TimeUnit.MINUTES.toMillis(30)); + sDefaults.putLong(KEY_PREMIUM_CAPABILITY_NETWORK_SETUP_TIME_MILLIS_LONG, + TimeUnit.MINUTES.toMillis(5)); sDefaults.putString(KEY_PREMIUM_CAPABILITY_PURCHASE_URL_STRING, null); sDefaults.putBoolean(KEY_PREMIUM_CAPABILITY_SUPPORTED_ON_LTE_BOOL, false); sDefaults.putStringArray(KEY_IWLAN_HANDOVER_POLICY_STRING_ARRAY, new String[]{ diff --git a/telephony/java/android/telephony/SubscriptionManager.java b/telephony/java/android/telephony/SubscriptionManager.java index ef693b5278a0..76a145ce31cc 100644 --- a/telephony/java/android/telephony/SubscriptionManager.java +++ b/telephony/java/android/telephony/SubscriptionManager.java @@ -4002,6 +4002,10 @@ public class SubscriptionManager { * cautiously, for example, after formatting the number to a consistent format with * {@link android.telephony.PhoneNumberUtils#formatNumberToE164(String, String)}. * + * <p>The availability and correctness of the phone number depends on the underlying source + * and the network etc. Additional verification is needed to use this number for + * security-related or other sensitive scenarios. + * * @param subscriptionId the subscription ID, or {@link #DEFAULT_SUBSCRIPTION_ID} * for the default one. * @return the phone number, or an empty string if not available. diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java index ff1b1c097d68..35b205592a6a 100644 --- a/telephony/java/android/telephony/TelephonyManager.java +++ b/telephony/java/android/telephony/TelephonyManager.java @@ -9476,7 +9476,8 @@ public class TelephonyManager { ALLOWED_NETWORK_TYPES_REASON_USER, ALLOWED_NETWORK_TYPES_REASON_POWER, ALLOWED_NETWORK_TYPES_REASON_CARRIER, - ALLOWED_NETWORK_TYPES_REASON_ENABLE_2G + ALLOWED_NETWORK_TYPES_REASON_ENABLE_2G, + ALLOWED_NETWORK_TYPES_REASON_USER_RESTRICTIONS, }) @Retention(RetentionPolicy.SOURCE) public @interface AllowedNetworkTypesReason { @@ -9515,6 +9516,15 @@ public class TelephonyManager { public static final int ALLOWED_NETWORK_TYPES_REASON_ENABLE_2G = 3; /** + * To indicate allowed network type change is requested by an update to the + * {@link android.os.UserManager.DISALLOW_CELLULAR_2G} user restriction. + * + * @hide + */ + @SystemApi + public static final int ALLOWED_NETWORK_TYPES_REASON_USER_RESTRICTIONS = 4; + + /** * Set the allowed network types of the device and provide the reason triggering the allowed * network change. * <p>Requires permission: android.Manifest.MODIFY_PHONE_STATE or @@ -9606,6 +9616,7 @@ public class TelephonyManager { case TelephonyManager.ALLOWED_NETWORK_TYPES_REASON_POWER: case TelephonyManager.ALLOWED_NETWORK_TYPES_REASON_CARRIER: case TelephonyManager.ALLOWED_NETWORK_TYPES_REASON_ENABLE_2G: + case ALLOWED_NETWORK_TYPES_REASON_USER_RESTRICTIONS: return true; } return false; @@ -17195,7 +17206,13 @@ public class TelephonyManager { } /** - * Purchase premium capability request was successful. Subsequent attempts will return + * Purchase premium capability request was successful. + * Once the purchase result is successful, the network must set up a slicing configuration + * for the purchased premium capability within the timeout specified by + * {@link CarrierConfigManager#KEY_PREMIUM_CAPABILITY_NETWORK_SETUP_TIME_MILLIS_LONG}. + * During the setup time, subsequent attempts will return + * {@link #PURCHASE_PREMIUM_CAPABILITY_RESULT_PENDING_NETWORK_SETUP}. + * After setup is complete, subsequent attempts will return * {@link #PURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_PURCHASED} until the booster expires. * The expiry time is determined by the type or duration of boost purchased from the carrier, * provided at {@link CarrierConfigManager#KEY_PREMIUM_CAPABILITY_PURCHASE_URL_STRING}. @@ -17319,6 +17336,16 @@ public class TelephonyManager { public static final int PURCHASE_PREMIUM_CAPABILITY_RESULT_NOT_DEFAULT_DATA = 14; /** + * Purchase premium capability was successful and is waiting for the network to setup the + * slicing configuration. If the setup is complete within the time specified by + * {@link CarrierConfigManager#KEY_PREMIUM_CAPABILITY_NETWORK_SETUP_TIME_MILLIS_LONG}, + * subsequent requests will return {@link #PURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_PURCHASED} + * until the purchase expires. If the setup is not complete within the time specified above, + * applications can reques the premium capability again. + */ + public static final int PURCHASE_PREMIUM_CAPABILITY_RESULT_PENDING_NETWORK_SETUP = 15; + + /** * Results of the purchase premium capability request. * @hide */ @@ -17336,7 +17363,8 @@ public class TelephonyManager { PURCHASE_PREMIUM_CAPABILITY_RESULT_FEATURE_NOT_SUPPORTED, PURCHASE_PREMIUM_CAPABILITY_RESULT_NETWORK_NOT_AVAILABLE, PURCHASE_PREMIUM_CAPABILITY_RESULT_NETWORK_CONGESTED, - PURCHASE_PREMIUM_CAPABILITY_RESULT_NOT_DEFAULT_DATA}) + PURCHASE_PREMIUM_CAPABILITY_RESULT_NOT_DEFAULT_DATA, + PURCHASE_PREMIUM_CAPABILITY_RESULT_PENDING_NETWORK_SETUP}) public @interface PurchasePremiumCapabilityResult {} /** @@ -17377,6 +17405,8 @@ public class TelephonyManager { return "NETWORK_CONGESTED"; case PURCHASE_PREMIUM_CAPABILITY_RESULT_NOT_DEFAULT_DATA: return "NOT_DEFAULT_DATA"; + case PURCHASE_PREMIUM_CAPABILITY_RESULT_PENDING_NETWORK_SETUP: + return "PENDING_NETWORK_SETUP"; default: return "UNKNOWN (" + result + ")"; } diff --git a/tests/FlickerTests/AndroidTest.xml b/tests/FlickerTests/AndroidTest.xml index 03eb462267cb..d91aa1ebe8f5 100644 --- a/tests/FlickerTests/AndroidTest.xml +++ b/tests/FlickerTests/AndroidTest.xml @@ -13,8 +13,6 @@ <option name="run-command" value="cmd window tracing level all" /> <!-- set WM tracing to frame (avoid incomplete states) --> <option name="run-command" value="cmd window tracing frame" /> - <!-- set Layer tracing buffer size to 50mb --> - <option name="run-command" value="su root service call SurfaceFlinger 1029 i32 51200" /> <!-- ensure lock screen mode is swipe --> <option name="run-command" value="locksettings set-disabled false" /> <!-- restart launcher to activate TAPL --> diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppColdFromIcon.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppColdFromIcon.kt index 73e6d223f824..5e6fc2129a6a 100644 --- a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppColdFromIcon.kt +++ b/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppColdFromIcon.kt @@ -19,11 +19,11 @@ package com.android.server.wm.flicker.launch import android.platform.test.annotations.FlakyTest import android.platform.test.annotations.RequiresDevice import android.view.Surface +import android.view.WindowManagerPolicyConstants import com.android.server.wm.flicker.FlickerParametersRunnerFactory import com.android.server.wm.flicker.FlickerTestParameter import com.android.server.wm.flicker.FlickerTestParameterFactory import com.android.server.wm.flicker.dsl.FlickerBuilder -import com.android.server.wm.flicker.helpers.setRotation import com.android.server.wm.flicker.rules.RemoveAllTasksButHomeRule import org.junit.FixMethodOrder import org.junit.Test @@ -68,7 +68,6 @@ class OpenAppColdFromIcon(testSpec: FlickerTestParameter) : tapl.setExpectedRotation(Surface.ROTATION_0) } RemoveAllTasksButHomeRule.removeAllTasksButHome() - this.setRotation(testSpec.startRotation) } transitions { tapl @@ -187,7 +186,13 @@ class OpenAppColdFromIcon(testSpec: FlickerTestParameter) : @Parameterized.Parameters(name = "{0}") @JvmStatic fun getParams(): Collection<FlickerTestParameter> { - return FlickerTestParameterFactory.getInstance().getConfigNonRotationTests() + return FlickerTestParameterFactory.getInstance() + // TAPL fails on landscape mode b/240916028 + .getConfigNonRotationTests( + supportedNavigationModes = listOf( + WindowManagerPolicyConstants.NAV_BAR_MODE_3BUTTON_OVERLAY + ) + ) } } } diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromLockNotificationCold.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromLockNotificationCold.kt index 09d7637ffefc..0edbc86ab65f 100644 --- a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromLockNotificationCold.kt +++ b/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromLockNotificationCold.kt @@ -97,8 +97,8 @@ open class OpenAppFromLockNotificationCold(testSpec: FlickerTestParameter) : super.statusBarLayerPositionAtEnd() /** {@inheritDoc} */ - @Postsubmit @Test + @Ignore("Not applicable to this CUJ. Display starts locked and app is full screen at the end") override fun navBarLayerIsVisibleAtStartAndEnd() = super.navBarLayerIsVisibleAtStartAndEnd() /** {@inheritDoc} */ diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromLockNotificationWithLockOverlayApp.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromLockNotificationWithLockOverlayApp.kt index c10b99317b19..4ee12837fe09 100644 --- a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromLockNotificationWithLockOverlayApp.kt +++ b/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromLockNotificationWithLockOverlayApp.kt @@ -16,6 +16,7 @@ package com.android.server.wm.flicker.launch +import android.platform.test.annotations.FlakyTest import android.platform.test.annotations.Postsubmit import android.platform.test.annotations.Presubmit import android.platform.test.annotations.RequiresDevice @@ -71,7 +72,7 @@ class OpenAppFromLockNotificationWithLockOverlayApp(testSpec: FlickerTestParamet } @Test - @Postsubmit + @FlakyTest(bugId = 227143265) fun showWhenLockedAppWindowBecomesVisible() { testSpec.assertWm { this.hasNoVisibleAppWindow() @@ -83,7 +84,7 @@ class OpenAppFromLockNotificationWithLockOverlayApp(testSpec: FlickerTestParamet } @Test - @Postsubmit + @FlakyTest(bugId = 227143265) fun showWhenLockedAppLayerBecomesVisible() { testSpec.assertLayers { this.isInvisible(showWhenLockedApp) @@ -98,11 +99,17 @@ class OpenAppFromLockNotificationWithLockOverlayApp(testSpec: FlickerTestParamet @Presubmit @Test override fun appLayerBecomesVisible() = super.appLayerBecomesVisible() /** {@inheritDoc} */ - @Postsubmit + @FlakyTest(bugId = 227143265) @Test override fun visibleLayersShownMoreThanOneConsecutiveEntry() = super.visibleLayersShownMoreThanOneConsecutiveEntry() + /** {@inheritDoc} */ + @FlakyTest(bugId = 209599395) + @Test + override fun navBarLayerIsVisibleAtStartAndEnd() = + super.navBarLayerIsVisibleAtStartAndEnd() + companion object { /** * Creates the test configurations. |