diff options
347 files changed, 8214 insertions, 3728 deletions
diff --git a/StubLibraries.bp b/StubLibraries.bp index c61f7c684efd..9b4374973087 100644 --- a/StubLibraries.bp +++ b/StubLibraries.bp @@ -449,6 +449,7 @@ droidstubs { "core/java/android/os/RemoteException.java", "core/java/android/util/AndroidException.java", ], + libs: ["framework-annotations-lib"], installable: false, sdk_version: "core_platform", annotations_enabled: true, @@ -462,7 +463,7 @@ droidstubs { java_library_static { name: "hwbinder.stubs", sdk_version: "core_current", - libs: ["stub-annotations"], + libs: ["framework-annotations-lib"], srcs: [ ":hwbinder-stubs-docs", ], diff --git a/apex/jobscheduler/service/java/com/android/server/job/JobServiceContext.java b/apex/jobscheduler/service/java/com/android/server/job/JobServiceContext.java index 790fae0860de..ce4fd7a6147c 100644 --- a/apex/jobscheduler/service/java/com/android/server/job/JobServiceContext.java +++ b/apex/jobscheduler/service/java/com/android/server/job/JobServiceContext.java @@ -280,7 +280,7 @@ public final class JobServiceContext implements ServiceConnection { if (job.shouldTreatAsExpeditedJob()) { bindFlags = Context.BIND_AUTO_CREATE | Context.BIND_NOT_FOREGROUND | Context.BIND_ALMOST_PERCEPTIBLE - | Context.BIND_ALLOW_NETWORK_ACCESS + | Context.BIND_BYPASS_POWER_NETWORK_RESTRICTIONS | Context.BIND_NOT_APP_COMPONENT_USAGE; } else { bindFlags = Context.BIND_AUTO_CREATE | Context.BIND_NOT_FOREGROUND diff --git a/core/api/current.txt b/core/api/current.txt index f1d5b8e202e8..9b8ea6b52382 100644 --- a/core/api/current.txt +++ b/core/api/current.txt @@ -867,6 +867,7 @@ package android { field public static final int keycode = 16842949; // 0x10100c5 field public static final int killAfterRestore = 16843420; // 0x101029c field public static final int knownCerts = 16844330; // 0x101062a + field public static final int lStar = 16844359; // 0x1010647 field public static final int label = 16842753; // 0x1010001 field public static final int labelFor = 16843718; // 0x10103c6 field @Deprecated public static final int labelTextSize = 16843317; // 0x1010235 @@ -13178,6 +13179,7 @@ package android.content.res { method public boolean isStateful(); method @NonNull public static android.content.res.ColorStateList valueOf(@ColorInt int); method @NonNull public android.content.res.ColorStateList withAlpha(int); + method @NonNull public android.content.res.ColorStateList withLStar(float); method public void writeToParcel(android.os.Parcel, int); field @NonNull public static final android.os.Parcelable.Creator<android.content.res.ColorStateList> CREATOR; } @@ -20147,6 +20149,14 @@ package android.media { method public android.media.AudioAttributes.Builder setUsage(int); } + public class AudioDescriptor { + method @NonNull public byte[] getDescriptor(); + method public int getEncapsulationType(); + method public int getStandard(); + field public static final int STANDARD_EDID = 1; // 0x1 + field public static final int STANDARD_NONE = 0; // 0x0 + } + public abstract class AudioDeviceCallback { ctor public AudioDeviceCallback(); method public void onAudioDevicesAdded(android.media.AudioDeviceInfo[]); @@ -20155,6 +20165,7 @@ package android.media { public final class AudioDeviceInfo { method @NonNull public String getAddress(); + method @NonNull public java.util.List<android.media.AudioDescriptor> getAudioDescriptors(); method @NonNull public java.util.List<android.media.AudioProfile> getAudioProfiles(); method @NonNull public int[] getChannelCounts(); method @NonNull public int[] getChannelIndexMasks(); @@ -20617,8 +20628,11 @@ package android.media { public class AudioProfile { method @NonNull public int[] getChannelIndexMasks(); method @NonNull public int[] getChannelMasks(); + method public int getEncapsulationType(); method public int getFormat(); method @NonNull public int[] getSampleRates(); + field public static final int AUDIO_ENCAPSULATION_TYPE_IEC61937 = 1; // 0x1 + field public static final int AUDIO_ENCAPSULATION_TYPE_NONE = 0; // 0x0 } public class AudioRecord implements android.media.AudioRecordingMonitor android.media.AudioRouting android.media.MicrophoneDirection { @@ -42928,6 +42942,7 @@ package android.telephony.data { field public static final int PROTOCOL_NON_IP = 4; // 0x4 field public static final int PROTOCOL_PPP = 3; // 0x3 field public static final int PROTOCOL_UNSTRUCTURED = 5; // 0x5 + field public static final int TYPE_BIP = 8192; // 0x2000 field public static final int TYPE_CBS = 128; // 0x80 field public static final int TYPE_DEFAULT = 17; // 0x11 field public static final int TYPE_DUN = 8; // 0x8 @@ -42939,6 +42954,7 @@ package android.telephony.data { field public static final int TYPE_MCX = 1024; // 0x400 field public static final int TYPE_MMS = 2; // 0x2 field public static final int TYPE_SUPL = 4; // 0x4 + field public static final int TYPE_VSIM = 4096; // 0x1000 field public static final int TYPE_XCAP = 2048; // 0x800 } @@ -48435,7 +48451,6 @@ package android.view { method protected int computeVerticalScrollRange(); method public android.view.accessibility.AccessibilityNodeInfo createAccessibilityNodeInfo(); method public void createContextMenu(android.view.ContextMenu); - method @Nullable public android.view.translation.ViewTranslationRequest createTranslationRequest(@NonNull int[]); method @Deprecated public void destroyDrawingCache(); method public android.view.WindowInsets dispatchApplyWindowInsets(android.view.WindowInsets); method public boolean dispatchCapturedPointerEvent(android.view.MotionEvent); @@ -48461,6 +48476,7 @@ package android.view { method public boolean dispatchPopulateAccessibilityEvent(android.view.accessibility.AccessibilityEvent); method public void dispatchProvideAutofillStructure(@NonNull android.view.ViewStructure, int); method public void dispatchProvideStructure(android.view.ViewStructure); + method public void dispatchRequestTranslation(@NonNull java.util.Map<android.view.autofill.AutofillId,long[]>, @NonNull int[], @Nullable android.view.translation.TranslationCapability, @NonNull java.util.List<android.view.translation.ViewTranslationRequest>); method protected void dispatchRestoreInstanceState(android.util.SparseArray<android.os.Parcelable>); method protected void dispatchSaveInstanceState(android.util.SparseArray<android.os.Parcelable>); method public void dispatchScrollCaptureSearch(@NonNull android.graphics.Rect, @NonNull android.graphics.Point, @NonNull java.util.function.Consumer<android.view.ScrollCaptureTarget>); @@ -48756,6 +48772,8 @@ package android.view { method protected void onCreateContextMenu(android.view.ContextMenu); method protected int[] onCreateDrawableState(int); method public android.view.inputmethod.InputConnection onCreateInputConnection(android.view.inputmethod.EditorInfo); + method @Nullable public android.view.translation.ViewTranslationRequest onCreateTranslationRequest(@NonNull int[]); + method public void onCreateTranslationRequests(@NonNull long[], @NonNull int[], @NonNull java.util.function.Consumer<android.view.translation.ViewTranslationRequest>); method @CallSuper protected void onDetachedFromWindow(); method protected void onDisplayHint(int); method public boolean onDragEvent(android.view.DragEvent); @@ -48801,6 +48819,7 @@ package android.view { method public boolean onTouchEvent(android.view.MotionEvent); method public boolean onTrackballEvent(android.view.MotionEvent); method public void onTranslationResponse(@NonNull android.view.translation.ViewTranslationResponse); + method public void onTranslationResponse(@NonNull android.util.LongSparseArray<android.view.translation.ViewTranslationResponse>); method @CallSuper public void onVisibilityAggregated(boolean); method protected void onVisibilityChanged(@NonNull android.view.View, int); method public void onWindowFocusChanged(boolean); diff --git a/core/api/system-current.txt b/core/api/system-current.txt index c9ade7df7ca3..92c21f3ef3fc 100644 --- a/core/api/system-current.txt +++ b/core/api/system-current.txt @@ -10338,7 +10338,7 @@ package android.service.trust { package android.service.voice { - public class AlwaysOnHotwordDetector { + public class AlwaysOnHotwordDetector implements android.service.voice.HotwordDetector { method @Nullable public android.content.Intent createEnrollIntent(); method @Nullable public android.content.Intent createReEnrollIntent(); method @Nullable public android.content.Intent createUnEnrollIntent(); @@ -10348,6 +10348,8 @@ package android.service.voice { method @Nullable @RequiresPermission(allOf={android.Manifest.permission.RECORD_AUDIO, android.Manifest.permission.CAPTURE_AUDIO_HOTWORD}) public android.service.voice.AlwaysOnHotwordDetector.ModelParamRange queryParameter(int); method @RequiresPermission(allOf={android.Manifest.permission.RECORD_AUDIO, android.Manifest.permission.CAPTURE_AUDIO_HOTWORD}) public int setParameter(int, int); method @RequiresPermission(allOf={android.Manifest.permission.RECORD_AUDIO, android.Manifest.permission.CAPTURE_AUDIO_HOTWORD}) public boolean startRecognition(int); + method @RequiresPermission(allOf={android.Manifest.permission.RECORD_AUDIO, android.Manifest.permission.CAPTURE_AUDIO_HOTWORD}) public boolean startRecognition(); + method @Nullable public boolean startRecognition(@NonNull android.os.ParcelFileDescriptor, @NonNull android.media.AudioFormat, @Nullable android.os.PersistableBundle); method @RequiresPermission(allOf={android.Manifest.permission.RECORD_AUDIO, android.Manifest.permission.CAPTURE_AUDIO_HOTWORD}) public boolean stopRecognition(); method public final void updateState(@Nullable android.os.PersistableBundle, @Nullable android.os.SharedMemory); field public static final int AUDIO_CAPABILITY_ECHO_CANCELLATION = 1; // 0x1 @@ -10367,13 +10369,10 @@ package android.service.voice { field @Deprecated public static final int STATE_KEYPHRASE_UNSUPPORTED = -1; // 0xffffffff } - public abstract static class AlwaysOnHotwordDetector.Callback { + public abstract static class AlwaysOnHotwordDetector.Callback implements android.service.voice.HotwordDetector.Callback { ctor public AlwaysOnHotwordDetector.Callback(); method public abstract void onAvailabilityChanged(int); - method public abstract void onDetected(@NonNull android.service.voice.AlwaysOnHotwordDetector.EventPayload); - method public abstract void onError(); - method public abstract void onRecognitionPaused(); - method public abstract void onRecognitionResumed(); + method public void onHotwordDetectionServiceInitialized(int); method public void onRejected(@Nullable android.service.voice.HotwordRejectedResult); } @@ -10418,23 +10417,41 @@ package android.service.voice { public abstract class HotwordDetectionService extends android.app.Service { ctor public HotwordDetectionService(); method @Nullable public final android.os.IBinder onBind(@NonNull android.content.Intent); - method public void onDetectFromDspSource(@NonNull android.os.ParcelFileDescriptor, @NonNull android.media.AudioFormat, long, @NonNull android.service.voice.HotwordDetectionService.DspHotwordDetectionCallback); - method public void onUpdateState(@Nullable android.os.PersistableBundle, @Nullable android.os.SharedMemory); + method public void onDetect(@NonNull android.os.ParcelFileDescriptor, @NonNull android.media.AudioFormat, long, @NonNull android.service.voice.HotwordDetectionService.Callback); + method public void onDetect(@NonNull android.os.ParcelFileDescriptor, @NonNull android.media.AudioFormat, @NonNull android.service.voice.HotwordDetectionService.Callback); + method public void onDetect(@NonNull android.os.ParcelFileDescriptor, @NonNull android.media.AudioFormat, @Nullable android.os.PersistableBundle, @NonNull android.service.voice.HotwordDetectionService.Callback); + method public void onUpdateState(@Nullable android.os.PersistableBundle, @Nullable android.os.SharedMemory, long, @Nullable java.util.function.IntConsumer); + field public static final int INITIALIZATION_STATUS_CUSTOM_ERROR_1 = 1; // 0x1 + field public static final int INITIALIZATION_STATUS_CUSTOM_ERROR_2 = 2; // 0x2 + field public static final int INITIALIZATION_STATUS_SUCCESS = 0; // 0x0 + field public static final int INITIALIZATION_STATUS_UNKNOWN = 100; // 0x64 field public static final String SERVICE_INTERFACE = "android.service.voice.HotwordDetectionService"; } - public static final class HotwordDetectionService.DspHotwordDetectionCallback { - method public void onDetected(); + public static final class HotwordDetectionService.Callback { + method public void onDetected(@Nullable android.service.voice.HotwordDetectedResult); method public void onRejected(@Nullable android.service.voice.HotwordRejectedResult); } public interface HotwordDetector { + method @RequiresPermission(allOf={android.Manifest.permission.RECORD_AUDIO, android.Manifest.permission.CAPTURE_AUDIO_HOTWORD}) public boolean startRecognition(); + method public boolean startRecognition(@NonNull android.os.ParcelFileDescriptor, @NonNull android.media.AudioFormat, @Nullable android.os.PersistableBundle); + method public boolean stopRecognition(); field public static final int CONFIDENCE_LEVEL_HIGH = 3; // 0x3 field public static final int CONFIDENCE_LEVEL_LOW = 1; // 0x1 field public static final int CONFIDENCE_LEVEL_MEDIUM = 2; // 0x2 field public static final int CONFIDENCE_LEVEL_NONE = 0; // 0x0 } + public static interface HotwordDetector.Callback { + method public void onDetected(@NonNull android.service.voice.AlwaysOnHotwordDetector.EventPayload); + method public void onError(); + method public void onHotwordDetectionServiceInitialized(int); + method public void onRecognitionPaused(); + method public void onRecognitionResumed(); + method public void onRejected(@Nullable android.service.voice.HotwordRejectedResult); + } + public final class HotwordRejectedResult implements android.os.Parcelable { method public int describeContents(); method public int getConfidenceLevel(); @@ -10445,6 +10462,7 @@ package android.service.voice { public class VoiceInteractionService extends android.app.Service { method @NonNull public final android.service.voice.AlwaysOnHotwordDetector createAlwaysOnHotwordDetector(String, java.util.Locale, android.service.voice.AlwaysOnHotwordDetector.Callback); method @NonNull @RequiresPermission(android.Manifest.permission.MANAGE_HOTWORD_DETECTION) public final android.service.voice.AlwaysOnHotwordDetector createAlwaysOnHotwordDetector(String, java.util.Locale, @Nullable android.os.PersistableBundle, @Nullable android.os.SharedMemory, android.service.voice.AlwaysOnHotwordDetector.Callback); + method @NonNull @RequiresPermission(android.Manifest.permission.MANAGE_HOTWORD_DETECTION) public final android.service.voice.HotwordDetector createHotwordDetector(@NonNull android.media.AudioFormat, @Nullable android.os.PersistableBundle, @Nullable android.os.SharedMemory, @NonNull android.service.voice.HotwordDetector.Callback); method @NonNull @RequiresPermission("android.permission.MANAGE_VOICE_KEYPHRASES") public final android.media.voice.KeyphraseModelManager createKeyphraseModelManager(); } @@ -12135,6 +12153,7 @@ package android.telephony.data { method public static int getApnTypeInt(@NonNull String); method @NonNull public static String getApnTypeString(int); field public static final String TYPE_ALL_STRING = "*"; + field public static final String TYPE_BIP_STRING = "bip"; field public static final String TYPE_CBS_STRING = "cbs"; field public static final String TYPE_DEFAULT_STRING = "default"; field public static final String TYPE_DUN_STRING = "dun"; @@ -12146,6 +12165,7 @@ package android.telephony.data { field public static final String TYPE_MCX_STRING = "mcx"; field public static final String TYPE_MMS_STRING = "mms"; field public static final String TYPE_SUPL_STRING = "supl"; + field public static final String TYPE_VSIM_STRING = "vsim"; field public static final String TYPE_XCAP_STRING = "xcap"; } @@ -14705,6 +14725,7 @@ package android.webkit { method public default boolean onCheckIsTextEditor(); method public void onConfigurationChanged(android.content.res.Configuration); method public android.view.inputmethod.InputConnection onCreateInputConnection(android.view.inputmethod.EditorInfo); + method @Nullable public default void onCreateTranslationRequests(@NonNull long[], @NonNull int[], @NonNull java.util.function.Consumer<android.view.translation.ViewTranslationRequest>); method public void onDetachedFromWindow(); method public boolean onDragEvent(android.view.DragEvent); method public void onDraw(android.graphics.Canvas); @@ -14729,6 +14750,7 @@ package android.webkit { method public void onStartTemporaryDetach(); method public boolean onTouchEvent(android.view.MotionEvent); method public boolean onTrackballEvent(android.view.MotionEvent); + method public default void onTranslationResponse(@NonNull android.util.LongSparseArray<android.view.translation.ViewTranslationResponse>); method public void onVisibilityChanged(android.view.View, int); method public void onWindowFocusChanged(boolean); method public void onWindowVisibilityChanged(int); diff --git a/core/api/test-current.txt b/core/api/test-current.txt index 8a683b2ac647..21771df3c6a3 100644 --- a/core/api/test-current.txt +++ b/core/api/test-current.txt @@ -1140,10 +1140,14 @@ package android.hardware.display { } public final class DisplayManager { + method public boolean areUserDisabledHdrTypesAllowed(); method @RequiresPermission(android.Manifest.permission.MODIFY_REFRESH_RATE_SWITCHING_TYPE) public int getRefreshRateSwitchingType(); + method @NonNull public int[] getUserDisabledHdrTypes(); method public boolean isMinimalPostProcessingRequested(int); + method @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public void setAreUserDisabledHdrTypesAllowed(boolean); method @RequiresPermission(android.Manifest.permission.MODIFY_REFRESH_RATE_SWITCHING_TYPE) public void setRefreshRateSwitchingType(int); method @RequiresPermission(android.Manifest.permission.OVERRIDE_DISPLAY_MODE_REQUESTS) public void setShouldAlwaysRespectAppRequestedMode(boolean); + method @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public void setUserDisabledHdrTypes(@NonNull int[]); method @RequiresPermission(android.Manifest.permission.OVERRIDE_DISPLAY_MODE_REQUESTS) public boolean shouldAlwaysRespectAppRequestedMode(); field public static final int SWITCHING_TYPE_ACROSS_AND_WITHIN_GROUPS = 2; // 0x2 field public static final int SWITCHING_TYPE_NONE = 0; // 0x0 @@ -2028,6 +2032,7 @@ package android.provider { public static final class Settings.Global extends android.provider.Settings.NameValueTable { field public static final String APP_OPS_CONSTANTS = "app_ops_constants"; + field public static final String ARE_USER_DISABLED_HDR_FORMATS_ALLOWED = "are_user_disabled_hdr_formats_allowed"; field public static final String AUTOMATIC_POWER_SAVE_MODE = "automatic_power_save_mode"; field public static final String BATTERY_SAVER_CONSTANTS = "battery_saver_constants"; field public static final String DEVELOPMENT_ENABLE_NON_RESIZABLE_MULTI_WINDOW = "enable_non_resizable_multi_window"; @@ -2042,6 +2047,7 @@ package android.provider { field public static final String NOTIFICATION_BUBBLES = "notification_bubbles"; field public static final String OVERLAY_DISPLAY_DEVICES = "overlay_display_devices"; field public static final String SHOW_FIRST_CRASH_DIALOG = "show_first_crash_dialog"; + field public static final String USER_DISABLED_HDR_FORMATS = "user_disabled_hdr_formats"; field public static final String USE_OPEN_WIFI_PACKAGE = "use_open_wifi_package"; } @@ -2592,6 +2598,7 @@ package android.view { } public final class Display { + method @NonNull public int[] getReportedHdrTypes(); method @NonNull public android.graphics.ColorSpace[] getSupportedWideColorGamut(); method public int getType(); method public boolean hasAccess(int); @@ -2642,7 +2649,9 @@ package android.view { public final class SurfaceControl implements android.os.Parcelable { ctor public SurfaceControl(@NonNull android.view.SurfaceControl, @NonNull String); method public static long acquireFrameRateFlexibilityToken(); + method @NonNull public static android.os.IBinder getInternalDisplayToken(); method public boolean isSameSurface(@NonNull android.view.SurfaceControl); + method public static void overrideHdrTypes(@NonNull android.os.IBinder, @NonNull int[]); method public static void releaseFrameRateFlexibilityToken(long); } diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java index 86e2723a4dc8..47843cc113a2 100644 --- a/core/java/android/app/Activity.java +++ b/core/java/android/app/Activity.java @@ -642,7 +642,7 @@ import java.util.function.Consumer; * protected void onCreate(Bundle savedInstanceState) { * super.onCreate(savedInstanceState); * - * SharedPreferences mPrefs = getSharedPreferences(); + * mPrefs = getSharedPreferences(getLocalClassName(), MODE_PRIVATE); * mCurViewMode = mPrefs.getInt("view_mode", DAY_VIEW_MODE); * } * diff --git a/core/java/android/app/Notification.java b/core/java/android/app/Notification.java index bf8250821cb6..d47c3ca7b721 100644 --- a/core/java/android/app/Notification.java +++ b/core/java/android/app/Notification.java @@ -12381,19 +12381,13 @@ public class Notification implements Parcelable } public StandardTemplateParams decorationType(int decorationType) { - // These fields are removed by the decoration process, and thus would not show anyway; - // hiding them is a minimal time/space optimization. - hideAppName(true); hideTitle(true); - hideSubText(true); - hideTime(true); // Minimally decorated custom views do not show certain pieces of chrome that have // always been shown when using DecoratedCustomViewStyle. boolean hideOtherFields = decorationType <= DECORATION_MINIMAL; hideLargeIcon(hideOtherFields); hideProgress(hideOtherFields); hideActions(hideOtherFields); - hideSnoozeButton(hideOtherFields); return this; } } diff --git a/core/java/android/content/Context.java b/core/java/android/content/Context.java index 45a8ffd3fb5c..6ff296c9799f 100644 --- a/core/java/android/content/Context.java +++ b/core/java/android/content/Context.java @@ -396,7 +396,7 @@ public abstract class Context { * * @hide */ - public static final int BIND_ALLOW_NETWORK_ACCESS = 0x00020000; + public static final int BIND_BYPASS_POWER_NETWORK_RESTRICTIONS = 0x00020000; /** * Flag for {@link #bindService}: allow background foreground service starts from the bound diff --git a/core/java/android/content/pm/parsing/ParsingPackageUtils.java b/core/java/android/content/pm/parsing/ParsingPackageUtils.java index 9f69d0c0afd3..4e7bd7046fc2 100644 --- a/core/java/android/content/pm/parsing/ParsingPackageUtils.java +++ b/core/java/android/content/pm/parsing/ParsingPackageUtils.java @@ -34,6 +34,8 @@ import android.annotation.IntRange; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.StyleableRes; +import android.app.ActivityThread; +import android.app.ResourcesManager; import android.content.Intent; import android.content.IntentFilter; import android.content.pm.ApplicationInfo; @@ -85,7 +87,9 @@ import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.os.FileUtils; +import android.os.RemoteException; import android.os.Trace; +import android.os.UserHandle; import android.os.ext.SdkExtensions; import android.permission.PermissionManager; import android.text.TextUtils; @@ -3043,6 +3047,42 @@ public class ParsingPackageUtils { } } + /** + * @hide + */ + public static void readConfigUseRoundIcon(Resources r) { + if (r != null) { + sUseRoundIcon = r.getBoolean(com.android.internal.R.bool.config_useRoundIcon); + return; + } + + final ApplicationInfo androidAppInfo; + try { + androidAppInfo = ActivityThread.getPackageManager().getApplicationInfo( + "android", 0 /* flags */, + UserHandle.myUserId()); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + final Resources systemResources = Resources.getSystem(); + + // Create in-flight as this overlayable resource is only used when config changes + final Resources overlayableRes = ResourcesManager.getInstance().getResources( + null /* activityToken */, + null /* resDir */, + null /* splitResDirs */, + androidAppInfo.resourceDirs, + androidAppInfo.overlayPaths, + androidAppInfo.sharedLibraryFiles, + null /* overrideDisplayId */, + null /* overrideConfig */, + systemResources.getCompatibilityInfo(), + systemResources.getClassLoader(), + null /* loaders */); + + sUseRoundIcon = overlayableRes.getBoolean(com.android.internal.R.bool.config_useRoundIcon); + } + /* The following set of methods makes code easier to read by re-ordering the TypedArray methods. diff --git a/core/java/android/content/res/ColorStateList.java b/core/java/android/content/res/ColorStateList.java index 921c63025a57..cdd8265ad5cd 100644 --- a/core/java/android/content/res/ColorStateList.java +++ b/core/java/android/content/res/ColorStateList.java @@ -34,6 +34,7 @@ import android.util.StateSet; import android.util.Xml; import com.android.internal.R; +import com.android.internal.graphics.ColorUtils; import com.android.internal.util.ArrayUtils; import com.android.internal.util.GrowingArrayUtils; @@ -112,6 +113,18 @@ import java.util.Arrays; * android:color="?android:attr/colorAccent" * android:alpha="0.5" /> * </pre> + * <p> + * Starting with API 31, items may optionally define an {@link android.R.attr#lStar android:lStar} + * attribute to modify the base color's perceptual luminance. This attribute takes a either + * floating-point value between 0 and 100 or a theme attribute that resolves as such. The item's + * overall color is calculated by converting the base color to an accessibility friendly color space + * and setting its L* to the value specified on the {@code lStar} attribute. For + * example, the following item represents the theme's accent color at 50% perpectual luminosity: + * <pre> + * <item android:state_enabled="false" + * android:color="?android:attr/colorAccent" + * android:lStar="50" /> + * </pre> * * <a name="DeveloperGuide"></a> * <h3>Developer guide</h3> @@ -122,6 +135,7 @@ import java.util.Arrays; * * @attr ref android.R.styleable#ColorStateListItem_alpha * @attr ref android.R.styleable#ColorStateListItem_color + * @attr ref android.R.styleable#ColorStateListItem_lStar */ public class ColorStateList extends ComplexColor implements Parcelable { private static final String TAG = "ColorStateList"; @@ -301,6 +315,24 @@ public class ColorStateList extends ComplexColor implements Parcelable { } /** + * Creates a new ColorStateList that has the same states and colors as this + * one but where each color has the specified perceived luminosity value (0-100). + * + * @param lStar Target perceptual luminance (0-100). + * @return A new color state list. + */ + @NonNull + public ColorStateList withLStar(float lStar) { + final int[] colors = new int[mColors.length]; + final int len = colors.length; + for (int i = 0; i < len; i++) { + colors[i] = modulateColor(mColors[i], 1.0f /* alphaMod */, lStar); + } + + return new ColorStateList(mStateSpecs, colors); + } + + /** * Fill in this object based on the contents of an XML "selector" element. */ private void inflate(@NonNull Resources r, @NonNull XmlPullParser parser, @@ -332,6 +364,7 @@ public class ColorStateList extends ComplexColor implements Parcelable { final int[] themeAttrs = a.extractThemeAttrs(); final int baseColor = a.getColor(R.styleable.ColorStateListItem_color, Color.MAGENTA); final float alphaMod = a.getFloat(R.styleable.ColorStateListItem_alpha, 1.0f); + final float lStar = a.getFloat(R.styleable.ColorStateListItem_lStar, -1.0f); changingConfigurations |= a.getChangingConfigurations(); @@ -346,6 +379,7 @@ public class ColorStateList extends ComplexColor implements Parcelable { switch (stateResId) { case R.attr.color: case R.attr.alpha: + case R.attr.lStar: // Recognized attribute, ignore. break; default: @@ -355,10 +389,11 @@ public class ColorStateList extends ComplexColor implements Parcelable { } stateSpec = StateSet.trimStateSet(stateSpec, j); - // Apply alpha modulation. If we couldn't resolve the color or + // Apply alpha and luma modulation. If we couldn't resolve the color or // alpha yet, the default values leave us enough information to // modulate again during applyTheme(). - final int color = modulateColorAlpha(baseColor, alphaMod); + final int color = modulateColor(baseColor, alphaMod, lStar); + if (listSize == 0 || stateSpec.length == 0) { defaultColor = color; } @@ -455,7 +490,9 @@ public class ColorStateList extends ComplexColor implements Parcelable { R.styleable.ColorStateListItem_color, mColors[i]); final float alphaMod = a.getFloat( R.styleable.ColorStateListItem_alpha, defaultAlphaMod); - mColors[i] = modulateColorAlpha(baseColor, alphaMod); + final float lStar = a.getFloat( + R.styleable.ColorStateListItem_lStar, -1.0f); + mColors[i] = modulateColor(baseColor, alphaMod, lStar); // Account for any configuration changes. mChangingConfigurations |= a.getChangingConfigurations(); @@ -505,13 +542,21 @@ public class ColorStateList extends ComplexColor implements Parcelable { return super.getChangingConfigurations() | mChangingConfigurations; } - private int modulateColorAlpha(int baseColor, float alphaMod) { - if (alphaMod == 1.0f) { + private int modulateColor(int baseColor, float alphaMod, float lStar) { + final boolean validLStar = lStar >= 0.0f && lStar <= 100.0f; + if (alphaMod == 1.0f && !validLStar) { return baseColor; } final int baseAlpha = Color.alpha(baseColor); final int alpha = MathUtils.constrain((int) (baseAlpha * alphaMod + 0.5f), 0, 255); + + if (validLStar) { + final double[] labColor = new double[3]; + ColorUtils.colorToLAB(baseColor, labColor); + baseColor = ColorUtils.LABToColor(lStar, labColor[1], labColor[2]); + } + return (baseColor & 0xFFFFFF) | (alpha << 24); } diff --git a/core/java/android/hardware/display/DisplayManager.java b/core/java/android/hardware/display/DisplayManager.java index 2430c09d93f4..216e7b079f6b 100644 --- a/core/java/android/hardware/display/DisplayManager.java +++ b/core/java/android/hardware/display/DisplayManager.java @@ -17,6 +17,7 @@ package android.hardware.display; import static android.view.Display.DEFAULT_DISPLAY; +import static android.view.Display.HdrCapabilities.HdrType; import android.Manifest; import android.annotation.FloatRange; @@ -710,6 +711,55 @@ public final class DisplayManager { } /** + * Sets the HDR types that have been disabled by user. + * @param userDisabledTypes the HDR types to disable. + * @hide + */ + @TestApi + @RequiresPermission(Manifest.permission.WRITE_SECURE_SETTINGS) + public void setUserDisabledHdrTypes(@NonNull @HdrType int[] userDisabledTypes) { + mGlobal.setUserDisabledHdrTypes(userDisabledTypes); + } + + /** + * Sets whether or not the user disabled HDR types are returned from + * {@link Display#getHdrCapabilities}. + * + * @param areUserDisabledHdrTypesAllowed If true, the user-disabled types + * are ignored and returned, if the display supports them. If false, the + * user-disabled types are taken into consideration and are never returned, + * even if the display supports them. + * @hide + */ + @TestApi + @RequiresPermission(Manifest.permission.WRITE_SECURE_SETTINGS) + public void setAreUserDisabledHdrTypesAllowed(boolean areUserDisabledHdrTypesAllowed) { + mGlobal.setAreUserDisabledHdrTypesAllowed(areUserDisabledHdrTypesAllowed); + } + + /** + * Returns whether or not the user-disabled HDR types are returned from + * {@link Display#getHdrCapabilities}. + * + * @hide + */ + @TestApi + public boolean areUserDisabledHdrTypesAllowed() { + return mGlobal.areUserDisabledHdrTypesAllowed(); + } + + /** + * Returns the HDR formats disabled by the user. + * + * @hide + */ + @TestApi + public @NonNull int[] getUserDisabledHdrTypes() { + return mGlobal.getUserDisabledHdrTypes(); + } + + + /** * Creates a virtual display. * * @see #createVirtualDisplay(String, int, int, int, Surface, int, diff --git a/core/java/android/hardware/display/DisplayManagerGlobal.java b/core/java/android/hardware/display/DisplayManagerGlobal.java index 06efc4fc263e..cdc219a0c115 100644 --- a/core/java/android/hardware/display/DisplayManagerGlobal.java +++ b/core/java/android/hardware/display/DisplayManagerGlobal.java @@ -16,7 +16,9 @@ package android.hardware.display; + import static android.hardware.display.DisplayManager.EventsMask; +import static android.view.Display.HdrCapabilities.HdrType; import android.annotation.IntDef; import android.annotation.NonNull; @@ -508,6 +510,59 @@ public final class DisplayManagerGlobal { } } + /** + * Sets the HDR types that have been disabled by user. + * @param userDisabledHdrTypes the HDR types to disable. The HDR types are any of + */ + public void setUserDisabledHdrTypes(@HdrType int[] userDisabledHdrTypes) { + try { + mDm.setUserDisabledHdrTypes(userDisabledHdrTypes); + } catch (RemoteException ex) { + throw ex.rethrowFromSystemServer(); + } + } + + /** + * Sets whether or not the user disabled HDR types are returned from + * {@link Display#getHdrCapabilities}. + * + * @param areUserDisabledHdrTypesAllowed If true, the user-disabled + * types are ignored and returned, if the display supports them. If + * false, the user-disabled types are taken into consideration and + * are never returned, even if the display supports them. + */ + public void setAreUserDisabledHdrTypesAllowed(boolean areUserDisabledHdrTypesAllowed) { + try { + mDm.setAreUserDisabledHdrTypesAllowed(areUserDisabledHdrTypesAllowed); + } catch (RemoteException ex) { + throw ex.rethrowFromSystemServer(); + } + } + + /** + * Returns whether or not the user-disabled HDR types are returned from + * {@link Display#getHdrCapabilities}. + */ + public boolean areUserDisabledHdrTypesAllowed() { + try { + return mDm.areUserDisabledHdrTypesAllowed(); + } catch (RemoteException ex) { + throw ex.rethrowFromSystemServer(); + } + } + + /** + * Returns the HDR formats disabled by the user. + * + */ + public int[] getUserDisabledHdrTypes() { + try { + return mDm.getUserDisabledHdrTypes(); + } catch (RemoteException ex) { + throw ex.rethrowFromSystemServer(); + } + } + public void requestColorMode(int displayId, int colorMode) { try { mDm.requestColorMode(displayId, colorMode); diff --git a/core/java/android/hardware/display/IDisplayManager.aidl b/core/java/android/hardware/display/IDisplayManager.aidl index 3538ff17a5a2..5ca4e0cc657c 100644 --- a/core/java/android/hardware/display/IDisplayManager.aidl +++ b/core/java/android/hardware/display/IDisplayManager.aidl @@ -68,6 +68,18 @@ interface IDisplayManager { // No permissions required. WifiDisplayStatus getWifiDisplayStatus(); + // Requires WRITE_SECURE_SETTINGS permission. + void setUserDisabledHdrTypes(in int[] userDisabledTypes); + + // Requires WRITE_SECURE_SETTINGS permission. + void setAreUserDisabledHdrTypesAllowed(boolean areUserDisabledHdrTypesAllowed); + + // No permissions required. + boolean areUserDisabledHdrTypesAllowed(); + + // No permissions required. + int[] getUserDisabledHdrTypes(); + // Requires CONFIGURE_DISPLAY_COLOR_MODE void requestColorMode(int displayId, int colorMode); diff --git a/core/java/android/net/NetworkPolicyManager.java b/core/java/android/net/NetworkPolicyManager.java index 799ea4a15bc3..b2024208d79e 100644 --- a/core/java/android/net/NetworkPolicyManager.java +++ b/core/java/android/net/NetworkPolicyManager.java @@ -18,6 +18,7 @@ package android.net; import static android.app.ActivityManager.procStateToString; import static android.content.pm.PackageManager.GET_SIGNATURES; +import static android.net.ConnectivityManager.BLOCKED_METERED_REASON_MASK; import static android.net.ConnectivityManager.BLOCKED_REASON_NONE; import android.annotation.IntDef; @@ -204,9 +205,6 @@ public class NetworkPolicyManager { }) public @interface SubscriptionOverrideMask {} - /** @hide */ - public static final int BLOCKED_METERED_REASON_MASK = 0xffff0000; - /** * Flag to indicate that app is not exempt from any network restrictions. * diff --git a/core/java/android/os/Binder.java b/core/java/android/os/Binder.java index 8dcd93731aec..635f58182b34 100644 --- a/core/java/android/os/Binder.java +++ b/core/java/android/os/Binder.java @@ -550,6 +550,16 @@ public class Binder implements IBinder { public final native void markVintfStability(); /** + * Use a VINTF-stability binder w/o VINTF requirements. Should be called + * on a binder before it is sent out of process. + * + * This must be called before the object is sent to another process. + * + * @hide + */ + public final native void forceDowngradeToSystemStability(); + + /** * Flush any Binder commands pending in the current thread to the kernel * driver. This can be * useful to call before performing an operation that may block for a long diff --git a/core/java/android/os/IPowerManager.aidl b/core/java/android/os/IPowerManager.aidl index ae7d94cbad79..425e797a9e0e 100644 --- a/core/java/android/os/IPowerManager.aidl +++ b/core/java/android/os/IPowerManager.aidl @@ -27,9 +27,9 @@ import android.os.WorkSource; interface IPowerManager { void acquireWakeLock(IBinder lock, int flags, String tag, String packageName, in WorkSource ws, - String historyTag); + String historyTag, int displayId); void acquireWakeLockWithUid(IBinder lock, int flags, String tag, String packageName, - int uidtoblame); + int uidtoblame, int displayId); @UnsupportedAppUsage void releaseWakeLock(IBinder lock, int flags); void updateWakeLockUids(IBinder lock, in int[] uids); diff --git a/core/java/android/os/PowerManager.java b/core/java/android/os/PowerManager.java index 2c4d130788cc..9d1fd50a4112 100644 --- a/core/java/android/os/PowerManager.java +++ b/core/java/android/os/PowerManager.java @@ -36,6 +36,7 @@ import android.sysprop.InitProperties; import android.util.ArrayMap; import android.util.Log; import android.util.proto.ProtoOutputStream; +import android.view.Display; import com.android.internal.util.Preconditions; @@ -1143,8 +1144,7 @@ public final class PowerManager { * wake lock, and {@link WakeLock#release release()} when you are done. * </p><p> * {@samplecode - * PowerManager pm = (PowerManager)mContext.getSystemService( - * Context.POWER_SERVICE); + * PowerManager pm = mContext.getSystemService(PowerManager.class); * PowerManager.WakeLock wl = pm.newWakeLock( * PowerManager.SCREEN_DIM_WAKE_LOCK * | PowerManager.ON_AFTER_RELEASE, @@ -1162,6 +1162,8 @@ public final class PowerManager { * {@link android.view.WindowManager.LayoutParams#FLAG_KEEP_SCREEN_ON} instead. * This window flag will be correctly managed by the platform * as the user moves between applications and doesn't require a special permission. + * Additionally using the flag will keep only the appropriate screen on in a + * multi-display scenario while using a wake lock will keep every screen powered on. * </p> * * <p> @@ -1179,7 +1181,7 @@ public final class PowerManager { * can be transformed by java optimizer and obfuscator tools. * <li>avoid wrapping the tag or a prefix to avoid collision with wake lock * tags from the platform (e.g. *alarm*). - * <li>never include personnally identifiable information for privacy + * <li>never include personally identifiable information for privacy * reasons. * </ul> * </p> @@ -1200,7 +1202,27 @@ public final class PowerManager { */ public WakeLock newWakeLock(int levelAndFlags, String tag) { validateWakeLockParameters(levelAndFlags, tag); - return new WakeLock(levelAndFlags, tag, mContext.getOpPackageName()); + return new WakeLock(levelAndFlags, tag, mContext.getOpPackageName(), + Display.INVALID_DISPLAY); + } + + /** + * Creates a new wake lock with the specified level and flags. + * <p> + * The wakelock will only apply to the {@link com.android.server.display.DisplayGroup} of the + * provided {@code displayId}. If {@code displayId} is {@link Display#INVALID_DISPLAY} then it + * will apply to all {@link com.android.server.display.DisplayGroup DisplayGroups}. + * + * @param levelAndFlags Combination of wake lock level and flag values defining + * the requested behavior of the WakeLock. + * @param tag Your class name (or other tag) for debugging purposes. + * @param displayId The display id to which this wake lock is tied. + * + * @hide + */ + public WakeLock newWakeLock(int levelAndFlags, String tag, int displayId) { + validateWakeLockParameters(levelAndFlags, tag); + return new WakeLock(levelAndFlags, tag, mContext.getOpPackageName(), displayId); } /** @hide */ @@ -2603,19 +2625,17 @@ public final class PowerManager { private WorkSource mWorkSource; private String mHistoryTag; private final String mTraceName; + private final int mDisplayId; - private final Runnable mReleaser = new Runnable() { - public void run() { - release(RELEASE_FLAG_TIMEOUT); - } - }; + private final Runnable mReleaser = () -> release(RELEASE_FLAG_TIMEOUT); - WakeLock(int flags, String tag, String packageName) { + WakeLock(int flags, String tag, String packageName, int displayId) { mFlags = flags; mTag = tag; mPackageName = packageName; mToken = new Binder(); mTraceName = "WakeLock (" + mTag + ")"; + mDisplayId = displayId; } @Override @@ -2696,7 +2716,7 @@ public final class PowerManager { Trace.asyncTraceBegin(Trace.TRACE_TAG_POWER, mTraceName, 0); try { mService.acquireWakeLock(mToken, mFlags, mTag, mPackageName, mWorkSource, - mHistoryTag); + mHistoryTag, mDisplayId); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } diff --git a/core/java/android/os/SystemBatteryConsumer.java b/core/java/android/os/SystemBatteryConsumer.java index 06cff904a215..5f35332f4818 100644 --- a/core/java/android/os/SystemBatteryConsumer.java +++ b/core/java/android/os/SystemBatteryConsumer.java @@ -18,6 +18,7 @@ package android.os; import android.annotation.IntDef; import android.annotation.NonNull; +import android.util.Slog; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -31,6 +32,7 @@ import java.util.List; * {@hide} */ public class SystemBatteryConsumer extends BatteryConsumer implements Parcelable { + private static final String TAG = "SystemBatteryConsumer"; // **************** // This list must be kept current with atoms.proto (frameworks/base/cmds/statsd/src/atoms.proto) @@ -72,6 +74,8 @@ public class SystemBatteryConsumer extends BatteryConsumer implements Parcelable @DrainType private final int mDrainType; + private final double mPowerConsumedByAppsMah; + @DrainType public int getDrainType() { return mDrainType; @@ -80,11 +84,23 @@ public class SystemBatteryConsumer extends BatteryConsumer implements Parcelable private SystemBatteryConsumer(@NonNull SystemBatteryConsumer.Builder builder) { super(builder.mPowerComponentsBuilder.build()); mDrainType = builder.mDrainType; + mPowerConsumedByAppsMah = builder.mPowerConsumedByAppsMah; + if (mPowerConsumedByAppsMah > getConsumedPower()) { + Slog.wtf(TAG, + "Power attributed to apps exceeds total: drain type = " + mDrainType + + " total consumed power = " + getConsumedPower() + + " power consumed by apps = " + mPowerConsumedByAppsMah); + } } private SystemBatteryConsumer(Parcel in) { super(new PowerComponents(in)); mDrainType = in.readInt(); + mPowerConsumedByAppsMah = in.readDouble(); + } + + public double getPowerConsumedByApps() { + return mPowerConsumedByAppsMah; } /** @@ -94,6 +110,7 @@ public class SystemBatteryConsumer extends BatteryConsumer implements Parcelable public void writeToParcel(@NonNull Parcel dest, int flags) { super.writeToParcel(dest, flags); dest.writeInt(mDrainType); + dest.writeDouble(mPowerConsumedByAppsMah); } public static final Creator<SystemBatteryConsumer> CREATOR = @@ -120,6 +137,7 @@ public class SystemBatteryConsumer extends BatteryConsumer implements Parcelable public static final class Builder extends BaseBuilder<Builder> { @DrainType private final int mDrainType; + private double mPowerConsumedByAppsMah; private List<UidBatteryConsumer.Builder> mUidBatteryConsumers; Builder(int customPowerComponentCount, int customTimeComponentCount, @@ -129,6 +147,15 @@ public class SystemBatteryConsumer extends BatteryConsumer implements Parcelable } /** + * Sets the amount of power used by this system component that is attributed to apps. + * It should not exceed the total consumed power. + */ + public Builder setPowerConsumedByApps(double powerConsumedByAppsMah) { + mPowerConsumedByAppsMah = powerConsumedByAppsMah; + return this; + } + + /** * Add a UidBatteryConsumer to this SystemBatteryConsumer. For example, * the UidBatteryConsumer with the UID == {@link Process#BLUETOOTH_UID} should * be added to the SystemBatteryConsumer with the drain type == {@link diff --git a/core/java/android/os/VibratorInfo.java b/core/java/android/os/VibratorInfo.java index 64e51e71962a..671daa0f0f81 100644 --- a/core/java/android/os/VibratorInfo.java +++ b/core/java/android/os/VibratorInfo.java @@ -19,6 +19,7 @@ package android.os; import android.annotation.FloatRange; import android.annotation.NonNull; import android.annotation.Nullable; +import android.hardware.vibrator.Braking; import android.hardware.vibrator.IVibrator; import android.util.Log; import android.util.MathUtils; @@ -45,6 +46,8 @@ public final class VibratorInfo implements Parcelable { @Nullable private final SparseBooleanArray mSupportedEffects; @Nullable + private final SparseBooleanArray mSupportedBraking; + @Nullable private final SparseBooleanArray mSupportedPrimitives; private final float mQFactor; private final FrequencyMapping mFrequencyMapping; @@ -53,17 +56,19 @@ public final class VibratorInfo implements Parcelable { mId = in.readInt(); mCapabilities = in.readLong(); mSupportedEffects = in.readSparseBooleanArray(); + mSupportedBraking = in.readSparseBooleanArray(); mSupportedPrimitives = in.readSparseBooleanArray(); mQFactor = in.readFloat(); mFrequencyMapping = in.readParcelable(VibratorInfo.class.getClassLoader()); } /** @hide */ - public VibratorInfo(int id, long capabilities, int[] supportedEffects, + public VibratorInfo(int id, long capabilities, int[] supportedEffects, int[] supportedBraking, int[] supportedPrimitives, float qFactor, @NonNull FrequencyMapping frequencyMapping) { mId = id; mCapabilities = capabilities; mSupportedEffects = toSparseBooleanArray(supportedEffects); + mSupportedBraking = toSparseBooleanArray(supportedBraking); mSupportedPrimitives = toSparseBooleanArray(supportedPrimitives); mQFactor = qFactor; mFrequencyMapping = frequencyMapping; @@ -74,6 +79,7 @@ public final class VibratorInfo implements Parcelable { dest.writeInt(mId); dest.writeLong(mCapabilities); dest.writeSparseBooleanArray(mSupportedEffects); + dest.writeSparseBooleanArray(mSupportedBraking); dest.writeSparseBooleanArray(mSupportedPrimitives); dest.writeFloat(mQFactor); dest.writeParcelable(mFrequencyMapping, flags); @@ -95,6 +101,7 @@ public final class VibratorInfo implements Parcelable { VibratorInfo that = (VibratorInfo) o; return mId == that.mId && mCapabilities == that.mCapabilities && Objects.equals(mSupportedEffects, that.mSupportedEffects) + && Objects.equals(mSupportedBraking, that.mSupportedBraking) && Objects.equals(mSupportedPrimitives, that.mSupportedPrimitives) && Objects.equals(mQFactor, that.mQFactor) && Objects.equals(mFrequencyMapping, that.mFrequencyMapping); @@ -102,8 +109,8 @@ public final class VibratorInfo implements Parcelable { @Override public int hashCode() { - return Objects.hash(mId, mCapabilities, mSupportedEffects, mSupportedPrimitives, - mQFactor, mFrequencyMapping); + return Objects.hash(mId, mCapabilities, mSupportedEffects, mSupportedBraking, + mSupportedPrimitives, mQFactor, mFrequencyMapping); } @Override @@ -113,6 +120,7 @@ public final class VibratorInfo implements Parcelable { + ", mCapabilities=" + Arrays.toString(getCapabilitiesNames()) + ", mCapabilities flags=" + Long.toBinaryString(mCapabilities) + ", mSupportedEffects=" + Arrays.toString(getSupportedEffectsNames()) + + ", mSupportedBraking=" + Arrays.toString(getSupportedBrakingNames()) + ", mSupportedPrimitives=" + Arrays.toString(getSupportedPrimitivesNames()) + ", mQFactor=" + mQFactor + ", mFrequencyMapping=" + mFrequencyMapping @@ -134,6 +142,23 @@ public final class VibratorInfo implements Parcelable { } /** + * Returns a default value to be applied to composed PWLE effects for braking. + * + * @return a supported braking value, one of android.hardware.vibrator.Braking.* + */ + public int getDefaultBraking() { + if (mSupportedBraking != null) { + int size = mSupportedBraking.size(); + for (int i = 0; i < size; i++) { + if (mSupportedBraking.keyAt(i) != Braking.NONE) { + return mSupportedBraking.keyAt(i); + } + } + } + return Braking.NONE; + } + + /** * Query whether the vibrator supports the given effect. * * @param effectId Which effects to query for. @@ -147,7 +172,7 @@ public final class VibratorInfo implements Parcelable { if (mSupportedEffects == null) { return Vibrator.VIBRATION_EFFECT_SUPPORT_UNKNOWN; } - return mSupportedEffects.get(effectId, false) ? Vibrator.VIBRATION_EFFECT_SUPPORT_YES + return mSupportedEffects.get(effectId) ? Vibrator.VIBRATION_EFFECT_SUPPORT_YES : Vibrator.VIBRATION_EFFECT_SUPPORT_NO; } @@ -160,7 +185,7 @@ public final class VibratorInfo implements Parcelable { public boolean isPrimitiveSupported( @VibrationEffect.Composition.PrimitiveType int primitiveId) { return hasCapability(IVibrator.CAP_COMPOSE_EFFECTS) && mSupportedPrimitives != null - && mSupportedPrimitives.get(primitiveId, false); + && mSupportedPrimitives.get(primitiveId); } /** @@ -251,12 +276,18 @@ public final class VibratorInfo implements Parcelable { if (hasCapability(IVibrator.CAP_COMPOSE_EFFECTS)) { names.add("COMPOSE_EFFECTS"); } + if (hasCapability(IVibrator.CAP_COMPOSE_PWLE_EFFECTS)) { + names.add("COMPOSE_PWLE_EFFECTS"); + } if (hasCapability(IVibrator.CAP_ALWAYS_ON_CONTROL)) { names.add("ALWAYS_ON_CONTROL"); } if (hasCapability(IVibrator.CAP_AMPLITUDE_CONTROL)) { names.add("AMPLITUDE_CONTROL"); } + if (hasCapability(IVibrator.CAP_FREQUENCY_CONTROL)) { + names.add("FREQUENCY_CONTROL"); + } if (hasCapability(IVibrator.CAP_EXTERNAL_CONTROL)) { names.add("EXTERNAL_CONTROL"); } @@ -277,6 +308,26 @@ public final class VibratorInfo implements Parcelable { return names; } + private String[] getSupportedBrakingNames() { + if (mSupportedBraking == null) { + return new String[0]; + } + String[] names = new String[mSupportedBraking.size()]; + for (int i = 0; i < mSupportedBraking.size(); i++) { + switch (mSupportedBraking.keyAt(i)) { + case Braking.NONE: + names[i] = "NONE"; + break; + case Braking.CLAB: + names[i] = "CLAB"; + break; + default: + names[i] = Integer.toString(mSupportedBraking.keyAt(i)); + } + } + return names; + } + private String[] getSupportedPrimitivesNames() { if (mSupportedPrimitives == null) { return new String[0]; @@ -478,7 +529,8 @@ public final class VibratorInfo implements Parcelable { @Override public String toString() { return "FrequencyMapping{" - + "mMinFrequency=" + mMinFrequencyHz + + "mRelativeFrequencyRange=" + mRelativeFrequencyRange + + ", mMinFrequency=" + mMinFrequencyHz + ", mResonantFrequency=" + mResonantFrequencyHz + ", mMaxFrequency=" + (mMinFrequencyHz + mFrequencyResolutionHz * (mMaxAmplitudes.length - 1)) diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index 30d042306063..5d924cc88706 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -14056,6 +14056,40 @@ public final class Settings { @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) public static final int ZEN_MODE_ALARMS = 3; + /** + * A comma-separated list of HDR formats that have been disabled by the user. + * <p> + * If present, these formats will not be reported to apps, even if the display supports + * them. This list is treated as empty if the ARE_USER_DISABLED_HDR_FORMATS_ALLOWED setting + * is '1'. + * </p> + * @hide + */ + @TestApi + @Readable + @SuppressLint("NoSettingsProvider") + public static final String USER_DISABLED_HDR_FORMATS = "user_disabled_hdr_formats"; + + /** + * Whether or not user-disabled HDR formats are allowed. + * <p> + * The value is boolean (1 or 0). The value '1' means the user preference for disabling a + * format is ignored, and the disabled formats are still reported to apps (if supported + * by the display). The value '0' means the user-disabled formats are not reported to + * apps, even if the display supports them. + * </p><p> + * The list of formats disabled by the user are contained in the + * USER_DISABLED_HDR_FORMATS setting. This list is treated as empty when the value of + * this setting is '1'. + * </p> + * @hide + */ + @TestApi + @Readable + @SuppressLint("NoSettingsProvider") + public static final String ARE_USER_DISABLED_HDR_FORMATS_ALLOWED = + "are_user_disabled_hdr_formats_allowed"; + /** @hide */ public static String zenModeToString(int mode) { if (mode == ZEN_MODE_IMPORTANT_INTERRUPTIONS) return "ZEN_MODE_IMPORTANT_INTERRUPTIONS"; if (mode == ZEN_MODE_ALARMS) return "ZEN_MODE_ALARMS"; diff --git a/core/java/android/provider/TEST_MAPPING b/core/java/android/provider/TEST_MAPPING index ae2836f4d915..c55572e5741c 100644 --- a/core/java/android/provider/TEST_MAPPING +++ b/core/java/android/provider/TEST_MAPPING @@ -19,6 +19,14 @@ }, { "name": "SettingsProviderTest" + }, + { + "name": "CtsAppSecurityHostTestCases", + "options": [ + { + "include-filter": "android.appsecurity.cts.ReadableSettingsFieldsTest" + } + ] } ] } diff --git a/core/java/android/service/voice/AbstractHotwordDetector.java b/core/java/android/service/voice/AbstractHotwordDetector.java new file mode 100644 index 000000000000..e4eefc4e3a81 --- /dev/null +++ b/core/java/android/service/voice/AbstractHotwordDetector.java @@ -0,0 +1,105 @@ +/* + * Copyright (C) 2021 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.service.voice; + +import static com.android.internal.util.function.pooled.PooledLambda.obtainMessage; + +import android.annotation.NonNull; +import android.annotation.Nullable; +import android.media.AudioFormat; +import android.os.Handler; +import android.os.Looper; +import android.os.ParcelFileDescriptor; +import android.os.PersistableBundle; +import android.os.RemoteException; +import android.util.Slog; + +import com.android.internal.app.IVoiceInteractionManagerService; + +/** Base implementation of {@link HotwordDetector}. */ +abstract class AbstractHotwordDetector implements HotwordDetector { + private static final String TAG = AbstractHotwordDetector.class.getSimpleName(); + private static final boolean DEBUG = false; + + private final IVoiceInteractionManagerService mManagerService; + private final Handler mHandler; + private final HotwordDetector.Callback mCallback; + + AbstractHotwordDetector( + IVoiceInteractionManagerService managerService, + HotwordDetector.Callback callback) { + mManagerService = managerService; + // TODO: this needs to be supplied from above + mHandler = new Handler(Looper.getMainLooper()); + mCallback = callback; + } + + /** + * Detect hotword from an externally supplied stream of data. + * + * @return a writeable file descriptor that clients can start writing data in the given format. + * In order to stop detection, clients can close the given stream. + */ + @Nullable + @Override + public boolean startRecognition( + @NonNull ParcelFileDescriptor audioStream, + @NonNull AudioFormat audioFormat, + @Nullable PersistableBundle options) { + if (DEBUG) { + Slog.i(TAG, "#recognizeHotword"); + } + + // TODO: consider closing existing session. + + try { + mManagerService.startListeningFromExternalSource( + audioStream, + audioFormat, + options, + new BinderCallback(mHandler, mCallback)); + } catch (RemoteException e) { + e.rethrowFromSystemServer(); + } + + return true; + } + + private static class BinderCallback + extends IMicrophoneHotwordDetectionVoiceInteractionCallback.Stub { + private final Handler mHandler; + // TODO: these need to be weak references. + private final HotwordDetector.Callback mCallback; + + BinderCallback(Handler handler, HotwordDetector.Callback callback) { + this.mHandler = handler; + this.mCallback = callback; + } + + /** TODO: onDetected */ + @Override + public void onDetected( + @Nullable HotwordDetectedResult hotwordDetectedResult, + @Nullable AudioFormat audioFormat, + @Nullable ParcelFileDescriptor audioStreamIgnored) { + mHandler.sendMessage(obtainMessage( + HotwordDetector.Callback::onDetected, + mCallback, + new AlwaysOnHotwordDetector.EventPayload(audioFormat, hotwordDetectedResult))); + } + } +} diff --git a/core/java/android/service/voice/AlwaysOnHotwordDetector.java b/core/java/android/service/voice/AlwaysOnHotwordDetector.java index 94ca68ff6af8..8ca0e7ccff37 100644 --- a/core/java/android/service/voice/AlwaysOnHotwordDetector.java +++ b/core/java/android/service/voice/AlwaysOnHotwordDetector.java @@ -48,6 +48,7 @@ import android.os.ParcelFileDescriptor; import android.os.PersistableBundle; import android.os.RemoteException; import android.os.SharedMemory; +import android.service.voice.HotwordDetectionService.InitializationStatus; import android.util.Slog; import com.android.internal.app.IHotwordRecognitionStatusCallback; @@ -68,7 +69,7 @@ import java.util.Locale; * mark and track it as such. */ @SystemApi -public class AlwaysOnHotwordDetector { +public class AlwaysOnHotwordDetector extends AbstractHotwordDetector { //---- States of Keyphrase availability. Return codes for onAvailabilityChanged() ----// /** * Indicates that this hotword detector is no longer valid for any recognition @@ -260,6 +261,7 @@ public class AlwaysOnHotwordDetector { private static final int MSG_DETECTION_PAUSE = 4; private static final int MSG_DETECTION_RESUME = 5; private static final int MSG_HOTWORD_REJECTED = 6; + private static final int MSG_HOTWORD_STATUS_REPORTED = 7; private final String mText; private final Locale mLocale; @@ -459,7 +461,7 @@ public class AlwaysOnHotwordDetector { /** * Callbacks for always-on hotword detection. */ - public static abstract class Callback { + public abstract static class Callback implements HotwordDetector.Callback { /** * Updates the availability state of the active keyphrase and locale on every keyphrase @@ -523,6 +525,15 @@ public class AlwaysOnHotwordDetector { */ public void onRejected(@Nullable HotwordRejectedResult result) { } + + /** + * Called when the {@link HotwordDetectionService} is created by the system and given a + * short amount of time to report it's initialization state. + * + * @param status Info about initialization state of {@link HotwordDetectionService}. + */ + public void onHotwordDetectionServiceInitialized(@InitializationStatus int status) { + } } /** @@ -547,17 +558,19 @@ public class AlwaysOnHotwordDetector { IVoiceInteractionManagerService modelManagementService, int targetSdkVersion, boolean supportHotwordDetectionService, @Nullable PersistableBundle options, @Nullable SharedMemory sharedMemory) { + super(modelManagementService, callback); + + mHandler = new MyHandler(); mText = text; mLocale = locale; mKeyphraseEnrollmentInfo = keyphraseEnrollmentInfo; mExternalCallback = callback; - mHandler = new MyHandler(); mInternalCallback = new SoundTriggerListener(mHandler); mModelManagementService = modelManagementService; mTargetSdkVersion = targetSdkVersion; mSupportHotwordDetectionService = supportHotwordDetectionService; if (mSupportHotwordDetectionService) { - updateState(options, sharedMemory); + updateStateLocked(options, sharedMemory, mInternalCallback); } try { Identity identity = new Identity(); @@ -581,20 +594,34 @@ public class AlwaysOnHotwordDetector { * such data to the trusted process. * * @throws IllegalStateException if this AlwaysOnHotwordDetector wasn't specified to use a - * {@link HotwordDetectionService} when it was created. + * {@link HotwordDetectionService} when it was created. In addition, if this + * AlwaysOnHotwordDetector is in an invalid or error state. */ public final void updateState(@Nullable PersistableBundle options, @Nullable SharedMemory sharedMemory) { if (DBG) { Slog.d(TAG, "updateState()"); } - if (!mSupportHotwordDetectionService) { - throw new IllegalStateException( - "updateState called, but it doesn't support hotword detection service"); + synchronized (mLock) { + if (!mSupportHotwordDetectionService) { + throw new IllegalStateException( + "updateState called, but it doesn't support hotword detection service"); + } + if (mAvailability == STATE_INVALID || mAvailability == STATE_ERROR) { + throw new IllegalStateException( + "updateState called on an invalid detector or error state"); + } + updateStateLocked(options, sharedMemory, null /* callback */); } + } + private void updateStateLocked(@Nullable PersistableBundle options, + @Nullable SharedMemory sharedMemory, IHotwordRecognitionStatusCallback callback) { + if (DBG) { + Slog.d(TAG, "updateStateLocked()"); + } try { - mModelManagementService.updateState(options, sharedMemory); + mModelManagementService.updateState(options, sharedMemory, callback); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } @@ -705,6 +732,17 @@ public class AlwaysOnHotwordDetector { } /** + * Starts recognition for the associated keyphrase. + * + * @see #startRecognition(int) + */ + @RequiresPermission(allOf = {RECORD_AUDIO, CAPTURE_AUDIO_HOTWORD}) + @Override + public boolean startRecognition() { + return startRecognition(0); + } + + /** * Stops recognition for the associated keyphrase. * Caller must be the active voice interaction service via * Settings.Secure.VOICE_INTERACTION_SERVICE. @@ -718,6 +756,7 @@ public class AlwaysOnHotwordDetector { * {@link VoiceInteractionService} hosting this detector has been shut down. */ @RequiresPermission(allOf = {RECORD_AUDIO, CAPTURE_AUDIO_HOTWORD}) + @Override public boolean stopRecognition() { if (DBG) Slog.d(TAG, "stopRecognition()"); synchronized (mLock) { @@ -1133,6 +1172,18 @@ public class AlwaysOnHotwordDetector { Slog.i(TAG, "onRecognitionResumed"); mHandler.sendEmptyMessage(MSG_DETECTION_RESUME); } + + @Override + public void onStatusReported(int status) { + if (DBG) { + Slog.d(TAG, "onStatusReported(" + status + ")"); + } else { + Slog.i(TAG, "onStatusReported"); + } + Message message = Message.obtain(mHandler, MSG_HOTWORD_STATUS_REPORTED); + message.arg1 = status; + message.sendToTarget(); + } } class MyHandler extends Handler { @@ -1164,6 +1215,9 @@ public class AlwaysOnHotwordDetector { case MSG_HOTWORD_REJECTED: mExternalCallback.onRejected((HotwordRejectedResult) msg.obj); break; + case MSG_HOTWORD_STATUS_REPORTED: + mExternalCallback.onHotwordDetectionServiceInitialized(msg.arg1); + break; default: super.handleMessage(msg); } diff --git a/core/java/android/service/voice/HotwordDetectionService.java b/core/java/android/service/voice/HotwordDetectionService.java index db984c246b2f..7c14c2e19eb1 100644 --- a/core/java/android/service/voice/HotwordDetectionService.java +++ b/core/java/android/service/voice/HotwordDetectionService.java @@ -20,6 +20,7 @@ import static com.android.internal.util.function.pooled.PooledLambda.obtainMessa import android.annotation.CallSuper; import android.annotation.DurationMillisLong; +import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.SdkConstant; @@ -36,7 +37,13 @@ import android.os.RemoteException; import android.os.SharedMemory; import android.util.Log; +import com.android.internal.app.IHotwordRecognitionStatusCallback; + +import java.lang.annotation.Documented; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; import java.util.Locale; +import java.util.function.IntConsumer; /** * Implemented by an application that wants to offer detection for hotword. The system will @@ -50,6 +57,57 @@ public abstract class HotwordDetectionService extends Service { // TODO (b/177502877): Set the Debug flag to false before shipping. private static final boolean DBG = true; + private static final long UPDATE_TIMEOUT_MILLIS = 5000; + + /** @hide */ + @Retention(RetentionPolicy.SOURCE) + @IntDef(flag = true, prefix = { "INITIALIZATION_STATUS_" }, value = { + INITIALIZATION_STATUS_SUCCESS, + INITIALIZATION_STATUS_CUSTOM_ERROR_1, + INITIALIZATION_STATUS_CUSTOM_ERROR_2, + INITIALIZATION_STATUS_UNKNOWN, + }) + public @interface InitializationStatus {} + + /** + * Indicates that the updated status is successful. + */ + public static final int INITIALIZATION_STATUS_SUCCESS = 0; + + /** + * Indicates that the updated status is failure for some application specific reasons. + */ + public static final int INITIALIZATION_STATUS_CUSTOM_ERROR_1 = 1; + + /** + * Indicates that the updated status is failure for some application specific reasons. + */ + public static final int INITIALIZATION_STATUS_CUSTOM_ERROR_2 = 2; + + /** + * Indicates that the callback wasn’t invoked within the timeout. + * This is used by system. + */ + public static final int INITIALIZATION_STATUS_UNKNOWN = 100; + + /** + * Source for the given audio stream. + * + * @hide + */ + @Documented + @Retention(RetentionPolicy.SOURCE) + @IntDef({ + AUDIO_SOURCE_MICROPHONE, + AUDIO_SOURCE_EXTERNAL + }) + @interface AudioSource {} + + /** @hide */ + public static final int AUDIO_SOURCE_MICROPHONE = 1; + /** @hide */ + public static final int AUDIO_SOURCE_EXTERNAL = 2; + /** * The {@link Intent} that must be declared as handled by the service. * To be supported, the service must also require the @@ -73,24 +131,59 @@ public abstract class HotwordDetectionService extends Service { if (DBG) { Log.d(TAG, "#detectFromDspSource"); } - mHandler.sendMessage(obtainMessage(HotwordDetectionService::onDetectFromDspSource, + mHandler.sendMessage(obtainMessage(HotwordDetectionService::onDetect, HotwordDetectionService.this, audioStream, audioFormat, timeoutMillis, - new DspHotwordDetectionCallback(callback))); + new Callback(callback))); } @Override - public void updateState(PersistableBundle options, SharedMemory sharedMemory) - throws RemoteException { + public void updateState(PersistableBundle options, SharedMemory sharedMemory, + IHotwordRecognitionStatusCallback callback) throws RemoteException { if (DBG) { Log.d(TAG, "#updateState"); } - mHandler.sendMessage(obtainMessage(HotwordDetectionService::onUpdateState, + mHandler.sendMessage(obtainMessage(HotwordDetectionService::onUpdateStateInternal, HotwordDetectionService.this, options, - sharedMemory)); + sharedMemory, + callback)); + } + + @Override + public void detectFromMicrophoneSource( + ParcelFileDescriptor audioStream, + @AudioSource int audioSource, + AudioFormat audioFormat, + PersistableBundle options, + IDspHotwordDetectionCallback callback) + throws RemoteException { + if (DBG) { + Log.d(TAG, "#detectFromMicrophoneSource"); + } + switch (audioSource) { + case AUDIO_SOURCE_MICROPHONE: + mHandler.sendMessage(obtainMessage( + HotwordDetectionService::onDetect, + HotwordDetectionService.this, + audioStream, + audioFormat, + new Callback(callback))); + break; + case AUDIO_SOURCE_EXTERNAL: + mHandler.sendMessage(obtainMessage( + HotwordDetectionService::onDetect, + HotwordDetectionService.this, + audioStream, + audioFormat, + options, + new Callback(callback))); + break; + default: + Log.i(TAG, "Unsupported audio source " + audioSource); + } } }; @@ -113,27 +206,30 @@ public abstract class HotwordDetectionService extends Service { } /** - * Detect the audio data generated from Dsp. - * - * <p>Note: the clients are supposed to call {@code close} on the input stream when they are - * done with the operation in order to free up resources. + * Called when the device hardware (such as a DSP) detected the hotword, to request second stage + * validation before handing over the audio to the {@link AlwaysOnHotwordDetector}. + * <p> + * After {@code callback} is invoked or {@code timeoutMillis} has passed, the system closes + * {@code audioStream} and invokes the appropriate {@link AlwaysOnHotwordDetector.Callback + * callback}. * * @param audioStream Stream containing audio bytes returned from DSP * @param audioFormat Format of the supplied audio * @param timeoutMillis Timeout in milliseconds for the operation to invoke the callback. If * the application fails to abide by the timeout, system will close the * microphone and cancel the operation. - * @param callback Use {@link HotwordDetectionService#DspHotwordDetectionCallback} to return - * the detected result. + * @param callback The callback to use for responding to the detection request. * * @hide */ @SystemApi - public void onDetectFromDspSource( + public void onDetect( @NonNull ParcelFileDescriptor audioStream, @NonNull AudioFormat audioFormat, @DurationMillisLong long timeoutMillis, - @NonNull DspHotwordDetectionCallback callback) { + @NonNull Callback callback) { + // TODO: Add a helpful error message. + throw new UnsupportedOperationException(); } /** @@ -148,44 +244,125 @@ public abstract class HotwordDetectionService extends Service { * @param sharedMemory The unrestricted data blob to provide to the * {@link HotwordDetectionService}. Use this to provide the hotword models data or other * such data to the trusted process. + * @param callbackTimeoutMillis Timeout in milliseconds for the operation to invoke the + * statusCallback. + * @param statusCallback Use this to return the updated result. This is non-null only when the + * {@link HotwordDetectionService} is being initialized; and it is null if the state is updated + * after that. * * @hide */ @SystemApi - public void onUpdateState(@Nullable PersistableBundle options, - @Nullable SharedMemory sharedMemory) { + public void onUpdateState( + @Nullable PersistableBundle options, + @Nullable SharedMemory sharedMemory, + @DurationMillisLong long callbackTimeoutMillis, + @Nullable @InitializationStatus IntConsumer statusCallback) { + // TODO: Handle the unimplemented case by throwing? + } + + /** + * Called when the {@link VoiceInteractionService} requests that this service + * {@link HotwordDetector#startRecognition() start} hotword recognition on audio coming directly + * from the device microphone. + * <p> + * On such a request, the system streams mic audio to this service through {@code audioStream}. + * Audio is streamed until {@link HotwordDetector#stopRecognition()} is called, at which point + * the system closes {code audioStream}. + * <p> + * On successful detection of a hotword within {@code audioStream}, call + * {@link Callback#onDetected(HotwordDetectedResult)}. The system continues to stream audio + * through {@code audioStream}; {@code callback} is reusable. + * + * @param audioStream Stream containing audio bytes returned from a microphone + * @param audioFormat Format of the supplied audio + * @param callback The callback to use for responding to the detection request. + * {@link Callback#onRejected(HotwordRejectedResult) callback.onRejected} cannot be used here. + */ + public void onDetect( + @NonNull ParcelFileDescriptor audioStream, + @NonNull AudioFormat audioFormat, + @NonNull Callback callback) { + // TODO: Add a helpful error message. + throw new UnsupportedOperationException(); + } + + /** + * Called when the {@link VoiceInteractionService} requests that this service + * {@link HotwordDetector#startRecognition(ParcelFileDescriptor, AudioFormat, + * PersistableBundle)} run} hotword recognition on audio coming from an external connected + * microphone. + * <p> + * Upon invoking the {@code callback}, the system closes {@code audioStream} and sends the + * detection result to the {@link HotwordDetector.Callback hotword detector}. + * + * @param audioStream Stream containing audio bytes returned from a microphone + * @param audioFormat Format of the supplied audio + * @param options Options supporting detection, such as configuration specific to the source of + * the audio, provided through + * {@link HotwordDetector#startRecognition(ParcelFileDescriptor, AudioFormat, + * PersistableBundle)}. + * @param callback The callback to use for responding to the detection request. + */ + public void onDetect( + @NonNull ParcelFileDescriptor audioStream, + @NonNull AudioFormat audioFormat, + @Nullable PersistableBundle options, + @NonNull Callback callback) { + // TODO: Add a helpful error message. + throw new UnsupportedOperationException(); + } + + private void onUpdateStateInternal(@Nullable PersistableBundle options, + @Nullable SharedMemory sharedMemory, IHotwordRecognitionStatusCallback callback) { + // TODO (b/183684347): Implement timeout case. + IntConsumer intConsumer = null; + if (callback != null) { + intConsumer = + value -> { + try { + callback.onStatusReported(value); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + }; + } + onUpdateState(options, sharedMemory, UPDATE_TIMEOUT_MILLIS, intConsumer); } /** - * Callback for returning the detected result. + * Callback for returning the detection result. * * @hide */ @SystemApi - public static final class DspHotwordDetectionCallback { + public static final class Callback { // TODO: need to make sure we don't store remote references, but not a high priority. private final IDspHotwordDetectionCallback mRemoteCallback; - private DspHotwordDetectionCallback(IDspHotwordDetectionCallback remoteCallback) { + private Callback(IDspHotwordDetectionCallback remoteCallback) { mRemoteCallback = remoteCallback; } /** * Called when the detected result is valid. */ - public void onDetected() { + public void onDetected(@Nullable HotwordDetectedResult hotwordDetectedResult) { try { - mRemoteCallback.onDetected(); + mRemoteCallback.onDetected(hotwordDetectedResult); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } } /** - * Informs the {@link AlwaysOnHotwordDetector} that the keyphrase was not detected. + * Informs the {@link HotwordDetector} that the keyphrase was not detected. + * <p> + * This cannot not be used when recognition is done through + * {@link #onDetect(ParcelFileDescriptor, AudioFormat, Callback)}. * * @param result Info about the second stage detection result. This is provided to - * the {@link AlwaysOnHotwordDetector}. + * the {@link HotwordDetector}. */ public void onRejected(@Nullable HotwordRejectedResult result) { try { diff --git a/core/java/android/service/voice/HotwordDetector.java b/core/java/android/service/voice/HotwordDetector.java index abf49b797da4..f4e5ddaa31a6 100644 --- a/core/java/android/service/voice/HotwordDetector.java +++ b/core/java/android/service/voice/HotwordDetector.java @@ -16,8 +16,18 @@ package android.service.voice; +import static android.Manifest.permission.CAPTURE_AUDIO_HOTWORD; +import static android.Manifest.permission.RECORD_AUDIO; + import android.annotation.IntDef; +import android.annotation.NonNull; +import android.annotation.Nullable; +import android.annotation.RequiresPermission; import android.annotation.SystemApi; +import android.media.AudioFormat; +import android.os.ParcelFileDescriptor; +import android.os.PersistableBundle; +import android.service.voice.HotwordDetectionService.InitializationStatus; /** * Basic functionality for hotword detectors. @@ -40,11 +50,108 @@ public interface HotwordDetector { int CONFIDENCE_LEVEL_HIGH = 3; /** @hide */ - @IntDef(prefix = { "CONFIDENCE_LEVEL_" }, value = { + @IntDef(prefix = {"CONFIDENCE_LEVEL_"}, value = { CONFIDENCE_LEVEL_NONE, CONFIDENCE_LEVEL_LOW, CONFIDENCE_LEVEL_MEDIUM, CONFIDENCE_LEVEL_HIGH }) - @interface HotwordConfidenceLevelValue {} + @interface HotwordConfidenceLevelValue { + } + + /** + * Starts hotword recognition. + * <p> + * On calling this, the system streams audio from the device microphone to this application's + * {@link HotwordDetectionService}. Audio is streamed until {@link #stopRecognition()} is + * called. + * <p> + * On detection of a hotword, + * {@link AlwaysOnHotwordDetector.Callback#onDetected(AlwaysOnHotwordDetector.EventPayload)} + * is called on the callback provided when creating this {@link HotwordDetector}. + * <p> + * There is a noticeable impact on battery while recognition is active, so make sure to call + * {@link #stopRecognition()} when detection isn't needed. + * <p> + * Calling this again while recognition is active does nothing. + * + * @return true if the request to start recognition succeeded + */ + @RequiresPermission(allOf = {RECORD_AUDIO, CAPTURE_AUDIO_HOTWORD}) + boolean startRecognition(); + + /** + * Stops hotword recognition. + * + * @return true if the request to stop recognition succeeded + */ + boolean stopRecognition(); + + /** + * Starts hotword recognition on audio coming from an external connected microphone. + * <p> + * {@link #stopRecognition()} must be called before {@code audioStream} is closed. + * + * @param audioStream stream containing the audio bytes to run detection on + * @param audioFormat format of the encoded audio + * @param options options supporting detection, such as configuration specific to the + * source of the audio. This will be provided to the {@link HotwordDetectionService}. + * PersistableBundle does not allow any remotable objects or other contents that can be + * used to communicate with other processes. + * @return true if the request to start recognition succeeded + */ + boolean startRecognition( + @NonNull ParcelFileDescriptor audioStream, + @NonNull AudioFormat audioFormat, + @Nullable PersistableBundle options); + + /** + * The callback to notify of detection events. + */ + interface Callback { + + /** + * Called when the keyphrase is spoken. + * + * @param eventPayload Payload data for the detection event. + */ + // TODO: Consider creating a new EventPayload that the AOHD one subclasses. + void onDetected(@NonNull AlwaysOnHotwordDetector.EventPayload eventPayload); + + /** + * Called when the detection fails due to an error. + */ + void onError(); + + /** + * Called when the recognition is paused temporarily for some reason. + * This is an informational callback, and the clients shouldn't be doing anything here + * except showing an indication on their UI if they have to. + */ + void onRecognitionPaused(); + + /** + * Called when the recognition is resumed after it was temporarily paused. + * This is an informational callback, and the clients shouldn't be doing anything here + * except showing an indication on their UI if they have to. + */ + void onRecognitionResumed(); + + /** + * Called when the {@link HotwordDetectionService second stage detection} did not detect the + * keyphrase. + * + * @param result Info about the second stage detection result, provided by the + * {@link HotwordDetectionService}. + */ + void onRejected(@Nullable HotwordRejectedResult result); + + /** + * Called when the {@link HotwordDetectionService} is created by the system and given a + * short amount of time to report it's initialization state. + * + * @param status Info about initialization state of {@link HotwordDetectionService}. + */ + void onHotwordDetectionServiceInitialized(@InitializationStatus int status); + } } diff --git a/core/java/android/service/voice/IDspHotwordDetectionCallback.aidl b/core/java/android/service/voice/IDspHotwordDetectionCallback.aidl index 6f641e1cd1e7..c6b10ff05b08 100644 --- a/core/java/android/service/voice/IDspHotwordDetectionCallback.aidl +++ b/core/java/android/service/voice/IDspHotwordDetectionCallback.aidl @@ -16,6 +16,7 @@ package android.service.voice; +import android.service.voice.HotwordDetectedResult; import android.service.voice.HotwordRejectedResult; /** @@ -23,11 +24,14 @@ import android.service.voice.HotwordRejectedResult; * * @hide */ +// TODO: Rename this. oneway interface IDspHotwordDetectionCallback { + /** * Called when the detected result is valid. */ - void onDetected(); + void onDetected( + in HotwordDetectedResult hotwordDetectedResult); /** * Sends {@code result} to the HotwordDetector. diff --git a/core/java/android/service/voice/IHotwordDetectionService.aidl b/core/java/android/service/voice/IHotwordDetectionService.aidl index 0791f1ca49eb..cac8333a5855 100644 --- a/core/java/android/service/voice/IHotwordDetectionService.aidl +++ b/core/java/android/service/voice/IHotwordDetectionService.aidl @@ -22,6 +22,8 @@ import android.os.PersistableBundle; import android.os.SharedMemory; import android.service.voice.IDspHotwordDetectionCallback; +import com.android.internal.app.IHotwordRecognitionStatusCallback; + /** * Provide the interface to communicate with hotword detection service. * @@ -29,10 +31,18 @@ import android.service.voice.IDspHotwordDetectionCallback; */ oneway interface IHotwordDetectionService { void detectFromDspSource( - in ParcelFileDescriptor audioStream, - in AudioFormat audioFormat, - long timeoutMillis, - in IDspHotwordDetectionCallback callback); + in ParcelFileDescriptor audioStream, + in AudioFormat audioFormat, + long timeoutMillis, + in IDspHotwordDetectionCallback callback); + + void detectFromMicrophoneSource( + in ParcelFileDescriptor audioStream, + int audioSource, + in AudioFormat audioFormat, + in PersistableBundle options, + in IDspHotwordDetectionCallback callback); - void updateState(in PersistableBundle options, in SharedMemory sharedMemory); + void updateState(in PersistableBundle options, in SharedMemory sharedMemory, + in IHotwordRecognitionStatusCallback callback); } diff --git a/core/java/android/service/voice/IMicrophoneHotwordDetectionVoiceInteractionCallback.aidl b/core/java/android/service/voice/IMicrophoneHotwordDetectionVoiceInteractionCallback.aidl new file mode 100644 index 000000000000..80f20fe405b1 --- /dev/null +++ b/core/java/android/service/voice/IMicrophoneHotwordDetectionVoiceInteractionCallback.aidl @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2021 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.service.voice; + +import android.media.AudioFormat; +import android.service.voice.HotwordDetectedResult; + +/** + * Callback for returning the detected result from the HotwordDetectionService. + * + * @hide + */ +oneway interface IMicrophoneHotwordDetectionVoiceInteractionCallback { + + /** + * Called when the detected result is valid. + */ + void onDetected( + in HotwordDetectedResult hotwordDetectedResult, + in AudioFormat audioFormat, + in ParcelFileDescriptor audioStream); +} diff --git a/core/java/android/service/voice/SoftwareHotwordDetector.java b/core/java/android/service/voice/SoftwareHotwordDetector.java new file mode 100644 index 000000000000..376596b9b0d0 --- /dev/null +++ b/core/java/android/service/voice/SoftwareHotwordDetector.java @@ -0,0 +1,146 @@ +/* + * Copyright (C) 2021 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.service.voice; + +import static android.Manifest.permission.RECORD_AUDIO; + +import static com.android.internal.util.function.pooled.PooledLambda.obtainMessage; + +import android.annotation.Nullable; +import android.annotation.RequiresPermission; +import android.media.AudioFormat; +import android.os.Handler; +import android.os.Looper; +import android.os.ParcelFileDescriptor; +import android.os.PersistableBundle; +import android.os.RemoteException; +import android.os.SharedMemory; +import android.util.Slog; + +import com.android.internal.app.IVoiceInteractionManagerService; + +import java.io.PrintWriter; + +/** + * Manages hotword detection not relying on a specific hardware. + * + * <p>On devices where DSP is available it's strongly recommended to use + * {@link AlwaysOnHotwordDetector}. + * + * @hide + **/ +class SoftwareHotwordDetector extends AbstractHotwordDetector { + private static final String TAG = SoftwareHotwordDetector.class.getSimpleName(); + private static final boolean DEBUG = true; + + private final IVoiceInteractionManagerService mManagerService; + private final HotwordDetector.Callback mCallback; + private final AudioFormat mAudioFormat; + private final Handler mHandler; + private final Object mLock = new Object(); + + SoftwareHotwordDetector( + IVoiceInteractionManagerService managerService, + AudioFormat audioFormat, + PersistableBundle options, + SharedMemory sharedMemory, + HotwordDetector.Callback callback) { + super(managerService, callback); + + mManagerService = managerService; + mAudioFormat = audioFormat; + mCallback = callback; + mHandler = new Handler(Looper.getMainLooper()); + + try { + mManagerService.updateState(options, sharedMemory, null /* callback */); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + + @RequiresPermission(RECORD_AUDIO) + @Override + public boolean startRecognition() { + if (DEBUG) { + Slog.i(TAG, "#startRecognition"); + } + + maybeCloseExistingSession(); + + try { + mManagerService.startListeningFromMic( + mAudioFormat, new BinderCallback(mHandler, mCallback)); + } catch (RemoteException e) { + e.rethrowFromSystemServer(); + } + + return true; + } + + /** TODO: stopRecognition */ + @RequiresPermission(RECORD_AUDIO) + @Override + public boolean stopRecognition() { + if (DEBUG) { + Slog.i(TAG, "#stopRecognition"); + } + + try { + mManagerService.stopListeningFromMic(); + } catch (RemoteException e) { + e.rethrowFromSystemServer(); + } + + return true; + } + + private void maybeCloseExistingSession() { + // TODO: needs to be synchronized. + // TODO: implement this + } + + private static class BinderCallback + extends IMicrophoneHotwordDetectionVoiceInteractionCallback.Stub { + private final Handler mHandler; + // TODO: this needs to be a weak reference. + private final HotwordDetector.Callback mCallback; + + BinderCallback(Handler handler, HotwordDetector.Callback callback) { + this.mHandler = handler; + this.mCallback = callback; + } + + /** TODO: onDetected */ + @Override + public void onDetected( + @Nullable HotwordDetectedResult hotwordDetectedResult, + @Nullable AudioFormat audioFormat, + @Nullable ParcelFileDescriptor audioStream) { + mHandler.sendMessage(obtainMessage( + HotwordDetector.Callback::onDetected, + mCallback, + new AlwaysOnHotwordDetector.EventPayload( + audioFormat, hotwordDetectedResult, audioStream))); + } + } + + /** @hide */ + public void dump(String prefix, PrintWriter pw) { + // TODO: implement this + } +} diff --git a/core/java/android/service/voice/VoiceInteractionService.java b/core/java/android/service/voice/VoiceInteractionService.java index cb3791d9986a..2a2522741955 100644 --- a/core/java/android/service/voice/VoiceInteractionService.java +++ b/core/java/android/service/voice/VoiceInteractionService.java @@ -29,6 +29,7 @@ import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.hardware.soundtrigger.KeyphraseEnrollmentInfo; +import android.media.AudioFormat; import android.media.voice.KeyphraseModelManager; import android.os.Bundle; import android.os.Handler; @@ -134,6 +135,7 @@ public class VoiceInteractionService extends Service { private KeyphraseEnrollmentInfo mKeyphraseEnrollmentInfo; private AlwaysOnHotwordDetector mHotwordDetector; + private SoftwareHotwordDetector mSoftwareHotwordDetector; /** * Called when a user has activated an affordance to launch voice assist from the Keyguard. @@ -389,6 +391,60 @@ public class VoiceInteractionService extends Service { } /** + * Creates a {@link HotwordDetector} and initializes the application's + * {@link HotwordDetectionService} using {@code options} and {code sharedMemory}. + * + * <p>To be able to call this, you need to set android:hotwordDetectionService in the + * android.voice_interaction metadata file to a valid hotword detection service, and set + * android:isolatedProcess="true" in the hotword detection service's declaration. Otherwise, + * this throws an {@link IllegalStateException}. + * + * <p>This instance must be retained and used by the client. + * Calling this a second time invalidates the previously created hotword detector + * which can no longer be used to manage recognition. + * + * <p>Using this has a noticeable impact on battery, since the microphone is kept open + * for the lifetime of the recognition {@link HotwordDetector#startRecognition() session}. On + * devices where hardware filtering is available (such as through a DSP), it's highly + * recommended to use {@link #createAlwaysOnHotwordDetector} instead. + * + * @param audioFormat Format of the audio to be passed to {@link HotwordDetectionService}. + * @param options Application configuration data to be provided to the + * {@link HotwordDetectionService}. PersistableBundle does not allow any remotable objects or + * other contents that can be used to communicate with other processes. + * @param sharedMemory The unrestricted data blob to be provided to the + * {@link HotwordDetectionService}. Use this to provide hotword models or other such data to the + * sandboxed process. + * @param callback The callback to notify of detection events. + * @return A hotword detector for the given audio format. + * + * @see #createAlwaysOnHotwordDetector(String, Locale, PersistableBundle, SharedMemory, + * AlwaysOnHotwordDetector.Callback) + * + * @hide + */ + @SystemApi + @RequiresPermission(Manifest.permission.MANAGE_HOTWORD_DETECTION) + @NonNull + public final HotwordDetector createHotwordDetector( + @NonNull AudioFormat audioFormat, + @Nullable PersistableBundle options, + @Nullable SharedMemory sharedMemory, + @NonNull HotwordDetector.Callback callback) { + if (mSystemService == null) { + throw new IllegalStateException("Not available until onReady() is called"); + } + synchronized (mLock) { + // Allow only one concurrent recognition via the APIs. + safelyShutdownHotwordDetector(); + mSoftwareHotwordDetector = + new SoftwareHotwordDetector( + mSystemService, audioFormat, options, sharedMemory, callback); + } + return mSoftwareHotwordDetector; + } + + /** * Creates an {@link KeyphraseModelManager} to use for enrolling voice models outside of the * pre-bundled system voice models. * @hide @@ -431,24 +487,43 @@ public class VoiceInteractionService extends Service { private void safelyShutdownHotwordDetector() { synchronized (mLock) { - if (mHotwordDetector == null) { - return; - } + shutdownDspHotwordDetectorLocked(); + shutdownMicrophoneHotwordDetectorLocked(); + } + } - try { - mHotwordDetector.stopRecognition(); - } catch (Exception ex) { - // Ignore. - } + private void shutdownDspHotwordDetectorLocked() { + if (mHotwordDetector == null) { + return; + } - try { - mHotwordDetector.invalidate(); - } catch (Exception ex) { - // Ignore. - } + try { + mHotwordDetector.stopRecognition(); + } catch (Exception ex) { + // Ignore. + } - mHotwordDetector = null; + try { + mHotwordDetector.invalidate(); + } catch (Exception ex) { + // Ignore. } + + mHotwordDetector = null; + } + + private void shutdownMicrophoneHotwordDetectorLocked() { + if (mSoftwareHotwordDetector == null) { + return; + } + + try { + mSoftwareHotwordDetector.stopRecognition(); + } catch (Exception ex) { + // Ignore. + } + + mSoftwareHotwordDetector = null; } /** @@ -478,6 +553,13 @@ public class VoiceInteractionService extends Service { } else { mHotwordDetector.dump(" ", pw); } + + pw.println(" MicrophoneHotwordDetector"); + if (mSoftwareHotwordDetector == null) { + pw.println(" NULL"); + } else { + mSoftwareHotwordDetector.dump(" ", pw); + } } } } diff --git a/core/java/android/util/FeatureFlagUtils.java b/core/java/android/util/FeatureFlagUtils.java index 913ceae63a94..572e50a8ce34 100644 --- a/core/java/android/util/FeatureFlagUtils.java +++ b/core/java/android/util/FeatureFlagUtils.java @@ -70,7 +70,7 @@ public class FeatureFlagUtils { DEFAULT_FLAGS.put("settings_tether_all_in_one", "false"); DEFAULT_FLAGS.put("settings_silky_home", "true"); DEFAULT_FLAGS.put("settings_contextual_home", "false"); - DEFAULT_FLAGS.put(SETTINGS_PROVIDER_MODEL, "false"); + DEFAULT_FLAGS.put(SETTINGS_PROVIDER_MODEL, "true"); DEFAULT_FLAGS.put(SETTINGS_USE_NEW_BACKUP_ELIGIBILITY_RULES, "true"); DEFAULT_FLAGS.put(SETTINGS_ENABLE_SECURITY_HUB, "false"); } diff --git a/core/java/android/view/Display.java b/core/java/android/view/Display.java index d484f4d47e99..bf152cb6ed22 100644 --- a/core/java/android/view/Display.java +++ b/core/java/android/view/Display.java @@ -44,6 +44,7 @@ import android.os.Parcel; import android.os.Parcelable; import android.os.Process; import android.os.SystemClock; +import android.util.ArraySet; import android.util.DisplayMetrics; import android.util.Log; @@ -1066,7 +1067,47 @@ public final class Display { public HdrCapabilities getHdrCapabilities() { synchronized (mLock) { updateDisplayInfoLocked(); - return mDisplayInfo.hdrCapabilities; + if (mDisplayInfo.userDisabledHdrTypes.length == 0) { + return mDisplayInfo.hdrCapabilities; + } + ArraySet<Integer> enabledTypesSet = new ArraySet<>(); + for (int supportedType : mDisplayInfo.hdrCapabilities.getSupportedHdrTypes()) { + boolean typeDisabled = false; + for (int userDisabledType : mDisplayInfo.userDisabledHdrTypes) { + if (supportedType == userDisabledType) { + typeDisabled = true; + break; + } + } + if (!typeDisabled) { + enabledTypesSet.add(supportedType); + } + } + int[] enabledTypes = new int[enabledTypesSet.size()]; + int index = 0; + for (int enabledType : enabledTypesSet) { + enabledTypes[index++] = enabledType; + } + return new HdrCapabilities(enabledTypes, + mDisplayInfo.hdrCapabilities.mMaxLuminance, + mDisplayInfo.hdrCapabilities.mMaxAverageLuminance, + mDisplayInfo.hdrCapabilities.mMinLuminance); + } + } + + /** + * @hide + * Returns the display's HDR supported types. + * + * @see #isHdr() + * @see HdrCapabilities#getSupportedHdrTypes() + */ + @TestApi + @NonNull + public int[] getReportedHdrTypes() { + synchronized (mLock) { + updateDisplayInfoLocked(); + return mDisplayInfo.hdrCapabilities.getSupportedHdrTypes(); } } @@ -1079,7 +1120,7 @@ public final class Display { public boolean isHdr() { synchronized (mLock) { updateDisplayInfoLocked(); - return mDisplayInfo.isHdr(); + return !(getHdrCapabilities().getSupportedHdrTypes().length == 0); } } @@ -1855,6 +1896,14 @@ public final class Display { public static final int HDR_TYPE_HDR10_PLUS = 4; /** @hide */ + public static final int[] HDR_TYPES = { + HDR_TYPE_DOLBY_VISION, + HDR_TYPE_HDR10, + HDR_TYPE_HLG, + HDR_TYPE_HDR10_PLUS + }; + + /** @hide */ @IntDef(prefix = { "HDR_TYPE_" }, value = { HDR_TYPE_DOLBY_VISION, HDR_TYPE_HDR10, diff --git a/core/java/android/view/DisplayInfo.java b/core/java/android/view/DisplayInfo.java index 9aaf5c066073..36be9f856282 100644 --- a/core/java/android/view/DisplayInfo.java +++ b/core/java/android/view/DisplayInfo.java @@ -198,6 +198,9 @@ public final class DisplayInfo implements Parcelable { /** The display's HDR capabilities */ public Display.HdrCapabilities hdrCapabilities; + /** The formats disabled by user **/ + public int[] userDisabledHdrTypes = {}; + /** * Indicates whether the display can be switched into a mode with minimal post * processing. @@ -363,6 +366,7 @@ public final class DisplayInfo implements Parcelable { && colorMode == other.colorMode && Arrays.equals(supportedColorModes, other.supportedColorModes) && Objects.equals(hdrCapabilities, other.hdrCapabilities) + && Arrays.equals(userDisabledHdrTypes, other.userDisabledHdrTypes) && minimalPostProcessingSupported == other.minimalPostProcessingSupported && logicalDensityDpi == other.logicalDensityDpi && physicalXDpi == other.physicalXDpi @@ -412,6 +416,7 @@ public final class DisplayInfo implements Parcelable { supportedColorModes = Arrays.copyOf( other.supportedColorModes, other.supportedColorModes.length); hdrCapabilities = other.hdrCapabilities; + userDisabledHdrTypes = other.userDisabledHdrTypes; minimalPostProcessingSupported = other.minimalPostProcessingSupported; logicalDensityDpi = other.logicalDensityDpi; physicalXDpi = other.physicalXDpi; @@ -478,6 +483,11 @@ public final class DisplayInfo implements Parcelable { brightnessMaximum = source.readFloat(); brightnessDefault = source.readFloat(); roundedCorners = source.readTypedObject(RoundedCorners.CREATOR); + int numUserDisabledFormats = source.readInt(); + userDisabledHdrTypes = new int[numUserDisabledFormats]; + for (int i = 0; i < numUserDisabledFormats; i++) { + userDisabledHdrTypes[i] = source.readInt(); + } } @Override @@ -528,6 +538,10 @@ public final class DisplayInfo implements Parcelable { dest.writeFloat(brightnessMaximum); dest.writeFloat(brightnessDefault); dest.writeTypedObject(roundedCorners, flags); + dest.writeInt(userDisabledHdrTypes.length); + for (int i = 0; i < userDisabledHdrTypes.length; i++) { + dest.writeInt(userDisabledHdrTypes[i]); + } } @Override @@ -729,6 +743,8 @@ public final class DisplayInfo implements Parcelable { sb.append(Arrays.toString(supportedModes)); sb.append(", hdrCapabilities "); sb.append(hdrCapabilities); + sb.append(", userDisabledHdrTypes "); + sb.append(Arrays.toString(userDisabledHdrTypes)); sb.append(", minimalPostProcessingSupported "); sb.append(minimalPostProcessingSupported); sb.append(", rotation "); diff --git a/core/java/android/view/SurfaceControl.java b/core/java/android/view/SurfaceControl.java index 85d4878d044c..b2a84a29b9a1 100644 --- a/core/java/android/view/SurfaceControl.java +++ b/core/java/android/view/SurfaceControl.java @@ -190,6 +190,8 @@ public final class SurfaceControl implements Parcelable { private static native void nativeReparent(long transactionObj, long nativeObject, long newParentNativeObject); + private static native void nativeOverrideHdrTypes(IBinder displayToken, int[] modes); + private static native void nativeSetInputWindowInfo(long transactionObj, long nativeObject, InputWindowHandle handle); @@ -2204,6 +2206,18 @@ public final class SurfaceControl implements Parcelable { } /** + * Overrides HDR modes for a display device. + * + * If the caller does not have ACCESS_SURFACE_FLINGER permission, this will throw a Security + * Exception. + * @hide + */ + @TestApi + public static void overrideHdrTypes(@NonNull IBinder displayToken, @NonNull int[] modes) { + nativeOverrideHdrTypes(displayToken, modes); + } + + /** * @hide */ @UnsupportedAppUsage @@ -2244,6 +2258,8 @@ public final class SurfaceControl implements Parcelable { * * @hide */ + @TestApi + @NonNull public static IBinder getInternalDisplayToken() { final long[] physicalDisplayIds = getPhysicalDisplayIds(); if (physicalDisplayIds.length == 0) { diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index a03e9e352c60..615dd82fb848 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -107,6 +107,7 @@ import android.util.AttributeSet; import android.util.FloatProperty; import android.util.LayoutDirection; import android.util.Log; +import android.util.LongSparseArray; import android.util.LongSparseLongArray; import android.util.Pair; import android.util.Pools.SynchronizedPool; @@ -151,6 +152,7 @@ import android.view.inputmethod.InputConnection; import android.view.inspector.InspectableProperty; import android.view.inspector.InspectableProperty.EnumEntry; import android.view.inspector.InspectableProperty.FlagEntry; +import android.view.translation.TranslationCapability; import android.view.translation.TranslationSpec.DataFormat; import android.view.translation.ViewTranslationCallback; import android.view.translation.ViewTranslationRequest; @@ -30722,7 +30724,6 @@ public class View implements Drawable.Callback, KeyEvent.Callback, } } - //TODO(b/1960696): update javadoc when dispatchRequestTranslation is ready. /** * Returns a {@link ViewTranslationRequest} which represents the content to be translated. * @@ -30735,12 +30736,36 @@ public class View implements Drawable.Callback, KeyEvent.Callback, * The {@link AutofillId} must be set on the returned value. */ @Nullable - public ViewTranslationRequest createTranslationRequest( + public ViewTranslationRequest onCreateTranslationRequest( @NonNull @DataFormat int[] supportedFormats) { return null; } /** + * Returns a {@link ViewTranslationRequest} list which represents the content to be translated + * in the virtual view. This is called if this view returned a virtual view structure + * from {@link #onProvideContentCaptureStructure} and the system determined that those virtual + * views were relevant for translation. + * + * <p>The default implementation does nothing.</p> + * + * @param virtualChildIds the virtual child ids which represents the child views in the virtual + * view. + * @param supportedFormats the supported translation formats. For now, the only possible value + * is the {@link android.view.translation.TranslationSpec#DATA_FORMAT_TEXT}. + * @param requestsCollector a {@link ViewTranslationRequest} collector that will be called + * multiple times to collect the information to be translated in the virtual view. One + * {@link ViewTranslationRequest} per virtual child. The {@link ViewTranslationRequest} must + * contains the {@link AutofillId} corresponding to the virtualChildIds. + */ + @SuppressLint("NullableCollection") + public void onCreateTranslationRequests(@NonNull long[] virtualChildIds, + @NonNull @DataFormat int[] supportedFormats, + @NonNull Consumer<ViewTranslationRequest> requestsCollector) { + // no-op + } + + /** * Returns a {@link ViewTranslationCallback} that is used to display/hide the translated * information. If the View supports displaying translated content, it should implement * {@link ViewTranslationCallback}. @@ -30769,8 +30794,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, } /** - * Called when the content from {@link #createTranslationRequest} had been translated by the - * TranslationService. + * Called when the content from {@link View#onCreateTranslationRequest} had been translated by + * the TranslationService. * * <p> The default implementation does nothing.</p> * @@ -30782,6 +30807,62 @@ public class View implements Drawable.Callback, KeyEvent.Callback, } /** + * Called when the content from {@link View#onCreateTranslationRequest} had been translated by + * the TranslationService. + * + * <p> The default implementation does nothing.</p> + * + * @param response a {@link ViewTranslationResponse} SparseArray for the request that send by + * {@link View#onCreateTranslationRequests} that contains the translated information which can + * be shown in the view. The key of SparseArray is + * the virtual child ids. + */ + public void onTranslationResponse(@NonNull LongSparseArray<ViewTranslationResponse> response) { + // no-op + } + + /** + * Dispatch to collect the {@link ViewTranslationRequest}s for translation purpose by traversing + * the hierarchy when the app requests ui translation. Typically, this method should only be + * overridden by subclasses that provide a view hierarchy (such as {@link ViewGroup}). Other + * classes should override {@link View#onCreateTranslationRequest}. When requested to start the + * ui translation, the system will call this method to traverse the view hierarchy to call + * {@link View#onCreateTranslationRequest} to build {@link ViewTranslationRequest}s and create a + * {@link android.view.translation.Translator} to translate the requests. All the + * {@link ViewTranslationRequest}s will be added when the traversal is done. + * + * <p> The default implementation will call {@link View#onCreateTranslationRequest} to build + * {@link ViewTranslationRequest} if the view should be translated. </p> + * + * @param viewIds a map for the view's {@link AutofillId} and its virtual child ids or + * {@code null} if the view doesn't have virtual child that should be translated. The virtual + * child ids are the same virtual ids provided by ContentCapture. + * @param supportedFormats the supported translation formats. For now, the only possible value + * is the {@link android.view.translation.TranslationSpec#DATA_FORMAT_TEXT}. + * @param capability a {@link TranslationCapability} that holds translation capability. + * information, e.g. source spec, target spec. + * @param requests fill in with {@link ViewTranslationRequest}s for translation purpose. + */ + public void dispatchRequestTranslation(@NonNull Map<AutofillId, long[]> viewIds, + @NonNull @DataFormat int[] supportedFormats, + @Nullable TranslationCapability capability, + @NonNull List<ViewTranslationRequest> requests) { + AutofillId autofillId = getAutofillId(); + if (viewIds.containsKey(autofillId)) { + if (viewIds.get(autofillId) == null) { + ViewTranslationRequest request = onCreateTranslationRequest(supportedFormats); + if (request != null && request.getKeys().size() > 0) { + requests.add(request); + } + } else { + onCreateTranslationRequests(viewIds.get(autofillId), supportedFormats, request -> { + requests.add(request); + }); + } + } + } + + /** * Called to generate a {@link DisplayHash} for this view. * * @param hashAlgorithm The hash algorithm to use when hashing the display. Must be one of diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java index 38a59373554c..8198254958f4 100644 --- a/core/java/android/view/ViewGroup.java +++ b/core/java/android/view/ViewGroup.java @@ -65,9 +65,13 @@ import android.view.animation.Animation; import android.view.animation.AnimationUtils; import android.view.animation.LayoutAnimationController; import android.view.animation.Transformation; +import android.view.autofill.AutofillId; import android.view.autofill.Helper; import android.view.inspector.InspectableProperty; import android.view.inspector.InspectableProperty.EnumEntry; +import android.view.translation.TranslationCapability; +import android.view.translation.TranslationSpec.DataFormat; +import android.view.translation.ViewTranslationRequest; import com.android.internal.R; @@ -9264,4 +9268,25 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager mParent.onDescendantUnbufferedRequested(); } } + + /** + * {@inheritDoc} + * + * The implementation calls {@link #dispatchRequestTranslation} for all the child views. + */ + @Override + public void dispatchRequestTranslation(@NonNull Map<AutofillId, long[]> viewIds, + @NonNull @DataFormat int[] supportedFormats, + @Nullable TranslationCapability capability, + @NonNull List<ViewTranslationRequest> requests) { + super.dispatchRequestTranslation(viewIds, supportedFormats, capability, requests); + final int childCount = getChildCount(); + if (childCount == 0) { + return; + } + for (int i = 0; i < childCount; ++i) { + final View child = getChildAt(i); + child.dispatchRequestTranslation(viewIds, supportedFormats, capability, requests); + } + } } diff --git a/core/java/android/view/translation/UiTranslationController.java b/core/java/android/view/translation/UiTranslationController.java index 15d01ae6a8fc..6ba40c3cc5d9 100644 --- a/core/java/android/view/translation/UiTranslationController.java +++ b/core/java/android/view/translation/UiTranslationController.java @@ -31,8 +31,10 @@ import android.os.HandlerThread; import android.os.Process; import android.util.ArrayMap; import android.util.Log; +import android.util.LongSparseArray; import android.util.Pair; import android.util.SparseArray; +import android.util.SparseIntArray; import android.view.View; import android.view.ViewGroup; import android.view.ViewRootImpl; @@ -46,6 +48,7 @@ import java.io.PrintWriter; import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.List; +import java.util.Map; import java.util.function.BiConsumer; /** @@ -223,7 +226,6 @@ public class UiTranslationController { pw.print(outerPrefix); pw.print("isContainsView: "); pw.println(isContainsView); } - /** * The method is used by {@link Translator}, it will be called when the translation is done. The * translation result can be get from here. @@ -236,11 +238,90 @@ public class UiTranslationController { } final SparseArray<ViewTranslationResponse> translatedResult = response.getViewTranslationResponses(); - // TODO(b/177960696): handle virtual views. Check the result if the AutofillId is virtual - // AutofillId? - onTranslationCompleted(translatedResult); + final SparseArray<ViewTranslationResponse> viewsResult = new SparseArray<>(); + final SparseArray<LongSparseArray<ViewTranslationResponse>> virtualViewsResult = + new SparseArray<>(); + // TODO: use another structure to prevent autoboxing? + final List<Integer> viewIds = new ArrayList<>(); + + for (int i = 0; i < translatedResult.size(); i++) { + final ViewTranslationResponse result = translatedResult.valueAt(i); + final AutofillId autofillId = result.getAutofillId(); + if (!viewIds.contains(autofillId.getViewId())) { + viewIds.add(autofillId.getViewId()); + } + if (autofillId.isNonVirtual()) { + viewsResult.put(translatedResult.keyAt(i), result); + } else { + final boolean isVirtualViewAdded = + virtualViewsResult.indexOfKey(autofillId.getViewId()) > 0; + final LongSparseArray<ViewTranslationResponse> childIds = + isVirtualViewAdded ? virtualViewsResult.get(autofillId.getViewId()) + : new LongSparseArray<>(); + childIds.put(autofillId.getVirtualChildLongId(), result); + if (!isVirtualViewAdded) { + virtualViewsResult.put(autofillId.getViewId(), childIds); + } + } + } + // Traverse tree and get views by the responsed AutofillId + findViewsTraversalByAutofillIds(viewIds); + + if (viewsResult.size() > 0) { + onTranslationCompleted(viewsResult); + } + if (virtualViewsResult.size() > 0) { + onVirtualViewTranslationCompleted(virtualViewsResult); + } + } + + /** + * The method is used to handle the translation result for the vertual views. + */ + private void onVirtualViewTranslationCompleted( + SparseArray<LongSparseArray<ViewTranslationResponse>> translatedResult) { + if (!mActivity.isResumed()) { + if (DEBUG) { + Log.v(TAG, "onTranslationCompleted: Activity is not resumed."); + } + return; + } + synchronized (mLock) { + if (mCurrentState == STATE_UI_TRANSLATION_FINISHED) { + Log.w(TAG, "onTranslationCompleted: the translation state is finished now. " + + "Skip to show the translated text."); + return; + } + for (int i = 0; i < translatedResult.size(); i++) { + final AutofillId autofillId = new AutofillId(translatedResult.keyAt(i)); + final View view = mViews.get(autofillId).get(); + if (view == null) { + Log.w(TAG, "onTranslationCompleted: the view for autofill id " + autofillId + + " may be gone."); + continue; + } + final LongSparseArray<ViewTranslationResponse> virtualChildResponse = + translatedResult.valueAt(i); + mActivity.runOnUiThread(() -> { + if (view.getViewTranslationCallback() == null) { + if (DEBUG) { + Log.d(TAG, view + " doesn't support showing translation because of " + + "null ViewTranslationCallback."); + } + return; + } + view.onTranslationResponse(virtualChildResponse); + if (view.getViewTranslationCallback() != null) { + view.getViewTranslationCallback().onShowTranslation(view); + } + }); + } + } } + /** + * The method is used to handle the translation result for non-vertual views. + */ private void onTranslationCompleted(SparseArray<ViewTranslationResponse> translatedResult) { if (!mActivity.isResumed()) { if (DEBUG) { @@ -259,7 +340,7 @@ public class UiTranslationController { return; } for (int i = 0; i < resultCount; i++) { - final ViewTranslationResponse response = translatedResult.get(i); + final ViewTranslationResponse response = translatedResult.valueAt(i); final AutofillId autofillId = response.getAutofillId(); if (autofillId == null) { continue; @@ -279,7 +360,9 @@ public class UiTranslationController { return; } view.onTranslationResponse(response); - view.getViewTranslationCallback().onShowTranslation(view); + if (view.getViewTranslationCallback() != null) { + view.getViewTranslationCallback().onShowTranslation(view); + } }); } } @@ -319,44 +402,62 @@ public class UiTranslationController { */ private void onUiTranslationStarted(Translator translator, List<AutofillId> views) { synchronized (mLock) { - // TODO(b/177960696): handle virtual views. Need to check the requested view list is - // virtual AutofillId or not - findViewsAndCollectViewTranslationRequest(translator, views); + // Filter the request views's AutofillId + SparseIntArray virtualViewChildCount = getRequestVirtualViewChildCount(views); + Map<AutofillId, long[]> viewIds = new ArrayMap<>(); + for (int i = 0; i < views.size(); i++) { + AutofillId autofillId = views.get(i); + if (autofillId.isNonVirtual()) { + viewIds.put(autofillId, null); + } else { + // The virtual id get from content capture is long, see getVirtualChildLongId() + // e.g. 1001, 1001:2, 1002:1 -> 1001, <1,2>; 1002, <1> + AutofillId virtualViewAutofillId = new AutofillId(autofillId.getViewId()); + long[] childs; + if (viewIds.containsKey(virtualViewAutofillId)) { + childs = viewIds.get(virtualViewAutofillId); + } else { + int childCount = virtualViewChildCount.get(autofillId.getViewId()); + childs = new long[childCount]; + viewIds.put(virtualViewAutofillId, childs); + } + int end = childs.length - 1; + childs[end] = autofillId.getVirtualChildLongId(); + } + } + ArrayList<ViewTranslationRequest> requests = new ArrayList<>(); + int[] supportedFormats = getSupportedFormatsLocked(); + ArrayList<ViewRootImpl> roots = + WindowManagerGlobal.getInstance().getRootViews(mActivity.getActivityToken()); + mActivity.runOnUiThread(() -> { + // traverse the hierarchy to collect ViewTranslationRequests + for (int rootNum = 0; rootNum < roots.size(); rootNum++) { + View rootView = roots.get(rootNum).getView(); + // TODO(b/183589662): call getTranslationCapabilities() for capability + rootView.dispatchRequestTranslation(viewIds, supportedFormats, /* capability */ + null, requests); + } + mWorkerHandler.sendMessage(PooledLambda.obtainMessage( + UiTranslationController::sendTranslationRequest, + UiTranslationController.this, translator, requests)); + }); } } - /** - * If the translation requested views are not virtual view, we need to traverse the tree to - * find the views and get the View's ViewTranslationRequest. - */ - private void findViewsAndCollectViewTranslationRequest(Translator translator, - List<AutofillId> views) { - // Find Views collect the translation data - final ArrayList<ViewTranslationRequest> requests = new ArrayList<>(); - final ArrayList<View> foundViews = new ArrayList<>(); - findViewsTraversalByAutofillIds(views, foundViews); - final int[] supportedFormats = getSupportedFormatsLocked(); - for (int i = 0; i < foundViews.size(); i++) { - final View view = foundViews.get(i); - final int currentCount = i; - mActivity.runOnUiThread(() -> { - final ViewTranslationRequest request = - view.createTranslationRequest(supportedFormats); - // TODO(b/177960696): handle null case, the developers may want to handle the - // translation, call dispatchRequestTranslation() instead. - if (request != null - && request.getKeys().size() > 0) { - requests.add(request); - } - if (currentCount == (foundViews.size() - 1)) { - Log.v(TAG, "onUiTranslationStarted: collect " + requests.size() - + " requests."); - mWorkerHandler.sendMessage(PooledLambda.obtainMessage( - UiTranslationController::sendTranslationRequest, - UiTranslationController.this, translator, requests)); + private SparseIntArray getRequestVirtualViewChildCount(List<AutofillId> views) { + SparseIntArray virtualViewCount = new SparseIntArray(); + for (int i = 0; i < views.size(); i++) { + AutofillId autofillId = views.get(i); + if (!autofillId.isNonVirtual()) { + int virtualViewId = autofillId.getViewId(); + if (virtualViewCount.indexOfKey(virtualViewId) < 0) { + virtualViewCount.put(virtualViewId, 1); + } else { + virtualViewCount.put(virtualViewId, (virtualViewCount.get(virtualViewId) + 1)); } - }); + } } + return virtualViewCount; } private int[] getSupportedFormatsLocked() { @@ -364,39 +465,36 @@ public class UiTranslationController { return new int[] {TranslationSpec.DATA_FORMAT_TEXT}; } - private void findViewsTraversalByAutofillIds(List<AutofillId> sourceViewIds, - ArrayList<View> foundViews) { + private void findViewsTraversalByAutofillIds(List<Integer> sourceViewIds) { final ArrayList<ViewRootImpl> roots = WindowManagerGlobal.getInstance().getRootViews(mActivity.getActivityToken()); for (int rootNum = 0; rootNum < roots.size(); rootNum++) { final View rootView = roots.get(rootNum).getView(); if (rootView instanceof ViewGroup) { - findViewsTraversalByAutofillIds((ViewGroup) rootView, sourceViewIds, foundViews); + findViewsTraversalByAutofillIds((ViewGroup) rootView, sourceViewIds); } else { - addViewIfNeeded(sourceViewIds, rootView, foundViews); + addViewIfNeeded(sourceViewIds, rootView); } } } private void findViewsTraversalByAutofillIds(ViewGroup viewGroup, - List<AutofillId> sourceViewIds, ArrayList<View> foundViews) { + List<Integer> sourceViewIds) { final int childCount = viewGroup.getChildCount(); for (int i = 0; i < childCount; ++i) { final View child = viewGroup.getChildAt(i); if (child instanceof ViewGroup) { - findViewsTraversalByAutofillIds((ViewGroup) child, sourceViewIds, foundViews); + findViewsTraversalByAutofillIds((ViewGroup) child, sourceViewIds); } else { - addViewIfNeeded(sourceViewIds, child, foundViews); + addViewIfNeeded(sourceViewIds, child); } } } - private void addViewIfNeeded(List<AutofillId> sourceViewIds, View view, - ArrayList<View> foundViews) { + private void addViewIfNeeded(List<Integer> sourceViewIds, View view) { final AutofillId autofillId = view.getAutofillId(); - if (sourceViewIds.contains(autofillId)) { + if (sourceViewIds.contains(autofillId.getViewId()) && !mViews.containsKey(autofillId)) { mViews.put(autofillId, new WeakReference<>(view)); - foundViews.add(view); } } diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java index 487d13e40bf3..6d4fa658b3e9 100644 --- a/core/java/android/webkit/WebView.java +++ b/core/java/android/webkit/WebView.java @@ -45,6 +45,7 @@ import android.os.StrictMode; import android.print.PrintDocumentAdapter; import android.util.AttributeSet; import android.util.Log; +import android.util.LongSparseArray; import android.util.SparseArray; import android.view.DragEvent; import android.view.KeyEvent; @@ -64,6 +65,9 @@ import android.view.inputmethod.EditorInfo; import android.view.inputmethod.InputConnection; import android.view.inspector.InspectableProperty; import android.view.textclassifier.TextClassifier; +import android.view.translation.TranslationSpec.DataFormat; +import android.view.translation.ViewTranslationRequest; +import android.view.translation.ViewTranslationResponse; import android.widget.AbsoluteLayout; import java.io.BufferedWriter; @@ -73,6 +77,7 @@ import java.lang.annotation.RetentionPolicy; import java.util.List; import java.util.Map; import java.util.concurrent.Executor; +import java.util.function.Consumer; /** * A View that displays web pages. @@ -2854,6 +2859,20 @@ public class WebView extends AbsoluteLayout return mProvider.getViewDelegate().isVisibleToUserForAutofill(virtualId); } + @Override + @Nullable + public void onCreateTranslationRequests(@NonNull long[] virtualChildIds, + @NonNull @DataFormat int[] supportedFormats, + @NonNull Consumer<ViewTranslationRequest> requestsCollector) { + mProvider.getViewDelegate().onCreateTranslationRequests(virtualChildIds, supportedFormats, + requestsCollector); + } + + @Override + public void onTranslationResponse(@NonNull LongSparseArray<ViewTranslationResponse> response) { + mProvider.getViewDelegate().onTranslationResponse(response); + } + /** @hide */ @Override public void onInitializeAccessibilityNodeInfoInternal(AccessibilityNodeInfo info) { diff --git a/core/java/android/webkit/WebViewProvider.java b/core/java/android/webkit/WebViewProvider.java index 18a110b2be0f..264736008782 100644 --- a/core/java/android/webkit/WebViewProvider.java +++ b/core/java/android/webkit/WebViewProvider.java @@ -18,6 +18,7 @@ package android.webkit; import android.annotation.NonNull; import android.annotation.Nullable; +import android.annotation.SuppressLint; import android.annotation.SystemApi; import android.content.Intent; import android.content.res.Configuration; @@ -33,6 +34,7 @@ import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.print.PrintDocumentAdapter; +import android.util.LongSparseArray; import android.util.SparseArray; import android.view.DragEvent; import android.view.KeyEvent; @@ -47,6 +49,9 @@ import android.view.autofill.AutofillValue; import android.view.inputmethod.EditorInfo; import android.view.inputmethod.InputConnection; import android.view.textclassifier.TextClassifier; +import android.view.translation.TranslationSpec.DataFormat; +import android.view.translation.ViewTranslationRequest; +import android.view.translation.ViewTranslationResponse; import android.webkit.WebView.HitTestResult; import android.webkit.WebView.PictureListener; import android.webkit.WebView.VisualStateCallback; @@ -56,6 +61,7 @@ import java.io.BufferedWriter; import java.io.File; import java.util.Map; import java.util.concurrent.Executor; +import java.util.function.Consumer; /** * WebView backend provider interface: this interface is the abstract backend to a WebView @@ -358,6 +364,20 @@ public interface WebViewProvider { @SuppressWarnings("unused") int flags) { } + @SuppressLint("NullableCollection") + @Nullable + default void onCreateTranslationRequests( + @NonNull @SuppressWarnings("unused") long[] virtualChildIds, + @NonNull @SuppressWarnings("unused") @DataFormat int[] supportedFormats, + @NonNull @SuppressWarnings("unused") + Consumer<ViewTranslationRequest> requestsCollector) { + } + + default void onTranslationResponse( + @NonNull @SuppressWarnings("unused") + LongSparseArray<ViewTranslationResponse> response) { + } + public AccessibilityNodeProvider getAccessibilityNodeProvider(); public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info); diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java index 6733c0d3a8e1..ffaa31552a6a 100644 --- a/core/java/android/widget/TextView.java +++ b/core/java/android/widget/TextView.java @@ -13872,7 +13872,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener */ @Nullable @Override - public ViewTranslationRequest createTranslationRequest(@NonNull int[] supportedFormats) { + public ViewTranslationRequest onCreateTranslationRequest(@NonNull int[] supportedFormats) { if (supportedFormats == null || supportedFormats.length == 0) { // TODO(b/182433547): remove before S release if (UiTranslationController.DEBUG) { @@ -13938,7 +13938,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener /** * - * Called when the content from {@link #createTranslationRequest} had been translated by the + * Called when the content from {@link #onCreateTranslationRequest} had been translated by the * TranslationService. The default implementation will replace the current * {@link TransformationMethod} to transform the original text to the translated text display. * diff --git a/core/java/com/android/internal/app/IHotwordRecognitionStatusCallback.aidl b/core/java/com/android/internal/app/IHotwordRecognitionStatusCallback.aidl index 23314e7be622..9bec505c801d 100644 --- a/core/java/com/android/internal/app/IHotwordRecognitionStatusCallback.aidl +++ b/core/java/com/android/internal/app/IHotwordRecognitionStatusCallback.aidl @@ -66,4 +66,12 @@ oneway interface IHotwordRecognitionStatusCallback { * Called when the recognition is resumed after it was temporarily paused. */ void onRecognitionResumed(); + + /** + * Called when the {@link HotwordDetectionService} reported the result for requesting update + * state action. + * + * @param status The status about the result of requesting update state action. + */ + void onStatusReported(int status); } diff --git a/core/java/com/android/internal/app/IVoiceInteractionManagerService.aidl b/core/java/com/android/internal/app/IVoiceInteractionManagerService.aidl index e2732867d195..fffeb024caae 100644 --- a/core/java/com/android/internal/app/IVoiceInteractionManagerService.aidl +++ b/core/java/com/android/internal/app/IVoiceInteractionManagerService.aidl @@ -18,12 +18,15 @@ package com.android.internal.app; import android.content.ComponentName; import android.content.Intent; +import android.media.AudioFormat; import android.media.permission.Identity; import android.os.Bundle; +import android.os.ParcelFileDescriptor; import android.os.PersistableBundle; import android.os.RemoteCallback; import android.os.SharedMemory; +import com.android.internal.app.IHotwordRecognitionStatusCallback; import com.android.internal.app.IVoiceActionCheckCallback; import com.android.internal.app.IVoiceInteractionSessionShowCallback; import com.android.internal.app.IVoiceInteractor; @@ -33,6 +36,7 @@ import android.hardware.soundtrigger.KeyphraseMetadata; import android.hardware.soundtrigger.SoundTrigger; import android.service.voice.IVoiceInteractionService; import android.service.voice.IVoiceInteractionSession; +import android.service.voice.IMicrophoneHotwordDetectionVoiceInteractionCallback; interface IVoiceInteractionManagerService { void showSession(in Bundle sessionArgs, int flags); @@ -235,11 +239,27 @@ interface IVoiceInteractionManagerService { * @param sharedMemory The unrestricted data blob to provide to the * {@link HotwordDetectionService}. Use this to provide the hotword models data or other * such data to the trusted process. + * @param callback Use this to report {@link HotwordDetectionService} status. */ - void updateState(in PersistableBundle options, in SharedMemory sharedMemory); + void updateState( + in PersistableBundle options, + in SharedMemory sharedMemory, + in IHotwordRecognitionStatusCallback callback); /** * Requests to shutdown hotword detection service. */ void shutdownHotwordDetectionService(); + + void startListeningFromMic( + in AudioFormat audioFormat, + in IMicrophoneHotwordDetectionVoiceInteractionCallback callback); + + void stopListeningFromMic(); + + void startListeningFromExternalSource( + in ParcelFileDescriptor audioStream, + in AudioFormat audioFormat, + in PersistableBundle options, + in IMicrophoneHotwordDetectionVoiceInteractionCallback callback); } diff --git a/core/java/com/android/internal/os/BluetoothPowerCalculator.java b/core/java/com/android/internal/os/BluetoothPowerCalculator.java index db1403479f8a..75a98133a8f3 100644 --- a/core/java/com/android/internal/os/BluetoothPowerCalculator.java +++ b/core/java/com/android/internal/os/BluetoothPowerCalculator.java @@ -84,16 +84,16 @@ public class BluetoothPowerCalculator extends PowerCalculator { // Subtract what the apps used, but clamp to 0. final long systemComponentDurationMs = Math.max(0, systemDurationMs - total.durationMs); - final double systemComponentPowerMah = Math.max(0, systemPowerMah - total.powerMah); - if (DEBUG && systemComponentPowerMah != 0) { + if (DEBUG) { Log.d(TAG, "Bluetooth active: time=" + (systemComponentDurationMs) - + " power=" + formatCharge(systemComponentPowerMah)); + + " power=" + formatCharge(systemPowerMah)); } systemBatteryConsumerBuilder .setUsageDurationMillis(BatteryConsumer.TIME_COMPONENT_BLUETOOTH, systemComponentDurationMs) .setConsumedPower(BatteryConsumer.POWER_COMPONENT_BLUETOOTH, - systemComponentPowerMah); + Math.max(systemPowerMah, total.powerMah)) + .setPowerConsumedByApps(total.powerMah); } private void calculateApp(UidBatteryConsumer.Builder app, PowerAndDuration total, diff --git a/core/java/com/android/internal/os/MobileRadioPowerCalculator.java b/core/java/com/android/internal/os/MobileRadioPowerCalculator.java index 498e1f2931a0..f6ef30cba369 100644 --- a/core/java/com/android/internal/os/MobileRadioPowerCalculator.java +++ b/core/java/com/android/internal/os/MobileRadioPowerCalculator.java @@ -42,8 +42,9 @@ public class MobileRadioPowerCalculator extends PowerCalculator { private static class PowerAndDuration { public long durationMs; - public double powerMah; + public double remainingPowerMah; public long totalAppDurationMs; + public double totalAppPowerMah; public long signalDurationMs; public long noCoverageDurationMs; } @@ -103,12 +104,14 @@ public class MobileRadioPowerCalculator extends PowerCalculator { calculateRemaining(total, batteryStats, rawRealtimeUs, query.shouldForceUsePowerProfileModel()); - if (total.powerMah != 0) { + if (total.remainingPowerMah != 0 || total.totalAppPowerMah != 0) { builder.getOrCreateSystemBatteryConsumerBuilder( SystemBatteryConsumer.DRAIN_TYPE_MOBILE_RADIO) .setUsageDurationMillis(BatteryConsumer.TIME_COMPONENT_MOBILE_RADIO, total.durationMs) - .setConsumedPower(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO, total.powerMah); + .setConsumedPower(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO, + total.remainingPowerMah + total.totalAppPowerMah) + .setPowerConsumedByApps(total.totalAppPowerMah); } } @@ -120,6 +123,7 @@ public class MobileRadioPowerCalculator extends PowerCalculator { final double powerMah = calculatePower(u, powerPerPacketMah, radioActiveDurationMs, shouldForceUsePowerProfileModel); + total.totalAppPowerMah += powerMah; app.setUsageDurationMillis(BatteryConsumer.TIME_COMPONENT_MOBILE_RADIO, radioActiveDurationMs) @@ -142,14 +146,14 @@ public class MobileRadioPowerCalculator extends PowerCalculator { BatterySipper radio = new BatterySipper(BatterySipper.DrainType.CELL, null, 0); calculateRemaining(total, batteryStats, rawRealtimeUs, false); - if (total.powerMah != 0) { + if (total.remainingPowerMah != 0) { if (total.signalDurationMs != 0) { radio.noCoveragePercent = total.noCoverageDurationMs * 100.0 / total.signalDurationMs; } radio.mobileActive = total.durationMs; radio.mobileActiveCount = batteryStats.getMobileRadioActiveUnknownCount(statsType); - radio.mobileRadioPowerMah = total.powerMah; + radio.mobileRadioPowerMah = total.remainingPowerMah; radio.sumPower(); } if (radio.totalPowerMah > 0) { @@ -265,7 +269,7 @@ public class MobileRadioPowerCalculator extends PowerCalculator { } } total.durationMs = radioActiveTimeMs; - total.powerMah = powerMah; + total.remainingPowerMah = powerMah; total.signalDurationMs = signalTimeMs; } diff --git a/core/java/com/android/internal/os/ScreenPowerCalculator.java b/core/java/com/android/internal/os/ScreenPowerCalculator.java index d94bb31f58bf..ad574440f216 100644 --- a/core/java/com/android/internal/os/ScreenPowerCalculator.java +++ b/core/java/com/android/internal/os/ScreenPowerCalculator.java @@ -66,11 +66,7 @@ public class ScreenPowerCalculator extends PowerCalculator { batteryStats, rawRealtimeUs, BatteryStats.STATS_SINCE_CHARGED, query.shouldForceUsePowerProfileModel()); - builder.getOrCreateSystemBatteryConsumerBuilder(SystemBatteryConsumer.DRAIN_TYPE_SCREEN) - .setUsageDurationMillis(BatteryConsumer.TIME_COMPONENT_USAGE, - totalPowerAndDuration.durationMs) - .setConsumedPower(BatteryConsumer.POWER_COMPONENT_USAGE, - totalPowerAndDuration.powerMah); + double totalAppPower = 0; // Now deal with each app's UidBatteryConsumer. The results are stored in the // BatteryConsumer.POWER_COMPONENT_SCREEN power component, which is considered smeared, @@ -87,11 +83,20 @@ public class ScreenPowerCalculator extends PowerCalculator { appPowerAndDuration.durationMs) .setConsumedPower(BatteryConsumer.POWER_COMPONENT_SCREEN, appPowerAndDuration.powerMah); + totalAppPower += appPowerAndDuration.powerMah; } } else { smearScreenBatteryDrain(uidBatteryConsumerBuilders, totalPowerAndDuration, rawRealtimeUs); + totalAppPower = totalPowerAndDuration.powerMah; } + + builder.getOrCreateSystemBatteryConsumerBuilder(SystemBatteryConsumer.DRAIN_TYPE_SCREEN) + .setUsageDurationMillis(BatteryConsumer.TIME_COMPONENT_USAGE, + totalPowerAndDuration.durationMs) + .setConsumedPower(BatteryConsumer.POWER_COMPONENT_USAGE, + Math.max(totalPowerAndDuration.powerMah, totalAppPower)) + .setPowerConsumedByApps(totalAppPower); } /** diff --git a/core/java/com/android/internal/os/WifiPowerCalculator.java b/core/java/com/android/internal/os/WifiPowerCalculator.java index b6bfde709cb8..d95506b00677 100644 --- a/core/java/com/android/internal/os/WifiPowerCalculator.java +++ b/core/java/com/android/internal/os/WifiPowerCalculator.java @@ -121,7 +121,8 @@ public class WifiPowerCalculator extends PowerCalculator { .setUsageDurationMillis(BatteryConsumer.TIME_COMPONENT_WIFI, powerDurationAndTraffic.durationMs) .setConsumedPower(BatteryConsumer.POWER_COMPONENT_WIFI, - powerDurationAndTraffic.powerMah); + totalAppPowerMah + powerDurationAndTraffic.powerMah) + .setPowerConsumedByApps(totalAppPowerMah); } /** diff --git a/core/jni/android_media_AudioDescriptor.h b/core/jni/android_media_AudioDescriptor.h new file mode 100644 index 000000000000..680ac3f7519e --- /dev/null +++ b/core/jni/android_media_AudioDescriptor.h @@ -0,0 +1,46 @@ +/* + * Copyright (C) 2021 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. + */ + +#ifndef ANDROID_MEDIA_EXTRAAUDIODESCRIPTOR_H +#define ANDROID_MEDIA_EXTRAAUDIODESCRIPTOR_H + +#include <system/audio.h> +#include <utils/Errors.h> + +namespace android { + +// keep these values in sync with ExtraAudioDescriptor.java +#define STANDARD_NONE 0 +#define STANDARD_EDID 1 + +static inline status_t audioStandardFromNative(audio_standard_t nStandard, int* standard) { + status_t result = NO_ERROR; + switch (nStandard) { + case AUDIO_STANDARD_NONE: + *standard = STANDARD_NONE; + break; + case AUDIO_STANDARD_EDID: + *standard = STANDARD_EDID; + break; + default: + result = BAD_VALUE; + } + return result; +} + +} // namespace android + +#endif // ANDROID_MEDIA_EXTRAAUDIODESCRIPTOR_H
\ No newline at end of file diff --git a/core/jni/android_media_AudioProfile.h b/core/jni/android_media_AudioProfile.h new file mode 100644 index 000000000000..446bd6494f95 --- /dev/null +++ b/core/jni/android_media_AudioProfile.h @@ -0,0 +1,47 @@ +/* + * Copyright (C) 2021 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. + */ + +#ifndef ANDROID_MEDIA_AUDIOPROFILE_H +#define ANDROID_MEDIA_AUDIOPROFILE_H + +#include <system/audio.h> +#include <utils/Errors.h> + +namespace android { + +// keep these values in sync with AudioProfile.java +#define ENCAPSULATION_TYPE_NONE 0 +#define ENCAPSULATION_TYPE_IEC61937 1 + +static inline status_t audioEncapsulationTypeFromNative( + audio_encapsulation_type_t nEncapsulationType, int* encapsulationType) { + status_t result = NO_ERROR; + switch (nEncapsulationType) { + case AUDIO_ENCAPSULATION_TYPE_NONE: + *encapsulationType = ENCAPSULATION_TYPE_NONE; + break; + case AUDIO_ENCAPSULATION_TYPE_IEC61937: + *encapsulationType = ENCAPSULATION_TYPE_IEC61937; + break; + default: + result = BAD_VALUE; + } + return result; +} + +} // namespace android + +#endif // ANDROID_MEDIA_AUDIOPROFILE_H
\ No newline at end of file diff --git a/core/jni/android_media_AudioSystem.cpp b/core/jni/android_media_AudioSystem.cpp index f102edc79e7f..6f9a3815a302 100644 --- a/core/jni/android_media_AudioSystem.cpp +++ b/core/jni/android_media_AudioSystem.cpp @@ -34,10 +34,12 @@ #include <system/audio.h> #include <system/audio_policy.h> #include "android_media_AudioAttributes.h" +#include "android_media_AudioDescriptor.h" #include "android_media_AudioDeviceAttributes.h" #include "android_media_AudioEffectDescriptor.h" #include "android_media_AudioErrors.h" #include "android_media_AudioFormat.h" +#include "android_media_AudioProfile.h" #include "android_media_MicrophoneInfo.h" // ---------------------------------------------------------------------------- @@ -176,6 +178,9 @@ static struct { static struct { jmethodID add; } gListMethods; +static jclass gAudioDescriptorClass; +static jmethodID gAudiODescriptorCstor; + // // JNI Initialization for OpenSLES routing // @@ -1217,6 +1222,7 @@ static jint convertAudioPortFromNative(JNIEnv *env, jobject *jAudioPort, jobject jAudioPortConfig = NULL; jstring jDeviceName = NULL; jobject jAudioProfiles = NULL; + jobject jAudioDescriptors = nullptr; bool useInMask; ALOGV("convertAudioPortFromNative id %d role %d type %d name %s", @@ -1293,13 +1299,21 @@ static jint convertAudioPortFromNative(JNIEnv *env, jobject *jAudioPort, } } + int encapsulationType; + if (audioEncapsulationTypeFromNative(nAudioPort->audio_profiles[i].encapsulation_type, + &encapsulationType) != NO_ERROR) { + ALOGW("Unknown encapsualtion type for JAVA API: %u", + nAudioPort->audio_profiles[i].encapsulation_type); + continue; + } + ScopedLocalRef<jobject> jAudioProfile(env, env->NewObject(gAudioProfileClass, gAudioProfileCstor, audioFormatFromNative( nAudioPort->audio_profiles[i].format), jSamplingRates.get(), jChannelMasks.get(), - jChannelIndexMasks.get())); + jChannelIndexMasks.get(), encapsulationType)); if (jAudioProfile == nullptr) { jStatus = (jint)AUDIO_JAVA_ERROR; goto exit; @@ -1307,6 +1321,42 @@ static jint convertAudioPortFromNative(JNIEnv *env, jobject *jAudioPort, env->CallBooleanMethod(jAudioProfiles, gArrayListMethods.add, jAudioProfile.get()); } + jAudioDescriptors = env->NewObject(gArrayListClass, gArrayListMethods.cstor); + if (jAudioDescriptors == nullptr) { + jStatus = (jint)AUDIO_JAVA_ERROR; + goto exit; + } + for (size_t i = 0; i < nAudioPort->num_extra_audio_descriptors; ++i) { + const auto &extraAudioDescriptor = nAudioPort->extra_audio_descriptors[i]; + ScopedLocalRef<jobject> jAudioDescriptor(env); + if (extraAudioDescriptor.descriptor_length == 0) { + continue; + } + int standard; + if (audioStandardFromNative(extraAudioDescriptor.standard, &standard) != NO_ERROR) { + ALOGW("Unknown standard for JAVA API: %u", extraAudioDescriptor.standard); + continue; + } + int encapsulationType; + if (audioEncapsulationTypeFromNative(extraAudioDescriptor.encapsulation_type, + &encapsulationType) != NO_ERROR) { + ALOGW("Unknown encapsualtion type for JAVA API: %u", + extraAudioDescriptor.encapsulation_type); + continue; + } + ScopedLocalRef<jbyteArray> jDescriptor(env, + env->NewByteArray( + extraAudioDescriptor.descriptor_length)); + env->SetByteArrayRegion(jDescriptor.get(), 0, extraAudioDescriptor.descriptor_length, + reinterpret_cast<const jbyte *>(extraAudioDescriptor.descriptor)); + jAudioDescriptor = + ScopedLocalRef<jobject>(env, + env->NewObject(gAudioDescriptorClass, gAudiODescriptorCstor, + standard, encapsulationType, + jDescriptor.get())); + env->CallBooleanMethod(jAudioDescriptors, gArrayListMethods.add, jAudioDescriptor.get()); + } + // gains jGains = env->NewObjectArray(nAudioPort->num_gains, gAudioGainClass, NULL); @@ -1365,7 +1415,7 @@ static jint convertAudioPortFromNative(JNIEnv *env, jobject *jAudioPort, *jAudioPort = env->NewObject(gAudioDevicePortClass, gAudioDevicePortCstor, jHandle, jDeviceName, jAudioProfiles, jGains, nAudioPort->ext.device.type, jAddress, - jEncapsulationModes, jEncapsulationMetadataTypes); + jEncapsulationModes, jEncapsulationMetadataTypes, jAudioDescriptors); env->DeleteLocalRef(jAddress); } else if (nAudioPort->type == AUDIO_PORT_TYPE_MIX) { ALOGV("convertAudioPortFromNative is a mix"); @@ -1414,6 +1464,9 @@ exit: if (jAudioPortConfig != NULL) { env->DeleteLocalRef(jAudioPortConfig); } + if (jAudioDescriptors != nullptr) { + env->DeleteLocalRef(jAudioDescriptors); + } return jStatus; } @@ -2790,7 +2843,8 @@ int register_android_media_AudioSystem(JNIEnv *env) gAudioDevicePortCstor = GetMethodIDOrDie(env, audioDevicePortClass, "<init>", "(Landroid/media/AudioHandle;Ljava/lang/String;Ljava/util/List;" - "[Landroid/media/AudioGain;ILjava/lang/String;[I[I)V"); + "[Landroid/media/AudioGain;ILjava/lang/String;[I[I" + "Ljava/util/List;)V"); // When access AudioPort as AudioDevicePort gAudioPortFields.mType = GetFieldIDOrDie(env, audioDevicePortClass, "mType", "I"); @@ -2909,7 +2963,11 @@ int register_android_media_AudioSystem(JNIEnv *env) jclass audioProfileClass = FindClassOrDie(env, "android/media/AudioProfile"); gAudioProfileClass = MakeGlobalRefOrDie(env, audioProfileClass); - gAudioProfileCstor = GetMethodIDOrDie(env, audioProfileClass, "<init>", "(I[I[I[I)V"); + gAudioProfileCstor = GetMethodIDOrDie(env, audioProfileClass, "<init>", "(I[I[I[II)V"); + + jclass audioDescriptorClass = FindClassOrDie(env, "android/media/AudioDescriptor"); + gAudioDescriptorClass = MakeGlobalRefOrDie(env, audioDescriptorClass); + gAudiODescriptorCstor = GetMethodIDOrDie(env, audioDescriptorClass, "<init>", "(II[B)V"); AudioSystem::addErrorCallback(android_media_AudioSystem_error_callback); diff --git a/core/jni/android_util_Binder.cpp b/core/jni/android_util_Binder.cpp index 2e4be145d54d..29f8ccf37654 100644 --- a/core/jni/android_util_Binder.cpp +++ b/core/jni/android_util_Binder.cpp @@ -487,9 +487,15 @@ public: } void markVintf() { + AutoMutex _l(mLock); mVintf = true; } + void forceDowngradeToSystemStability() { + AutoMutex _l(mLock); + mVintf = false; + } + sp<IBinder> getExtension() { AutoMutex _l(mLock); sp<JavaBBinder> b = mBinder.promote(); @@ -1005,6 +1011,12 @@ static void android_os_Binder_markVintfStability(JNIEnv* env, jobject clazz) { jbh->markVintf(); } +static void android_os_Binder_forceDowngradeToSystemStability(JNIEnv* env, jobject clazz) { + JavaBBinderHolder* jbh = + (JavaBBinderHolder*) env->GetLongField(clazz, gBinderOffsets.mObject); + jbh->forceDowngradeToSystemStability(); +} + static void android_os_Binder_flushPendingCommands(JNIEnv* env, jobject clazz) { IPCThreadState::self()->flushCommands(); @@ -1069,6 +1081,7 @@ static const JNINativeMethod gBinderMethods[] = { { "clearCallingWorkSource", "()J", (void*)android_os_Binder_clearCallingWorkSource }, { "restoreCallingWorkSource", "(J)V", (void*)android_os_Binder_restoreCallingWorkSource }, { "markVintfStability", "()V", (void*)android_os_Binder_markVintfStability}, + { "forceDowngradeToSystemStability", "()V", (void*)android_os_Binder_forceDowngradeToSystemStability}, { "flushPendingCommands", "()V", (void*)android_os_Binder_flushPendingCommands }, { "getNativeBBinderHolder", "()J", (void*)android_os_Binder_getNativeBBinderHolder }, { "getNativeFinalizer", "()J", (void*)android_os_Binder_getNativeFinalizer }, diff --git a/core/jni/android_view_SurfaceControl.cpp b/core/jni/android_view_SurfaceControl.cpp index 419dc6e53744..5f4110570c3a 100644 --- a/core/jni/android_view_SurfaceControl.cpp +++ b/core/jni/android_view_SurfaceControl.cpp @@ -1460,6 +1460,27 @@ static void nativeReparent(JNIEnv* env, jclass clazz, jlong transactionObj, transaction->reparent(ctrl, newParent); } +static void nativeOverrideHdrTypes(JNIEnv* env, jclass clazz, jobject tokenObject, + jintArray jHdrTypes) { + sp<IBinder> token(ibinderForJavaObject(env, tokenObject)); + if (token == nullptr || jHdrTypes == nullptr) return; + + int* hdrTypes = env->GetIntArrayElements(jHdrTypes, 0); + int numHdrTypes = env->GetArrayLength(jHdrTypes); + + std::vector<ui::Hdr> hdrTypesVector; + for (int i = 0; i < numHdrTypes; i++) { + hdrTypesVector.push_back(static_cast<ui::Hdr>(hdrTypes[i])); + } + env->ReleaseIntArrayElements(jHdrTypes, hdrTypes, 0); + + status_t error = SurfaceComposerClient::overrideHdrTypes(token, hdrTypesVector); + if (error != NO_ERROR) { + jniThrowExceptionFmt(env, "java/lang/SecurityException", + "ACCESS_SURFACE_FLINGER is missing"); + } +} + static void nativeSetAutoLowLatencyMode(JNIEnv* env, jclass clazz, jobject tokenObject, jboolean on) { sp<IBinder> token(ibinderForJavaObject(env, tokenObject)); if (token == NULL) return; @@ -1821,6 +1842,8 @@ static const JNINativeMethod sSurfaceControlMethods[] = { (void*)nativeSetGameContentType }, {"nativeGetCompositionDataspaces", "()[I", (void*)nativeGetCompositionDataspaces}, + {"nativeOverrideHdrTypes", "(Landroid/os/IBinder;[I)V", + (void*)nativeOverrideHdrTypes }, {"nativeClearContentFrameStats", "(J)Z", (void*)nativeClearContentFrameStats }, {"nativeGetContentFrameStats", "(JLandroid/view/WindowContentFrameStats;)Z", diff --git a/core/res/res/values-television/themes.xml b/core/res/res/values-television/themes.xml index 176e89ebc691..b023c75ce367 100644 --- a/core/res/res/values-television/themes.xml +++ b/core/res/res/values-television/themes.xml @@ -14,14 +14,14 @@ limitations under the License. --> <resources> - <style name="Theme.Dialog.Alert" parent="Theme.Leanback.Light.Dialog.Alert" /> + <style name="Theme.Dialog.Alert" parent="Theme.Leanback.Dialog.Alert" /> <style name="Theme.Dialog.Confirmation" parent="Theme.Leanback.Dialog.Confirmation" /> <style name="Theme.Holo.Dialog.Alert" parent="Theme.Leanback.Dialog.Alert" /> - <style name="Theme.Holo.Light.Dialog.Alert" parent="Theme.Leanback.Light.Dialog.Alert" /> + <style name="Theme.Holo.Light.Dialog.Alert" parent="Theme.Leanback.Dialog.Alert" /> <style name="Theme.Material.Dialog.Alert" parent="Theme.Leanback.Dialog.Alert" /> - <style name="Theme.Material.Light.Dialog.Alert" parent="Theme.Leanback.Light.Dialog.Alert" /> + <style name="Theme.Material.Light.Dialog.Alert" parent="Theme.Leanback.Dialog.Alert" /> <style name="Theme.Material.Settings.Dialog.Alert" parent="Theme.Leanback.Settings.Dialog.Alert" /> <style name="Theme.Material.Dialog" parent="Theme.Leanback.Dialog" /> - <style name="Theme.Material.Light.Dialog" parent="Theme.Leanback.Light.Dialog" /> + <style name="Theme.Material.Light.Dialog" parent="Theme.Leanback.Dialog" /> <style name="Theme.Material.Settings.Dialog" parent="Theme.Leanback.Settings.Dialog" /> </resources> diff --git a/core/res/res/values-television/themes_device_defaults.xml b/core/res/res/values-television/themes_device_defaults.xml index d6bdeee00a9f..9d0e52213f8b 100644 --- a/core/res/res/values-television/themes_device_defaults.xml +++ b/core/res/res/values-television/themes_device_defaults.xml @@ -16,7 +16,7 @@ <resources> <style name="Theme.DeviceDefault.Dialog.Alert" parent="Theme.Leanback.Dialog.Alert" /> <style name="Theme.DeviceDefault.Dialog.AppError" parent="Theme.Leanback.Dialog.AppError" /> - <style name="Theme.DeviceDefault.Light.Dialog.Alert" parent="Theme.Leanback.Light.Dialog.Alert" /> + <style name="Theme.DeviceDefault.Light.Dialog.Alert" parent="Theme.Leanback.Dialog.Alert" /> <!-- TODO(b/116457731): remove colorBackground from colors_material.xml if not used anymore --> <style name="Theme.DeviceDefault.Autofill" parent="Theme.Material"> diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml index 4b15e01369be..74f8ff655165 100644 --- a/core/res/res/values/attrs.xml +++ b/core/res/res/values/attrs.xml @@ -6070,6 +6070,8 @@ <attr name="color" /> <!-- Alpha multiplier applied to the base color. --> <attr name="alpha" /> + <!-- Perceptual luminance applied to the base color. From 0 to 100. --> + <attr name="lStar" format="float" /> </declare-styleable> <!-- Drawable used to render according to the animation scale. Esp. when it is 0 due to battery @@ -9535,4 +9537,6 @@ <attr name="iconfactoryIconSize" format="dimension"/> <attr name="iconfactoryBadgeSize" format="dimension"/> + <!-- Perceptual luminance of a color, in accessibility friendly color space. From 0 to 100. --> + <attr name="lStar" format="float"/> </resources> diff --git a/core/res/res/values/colors_leanback.xml b/core/res/res/values/colors_leanback.xml index df0be03d6f8e..1b0fad866bd7 100644 --- a/core/res/res/values/colors_leanback.xml +++ b/core/res/res/values/colors_leanback.xml @@ -16,15 +16,11 @@ <!-- Colors specific to Leanback themes. --> <resources> - <color name="background_leanback_dark">#ff324248</color> - <color name="background_leanback_light">#ffeeeeee</color> + <color name="background_leanback_dark">#FF1F232B</color> <color name="primary_text_leanback_dark">#cceeeeee</color> <color name="secondary_text_leanback_dark">#99eeeeee</color> - <color name="primary_text_leanback_light">#cc222222</color> - <color name="secondary_text_leanback_light">#99222222</color> - <color name="primary_text_leanback_formwizard_default_dark">#ffeeeeee</color> <color name="btn_leanback_focused">#E8EAED</color> diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index b6c22bb68086..842f12d1cbaa 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -3561,10 +3561,6 @@ <!-- True if assistant app should be pinned via Pinner Service --> <bool name="config_pinnerAssistantApp">false</bool> - <!-- List of files pinned by the Pinner Service with the JIT Zygote boot image b/119800099 --> - <string-array translatable="false" name="config_jitzygoteBootImagePinnerServiceFiles"> - </string-array> - <!-- Number of days preloaded file cache should be preserved on a device before it can be deleted --> <integer name="config_keepPreloadsMinDays">7</integer> diff --git a/core/res/res/values/dimens_leanback.xml b/core/res/res/values/dimens_leanback.xml index 3ab21963ed77..ecda73519369 100644 --- a/core/res/res/values/dimens_leanback.xml +++ b/core/res/res/values/dimens_leanback.xml @@ -89,4 +89,6 @@ <dimen name="leanback_button_radius">55dp</dimen> <dimen name="leanback_button_padding_horizontal">22dp</dimen> <dimen name="leanback_button_padding_vertical">11dp</dimen> + + <dimen name="leanback_dialog_corner_radius">8dp</dimen> </resources> diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml index bc49818638bc..49039f9370dd 100644 --- a/core/res/res/values/public.xml +++ b/core/res/res/values/public.xml @@ -3095,6 +3095,7 @@ <public name="requestOptimizedExternalStorageAccess" /> <!-- @hide @SystemApi --> <public name="playHomeTransitionSound" /> + <public name="lStar" /> </public-group> <public-group type="drawable" first-id="0x010800b5"> diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml index dd647508338f..b834a069c5b7 100644 --- a/core/res/res/values/strings.xml +++ b/core/res/res/values/strings.xml @@ -5924,7 +5924,7 @@ ul.</string> <!-- Notification title to prompt the user that new magnification feature is available. [CHAR LIMIT=50] --> <string name="window_magnification_prompt_title">New magnification settings</string> <!-- Notification content to prompt the user that new magnification feature is available. [CHAR LIMIT=NONE] --> - <string name="window_magnification_prompt_content">You can now magnify part of your screen.</string> + <string name="window_magnification_prompt_content">You can now magnify part of your screen</string> <!-- Notification action to bring the user to magnification settings page. [CHAR LIMIT=50] --> <string name="turn_on_magnification_settings_action">Turn on in Settings</string> <!-- Notification action to dismiss. [CHAR LIMIT=50] --> diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index b924ecd3f301..8621147137dd 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -3148,7 +3148,6 @@ <java-symbol type="bool" name="config_pinnerCameraApp" /> <java-symbol type="bool" name="config_pinnerHomeApp" /> <java-symbol type="bool" name="config_pinnerAssistantApp" /> - <java-symbol type="array" name="config_jitzygoteBootImagePinnerServiceFiles" /> <java-symbol type="string" name="config_doubleTouchGestureEnableFile" /> diff --git a/core/res/res/values/themes_leanback.xml b/core/res/res/values/themes_leanback.xml index efe582612982..0be9e98006f4 100644 --- a/core/res/res/values/themes_leanback.xml +++ b/core/res/res/values/themes_leanback.xml @@ -15,31 +15,21 @@ --> <resources> <style name="Theme.Leanback.Dialog" parent="Theme.Material.BaseDialog"> - <item name="colorBackground">@color/background_leanback_dark</item> - <item name="textColorPrimary">@color/primary_text_leanback_dark</item> - <item name="textColorSecondary">@color/secondary_text_leanback_dark</item> - <item name="alertDialogStyle">@style/AlertDialog.Leanback</item> - <item name="timePickerStyle">@style/Widget.Leanback.TimePicker</item> - <item name="datePickerStyle">@style/Widget.Leanback.DatePicker</item> - <item name="numberPickerStyle">@style/Widget.Leanback.NumberPicker</item> - <item name="buttonBarButtonStyle">@style/Widget.Leanback.Button.ButtonBarGravityStart</item> - <item name="buttonBarStyle">@style/Widget.Leanback.ButtonBar</item> - </style> - - <style name="Theme.Leanback.Light.Dialog" parent="Theme.Material.Light.BaseDialog"> - <item name="colorBackground">@color/background_leanback_dark</item> - <item name="textColorPrimary">@color/primary_text_leanback_dark</item> - <item name="textColorSecondary">@color/secondary_text_leanback_dark</item> - <item name="alertDialogStyle">@style/AlertDialog.Leanback</item> - <item name="timePickerStyle">@style/Widget.Leanback.TimePicker</item> - <item name="datePickerStyle">@style/Widget.Leanback.DatePicker</item> - <item name="numberPickerStyle">@style/Widget.Leanback.NumberPicker</item> + <item name="colorBackground">@color/background_leanback_dark</item> + <item name="dialogCornerRadius">@dimen/leanback_dialog_corner_radius</item> + <item name="textColorPrimary">@color/primary_text_leanback_dark</item> + <item name="textColorSecondary">@color/secondary_text_leanback_dark</item> + <item name="alertDialogStyle">@style/AlertDialog.Leanback</item> + <item name="timePickerStyle">@style/Widget.Leanback.TimePicker</item> + <item name="datePickerStyle">@style/Widget.Leanback.DatePicker</item> + <item name="numberPickerStyle">@style/Widget.Leanback.NumberPicker</item> <item name="buttonBarButtonStyle">@style/Widget.Leanback.Button.ButtonBarGravityStart</item> - <item name="buttonBarStyle">@style/Widget.Leanback.ButtonBar</item> + <item name="buttonBarStyle">@style/Widget.Leanback.ButtonBar</item> </style> <style name="Theme.Leanback.Settings.Dialog" parent="Theme.Material.Settings.BaseDialog"> <item name="colorBackground">@color/background_leanback_dark</item> + <item name="dialogCornerRadius">@dimen/leanback_dialog_corner_radius</item> <item name="textColorPrimary">@color/primary_text_leanback_dark</item> <item name="textColorSecondary">@color/secondary_text_leanback_dark</item> <item name="alertDialogStyle">@style/AlertDialog.Leanback</item> @@ -51,34 +41,25 @@ </style> <style name="Theme.Leanback.Dialog.Alert" parent="Theme.Material.Dialog.BaseAlert"> - <item name="colorBackground">@color/background_leanback_dark</item> - <item name="textColorPrimary">@color/primary_text_leanback_dark</item> - <item name="textColorSecondary">@color/secondary_text_leanback_dark</item> - <item name="alertDialogStyle">@style/AlertDialog.Leanback</item> - <item name="timePickerStyle">@style/Widget.Leanback.TimePicker</item> - <item name="datePickerStyle">@style/Widget.Leanback.DatePicker</item> - <item name="numberPickerStyle">@style/Widget.Leanback.NumberPicker</item> - <item name="buttonBarButtonStyle">@style/Widget.Leanback.Button.ButtonBarGravityStart</item> - <item name="buttonBarStyle">@style/Widget.Leanback.ButtonBar</item> - </style> - - <style name="Theme.Leanback.Light.Dialog.Alert" parent="Theme.Material.Light.Dialog.BaseAlert"> - <item name="colorBackground">@color/background_leanback_light</item> - <item name="textColorPrimary">@color/primary_text_leanback_light</item> - <item name="textColorSecondary">@color/secondary_text_leanback_light</item> - <item name="alertDialogStyle">@style/AlertDialog.Leanback.Light</item> - <item name="timePickerStyle">@style/Widget.Leanback.TimePicker</item> - <item name="datePickerStyle">@style/Widget.Leanback.DatePicker</item> - <item name="numberPickerStyle">@style/Widget.Leanback.NumberPicker</item> + <item name="colorBackground">@color/background_leanback_dark</item> + <item name="dialogCornerRadius">@dimen/leanback_dialog_corner_radius</item> + <item name="textColorPrimary">@color/primary_text_leanback_dark</item> + <item name="textColorSecondary">@color/secondary_text_leanback_dark</item> + <item name="alertDialogStyle">@style/AlertDialog.Leanback</item> + <item name="timePickerStyle">@style/Widget.Leanback.TimePicker</item> + <item name="datePickerStyle">@style/Widget.Leanback.DatePicker</item> + <item name="numberPickerStyle">@style/Widget.Leanback.NumberPicker</item> <item name="buttonBarButtonStyle">@style/Widget.Leanback.Button.ButtonBarGravityStart</item> - <item name="buttonBarStyle">@style/Widget.Leanback.ButtonBar</item> + <item name="buttonBarStyle">@style/Widget.Leanback.ButtonBar</item> </style> - <style name="Theme.Leanback.Settings.Dialog.Alert" parent="Theme.Material.Settings.Dialog.BaseAlert"> - <item name="colorBackground">@color/background_leanback_light</item> - <item name="textColorPrimary">@color/primary_text_leanback_light</item> - <item name="textColorSecondary">@color/secondary_text_leanback_light</item> - <item name="alertDialogStyle">@style/AlertDialog.Leanback.Light</item> + <style name="Theme.Leanback.Settings.Dialog.Alert" + parent="Theme.Material.Settings.Dialog.BaseAlert"> + <item name="colorBackground">@color/background_leanback_dark</item> + <item name="dialogCornerRadius">@dimen/leanback_dialog_corner_radius</item> + <item name="textColorPrimary">@color/primary_text_leanback_dark</item> + <item name="textColorSecondary">@color/secondary_text_leanback_dark</item> + <item name="alertDialogStyle">@style/AlertDialog.Leanback</item> <item name="timePickerStyle">@style/Widget.Leanback.TimePicker</item> <item name="datePickerStyle">@style/Widget.Leanback.DatePicker</item> <item name="numberPickerStyle">@style/Widget.Leanback.NumberPicker</item> @@ -144,9 +125,9 @@ <!-- Icon sizes --> <item name="iconfactoryIconSize">@dimen/resolver_icon_size</item> <item name="iconfactoryBadgeSize">@dimen/resolver_badge_size</item> - </style> + </style> <!-- @hide Special theme for the default system Activity-based Alert dialogs. --> - <style name="Theme.Leanback.Dialog.Confirmation" parent="Theme.DeviceDefault.Dialog.Alert" /> + <style name="Theme.Leanback.Dialog.Confirmation" parent="Theme.DeviceDefault.Dialog.Alert"/> </resources> diff --git a/core/tests/coretests/src/android/os/VibratorInfoTest.java b/core/tests/coretests/src/android/os/VibratorInfoTest.java index 40fc00a97122..2521f7551a3c 100644 --- a/core/tests/coretests/src/android/os/VibratorInfoTest.java +++ b/core/tests/coretests/src/android/os/VibratorInfoTest.java @@ -21,6 +21,7 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertTrue; +import android.hardware.vibrator.Braking; import android.hardware.vibrator.IVibrator; import android.platform.test.annotations.Presubmit; import android.util.Range; @@ -98,6 +99,16 @@ public class VibratorInfoTest { } @Test + public void testGetDefaultBraking_returnsFirstSupportedBraking() { + assertEquals(Braking.NONE, new InfoBuilder().build().getDefaultBraking()); + assertEquals(Braking.CLAB, + new InfoBuilder() + .setSupportedBraking(Braking.NONE, Braking.CLAB) + .build() + .getDefaultBraking()); + } + + @Test public void testGetFrequencyRange_invalidFrequencyMappingReturnsEmptyRange() { // Invalid, contains NaN values or empty array. assertEquals(Range.create(0f, 0f), new InfoBuilder().build().getFrequencyRange()); @@ -318,6 +329,7 @@ public class VibratorInfoTest { private int mId = 0; private int mCapabilities = 0; private int[] mSupportedEffects = null; + private int[] mSupportedBraking = null; private int[] mSupportedPrimitives = null; private float mQFactor = Float.NaN; private VibratorInfo.FrequencyMapping mFrequencyMapping = EMPTY_FREQUENCY_MAPPING; @@ -337,6 +349,11 @@ public class VibratorInfoTest { return this; } + public InfoBuilder setSupportedBraking(int... supportedBraking) { + mSupportedBraking = supportedBraking; + return this; + } + public InfoBuilder setSupportedPrimitives(int... supportedPrimitives) { mSupportedPrimitives = supportedPrimitives; return this; @@ -353,8 +370,8 @@ public class VibratorInfoTest { } public VibratorInfo build() { - return new VibratorInfo(mId, mCapabilities, mSupportedEffects, mSupportedPrimitives, - mQFactor, mFrequencyMapping); + return new VibratorInfo(mId, mCapabilities, mSupportedEffects, mSupportedBraking, + mSupportedPrimitives, mQFactor, mFrequencyMapping); } } } diff --git a/core/tests/coretests/src/com/android/internal/os/BatteryUsageStatsTest.java b/core/tests/coretests/src/com/android/internal/os/BatteryUsageStatsTest.java index fc3be1337b45..a18a88cb2ca8 100644 --- a/core/tests/coretests/src/com/android/internal/os/BatteryUsageStatsTest.java +++ b/core/tests/coretests/src/com/android/internal/os/BatteryUsageStatsTest.java @@ -96,7 +96,8 @@ public class BatteryUsageStatsTest { .setUsageDurationMillis( BatteryConsumer.TIME_COMPONENT_CPU, 10300) .setUsageDurationForCustomComponentMillis( - BatteryConsumer.FIRST_CUSTOM_TIME_COMPONENT_ID, 10400); + BatteryConsumer.FIRST_CUSTOM_TIME_COMPONENT_ID, 10400) + .setPowerConsumedByApps(20000); return builder.build(); } @@ -148,6 +149,7 @@ public class BatteryUsageStatsTest { assertThat(systemBatteryConsumer.getUsageDurationForCustomComponentMillis( BatteryConsumer.FIRST_CUSTOM_TIME_COMPONENT_ID)).isEqualTo(10400); assertThat(systemBatteryConsumer.getConsumedPower()).isEqualTo(20300); + assertThat(systemBatteryConsumer.getPowerConsumedByApps()).isEqualTo(20000); } else { fail("Unexpected drain type " + systemBatteryConsumer.getDrainType()); } diff --git a/core/tests/coretests/src/com/android/internal/os/BluetoothPowerCalculatorTest.java b/core/tests/coretests/src/com/android/internal/os/BluetoothPowerCalculatorTest.java index 71d7668bbcfa..2769b163ecd2 100644 --- a/core/tests/coretests/src/com/android/internal/os/BluetoothPowerCalculatorTest.java +++ b/core/tests/coretests/src/com/android/internal/os/BluetoothPowerCalculatorTest.java @@ -69,7 +69,7 @@ public class BluetoothPowerCalculatorTest { 0.24722, 15000); assertBluetoothPowerAndDuration( mStatsRule.getSystemBatteryConsumer(SystemBatteryConsumer.DRAIN_TYPE_BLUETOOTH), - 0.15833, 9000); + 0.51944, 9000, 0.51944, 0.36111); } @Test @@ -98,7 +98,7 @@ public class BluetoothPowerCalculatorTest { 0.2, 15000); assertBluetoothPowerAndDuration( mStatsRule.getSystemBatteryConsumer(SystemBatteryConsumer.DRAIN_TYPE_BLUETOOTH), - 0.15, 9000); + 0.45, 9000, 0.45, 0.3); } private void setDurationsAndPower( @@ -123,4 +123,15 @@ public class BluetoothPowerCalculatorTest { assertThat(usageDurationMillis).isEqualTo(durationMs); } + + private void assertBluetoothPowerAndDuration(@Nullable SystemBatteryConsumer batteryConsumer, + double powerMah, int durationMs, double consumedPower, double attributedPower) { + assertBluetoothPowerAndDuration(batteryConsumer, powerMah, durationMs); + + assertThat(batteryConsumer.getConsumedPower()) + .isWithin(PRECISION).of(consumedPower); + + assertThat(batteryConsumer.getPowerConsumedByApps()) + .isWithin(PRECISION).of(attributedPower); + } } diff --git a/core/tests/coretests/src/com/android/internal/os/MobileRadioPowerCalculatorTest.java b/core/tests/coretests/src/com/android/internal/os/MobileRadioPowerCalculatorTest.java index ae59a546642d..813bc9f43662 100644 --- a/core/tests/coretests/src/com/android/internal/os/MobileRadioPowerCalculatorTest.java +++ b/core/tests/coretests/src/com/android/internal/os/MobileRadioPowerCalculatorTest.java @@ -105,7 +105,11 @@ public class MobileRadioPowerCalculatorTest { SystemBatteryConsumer consumer = mStatsRule.getSystemBatteryConsumer(SystemBatteryConsumer.DRAIN_TYPE_MOBILE_RADIO); assertThat(consumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO)) - .isWithin(PRECISION).of(1.44440); + .isWithin(PRECISION).of(2.2444); + assertThat(consumer.getConsumedPower()) + .isWithin(PRECISION).of(2.2444); + assertThat(consumer.getPowerConsumedByApps()) + .isWithin(PRECISION).of(0.8); UidBatteryConsumer uidConsumer = mStatsRule.getUidBatteryConsumer(APP_UID); assertThat(uidConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO)) @@ -156,9 +160,11 @@ public class MobileRadioPowerCalculatorTest { SystemBatteryConsumer consumer = mStatsRule.getSystemBatteryConsumer(SystemBatteryConsumer.DRAIN_TYPE_MOBILE_RADIO); - // 100000000 uAs * (1 mA / 1000 uA) * (1 h / 3600 s) = 2.77777 mAh + // 100000000 uAs * (1 mA / 1000 uA) * (1 h / 3600 s) + 1.53934 (apps)= 4.31711 mAh assertThat(consumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO)) - .isWithin(PRECISION).of(2.77777); + .isWithin(PRECISION).of(4.31711); + assertThat(consumer.getPowerConsumedByApps()) + .isWithin(PRECISION).of(1.53934); UidBatteryConsumer uidConsumer = mStatsRule.getUidBatteryConsumer(APP_UID); assertThat(uidConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO)) diff --git a/core/tests/coretests/src/com/android/internal/os/ScreenPowerCalculatorTest.java b/core/tests/coretests/src/com/android/internal/os/ScreenPowerCalculatorTest.java index f3cf81ca3e86..d296afa00dbc 100644 --- a/core/tests/coretests/src/com/android/internal/os/ScreenPowerCalculatorTest.java +++ b/core/tests/coretests/src/com/android/internal/os/ScreenPowerCalculatorTest.java @@ -52,17 +52,26 @@ public class ScreenPowerCalculatorTest { BatteryStatsImpl batteryStats = mStatsRule.getBatteryStats(); batteryStats.noteScreenStateLocked(Display.STATE_ON, 0, 0, 0); - batteryStats.updateDisplayMeasuredEnergyStatsLocked(0, Display.STATE_ON, 2 * MINUTE_IN_MS); + batteryStats.updateDisplayMeasuredEnergyStatsLocked(0, Display.STATE_ON, 0); + setProcState(APP_UID1, ActivityManager.PROCESS_STATE_TOP, true, + 0, 0); - setFgState(APP_UID1, true, 2 * MINUTE_IN_MS, 2 * MINUTE_IN_MS); - setFgState(APP_UID1, false, 20 * MINUTE_IN_MS, 20 * MINUTE_IN_MS); - setFgState(APP_UID2, true, 30 * MINUTE_IN_MS, 30 * MINUTE_IN_MS); + batteryStats.updateDisplayMeasuredEnergyStatsLocked(200_000_000, Display.STATE_ON, + 15 * MINUTE_IN_MS); + + setProcState(APP_UID1, ActivityManager.PROCESS_STATE_CACHED_EMPTY, false, + 20 * MINUTE_IN_MS, 20 * MINUTE_IN_MS); + + setProcState(APP_UID2, ActivityManager.PROCESS_STATE_TOP, true, + 20 * MINUTE_IN_MS, 20 * MINUTE_IN_MS); batteryStats.updateDisplayMeasuredEnergyStatsLocked(300_000_000, Display.STATE_ON, 60 * MINUTE_IN_MS); batteryStats.noteScreenStateLocked(Display.STATE_OFF, 80 * MINUTE_IN_MS, 80 * MINUTE_IN_MS, 80 * MINUTE_IN_MS); + setProcState(APP_UID2, ActivityManager.PROCESS_STATE_TOP_SLEEPING, false, + 80 * MINUTE_IN_MS, 80 * MINUTE_IN_MS); batteryStats.updateDisplayMeasuredEnergyStatsLocked(100_000_000, Display.STATE_DOZE, 120 * MINUTE_IN_MS); @@ -79,28 +88,33 @@ public class ScreenPowerCalculatorTest { assertThat(consumer.getUsageDurationMillis(BatteryConsumer.TIME_COMPONENT_USAGE)) .isEqualTo(80 * MINUTE_IN_MS); - // 400000000 uAs * (1 mA / 1000 uA) * (1 h / 3600 s) = 111.11111 mAh + // 600000000 uAs * (1 mA / 1000 uA) * (1 h / 3600 s) = 166.66666 mAh assertThat(consumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_USAGE)) - .isWithin(PRECISION).of(111.11111); + .isWithin(PRECISION).of(166.66666); + assertThat(consumer.getConsumedPower()) + .isWithin(PRECISION).of(166.66666); + assertThat(consumer.getPowerConsumedByApps()) + .isWithin(PRECISION).of(166.66666); UidBatteryConsumer uid1 = mStatsRule.getUidBatteryConsumer(APP_UID1); assertThat(uid1.getUsageDurationMillis(BatteryConsumer.TIME_COMPONENT_SCREEN)) - .isEqualTo(18 * MINUTE_IN_MS); + .isEqualTo(20 * MINUTE_IN_MS); - // Uid1 ran for 18 minutes out of the total 48 min of foreground time during the first - // Display update. Uid1 charge = 18 / 48 * 300000000 uAs = 31.25 mAh + // Uid1 took all of the foreground time during the first Display update. + // It also ran for 5 out of 45 min during the second Display update: + // Uid1 charge = 200000000 + 5 / 45 * 300000000 mAs = 64.81 mAh assertThat(uid1.getConsumedPower(BatteryConsumer.POWER_COMPONENT_SCREEN)) - .isWithin(PRECISION).of(31.25); + .isWithin(PRECISION).of(64.81481); UidBatteryConsumer uid2 = mStatsRule.getUidBatteryConsumer(APP_UID2); assertThat(uid2.getUsageDurationMillis(BatteryConsumer.TIME_COMPONENT_SCREEN)) - .isEqualTo(90 * MINUTE_IN_MS); + .isEqualTo(60 * MINUTE_IN_MS); - // Uid2 ran for 30 minutes out of the total 48 min of foreground time during the first - // Display update and then took all of the time during the second Display update. - // Uid1 charge = 30 / 48 * 300000000 + 100000000 mAs = 79.86111 mAh + // Uid2 ran for 40 minutes out of the total 45 min of foreground time during the second + // Display update and then took all of the time during the third Display update. + // Uid2 charge = 40 / 45 * 300000000 + 100000000 mAs = 101.85 mAh assertThat(uid2.getConsumedPower(BatteryConsumer.POWER_COMPONENT_SCREEN)) - .isWithin(PRECISION).of(79.86111); + .isWithin(PRECISION).of(101.85185); } @Test @@ -108,18 +122,22 @@ public class ScreenPowerCalculatorTest { BatteryStatsImpl batteryStats = mStatsRule.getBatteryStats(); batteryStats.noteScreenStateLocked(Display.STATE_ON, 0, 0, 0); - - setFgState(APP_UID1, true, 2 * MINUTE_IN_MS, 2 * MINUTE_IN_MS); + batteryStats.noteScreenBrightnessLocked(255, 0, 0); + setProcState(APP_UID1, ActivityManager.PROCESS_STATE_TOP, true, + 0, 0); batteryStats.noteScreenBrightnessLocked(100, 5 * MINUTE_IN_MS, 5 * MINUTE_IN_MS); batteryStats.noteScreenBrightnessLocked(200, 10 * MINUTE_IN_MS, 10 * MINUTE_IN_MS); - setFgState(APP_UID1, false, 20 * MINUTE_IN_MS, 20 * MINUTE_IN_MS); - - setFgState(APP_UID2, true, 30 * MINUTE_IN_MS, 30 * MINUTE_IN_MS); + setProcState(APP_UID1, ActivityManager.PROCESS_STATE_CACHED_EMPTY, false, + 20 * MINUTE_IN_MS, 20 * MINUTE_IN_MS); + setProcState(APP_UID2, ActivityManager.PROCESS_STATE_TOP, true, + 20 * MINUTE_IN_MS, 20 * MINUTE_IN_MS); batteryStats.noteScreenStateLocked(Display.STATE_OFF, 80 * MINUTE_IN_MS, 80 * MINUTE_IN_MS, 80 * MINUTE_IN_MS); + setProcState(APP_UID2, ActivityManager.PROCESS_STATE_TOP_SLEEPING, false, + 80 * MINUTE_IN_MS, 80 * MINUTE_IN_MS); mStatsRule.setTime(120 * MINUTE_IN_US, 120 * MINUTE_IN_US); @@ -134,31 +152,39 @@ public class ScreenPowerCalculatorTest { assertThat(consumer.getUsageDurationMillis(BatteryConsumer.TIME_COMPONENT_USAGE)) .isEqualTo(80 * MINUTE_IN_MS); assertThat(consumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_USAGE)) - .isWithin(PRECISION).of(88.4); + .isWithin(PRECISION).of(92.0); + assertThat(consumer.getConsumedPower()) + .isWithin(PRECISION).of(92.0); + assertThat(consumer.getPowerConsumedByApps()) + .isWithin(PRECISION).of(92.0); UidBatteryConsumer uid1 = mStatsRule.getUidBatteryConsumer(APP_UID1); assertThat(uid1.getUsageDurationMillis(BatteryConsumer.TIME_COMPONENT_SCREEN)) - .isEqualTo(18 * MINUTE_IN_MS); + .isEqualTo(20 * MINUTE_IN_MS); + + // Uid1 took 20 out of the total of 80 min of foreground activity + // Uid1 charge = 20 / 80 * 92.0 = 23.0 mAh assertThat(uid1.getConsumedPower(BatteryConsumer.POWER_COMPONENT_SCREEN)) - .isWithin(PRECISION).of(14.73333); + .isWithin(PRECISION).of(23.0); UidBatteryConsumer uid2 = mStatsRule.getUidBatteryConsumer(APP_UID2); assertThat(uid2.getUsageDurationMillis(BatteryConsumer.TIME_COMPONENT_SCREEN)) - .isEqualTo(90 * MINUTE_IN_MS); + .isEqualTo(60 * MINUTE_IN_MS); + + // Uid2 took 60 out of the total of 80 min of foreground activity + // Uid2 charge = 60 / 80 * 92.0 = 69.0 mAh assertThat(uid2.getConsumedPower(BatteryConsumer.POWER_COMPONENT_SCREEN)) - .isWithin(PRECISION).of(73.66666); + .isWithin(PRECISION).of(69.0); } - private void setFgState(int uid, boolean fgOn, long realtimeMs, long uptimeMs) { + private void setProcState(int uid, int procState, boolean resumed, long realtimeMs, + long uptimeMs) { BatteryStatsImpl batteryStats = mStatsRule.getBatteryStats(); - if (fgOn) { + batteryStats.noteUidProcessStateLocked(uid, procState, realtimeMs, uptimeMs); + if (resumed) { batteryStats.noteActivityResumedLocked(uid, realtimeMs, uptimeMs); - batteryStats.noteUidProcessStateLocked(uid, ActivityManager.PROCESS_STATE_TOP, - realtimeMs, uptimeMs); } else { batteryStats.noteActivityPausedLocked(uid, realtimeMs, uptimeMs); - batteryStats.noteUidProcessStateLocked(uid, ActivityManager.PROCESS_STATE_CACHED_EMPTY, - realtimeMs, uptimeMs); } } } diff --git a/core/tests/coretests/src/com/android/internal/os/WifiPowerCalculatorTest.java b/core/tests/coretests/src/com/android/internal/os/WifiPowerCalculatorTest.java index 2e23dc8dbba8..5df91dd00f59 100644 --- a/core/tests/coretests/src/com/android/internal/os/WifiPowerCalculatorTest.java +++ b/core/tests/coretests/src/com/android/internal/os/WifiPowerCalculatorTest.java @@ -99,7 +99,9 @@ public class WifiPowerCalculatorTest { assertThat(systemConsumer.getUsageDurationMillis(BatteryConsumer.TIME_COMPONENT_WIFI)) .isEqualTo(5577); assertThat(systemConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_WIFI)) - .isWithin(PRECISION).of(0.645200); + .isWithin(PRECISION).of(1.11153); + assertThat(systemConsumer.getPowerConsumedByApps()) + .isWithin(PRECISION).of(0.466333); } @Test @@ -125,7 +127,9 @@ public class WifiPowerCalculatorTest { .isEqualTo(5577); /* Same ratio as in testPowerControllerBasedModel_nonMeasured but scaled by 1_000_000uC. */ assertThat(systemConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_WIFI)) - .isWithin(PRECISION).of(0.645200 / (0.2214666 + 0.645200) * 1_000_000 / 3600000); + .isWithin(PRECISION).of(1.11153 / (0.2214666 + 0.645200) * 1_000_000 / 3600000); + assertThat(systemConsumer.getPowerConsumedByApps()) + .isWithin(PRECISION).of(0.14946); } /** Sets up batterystats object with prepopulated network & timer data for Timer-model tests. */ @@ -163,7 +167,9 @@ public class WifiPowerCalculatorTest { assertThat(systemConsumer.getUsageDurationMillis(BatteryConsumer.TIME_COMPONENT_WIFI)) .isEqualTo(2222); assertThat(systemConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_WIFI)) - .isWithin(PRECISION).of(0.8759216); + .isWithin(PRECISION).of(2.575000); + assertThat(systemConsumer.getPowerConsumedByApps()) + .isWithin(PRECISION).of(1.69907); } @Test @@ -190,6 +196,8 @@ public class WifiPowerCalculatorTest { .isEqualTo(2222); /* Same ratio as in testTimerBasedModel_nonMeasured but scaled by 1_000_000uC. */ assertThat(systemConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_WIFI)) - .isWithin(PRECISION).of(0.8759216 / (0.8231573 + 0.8759216) * 1_000_000 / 3600000); + .isWithin(PRECISION).of(2.575000 / (0.8231573 + 0.8759216) * 1_000_000 / 3600000); + assertThat(systemConsumer.getPowerConsumedByApps()) + .isWithin(PRECISION).of(0.277777); } } diff --git a/libs/WindowManager/Shell/res/values-iw/strings.xml b/libs/WindowManager/Shell/res/values-iw/strings.xml index b75ee4507e94..cd63de836d7a 100644 --- a/libs/WindowManager/Shell/res/values-iw/strings.xml +++ b/libs/WindowManager/Shell/res/values-iw/strings.xml @@ -22,9 +22,9 @@ <string name="pip_phone_settings" msgid="5468987116750491918">"הגדרות"</string> <string name="pip_menu_title" msgid="5393619322111827096">"תפריט"</string> <string name="pip_notification_title" msgid="1347104727641353453">"<xliff:g id="NAME">%s</xliff:g> במצב תמונה בתוך תמונה"</string> - <string name="pip_notification_message" msgid="8854051911700302620">"אם אינך רוצה שהתכונה הזו תשמש את <xliff:g id="NAME">%s</xliff:g>, יש להקיש כדי לפתוח את ההגדרות ולכבות את התכונה."</string> + <string name="pip_notification_message" msgid="8854051911700302620">"אם אינך רוצה שהתכונה הזו תשמש את <xliff:g id="NAME">%s</xliff:g>, יש להקיש כדי לפתוח את ההגדרות ולהשבית את התכונה."</string> <string name="pip_play" msgid="3496151081459417097">"הפעלה"</string> - <string name="pip_pause" msgid="690688849510295232">"השהה"</string> + <string name="pip_pause" msgid="690688849510295232">"השהיה"</string> <string name="pip_skip_to_next" msgid="8403429188794867653">"אפשר לדלג אל הבא"</string> <string name="pip_skip_to_prev" msgid="7172158111196394092">"אפשר לדלג אל הקודם"</string> <string name="accessibility_action_pip_resize" msgid="4623966104749543182">"שינוי גודל"</string> diff --git a/libs/WindowManager/Shell/res/values-nl/strings.xml b/libs/WindowManager/Shell/res/values-nl/strings.xml index 1527e8983079..fcd706f7e732 100644 --- a/libs/WindowManager/Shell/res/values-nl/strings.xml +++ b/libs/WindowManager/Shell/res/values-nl/strings.xml @@ -58,14 +58,14 @@ <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Naar rechtsonder verplaatsen"</string> <string name="bubbles_app_settings" msgid="3617224938701566416">"Instellingen voor <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string> <string name="bubble_dismiss_text" msgid="8816558050659478158">"Bubbel sluiten"</string> - <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Gesprekken niet in bubbels weergeven"</string> + <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Gesprekken niet in bubbels tonen"</string> <string name="bubbles_user_education_title" msgid="2112319053732691899">"Chatten met bubbels"</string> - <string name="bubbles_user_education_description" msgid="4215862563054175407">"Nieuwe gesprekken worden weergegeven als zwevende iconen of \'bubbels\'. Tik om een bubbel te openen. Sleep om de bubbel te verplaatsen."</string> + <string name="bubbles_user_education_description" msgid="4215862563054175407">"Nieuwe gesprekken worden als zwevende iconen of bubbels getoond. Tik om een bubbel te openen. Sleep om een bubbel te verplaatsen."</string> <string name="bubbles_user_education_manage_title" msgid="7042699946735628035">"Beheer bubbels wanneer je wilt"</string> <string name="bubbles_user_education_manage" msgid="3460756219946517198">"Tik op Beheren om bubbels van deze app uit te schakelen"</string> <string name="bubbles_user_education_got_it" msgid="3382046149225428296">"OK"</string> <string name="bubble_overflow_empty_title" msgid="2397251267073294968">"Geen recente bubbels"</string> - <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Recente bubbels en gesloten bubbels worden hier weergegeven"</string> + <string name="bubble_overflow_empty_subtitle" msgid="2627417924958633713">"Recente bubbels en gesloten bubbels zie je hier"</string> <string name="notification_bubble_title" msgid="6082910224488253378">"Bubbel"</string> <string name="manage_bubbles_text" msgid="7730624269650594419">"Beheren"</string> <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Bubbel gesloten."</string> diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedBackgroundPanelOrganizer.java b/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedBackgroundPanelOrganizer.java index d90cc4769286..c7dbe880859d 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedBackgroundPanelOrganizer.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedBackgroundPanelOrganizer.java @@ -23,7 +23,6 @@ import android.graphics.Rect; import android.util.Log; import android.view.SurfaceControl; import android.view.SurfaceSession; -import android.view.WindowManager; import android.window.DisplayAreaAppearedInfo; import android.window.DisplayAreaInfo; import android.window.DisplayAreaOrganizer; @@ -34,8 +33,9 @@ import androidx.annotation.VisibleForTesting; import com.android.internal.annotations.GuardedBy; import com.android.wm.shell.R; -import com.android.wm.shell.common.DisplayController; +import com.android.wm.shell.common.DisplayLayout; +import java.io.PrintWriter; import java.util.List; import java.util.concurrent.Executor; @@ -52,12 +52,15 @@ public class OneHandedBackgroundPanelOrganizer extends DisplayAreaOrganizer private final SurfaceSession mSurfaceSession = new SurfaceSession(); private final float[] mColor; private final float mAlpha; - private final Rect mRect; private final Executor mMainExecutor; - private final Rect mDisplaySize; private final OneHandedSurfaceTransactionHelper.SurfaceControlTransactionFactory mSurfaceControlTransactionFactory; + /** + * The background to distinguish the boundary of translated windows and empty region when + * one handed mode triggered. + */ + private Rect mBkgBounds; @VisibleForTesting @GuardedBy("mLock") boolean mIsShowing; @@ -82,15 +85,19 @@ public class OneHandedBackgroundPanelOrganizer extends DisplayAreaOrganizer mMainExecutor.execute(() -> removeBackgroundPanelLayer()); } - public OneHandedBackgroundPanelOrganizer(Context context, WindowManager windowManager, - DisplayController displayController, Executor executor) { + public OneHandedBackgroundPanelOrganizer(Context context, DisplayLayout displayLayout, + Executor executor) { super(executor); - mDisplaySize = windowManager.getCurrentWindowMetrics().getBounds(); final Resources res = context.getResources(); final float defaultRGB = res.getFloat(R.dimen.config_one_handed_background_rgb); mColor = new float[]{defaultRGB, defaultRGB, defaultRGB}; mAlpha = res.getFloat(R.dimen.config_one_handed_background_alpha); - mRect = new Rect(0, 0, mDisplaySize.width(), mDisplaySize.height()); + // Ensure the mBkgBounds is portrait, due to OHM only support on portrait + if (displayLayout.height() > displayLayout.width()) { + mBkgBounds = new Rect(0, 0, displayLayout.width(), displayLayout.height()); + } else { + mBkgBounds = new Rect(0, 0, displayLayout.height(), displayLayout.width()); + } mMainExecutor = executor; mSurfaceControlTransactionFactory = SurfaceControl.Transaction::new; } @@ -144,6 +151,7 @@ public class OneHandedBackgroundPanelOrganizer extends DisplayAreaOrganizer if (mBackgroundSurface == null) { mBackgroundSurface = new SurfaceControl.Builder(mSurfaceSession) .setParent(mParentLeash) + .setBufferSize(mBkgBounds.width(), mBkgBounds.height()) .setColorLayer() .setFormat(PixelFormat.RGBA_8888) .setOpaque(false) @@ -188,11 +196,19 @@ public class OneHandedBackgroundPanelOrganizer extends DisplayAreaOrganizer SurfaceControl.Transaction transaction = mSurfaceControlTransactionFactory.getTransaction(); - transaction.remove(mBackgroundSurface); - transaction.apply(); + transaction.remove(mBackgroundSurface).apply(); transaction.close(); mBackgroundSurface = null; mIsShowing = false; } } + + void dump(@NonNull PrintWriter pw) { + final String innerPrefix = " "; + pw.println(TAG + "states: "); + pw.print(innerPrefix + "mIsShowing="); + pw.println(mIsShowing); + pw.print(innerPrefix + "mBkgBounds="); + pw.println(mBkgBounds); + } } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedController.java index 25968ebd817d..7965a80deead 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedController.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedController.java @@ -17,10 +17,10 @@ package com.android.wm.shell.onehanded; import static android.os.UserHandle.USER_CURRENT; +import static android.view.Display.DEFAULT_DISPLAY; import static com.android.wm.shell.common.ExecutorUtils.executeRemoteCallWithTaskPermission; -import android.Manifest; import android.annotation.BinderThread; import android.content.ComponentName; import android.content.Context; @@ -28,13 +28,13 @@ import android.content.om.IOverlayManager; import android.content.om.OverlayInfo; import android.content.res.Configuration; import android.database.ContentObserver; -import android.graphics.Rect; import android.os.Handler; import android.os.RemoteException; import android.os.ServiceManager; import android.os.SystemProperties; import android.provider.Settings; import android.util.Slog; +import android.view.Surface; import android.view.ViewConfiguration; import android.view.WindowManager; import android.view.accessibility.AccessibilityManager; @@ -47,7 +47,7 @@ import com.android.internal.logging.UiEventLogger; import com.android.wm.shell.R; import com.android.wm.shell.common.DisplayChangeController; import com.android.wm.shell.common.DisplayController; -import com.android.wm.shell.common.ExecutorUtils; +import com.android.wm.shell.common.DisplayLayout; import com.android.wm.shell.common.RemoteCallable; import com.android.wm.shell.common.ShellExecutor; import com.android.wm.shell.common.TaskStackListenerCallback; @@ -76,9 +76,10 @@ public class OneHandedController implements RemoteCallable<OneHandedController> private boolean mLockedDisabled; private float mOffSetFraction; - private final Context mContext; + private Context mContext; + + private final AccessibilityManager mAccessibilityManager; private final DisplayController mDisplayController; - private final OneHandedGestureHandler mGestureHandler; private final OneHandedSettingsUtil mOneHandedSettingsUtil; private final OneHandedTimeoutHandler mTimeoutHandler; private final OneHandedTouchHandler mTouchHandler; @@ -89,10 +90,9 @@ public class OneHandedController implements RemoteCallable<OneHandedController> private final ShellExecutor mMainExecutor; private final Handler mMainHandler; private final OneHandedImpl mImpl = new OneHandedImpl(); - private final WindowManager mWindowManager; private OneHandedDisplayAreaOrganizer mDisplayAreaOrganizer; - private final AccessibilityManager mAccessibilityManager; + private OneHandedGestureHandler mGestureHandler; private OneHandedBackgroundPanelOrganizer mBackgroundPanelOrganizer; /** @@ -100,8 +100,29 @@ public class OneHandedController implements RemoteCallable<OneHandedController> */ private final DisplayChangeController.OnDisplayChangingListener mRotationController = (display, fromRotation, toRotation, wct) -> { - if (mDisplayAreaOrganizer != null) { - mDisplayAreaOrganizer.onRotateDisplay(fromRotation, toRotation, wct); + if (!isInitialized()) { + return; + } + mDisplayAreaOrganizer.onRotateDisplay(mContext, toRotation, wct); + mGestureHandler.onRotateDisplay(mDisplayAreaOrganizer.getDisplayLayout()); + }; + + private final DisplayController.OnDisplaysChangedListener mDisplaysChangedListener = + new DisplayController.OnDisplaysChangedListener() { + @Override + public void onDisplayConfigurationChanged(int displayId, Configuration newConfig) { + if (displayId != DEFAULT_DISPLAY || !isInitialized()) { + return; + } + updateDisplayLayout(displayId); + } + + @Override + public void onDisplayAdded(int displayId) { + if (displayId != DEFAULT_DISPLAY || !isInitialized()) { + return; + } + updateDisplayLayout(displayId); } }; @@ -115,8 +136,7 @@ public class OneHandedController implements RemoteCallable<OneHandedController> new AccessibilityManager.AccessibilityStateChangeListener() { @Override public void onAccessibilityStateChanged(boolean enabled) { - if (mOneHandedSettingsUtil == null) { - Slog.w(TAG, "mOneHandedSettingsUtil may not instantiate yet"); + if (!isInitialized()) { return; } if (enabled) { @@ -147,6 +167,14 @@ public class OneHandedController implements RemoteCallable<OneHandedController> } }; + private boolean isInitialized() { + if (mDisplayAreaOrganizer == null || mDisplayController == null + || mGestureHandler == null || mOneHandedSettingsUtil == null) { + Slog.w(TAG, "Components may not initialized yet!"); + return false; + } + return true; + } /** * Creates {@link OneHandedController}, returns {@code null} if the feature is not supported. @@ -154,8 +182,8 @@ public class OneHandedController implements RemoteCallable<OneHandedController> @Nullable public static OneHandedController create( Context context, WindowManager windowManager, DisplayController displayController, - TaskStackListenerImpl taskStackListener, UiEventLogger uiEventLogger, - ShellExecutor mainExecutor, Handler mainHandler) { + DisplayLayout displayLayout, TaskStackListenerImpl taskStackListener, + UiEventLogger uiEventLogger, ShellExecutor mainExecutor, Handler mainHandler) { if (!SystemProperties.getBoolean(SUPPORT_ONE_HANDED_MODE, false)) { Slog.w(TAG, "Device doesn't support OneHanded feature"); return null; @@ -169,19 +197,17 @@ public class OneHandedController implements RemoteCallable<OneHandedController> OneHandedTouchHandler touchHandler = new OneHandedTouchHandler(timeoutHandler, mainExecutor); OneHandedGestureHandler gestureHandler = new OneHandedGestureHandler( - context, windowManager, displayController, ViewConfiguration.get(context), - mainExecutor); + context, displayLayout, ViewConfiguration.get(context), mainExecutor); OneHandedBackgroundPanelOrganizer oneHandedBackgroundPanelOrganizer = - new OneHandedBackgroundPanelOrganizer(context, windowManager, displayController, - mainExecutor); + new OneHandedBackgroundPanelOrganizer(context, displayLayout, mainExecutor); OneHandedDisplayAreaOrganizer organizer = new OneHandedDisplayAreaOrganizer( - context, windowManager, animationController, tutorialHandler, + context, displayLayout, animationController, tutorialHandler, oneHandedBackgroundPanelOrganizer, mainExecutor); OneHandedSettingsUtil settingsUtil = new OneHandedSettingsUtil(); OneHandedUiEventLogger oneHandedUiEventsLogger = new OneHandedUiEventLogger(uiEventLogger); IOverlayManager overlayManager = IOverlayManager.Stub.asInterface( ServiceManager.getService(Context.OVERLAY_SERVICE)); - return new OneHandedController(context, windowManager, displayController, + return new OneHandedController(context, displayController, oneHandedBackgroundPanelOrganizer, organizer, touchHandler, tutorialHandler, gestureHandler, settingsUtil, timeoutHandler, oneHandedUiEventsLogger, overlayManager, taskStackListener, mainExecutor, mainHandler); @@ -189,7 +215,6 @@ public class OneHandedController implements RemoteCallable<OneHandedController> @VisibleForTesting OneHandedController(Context context, - WindowManager windowManager, DisplayController displayController, OneHandedBackgroundPanelOrganizer backgroundPanelOrganizer, OneHandedDisplayAreaOrganizer displayAreaOrganizer, @@ -205,7 +230,6 @@ public class OneHandedController implements RemoteCallable<OneHandedController> Handler mainHandler) { mContext = context; mOneHandedSettingsUtil = settingsUtil; - mWindowManager = windowManager; mBackgroundPanelOrganizer = backgroundPanelOrganizer; mDisplayAreaOrganizer = displayAreaOrganizer; mDisplayController = displayController; @@ -218,6 +242,7 @@ public class OneHandedController implements RemoteCallable<OneHandedController> mOneHandedUiEventLogger = uiEventsLogger; mTaskStackListener = taskStackListener; + mDisplayController.addDisplayWindowListener(mDisplaysChangedListener); final float offsetPercentageConfig = context.getResources().getFraction( R.fraction.config_one_handed_offset, 1, 1); final int sysPropPercentageConfig = SystemProperties.getInt( @@ -297,8 +322,14 @@ public class OneHandedController implements RemoteCallable<OneHandedController> Slog.d(TAG, "Temporary lock disabled"); return; } + final int currentRotation = mDisplayAreaOrganizer.getDisplayLayout().rotation(); + if (currentRotation != Surface.ROTATION_0 && currentRotation != Surface.ROTATION_180) { + Slog.w(TAG, "One handed mode only support portrait mode"); + return; + } if (!mDisplayAreaOrganizer.isInOneHanded()) { - final int yOffSet = Math.round(getDisplaySize().height() * mOffSetFraction); + final int yOffSet = Math.round( + mDisplayAreaOrganizer.getDisplayLayout().height() * mOffSetFraction); mDisplayAreaOrganizer.scheduleOffset(0, yOffSet); mTimeoutHandler.resetTimer(); @@ -371,6 +402,12 @@ public class OneHandedController implements RemoteCallable<OneHandedController> .getSettingsSwipeToNotificationEnabled(mContext.getContentResolver())); } + private void updateDisplayLayout(int displayId) { + mDisplayAreaOrganizer.setDisplayLayout( + mDisplayController.getDisplayLayout(displayId)); + mGestureHandler.onDisplayChanged(mDisplayAreaOrganizer.getDisplayLayout()); + } + private ContentObserver getObserver(Runnable onChangeRunnable) { return new ContentObserver(mMainHandler) { @Override @@ -454,24 +491,6 @@ public class OneHandedController implements RemoteCallable<OneHandedController> OneHandedUiEventLogger.EVENT_ONE_HANDED_TRIGGER_TIMEOUT_OUT)); } - /** - * Query the current display real size from {@link WindowManager} - * - * @return {@link WindowManager#getCurrentWindowMetrics()#getBounds()} - */ - private Rect getDisplaySize() { - if (mWindowManager == null) { - Slog.e(TAG, "WindowManager instance is null! Can not get display size!"); - return new Rect(); - } - final Rect displaySize = mWindowManager.getCurrentWindowMetrics().getBounds(); - if (displaySize.width() == 0 || displaySize.height() == 0) { - Slog.e(TAG, "Display size error! width = " + displaySize.width() - + ", height = " + displaySize.height()); - } - return displaySize; - } - @VisibleForTesting boolean isLockedDisabled() { return mLockedDisabled; @@ -483,7 +502,7 @@ public class OneHandedController implements RemoteCallable<OneHandedController> } mTouchHandler.onOneHandedEnabled(mIsOneHandedEnabled); - mGestureHandler.onOneHandedEnabled(mIsOneHandedEnabled || mIsSwipeToNotificationEnabled); + mGestureHandler.onGestureEnabled(mIsOneHandedEnabled || mIsSwipeToNotificationEnabled); if (!mIsOneHandedEnabled) { mDisplayAreaOrganizer.unregisterOrganizer(); @@ -532,10 +551,15 @@ public class OneHandedController implements RemoteCallable<OneHandedController> @VisibleForTesting void setLockedDisabled(boolean locked, boolean enabled) { - if (enabled == mIsOneHandedEnabled) { + final boolean isFeatureEnabled = mIsOneHandedEnabled || mIsSwipeToNotificationEnabled; + + if (enabled == isFeatureEnabled) { return; } mLockedDisabled = locked && !enabled; + + // Disabled gesture when keyguard ON + mGestureHandler.onGestureEnabled(!mLockedDisabled && isFeatureEnabled); } private void onConfigChanged(Configuration newConfig) { @@ -556,6 +580,10 @@ public class OneHandedController implements RemoteCallable<OneHandedController> pw.print(innerPrefix + "mLockedDisabled="); pw.println(mLockedDisabled); + if (mBackgroundPanelOrganizer != null) { + mBackgroundPanelOrganizer.dump(pw); + } + if (mDisplayAreaOrganizer != null) { mDisplayAreaOrganizer.dump(pw); } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedDisplayAreaOrganizer.java b/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedDisplayAreaOrganizer.java index 5eec23106f47..682c9a3f0d62 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedDisplayAreaOrganizer.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedDisplayAreaOrganizer.java @@ -23,9 +23,7 @@ import android.content.Context; import android.graphics.Rect; import android.os.SystemProperties; import android.util.ArrayMap; -import android.util.Slog; import android.view.SurfaceControl; -import android.view.WindowManager; import android.window.DisplayAreaAppearedInfo; import android.window.DisplayAreaInfo; import android.window.DisplayAreaOrganizer; @@ -37,6 +35,7 @@ import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import com.android.wm.shell.R; +import com.android.wm.shell.common.DisplayLayout; import com.android.wm.shell.common.ShellExecutor; import java.io.PrintWriter; @@ -58,7 +57,8 @@ public class OneHandedDisplayAreaOrganizer extends DisplayAreaOrganizer { private static final String ONE_HANDED_MODE_TRANSLATE_ANIMATION_DURATION = "persist.debug.one_handed_translate_animation_duration"; - private final WindowManager mWindowManager; + private DisplayLayout mDisplayLayout = new DisplayLayout(); + private final Rect mLastVisualDisplayBounds = new Rect(); private final Rect mDefaultDisplayBounds = new Rect(); @@ -108,15 +108,15 @@ public class OneHandedDisplayAreaOrganizer extends DisplayAreaOrganizer { * Constructor of OneHandedDisplayAreaOrganizer */ public OneHandedDisplayAreaOrganizer(Context context, - WindowManager windowManager, + DisplayLayout displayLayout, OneHandedAnimationController animationController, OneHandedTutorialHandler tutorialHandler, OneHandedBackgroundPanelOrganizer oneHandedBackgroundGradientOrganizer, ShellExecutor mainExecutor) { super(mainExecutor); - mWindowManager = windowManager; + mDisplayLayout.set(displayLayout); + updateDisplayBounds(); mAnimationController = animationController; - mLastVisualDisplayBounds.set(getDisplayBounds()); final int animationDurationConfig = context.getResources().getInteger( R.integer.config_one_handed_translate_animation_duration); mEnterExitAnimationDurationMs = @@ -146,7 +146,7 @@ public class OneHandedDisplayAreaOrganizer extends DisplayAreaOrganizer { final DisplayAreaAppearedInfo info = displayAreaInfos.get(i); onDisplayAreaAppeared(info.getDisplayAreaInfo(), info.getLeash()); } - mDefaultDisplayBounds.set(getDisplayBounds()); + updateDisplayBounds(); return displayAreaInfos; } @@ -157,29 +157,21 @@ public class OneHandedDisplayAreaOrganizer extends DisplayAreaOrganizer { } /** - * Handler for display rotation changes by below policy which - * handles 90 degree display rotation changes {@link Surface.Rotation}. + * Handler for display rotation changes by {@link DisplayLayout} * - * @param fromRotation starting rotation of the display. - * @param toRotation target rotation of the display (after rotating). - * @param wct A task transaction {@link WindowContainerTransaction} from - * {@link DisplayChangeController} to populate. + * @param context Any context + * @param toRotation target rotation of the display (after rotating). + * @param wct A task transaction {@link WindowContainerTransaction} from + * {@link DisplayChangeController} to populate. */ - public void onRotateDisplay(int fromRotation, int toRotation, WindowContainerTransaction wct) { - // Stop one handed without animation and reset cropped size immediately - final Rect newBounds = new Rect(getDisplayBounds()); - // This diff rule will only filter the cases portrait <-> landscape - final boolean isOrientationDiff = Math.abs(fromRotation - toRotation) % 2 == 1; - - if (isOrientationDiff) { - // getDisplayBounds() will return window metrics bounds which dose not update to - // corresponding display orientation yet, we have to manual rotate bounds - newBounds.set(0, 0, newBounds.bottom, newBounds.right); - resetWindowsOffset(wct); - mDefaultDisplayBounds.set(newBounds); - mLastVisualDisplayBounds.set(newBounds); - finishOffset(0, TRANSITION_DIRECTION_EXIT); + public void onRotateDisplay(Context context, int toRotation, WindowContainerTransaction wct) { + if (mDisplayLayout.rotation() == toRotation) { + return; } + mDisplayLayout.rotateTo(context.getResources(), toRotation); + resetWindowsOffset(wct); + updateDisplayBounds(); + finishOffset(0, TRANSITION_DIRECTION_EXIT); } /** @@ -191,9 +183,7 @@ public class OneHandedDisplayAreaOrganizer extends DisplayAreaOrganizer { mDefaultDisplayBounds.top + yOffset, mDefaultDisplayBounds.right, mDefaultDisplayBounds.bottom + yOffset); - final Rect fromBounds = getLastVisualDisplayBounds() != null - ? getLastVisualDisplayBounds() - : mDefaultDisplayBounds; + final Rect fromBounds = getLastVisualDisplayBounds(); final int direction = yOffset > 0 ? TRANSITION_DIRECTION_TRIGGER : TRANSITION_DIRECTION_EXIT; @@ -219,7 +209,8 @@ public class OneHandedDisplayAreaOrganizer extends DisplayAreaOrganizer { applyTransaction(wct); } - private void resetWindowsOffset(WindowContainerTransaction wct) { + @VisibleForTesting + void resetWindowsOffset(WindowContainerTransaction wct) { final SurfaceControl.Transaction tx = mSurfaceControlTransactionFactory.getTransaction(); mDisplayAreaTokenMap.forEach( @@ -292,19 +283,19 @@ public class OneHandedDisplayAreaOrganizer extends DisplayAreaOrganizer { return mLastVisualDisplayBounds; } + @VisibleForTesting @Nullable + Rect getLastDisplayBounds() { + return mLastVisualDisplayBounds; + } + + public DisplayLayout getDisplayLayout() { + return mDisplayLayout; + } + @VisibleForTesting - Rect getDisplayBounds() { - if (mWindowManager == null) { - Slog.e(TAG, "WindowManager instance is null! Can not get display size!"); - return new Rect(); - } - final Rect displayBounds = mWindowManager.getCurrentWindowMetrics().getBounds(); - if (displayBounds.width() == 0 || displayBounds.height() == 0) { - Slog.e(TAG, "Display size error! width = " + displayBounds.width() - + ", height = " + displayBounds.height()); - } - return displayBounds; + void setDisplayLayout(@NonNull DisplayLayout displayLayout) { + mDisplayLayout.set(displayLayout); } @VisibleForTesting @@ -312,6 +303,11 @@ public class OneHandedDisplayAreaOrganizer extends DisplayAreaOrganizer { return mDisplayAreaTokenMap; } + void updateDisplayBounds() { + mDefaultDisplayBounds.set(0, 0, mDisplayLayout.width(), mDisplayLayout.height()); + mLastVisualDisplayBounds.set(mDefaultDisplayBounds); + } + /** * Register transition callback */ @@ -324,13 +320,13 @@ public class OneHandedDisplayAreaOrganizer extends DisplayAreaOrganizer { pw.println(TAG + "states: "); pw.print(innerPrefix + "mIsInOneHanded="); pw.println(mIsInOneHanded); + pw.print(innerPrefix + "mDisplayLayout.rotation()="); + pw.println(mDisplayLayout.rotation()); pw.print(innerPrefix + "mDisplayAreaTokenMap="); pw.println(mDisplayAreaTokenMap); pw.print(innerPrefix + "mDefaultDisplayBounds="); pw.println(mDefaultDisplayBounds); pw.print(innerPrefix + "mLastVisualDisplayBounds="); pw.println(mLastVisualDisplayBounds); - pw.print(innerPrefix + "getDisplayBounds()="); - pw.println(getDisplayBounds()); } } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedGestureHandler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedGestureHandler.java index 778876c76afe..495362a3eef7 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedGestureHandler.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedGestureHandler.java @@ -24,7 +24,6 @@ import android.graphics.PointF; import android.graphics.Rect; import android.hardware.input.InputManager; import android.os.Looper; -import android.util.Log; import android.view.Display; import android.view.InputChannel; import android.view.InputEvent; @@ -33,29 +32,23 @@ import android.view.InputMonitor; import android.view.MotionEvent; import android.view.Surface; import android.view.ViewConfiguration; -import android.view.WindowManager; -import android.window.WindowContainerTransaction; import androidx.annotation.NonNull; import androidx.annotation.VisibleForTesting; import com.android.wm.shell.R; -import com.android.wm.shell.common.DisplayChangeController; -import com.android.wm.shell.common.DisplayController; import com.android.wm.shell.common.DisplayLayout; import com.android.wm.shell.common.ShellExecutor; import java.io.PrintWriter; /** - * The class manage swipe up and down gesture for 3-Button mode navigation, - * others(e.g, 2-button, full gesture mode) are handled by Launcher quick steps. - * TODO(b/160934654) Migrate to Launcher quick steps + * The class manage swipe up and down gesture for 3-Button mode navigation, others(e.g, 2-button, + * full gesture mode) are handled by Launcher quick steps. TODO(b/160934654) Migrate to Launcher + * quick steps */ -public class OneHandedGestureHandler implements OneHandedTransitionCallback, - DisplayChangeController.OnDisplayChangingListener { +public class OneHandedGestureHandler implements OneHandedTransitionCallback { private static final String TAG = "OneHandedGestureHandler"; - private static final boolean DEBUG_GESTURE = false; private static final int ANGLE_MAX = 150; private static final int ANGLE_MIN = 30; @@ -64,14 +57,13 @@ public class OneHandedGestureHandler implements OneHandedTransitionCallback, private final PointF mDownPos = new PointF(); private final PointF mLastPos = new PointF(); private final PointF mStartDragPos = new PointF(); - private final WindowManager mWindowManager; private boolean mPassedSlop; private boolean mAllowGesture; private boolean mIsEnabled; private int mNavGestureHeight; private boolean mIsThreeButtonModeEnabled; - private int mRotation = Surface.ROTATION_0; + private int mRotation; @VisibleForTesting InputMonitor mInputMonitor; @@ -85,37 +77,35 @@ public class OneHandedGestureHandler implements OneHandedTransitionCallback, private boolean mIsStopGesture; /** - * Constructor of OneHandedGestureHandler, we only handle the gesture of - * {@link Display#DEFAULT_DISPLAY} + * Constructor of OneHandedGestureHandler, we only handle the gesture of {@link + * Display#DEFAULT_DISPLAY} * - * @param context {@link Context} - * @param displayController {@link DisplayController} + * @param context Any context + * @param displayLayout Current {@link DisplayLayout} from controller + * @param viewConfig {@link ViewConfiguration} to obtain touch slop + * @param mainExecutor The wm-shell main executor */ - public OneHandedGestureHandler(Context context, WindowManager windowManager, - DisplayController displayController, ViewConfiguration viewConfig, + public OneHandedGestureHandler(Context context, + DisplayLayout displayLayout, + ViewConfiguration viewConfig, ShellExecutor mainExecutor) { - mWindowManager = windowManager; mMainExecutor = mainExecutor; - displayController.addDisplayChangingController(this); - mNavGestureHeight = getNavBarSize(context, - displayController.getDisplayLayout(DEFAULT_DISPLAY)); mDragDistThreshold = context.getResources().getDimensionPixelSize( R.dimen.gestures_onehanded_drag_threshold); + final float slop = viewConfig.getScaledTouchSlop(); mSquaredSlop = slop * slop; - + onDisplayChanged(displayLayout); updateIsEnabled(); } /** - * Notified by {@link OneHandedController}, when user update settings of Enabled or Disabled + * Notifies by {@link OneHandedController}, when swipe down gesture is enabled on 3 button + * navigation bar mode. * - * @param isEnabled is one handed settings enabled or not + * @param isEnabled Either one handed mode or swipe for notification function enabled or not */ - public void onOneHandedEnabled(boolean isEnabled) { - if (DEBUG_GESTURE) { - Log.d(TAG, "onOneHandedEnabled, isEnabled = " + isEnabled); - } + public void onGestureEnabled(boolean isEnabled) { mIsEnabled = isEnabled; updateIsEnabled(); } @@ -126,25 +116,31 @@ public class OneHandedGestureHandler implements OneHandedTransitionCallback, } /** - * Register {@link OneHandedGestureEventCallback} to receive onStart(), onStop() callback + * Registers {@link OneHandedGestureEventCallback} to receive onStart(), onStop() callback */ public void setGestureEventListener(OneHandedGestureEventCallback callback) { mGestureEventCallback = callback; } + /** + * Called when onDisplayAdded() or onDisplayRemoved() callback + * @param displayLayout The latest {@link DisplayLayout} representing current displayId + */ + public void onDisplayChanged(DisplayLayout displayLayout) { + mNavGestureHeight = getNavBarSize(displayLayout); + mGestureRegion.set(0, displayLayout.height() - mNavGestureHeight, displayLayout.width(), + displayLayout.height()); + mRotation = displayLayout.rotation(); + } + private void onMotionEvent(MotionEvent ev) { int action = ev.getActionMasked(); if (action == MotionEvent.ACTION_DOWN) { - mAllowGesture = isWithinTouchRegion(ev.getX(), ev.getY()) - && mRotation == Surface.ROTATION_0; + mAllowGesture = isWithinTouchRegion(ev.getX(), ev.getY()) && isGestureAvailable(); if (mAllowGesture) { mDownPos.set(ev.getX(), ev.getY()); mLastPos.set(mDownPos); } - if (DEBUG_GESTURE) { - Log.d(TAG, "ACTION_DOWN, mDownPos=" + mDownPos + ", mAllowGesture=" - + mAllowGesture); - } } else if (mAllowGesture) { switch (action) { case MotionEvent.ACTION_MOVE: @@ -204,34 +200,17 @@ public class OneHandedGestureHandler implements OneHandedTransitionCallback, } private boolean isWithinTouchRegion(float x, float y) { - if (DEBUG_GESTURE) { - Log.d(TAG, "isWithinTouchRegion(), mGestureRegion=" + mGestureRegion + ", downX=" + x - + ", downY=" + y); - } return mGestureRegion.contains(Math.round(x), Math.round(y)); } - private int getNavBarSize(Context context, @Nullable DisplayLayout displayLayout) { - if (displayLayout != null) { - return displayLayout.navBarFrameHeight(); - } else { - return isRotated() - ? context.getResources().getDimensionPixelSize( - com.android.internal.R.dimen.navigation_bar_height_landscape) - : context.getResources().getDimensionPixelSize( - com.android.internal.R.dimen.navigation_bar_height); - } + private int getNavBarSize(@NonNull DisplayLayout displayLayout) { + return isGestureAvailable() ? displayLayout.navBarFrameHeight() : 0 /* In landscape */; } private void updateIsEnabled() { disposeInputChannel(); - // Either OHM or swipe notification shade can activate in portrait mode only - if (mIsEnabled && mIsThreeButtonModeEnabled && !isRotated()) { - final Rect displaySize = mWindowManager.getCurrentWindowMetrics().getBounds(); - // Register input event receiver to monitor the touch region of NavBar gesture height - mGestureRegion.set(0, displaySize.height() - mNavGestureHeight, displaySize.width(), - displaySize.height()); + if (mIsEnabled && mIsThreeButtonModeEnabled && isGestureAvailable()) { mInputMonitor = InputManager.getInstance().monitorGestureInput( "onehanded-gesture-offset", DEFAULT_DISPLAY); try { @@ -251,10 +230,16 @@ public class OneHandedGestureHandler implements OneHandedTransitionCallback, } } - @Override - public void onRotateDisplay(int displayId, int fromRotation, int toRotation, - WindowContainerTransaction t) { - mRotation = toRotation; + /** + * Handler for display rotation changes by {@link DisplayLayout} + * + * @param displayLayout The rotated displayLayout + */ + public void onRotateDisplay(DisplayLayout displayLayout) { + mRotation = displayLayout.rotation(); + mNavGestureHeight = getNavBarSize(displayLayout); + mGestureRegion.set(0, displayLayout.height() - mNavGestureHeight, displayLayout.width(), + displayLayout.height()); updateIsEnabled(); } @@ -270,8 +255,9 @@ public class OneHandedGestureHandler implements OneHandedTransitionCallback, } } - private boolean isRotated() { - return mRotation == Surface.ROTATION_90 || mRotation == Surface.ROTATION_270; + private boolean isGestureAvailable() { + // Either OHM or swipe notification shade can activate in portrait mode only + return mRotation == Surface.ROTATION_0 || mRotation == Surface.ROTATION_180; } private boolean isValidStartAngle(float deltaX, float deltaY) { @@ -291,14 +277,18 @@ public class OneHandedGestureHandler implements OneHandedTransitionCallback, void dump(@NonNull PrintWriter pw) { final String innerPrefix = " "; pw.println(TAG + "States: "); + pw.print(innerPrefix + "mAllowGesture="); + pw.println(mAllowGesture); pw.print(innerPrefix + "mIsEnabled="); pw.println(mIsEnabled); + pw.print(innerPrefix + "mGestureRegion="); + pw.println(mGestureRegion); pw.print(innerPrefix + "mNavGestureHeight="); pw.println(mNavGestureHeight); pw.print(innerPrefix + "mIsThreeButtonModeEnabled="); pw.println(mIsThreeButtonModeEnabled); - pw.print(innerPrefix + "isLandscape="); - pw.println(isRotated()); + pw.print(innerPrefix + "mRotation="); + pw.println(mRotation); } /** diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/SplashscreenContentDrawer.java b/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/SplashscreenContentDrawer.java index 28c8f53c7f26..855faaa8e83e 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/SplashscreenContentDrawer.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/SplashscreenContentDrawer.java @@ -17,11 +17,13 @@ package com.android.wm.shell.startingsurface; import static android.os.Trace.TRACE_TAG_WINDOW_MANAGER; +import static android.os.UserHandle.getUserHandleForUid; import android.annotation.ColorInt; import android.annotation.NonNull; import android.app.ActivityThread; import android.content.Context; +import android.content.pm.ActivityInfo; import android.content.res.Resources; import android.content.res.TypedArray; import android.graphics.Bitmap; @@ -42,6 +44,7 @@ import com.android.internal.R; import com.android.internal.graphics.palette.Palette; import com.android.internal.graphics.palette.Quantizer; import com.android.internal.graphics.palette.VariationalKMeansQuantizer; +import com.android.launcher3.icons.IconProvider; import com.android.wm.shell.common.TransactionPool; import java.util.List; @@ -62,6 +65,7 @@ public class SplashscreenContentDrawer { // also 108*108 pixels, then do not enlarge this icon if only need to show foreground icon. private static final float ENLARGE_FOREGROUND_ICON_THRESHOLD = (72f * 72f) / (108f * 108f); private final Context mContext; + private final IconProvider mIconProvider; private final int mMaxAnimatableIconDuration; private int mIconSize; @@ -78,6 +82,7 @@ public class SplashscreenContentDrawer { SplashscreenContentDrawer(Context context, int maxAnimatableIconDuration, int iconExitAnimDuration, int appRevealAnimDuration, TransactionPool pool) { mContext = context; + mIconProvider = new IconProvider(context); mMaxAnimatableIconDuration = maxAnimatableIconDuration; mAppRevealDuration = appRevealAnimDuration; mIconExitDuration = iconExitAnimDuration; @@ -141,20 +146,23 @@ public class SplashscreenContentDrawer { } } - SplashScreenView makeSplashScreenContentView(Context context, int iconRes) { + SplashScreenView makeSplashScreenContentView(Context context, ActivityInfo ai) { updateDensity(); getWindowAttrs(context, mTmpAttrs); final StartingWindowViewBuilder builder = new StartingWindowViewBuilder(); final int animationDuration; - final Drawable iconDrawable; + Drawable iconDrawable; if (mTmpAttrs.mReplaceIcon != null) { iconDrawable = mTmpAttrs.mReplaceIcon; animationDuration = Math.max(0, Math.min(mTmpAttrs.mAnimationDuration, mMaxAnimatableIconDuration)); } else { - iconDrawable = iconRes != 0 ? context.getDrawable(iconRes) - : context.getPackageManager().getDefaultActivityIcon(); + iconDrawable = mIconProvider.getIconForUI( + ai, getUserHandleForUid(ai.applicationInfo.uid)); + if (iconDrawable == null) { + iconDrawable = context.getPackageManager().getDefaultActivityIcon(); + } animationDuration = 0; } final int themeBGColor = peekWindowBGColor(context); diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/StartingSurfaceDrawer.java b/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/StartingSurfaceDrawer.java index b5008137cedd..55d0b7d0f3c2 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/StartingSurfaceDrawer.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/StartingSurfaceDrawer.java @@ -270,7 +270,8 @@ public class StartingSurfaceDrawer { if (splashscreenContentCompatible) { win.setContentView(sView); } else { - sView = mSplashscreenContentDrawer.makeSplashScreenContentView(context, iconRes); + sView = mSplashscreenContentDrawer + .makeSplashScreenContentView(context, activityInfo); win.setContentView(sView); sView.cacheRootWindow(win); } diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedBackgroundPanelOrganizerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedBackgroundPanelOrganizerTest.java index d6bcf0375f32..3f47c040dd8d 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedBackgroundPanelOrganizerTest.java +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedBackgroundPanelOrganizerTest.java @@ -22,6 +22,7 @@ import static android.window.DisplayAreaOrganizer.FEATURE_ONE_HANDED_BACKGROUND_ import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; import android.testing.AndroidTestingRunner; @@ -35,6 +36,7 @@ import android.window.WindowContainerToken; import androidx.test.filters.SmallTest; import com.android.wm.shell.common.DisplayController; +import com.android.wm.shell.common.DisplayLayout; import org.junit.Before; import org.junit.Test; @@ -48,7 +50,8 @@ import org.mockito.MockitoAnnotations; public class OneHandedBackgroundPanelOrganizerTest extends OneHandedTestCase { private DisplayAreaInfo mDisplayAreaInfo; private Display mDisplay; - private OneHandedBackgroundPanelOrganizer mBackgroundPanelOrganizer; + private DisplayLayout mDisplayLayout; + private OneHandedBackgroundPanelOrganizer mSpiedBackgroundPanelOrganizer; private WindowContainerToken mToken; private SurfaceControl mLeash; private TestableLooper mTestableLooper; @@ -65,37 +68,38 @@ public class OneHandedBackgroundPanelOrganizerTest extends OneHandedTestCase { mToken = new WindowContainerToken(mMockRealToken); mLeash = new SurfaceControl(); mDisplay = mContext.getDisplay(); + mDisplayLayout = new DisplayLayout(mContext, mDisplay); when(mMockDisplayController.getDisplay(anyInt())).thenReturn(mDisplay); mDisplayAreaInfo = new DisplayAreaInfo(mToken, DEFAULT_DISPLAY, FEATURE_ONE_HANDED_BACKGROUND_PANEL); - mBackgroundPanelOrganizer = new OneHandedBackgroundPanelOrganizer(mContext, mWindowManager, - mMockDisplayController, Runnable::run); + mSpiedBackgroundPanelOrganizer = spy( + new OneHandedBackgroundPanelOrganizer(mContext, mDisplayLayout, Runnable::run)); } @Test public void testOnDisplayAreaAppeared() { - mBackgroundPanelOrganizer.onDisplayAreaAppeared(mDisplayAreaInfo, mLeash); + mSpiedBackgroundPanelOrganizer.onDisplayAreaAppeared(mDisplayAreaInfo, mLeash); mTestableLooper.processAllMessages(); - assertThat(mBackgroundPanelOrganizer.getBackgroundSurface()).isNotNull(); + assertThat(mSpiedBackgroundPanelOrganizer.getBackgroundSurface()).isNotNull(); } @Test public void testShowBackgroundLayer() { - mBackgroundPanelOrganizer.onDisplayAreaAppeared(mDisplayAreaInfo, mLeash); - mBackgroundPanelOrganizer.showBackgroundPanelLayer(); + mSpiedBackgroundPanelOrganizer.onDisplayAreaAppeared(mDisplayAreaInfo, mLeash); + mSpiedBackgroundPanelOrganizer.showBackgroundPanelLayer(); mTestableLooper.processAllMessages(); - assertThat(mBackgroundPanelOrganizer.mIsShowing).isTrue(); + assertThat(mSpiedBackgroundPanelOrganizer.mIsShowing).isTrue(); } @Test public void testRemoveBackgroundLayer() { - mBackgroundPanelOrganizer.onDisplayAreaAppeared(mDisplayAreaInfo, mLeash); - mBackgroundPanelOrganizer.removeBackgroundPanelLayer(); + mSpiedBackgroundPanelOrganizer.onDisplayAreaAppeared(mDisplayAreaInfo, mLeash); + mSpiedBackgroundPanelOrganizer.removeBackgroundPanelLayer(); mTestableLooper.processAllMessages(); - assertThat(mBackgroundPanelOrganizer.mIsShowing).isFalse(); + assertThat(mSpiedBackgroundPanelOrganizer.mIsShowing).isFalse(); } } diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedControllerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedControllerTest.java index bd5fe2bcbdad..b0fc4c14a6bf 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedControllerTest.java +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedControllerTest.java @@ -23,20 +23,24 @@ import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.Mockito.atLeastOnce; import static org.mockito.Mockito.never; +import static org.mockito.Mockito.reset; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.content.om.IOverlayManager; +import android.graphics.Rect; import android.os.Handler; import android.testing.AndroidTestingRunner; import android.util.ArrayMap; import android.view.Display; +import android.view.Surface; import android.view.SurfaceControl; import androidx.test.filters.SmallTest; import com.android.wm.shell.common.DisplayController; +import com.android.wm.shell.common.DisplayLayout; import com.android.wm.shell.common.ShellExecutor; import com.android.wm.shell.common.TaskStackListenerImpl; @@ -50,6 +54,7 @@ import org.mockito.MockitoAnnotations; @RunWith(AndroidTestingRunner.class) public class OneHandedControllerTest extends OneHandedTestCase { Display mDisplay; + DisplayLayout mDisplayLayout; OneHandedController mSpiedOneHandedController; OneHandedTimeoutHandler mSpiedTimeoutHandler; @@ -88,6 +93,7 @@ public class OneHandedControllerTest extends OneHandedTestCase { public void setUp() { MockitoAnnotations.initMocks(this); mDisplay = mContext.getDisplay(); + mDisplayLayout = new DisplayLayout(mContext, mDisplay); mSpiedTimeoutHandler = spy(new OneHandedTimeoutHandler(mMockShellMainExecutor)); when(mMockDisplayController.getDisplay(anyInt())).thenReturn(mDisplay); @@ -103,9 +109,12 @@ public class OneHandedControllerTest extends OneHandedTestCase { when(mMockSettingsUitl.getSettingsSwipeToNotificationEnabled(any())).thenReturn( mDefaultSwipeToNotificationEnabled); + when(mMockDisplayAreaOrganizer.getLastDisplayBounds()).thenReturn( + new Rect(0, 0, mDisplayLayout.width(), mDisplayLayout.height())); + when(mMockDisplayAreaOrganizer.getDisplayLayout()).thenReturn(mDisplayLayout); + mSpiedOneHandedController = spy(new OneHandedController( mContext, - mWindowManager, mMockDisplayController, mMockBackgroundOrganizer, mMockDisplayAreaOrganizer, @@ -127,7 +136,7 @@ public class OneHandedControllerTest extends OneHandedTestCase { final OneHandedAnimationController animationController = new OneHandedAnimationController( mContext); OneHandedDisplayAreaOrganizer displayAreaOrganizer = new OneHandedDisplayAreaOrganizer( - mContext, mWindowManager, animationController, mMockTutorialHandler, + mContext, mDisplayLayout, animationController, mMockTutorialHandler, mMockBackgroundOrganizer, mMockShellMainExecutor); assertThat(displayAreaOrganizer.isInOneHanded()).isFalse(); @@ -188,7 +197,7 @@ public class OneHandedControllerTest extends OneHandedTestCase { mSpiedOneHandedController.setOneHandedEnabled(true); verify(mMockTouchHandler, atLeastOnce()).onOneHandedEnabled(anyBoolean()); - verify(mMockGestureHandler, atLeastOnce()).onOneHandedEnabled(anyBoolean()); + verify(mMockGestureHandler, atLeastOnce()).onGestureEnabled(anyBoolean()); } @Test @@ -196,7 +205,7 @@ public class OneHandedControllerTest extends OneHandedTestCase { mSpiedOneHandedController.setSwipeToNotificationEnabled(mDefaultSwipeToNotificationEnabled); verify(mMockTouchHandler, atLeastOnce()).onOneHandedEnabled(anyBoolean()); - verify(mMockGestureHandler, atLeastOnce()).onOneHandedEnabled(anyBoolean()); + verify(mMockGestureHandler, atLeastOnce()).onGestureEnabled(anyBoolean()); } @Test @@ -282,4 +291,67 @@ public class OneHandedControllerTest extends OneHandedTestCase { verify(mMockDisplayAreaOrganizer).scheduleOffset(anyInt(), anyInt()); } + + @Test + public void testRotation90CanNotStartOneHanded() { + final DisplayLayout landscapeDisplayLayout = new DisplayLayout(mDisplayLayout); + landscapeDisplayLayout.rotateTo(mContext.getResources(), Surface.ROTATION_90); + when(mMockDisplayAreaOrganizer.isInOneHanded()).thenReturn(false); + when(mMockDisplayAreaOrganizer.getDisplayLayout()).thenReturn(landscapeDisplayLayout); + mSpiedOneHandedController.setOneHandedEnabled(true); + mSpiedOneHandedController.setLockedDisabled(false /* locked */, false /* enabled */); + mSpiedOneHandedController.startOneHanded(); + + verify(mMockDisplayAreaOrganizer, never()).scheduleOffset(anyInt(), anyInt()); + } + + @Test + public void testRotation180CanStartOneHanded() { + final DisplayLayout testDisplayLayout = new DisplayLayout(mDisplayLayout); + testDisplayLayout.rotateTo(mContext.getResources(), Surface.ROTATION_180); + when(mMockDisplayAreaOrganizer.isInOneHanded()).thenReturn(false); + when(mMockDisplayAreaOrganizer.getDisplayLayout()).thenReturn(testDisplayLayout); + mSpiedOneHandedController.setOneHandedEnabled(true); + mSpiedOneHandedController.setLockedDisabled(false /* locked */, false /* enabled */); + mSpiedOneHandedController.startOneHanded(); + + verify(mMockDisplayAreaOrganizer).scheduleOffset(anyInt(), anyInt()); + } + + @Test + public void testRotation270CanNotStartOneHanded() { + final DisplayLayout testDisplayLayout = new DisplayLayout(mDisplayLayout); + testDisplayLayout.rotateTo(mContext.getResources(), Surface.ROTATION_270); + when(mMockDisplayAreaOrganizer.isInOneHanded()).thenReturn(false); + when(mMockDisplayAreaOrganizer.getDisplayLayout()).thenReturn(testDisplayLayout); + mSpiedOneHandedController.setOneHandedEnabled(true); + mSpiedOneHandedController.setLockedDisabled(false /* locked */, false /* enabled */); + mSpiedOneHandedController.startOneHanded(); + + verify(mMockDisplayAreaOrganizer, never()).scheduleOffset(anyInt(), anyInt()); + } + + @Test + public void testDisabled3ButtonGestureWhenKeyguardOn() { + final boolean isOneHandedEnabled = true; + final boolean isLockWhenKeyguardOn = true; + final boolean isEnabledWhenKeyguardOn = false; + mSpiedOneHandedController.setOneHandedEnabled(isOneHandedEnabled); + mSpiedOneHandedController.setLockedDisabled(isLockWhenKeyguardOn, isEnabledWhenKeyguardOn); + + verify(mMockGestureHandler).onGestureEnabled(isEnabledWhenKeyguardOn); + } + + @Test + public void testEnabled3ButtonGestureWhenKeyguardGoingAway() { + final boolean isOneHandedEnabled = true; + final boolean isLockWhenKeyguardOn = false; + final boolean isEnabledWhenKeyguardOn = false; + mSpiedOneHandedController.setOneHandedEnabled(isOneHandedEnabled); + reset(mMockGestureHandler); + + mSpiedOneHandedController.setLockedDisabled(isLockWhenKeyguardOn, isEnabledWhenKeyguardOn); + + verify(mMockGestureHandler).onGestureEnabled(isOneHandedEnabled); + } } diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedDisplayAreaOrganizerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedDisplayAreaOrganizerTest.java index f897b09f8b8b..f654bb59ef0c 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedDisplayAreaOrganizerTest.java +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedDisplayAreaOrganizerTest.java @@ -19,6 +19,9 @@ package com.android.wm.shell.onehanded; import static android.view.Display.DEFAULT_DISPLAY; import static android.window.DisplayAreaOrganizer.FEATURE_ONE_HANDED; +import static com.android.wm.shell.onehanded.OneHandedAnimationController.TRANSITION_DIRECTION_EXIT; +import static com.android.wm.shell.onehanded.OneHandedAnimationController.TRANSITION_DIRECTION_TRIGGER; + import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.anyFloat; @@ -32,6 +35,7 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.content.res.Configuration; +import android.graphics.Rect; import android.os.Binder; import android.testing.AndroidTestingRunner; import android.testing.TestableLooper; @@ -47,6 +51,7 @@ import android.window.WindowContainerTransaction; import androidx.test.filters.SmallTest; import com.android.wm.shell.common.DisplayController; +import com.android.wm.shell.common.DisplayLayout; import com.android.wm.shell.common.ShellExecutor; import org.junit.Before; @@ -67,6 +72,7 @@ public class OneHandedDisplayAreaOrganizerTest extends OneHandedTestCase { DisplayAreaInfo mDisplayAreaInfo; Display mDisplay; + DisplayLayout mDisplayLayout; OneHandedDisplayAreaOrganizer mSpiedDisplayAreaOrganizer; OneHandedTutorialHandler mTutorialHandler; OneHandedAnimationController.OneHandedTransitionAnimator mFakeAnimator; @@ -103,6 +109,7 @@ public class OneHandedDisplayAreaOrganizerTest extends OneHandedTestCase { mToken = new WindowContainerToken(mMockRealToken); mLeash = new SurfaceControl(); mDisplay = mContext.getDisplay(); + mDisplayLayout = new DisplayLayout(mContext, mDisplay); mDisplayAreaInfo = new DisplayAreaInfo(mToken, DEFAULT_DISPLAY, FEATURE_ONE_HANDED); mDisplayAreaInfo.configuration.orientation = Configuration.ORIENTATION_PORTRAIT; when(mMockAnimationController.getAnimator(any(), any(), any(), any())).thenReturn(null); @@ -121,7 +128,7 @@ public class OneHandedDisplayAreaOrganizerTest extends OneHandedTestCase { when(mMockLeash.getHeight()).thenReturn(DISPLAY_HEIGHT); mSpiedDisplayAreaOrganizer = spy(new OneHandedDisplayAreaOrganizer(mContext, - mWindowManager, + mDisplayLayout, mMockAnimationController, mTutorialHandler, mMockBackgroundOrganizer, @@ -169,20 +176,13 @@ public class OneHandedDisplayAreaOrganizerTest extends OneHandedTestCase { } @Test - public void testRotation_getNewDisplayBounds() { - when(mMockLeash.isValid()).thenReturn(false); - // Rotate 0 -> 90 - mSpiedDisplayAreaOrganizer.onRotateDisplay(Surface.ROTATION_0, Surface.ROTATION_90, - mMockWindowContainerTransaction); - verify(mSpiedDisplayAreaOrganizer).getDisplayBounds(); - } - - @Test public void testRotation_portrait_0_to_landscape_90() { when(mMockLeash.isValid()).thenReturn(false); // Rotate 0 -> 90 - mSpiedDisplayAreaOrganizer.onRotateDisplay(Surface.ROTATION_0, Surface.ROTATION_90, + mSpiedDisplayAreaOrganizer.onRotateDisplay(mContext, Surface.ROTATION_90, mMockWindowContainerTransaction); + + verify(mSpiedDisplayAreaOrganizer).resetWindowsOffset(mMockWindowContainerTransaction); verify(mSpiedDisplayAreaOrganizer).finishOffset(anyInt(), anyInt()); } @@ -190,8 +190,10 @@ public class OneHandedDisplayAreaOrganizerTest extends OneHandedTestCase { public void testRotation_portrait_0_to_seascape_270() { when(mMockLeash.isValid()).thenReturn(false); // Rotate 0 -> 270 - mSpiedDisplayAreaOrganizer.onRotateDisplay(Surface.ROTATION_0, Surface.ROTATION_270, + mSpiedDisplayAreaOrganizer.onRotateDisplay(mContext, Surface.ROTATION_270, mMockWindowContainerTransaction); + + verify(mSpiedDisplayAreaOrganizer).resetWindowsOffset(mMockWindowContainerTransaction); verify(mSpiedDisplayAreaOrganizer).finishOffset(anyInt(), anyInt()); } @@ -199,8 +201,12 @@ public class OneHandedDisplayAreaOrganizerTest extends OneHandedTestCase { public void testRotation_portrait_180_to_landscape_90() { when(mMockLeash.isValid()).thenReturn(false); // Rotate 180 -> 90 - mSpiedDisplayAreaOrganizer.onRotateDisplay(Surface.ROTATION_180, Surface.ROTATION_90, + mDisplayLayout.rotateTo(mContext.getResources(), Surface.ROTATION_180); + mSpiedDisplayAreaOrganizer.setDisplayLayout(mDisplayLayout); + mSpiedDisplayAreaOrganizer.onRotateDisplay(mContext, Surface.ROTATION_90, mMockWindowContainerTransaction); + + verify(mSpiedDisplayAreaOrganizer).resetWindowsOffset(mMockWindowContainerTransaction); verify(mSpiedDisplayAreaOrganizer).finishOffset(anyInt(), anyInt()); } @@ -208,8 +214,12 @@ public class OneHandedDisplayAreaOrganizerTest extends OneHandedTestCase { public void testRotation_portrait_180_to_seascape_270() { when(mMockLeash.isValid()).thenReturn(false); // Rotate 180 -> 270 - mSpiedDisplayAreaOrganizer.onRotateDisplay(Surface.ROTATION_180, Surface.ROTATION_270, + mDisplayLayout.rotateTo(mContext.getResources(), Surface.ROTATION_180); + mSpiedDisplayAreaOrganizer.setDisplayLayout(mDisplayLayout); + mSpiedDisplayAreaOrganizer.onRotateDisplay(mContext, Surface.ROTATION_270, mMockWindowContainerTransaction); + + verify(mSpiedDisplayAreaOrganizer).resetWindowsOffset(mMockWindowContainerTransaction); verify(mSpiedDisplayAreaOrganizer).finishOffset(anyInt(), anyInt()); } @@ -217,8 +227,12 @@ public class OneHandedDisplayAreaOrganizerTest extends OneHandedTestCase { public void testRotation_landscape_90_to_portrait_0() { when(mMockLeash.isValid()).thenReturn(false); // Rotate 90 -> 0 - mSpiedDisplayAreaOrganizer.onRotateDisplay(Surface.ROTATION_90, Surface.ROTATION_0, + mDisplayLayout.rotateTo(mContext.getResources(), Surface.ROTATION_90); + mSpiedDisplayAreaOrganizer.setDisplayLayout(mDisplayLayout); + mSpiedDisplayAreaOrganizer.onRotateDisplay(mContext, Surface.ROTATION_0, mMockWindowContainerTransaction); + + verify(mSpiedDisplayAreaOrganizer).resetWindowsOffset(mMockWindowContainerTransaction); verify(mSpiedDisplayAreaOrganizer).finishOffset(anyInt(), anyInt()); } @@ -226,26 +240,38 @@ public class OneHandedDisplayAreaOrganizerTest extends OneHandedTestCase { public void testRotation_landscape_90_to_portrait_180() { when(mMockLeash.isValid()).thenReturn(false); // Rotate 90 -> 180 - mSpiedDisplayAreaOrganizer.onRotateDisplay(Surface.ROTATION_90, Surface.ROTATION_180, + mDisplayLayout.rotateTo(mContext.getResources(), Surface.ROTATION_90); + mSpiedDisplayAreaOrganizer.setDisplayLayout(mDisplayLayout); + mSpiedDisplayAreaOrganizer.onRotateDisplay(mContext, Surface.ROTATION_180, mMockWindowContainerTransaction); + + verify(mSpiedDisplayAreaOrganizer).resetWindowsOffset(mMockWindowContainerTransaction); verify(mSpiedDisplayAreaOrganizer).finishOffset(anyInt(), anyInt()); } @Test - public void testRotation_Seascape_270_to_portrait_0() { + public void testRotation_seascape_270_to_portrait_0() { when(mMockLeash.isValid()).thenReturn(false); // Rotate 270 -> 0 - mSpiedDisplayAreaOrganizer.onRotateDisplay(Surface.ROTATION_270, Surface.ROTATION_0, + mDisplayLayout.rotateTo(mContext.getResources(), Surface.ROTATION_270); + mSpiedDisplayAreaOrganizer.setDisplayLayout(mDisplayLayout); + mSpiedDisplayAreaOrganizer.onRotateDisplay(mContext, Surface.ROTATION_0, mMockWindowContainerTransaction); + + verify(mSpiedDisplayAreaOrganizer).resetWindowsOffset(mMockWindowContainerTransaction); verify(mSpiedDisplayAreaOrganizer).finishOffset(anyInt(), anyInt()); } @Test - public void testRotation_seascape_90_to_portrait_180() { + public void testRotation_seascape_270_to_portrait_180() { when(mMockLeash.isValid()).thenReturn(false); // Rotate 270 -> 180 - mSpiedDisplayAreaOrganizer.onRotateDisplay(Surface.ROTATION_270, Surface.ROTATION_180, + mDisplayLayout.rotateTo(mContext.getResources(), Surface.ROTATION_270); + mSpiedDisplayAreaOrganizer.setDisplayLayout(mDisplayLayout); + mSpiedDisplayAreaOrganizer.onRotateDisplay(mContext, Surface.ROTATION_180, mMockWindowContainerTransaction); + + verify(mSpiedDisplayAreaOrganizer).resetWindowsOffset(mMockWindowContainerTransaction); verify(mSpiedDisplayAreaOrganizer).finishOffset(anyInt(), anyInt()); } @@ -253,7 +279,10 @@ public class OneHandedDisplayAreaOrganizerTest extends OneHandedTestCase { public void testRotation_portrait_0_to_portrait_0() { when(mMockLeash.isValid()).thenReturn(false); // Rotate 0 -> 0 - mSpiedDisplayAreaOrganizer.onRotateDisplay(Surface.ROTATION_0, Surface.ROTATION_0, + mSpiedDisplayAreaOrganizer.onRotateDisplay(mContext, Surface.ROTATION_0, + mMockWindowContainerTransaction); + + verify(mSpiedDisplayAreaOrganizer, never()).resetWindowsOffset( mMockWindowContainerTransaction); verify(mSpiedDisplayAreaOrganizer, never()).finishOffset(anyInt(), anyInt()); } @@ -262,16 +291,23 @@ public class OneHandedDisplayAreaOrganizerTest extends OneHandedTestCase { public void testRotation_portrait_0_to_portrait_180() { when(mMockLeash.isValid()).thenReturn(false); // Rotate 0 -> 180 - mSpiedDisplayAreaOrganizer.onRotateDisplay(Surface.ROTATION_0, Surface.ROTATION_180, + mSpiedDisplayAreaOrganizer.onRotateDisplay(mContext, Surface.ROTATION_180, mMockWindowContainerTransaction); - verify(mSpiedDisplayAreaOrganizer, never()).finishOffset(anyInt(), anyInt()); + + verify(mSpiedDisplayAreaOrganizer).resetWindowsOffset(mMockWindowContainerTransaction); + verify(mSpiedDisplayAreaOrganizer).finishOffset(anyInt(), anyInt()); } @Test public void testRotation_portrait_180_to_portrait_180() { when(mMockLeash.isValid()).thenReturn(false); // Rotate 180 -> 180 - mSpiedDisplayAreaOrganizer.onRotateDisplay(Surface.ROTATION_180, Surface.ROTATION_180, + mDisplayLayout.rotateTo(mContext.getResources(), Surface.ROTATION_180); + mSpiedDisplayAreaOrganizer.setDisplayLayout(mDisplayLayout); + mSpiedDisplayAreaOrganizer.onRotateDisplay(mContext, Surface.ROTATION_180, + mMockWindowContainerTransaction); + + verify(mSpiedDisplayAreaOrganizer, never()).resetWindowsOffset( mMockWindowContainerTransaction); verify(mSpiedDisplayAreaOrganizer, never()).finishOffset(anyInt(), anyInt()); } @@ -280,16 +316,25 @@ public class OneHandedDisplayAreaOrganizerTest extends OneHandedTestCase { public void testRotation_portrait_180_to_portrait_0() { when(mMockLeash.isValid()).thenReturn(false); // Rotate 180 -> 0 - mSpiedDisplayAreaOrganizer.onRotateDisplay(Surface.ROTATION_180, Surface.ROTATION_0, + mDisplayLayout.rotateTo(mContext.getResources(), Surface.ROTATION_90); + mSpiedDisplayAreaOrganizer.setDisplayLayout(mDisplayLayout); + mSpiedDisplayAreaOrganizer.onRotateDisplay(mContext, Surface.ROTATION_0, mMockWindowContainerTransaction); - verify(mSpiedDisplayAreaOrganizer, never()).finishOffset(anyInt(), anyInt()); + + verify(mSpiedDisplayAreaOrganizer).resetWindowsOffset(mMockWindowContainerTransaction); + verify(mSpiedDisplayAreaOrganizer).finishOffset(anyInt(), anyInt()); } @Test public void testRotation_landscape_90_to_landscape_90() { when(mMockLeash.isValid()).thenReturn(false); // Rotate 90 -> 90 - mSpiedDisplayAreaOrganizer.onRotateDisplay(Surface.ROTATION_90, Surface.ROTATION_90, + mDisplayLayout.rotateTo(mContext.getResources(), Surface.ROTATION_90); + mSpiedDisplayAreaOrganizer.setDisplayLayout(mDisplayLayout); + mSpiedDisplayAreaOrganizer.onRotateDisplay(mContext, Surface.ROTATION_90, + mMockWindowContainerTransaction); + + verify(mSpiedDisplayAreaOrganizer, never()).resetWindowsOffset( mMockWindowContainerTransaction); verify(mSpiedDisplayAreaOrganizer, never()).finishOffset(anyInt(), anyInt()); } @@ -298,26 +343,60 @@ public class OneHandedDisplayAreaOrganizerTest extends OneHandedTestCase { public void testRotation_landscape_90_to_seascape_270() { when(mMockLeash.isValid()).thenReturn(false); // Rotate 90 -> 270 - mSpiedDisplayAreaOrganizer.onRotateDisplay(Surface.ROTATION_90, Surface.ROTATION_270, + mDisplayLayout.rotateTo(mContext.getResources(), Surface.ROTATION_90); + mSpiedDisplayAreaOrganizer.setDisplayLayout(mDisplayLayout); + mSpiedDisplayAreaOrganizer.onRotateDisplay(mContext, Surface.ROTATION_270, mMockWindowContainerTransaction); - verify(mSpiedDisplayAreaOrganizer, never()).finishOffset(anyInt(), anyInt()); + + verify(mSpiedDisplayAreaOrganizer).resetWindowsOffset(mMockWindowContainerTransaction); + verify(mSpiedDisplayAreaOrganizer).finishOffset(anyInt(), anyInt()); } @Test public void testRotation_seascape_270_to_seascape_270() { when(mMockLeash.isValid()).thenReturn(false); // Rotate 270 -> 270 - mSpiedDisplayAreaOrganizer.onRotateDisplay(Surface.ROTATION_270, Surface.ROTATION_270, + mDisplayLayout.rotateTo(mContext.getResources(), Surface.ROTATION_270); + mSpiedDisplayAreaOrganizer.setDisplayLayout(mDisplayLayout); + mSpiedDisplayAreaOrganizer.onRotateDisplay(mContext, Surface.ROTATION_270, + mMockWindowContainerTransaction); + + verify(mSpiedDisplayAreaOrganizer, never()).resetWindowsOffset( mMockWindowContainerTransaction); verify(mSpiedDisplayAreaOrganizer, never()).finishOffset(anyInt(), anyInt()); } @Test - public void testRotation_seascape_90_to_landscape_90() { + public void testRotation_seascape_270_to_landscape_90() { when(mMockLeash.isValid()).thenReturn(false); // Rotate 270 -> 90 - mSpiedDisplayAreaOrganizer.onRotateDisplay(Surface.ROTATION_270, Surface.ROTATION_90, + mDisplayLayout.rotateTo(mContext.getResources(), Surface.ROTATION_270); + mSpiedDisplayAreaOrganizer.setDisplayLayout(mDisplayLayout); + mSpiedDisplayAreaOrganizer.onRotateDisplay(mContext, Surface.ROTATION_90, mMockWindowContainerTransaction); - verify(mSpiedDisplayAreaOrganizer, never()).finishOffset(anyInt(), anyInt()); + + verify(mSpiedDisplayAreaOrganizer).resetWindowsOffset( + mMockWindowContainerTransaction); + verify(mSpiedDisplayAreaOrganizer).finishOffset(anyInt(), anyInt()); + } + + @Test + public void testTriggerOffset() { + final Rect testBounds = mSpiedDisplayAreaOrganizer.getLastDisplayBounds(); + final int offset = 100; + testBounds.offsetTo(0, offset); + mSpiedDisplayAreaOrganizer.finishOffset(offset, TRANSITION_DIRECTION_TRIGGER); + + assertThat(mSpiedDisplayAreaOrganizer.getLastDisplayBounds()).isEqualTo(testBounds); + } + + @Test + public void testExitOffsetToZero() { + final Rect testBounds = mSpiedDisplayAreaOrganizer.getLastDisplayBounds(); + final int offset = 100; + mSpiedDisplayAreaOrganizer.finishOffset(offset, TRANSITION_DIRECTION_TRIGGER); + mSpiedDisplayAreaOrganizer.finishOffset(0, TRANSITION_DIRECTION_EXIT); + + assertThat(mSpiedDisplayAreaOrganizer.getLastDisplayBounds()).isEqualTo(testBounds); } } diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedGestureHandlerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedGestureHandlerTest.java index f683e4af41bd..5d82a700545c 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedGestureHandlerTest.java +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedGestureHandlerTest.java @@ -16,21 +16,19 @@ package com.android.wm.shell.onehanded; -import static android.view.Display.DEFAULT_DISPLAY; - import static com.google.common.truth.Truth.assertThat; -import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.testing.AndroidTestingRunner; import android.view.Surface; import android.view.ViewConfiguration; -import android.window.WindowContainerTransaction; import androidx.test.filters.SmallTest; -import com.android.wm.shell.common.DisplayController; import com.android.wm.shell.common.DisplayLayout; import com.android.wm.shell.common.ShellExecutor; @@ -44,24 +42,20 @@ import org.mockito.MockitoAnnotations; @RunWith(AndroidTestingRunner.class) public class OneHandedGestureHandlerTest extends OneHandedTestCase { OneHandedGestureHandler mGestureHandler; - @Mock - DisplayController mMockDisplayController; + DisplayLayout mDisplayLayout; @Mock DisplayLayout mMockDisplayLayout; @Mock ShellExecutor mMockShellMainExecutor; - @Mock - WindowContainerTransaction mMockWct; @Before public void setUp() { final int mockNavBarHeight = 100; MockitoAnnotations.initMocks(this); - mGestureHandler = new OneHandedGestureHandler(mContext, mWindowManager, - mMockDisplayController, ViewConfiguration.get(mTestContext), - mMockShellMainExecutor); + mDisplayLayout = new DisplayLayout(mContext, mContext.getDisplay()); + mGestureHandler = new OneHandedGestureHandler(mContext, mDisplayLayout, + ViewConfiguration.get(mTestContext), mMockShellMainExecutor); when(mMockDisplayLayout.navBarFrameHeight()).thenReturn(mockNavBarHeight); - when(mMockDisplayController.getDisplayLayout(anyInt())).thenReturn(mMockDisplayLayout); } @Test @@ -81,7 +75,7 @@ public class OneHandedGestureHandlerTest extends OneHandedTestCase { @Test public void testOneHandedDisabled_shouldDisposeInputChannel() { - mGestureHandler.onOneHandedEnabled(false); + mGestureHandler.onGestureEnabled(false); assertThat(mGestureHandler.mInputMonitor).isNull(); assertThat(mGestureHandler.mInputEventReceiver).isNull(); @@ -89,7 +83,7 @@ public class OneHandedGestureHandlerTest extends OneHandedTestCase { @Test public void testChangeNavBarToNon3Button_shouldDisposeInputChannel() { - mGestureHandler.onOneHandedEnabled(true); + mGestureHandler.onGestureEnabled(true); mGestureHandler.onThreeButtonModeEnabled(false); assertThat(mGestureHandler.mInputMonitor).isNull(); @@ -98,11 +92,38 @@ public class OneHandedGestureHandlerTest extends OneHandedTestCase { @Test public void testOnlyHandleGestureInPortraitMode() { - mGestureHandler.onOneHandedEnabled(true); - mGestureHandler.onRotateDisplay(DEFAULT_DISPLAY, Surface.ROTATION_0, Surface.ROTATION_90, - mMockWct); + mDisplayLayout.rotateTo(mContext.getResources(), Surface.ROTATION_90); + mGestureHandler.onGestureEnabled(true); + mGestureHandler.onRotateDisplay(mDisplayLayout); assertThat(mGestureHandler.mInputMonitor).isNull(); assertThat(mGestureHandler.mInputEventReceiver).isNull(); } + + @Test + public void testRotation90ShouldNotRegisterEventReceiver() throws InterruptedException { + mDisplayLayout.rotateTo(mContext.getResources(), Surface.ROTATION_90); + mGestureHandler.onGestureEnabled(true); + mGestureHandler.onRotateDisplay(mDisplayLayout); + + verify(mMockShellMainExecutor, never()).executeBlocking(any()); + } + + @Test + public void testRotation180ShouldNotRegisterEventReceiver() throws InterruptedException { + mDisplayLayout.rotateTo(mContext.getResources(), Surface.ROTATION_180); + mGestureHandler.onGestureEnabled(true); + mGestureHandler.onRotateDisplay(mDisplayLayout); + + verify(mMockShellMainExecutor, never()).executeBlocking(any()); + } + + @Test + public void testRotation270ShouldNotRegisterEventReceiver() throws InterruptedException { + mDisplayLayout.rotateTo(mContext.getResources(), Surface.ROTATION_270); + mGestureHandler.onGestureEnabled(true); + mGestureHandler.onRotateDisplay(mDisplayLayout); + + verify(mMockShellMainExecutor, never()).executeBlocking(any()); + } } diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedTutorialHandlerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedTutorialHandlerTest.java index f586dda145d7..2886bb1e905a 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedTutorialHandlerTest.java +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedTutorialHandlerTest.java @@ -75,7 +75,6 @@ public class OneHandedTutorialHandlerTest extends OneHandedTestCase { when(mMockDisplayAreaOrganizer.getDisplayAreaTokenMap()).thenReturn(new ArrayMap<>()); mOneHandedController = new OneHandedController( mContext, - mWindowManager, mMockDisplayController, mMockBackgroundOrganizer, mMockDisplayAreaOrganizer, diff --git a/location/java/android/location/SatellitePvt.java b/location/java/android/location/SatellitePvt.java index 144fa1341bd6..27c7eda1dae3 100644 --- a/location/java/android/location/SatellitePvt.java +++ b/location/java/android/location/SatellitePvt.java @@ -25,8 +25,9 @@ import android.os.Parcelable; /** * A class that contains GNSS satellite position, velocity and time information at the - * signal transmission time {@link GnssMeasurement#getReceivedSvTimeNanos()}. + * same signal transmission time {@link GnssMeasurement#getReceivedSvTimeNanos()}. * + * <p>The position and velocity must be in ECEF coordinates. * @hide */ @SystemApi @@ -39,6 +40,9 @@ public final class SatellitePvt implements Parcelable { /** * Class containing estimates of the satellite position fields in ECEF coordinate frame. + * + * <p>The satellite position must be defined at the time of transmission of the signal + * receivedSvTimeNs. */ public static final class PositionEcef implements Parcelable { private final double mXMeters; @@ -133,6 +137,9 @@ public final class SatellitePvt implements Parcelable { /** * Class containing estimates of the satellite velocity fields in the ECEF coordinate frame. + * + * <p>The satellite velocity must be defined at the time of transmission of the signal + * receivedSvTimeNs. */ public static final class VelocityEcef implements Parcelable { private final double mXMetersPerSecond; diff --git a/media/java/android/media/AudioDescriptor.java b/media/java/android/media/AudioDescriptor.java new file mode 100644 index 000000000000..11371b11e905 --- /dev/null +++ b/media/java/android/media/AudioDescriptor.java @@ -0,0 +1,90 @@ +/* + * Copyright (C) 2021 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.media; + +import android.annotation.IntDef; +import android.annotation.NonNull; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +/** + * The AudioDescriptor contains the information to describe the audio playback/capture + * capabilities. The capabilities are described by a byte array, which is defined by a + * particular standard. This is used when the format is unrecognized to the platform. + */ +public class AudioDescriptor { + /** + * The audio standard is not specified. + */ + public static final int STANDARD_NONE = 0; + /** + * The Extended Display Identification Data (EDID) standard for a short audio descriptor. + */ + public static final int STANDARD_EDID = 1; + + /** @hide */ + @IntDef({ + STANDARD_NONE, + STANDARD_EDID, + }) + @Retention(RetentionPolicy.SOURCE) + public @interface AudioDescriptorStandard {} + + private final int mStandard; + private final byte[] mDescriptor; + private final int mEncapsulationType; + + AudioDescriptor(int standard, int encapsulationType, @NonNull byte[] descriptor) { + mStandard = standard; + mEncapsulationType = encapsulationType; + mDescriptor = descriptor; + } + + /** + * @return the standard that defines audio playback/capture capabilities. + */ + public @AudioDescriptorStandard int getStandard() { + return mStandard; + } + + /** + * @return a byte array that describes audio playback/capture capabilities as encoded by the + * standard for this AudioDescriptor. + */ + public @NonNull byte[] getDescriptor() { + return mDescriptor; + } + + /** + * The encapsulation type indicates what encapsulation type is required when the framework is + * using this extra audio descriptor for playing to a device exposing this audio profile. + * When encapsulation is required, only playback with {@link android.media.AudioTrack} API is + * supported. But playback with {@link android.media.MediaPlayer} is not. + * When an encapsulation type is required, the {@link AudioFormat} encoding selected when + * creating the {@link AudioTrack} must match the encapsulation type, e.g + * AudioFormat#ENCODING_IEC61937 for AudioProfile.AUDIO_ENCAPSULATION_TYPE_IEC61937. + * + * @return an integer representing the encapsulation type + * + * @see AudioProfile#AUDIO_ENCAPSULATION_TYPE_NONE + * @see AudioProfile#AUDIO_ENCAPSULATION_TYPE_IEC61937 + */ + public @AudioProfile.EncapsulationType int getEncapsulationType() { + return mEncapsulationType; + } +} diff --git a/media/java/android/media/AudioDeviceInfo.java b/media/java/android/media/AudioDeviceInfo.java index 383c93d7716d..9300f13e03cb 100644 --- a/media/java/android/media/AudioDeviceInfo.java +++ b/media/java/android/media/AudioDeviceInfo.java @@ -519,6 +519,13 @@ public final class AudioDeviceInfo { } /** + * @return A list of {@link AudioDescriptor} supported by the audio devices. + */ + public @NonNull List<AudioDescriptor> getAudioDescriptors() { + return mPort.audioDescriptors(); + } + + /** * Returns an array of supported encapsulation modes for the device. * * The array can include any of the {@code AudioTrack} encapsulation modes, diff --git a/media/java/android/media/AudioDevicePort.java b/media/java/android/media/AudioDevicePort.java index 9c42bf7e5605..ebe08822a0c9 100644 --- a/media/java/android/media/AudioDevicePort.java +++ b/media/java/android/media/AudioDevicePort.java @@ -60,10 +60,11 @@ public class AudioDevicePort extends AudioPort { AudioDevicePort(AudioHandle handle, String deviceName, List<AudioProfile> profiles, AudioGain[] gains, int type, String address, int[] encapsulationModes, - @AudioTrack.EncapsulationMetadataType int[] encapsulationMetadataTypes) { + @AudioTrack.EncapsulationMetadataType int[] encapsulationMetadataTypes, + List<AudioDescriptor> descriptors) { super(handle, AudioManager.isInputDevice(type) ? AudioPort.ROLE_SOURCE : AudioPort.ROLE_SINK, - deviceName, profiles, gains); + deviceName, profiles, gains, descriptors); mType = type; mAddress = address; mEncapsulationModes = encapsulationModes; diff --git a/media/java/android/media/AudioMixPort.java b/media/java/android/media/AudioMixPort.java index 7f2249d05ec2..b24268ab0357 100644 --- a/media/java/android/media/AudioMixPort.java +++ b/media/java/android/media/AudioMixPort.java @@ -46,7 +46,7 @@ public class AudioMixPort extends AudioPort { AudioMixPort(AudioHandle handle, int ioHandle, int role, String deviceName, List<AudioProfile> profiles, AudioGain[] gains) { - super(handle, role, deviceName, profiles, gains); + super(handle, role, deviceName, profiles, gains, null); mIoHandle = ioHandle; } diff --git a/media/java/android/media/AudioPort.java b/media/java/android/media/AudioPort.java index 03022501fbca..8a2d096c31d3 100644 --- a/media/java/android/media/AudioPort.java +++ b/media/java/android/media/AudioPort.java @@ -86,6 +86,7 @@ public class AudioPort { private final int[] mChannelIndexMasks; private final int[] mFormats; private final List<AudioProfile> mProfiles; + private final List<AudioDescriptor> mDescriptors; @UnsupportedAppUsage private final AudioGain[] mGains; @UnsupportedAppUsage @@ -107,17 +108,21 @@ public class AudioPort { if (mFormats != null) { for (int format : mFormats) { mProfiles.add(new AudioProfile( - format, samplingRates, channelMasks, channelIndexMasks)); + format, samplingRates, channelMasks, channelIndexMasks, + AudioProfile.AUDIO_ENCAPSULATION_TYPE_NONE)); } } + mDescriptors = new ArrayList<>(); } AudioPort(AudioHandle handle, int role, String name, - List<AudioProfile> profiles, AudioGain[] gains) { + List<AudioProfile> profiles, AudioGain[] gains, + List<AudioDescriptor> descriptors) { mHandle = handle; mRole = role; mName = name; mProfiles = profiles; + mDescriptors = descriptors; mGains = gains; Set<Integer> formats = new HashSet<>(); Set<Integer> samplingRates = new HashSet<>(); @@ -210,6 +215,13 @@ public class AudioPort { } /** + * Get the list of audio descriptor + */ + public List<AudioDescriptor> audioDescriptors() { + return mDescriptors; + } + + /** * Get the list of gain descriptors * Empty array if this port does not have gain control */ diff --git a/media/java/android/media/AudioProfile.java b/media/java/android/media/AudioProfile.java index ac96e6f80a5a..ae8d0a5ad4ab 100644 --- a/media/java/android/media/AudioProfile.java +++ b/media/java/android/media/AudioProfile.java @@ -16,27 +16,55 @@ package android.media; +import android.annotation.IntDef; import android.annotation.NonNull; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; import java.util.Arrays; import java.util.stream.Collectors; /** * An AudioProfile is specific to an audio format and lists supported sampling rates and * channel masks for that format. An {@link AudioDeviceInfo} has a list of supported AudioProfiles. + * There can be multiple profiles whose encoding format is the same. This usually happens when + * an encoding format is only supported when it is encapsulated by some particular encapsulation + * types. If there are multiple encapsulation types that can carry this encoding format, they will + * be reported in different audio profiles. The application can choose any of the encapsulation + * types. */ public class AudioProfile { + /** + * No encapsulation type is specified. + */ + public static final int AUDIO_ENCAPSULATION_TYPE_NONE = 0; + /** + * Encapsulation format is defined in standard IEC 61937. + */ + public static final int AUDIO_ENCAPSULATION_TYPE_IEC61937 = 1; + + /** @hide */ + @IntDef({ + AUDIO_ENCAPSULATION_TYPE_NONE, + AUDIO_ENCAPSULATION_TYPE_IEC61937, + }) + @Retention(RetentionPolicy.SOURCE) + public @interface EncapsulationType {} + private final int mFormat; private final int[] mSamplingRates; private final int[] mChannelMasks; private final int[] mChannelIndexMasks; + private final int mEncapsulationType; AudioProfile(int format, @NonNull int[] samplingRates, @NonNull int[] channelMasks, - @NonNull int[] channelIndexMasks) { + @NonNull int[] channelIndexMasks, + int encapsulationType) { mFormat = format; mSamplingRates = samplingRates; mChannelMasks = channelMasks; mChannelIndexMasks = channelIndexMasks; + mEncapsulationType = encapsulationType; } /** @@ -67,6 +95,24 @@ public class AudioProfile { return mSamplingRates; } + /** + * The encapsulation type indicates what encapsulation type is required when the framework is + * using this format when playing to a device exposing this audio profile. + * When encapsulation is required, only playback with {@link android.media.AudioTrack} API is + * supported. But playback with {@link android.media.MediaPlayer} is not. + * When an encapsulation type is required, the {@link AudioFormat} encoding selected when + * creating the {@link AudioTrack} must match the encapsulation type, e.g + * AudioFormat.ENCODING_IEC61937 for AUDIO_ENCAPSULATION_TYPE_IEC61937. + * + * @return an integer representing the encapsulation type + * + * @see #AUDIO_ENCAPSULATION_TYPE_NONE + * @see #AUDIO_ENCAPSULATION_TYPE_IEC61937 + */ + public @EncapsulationType int getEncapsulationType() { + return mEncapsulationType; + } + @Override public String toString() { StringBuilder sb = new StringBuilder("{"); diff --git a/packages/CompanionDeviceManager/res/values-da/strings.xml b/packages/CompanionDeviceManager/res/values-da/strings.xml index c00da76a8daf..522e644d4e4b 100644 --- a/packages/CompanionDeviceManager/res/values-da/strings.xml +++ b/packages/CompanionDeviceManager/res/values-da/strings.xml @@ -16,7 +16,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_label" msgid="4470785958457506021">"Medfølgende enhedshåndtering"</string> + <string name="app_label" msgid="4470785958457506021">"Medfølgende enhedsadministrator"</string> <string name="chooser_title" msgid="2262294130493605839">"Vælg den enhed (<xliff:g id="PROFILE_NAME">%1$s</xliff:g>), som skal administreres af <strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong>"</string> <string name="profile_name_generic" msgid="6851028682723034988">"enhed"</string> <string name="profile_name_watch" msgid="576290739483672360">"ur"</string> diff --git a/packages/CompanionDeviceManager/res/values-de/strings.xml b/packages/CompanionDeviceManager/res/values-de/strings.xml index 5133bd241a1c..2caa3a97cd0a 100644 --- a/packages/CompanionDeviceManager/res/values-de/strings.xml +++ b/packages/CompanionDeviceManager/res/values-de/strings.xml @@ -20,7 +20,7 @@ <string name="chooser_title" msgid="2262294130493605839">"Gerät (<xliff:g id="PROFILE_NAME">%1$s</xliff:g>) auswählen, das von <strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong> verwaltet werden soll"</string> <string name="profile_name_generic" msgid="6851028682723034988">"Gerät"</string> <string name="profile_name_watch" msgid="576290739483672360">"Smartwatch"</string> - <string name="confirmation_title" msgid="8455544820286920304">"Zulassen, dass <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> dein Gerät <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong> verwalten kann"</string> + <string name="confirmation_title" msgid="8455544820286920304">"Zulassen, dass <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> dein Gerät <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong> verwalten darf"</string> <string name="profile_summary" msgid="2059360676631420073">"Diese App wird zur Verwaltung des Profils „<xliff:g id="PROFILE_NAME">%1$s</xliff:g>“ benötigt. <xliff:g id="PRIVILEGES_DISCPLAIMER">%2$s</xliff:g>"</string> <string name="consent_yes" msgid="8344487259618762872">"Zulassen"</string> <string name="consent_no" msgid="2640796915611404382">"Nicht zulassen"</string> diff --git a/packages/CompanionDeviceManager/res/values-eu/strings.xml b/packages/CompanionDeviceManager/res/values-eu/strings.xml index 226efed79adb..764505e52959 100644 --- a/packages/CompanionDeviceManager/res/values-eu/strings.xml +++ b/packages/CompanionDeviceManager/res/values-eu/strings.xml @@ -20,7 +20,7 @@ <string name="chooser_title" msgid="2262294130493605839">"Aukeratu <strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong> aplikazioak kudeatu beharreko <xliff:g id="PROFILE_NAME">%1$s</xliff:g>"</string> <string name="profile_name_generic" msgid="6851028682723034988">"gailua"</string> <string name="profile_name_watch" msgid="576290739483672360">"erlojua"</string> - <string name="confirmation_title" msgid="8455544820286920304">"Eman baimena <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> aplikazioari <strong><<xliff:g id="DEVICE_NAME">%2$s</xliff:g>strong>) kudea dezan"</string> + <string name="confirmation_title" msgid="8455544820286920304">"Eman <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong> kudeatzeko baimena <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> aplikazioari"</string> <string name="profile_summary" msgid="2059360676631420073">"Aplikazioa <xliff:g id="PROFILE_NAME">%1$s</xliff:g> kudeatzeko beharrezkoa da. <xliff:g id="PRIVILEGES_DISCPLAIMER">%2$s</xliff:g>"</string> <string name="consent_yes" msgid="8344487259618762872">"Eman baimena"</string> <string name="consent_no" msgid="2640796915611404382">"Ez eman baimenik"</string> diff --git a/packages/CompanionDeviceManager/res/values-mr/strings.xml b/packages/CompanionDeviceManager/res/values-mr/strings.xml index cecddf22b654..ca86d76f3bb7 100644 --- a/packages/CompanionDeviceManager/res/values-mr/strings.xml +++ b/packages/CompanionDeviceManager/res/values-mr/strings.xml @@ -20,8 +20,7 @@ <string name="chooser_title" msgid="2262294130493605839">"<strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong> द्वारे व्यवस्थापित करण्यासाठी <xliff:g id="PROFILE_NAME">%1$s</xliff:g> निवडा"</string> <string name="profile_name_generic" msgid="6851028682723034988">"डिव्हाइस"</string> <string name="profile_name_watch" msgid="576290739483672360">"पाहा"</string> - <!-- no translation found for confirmation_title (8455544820286920304) --> - <skip /> + <string name="confirmation_title" msgid="8455544820286920304">"तुमचे <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong> व्यवस्थापित करण्यासाठी <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> ला अनुमती द्या"</string> <string name="profile_summary" msgid="2059360676631420073">"तुमची <xliff:g id="PROFILE_NAME">%1$s</xliff:g> प्रोफाइल व्यवस्थापित करण्यासाठी हे ॲप आवश्यक आहे. <xliff:g id="PRIVILEGES_DISCPLAIMER">%2$s</xliff:g>"</string> <string name="consent_yes" msgid="8344487259618762872">"अनुमती द्या"</string> <string name="consent_no" msgid="2640796915611404382">"अनुमती देऊ नका"</string> diff --git a/packages/CompanionDeviceManager/res/values-pa/strings.xml b/packages/CompanionDeviceManager/res/values-pa/strings.xml index bf1aca8701d6..54f4f8c42302 100644 --- a/packages/CompanionDeviceManager/res/values-pa/strings.xml +++ b/packages/CompanionDeviceManager/res/values-pa/strings.xml @@ -20,8 +20,7 @@ <string name="chooser_title" msgid="2262294130493605839">"<strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong> ਵੱਲੋਂ ਪ੍ਰਬੰਧਿਤ ਕੀਤੇ ਜਾਣ ਲਈ <xliff:g id="PROFILE_NAME">%1$s</xliff:g> ਚੁਣੋ"</string> <string name="profile_name_generic" msgid="6851028682723034988">"ਡੀਵਾਈਸ"</string> <string name="profile_name_watch" msgid="576290739483672360">"ਸਮਾਰਟ-ਵਾਚ"</string> - <!-- no translation found for confirmation_title (8455544820286920304) --> - <skip /> + <string name="confirmation_title" msgid="8455544820286920304">"<strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> ਨੂੰ ਤੁਹਾਡੇ <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong> ਦਾ ਪ੍ਰਬੰਧਨ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਦਿਓ"</string> <string name="profile_summary" msgid="2059360676631420073">"ਤੁਹਾਡੇ <xliff:g id="PROFILE_NAME">%1$s</xliff:g> ਦਾ ਪ੍ਰਬੰਧਨ ਕਰਨ ਲਈ ਇਹ ਐਪ ਲੋੜੀਂਦੀ ਹੈ। <xliff:g id="PRIVILEGES_DISCPLAIMER">%2$s</xliff:g>"</string> <string name="consent_yes" msgid="8344487259618762872">"ਇਜਾਜ਼ਤ ਦਿਓ"</string> <string name="consent_no" msgid="2640796915611404382">"ਇਜਾਜ਼ਤ ਨਾ ਦਿਓ"</string> diff --git a/packages/CompanionDeviceManager/res/values-te/strings.xml b/packages/CompanionDeviceManager/res/values-te/strings.xml index be128cf45f58..c855cf2a8501 100644 --- a/packages/CompanionDeviceManager/res/values-te/strings.xml +++ b/packages/CompanionDeviceManager/res/values-te/strings.xml @@ -20,8 +20,7 @@ <string name="chooser_title" msgid="2262294130493605839">"<strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong> ద్వారా మేనేజ్ చేయబడటానికి ఒక <xliff:g id="PROFILE_NAME">%1$s</xliff:g>ను ఎంచుకోండి"</string> <string name="profile_name_generic" msgid="6851028682723034988">"పరికరం"</string> <string name="profile_name_watch" msgid="576290739483672360">"వాచ్"</string> - <!-- no translation found for confirmation_title (8455544820286920304) --> - <skip /> + <string name="confirmation_title" msgid="8455544820286920304">"మీ <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>ను మేనేజ్ చేయడానికి <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong>ను అనుమతించండి;"</string> <string name="profile_summary" msgid="2059360676631420073">"మీ <xliff:g id="PROFILE_NAME">%1$s</xliff:g>ను మేనేజ్ చేయడానికి ఈ యాప్ అవసరం. <xliff:g id="PRIVILEGES_DISCPLAIMER">%2$s</xliff:g>"</string> <string name="consent_yes" msgid="8344487259618762872">"అనుమతించు"</string> <string name="consent_no" msgid="2640796915611404382">"అనుమతించవద్దు"</string> diff --git a/packages/CompanionDeviceManager/res/values-zh-rHK/strings.xml b/packages/CompanionDeviceManager/res/values-zh-rHK/strings.xml index 15e81a975b85..2e81a1736876 100644 --- a/packages/CompanionDeviceManager/res/values-zh-rHK/strings.xml +++ b/packages/CompanionDeviceManager/res/values-zh-rHK/strings.xml @@ -16,7 +16,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_label" msgid="4470785958457506021">"隨附裝置管理員"</string> + <string name="app_label" msgid="4470785958457506021">"隨附裝置管理工具"</string> <string name="chooser_title" msgid="2262294130493605839">"選擇由 <strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong> 管理的<xliff:g id="PROFILE_NAME">%1$s</xliff:g>"</string> <string name="profile_name_generic" msgid="6851028682723034988">"裝置"</string> <string name="profile_name_watch" msgid="576290739483672360">"手錶"</string> diff --git a/packages/Connectivity/framework/api/module-lib-current.txt b/packages/Connectivity/framework/api/module-lib-current.txt index 0cc8c239cb94..970a2369d1ac 100644 --- a/packages/Connectivity/framework/api/module-lib-current.txt +++ b/packages/Connectivity/framework/api/module-lib-current.txt @@ -31,10 +31,12 @@ package android.net { field public static final String ACTION_PROMPT_UNVALIDATED = "android.net.action.PROMPT_UNVALIDATED"; field public static final int BLOCKED_METERED_REASON_ADMIN_DISABLED = 262144; // 0x40000 field public static final int BLOCKED_METERED_REASON_DATA_SAVER = 65536; // 0x10000 + field public static final int BLOCKED_METERED_REASON_MASK = -65536; // 0xffff0000 field public static final int BLOCKED_METERED_REASON_USER_RESTRICTED = 131072; // 0x20000 field public static final int BLOCKED_REASON_APP_STANDBY = 4; // 0x4 field public static final int BLOCKED_REASON_BATTERY_SAVER = 1; // 0x1 field public static final int BLOCKED_REASON_DOZE = 2; // 0x2 + field public static final int BLOCKED_REASON_LOCKDOWN_VPN = 16; // 0x10 field public static final int BLOCKED_REASON_NONE = 0; // 0x0 field public static final int BLOCKED_REASON_RESTRICTED_MODE = 8; // 0x8 field public static final String PRIVATE_DNS_MODE_OFF = "off"; @@ -44,6 +46,10 @@ package android.net { field public static final int PROFILE_NETWORK_PREFERENCE_ENTERPRISE = 1; // 0x1 } + public static class ConnectivityManager.NetworkCallback { + method public void onBlockedStatusChanged(@NonNull android.net.Network, int); + } + public class ConnectivitySettingsManager { method public static void clearGlobalProxy(@NonNull android.content.Context); method @Nullable public static String getCaptivePortalHttpUrl(@NonNull android.content.Context); diff --git a/packages/Connectivity/framework/api/system-current.txt b/packages/Connectivity/framework/api/system-current.txt index 593698e097cd..95df8b8192a6 100644 --- a/packages/Connectivity/framework/api/system-current.txt +++ b/packages/Connectivity/framework/api/system-current.txt @@ -277,11 +277,13 @@ package android.net { method @NonNull public int[] getTransportTypes(); method public boolean isPrivateDnsBroken(); method public boolean satisfiedByNetworkCapabilities(@Nullable android.net.NetworkCapabilities); + field public static final int NET_CAPABILITY_BIP = 31; // 0x1f field public static final int NET_CAPABILITY_NOT_VCN_MANAGED = 28; // 0x1c field public static final int NET_CAPABILITY_OEM_PAID = 22; // 0x16 field public static final int NET_CAPABILITY_OEM_PRIVATE = 26; // 0x1a field public static final int NET_CAPABILITY_PARTIAL_CONNECTIVITY = 24; // 0x18 field public static final int NET_CAPABILITY_VEHICLE_INTERNAL = 27; // 0x1b + field public static final int NET_CAPABILITY_VSIM = 30; // 0x1e } public static final class NetworkCapabilities.Builder { @@ -312,9 +314,16 @@ package android.net { method public int getProviderId(); method public void onNetworkRequestWithdrawn(@NonNull android.net.NetworkRequest); method public void onNetworkRequested(@NonNull android.net.NetworkRequest, @IntRange(from=0, to=99) int, int); + method @RequiresPermission(android.Manifest.permission.NETWORK_FACTORY) public void registerNetworkOffer(@NonNull android.net.NetworkScore, @NonNull android.net.NetworkCapabilities, @NonNull java.util.concurrent.Executor, @NonNull android.net.NetworkProvider.NetworkOfferCallback); + method @RequiresPermission(android.Manifest.permission.NETWORK_FACTORY) public void unregisterNetworkOffer(@NonNull android.net.NetworkProvider.NetworkOfferCallback); field public static final int ID_NONE = -1; // 0xffffffff } + public static interface NetworkProvider.NetworkOfferCallback { + method public void onNetworkNeeded(@NonNull android.net.NetworkRequest); + method public void onNetworkUnneeded(@NonNull android.net.NetworkRequest); + } + public class NetworkReleasedException extends java.lang.Exception { } @@ -329,14 +338,18 @@ package android.net { public final class NetworkScore implements android.os.Parcelable { method public int describeContents(); + method public int getKeepConnectedReason(); method public int getLegacyInt(); method public void writeToParcel(@NonNull android.os.Parcel, int); field @NonNull public static final android.os.Parcelable.Creator<android.net.NetworkScore> CREATOR; + field public static final int KEEP_CONNECTED_FOR_HANDOVER = 1; // 0x1 + field public static final int KEEP_CONNECTED_NONE = 0; // 0x0 } public static final class NetworkScore.Builder { ctor public NetworkScore.Builder(); method @NonNull public android.net.NetworkScore build(); + method @NonNull public android.net.NetworkScore.Builder setKeepConnectedReason(int); method @NonNull public android.net.NetworkScore.Builder setLegacyInt(int); } diff --git a/packages/Connectivity/framework/src/android/net/ConnectivityManager.java b/packages/Connectivity/framework/src/android/net/ConnectivityManager.java index a9f8b8dda340..3939c7f44102 100644 --- a/packages/Connectivity/framework/src/android/net/ConnectivityManager.java +++ b/packages/Connectivity/framework/src/android/net/ConnectivityManager.java @@ -38,7 +38,9 @@ import android.annotation.SuppressLint; import android.annotation.SystemApi; import android.annotation.SystemService; import android.app.PendingIntent; +import android.app.admin.DevicePolicyManager; import android.compat.annotation.UnsupportedAppUsage; +import android.content.ComponentName; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; @@ -875,6 +877,17 @@ public class ConnectivityManager { public static final int BLOCKED_REASON_RESTRICTED_MODE = 1 << 3; /** + * Flag to indicate that an app is blocked because it is subject to an always-on VPN but the VPN + * is not currently connected. + * + * @see DevicePolicyManager#setAlwaysOnVpnPackage(ComponentName, String, boolean) + * + * @hide + */ + @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES) + public static final int BLOCKED_REASON_LOCKDOWN_VPN = 1 << 4; + + /** * Flag to indicate that an app is subject to Data saver restrictions that would * result in its metered network access being blocked. * @@ -917,6 +930,14 @@ public class ConnectivityManager { }) public @interface BlockedReason {} + /** + * Set of blocked reasons that are only applicable on metered networks. + * + * @hide + */ + @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES) + public static final int BLOCKED_METERED_REASON_MASK = 0xffff0000; + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 130143562) private final IConnectivityManager mService; @@ -3345,7 +3366,7 @@ public class ConnectivityManager { * @param score The prospective score of the network. * @param caps The prospective capabilities of the network. * @param callback The callback to call when this offer is needed or unneeded. - * @hide + * @hide exposed via the NetworkProvider class. */ @RequiresPermission(anyOf = { NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, @@ -3368,7 +3389,7 @@ public class ConnectivityManager { * * @param callback The callback passed at registration time. This must be the same object * that was passed to {@link #offerNetwork} - * @hide + * @hide exposed via the NetworkProvider class. */ public void unofferNetwork(@NonNull final INetworkOfferCallback callback) { try { @@ -3498,12 +3519,30 @@ public class ConnectivityManager { * @param blocked Whether access to the {@link Network} is blocked due to system policy. * @hide */ - public void onAvailable(@NonNull Network network, + public final void onAvailable(@NonNull Network network, @NonNull NetworkCapabilities networkCapabilities, - @NonNull LinkProperties linkProperties, boolean blocked) { + @NonNull LinkProperties linkProperties, @BlockedReason int blocked) { // Internally only this method is called when a new network is available, and // it calls the callback in the same way and order that older versions used // to call so as not to change the behavior. + onAvailable(network, networkCapabilities, linkProperties, blocked != 0); + onBlockedStatusChanged(network, blocked); + } + + /** + * Legacy variant of onAvailable that takes a boolean blocked reason. + * + * This method has never been public API, but it's not final, so there may be apps that + * implemented it and rely on it being called. Do our best not to break them. + * Note: such apps will also get a second call to onBlockedStatusChanged immediately after + * this method is called. There does not seem to be a way to avoid this. + * TODO: add a compat check to move apps off this method, and eventually stop calling it. + * + * @hide + */ + public void onAvailable(@NonNull Network network, + @NonNull NetworkCapabilities networkCapabilities, + @NonNull LinkProperties linkProperties, boolean blocked) { onAvailable(network); if (!networkCapabilities.hasCapability( NetworkCapabilities.NET_CAPABILITY_NOT_SUSPENDED)) { @@ -3511,7 +3550,7 @@ public class ConnectivityManager { } onCapabilitiesChanged(network, networkCapabilities); onLinkPropertiesChanged(network, linkProperties); - onBlockedStatusChanged(network, blocked); + // No call to onBlockedStatusChanged here. That is done by the caller. } /** @@ -3675,6 +3714,26 @@ public class ConnectivityManager { */ public void onBlockedStatusChanged(@NonNull Network network, boolean blocked) {} + /** + * Called when access to the specified network is blocked or unblocked. + * + * If a NetworkCallback object implements this method, + * {@link #onBlockedStatusChanged(Network, boolean)} will not be called. + * + * <p>Do NOT call {@link #getNetworkCapabilities(Network)} or + * {@link #getLinkProperties(Network)} or other synchronous ConnectivityManager methods in + * this callback as this is prone to race conditions : calling these methods while in a + * callback may return an outdated or even a null object. + * + * @param network The {@link Network} whose blocked status has changed. + * @param blocked The blocked status of this {@link Network}. + * @hide + */ + @SystemApi(client = MODULE_LIBRARIES) + public void onBlockedStatusChanged(@NonNull Network network, @BlockedReason int blocked) { + onBlockedStatusChanged(network, blocked != 0); + } + private NetworkRequest networkRequest; private final int mFlags; } @@ -3789,7 +3848,7 @@ public class ConnectivityManager { case CALLBACK_AVAILABLE: { NetworkCapabilities cap = getObject(message, NetworkCapabilities.class); LinkProperties lp = getObject(message, LinkProperties.class); - callback.onAvailable(network, cap, lp, message.arg1 != 0); + callback.onAvailable(network, cap, lp, message.arg1); break; } case CALLBACK_LOSING: { @@ -3823,8 +3882,7 @@ public class ConnectivityManager { break; } case CALLBACK_BLK_CHANGED: { - boolean blocked = message.arg1 != 0; - callback.onBlockedStatusChanged(network, blocked); + callback.onBlockedStatusChanged(network, message.arg1); } } } diff --git a/packages/Connectivity/framework/src/android/net/INetworkOfferCallback.aidl b/packages/Connectivity/framework/src/android/net/INetworkOfferCallback.aidl index a6de173fa33e..ecfba21b8ab6 100644 --- a/packages/Connectivity/framework/src/android/net/INetworkOfferCallback.aidl +++ b/packages/Connectivity/framework/src/android/net/INetworkOfferCallback.aidl @@ -51,10 +51,8 @@ oneway interface INetworkOfferCallback { /** * Called when a network for this offer is needed to fulfill this request. * @param networkRequest the request to satisfy - * @param providerId the ID of the provider currently satisfying - * this request, or NetworkProvider.ID_NONE if none. */ - void onNetworkNeeded(in NetworkRequest networkRequest, int providerId); + void onNetworkNeeded(in NetworkRequest networkRequest); /** * Informs the registrant that the offer is no longer valuable to fulfill this request. diff --git a/packages/Connectivity/framework/src/android/net/NetworkCapabilities.java b/packages/Connectivity/framework/src/android/net/NetworkCapabilities.java index f50b0187b8ad..ca69f16f4401 100644 --- a/packages/Connectivity/framework/src/android/net/NetworkCapabilities.java +++ b/packages/Connectivity/framework/src/android/net/NetworkCapabilities.java @@ -273,6 +273,8 @@ public final class NetworkCapabilities implements Parcelable { NET_CAPABILITY_VEHICLE_INTERNAL, NET_CAPABILITY_NOT_VCN_MANAGED, NET_CAPABILITY_ENTERPRISE, + NET_CAPABILITY_VSIM, + NET_CAPABILITY_BIP, }) public @interface NetCapability { } @@ -492,8 +494,22 @@ public final class NetworkCapabilities implements Parcelable { */ public static final int NET_CAPABILITY_ENTERPRISE = 29; + /** + * Indicates that this network has ability to access the carrier's Virtual Sim service. + * @hide + */ + @SystemApi + public static final int NET_CAPABILITY_VSIM = 30; + + /** + * Indicates that this network has ability to support Bearer Independent Protol. + * @hide + */ + @SystemApi + public static final int NET_CAPABILITY_BIP = 31; + private static final int MIN_NET_CAPABILITY = NET_CAPABILITY_MMS; - private static final int MAX_NET_CAPABILITY = NET_CAPABILITY_ENTERPRISE; + private static final int MAX_NET_CAPABILITY = NET_CAPABILITY_BIP; /** * Network capabilities that are expected to be mutable, i.e., can change while a particular @@ -2089,6 +2105,8 @@ public final class NetworkCapabilities implements Parcelable { case NET_CAPABILITY_VEHICLE_INTERNAL: return "VEHICLE_INTERNAL"; case NET_CAPABILITY_NOT_VCN_MANAGED: return "NOT_VCN_MANAGED"; case NET_CAPABILITY_ENTERPRISE: return "ENTERPRISE"; + case NET_CAPABILITY_VSIM: return "VSIM"; + case NET_CAPABILITY_BIP: return "BIP"; default: return Integer.toString(capability); } } diff --git a/packages/Connectivity/framework/src/android/net/NetworkProvider.java b/packages/Connectivity/framework/src/android/net/NetworkProvider.java index d859022552c1..cfb7325c1b19 100644 --- a/packages/Connectivity/framework/src/android/net/NetworkProvider.java +++ b/packages/Connectivity/framework/src/android/net/NetworkProvider.java @@ -168,12 +168,16 @@ public class NetworkProvider { } /** @hide */ - // TODO : make @SystemApi when the impl is complete + @SystemApi public interface NetworkOfferCallback { - /** Called by the system when a network for this offer is needed to satisfy some - * networking request. */ - void onNetworkNeeded(@NonNull NetworkRequest request, int providerId); - /** Called by the system when this offer is no longer valuable for this request. */ + /** + * Called by the system when a network for this offer is needed to satisfy some + * networking request. + */ + void onNetworkNeeded(@NonNull NetworkRequest request); + /** + * Called by the system when this offer is no longer valuable for this request. + */ void onNetworkUnneeded(@NonNull NetworkRequest request); } @@ -188,9 +192,8 @@ public class NetworkProvider { } @Override - public void onNetworkNeeded(final @NonNull NetworkRequest request, - final int providerId) { - mExecutor.execute(() -> callback.onNetworkNeeded(request, providerId)); + public void onNetworkNeeded(final @NonNull NetworkRequest request) { + mExecutor.execute(() -> callback.onNetworkNeeded(request)); } @Override @@ -254,8 +257,11 @@ public class NetworkProvider { * * The capabilities and score act as filters as to what requests the provider will see. * They are not promises, but for best performance, the providers should strive to put - * as much known information as possible in the offer. For capabilities in particular, it - * should put all NetworkAgent-managed capabilities a network may have, even if it doesn't + * as much known information as possible in the offer. For the score, it should put as + * strong a score as the networks will have, since this will filter what requests the + * provider sees – it's not a promise, it only serves to avoid sending requests that + * the provider can't ever hope to satisfy better than any current network. For capabilities, + * it should put all NetworkAgent-managed capabilities a network may have, even if it doesn't * have them at first. This applies to INTERNET, for example ; if a provider thinks the * network it can bring up for this offer may offer Internet access it should include the * INTERNET bit. It's fine if the brought up network ends up not actually having INTERNET. @@ -268,9 +274,9 @@ public class NetworkProvider { * * @hide */ - // TODO : make @SystemApi when the impl is complete + @SystemApi @RequiresPermission(android.Manifest.permission.NETWORK_FACTORY) - public void offerNetwork(@NonNull final NetworkScore score, + public void registerNetworkOffer(@NonNull final NetworkScore score, @NonNull final NetworkCapabilities caps, @NonNull final Executor executor, @NonNull final NetworkOfferCallback callback) { // Can't offer a network with a provider that is not yet registered or already unregistered. @@ -307,9 +313,9 @@ public class NetworkProvider { * * @hide */ - // TODO : make @SystemApi when the impl is complete + @SystemApi @RequiresPermission(android.Manifest.permission.NETWORK_FACTORY) - public void unofferNetwork(final @NonNull NetworkOfferCallback callback) { + public void unregisterNetworkOffer(final @NonNull NetworkOfferCallback callback) { final NetworkOfferCallbackProxy proxy = findProxyForCallback(callback); if (null == proxy) return; mProxies.remove(proxy); diff --git a/packages/Connectivity/framework/src/android/net/NetworkScore.java b/packages/Connectivity/framework/src/android/net/NetworkScore.java index 65849930fa4a..9786b09e3508 100644 --- a/packages/Connectivity/framework/src/android/net/NetworkScore.java +++ b/packages/Connectivity/framework/src/android/net/NetworkScore.java @@ -16,6 +16,7 @@ package android.net; +import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.SystemApi; import android.os.Parcel; @@ -23,6 +24,9 @@ import android.os.Parcelable; import com.android.internal.annotations.VisibleForTesting; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + /** * Object representing the quality of a network as perceived by the user. * @@ -36,6 +40,17 @@ public final class NetworkScore implements Parcelable { // a migration. private final int mLegacyInt; + /** @hide */ + @Retention(RetentionPolicy.SOURCE) + @IntDef(value = { + KEEP_CONNECTED_NONE, + KEEP_CONNECTED_FOR_HANDOVER + }) + public @interface KeepConnectedReason { } + + public static final int KEEP_CONNECTED_NONE = 0; + public static final int KEEP_CONNECTED_FOR_HANDOVER = 1; + // Agent-managed policies // TODO : add them here, starting from 1 /** @hide */ @@ -46,15 +61,20 @@ public final class NetworkScore implements Parcelable { // Bitmask of all the policies applied to this score. private final long mPolicies; + private final int mKeepConnectedReason; + /** @hide */ - NetworkScore(final int legacyInt, final long policies) { + NetworkScore(final int legacyInt, final long policies, + @KeepConnectedReason final int keepConnectedReason) { mLegacyInt = legacyInt; mPolicies = policies; + mKeepConnectedReason = keepConnectedReason; } private NetworkScore(@NonNull final Parcel in) { mLegacyInt = in.readInt(); mPolicies = in.readLong(); + mKeepConnectedReason = in.readInt(); } public int getLegacyInt() { @@ -62,6 +82,13 @@ public final class NetworkScore implements Parcelable { } /** + * Returns the keep-connected reason, or KEEP_CONNECTED_NONE. + */ + public int getKeepConnectedReason() { + return mKeepConnectedReason; + } + + /** * @return whether this score has a particular policy. * * @hide @@ -80,6 +107,7 @@ public final class NetworkScore implements Parcelable { public void writeToParcel(@NonNull final Parcel dest, final int flags) { dest.writeInt(mLegacyInt); dest.writeLong(mPolicies); + dest.writeInt(mKeepConnectedReason); } @Override @@ -108,6 +136,7 @@ public final class NetworkScore implements Parcelable { private static final long POLICY_NONE = 0L; private static final int INVALID_LEGACY_INT = Integer.MIN_VALUE; private int mLegacyInt = INVALID_LEGACY_INT; + private int mKeepConnectedReason = KEEP_CONNECTED_NONE; /** * Sets the legacy int for this score. @@ -124,12 +153,23 @@ public final class NetworkScore implements Parcelable { } /** + * Set the keep-connected reason. + * + * This can be reset by calling it again with {@link KEEP_CONNECTED_NONE}. + */ + @NonNull + public Builder setKeepConnectedReason(@KeepConnectedReason final int reason) { + mKeepConnectedReason = reason; + return this; + } + + /** * Builds this NetworkScore. * @return The built NetworkScore object. */ @NonNull public NetworkScore build() { - return new NetworkScore(mLegacyInt, POLICY_NONE); + return new NetworkScore(mLegacyInt, POLICY_NONE, mKeepConnectedReason); } } } diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-af/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-af/strings.xml index 68720d5d27cd..550ab8a65d0a 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-af/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-af/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"Meld aan by Wi-Fi-netwerk"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"Meld by netwerk aan"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> het geen internettoegang nie"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"Tik vir opsies"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"Selnetwerk het nie internettoegang nie"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"Netwerk het nie internettoegang nie"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"Daar kan nie by private DNS-bediener ingegaan word nie"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> het beperkte konnektiwiteit"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"Tik om in elk geval te koppel"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"Het oorgeskakel na <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"Toestel gebruik <xliff:g id="NEW_NETWORK">%1$s</xliff:g> wanneer <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> geen internettoegang het nie. Heffings kan geld."</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"Het oorgeskakel van <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> na <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"\'n onbekende netwerktipe"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"Stelselkonnektiwiteithulpbronne"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"Meld aan by Wi-Fi-netwerk"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"Meld by netwerk aan"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> het geen internettoegang nie"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"Tik vir opsies"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"Selnetwerk het nie internettoegang nie"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"Netwerk het nie internettoegang nie"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"Daar kan nie by private DNS-bediener ingegaan word nie"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> het beperkte konnektiwiteit"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"Tik om in elk geval te koppel"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"Het oorgeskakel na <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"Toestel gebruik <xliff:g id="NEW_NETWORK">%1$s</xliff:g> wanneer <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> geen internettoegang het nie. Heffings kan geld."</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"Het oorgeskakel van <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> na <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"mobiele data"</item> - <item msgid="5520925862115353992">"Wi-Fi"</item> - <item msgid="1055487873974272842">"Bluetooth"</item> - <item msgid="1616528372438698248">"Ethernet"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"mobiele data"</item> + <item msgid="6341719431034774569">"Wi-fi"</item> + <item msgid="5081440868800877512">"Bluetooth"</item> + <item msgid="1160736166977503463">"Ethernet"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"\'n onbekende netwerktipe"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-am/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-am/strings.xml index 78d928351d35..7f1a9dbe51ef 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-am/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-am/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"ወደ Wi-Fi አውታረ መረብ በመለያ ግባ"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"ወደ አውታረ መረብ በመለያ ይግቡ"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> ምንም የበይነ መረብ መዳረሻ የለም"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"ለአማራጮች መታ ያድርጉ"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"የተንቀሳቃሽ ስልክ አውታረ መረብ የበይነመረብ መዳረሻ የለውም"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"አውታረ መረብ የበይነመረብ መዳረሻ የለውም"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"የግል ዲኤንኤስ አገልጋይ ሊደረስበት አይችልም"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> የተገደበ ግንኙነት አለው"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"ለማንኛውም ለማገናኘት መታ ያድርጉ"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"ወደ <xliff:g id="NETWORK_TYPE">%1$s</xliff:g> ተቀይሯል"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"<xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> ምንም ዓይነት የበይነመረብ ግንኙነት በማይኖረው ጊዜ መሣሪያዎች <xliff:g id="NEW_NETWORK">%1$s</xliff:g>ን ይጠቀማሉ። ክፍያዎች ተፈጻሚ ሊሆኑ ይችላሉ።"</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"ከ<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> ወደ <xliff:g id="NEW_NETWORK">%2$s</xliff:g> ተቀይሯል"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"አንድ ያልታወቀ አውታረ መረብ ዓይነት"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"የስርዓት ግንኙነት መርጃዎች"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"ወደ Wi-Fi አውታረ መረብ በመለያ ግባ"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"ወደ አውታረ መረብ በመለያ ይግቡ"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> ምንም የበይነ መረብ መዳረሻ የለም"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"ለአማራጮች መታ ያድርጉ"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"የተንቀሳቃሽ ስልክ አውታረ መረብ የበይነመረብ መዳረሻ የለውም"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"አውታረ መረብ የበይነመረብ መዳረሻ የለውም"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"የግል ዲኤንኤስ አገልጋይ ሊደረስበት አይችልም"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> የተገደበ ግንኙነት አለው"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"ለማንኛውም ለማገናኘት መታ ያድርጉ"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"ወደ <xliff:g id="NETWORK_TYPE">%1$s</xliff:g> ተቀይሯል"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"<xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> ምንም ዓይነት የበይነመረብ ግንኙነት በማይኖረው ጊዜ መሣሪያዎች <xliff:g id="NEW_NETWORK">%1$s</xliff:g>ን ይጠቀማሉ። ክፍያዎች ተፈጻሚ ሊሆኑ ይችላሉ።"</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"ከ<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> ወደ <xliff:g id="NEW_NETWORK">%2$s</xliff:g> ተቀይሯል"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"የተንቀሳቃሽ ስልክ ውሂብ"</item> - <item msgid="5520925862115353992">"Wi-Fi"</item> - <item msgid="1055487873974272842">"ብሉቱዝ"</item> - <item msgid="1616528372438698248">"ኤተርኔት"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"የተንቀሳቃሽ ስልክ ውሂብ"</item> + <item msgid="6341719431034774569">"Wi-Fi"</item> + <item msgid="5081440868800877512">"ብሉቱዝ"</item> + <item msgid="1160736166977503463">"ኢተርኔት"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"አንድ ያልታወቀ አውታረ መረብ ዓይነት"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-ar/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-ar/strings.xml index 8698a7e6e127..b7a62c5e1df0 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-ar/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-ar/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"تسجيل الدخول إلى شبكة Wi-Fi"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"تسجيل الدخول إلى الشبكة"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"لا يتوفّر في <xliff:g id="NETWORK_SSID">%1$s</xliff:g> إمكانية الاتصال بالإنترنت."</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"انقر للحصول على الخيارات."</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"شبكة الجوّال هذه غير متصلة بالإنترنت"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"الشبكة غير متصلة بالإنترنت"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"لا يمكن الوصول إلى خادم أسماء نظام نطاقات خاص"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"إمكانية اتصال <xliff:g id="NETWORK_SSID">%1$s</xliff:g> محدودة."</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"يمكنك النقر للاتصال على أي حال."</string> - <string name="network_switch_metered" msgid="1531869544142283384">"تم التبديل إلى <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"يستخدم الجهاز <xliff:g id="NEW_NETWORK">%1$s</xliff:g> عندما لا يتوفر اتصال بالإنترنت في شبكة <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g>، ويمكن أن يتم فرض رسوم مقابل ذلك."</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"تم التبديل من <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> إلى <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"نوع شبكة غير معروف"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"مصادر إمكانية اتصال الخادم"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"تسجيل الدخول إلى شبكة Wi-Fi"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"تسجيل الدخول إلى الشبكة"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"لا يتوفّر في <xliff:g id="NETWORK_SSID">%1$s</xliff:g> إمكانية الاتصال بالإنترنت."</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"انقر للحصول على الخيارات."</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"شبكة الجوّال هذه غير متصلة بالإنترنت"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"الشبكة غير متصلة بالإنترنت"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"لا يمكن الوصول إلى خادم أسماء نظام نطاقات خاص"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"إمكانية اتصال <xliff:g id="NETWORK_SSID">%1$s</xliff:g> محدودة."</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"يمكنك النقر للاتصال على أي حال."</string> + <string name="network_switch_metered" msgid="2814798852883117872">"تم التبديل إلى <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"يستخدم الجهاز <xliff:g id="NEW_NETWORK">%1$s</xliff:g> عندما لا يتوفر اتصال بالإنترنت في شبكة <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g>، ويمكن أن يتم فرض رسوم مقابل ذلك."</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"تم التبديل من <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> إلى <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"بيانات الجوّال"</item> - <item msgid="5520925862115353992">"Wi-Fi"</item> - <item msgid="1055487873974272842">"بلوتوث"</item> - <item msgid="1616528372438698248">"إيثرنت"</item> - <item msgid="9177085807664964627">"شبكة افتراضية خاصة (VPN)"</item> + <item msgid="5454013645032700715">"بيانات الجوّال"</item> + <item msgid="6341719431034774569">"Wi-Fi"</item> + <item msgid="5081440868800877512">"بلوتوث"</item> + <item msgid="1160736166977503463">"إيثرنت"</item> + <item msgid="7347618872551558605">"شبكة افتراضية خاصة (VPN)"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"نوع شبكة غير معروف"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-as/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-as/strings.xml index 10b234adced6..cf8e6ac9d409 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-as/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-as/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"ৱাই-ফাই নেটৱৰ্কত ছাইন ইন কৰক"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"নেটৱৰ্কত ছাইন ইন কৰক"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g>ৰ ইণ্টাৰনেটৰ এক্সেছ নাই"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"অধিক বিকল্পৰ বাবে টিপক"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"ম’বাইল নেটৱৰ্কৰ কোনো ইণ্টাৰনেটৰ এক্সেছ নাই"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"নেটৱৰ্কৰ কোনো ইণ্টাৰনেটৰ এক্সেছ নাই"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"ব্যক্তিগত DNS ছাৰ্ভাৰ এক্সেছ কৰিব নোৱাৰি"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g>ৰ সকলো সেৱাৰ এক্সেছ নাই"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"যিকোনো প্ৰকাৰে সংযোগ কৰিবলৈ টিপক"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"<xliff:g id="NETWORK_TYPE">%1$s</xliff:g>লৈ সলনি কৰা হ’ল"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"যেতিয়া <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g>ত ইণ্টাৰনেট নাথাকে, তেতিয়া ডিভাইচে <xliff:g id="NEW_NETWORK">%1$s</xliff:g>ক ব্যৱহাৰ কৰে। মাচুল প্ৰযোজ্য হ\'ব পাৰে।"</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g>ৰ পৰা <xliff:g id="NEW_NETWORK">%2$s</xliff:g> লৈ সলনি কৰা হ’ল"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"অজ্ঞাত প্ৰকাৰৰ নেটৱৰ্ক"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"ছিষ্টেম সংযোগৰ উৎস"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"ৱাই-ফাই নেটৱৰ্কত ছাইন ইন কৰক"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"নেটৱৰ্কত ছাইন ইন কৰক"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g>ৰ ইণ্টাৰনেটৰ এক্সেছ নাই"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"অধিক বিকল্পৰ বাবে টিপক"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"ম’বাইল নেটৱৰ্কৰ কোনো ইণ্টাৰনেটৰ এক্সেছ নাই"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"নেটৱৰ্কৰ কোনো ইণ্টাৰনেটৰ এক্সেছ নাই"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"ব্যক্তিগত DNS ছাৰ্ভাৰ এক্সেছ কৰিব নোৱাৰি"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g>ৰ সকলো সেৱাৰ এক্সেছ নাই"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"যিকোনো প্ৰকাৰে সংযোগ কৰিবলৈ টিপক"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"<xliff:g id="NETWORK_TYPE">%1$s</xliff:g>লৈ সলনি কৰা হ’ল"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"যেতিয়া <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g>ত ইণ্টাৰনেট নাথাকে, তেতিয়া ডিভাইচে <xliff:g id="NEW_NETWORK">%1$s</xliff:g>ক ব্যৱহাৰ কৰে। মাচুল প্ৰযোজ্য হ\'ব পাৰে।"</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g>ৰ পৰা <xliff:g id="NEW_NETWORK">%2$s</xliff:g> লৈ সলনি কৰা হ’ল"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"ম’বাইল ডেটা"</item> - <item msgid="5520925862115353992">"ৱাই-ফাই"</item> - <item msgid="1055487873974272842">"ব্লুটুথ"</item> - <item msgid="1616528372438698248">"ইথাৰনেট"</item> - <item msgid="9177085807664964627">"ভিপিএন"</item> + <item msgid="5454013645032700715">"ম’বাইল ডেটা"</item> + <item msgid="6341719431034774569">"ৱাই-ফাই"</item> + <item msgid="5081440868800877512">"ব্লুটুথ"</item> + <item msgid="1160736166977503463">"ইথাৰনেট"</item> + <item msgid="7347618872551558605">"ভিপিএন"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"অজ্ঞাত প্ৰকাৰৰ নেটৱৰ্ক"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-az/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-az/strings.xml index d75a20460c85..7e927ed41b5c 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-az/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-az/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"Wi-Fi şəbəkəsinə daxil ol"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"Şəbəkəyə daxil olun"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> üçün internet girişi əlçatan deyil"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"Seçimlər üçün tıklayın"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"Mobil şəbəkənin internetə girişi yoxdur"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"Şəbəkənin internetə girişi yoxdur"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"Özəl DNS serverinə giriş mümkün deyil"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> bağlantını məhdudlaşdırdı"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"İstənilən halda klikləyin"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"<xliff:g id="NETWORK_TYPE">%1$s</xliff:g> şəbəkə növünə keçirildi"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"<xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> şəbəkəsinin internetə girişi olmadıqda, cihaz <xliff:g id="NEW_NETWORK">%1$s</xliff:g> şəbəkəsini istifadə edir. Xidmət haqqı tutula bilər."</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> şəbəkəsindən <xliff:g id="NEW_NETWORK">%2$s</xliff:g> şəbəkəsinə keçirildi"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"naməlum şəbəkə növü"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"Sistem Bağlantı Resursları"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"Wi-Fi şəbəkəsinə daxil ol"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"Şəbəkəyə daxil olun"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> üçün internet girişi əlçatan deyil"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"Seçimlər üçün tıklayın"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"Mobil şəbəkənin internetə girişi yoxdur"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"Şəbəkənin internetə girişi yoxdur"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"Özəl DNS serverinə giriş mümkün deyil"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> bağlantını məhdudlaşdırdı"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"İstənilən halda klikləyin"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"<xliff:g id="NETWORK_TYPE">%1$s</xliff:g> şəbəkə növünə keçirildi"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"<xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> şəbəkəsinin internetə girişi olmadıqda, cihaz <xliff:g id="NEW_NETWORK">%1$s</xliff:g> şəbəkəsini istifadə edir. Xidmət haqqı tutula bilər."</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> şəbəkəsindən <xliff:g id="NEW_NETWORK">%2$s</xliff:g> şəbəkəsinə keçirildi"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"mobil data"</item> - <item msgid="5520925862115353992">"Wi-Fi"</item> - <item msgid="1055487873974272842">"Bluetooth"</item> - <item msgid="1616528372438698248">"Ethernet"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"mobil data"</item> + <item msgid="6341719431034774569">"Wi-Fi"</item> + <item msgid="5081440868800877512">"Bluetooth"</item> + <item msgid="1160736166977503463">"Ethernet"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"naməlum şəbəkə növü"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-b+sr+Latn/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-b+sr+Latn/strings.xml index 11e4957a7b4b..3f1b976fb939 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-b+sr+Latn/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-b+sr+Latn/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"Prijavljivanje na WiFi mrežu"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"Prijavite se na mrežu"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> nema pristup internetu"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"Dodirnite za opcije"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"Mobilna mreža nema pristup internetu"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"Mreža nema pristup internetu"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"Pristup privatnom DNS serveru nije uspeo"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> ima ograničenu vezu"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"Dodirnite da biste se ipak povezali"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"Prešli ste na tip mreže <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"Uređaj koristi tip mreže <xliff:g id="NEW_NETWORK">%1$s</xliff:g> kada tip mreže <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> nema pristup internetu. Možda će se naplaćivati troškovi."</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"Prešli ste sa tipa mreže <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> na tip mreže <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"nepoznat tip mreže"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"Resursi za povezivanje sa sistemom"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"Prijavljivanje na WiFi mrežu"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"Prijavite se na mrežu"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> nema pristup internetu"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"Dodirnite za opcije"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"Mobilna mreža nema pristup internetu"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"Mreža nema pristup internetu"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"Pristup privatnom DNS serveru nije uspeo"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> ima ograničenu vezu"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"Dodirnite da biste se ipak povezali"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"Prešli ste na tip mreže <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"Uređaj koristi tip mreže <xliff:g id="NEW_NETWORK">%1$s</xliff:g> kada tip mreže <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> nema pristup internetu. Možda će se naplaćivati troškovi."</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"Prešli ste sa tipa mreže <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> na tip mreže <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"mobilni podaci"</item> - <item msgid="5520925862115353992">"WiFi"</item> - <item msgid="1055487873974272842">"Bluetooth"</item> - <item msgid="1616528372438698248">"Eternet"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"mobilni podaci"</item> + <item msgid="6341719431034774569">"WiFi"</item> + <item msgid="5081440868800877512">"Bluetooth"</item> + <item msgid="1160736166977503463">"Eternet"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"nepoznat tip mreže"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-be/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-be/strings.xml index 6b0b1f1130e8..21edf2405481 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-be/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-be/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"Уваход у сетку Wi-Fi"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"Увайдзіце ў сетку"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> не мае доступу ў інтэрнэт"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"Дакраніцеся, каб убачыць параметры"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"Мабільная сетка не мае доступу ў інтэрнэт"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"Сетка не мае доступу ў інтэрнэт"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"Не ўдалося атрымаць доступ да прыватнага DNS-сервера"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> мае абмежаваную магчымасць падключэння"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"Націсніце, каб падключыцца"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"Выкананы пераход да <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"Прылада выкарыстоўвае сетку <xliff:g id="NEW_NETWORK">%1$s</xliff:g>, калі ў сетцы <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> няма доступу да інтэрнэту. Можа спаганяцца плата."</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"Выкананы пераход з <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> да <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"невядомы тып сеткі"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"Рэсурсы для падключэння да сістэмы"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"Уваход у сетку Wi-Fi"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"Увайдзіце ў сетку"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> не мае доступу ў інтэрнэт"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"Дакраніцеся, каб убачыць параметры"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"Мабільная сетка не мае доступу ў інтэрнэт"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"Сетка не мае доступу ў інтэрнэт"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"Не ўдалося атрымаць доступ да прыватнага DNS-сервера"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> мае абмежаваную магчымасць падключэння"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"Націсніце, каб падключыцца"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"Выкананы пераход да <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"Прылада выкарыстоўвае сетку <xliff:g id="NEW_NETWORK">%1$s</xliff:g>, калі ў сетцы <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> няма доступу да інтэрнэту. Можа спаганяцца плата."</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"Выкананы пераход з <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> да <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"мабільная перадача даных"</item> - <item msgid="5520925862115353992">"Wi-Fi"</item> - <item msgid="1055487873974272842">"Bluetooth"</item> - <item msgid="1616528372438698248">"Ethernet"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"мабільная перадача даных"</item> + <item msgid="6341719431034774569">"Wi-Fi"</item> + <item msgid="5081440868800877512">"Bluetooth"</item> + <item msgid="1160736166977503463">"Ethernet"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"невядомы тып сеткі"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-bg/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-bg/strings.xml index 6427bd09cf69..c3c2d722f42b 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-bg/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-bg/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"Влизане в Wi-Fi мрежа"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"Вход в мрежата"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> няма достъп до интернет"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"Докоснете за опции"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"Мобилната мрежа няма достъп до интернет"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"Мрежата няма достъп до интернет"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"Не може да се осъществи достъп до частния DNS сървър"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> има ограничена свързаност"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"Докоснете, за да се свържете въпреки това"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"Превключи се към <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"Устройството използва <xliff:g id="NEW_NETWORK">%1$s</xliff:g>, когато <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> няма достъп до интернет. Възможно е да бъдете таксувани."</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"Превключи се от <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> към <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"неизвестен тип мрежа"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"Ресурси за свързаността на системата"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"Влизане в Wi-Fi мрежа"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"Вход в мрежата"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> няма достъп до интернет"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"Докоснете за опции"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"Мобилната мрежа няма достъп до интернет"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"Мрежата няма достъп до интернет"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"Не може да се осъществи достъп до частния DNS сървър"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> има ограничена свързаност"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"Докоснете, за да се свържете въпреки това"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"Превключи се към <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"Устройството използва <xliff:g id="NEW_NETWORK">%1$s</xliff:g>, когато <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> няма достъп до интернет. Възможно е да бъдете таксувани."</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"Превключи се от <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> към <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"мобилни данни"</item> - <item msgid="5520925862115353992">"Wi-Fi"</item> - <item msgid="1055487873974272842">"Bluetooth"</item> - <item msgid="1616528372438698248">"Ethernet"</item> - <item msgid="9177085807664964627">"виртуална частна мрежа (VPN)"</item> + <item msgid="5454013645032700715">"мобилни данни"</item> + <item msgid="6341719431034774569">"Wi-Fi"</item> + <item msgid="5081440868800877512">"Bluetooth"</item> + <item msgid="1160736166977503463">"Ethernet"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"неизвестен тип мрежа"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-bn/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-bn/strings.xml index 74d4cd6d7e25..0f693bd60c62 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-bn/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-bn/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"ওয়াই-ফাই নেটওয়ার্কে সাইন-ইন করুন"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"নেটওয়ার্কে সাইন-ইন করুন"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g>-এর ইন্টারনেটে অ্যাক্সেস নেই"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"বিকল্পগুলির জন্য আলতো চাপুন"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"মোবাইল নেটওয়ার্কে কোনও ইন্টারনেট অ্যাক্সেস নেই"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"নেটওয়ার্কে কোনও ইন্টারনেট অ্যাক্সেস নেই"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"ব্যক্তিগত ডিএনএস সার্ভার অ্যাক্সেস করা যাবে না"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g>-এর সীমিত কানেক্টিভিটি আছে"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"তবুও কানেক্ট করতে ট্যাপ করুন"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"<xliff:g id="NETWORK_TYPE">%1$s</xliff:g> এ পাল্টানো হয়েছে"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"<xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> এ ইন্টারনেট অ্যাক্সেস না থাকলে <xliff:g id="NEW_NETWORK">%1$s</xliff:g> ব্যবহার করা হয়৷ ডেটা চার্জ প্রযোজ্য৷"</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> থেকে <xliff:g id="NEW_NETWORK">%2$s</xliff:g> এ পাল্টানো হয়েছে"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"এই নেটওয়ার্কের প্রকার অজানা"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"সিস্টেম কানেক্টিভিটি রিসোর্সেস"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"ওয়াই-ফাই নেটওয়ার্কে সাইন-ইন করুন"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"নেটওয়ার্কে সাইন-ইন করুন"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g>-এর ইন্টারনেটে অ্যাক্সেস নেই"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"বিকল্পগুলির জন্য আলতো চাপুন"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"মোবাইল নেটওয়ার্কে কোনও ইন্টারনেট অ্যাক্সেস নেই"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"নেটওয়ার্কে কোনও ইন্টারনেট অ্যাক্সেস নেই"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"ব্যক্তিগত ডিএনএস সার্ভার অ্যাক্সেস করা যাবে না"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g>-এর সীমিত কানেক্টিভিটি আছে"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"তবুও কানেক্ট করতে ট্যাপ করুন"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"<xliff:g id="NETWORK_TYPE">%1$s</xliff:g> এ পাল্টানো হয়েছে"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"<xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> এ ইন্টারনেট অ্যাক্সেস না থাকলে <xliff:g id="NEW_NETWORK">%1$s</xliff:g> ব্যবহার করা হয়৷ ডেটা চার্জ প্রযোজ্য৷"</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> থেকে <xliff:g id="NEW_NETWORK">%2$s</xliff:g> এ পাল্টানো হয়েছে"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"মোবাইল ডেটা"</item> - <item msgid="5520925862115353992">"Wi-Fi"</item> - <item msgid="1055487873974272842">"ব্লুটুথ"</item> - <item msgid="1616528372438698248">"ইথারনেট"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"মোবাইল ডেটা"</item> + <item msgid="6341719431034774569">"ওয়াই-ফাই"</item> + <item msgid="5081440868800877512">"ব্লুটুথ"</item> + <item msgid="1160736166977503463">"ইথারনেট"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"এই নেটওয়ার্কের ধরন অজানা"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-bs/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-bs/strings.xml index 19f6e1a3f5e8..33d6ed914728 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-bs/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-bs/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"Prijavljivanje na WiFi mrežu"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"Prijava na mrežu"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"Mreža <xliff:g id="NETWORK_SSID">%1$s</xliff:g> nema pristup internetu"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"Dodirnite za opcije"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"Mobilna mreža nema pristup internetu"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"Mreža nema pristup internetu"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"Nije moguće pristupiti privatnom DNS serveru"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"Mreža <xliff:g id="NETWORK_SSID">%1$s</xliff:g> ima ograničenu povezivost"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"Dodirnite da se ipak povežete"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"Prebačeno na: <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"Kada <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> nema pristup internetu, uređaj koristi mrežu <xliff:g id="NEW_NETWORK">%1$s</xliff:g>. Moguća je naplata usluge."</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"Prebačeno iz mreže <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> u <xliff:g id="NEW_NETWORK">%2$s</xliff:g> mrežu"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"nepoznata vrsta mreže"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"Izvori povezivosti sistema"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"Prijavljivanje na WiFi mrežu"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"Prijava na mrežu"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"Mreža <xliff:g id="NETWORK_SSID">%1$s</xliff:g> nema pristup internetu"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"Dodirnite za opcije"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"Mobilna mreža nema pristup internetu"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"Mreža nema pristup internetu"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"Nije moguće pristupiti privatnom DNS serveru"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"Mreža <xliff:g id="NETWORK_SSID">%1$s</xliff:g> ima ograničenu povezivost"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"Dodirnite da se ipak povežete"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"Prebačeno na: <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"Kada <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> nema pristup internetu, uređaj koristi mrežu <xliff:g id="NEW_NETWORK">%1$s</xliff:g>. Moguća je naplata usluge."</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"Prebačeno iz mreže <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> u <xliff:g id="NEW_NETWORK">%2$s</xliff:g> mrežu"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"prijenos podataka na mobilnoj mreži"</item> - <item msgid="5520925862115353992">"WiFi"</item> - <item msgid="1055487873974272842">"Bluetooth"</item> - <item msgid="1616528372438698248">"Ethernet"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"prijenos podataka na mobilnoj mreži"</item> + <item msgid="6341719431034774569">"WiFi"</item> + <item msgid="5081440868800877512">"Bluetooth"</item> + <item msgid="1160736166977503463">"Ethernet"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"nepoznata vrsta mreže"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-ca/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-ca/strings.xml index c55684d6e03d..04f6bd211c83 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-ca/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-ca/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"Inicia la sessió a la xarxa Wi-Fi"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"Inicia la sessió a la xarxa"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> no té accés a Internet"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"Toca per veure les opcions"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"La xarxa mòbil no té accés a Internet"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"La xarxa no té accés a Internet"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"No es pot accedir al servidor DNS privat"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> té una connectivitat limitada"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"Toca per connectar igualment"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"Actualment en ús: <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"El dispositiu utilitza <xliff:g id="NEW_NETWORK">%1$s</xliff:g> en cas que <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> no tingui accés a Internet. És possible que s\'hi apliquin càrrecs."</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"Abans es feia servir la xarxa <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g>; ara s\'utilitza <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"una tipus de xarxa desconegut"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"Recursos de connectivitat del sistema"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"Inicia la sessió a la xarxa Wi-Fi"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"Inicia la sessió a la xarxa"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> no té accés a Internet"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"Toca per veure les opcions"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"La xarxa mòbil no té accés a Internet"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"La xarxa no té accés a Internet"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"No es pot accedir al servidor DNS privat"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> té una connectivitat limitada"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"Toca per connectar igualment"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"Actualment en ús: <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"El dispositiu utilitza <xliff:g id="NEW_NETWORK">%1$s</xliff:g> en cas que <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> no tingui accés a Internet. És possible que s\'hi apliquin càrrecs."</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"Abans es feia servir la xarxa <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g>; ara s\'utilitza <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"dades mòbils"</item> - <item msgid="5520925862115353992">"Wi-Fi"</item> - <item msgid="1055487873974272842">"Bluetooth"</item> - <item msgid="1616528372438698248">"Ethernet"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"dades mòbils"</item> + <item msgid="6341719431034774569">"Wi‑Fi"</item> + <item msgid="5081440868800877512">"Bluetooth"</item> + <item msgid="1160736166977503463">"Ethernet"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"un tipus de xarxa desconegut"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-cs/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-cs/strings.xml index fa8c411e48f9..6309e788e631 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-cs/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-cs/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"Přihlásit se k síti Wi-Fi"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"Přihlásit se k síti"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"Síť <xliff:g id="NETWORK_SSID">%1$s</xliff:g> nemá přístup k internetu"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"Klepnutím zobrazíte možnosti"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"Mobilní síť nemá přístup k internetu"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"Síť nemá přístup k internetu"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"Nelze získat přístup k soukromému serveru DNS"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"Síť <xliff:g id="NETWORK_SSID">%1$s</xliff:g> umožňuje jen omezené připojení"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"Klepnutím se i přesto připojíte"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"Přechod na síť <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"Když síť <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> nebude mít přístup k internetu, zařízení použije síť <xliff:g id="NEW_NETWORK">%1$s</xliff:g>. Mohou být účtovány poplatky."</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"Přechod ze sítě <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> na síť <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"neznámý typ sítě"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"Zdroje pro připojení systému"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"Přihlásit se k síti Wi-Fi"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"Přihlásit se k síti"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"Síť <xliff:g id="NETWORK_SSID">%1$s</xliff:g> nemá přístup k internetu"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"Klepnutím zobrazíte možnosti"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"Mobilní síť nemá přístup k internetu"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"Síť nemá přístup k internetu"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"Nelze získat přístup k soukromému serveru DNS"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"Síť <xliff:g id="NETWORK_SSID">%1$s</xliff:g> umožňuje jen omezené připojení"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"Klepnutím se i přesto připojíte"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"Přechod na síť <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"Když síť <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> nebude mít přístup k internetu, zařízení použije síť <xliff:g id="NEW_NETWORK">%1$s</xliff:g>. Mohou být účtovány poplatky."</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"Přechod ze sítě <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> na síť <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"mobilní data"</item> - <item msgid="5520925862115353992">"Wi-Fi"</item> - <item msgid="1055487873974272842">"Bluetooth"</item> - <item msgid="1616528372438698248">"Ethernet"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"mobilní data"</item> + <item msgid="6341719431034774569">"Wi-Fi"</item> + <item msgid="5081440868800877512">"Bluetooth"</item> + <item msgid="1160736166977503463">"Ethernet"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"neznámý typ sítě"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-da/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-da/strings.xml index f7be6df981b6..57c58afc4147 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-da/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-da/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"Log ind på Wi-Fi-netværk"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"Log ind på netværk"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> har ingen internetforbindelse"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"Tryk for at se valgmuligheder"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"Mobilnetværket har ingen internetadgang"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"Netværket har ingen internetadgang"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"Der er ikke adgang til den private DNS-server"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> har begrænset forbindelse"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"Tryk for at oprette forbindelse alligevel"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"Der blev skiftet til <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"Enheden benytter <xliff:g id="NEW_NETWORK">%1$s</xliff:g>, når der ikke er internetadgang via <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g>. Der opkræves muligvis betaling."</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"Der blev skiftet fra <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> til <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"en ukendt netværkstype"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"Systemets forbindelsesressourcer"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"Log ind på Wi-Fi-netværk"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"Log ind på netværk"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> har ingen internetforbindelse"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"Tryk for at se valgmuligheder"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"Mobilnetværket har ingen internetadgang"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"Netværket har ingen internetadgang"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"Der er ikke adgang til den private DNS-server"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> har begrænset forbindelse"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"Tryk for at oprette forbindelse alligevel"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"Der blev skiftet til <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"Enheden benytter <xliff:g id="NEW_NETWORK">%1$s</xliff:g>, når der ikke er internetadgang via <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g>. Der opkræves muligvis betaling."</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"Der blev skiftet fra <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> til <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"mobildata"</item> - <item msgid="5520925862115353992">"Wi-Fi"</item> - <item msgid="1055487873974272842">"Bluetooth"</item> - <item msgid="1616528372438698248">"Ethernet"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"mobildata"</item> + <item msgid="6341719431034774569">"Wi-Fi"</item> + <item msgid="5081440868800877512">"Bluetooth"</item> + <item msgid="1160736166977503463">"Ethernet"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"en ukendt netværkstype"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-de/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-de/strings.xml index 1e7b80c8f638..d0c255197ac8 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-de/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-de/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"In WLAN anmelden"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"Im Netzwerk anmelden"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> hat keinen Internetzugriff"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"Für Optionen tippen"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"Mobiles Netzwerk hat keinen Internetzugriff"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"Netzwerk hat keinen Internetzugriff"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"Auf den privaten DNS-Server kann nicht zugegriffen werden"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"Schlechte Verbindung mit <xliff:g id="NETWORK_SSID">%1$s</xliff:g>"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"Tippen, um die Verbindung trotzdem herzustellen"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"Zu <xliff:g id="NETWORK_TYPE">%1$s</xliff:g> gewechselt"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"Auf dem Gerät werden <xliff:g id="NEW_NETWORK">%1$s</xliff:g> genutzt, wenn über <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> kein Internet verfügbar ist. Eventuell fallen Gebühren an."</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"Von \"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g>\" zu \"<xliff:g id="NEW_NETWORK">%2$s</xliff:g>\" gewechselt"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"ein unbekannter Netzwerktyp"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"Systemverbindungsressourcen"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"In WLAN anmelden"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"Im Netzwerk anmelden"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> hat keinen Internetzugriff"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"Für Optionen tippen"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"Mobiles Netzwerk hat keinen Internetzugriff"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"Netzwerk hat keinen Internetzugriff"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"Auf den privaten DNS-Server kann nicht zugegriffen werden"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"Schlechte Verbindung mit <xliff:g id="NETWORK_SSID">%1$s</xliff:g>"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"Tippen, um die Verbindung trotzdem herzustellen"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"Zu <xliff:g id="NETWORK_TYPE">%1$s</xliff:g> gewechselt"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"Auf dem Gerät werden <xliff:g id="NEW_NETWORK">%1$s</xliff:g> genutzt, wenn über <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> kein Internet verfügbar ist. Eventuell fallen Gebühren an."</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"Von \"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g>\" zu \"<xliff:g id="NEW_NETWORK">%2$s</xliff:g>\" gewechselt"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"Mobile Daten"</item> - <item msgid="5520925862115353992">"WLAN"</item> - <item msgid="1055487873974272842">"Bluetooth"</item> - <item msgid="1616528372438698248">"Ethernet"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"Mobile Daten"</item> + <item msgid="6341719431034774569">"WLAN"</item> + <item msgid="5081440868800877512">"Bluetooth"</item> + <item msgid="1160736166977503463">"Ethernet"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"ein unbekannter Netzwerktyp"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-el/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-el/strings.xml index 89647fdb1ef3..1c2838dfd470 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-el/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-el/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"Συνδεθείτε στο δίκτυο Wi-Fi"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"Σύνδεση στο δίκτυο"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"Η εφαρμογή <xliff:g id="NETWORK_SSID">%1$s</xliff:g> δεν έχει πρόσβαση στο διαδίκτυο"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"Πατήστε για να δείτε τις επιλογές"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"Το δίκτυο κινητής τηλεφωνίας δεν έχει πρόσβαση στο διαδίκτυο."</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"Το δίκτυο δεν έχει πρόσβαση στο διαδίκτυο."</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"Δεν είναι δυνατή η πρόσβαση στον ιδιωτικό διακομιστή DNS."</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"Το δίκτυο <xliff:g id="NETWORK_SSID">%1$s</xliff:g> έχει περιορισμένη συνδεσιμότητα"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"Πατήστε για σύνδεση ούτως ή άλλως"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"Μετάβαση σε δίκτυο <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"Η συσκευή χρησιμοποιεί το δίκτυο <xliff:g id="NEW_NETWORK">%1$s</xliff:g> όταν το δίκτυο <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> δεν έχει πρόσβαση στο διαδίκτυο. Μπορεί να ισχύουν χρεώσεις."</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"Μετάβαση από το δίκτυο <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> στο δίκτυο <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"άγνωστος τύπος δικτύου"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"Πόροι συνδεσιμότητας συστήματος"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"Συνδεθείτε στο δίκτυο Wi-Fi"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"Σύνδεση στο δίκτυο"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"Η εφαρμογή <xliff:g id="NETWORK_SSID">%1$s</xliff:g> δεν έχει πρόσβαση στο διαδίκτυο"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"Πατήστε για να δείτε τις επιλογές"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"Το δίκτυο κινητής τηλεφωνίας δεν έχει πρόσβαση στο διαδίκτυο."</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"Το δίκτυο δεν έχει πρόσβαση στο διαδίκτυο."</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"Δεν είναι δυνατή η πρόσβαση στον ιδιωτικό διακομιστή DNS."</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"Το δίκτυο <xliff:g id="NETWORK_SSID">%1$s</xliff:g> έχει περιορισμένη συνδεσιμότητα"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"Πατήστε για σύνδεση ούτως ή άλλως"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"Μετάβαση σε δίκτυο <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"Η συσκευή χρησιμοποιεί το δίκτυο <xliff:g id="NEW_NETWORK">%1$s</xliff:g> όταν το δίκτυο <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> δεν έχει πρόσβαση στο διαδίκτυο. Μπορεί να ισχύουν χρεώσεις."</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"Μετάβαση από το δίκτυο <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> στο δίκτυο <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"δεδομένα κινητής τηλεφωνίας"</item> - <item msgid="5520925862115353992">"Wi-Fi"</item> - <item msgid="1055487873974272842">"Bluetooth"</item> - <item msgid="1616528372438698248">"Ethernet"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"δεδομένα κινητής τηλεφωνίας"</item> + <item msgid="6341719431034774569">"Wi-Fi"</item> + <item msgid="5081440868800877512">"Bluetooth"</item> + <item msgid="1160736166977503463">"Ethernet"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"άγνωστος τύπος δικτύου"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-en-rAU/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-en-rAU/strings.xml index d29e2ec9f3a3..db5ad7029b6f 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-en-rAU/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-en-rAU/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"Sign in to a Wi-Fi network"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"Sign in to network"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> has no Internet access"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"Tap for options"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"Mobile network has no Internet access"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"Network has no Internet access"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"Private DNS server cannot be accessed"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> has limited connectivity"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"Tap to connect anyway"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"Switched to <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"Device uses <xliff:g id="NEW_NETWORK">%1$s</xliff:g> when <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> has no Internet access. Charges may apply."</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"Switched from <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> to <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"an unknown network type"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"System connectivity resources"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"Sign in to a Wi-Fi network"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"Sign in to network"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> has no Internet access"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"Tap for options"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"Mobile network has no Internet access"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"Network has no Internet access"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"Private DNS server cannot be accessed"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> has limited connectivity"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"Tap to connect anyway"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"Switched to <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"Device uses <xliff:g id="NEW_NETWORK">%1$s</xliff:g> when <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> has no Internet access. Charges may apply."</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"Switched from <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> to <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"mobile data"</item> - <item msgid="5520925862115353992">"Wi-Fi"</item> - <item msgid="1055487873974272842">"Bluetooth"</item> - <item msgid="1616528372438698248">"Ethernet"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"mobile data"</item> + <item msgid="6341719431034774569">"Wi-Fi"</item> + <item msgid="5081440868800877512">"Bluetooth"</item> + <item msgid="1160736166977503463">"Ethernet"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"an unknown network type"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-en-rCA/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-en-rCA/strings.xml index d29e2ec9f3a3..db5ad7029b6f 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-en-rCA/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-en-rCA/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"Sign in to a Wi-Fi network"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"Sign in to network"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> has no Internet access"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"Tap for options"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"Mobile network has no Internet access"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"Network has no Internet access"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"Private DNS server cannot be accessed"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> has limited connectivity"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"Tap to connect anyway"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"Switched to <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"Device uses <xliff:g id="NEW_NETWORK">%1$s</xliff:g> when <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> has no Internet access. Charges may apply."</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"Switched from <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> to <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"an unknown network type"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"System connectivity resources"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"Sign in to a Wi-Fi network"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"Sign in to network"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> has no Internet access"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"Tap for options"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"Mobile network has no Internet access"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"Network has no Internet access"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"Private DNS server cannot be accessed"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> has limited connectivity"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"Tap to connect anyway"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"Switched to <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"Device uses <xliff:g id="NEW_NETWORK">%1$s</xliff:g> when <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> has no Internet access. Charges may apply."</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"Switched from <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> to <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"mobile data"</item> - <item msgid="5520925862115353992">"Wi-Fi"</item> - <item msgid="1055487873974272842">"Bluetooth"</item> - <item msgid="1616528372438698248">"Ethernet"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"mobile data"</item> + <item msgid="6341719431034774569">"Wi-Fi"</item> + <item msgid="5081440868800877512">"Bluetooth"</item> + <item msgid="1160736166977503463">"Ethernet"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"an unknown network type"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-en-rGB/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-en-rGB/strings.xml index d29e2ec9f3a3..db5ad7029b6f 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-en-rGB/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-en-rGB/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"Sign in to a Wi-Fi network"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"Sign in to network"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> has no Internet access"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"Tap for options"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"Mobile network has no Internet access"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"Network has no Internet access"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"Private DNS server cannot be accessed"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> has limited connectivity"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"Tap to connect anyway"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"Switched to <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"Device uses <xliff:g id="NEW_NETWORK">%1$s</xliff:g> when <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> has no Internet access. Charges may apply."</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"Switched from <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> to <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"an unknown network type"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"System connectivity resources"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"Sign in to a Wi-Fi network"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"Sign in to network"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> has no Internet access"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"Tap for options"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"Mobile network has no Internet access"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"Network has no Internet access"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"Private DNS server cannot be accessed"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> has limited connectivity"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"Tap to connect anyway"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"Switched to <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"Device uses <xliff:g id="NEW_NETWORK">%1$s</xliff:g> when <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> has no Internet access. Charges may apply."</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"Switched from <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> to <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"mobile data"</item> - <item msgid="5520925862115353992">"Wi-Fi"</item> - <item msgid="1055487873974272842">"Bluetooth"</item> - <item msgid="1616528372438698248">"Ethernet"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"mobile data"</item> + <item msgid="6341719431034774569">"Wi-Fi"</item> + <item msgid="5081440868800877512">"Bluetooth"</item> + <item msgid="1160736166977503463">"Ethernet"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"an unknown network type"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-en-rIN/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-en-rIN/strings.xml index d29e2ec9f3a3..db5ad7029b6f 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-en-rIN/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-en-rIN/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"Sign in to a Wi-Fi network"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"Sign in to network"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> has no Internet access"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"Tap for options"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"Mobile network has no Internet access"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"Network has no Internet access"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"Private DNS server cannot be accessed"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> has limited connectivity"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"Tap to connect anyway"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"Switched to <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"Device uses <xliff:g id="NEW_NETWORK">%1$s</xliff:g> when <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> has no Internet access. Charges may apply."</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"Switched from <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> to <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"an unknown network type"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"System connectivity resources"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"Sign in to a Wi-Fi network"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"Sign in to network"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> has no Internet access"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"Tap for options"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"Mobile network has no Internet access"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"Network has no Internet access"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"Private DNS server cannot be accessed"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> has limited connectivity"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"Tap to connect anyway"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"Switched to <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"Device uses <xliff:g id="NEW_NETWORK">%1$s</xliff:g> when <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> has no Internet access. Charges may apply."</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"Switched from <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> to <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"mobile data"</item> - <item msgid="5520925862115353992">"Wi-Fi"</item> - <item msgid="1055487873974272842">"Bluetooth"</item> - <item msgid="1616528372438698248">"Ethernet"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"mobile data"</item> + <item msgid="6341719431034774569">"Wi-Fi"</item> + <item msgid="5081440868800877512">"Bluetooth"</item> + <item msgid="1160736166977503463">"Ethernet"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"an unknown network type"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-en-rXC/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-en-rXC/strings.xml index cd69133966f2..2602bfa06531 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-en-rXC/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-en-rXC/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"Sign in to Wi-Fi network"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"Sign in to network"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> has no internet access"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"Tap for options"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"Mobile network has no internet access"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"Network has no internet access"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"Private DNS server cannot be accessed"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> has limited connectivity"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"Tap to connect anyway"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"Switched to <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"Device uses <xliff:g id="NEW_NETWORK">%1$s</xliff:g> when <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> has no internet access. Charges may apply."</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"Switched from <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> to <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"an unknown network type"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"System Connectivity Resources"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"Sign in to Wi-Fi network"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"Sign in to network"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> has no internet access"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"Tap for options"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"Mobile network has no internet access"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"Network has no internet access"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"Private DNS server cannot be accessed"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> has limited connectivity"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"Tap to connect anyway"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"Switched to <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"Device uses <xliff:g id="NEW_NETWORK">%1$s</xliff:g> when <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> has no internet access. Charges may apply."</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"Switched from <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> to <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"mobile data"</item> - <item msgid="5520925862115353992">"Wi-Fi"</item> - <item msgid="1055487873974272842">"Bluetooth"</item> - <item msgid="1616528372438698248">"Ethernet"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"mobile data"</item> + <item msgid="6341719431034774569">"Wi-Fi"</item> + <item msgid="5081440868800877512">"Bluetooth"</item> + <item msgid="1160736166977503463">"Ethernet"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"an unknown network type"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-es-rUS/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-es-rUS/strings.xml index 9102dc019a2d..e5f1833fdd6b 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-es-rUS/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-es-rUS/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"Accede a una red Wi-Fi."</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"Acceder a la red"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g>no tiene acceso a Internet"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"Presiona para ver opciones"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"La red móvil no tiene acceso a Internet"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"La red no tiene acceso a Internet"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"No se puede acceder al servidor DNS privado"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> tiene conectividad limitada"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"Presiona para conectarte de todas formas"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"Se cambió a <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"El dispositivo usa <xliff:g id="NEW_NETWORK">%1$s</xliff:g> cuando <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> no tiene acceso a Internet. Es posible que se apliquen cargos."</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"Se cambió de <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> a <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"un tipo de red desconocido"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"Recursos de conectividad del sistema"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"Accede a una red Wi-Fi."</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"Acceder a la red"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g>no tiene acceso a Internet"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"Presiona para ver opciones"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"La red móvil no tiene acceso a Internet"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"La red no tiene acceso a Internet"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"No se puede acceder al servidor DNS privado"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> tiene conectividad limitada"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"Presiona para conectarte de todas formas"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"Se cambió a <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"El dispositivo usa <xliff:g id="NEW_NETWORK">%1$s</xliff:g> cuando <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> no tiene acceso a Internet. Es posible que se apliquen cargos."</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"Se cambió de <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> a <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"Datos móviles"</item> - <item msgid="5520925862115353992">"Wi-Fi"</item> - <item msgid="1055487873974272842">"Bluetooth"</item> - <item msgid="1616528372438698248">"Ethernet"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"Datos móviles"</item> + <item msgid="6341719431034774569">"Wi-Fi"</item> + <item msgid="5081440868800877512">"Bluetooth"</item> + <item msgid="1160736166977503463">"Ethernet"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"un tipo de red desconocido"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-es/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-es/strings.xml index 4c15566a7397..e4f4307f3382 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-es/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-es/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"Iniciar sesión en red Wi-Fi"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"Iniciar sesión en la red"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> no tiene acceso a Internet"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"Toca para ver opciones"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"La red móvil no tiene acceso a Internet"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"La red no tiene acceso a Internet"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"No se ha podido acceder al servidor DNS privado"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> tiene una conectividad limitada"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"Toca para conectarte de todas formas"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"Se ha cambiado a <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"El dispositivo utiliza <xliff:g id="NEW_NETWORK">%1$s</xliff:g> cuando <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> no tiene acceso a Internet. Es posible que se apliquen cargos."</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"Se ha cambiado de <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> a <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"tipo de red desconocido"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"Recursos de conectividad del sistema"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"Iniciar sesión en red Wi-Fi"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"Iniciar sesión en la red"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> no tiene acceso a Internet"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"Toca para ver opciones"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"La red móvil no tiene acceso a Internet"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"La red no tiene acceso a Internet"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"No se ha podido acceder al servidor DNS privado"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> tiene una conectividad limitada"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"Toca para conectarte de todas formas"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"Se ha cambiado a <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"El dispositivo utiliza <xliff:g id="NEW_NETWORK">%1$s</xliff:g> cuando <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> no tiene acceso a Internet. Es posible que se apliquen cargos."</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"Se ha cambiado de <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> a <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"datos móviles"</item> - <item msgid="5520925862115353992">"Wi-Fi"</item> - <item msgid="1055487873974272842">"Bluetooth"</item> - <item msgid="1616528372438698248">"Ethernet"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"datos móviles"</item> + <item msgid="6341719431034774569">"Wi-Fi"</item> + <item msgid="5081440868800877512">"Bluetooth"</item> + <item msgid="1160736166977503463">"Ethernet"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"un tipo de red desconocido"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-et/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-et/strings.xml index 398223a341c6..cec408fd9483 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-et/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-et/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"Logi sisse WiFi-võrku"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"Võrku sisselogimine"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"Võrgul <xliff:g id="NETWORK_SSID">%1$s</xliff:g> puudub Interneti-ühendus"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"Puudutage valikute nägemiseks"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"Mobiilsidevõrgul puudub Interneti-ühendus"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"Võrgul puudub Interneti-ühendus"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"Privaatsele DNS-serverile ei pääse juurde"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"Võrgu <xliff:g id="NETWORK_SSID">%1$s</xliff:g> ühendus on piiratud"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"Puudutage, kui soovite siiski ühenduse luua"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"Lülitati võrgule <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"Seade kasutab võrku <xliff:g id="NEW_NETWORK">%1$s</xliff:g>, kui võrgul <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> puudub juurdepääs Internetile. Rakenduda võivad tasud."</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"Lülitati võrgult <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> võrgule <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"tundmatu võrgutüüp"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"Süsteemi ühenduvuse allikad"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"Logi sisse WiFi-võrku"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"Võrku sisselogimine"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"Võrgul <xliff:g id="NETWORK_SSID">%1$s</xliff:g> puudub Interneti-ühendus"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"Puudutage valikute nägemiseks"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"Mobiilsidevõrgul puudub Interneti-ühendus"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"Võrgul puudub Interneti-ühendus"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"Privaatsele DNS-serverile ei pääse juurde"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"Võrgu <xliff:g id="NETWORK_SSID">%1$s</xliff:g> ühendus on piiratud"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"Puudutage, kui soovite siiski ühenduse luua"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"Lülitati võrgule <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"Seade kasutab võrku <xliff:g id="NEW_NETWORK">%1$s</xliff:g>, kui võrgul <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> puudub juurdepääs Internetile. Rakenduda võivad tasud."</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"Lülitati võrgult <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> võrgule <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"mobiilne andmeside"</item> - <item msgid="5520925862115353992">"WiFi"</item> - <item msgid="1055487873974272842">"Bluetooth"</item> - <item msgid="1616528372438698248">"Ethernet"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"mobiilne andmeside"</item> + <item msgid="6341719431034774569">"WiFi"</item> + <item msgid="5081440868800877512">"Bluetooth"</item> + <item msgid="1160736166977503463">"Ethernet"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"tundmatu võrgutüüp"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-eu/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-eu/strings.xml index dd70316f6959..f3ee9b1287c2 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-eu/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-eu/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"Hasi saioa Wi-Fi sarean"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"Hasi saioa sarean"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"Ezin da konektatu Internetera <xliff:g id="NETWORK_SSID">%1$s</xliff:g> sarearen bidez"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"Sakatu aukerak ikusteko"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"Sare mugikorra ezin da konektatu Internetera"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"Sarea ezin da konektatu Internetera"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"Ezin da atzitu DNS zerbitzari pribatua"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> sareak konektagarritasun murriztua du"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"Sakatu hala ere konektatzeko"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"<xliff:g id="NETWORK_TYPE">%1$s</xliff:g> erabiltzen ari zara orain"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"<xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> Internetera konektatzeko gauza ez denean, <xliff:g id="NEW_NETWORK">%1$s</xliff:g> erabiltzen du gailuak. Agian kostuak ordaindu beharko dituzu."</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> erabiltzen ari zinen, baina <xliff:g id="NEW_NETWORK">%2$s</xliff:g> erabiltzen ari zara orain"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"sare mota ezezaguna"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"Sistemaren konexio-baliabideak"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"Hasi saioa Wi-Fi sarean"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"Hasi saioa sarean"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"Ezin da konektatu Internetera <xliff:g id="NETWORK_SSID">%1$s</xliff:g> sarearen bidez"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"Sakatu aukerak ikusteko"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"Sare mugikorra ezin da konektatu Internetera"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"Sarea ezin da konektatu Internetera"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"Ezin da atzitu DNS zerbitzari pribatua"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> sareak konektagarritasun murriztua du"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"Sakatu hala ere konektatzeko"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"<xliff:g id="NETWORK_TYPE">%1$s</xliff:g> erabiltzen ari zara orain"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"<xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> Internetera konektatzeko gauza ez denean, <xliff:g id="NEW_NETWORK">%1$s</xliff:g> erabiltzen du gailuak. Agian kostuak ordaindu beharko dituzu."</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> erabiltzen ari zinen, baina <xliff:g id="NEW_NETWORK">%2$s</xliff:g> erabiltzen ari zara orain"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"datu-konexioa"</item> - <item msgid="5520925862115353992">"Wifia"</item> - <item msgid="1055487873974272842">"Bluetooth-a"</item> - <item msgid="1616528372438698248">"Ethernet"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"datu-konexioa"</item> + <item msgid="6341719431034774569">"Wifia"</item> + <item msgid="5081440868800877512">"Bluetooth-a"</item> + <item msgid="1160736166977503463">"Ethernet-a"</item> + <item msgid="7347618872551558605">"VPNa"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"sare mota ezezaguna"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-fa/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-fa/strings.xml index 46a946c50b0e..0c5b147e5afe 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-fa/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-fa/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"ورود به شبکه Wi-Fi"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"ورود به سیستم شبکه"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> به اینترنت دسترسی ندارد"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"برای گزینهها ضربه بزنید"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"شبکه تلفن همراه به اینترنت دسترسی ندارد"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"شبکه به اینترنت دسترسی ندارد"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"سرور DNS خصوصی قابل دسترسی نیست"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> اتصال محدودی دارد"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"بههرصورت، برای اتصال ضربه بزنید"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"به <xliff:g id="NETWORK_TYPE">%1$s</xliff:g> تغییر کرد"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"وقتی <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> به اینترنت دسترسی نداشته باشد، دستگاه از <xliff:g id="NEW_NETWORK">%1$s</xliff:g> استفاده میکند. ممکن است هزینههایی اعمال شود."</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"از <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> به <xliff:g id="NEW_NETWORK">%2$s</xliff:g> تغییر کرد"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"نوع شبکه نامشخص"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"منابع اتصال سیستم"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"ورود به شبکه Wi-Fi"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"ورود به سیستم شبکه"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> به اینترنت دسترسی ندارد"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"برای گزینهها ضربه بزنید"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"شبکه تلفن همراه به اینترنت دسترسی ندارد"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"شبکه به اینترنت دسترسی ندارد"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"سرور DNS خصوصی قابل دسترسی نیست"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> اتصال محدودی دارد"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"بههرصورت، برای اتصال ضربه بزنید"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"به <xliff:g id="NETWORK_TYPE">%1$s</xliff:g> تغییر کرد"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"وقتی <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> به اینترنت دسترسی نداشته باشد، دستگاه از <xliff:g id="NEW_NETWORK">%1$s</xliff:g> استفاده میکند. ممکن است هزینههایی اعمال شود."</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"از <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> به <xliff:g id="NEW_NETWORK">%2$s</xliff:g> تغییر کرد"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"داده تلفن همراه"</item> - <item msgid="5520925862115353992">"Wi-Fi"</item> - <item msgid="1055487873974272842">"بلوتوث"</item> - <item msgid="1616528372438698248">"اترنت"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"داده تلفن همراه"</item> + <item msgid="6341719431034774569">"Wi-Fi"</item> + <item msgid="5081440868800877512">"بلوتوث"</item> + <item msgid="1160736166977503463">"اترنت"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"نوع شبکه نامشخص"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-fi/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-fi/strings.xml index dd944415c9de..84c0034f8b2e 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-fi/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-fi/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"Kirjaudu Wi-Fi-verkkoon"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"Kirjaudu verkkoon"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> ei ole yhteydessä internetiin"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"Näytä vaihtoehdot napauttamalla."</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"Mobiiliverkko ei ole yhteydessä internetiin"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"Verkko ei ole yhteydessä internetiin"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"Ei pääsyä yksityiselle DNS-palvelimelle"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> toimii rajoitetulla yhteydellä"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"Yhdistä napauttamalla"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"<xliff:g id="NETWORK_TYPE">%1$s</xliff:g> otettiin käyttöön"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"<xliff:g id="NEW_NETWORK">%1$s</xliff:g> otetaan käyttöön, kun <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> ei voi muodostaa yhteyttä internetiin. Veloitukset ovat mahdollisia."</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> poistettiin käytöstä ja <xliff:g id="NEW_NETWORK">%2$s</xliff:g> otettiin käyttöön."</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"tuntematon verkon tyyppi"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"Järjestelmän yhteysresurssit"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"Kirjaudu Wi-Fi-verkkoon"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"Kirjaudu verkkoon"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> ei ole yhteydessä internetiin"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"Näytä vaihtoehdot napauttamalla."</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"Mobiiliverkko ei ole yhteydessä internetiin"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"Verkko ei ole yhteydessä internetiin"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"Ei pääsyä yksityiselle DNS-palvelimelle"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> toimii rajoitetulla yhteydellä"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"Yhdistä napauttamalla"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"<xliff:g id="NETWORK_TYPE">%1$s</xliff:g> otettiin käyttöön"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"<xliff:g id="NEW_NETWORK">%1$s</xliff:g> otetaan käyttöön, kun <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> ei voi muodostaa yhteyttä internetiin. Veloitukset ovat mahdollisia."</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> poistettiin käytöstä ja <xliff:g id="NEW_NETWORK">%2$s</xliff:g> otettiin käyttöön."</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"mobiilidata"</item> - <item msgid="5520925862115353992">"Wi-Fi"</item> - <item msgid="1055487873974272842">"Bluetooth"</item> - <item msgid="1616528372438698248">"Ethernet"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"mobiilidata"</item> + <item msgid="6341719431034774569">"Wi-Fi"</item> + <item msgid="5081440868800877512">"Bluetooth"</item> + <item msgid="1160736166977503463">"Ethernet"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"tuntematon verkon tyyppi"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-fr-rCA/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-fr-rCA/strings.xml index 02ef50b2c175..0badf1be0f9b 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-fr-rCA/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-fr-rCA/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"Connectez-vous au réseau Wi-Fi"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"Connectez-vous au réseau"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"Le réseau <xliff:g id="NETWORK_SSID">%1$s</xliff:g> n\'offre aucun accès à Internet"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"Touchez pour afficher les options"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"Le réseau cellulaire n\'offre aucun accès à Internet"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"Le réseau n\'offre aucun accès à Internet"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"Impossible d\'accéder au serveur DNS privé"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"Le réseau <xliff:g id="NETWORK_SSID">%1$s</xliff:g> offre une connectivité limitée"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"Touchez pour vous connecter quand même"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"Passé au réseau <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"L\'appareil utilise <xliff:g id="NEW_NETWORK">%1$s</xliff:g> quand <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> n\'a pas d\'accès à Internet. Des frais peuvent s\'appliquer."</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"Passé du réseau <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> au <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"un type de réseau inconnu"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"Ressources de connectivité système"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"Connectez-vous au réseau Wi-Fi"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"Connectez-vous au réseau"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"Le réseau <xliff:g id="NETWORK_SSID">%1$s</xliff:g> n\'offre aucun accès à Internet"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"Touchez pour afficher les options"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"Le réseau cellulaire n\'offre aucun accès à Internet"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"Le réseau n\'offre aucun accès à Internet"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"Impossible d\'accéder au serveur DNS privé"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"Le réseau <xliff:g id="NETWORK_SSID">%1$s</xliff:g> offre une connectivité limitée"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"Touchez pour vous connecter quand même"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"Passé au réseau <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"L\'appareil utilise <xliff:g id="NEW_NETWORK">%1$s</xliff:g> quand <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> n\'a pas d\'accès à Internet. Des frais peuvent s\'appliquer."</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"Passé du réseau <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> au <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"données cellulaires"</item> - <item msgid="5520925862115353992">"Wi-Fi"</item> - <item msgid="1055487873974272842">"Bluetooth"</item> - <item msgid="1616528372438698248">"Ethernet"</item> - <item msgid="9177085807664964627">"RPV"</item> + <item msgid="5454013645032700715">"données cellulaires"</item> + <item msgid="6341719431034774569">"Wi-Fi"</item> + <item msgid="5081440868800877512">"Bluetooth"</item> + <item msgid="1160736166977503463">"Ethernet"</item> + <item msgid="7347618872551558605">"RPV"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"un type de réseau inconnu"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-fr/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-fr/strings.xml index 08c9d8157a11..b4835258d9e3 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-fr/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-fr/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"Connectez-vous au réseau Wi-Fi"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"Se connecter au réseau"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"Aucune connexion à Internet pour <xliff:g id="NETWORK_SSID">%1$s</xliff:g>"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"Appuyez ici pour afficher des options."</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"Le réseau mobile ne dispose d\'aucun accès à Internet"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"Le réseau ne dispose d\'aucun accès à Internet"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"Impossible d\'accéder au serveur DNS privé"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"La connectivité de <xliff:g id="NETWORK_SSID">%1$s</xliff:g> est limitée"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"Appuyer pour se connecter quand même"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"Nouveau réseau : <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"L\'appareil utilise <xliff:g id="NEW_NETWORK">%1$s</xliff:g> lorsque <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> n\'a pas de connexion Internet. Des frais peuvent s\'appliquer."</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"Ancien réseau : <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g>. Nouveau réseau : <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"type de réseau inconnu"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"Ressources de connectivité système"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"Connectez-vous au réseau Wi-Fi"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"Se connecter au réseau"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"Aucune connexion à Internet pour <xliff:g id="NETWORK_SSID">%1$s</xliff:g>"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"Appuyez ici pour afficher des options."</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"Le réseau mobile ne dispose d\'aucun accès à Internet"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"Le réseau ne dispose d\'aucun accès à Internet"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"Impossible d\'accéder au serveur DNS privé"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"La connectivité de <xliff:g id="NETWORK_SSID">%1$s</xliff:g> est limitée"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"Appuyer pour se connecter quand même"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"Nouveau réseau : <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"L\'appareil utilise <xliff:g id="NEW_NETWORK">%1$s</xliff:g> lorsque <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> n\'a pas de connexion Internet. Des frais peuvent s\'appliquer."</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"Ancien réseau : <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g>. Nouveau réseau : <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"données mobiles"</item> - <item msgid="5520925862115353992">"Wi-Fi"</item> - <item msgid="1055487873974272842">"Bluetooth"</item> - <item msgid="1616528372438698248">"Ethernet"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"données mobiles"</item> + <item msgid="6341719431034774569">"Wi-Fi"</item> + <item msgid="5081440868800877512">"Bluetooth"</item> + <item msgid="1160736166977503463">"Ethernet"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"type de réseau inconnu"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-gl/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-gl/strings.xml index 9f98055ab962..dfe813746e81 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-gl/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-gl/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"Inicia sesión na rede wifi"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"Inicia sesión na rede"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> non ten acceso a Internet"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"Toca para ver opcións."</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"A rede de telefonía móbil non ten acceso a Internet"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"A rede non ten acceso a Internet"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"Non se puido acceder ao servidor DNS privado"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"A conectividade de <xliff:g id="NETWORK_SSID">%1$s</xliff:g> é limitada"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"Toca para conectarte de todas formas"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"Cambiouse a: <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"O dispositivo utiliza <xliff:g id="NEW_NETWORK">%1$s</xliff:g> cando <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> non ten acceso a Internet. Pódense aplicar cargos."</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"Cambiouse de <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> a <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"un tipo de rede descoñecido"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"Recursos de conectividade do sistema"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"Inicia sesión na rede wifi"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"Inicia sesión na rede"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> non ten acceso a Internet"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"Toca para ver opcións."</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"A rede de telefonía móbil non ten acceso a Internet"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"A rede non ten acceso a Internet"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"Non se puido acceder ao servidor DNS privado"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"A conectividade de <xliff:g id="NETWORK_SSID">%1$s</xliff:g> é limitada"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"Toca para conectarte de todas formas"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"Cambiouse a: <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"O dispositivo utiliza <xliff:g id="NEW_NETWORK">%1$s</xliff:g> cando <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> non ten acceso a Internet. Pódense aplicar cargos."</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"Cambiouse de <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> a <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"datos móbiles"</item> - <item msgid="5520925862115353992">"wifi"</item> - <item msgid="1055487873974272842">"Bluetooth"</item> - <item msgid="1616528372438698248">"Ethernet"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"datos móbiles"</item> + <item msgid="6341719431034774569">"wifi"</item> + <item msgid="5081440868800877512">"Bluetooth"</item> + <item msgid="1160736166977503463">"Ethernet"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"un tipo de rede descoñecido"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-gu/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-gu/strings.xml index 4ae5a2c45faf..e49b11d21ecf 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-gu/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-gu/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"વાઇ-ફાઇ નેટવર્ક પર સાઇન ઇન કરો"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"નેટવર્ક પર સાઇન ઇન કરો"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> ઇન્ટરનેટ ઍક્સેસ ધરાવતું નથી"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"વિકલ્પો માટે ટૅપ કરો"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"મોબાઇલ નેટવર્ક કોઈ ઇન્ટરનેટ ઍક્સેસ ધરાવતું નથી"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"નેટવર્ક કોઈ ઇન્ટરનેટ ઍક્સેસ ધરાવતું નથી"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"ખાનગી DNS સર્વર ઍક્સેસ કરી શકાતા નથી"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> મર્યાદિત કનેક્ટિવિટી ધરાવે છે"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"છતાં કનેક્ટ કરવા માટે ટૅપ કરો"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"<xliff:g id="NETWORK_TYPE">%1$s</xliff:g> પર સ્વિચ કર્યું"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"જ્યારે <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> પાસે કોઈ ઇન્ટરનેટ ઍક્સેસ ન હોય ત્યારે ઉપકરણ <xliff:g id="NEW_NETWORK">%1$s</xliff:g>નો ઉપયોગ કરે છે. શુલ્ક લાગુ થઈ શકે છે."</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> પરથી <xliff:g id="NEW_NETWORK">%2$s</xliff:g> પર સ્વિચ કર્યું"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"અજાણ્યો નેટવર્ક પ્રકાર"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"સિસ્ટમની કનેક્ટિવિટીનાં સાધનો"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"વાઇ-ફાઇ નેટવર્ક પર સાઇન ઇન કરો"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"નેટવર્ક પર સાઇન ઇન કરો"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> ઇન્ટરનેટ ઍક્સેસ ધરાવતું નથી"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"વિકલ્પો માટે ટૅપ કરો"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"મોબાઇલ નેટવર્ક કોઈ ઇન્ટરનેટ ઍક્સેસ ધરાવતું નથી"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"નેટવર્ક કોઈ ઇન્ટરનેટ ઍક્સેસ ધરાવતું નથી"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"ખાનગી DNS સર્વર ઍક્સેસ કરી શકાતા નથી"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> મર્યાદિત કનેક્ટિવિટી ધરાવે છે"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"છતાં કનેક્ટ કરવા માટે ટૅપ કરો"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"<xliff:g id="NETWORK_TYPE">%1$s</xliff:g> પર સ્વિચ કર્યું"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"જ્યારે <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> પાસે કોઈ ઇન્ટરનેટ ઍક્સેસ ન હોય ત્યારે ઉપકરણ <xliff:g id="NEW_NETWORK">%1$s</xliff:g>નો ઉપયોગ કરે છે. શુલ્ક લાગુ થઈ શકે છે."</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> પરથી <xliff:g id="NEW_NETWORK">%2$s</xliff:g> પર સ્વિચ કર્યું"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"મોબાઇલ ડેટા"</item> - <item msgid="5520925862115353992">"વાઇ-ફાઇ"</item> - <item msgid="1055487873974272842">"બ્લૂટૂથ"</item> - <item msgid="1616528372438698248">"ઇથરનેટ"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"મોબાઇલ ડેટા"</item> + <item msgid="6341719431034774569">"વાઇ-ફાઇ"</item> + <item msgid="5081440868800877512">"બ્લૂટૂથ"</item> + <item msgid="1160736166977503463">"ઇથરનેટ"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"કોઈ અજાણ્યો નેટવર્કનો પ્રકાર"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-hi/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-hi/strings.xml index eff1b600e487..80ed699768e8 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-hi/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-hi/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"वाई-फ़ाई नेटवर्क में साइन इन करें"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"नेटवर्क में साइन इन करें"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> का इंटरनेट नहीं चल रहा है"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"विकल्पों के लिए टैप करें"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"मोबाइल नेटवर्क पर इंटरनेट ऐक्सेस नहीं है"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"इस नेटवर्क पर इंटरनेट ऐक्सेस नहीं है"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"निजी डीएनएस सर्वर को ऐक्सेस नहीं किया जा सकता"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> की कनेक्टिविटी सीमित है"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"फिर भी कनेक्ट करने के लिए टैप करें"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"<xliff:g id="NETWORK_TYPE">%1$s</xliff:g> पर ले जाया गया"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"<xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> में इंटरनेट की सुविधा नहीं होने पर डिवाइस <xliff:g id="NEW_NETWORK">%1$s</xliff:g> का इस्तेमाल करता है. इसके लिए शुल्क लिया जा सकता है."</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> से <xliff:g id="NEW_NETWORK">%2$s</xliff:g> पर ले जाया गया"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"अज्ञात नेटवर्क प्रकार"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"सिस्टम कनेक्टिविटी के संसाधन"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"वाई-फ़ाई नेटवर्क में साइन इन करें"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"नेटवर्क में साइन इन करें"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> का इंटरनेट नहीं चल रहा है"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"विकल्पों के लिए टैप करें"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"मोबाइल नेटवर्क पर इंटरनेट ऐक्सेस नहीं है"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"इस नेटवर्क पर इंटरनेट ऐक्सेस नहीं है"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"निजी डीएनएस सर्वर को ऐक्सेस नहीं किया जा सकता"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> की कनेक्टिविटी सीमित है"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"फिर भी कनेक्ट करने के लिए टैप करें"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"<xliff:g id="NETWORK_TYPE">%1$s</xliff:g> पर ले जाया गया"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"<xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> में इंटरनेट की सुविधा नहीं होने पर डिवाइस <xliff:g id="NEW_NETWORK">%1$s</xliff:g> का इस्तेमाल करता है. इसके लिए शुल्क लिया जा सकता है."</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> से <xliff:g id="NEW_NETWORK">%2$s</xliff:g> पर ले जाया गया"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"मोबाइल डेटा"</item> - <item msgid="5520925862115353992">"वाई-फ़ाई"</item> - <item msgid="1055487873974272842">"ब्लूटूथ"</item> - <item msgid="1616528372438698248">"ईथरनेट"</item> - <item msgid="9177085807664964627">"वीपीएन"</item> + <item msgid="5454013645032700715">"मोबाइल डेटा"</item> + <item msgid="6341719431034774569">"वाई-फ़ाई"</item> + <item msgid="5081440868800877512">"ब्लूटूथ"</item> + <item msgid="1160736166977503463">"ईथरनेट"</item> + <item msgid="7347618872551558605">"वीपीएन"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"अज्ञात नेटवर्क टाइप"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-hr/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-hr/strings.xml index 52bfb936ba08..24bb22fd6921 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-hr/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-hr/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"Prijava na Wi-Fi mrežu"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"Prijava na mrežu"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> nema pristup internetu"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"Dodirnite za opcije"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"Mobilna mreža nema pristup internetu"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"Mreža nema pristup internetu"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"Nije moguće pristupiti privatnom DNS poslužitelju"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> ima ograničenu povezivost"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"Dodirnite da biste se ipak povezali"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"Prelazak na drugu mrežu: <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"Kada <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> nema pristup internetu, na uređaju se upotrebljava <xliff:g id="NEW_NETWORK">%1$s</xliff:g>. Moguća je naplata naknade."</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"Mreža je promijenjena: <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> > <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"nepoznata vrsta mreže"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"Resursi za povezivost sustava"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"Prijava na Wi-Fi mrežu"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"Prijava na mrežu"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> nema pristup internetu"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"Dodirnite za opcije"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"Mobilna mreža nema pristup internetu"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"Mreža nema pristup internetu"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"Nije moguće pristupiti privatnom DNS poslužitelju"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> ima ograničenu povezivost"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"Dodirnite da biste se ipak povezali"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"Prelazak na drugu mrežu: <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"Kada <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> nema pristup internetu, na uređaju se upotrebljava <xliff:g id="NEW_NETWORK">%1$s</xliff:g>. Moguća je naplata naknade."</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"Mreža je promijenjena: <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> > <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"mobilni podaci"</item> - <item msgid="5520925862115353992">"Wi-Fi"</item> - <item msgid="1055487873974272842">"Bluetooth"</item> - <item msgid="1616528372438698248">"Ethernet"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"mobilni podaci"</item> + <item msgid="6341719431034774569">"Wi-Fi"</item> + <item msgid="5081440868800877512">"Bluetooth"</item> + <item msgid="1160736166977503463">"Ethernet"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"nepoznata vrsta mreže"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-hu/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-hu/strings.xml index 2ff59b51733e..47a1142ac32f 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-hu/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-hu/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"Bejelentkezés Wi-Fi hálózatba"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"Bejelentkezés a hálózatba"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"A(z) <xliff:g id="NETWORK_SSID">%1$s</xliff:g> hálózaton nincs internet-hozzáférés"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"Koppintson a beállítások megjelenítéséhez"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"A mobilhálózaton nincs internet-hozzáférés"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"A hálózaton nincs internet-hozzáférés"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"A privát DNS-kiszolgálóhoz nem lehet hozzáférni"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"A(z) <xliff:g id="NETWORK_SSID">%1$s</xliff:g> hálózat korlátozott kapcsolatot biztosít"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"Koppintson, ha mindenképpen csatlakozni szeretne"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"Átváltva erre: <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"<xliff:g id="NEW_NETWORK">%1$s</xliff:g> használata, ha nincs internet-hozzáférés <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g>-kapcsolaton keresztül. A szolgáltató díjat számíthat fel."</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"Átváltva <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g>-hálózatról erre: <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"ismeretlen hálózati típus"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"Rendszerkapcsolat erőforrásai"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"Bejelentkezés Wi-Fi hálózatba"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"Bejelentkezés a hálózatba"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"A(z) <xliff:g id="NETWORK_SSID">%1$s</xliff:g> hálózaton nincs internet-hozzáférés"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"Koppintson a beállítások megjelenítéséhez"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"A mobilhálózaton nincs internet-hozzáférés"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"A hálózaton nincs internet-hozzáférés"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"A privát DNS-kiszolgálóhoz nem lehet hozzáférni"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"A(z) <xliff:g id="NETWORK_SSID">%1$s</xliff:g> hálózat korlátozott kapcsolatot biztosít"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"Koppintson, ha mindenképpen csatlakozni szeretne"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"Átváltva erre: <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"<xliff:g id="NEW_NETWORK">%1$s</xliff:g> használata, ha nincs internet-hozzáférés <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g>-kapcsolaton keresztül. A szolgáltató díjat számíthat fel."</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"Átváltva <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g>-hálózatról erre: <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"mobiladatok"</item> - <item msgid="5520925862115353992">"Wi-Fi"</item> - <item msgid="1055487873974272842">"Bluetooth"</item> - <item msgid="1616528372438698248">"Ethernet"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"mobiladatok"</item> + <item msgid="6341719431034774569">"Wi-Fi"</item> + <item msgid="5081440868800877512">"Bluetooth"</item> + <item msgid="1160736166977503463">"Ethernet"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"ismeretlen hálózati típus"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-hy/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-hy/strings.xml index b35d31c7b681..dd951e818274 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-hy/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-hy/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"Մուտք գործեք Wi-Fi ցանց"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"Մուտք գործեք ցանց"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> ցանցը չունի մուտք ինտերնետին"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"Հպեք՝ ընտրանքները տեսնելու համար"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"Բջջային ցանցը չի ապահովում ինտերնետ կապ"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"Ցանցը միացված չէ ինտերնետին"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"Մասնավոր DNS սերվերն անհասանելի է"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> ցանցի կապը սահմանափակ է"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"Հպեք՝ միանալու համար"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"Անցել է <xliff:g id="NETWORK_TYPE">%1$s</xliff:g> ցանցի"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"Երբ <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> ցանցում ինտերնետ կապ չի լինում, սարքն անցնում է <xliff:g id="NEW_NETWORK">%1$s</xliff:g> ցանցի: Նման դեպքում կարող են վճարներ գանձվել:"</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> ցանցից անցել է <xliff:g id="NEW_NETWORK">%2$s</xliff:g> ցանցի"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"ցանցի անհայտ տեսակ"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"System Connectivity Resources"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"Մուտք գործեք Wi-Fi ցանց"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"Մուտք գործեք ցանց"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> ցանցը չունի մուտք ինտերնետին"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"Հպեք՝ ընտրանքները տեսնելու համար"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"Բջջային ցանցը չի ապահովում ինտերնետ կապ"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"Ցանցը միացված չէ ինտերնետին"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"Մասնավոր DNS սերվերն անհասանելի է"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> ցանցի կապը սահմանափակ է"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"Հպեք՝ միանալու համար"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"Անցել է <xliff:g id="NETWORK_TYPE">%1$s</xliff:g> ցանցի"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"Երբ <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> ցանցում ինտերնետ կապ չի լինում, սարքն անցնում է <xliff:g id="NEW_NETWORK">%1$s</xliff:g> ցանցի: Նման դեպքում կարող են վճարներ գանձվել:"</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> ցանցից անցել է <xliff:g id="NEW_NETWORK">%2$s</xliff:g> ցանցի"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"բջջային ինտերնետ"</item> - <item msgid="5520925862115353992">"Wi-Fi"</item> - <item msgid="1055487873974272842">"Bluetooth"</item> - <item msgid="1616528372438698248">"Ethernet"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"բջջային ինտերնետ"</item> + <item msgid="6341719431034774569">"Wi-Fi"</item> + <item msgid="5081440868800877512">"Bluetooth"</item> + <item msgid="1160736166977503463">"Ethernet"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"ցանցի անհայտ տեսակ"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-in/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-in/strings.xml index 27d7d89601b1..d559f6b11e89 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-in/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-in/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"Login ke jaringan Wi-Fi"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"Login ke jaringan"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> tidak memiliki akses internet"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"Ketuk untuk melihat opsi"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"Jaringan seluler tidak memiliki akses internet"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"Jaringan tidak memiliki akses internet"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"Server DNS pribadi tidak dapat diakses"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> memiliki konektivitas terbatas"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"Ketuk untuk tetap menyambungkan"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"Dialihkan ke <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"Perangkat menggunakan <xliff:g id="NEW_NETWORK">%1$s</xliff:g> jika <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> tidak memiliki akses internet. Tarif mungkin berlaku."</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"Dialihkan dari <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> ke <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"jenis jaringan yang tidak dikenal"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"Resource Konektivitas Sistem"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"Login ke jaringan Wi-Fi"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"Login ke jaringan"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> tidak memiliki akses internet"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"Ketuk untuk melihat opsi"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"Jaringan seluler tidak memiliki akses internet"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"Jaringan tidak memiliki akses internet"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"Server DNS pribadi tidak dapat diakses"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> memiliki konektivitas terbatas"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"Ketuk untuk tetap menyambungkan"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"Dialihkan ke <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"Perangkat menggunakan <xliff:g id="NEW_NETWORK">%1$s</xliff:g> jika <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> tidak memiliki akses internet. Tarif mungkin berlaku."</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"Dialihkan dari <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> ke <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"data seluler"</item> - <item msgid="5520925862115353992">"Wi-Fi"</item> - <item msgid="1055487873974272842">"Bluetooth"</item> - <item msgid="1616528372438698248">"Ethernet"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"data seluler"</item> + <item msgid="6341719431034774569">"Wi-Fi"</item> + <item msgid="5081440868800877512">"Bluetooth"</item> + <item msgid="1160736166977503463">"Ethernet"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"jenis jaringan yang tidak dikenal"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-is/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-is/strings.xml index 97f42dcf07f2..877c85f14792 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-is/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-is/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"Skrá inn á Wi-Fi net"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"Skrá inn á net"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> er ekki með internetaðgang"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"Ýttu til að sjá valkosti"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"Farsímakerfið er ekki tengt við internetið"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"Netkerfið er ekki tengt við internetið"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"Ekki næst í DNS-einkaþjón"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"Tengigeta <xliff:g id="NETWORK_SSID">%1$s</xliff:g> er takmörkuð"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"Ýttu til að tengjast samt"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"Skipt yfir á <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"Tækið notar <xliff:g id="NEW_NETWORK">%1$s</xliff:g> þegar <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> er ekki með internetaðgang. Gjöld kunna að eiga við."</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"Skipt úr <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> yfir í <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"óþekkt tegund netkerfis"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"Tengigögn kerfis"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"Skrá inn á Wi-Fi net"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"Skrá inn á net"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> er ekki með internetaðgang"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"Ýttu til að sjá valkosti"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"Farsímakerfið er ekki tengt við internetið"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"Netkerfið er ekki tengt við internetið"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"Ekki næst í DNS-einkaþjón"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"Tengigeta <xliff:g id="NETWORK_SSID">%1$s</xliff:g> er takmörkuð"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"Ýttu til að tengjast samt"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"Skipt yfir á <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"Tækið notar <xliff:g id="NEW_NETWORK">%1$s</xliff:g> þegar <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> er ekki með internetaðgang. Gjöld kunna að eiga við."</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"Skipt úr <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> yfir í <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"farsímagögn"</item> - <item msgid="5520925862115353992">"Wi-Fi"</item> - <item msgid="1055487873974272842">"Bluetooth"</item> - <item msgid="1616528372438698248">"Ethernet"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"farsímagögn"</item> + <item msgid="6341719431034774569">"Wi-Fi"</item> + <item msgid="5081440868800877512">"Bluetooth"</item> + <item msgid="1160736166977503463">"Ethernet"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"óþekkt tegund netkerfis"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-it/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-it/strings.xml index 7836101137fe..bcac393c9c57 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-it/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-it/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"Accedi a rete Wi-Fi"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"Accedi alla rete"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> non ha accesso a Internet"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"Tocca per le opzioni"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"La rete mobile non ha accesso a Internet"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"La rete non ha accesso a Internet"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"Non è possibile accedere al server DNS privato"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> ha una connettività limitata"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"Tocca per connettere comunque"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"Passato a <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"Il dispositivo utilizza <xliff:g id="NEW_NETWORK">%1$s</xliff:g> quando <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> non ha accesso a Internet. Potrebbero essere applicati costi."</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"Passato da <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> a <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"tipo di rete sconosciuto"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"Risorse per connettività di sistema"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"Accedi a rete Wi-Fi"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"Accedi alla rete"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> non ha accesso a Internet"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"Tocca per le opzioni"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"La rete mobile non ha accesso a Internet"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"La rete non ha accesso a Internet"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"Non è possibile accedere al server DNS privato"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> ha una connettività limitata"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"Tocca per connettere comunque"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"Passato a <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"Il dispositivo utilizza <xliff:g id="NEW_NETWORK">%1$s</xliff:g> quando <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> non ha accesso a Internet. Potrebbero essere applicati costi."</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"Passato da <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> a <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"dati mobili"</item> - <item msgid="5520925862115353992">"Wi-Fi"</item> - <item msgid="1055487873974272842">"Bluetooth"</item> - <item msgid="1616528372438698248">"Ethernet"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"dati mobili"</item> + <item msgid="6341719431034774569">"Wi-Fi"</item> + <item msgid="5081440868800877512">"Bluetooth"</item> + <item msgid="1160736166977503463">"Ethernet"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"tipo di rete sconosciuto"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-iw/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-iw/strings.xml index f322b995470e..d6684ce1062e 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-iw/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-iw/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"היכנס לרשת Wi-Fi"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"היכנס לרשת"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"ל-<xliff:g id="NETWORK_SSID">%1$s</xliff:g> אין גישה לאינטרנט"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"הקש לקבלת אפשרויות"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"לרשת הסלולרית אין גישה לאינטרנט"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"לרשת אין גישה לאינטרנט"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"לא ניתן לגשת לשרת DNS הפרטי"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"הקישוריות של <xliff:g id="NETWORK_SSID">%1$s</xliff:g> מוגבלת"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"כדי להתחבר למרות זאת יש להקיש"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"מעבר אל <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"המכשיר משתמש ברשת <xliff:g id="NEW_NETWORK">%1$s</xliff:g> כשלרשת <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> אין גישה לאינטרנט. עשויים לחול חיובים."</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"עבר מרשת <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> לרשת <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"סוג רשת לא מזוהה"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"משאבי קישוריות מערכת"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"היכנס לרשת Wi-Fi"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"היכנס לרשת"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"ל-<xliff:g id="NETWORK_SSID">%1$s</xliff:g> אין גישה לאינטרנט"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"הקש לקבלת אפשרויות"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"לרשת הסלולרית אין גישה לאינטרנט"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"לרשת אין גישה לאינטרנט"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"לא ניתן לגשת לשרת DNS הפרטי"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"הקישוריות של <xliff:g id="NETWORK_SSID">%1$s</xliff:g> מוגבלת"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"כדי להתחבר למרות זאת יש להקיש"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"מעבר אל <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"המכשיר משתמש ברשת <xliff:g id="NEW_NETWORK">%1$s</xliff:g> כשלרשת <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> אין גישה לאינטרנט. עשויים לחול חיובים."</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"עבר מרשת <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> לרשת <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"חבילת גלישה"</item> - <item msgid="5520925862115353992">"Wi-Fi"</item> - <item msgid="1055487873974272842">"Bluetooth"</item> - <item msgid="1616528372438698248">"Ethernet"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"חבילת גלישה"</item> + <item msgid="6341719431034774569">"Wi-Fi"</item> + <item msgid="5081440868800877512">"Bluetooth"</item> + <item msgid="1160736166977503463">"אתרנט"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"סוג רשת לא מזוהה"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-ja/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-ja/strings.xml index 1aa3216fbcdb..fa4a30aedb22 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-ja/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-ja/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"Wi-Fiネットワークにログイン"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"ネットワークにログインしてください"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> はインターネットにアクセスできません"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"タップしてその他のオプションを表示"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"モバイル ネットワークがインターネットに接続されていません"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"ネットワークがインターネットに接続されていません"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"プライベート DNS サーバーにアクセスできません"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> の接続が制限されています"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"接続するにはタップしてください"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"「<xliff:g id="NETWORK_TYPE">%1$s</xliff:g>」に切り替えました"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"デバイスで「<xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g>」によるインターネット接続ができない場合に「<xliff:g id="NEW_NETWORK">%1$s</xliff:g>」を使用します。通信料が発生することがあります。"</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"「<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g>」から「<xliff:g id="NEW_NETWORK">%2$s</xliff:g>」に切り替えました"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"不明なネットワーク タイプ"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"システム接続リソース"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"Wi-Fiネットワークにログイン"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"ネットワークにログインしてください"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> はインターネットにアクセスできません"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"タップしてその他のオプションを表示"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"モバイル ネットワークがインターネットに接続されていません"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"ネットワークがインターネットに接続されていません"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"プライベート DNS サーバーにアクセスできません"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> の接続が制限されています"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"接続するにはタップしてください"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"「<xliff:g id="NETWORK_TYPE">%1$s</xliff:g>」に切り替えました"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"デバイスで「<xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g>」によるインターネット接続ができない場合に「<xliff:g id="NEW_NETWORK">%1$s</xliff:g>」を使用します。通信料が発生することがあります。"</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"「<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g>」から「<xliff:g id="NEW_NETWORK">%2$s</xliff:g>」に切り替えました"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"モバイルデータ"</item> - <item msgid="5520925862115353992">"Wi-Fi"</item> - <item msgid="1055487873974272842">"Bluetooth"</item> - <item msgid="1616528372438698248">"イーサネット"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"モバイルデータ"</item> + <item msgid="6341719431034774569">"Wi-Fi"</item> + <item msgid="5081440868800877512">"Bluetooth"</item> + <item msgid="1160736166977503463">"イーサネット"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"不明なネットワーク タイプ"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-ka/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-ka/strings.xml index 61d21b55a059..418331036efc 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-ka/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-ka/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"Wi-Fi ქსელთან დაკავშირება"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"ქსელში შესვლა"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g>-ს არ აქვს ინტერნეტზე წვდომა"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"შეეხეთ ვარიანტების სანახავად"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"მობილურ ქსელს არ აქვს ინტერნეტზე წვდომა"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"ქსელს არ აქვს ინტერნეტზე წვდომა"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"პირად DNS სერვერზე წვდომა შეუძლებელია"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g>-ის კავშირები შეზღუდულია"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"შეეხეთ, თუ მაინც გსურთ დაკავშირება"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"ახლა გამოიყენება <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"თუ <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> ინტერნეტთან კავშირს დაკარგავს, მოწყობილობის მიერ <xliff:g id="NEW_NETWORK">%1$s</xliff:g> იქნება გამოყენებული, რამაც შეიძლება დამატებითი ხარჯები გამოიწვიოს."</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"ახლა გამოიყენება <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> (გამოიყენებოდა <xliff:g id="NEW_NETWORK">%2$s</xliff:g>)"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"უცნობი ტიპის ქსელი"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"სისტემის კავშირის რესურსები"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"Wi-Fi ქსელთან დაკავშირება"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"ქსელში შესვლა"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g>-ს არ აქვს ინტერნეტზე წვდომა"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"შეეხეთ ვარიანტების სანახავად"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"მობილურ ქსელს არ აქვს ინტერნეტზე წვდომა"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"ქსელს არ აქვს ინტერნეტზე წვდომა"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"პირად DNS სერვერზე წვდომა შეუძლებელია"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g>-ის კავშირები შეზღუდულია"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"შეეხეთ, თუ მაინც გსურთ დაკავშირება"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"ახლა გამოიყენება <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"თუ <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> ინტერნეტთან კავშირს დაკარგავს, მოწყობილობის მიერ <xliff:g id="NEW_NETWORK">%1$s</xliff:g> იქნება გამოყენებული, რამაც შეიძლება დამატებითი ხარჯები გამოიწვიოს."</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"ახლა გამოიყენება <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> (გამოიყენებოდა <xliff:g id="NEW_NETWORK">%2$s</xliff:g>)"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"მობილური ინტერნეტი"</item> - <item msgid="5520925862115353992">"Wi-Fi"</item> - <item msgid="1055487873974272842">"Bluetooth"</item> - <item msgid="1616528372438698248">"Ethernet"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"მობილური ინტერნეტი"</item> + <item msgid="6341719431034774569">"Wi-Fi"</item> + <item msgid="5081440868800877512">"Bluetooth"</item> + <item msgid="1160736166977503463">"Ethernet"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"უცნობი ტიპის ქსელი"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-kk/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-kk/strings.xml index 969aaef52217..54d5eb30cd1d 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-kk/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-kk/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"Wi-Fi желісіне кіру"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"Желіге кіру"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> желісінің интернетті пайдалану мүмкіндігі шектеулі."</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"Опциялар үшін түртіңіз"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"Мобильдік желі интернетке қосылмаған."</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"Желі интернетке қосылмаған."</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"Жеке DNS серверіне кіру мүмкін емес."</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> желісінің қосылу мүмкіндігі шектеулі."</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"Бәрібір жалғау үшін түртіңіз."</string> - <string name="network_switch_metered" msgid="1531869544142283384">"<xliff:g id="NETWORK_TYPE">%1$s</xliff:g> желісіне ауысты"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"Құрылғы <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> желісінде интернетпен байланыс жоғалған жағдайда <xliff:g id="NEW_NETWORK">%1$s</xliff:g> желісін пайдаланады. Деректер ақысы алынуы мүмкін."</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> желісінен <xliff:g id="NEW_NETWORK">%2$s</xliff:g> желісіне ауысты"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"желі түрі белгісіз"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"Жүйе байланысы ресурстары"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"Wi-Fi желісіне кіру"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"Желіге кіру"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> желісінің интернетті пайдалану мүмкіндігі шектеулі."</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"Опциялар үшін түртіңіз"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"Мобильдік желі интернетке қосылмаған."</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"Желі интернетке қосылмаған."</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"Жеке DNS серверіне кіру мүмкін емес."</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> желісінің қосылу мүмкіндігі шектеулі."</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"Бәрібір жалғау үшін түртіңіз."</string> + <string name="network_switch_metered" msgid="2814798852883117872">"<xliff:g id="NETWORK_TYPE">%1$s</xliff:g> желісіне ауысты"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"Құрылғы <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> желісінде интернетпен байланыс жоғалған жағдайда <xliff:g id="NEW_NETWORK">%1$s</xliff:g> желісін пайдаланады. Деректер ақысы алынуы мүмкін."</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> желісінен <xliff:g id="NEW_NETWORK">%2$s</xliff:g> желісіне ауысты"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"мобильдік деректер"</item> - <item msgid="5520925862115353992">"Wi-Fi"</item> - <item msgid="1055487873974272842">"Bluetooth"</item> - <item msgid="1616528372438698248">"Ethernet"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"мобильдік деректер"</item> + <item msgid="6341719431034774569">"Wi-Fi"</item> + <item msgid="5081440868800877512">"Bluetooth"</item> + <item msgid="1160736166977503463">"Ethernet"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"желі түрі белгісіз"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-km/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-km/strings.xml index da3c3378601b..bd778a1623b0 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-km/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-km/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"ចូលបណ្ដាញវ៉ាយហ្វាយ"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"ចូលទៅបណ្តាញ"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> មិនមានការតភ្ជាប់អ៊ីនធឺណិតទេ"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"ប៉ះសម្រាប់ជម្រើស"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"បណ្ដាញទូរសព្ទចល័តមិនមានការតភ្ជាប់អ៊ីនធឺណិតទេ"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"បណ្ដាញមិនមានការតភ្ជាប់អ៊ីនធឺណិតទេ"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"មិនអាចចូលប្រើម៉ាស៊ីនមេ DNS ឯកជនបានទេ"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> មានការតភ្ជាប់មានកម្រិត"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"មិនអីទេ ចុចភ្ជាប់ចុះ"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"បានប្តូរទៅ <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"ឧបករណ៍ប្រើ <xliff:g id="NEW_NETWORK">%1$s</xliff:g> នៅពេលដែល <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> មិនមានការតភ្ជាប់អ៊ីនធឺណិត។ អាចគិតថ្លៃលើការប្រើប្រាស់ទិន្នន័យ។"</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"បានប្តូរពី <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> ទៅ <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"ប្រភេទបណ្តាញមិនស្គាល់"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"ធនធានតភ្ជាប់ប្រព័ន្ធ"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"ចូលបណ្ដាញវ៉ាយហ្វាយ"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"ចូលទៅបណ្តាញ"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> មិនមានការតភ្ជាប់អ៊ីនធឺណិតទេ"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"ប៉ះសម្រាប់ជម្រើស"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"បណ្ដាញទូរសព្ទចល័តមិនមានការតភ្ជាប់អ៊ីនធឺណិតទេ"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"បណ្ដាញមិនមានការតភ្ជាប់អ៊ីនធឺណិតទេ"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"មិនអាចចូលប្រើម៉ាស៊ីនមេ DNS ឯកជនបានទេ"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> មានការតភ្ជាប់មានកម្រិត"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"មិនអីទេ ចុចភ្ជាប់ចុះ"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"បានប្តូរទៅ <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"ឧបករណ៍ប្រើ <xliff:g id="NEW_NETWORK">%1$s</xliff:g> នៅពេលដែល <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> មិនមានការតភ្ជាប់អ៊ីនធឺណិត។ អាចគិតថ្លៃលើការប្រើប្រាស់ទិន្នន័យ។"</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"បានប្តូរពី <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> ទៅ <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"ទិន្នន័យទូរសព្ទចល័ត"</item> - <item msgid="5520925862115353992">"Wi-Fi"</item> - <item msgid="1055487873974272842">"ប៊្លូធូស"</item> - <item msgid="1616528372438698248">"អ៊ីសឺរណិត"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"ទិន្នន័យទូរសព្ទចល័ត"</item> + <item msgid="6341719431034774569">"Wi-Fi"</item> + <item msgid="5081440868800877512">"ប៊្លូធូស"</item> + <item msgid="1160736166977503463">"អ៊ីសឺរណិត"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"ប្រភេទបណ្តាញដែលមិនស្គាល់"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-kn/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-kn/strings.xml index 3b5e04773151..7f3a420dac78 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-kn/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-kn/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"ವೈ-ಫೈ ನೆಟ್ವರ್ಕ್ಗೆ ಸೈನ್ ಇನ್ ಮಾಡಿ"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"ನೆಟ್ವರ್ಕ್ಗೆ ಸೈನ್ ಇನ್ ಮಾಡಿ"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> ಯಾವುದೇ ಇಂಟರ್ನೆಟ್ ಸಂಪರ್ಕವನ್ನು ಹೊಂದಿಲ್ಲ"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"ಆಯ್ಕೆಗಳಿಗೆ ಟ್ಯಾಪ್ ಮಾಡಿ"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"ಮೊಬೈಲ್ ನೆಟ್ವರ್ಕ್ ಯಾವುದೇ ಇಂಟರ್ನೆಟ್ ಪ್ರವೇಶವನ್ನು ಹೊಂದಿಲ್ಲ"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"ನೆಟ್ವರ್ಕ್ ಇಂಟರ್ನೆಟ್ ಪ್ರವೇಶವನ್ನು ಹೊಂದಿಲ್ಲ"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"ಖಾಸಗಿ DNS ಸರ್ವರ್ ಅನ್ನು ಪ್ರವೇಶಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> ಸೀಮಿತ ಸಂಪರ್ಕ ಕಲ್ಪಿಸುವಿಕೆಯನ್ನು ಹೊಂದಿದೆ"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"ಹೇಗಾದರೂ ಸಂಪರ್ಕಿಸಲು ಟ್ಯಾಪ್ ಮಾಡಿ"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"<xliff:g id="NETWORK_TYPE">%1$s</xliff:g> ಗೆ ಬದಲಾಯಿಸಲಾಗಿದೆ"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"<xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> ಇಂಟರ್ನೆಟ್ ಪ್ರವೇಶ ಹೊಂದಿಲ್ಲದಿರುವಾಗ, ಸಾಧನವು <xliff:g id="NEW_NETWORK">%1$s</xliff:g> ಬಳಸುತ್ತದೆ. ಶುಲ್ಕಗಳು ಅನ್ವಯವಾಗಬಹುದು."</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> ರಿಂದ <xliff:g id="NEW_NETWORK">%2$s</xliff:g> ಗೆ ಬದಲಾಯಿಸಲಾಗಿದೆ"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"ಅಪರಿಚಿತ ನೆಟ್ವರ್ಕ್ ಪ್ರಕಾರ"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"ಸಿಸ್ಟಂ ಸಂಪರ್ಕ ಕಲ್ಪಿಸುವಿಕೆ ಮಾಹಿತಿಯ ಮೂಲಗಳು"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"ವೈ-ಫೈ ನೆಟ್ವರ್ಕ್ಗೆ ಸೈನ್ ಇನ್ ಮಾಡಿ"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"ನೆಟ್ವರ್ಕ್ಗೆ ಸೈನ್ ಇನ್ ಮಾಡಿ"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> ಯಾವುದೇ ಇಂಟರ್ನೆಟ್ ಸಂಪರ್ಕವನ್ನು ಹೊಂದಿಲ್ಲ"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"ಆಯ್ಕೆಗಳಿಗೆ ಟ್ಯಾಪ್ ಮಾಡಿ"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"ಮೊಬೈಲ್ ನೆಟ್ವರ್ಕ್ ಯಾವುದೇ ಇಂಟರ್ನೆಟ್ ಪ್ರವೇಶವನ್ನು ಹೊಂದಿಲ್ಲ"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"ನೆಟ್ವರ್ಕ್ ಇಂಟರ್ನೆಟ್ ಪ್ರವೇಶವನ್ನು ಹೊಂದಿಲ್ಲ"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"ಖಾಸಗಿ DNS ಸರ್ವರ್ ಅನ್ನು ಪ್ರವೇಶಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> ಸೀಮಿತ ಸಂಪರ್ಕ ಕಲ್ಪಿಸುವಿಕೆಯನ್ನು ಹೊಂದಿದೆ"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"ಹೇಗಾದರೂ ಸಂಪರ್ಕಿಸಲು ಟ್ಯಾಪ್ ಮಾಡಿ"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"<xliff:g id="NETWORK_TYPE">%1$s</xliff:g> ಗೆ ಬದಲಾಯಿಸಲಾಗಿದೆ"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"<xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> ಇಂಟರ್ನೆಟ್ ಪ್ರವೇಶ ಹೊಂದಿಲ್ಲದಿರುವಾಗ, ಸಾಧನವು <xliff:g id="NEW_NETWORK">%1$s</xliff:g> ಬಳಸುತ್ತದೆ. ಶುಲ್ಕಗಳು ಅನ್ವಯವಾಗಬಹುದು."</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> ರಿಂದ <xliff:g id="NEW_NETWORK">%2$s</xliff:g> ಗೆ ಬದಲಾಯಿಸಲಾಗಿದೆ"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"ಮೊಬೈಲ್ ಡೇಟಾ"</item> - <item msgid="5520925862115353992">"ವೈ-ಫೈ"</item> - <item msgid="1055487873974272842">"ಬ್ಲೂಟೂತ್"</item> - <item msgid="1616528372438698248">"ಇಥರ್ನೆಟ್"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"ಮೊಬೈಲ್ ಡೇಟಾ"</item> + <item msgid="6341719431034774569">"ವೈ-ಫೈ"</item> + <item msgid="5081440868800877512">"ಬ್ಲೂಟೂತ್"</item> + <item msgid="1160736166977503463">"ಇಥರ್ನೆಟ್"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"ಅಪರಿಚಿತ ನೆಟ್ವರ್ಕ್ ಪ್ರಕಾರ"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-ko/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-ko/strings.xml index 874bd7597049..a763cc5e9cb2 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-ko/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-ko/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"Wi-Fi 네트워크에 로그인"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"네트워크에 로그인"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g>이(가) 인터넷에 액세스할 수 없습니다."</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"탭하여 옵션 보기"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"모바일 네트워크에 인터넷이 연결되어 있지 않습니다."</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"네트워크에 인터넷이 연결되어 있지 않습니다."</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"비공개 DNS 서버에 액세스할 수 없습니다."</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g>에서 연결을 제한했습니다."</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"계속 연결하려면 탭하세요."</string> - <string name="network_switch_metered" msgid="1531869544142283384">"<xliff:g id="NETWORK_TYPE">%1$s</xliff:g>(으)로 전환"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"<xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g>(으)로 인터넷에 연결할 수 없는 경우 기기에서 <xliff:g id="NEW_NETWORK">%1$s</xliff:g>이(가) 사용됩니다. 요금이 부과될 수 있습니다."</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g>에서 <xliff:g id="NEW_NETWORK">%2$s</xliff:g>(으)로 전환"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"알 수 없는 네트워크 유형"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"시스템 연결 리소스"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"Wi-Fi 네트워크에 로그인"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"네트워크에 로그인"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g>이(가) 인터넷에 액세스할 수 없습니다."</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"탭하여 옵션 보기"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"모바일 네트워크에 인터넷이 연결되어 있지 않습니다."</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"네트워크에 인터넷이 연결되어 있지 않습니다."</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"비공개 DNS 서버에 액세스할 수 없습니다."</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g>에서 연결을 제한했습니다."</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"계속 연결하려면 탭하세요."</string> + <string name="network_switch_metered" msgid="2814798852883117872">"<xliff:g id="NETWORK_TYPE">%1$s</xliff:g>(으)로 전환"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"<xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g>(으)로 인터넷에 연결할 수 없는 경우 기기에서 <xliff:g id="NEW_NETWORK">%1$s</xliff:g>이(가) 사용됩니다. 요금이 부과될 수 있습니다."</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g>에서 <xliff:g id="NEW_NETWORK">%2$s</xliff:g>(으)로 전환"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"모바일 데이터"</item> - <item msgid="5520925862115353992">"Wi-Fi"</item> - <item msgid="1055487873974272842">"블루투스"</item> - <item msgid="1616528372438698248">"이더넷"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"모바일 데이터"</item> + <item msgid="6341719431034774569">"Wi-Fi"</item> + <item msgid="5081440868800877512">"블루투스"</item> + <item msgid="1160736166977503463">"이더넷"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"알 수 없는 네트워크 유형"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-ky/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-ky/strings.xml index 1ace4dc8ecf5..3550af80cdf9 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-ky/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-ky/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"Wi-Fi түйүнүнө кирүү"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"Тармакка кирүү"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> Интернетке туташуусу жок"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"Параметрлерди ачуу үчүн таптап коюңуз"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"Мобилдик Интернет жок"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"Тармактын Интернет жок"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"Жеке DNS сервери жеткиликсиз"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> байланышы чектелген"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"Баары бир туташуу үчүн таптаңыз"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"<xliff:g id="NETWORK_TYPE">%1$s</xliff:g> тармагына которуштурулду"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"<xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> тармагы Интернетке туташпай турганда, түзмөгүңүз <xliff:g id="NEW_NETWORK">%1$s</xliff:g> тармагын колдонот. Акы алынышы мүмкүн."</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> дегенден <xliff:g id="NEW_NETWORK">%2$s</xliff:g> тармагына которуштурулду"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"белгисиз тармак түрү"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"Тутумдун байланыш булагы"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"Wi-Fi түйүнүнө кирүү"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"Тармакка кирүү"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> Интернетке туташуусу жок"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"Параметрлерди ачуу үчүн таптап коюңуз"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"Мобилдик Интернет жок"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"Тармактын Интернет жок"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"Жеке DNS сервери жеткиликсиз"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> байланышы чектелген"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"Баары бир туташуу үчүн таптаңыз"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"<xliff:g id="NETWORK_TYPE">%1$s</xliff:g> тармагына которуштурулду"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"<xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> тармагы Интернетке туташпай турганда, түзмөгүңүз <xliff:g id="NEW_NETWORK">%1$s</xliff:g> тармагын колдонот. Акы алынышы мүмкүн."</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> дегенден <xliff:g id="NEW_NETWORK">%2$s</xliff:g> тармагына которуштурулду"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"мобилдик трафик"</item> - <item msgid="5520925862115353992">"Wi-Fi"</item> - <item msgid="1055487873974272842">"Bluetooth"</item> - <item msgid="1616528372438698248">"Ethernet"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"мобилдик трафик"</item> + <item msgid="6341719431034774569">"Wi‑Fi"</item> + <item msgid="5081440868800877512">"Bluetooth"</item> + <item msgid="1160736166977503463">"Ethernet"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"белгисиз тармак түрү"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-lo/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-lo/strings.xml index 3db497ef4588..4b3056f54048 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-lo/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-lo/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"ເຂົ້າສູ່ລະບົບເຄືອຂ່າຍ Wi-Fi"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"ລົງຊື່ເຂົ້າເຄືອຂ່າຍ"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> ບໍ່ມີການເຊື່ອມຕໍ່ອິນເຕີເນັດ"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"ແຕະເພື່ອເບິ່ງຕົວເລືອກ"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"ເຄືອຂ່າຍມືຖືບໍ່ສາມາດເຂົ້າເຖິງອິນເຕີເນັດໄດ້"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"ເຄືອຂ່າຍບໍ່ສາມາດເຂົ້າເຖິງອິນເຕີເນັດໄດ້"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"ບໍ່ສາມາດເຂົ້າເຖິງເຊີບເວີ DNS ສ່ວນຕົວໄດ້"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> ມີການເຊື່ອມຕໍ່ທີ່ຈຳກັດ"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"ແຕະເພື່ອຢືນຢັນການເຊື່ອມຕໍ່"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"ສະຫຼັບໄປໃຊ້ <xliff:g id="NETWORK_TYPE">%1$s</xliff:g> ແລ້ວ"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"ອຸປະກອນຈະໃຊ້ <xliff:g id="NEW_NETWORK">%1$s</xliff:g> ເມື່ອ <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> ບໍ່ມີການເຊື່ອມຕໍ່ອິນເຕີເນັດ. ອາດມີການຮຽກເກັບຄ່າບໍລິການ."</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"ສະຫຼັບຈາກ <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> ໄປໃຊ້ <xliff:g id="NEW_NETWORK">%2$s</xliff:g> ແລ້ວ"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"ບໍ່ຮູ້ຈັກປະເພດເຄືອຂ່າຍ"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"ແຫຼ່ງຂໍ້ມູນການເຊື່ອມຕໍ່ລະບົບ"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"ເຂົ້າສູ່ລະບົບເຄືອຂ່າຍ Wi-Fi"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"ລົງຊື່ເຂົ້າເຄືອຂ່າຍ"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> ບໍ່ມີການເຊື່ອມຕໍ່ອິນເຕີເນັດ"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"ແຕະເພື່ອເບິ່ງຕົວເລືອກ"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"ເຄືອຂ່າຍມືຖືບໍ່ສາມາດເຂົ້າເຖິງອິນເຕີເນັດໄດ້"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"ເຄືອຂ່າຍບໍ່ສາມາດເຂົ້າເຖິງອິນເຕີເນັດໄດ້"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"ບໍ່ສາມາດເຂົ້າເຖິງເຊີບເວີ DNS ສ່ວນຕົວໄດ້"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> ມີການເຊື່ອມຕໍ່ທີ່ຈຳກັດ"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"ແຕະເພື່ອຢືນຢັນການເຊື່ອມຕໍ່"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"ສະຫຼັບໄປໃຊ້ <xliff:g id="NETWORK_TYPE">%1$s</xliff:g> ແລ້ວ"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"ອຸປະກອນຈະໃຊ້ <xliff:g id="NEW_NETWORK">%1$s</xliff:g> ເມື່ອ <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> ບໍ່ມີການເຊື່ອມຕໍ່ອິນເຕີເນັດ. ອາດມີການຮຽກເກັບຄ່າບໍລິການ."</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"ສະຫຼັບຈາກ <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> ໄປໃຊ້ <xliff:g id="NEW_NETWORK">%2$s</xliff:g> ແລ້ວ"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"ອິນເຕີເນັດມືຖື"</item> - <item msgid="5520925862115353992">"Wi-Fi"</item> - <item msgid="1055487873974272842">"Bluetooth"</item> - <item msgid="1616528372438698248">"ອີເທີເນັດ"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"ອິນເຕີເນັດມືຖື"</item> + <item msgid="6341719431034774569">"Wi-Fi"</item> + <item msgid="5081440868800877512">"Bluetooth"</item> + <item msgid="1160736166977503463">"ອີເທີເນັດ"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"ບໍ່ຮູ້ຈັກປະເພດເຄືອຂ່າຍ"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-lt/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-lt/strings.xml index c639c1f1a5d6..8eb41f1efa27 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-lt/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-lt/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"Prisijungti prie „Wi-Fi“ tinklo"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"Prisijungti prie tinklo"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"„<xliff:g id="NETWORK_SSID">%1$s</xliff:g>“ negali pasiekti interneto"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"Palieskite, kad būtų rodomos parinktys."</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"Mobiliojo ryšio tinkle nėra prieigos prie interneto"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"Tinkle nėra prieigos prie interneto"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"Privataus DNS serverio negalima pasiekti"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"„<xliff:g id="NETWORK_SSID">%1$s</xliff:g>“ ryšys apribotas"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"Palieskite, jei vis tiek norite prisijungti"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"Perjungta į tinklą <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"Įrenginyje naudojamas kitas tinklas (<xliff:g id="NEW_NETWORK">%1$s</xliff:g>), kai dabartiniame tinkle (<xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g>) nėra interneto ryšio. Gali būti taikomi mokesčiai."</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"Perjungta iš tinklo <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> į tinklą <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"nežinomas tinklo tipas"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"System Connectivity Resources"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"Prisijungti prie „Wi-Fi“ tinklo"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"Prisijungti prie tinklo"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"„<xliff:g id="NETWORK_SSID">%1$s</xliff:g>“ negali pasiekti interneto"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"Palieskite, kad būtų rodomos parinktys."</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"Mobiliojo ryšio tinkle nėra prieigos prie interneto"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"Tinkle nėra prieigos prie interneto"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"Privataus DNS serverio negalima pasiekti"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"„<xliff:g id="NETWORK_SSID">%1$s</xliff:g>“ ryšys apribotas"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"Palieskite, jei vis tiek norite prisijungti"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"Perjungta į tinklą <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"Įrenginyje naudojamas kitas tinklas (<xliff:g id="NEW_NETWORK">%1$s</xliff:g>), kai dabartiniame tinkle (<xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g>) nėra interneto ryšio. Gali būti taikomi mokesčiai."</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"Perjungta iš tinklo <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> į tinklą <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"mobiliojo ryšio duomenys"</item> - <item msgid="5520925862115353992">"Wi-Fi"</item> - <item msgid="1055487873974272842">"Bluetooth"</item> - <item msgid="1616528372438698248">"Eternetas"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"mobiliojo ryšio duomenys"</item> + <item msgid="6341719431034774569">"Wi-Fi"</item> + <item msgid="5081440868800877512">"Bluetooth"</item> + <item msgid="1160736166977503463">"Eternetas"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"nežinomas tinklo tipas"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-lv/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-lv/strings.xml index 5774603bf50f..0647a4fb077e 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-lv/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-lv/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"Pierakstieties Wi-Fi tīklā"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"Pierakstīšanās tīklā"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"Tīklā <xliff:g id="NETWORK_SSID">%1$s</xliff:g> nav piekļuves internetam"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"Pieskarieties, lai skatītu iespējas."</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"Mobilajā tīklā nav piekļuves internetam."</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"Tīklā nav piekļuves internetam."</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"Nevar piekļūt privātam DNS serverim."</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"Tīklā <xliff:g id="NETWORK_SSID">%1$s</xliff:g> ir ierobežota savienojamība"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"Lai tik un tā izveidotu savienojumu, pieskarieties"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"Pārslēdzās uz tīklu <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"Kad vienā tīklā (<xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g>) nav piekļuves internetam, ierīcē tiek izmantots cits tīkls (<xliff:g id="NEW_NETWORK">%1$s</xliff:g>). Var tikt piemērota maksa."</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"Pārslēdzās no tīkla <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> uz tīklu <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"nezināms tīkla veids"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"Sistēmas savienojamības resursi"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"Pierakstieties Wi-Fi tīklā"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"Pierakstīšanās tīklā"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"Tīklā <xliff:g id="NETWORK_SSID">%1$s</xliff:g> nav piekļuves internetam"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"Pieskarieties, lai skatītu iespējas."</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"Mobilajā tīklā nav piekļuves internetam."</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"Tīklā nav piekļuves internetam."</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"Nevar piekļūt privātam DNS serverim."</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"Tīklā <xliff:g id="NETWORK_SSID">%1$s</xliff:g> ir ierobežota savienojamība"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"Lai tik un tā izveidotu savienojumu, pieskarieties"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"Pārslēdzās uz tīklu <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"Kad vienā tīklā (<xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g>) nav piekļuves internetam, ierīcē tiek izmantots cits tīkls (<xliff:g id="NEW_NETWORK">%1$s</xliff:g>). Var tikt piemērota maksa."</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"Pārslēdzās no tīkla <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> uz tīklu <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"mobilie dati"</item> - <item msgid="5520925862115353992">"Wi-Fi"</item> - <item msgid="1055487873974272842">"Bluetooth"</item> - <item msgid="1616528372438698248">"Ethernet"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"mobilie dati"</item> + <item msgid="6341719431034774569">"Wi-Fi"</item> + <item msgid="5081440868800877512">"Bluetooth"</item> + <item msgid="1160736166977503463">"Ethernet"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"nezināms tīkla veids"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-mk/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-mk/strings.xml index 053c7cf93bf2..b0024e296cb3 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-mk/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-mk/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"Најавете се на мрежа на Wi-Fi"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"Најавете се на мрежа"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> нема интернет-пристап"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"Допрете за опции"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"Мобилната мрежа нема интернет-пристап"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"Мрежата нема интернет-пристап"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"Не може да се пристапи до приватниот DNS-сервер"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> има ограничена поврзливост"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"Допрете за да се поврзете и покрај тоа"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"Префрлено на <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"Уредот користи <xliff:g id="NEW_NETWORK">%1$s</xliff:g> кога <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> нема пристап до интернет. Може да се наплатат трошоци."</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"Префрлено од <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> на <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"непознат тип мрежа"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"System Connectivity Resources"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"Најавете се на мрежа на Wi-Fi"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"Најавете се на мрежа"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> нема интернет-пристап"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"Допрете за опции"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"Мобилната мрежа нема интернет-пристап"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"Мрежата нема интернет-пристап"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"Не може да се пристапи до приватниот DNS-сервер"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> има ограничена поврзливост"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"Допрете за да се поврзете и покрај тоа"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"Префрлено на <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"Уредот користи <xliff:g id="NEW_NETWORK">%1$s</xliff:g> кога <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> нема пристап до интернет. Може да се наплатат трошоци."</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"Префрлено од <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> на <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"мобилен интернет"</item> - <item msgid="5520925862115353992">"Wi-Fi"</item> - <item msgid="1055487873974272842">"Bluetooth"</item> - <item msgid="1616528372438698248">"Етернет"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"мобилен интернет"</item> + <item msgid="6341719431034774569">"Wi-Fi"</item> + <item msgid="5081440868800877512">"Bluetooth"</item> + <item msgid="1160736166977503463">"Етернет"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"непознат тип мрежа"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-ml/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-ml/strings.xml index 3e80cf1cd72b..8ce7667fbf96 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-ml/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-ml/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"വൈഫൈ നെറ്റ്വർക്കിലേക്ക് സൈൻ ഇൻ ചെയ്യുക"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"നെറ്റ്വർക്കിലേക്ക് സൈൻ ഇൻ ചെയ്യുക"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> എന്നതിന് ഇന്റർനെറ്റ് ആക്സസ് ഇല്ല"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"ഓപ്ഷനുകൾക്ക് ടാപ്പുചെയ്യുക"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"മൊബെെൽ നെറ്റ്വർക്കിന് ഇന്റർനെറ്റ് ആക്സസ് ഇല്ല"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"നെറ്റ്വർക്കിന് ഇന്റർനെറ്റ് ആക്സസ് ഇല്ല"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"സ്വകാര്യ DNS സെർവർ ആക്സസ് ചെയ്യാനാവില്ല"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> എന്നതിന് പരിമിതമായ കണക്റ്റിവിറ്റി ഉണ്ട്"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"ഏതുവിധേനയും കണക്റ്റ് ചെയ്യാൻ ടാപ്പ് ചെയ്യുക"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"<xliff:g id="NETWORK_TYPE">%1$s</xliff:g> എന്നതിലേക്ക് മാറി"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"<xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g>-ന് ഇന്റർനെറ്റ് ആക്സസ് ഇല്ലാത്തപ്പോൾ ഉപകരണം <xliff:g id="NEW_NETWORK">%1$s</xliff:g> ഉപയോഗിക്കുന്നു. നിരക്കുകൾ ബാധകമായേക്കാം."</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> നെറ്റ്വർക്കിൽ നിന്ന് <xliff:g id="NEW_NETWORK">%2$s</xliff:g> നെറ്റ്വർക്കിലേക്ക് മാറി"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"തിരിച്ചറിയാനാകാത്ത ഒരു നെറ്റ്വർക്ക് തരം"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"സിസ്റ്റം കണക്റ്റിവിറ്റി ഉറവിടങ്ങൾ"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"വൈഫൈ നെറ്റ്വർക്കിലേക്ക് സൈൻ ഇൻ ചെയ്യുക"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"നെറ്റ്വർക്കിലേക്ക് സൈൻ ഇൻ ചെയ്യുക"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> എന്നതിന് ഇന്റർനെറ്റ് ആക്സസ് ഇല്ല"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"ഓപ്ഷനുകൾക്ക് ടാപ്പുചെയ്യുക"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"മൊബെെൽ നെറ്റ്വർക്കിന് ഇന്റർനെറ്റ് ആക്സസ് ഇല്ല"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"നെറ്റ്വർക്കിന് ഇന്റർനെറ്റ് ആക്സസ് ഇല്ല"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"സ്വകാര്യ DNS സെർവർ ആക്സസ് ചെയ്യാനാവില്ല"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> എന്നതിന് പരിമിതമായ കണക്റ്റിവിറ്റി ഉണ്ട്"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"ഏതുവിധേനയും കണക്റ്റ് ചെയ്യാൻ ടാപ്പ് ചെയ്യുക"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"<xliff:g id="NETWORK_TYPE">%1$s</xliff:g> എന്നതിലേക്ക് മാറി"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"<xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g>-ന് ഇന്റർനെറ്റ് ആക്സസ് ഇല്ലാത്തപ്പോൾ ഉപകരണം <xliff:g id="NEW_NETWORK">%1$s</xliff:g> ഉപയോഗിക്കുന്നു. നിരക്കുകൾ ബാധകമായേക്കാം."</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> നെറ്റ്വർക്കിൽ നിന്ന് <xliff:g id="NEW_NETWORK">%2$s</xliff:g> നെറ്റ്വർക്കിലേക്ക് മാറി"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"മൊബൈൽ ഡാറ്റ"</item> - <item msgid="5520925862115353992">"വൈഫൈ"</item> - <item msgid="1055487873974272842">"Bluetooth"</item> - <item msgid="1616528372438698248">"ഇതര്നെറ്റ്"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"മൊബൈൽ ഡാറ്റ"</item> + <item msgid="6341719431034774569">"വൈഫൈ"</item> + <item msgid="5081440868800877512">"Bluetooth"</item> + <item msgid="1160736166977503463">"ഇതർനെറ്റ്"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"അജ്ഞാതമായ നെറ്റ്വർക്ക് തരം"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-mn/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-mn/strings.xml index 214fc0c1dd83..be8b59202baa 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-mn/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-mn/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"Wi-Fi сүлжээнд нэвтэрнэ үү"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"Сүлжээнд нэвтэрнэ үү"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g>-д интернэтийн хандалт алга"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"Сонголт хийхийн тулд товшино уу"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"Мобайл сүлжээнд интернэт хандалт байхгүй байна"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"Сүлжээнд интернэт хандалт байхгүй байна"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"Хувийн DNS серверт хандах боломжгүй байна"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> зарим үйлчилгээнд хандах боломжгүй байна"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"Ямар ч тохиолдолд холбогдохын тулд товших"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"<xliff:g id="NETWORK_TYPE">%1$s</xliff:g> руу шилжүүлсэн"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"<xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> интернет холболтгүй үед төхөөрөмж <xliff:g id="NEW_NETWORK">%1$s</xliff:g>-г ашигладаг. Төлбөр гарч болзошгүй."</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g>-с <xliff:g id="NEW_NETWORK">%2$s</xliff:g> руу шилжүүлсэн"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"сүлжээний тодорхойгүй төрөл"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"Системийн холболтын нөөцүүд"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"Wi-Fi сүлжээнд нэвтэрнэ үү"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"Сүлжээнд нэвтэрнэ үү"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g>-д интернэтийн хандалт алга"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"Сонголт хийхийн тулд товшино уу"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"Мобайл сүлжээнд интернэт хандалт байхгүй байна"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"Сүлжээнд интернэт хандалт байхгүй байна"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"Хувийн DNS серверт хандах боломжгүй байна"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> зарим үйлчилгээнд хандах боломжгүй байна"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"Ямар ч тохиолдолд холбогдохын тулд товших"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"<xliff:g id="NETWORK_TYPE">%1$s</xliff:g> руу шилжүүлсэн"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"<xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> интернет холболтгүй үед төхөөрөмж <xliff:g id="NEW_NETWORK">%1$s</xliff:g>-г ашигладаг. Төлбөр гарч болзошгүй."</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g>-с <xliff:g id="NEW_NETWORK">%2$s</xliff:g> руу шилжүүлсэн"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"мобайл дата"</item> - <item msgid="5520925862115353992">"Wi-Fi"</item> - <item msgid="1055487873974272842">"Bluetooth"</item> - <item msgid="1616528372438698248">"Этернэт"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"мобайл дата"</item> + <item msgid="6341719431034774569">"Wi-Fi"</item> + <item msgid="5081440868800877512">"Bluetooth"</item> + <item msgid="1160736166977503463">"Этернэт"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"үл мэдэгдэх сүлжээний төрөл"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-mr/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-mr/strings.xml index c4b19989fc7e..fe7df841b147 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-mr/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-mr/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"वाय-फाय नेटवर्कमध्ये साइन इन करा"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"नेटवर्कवर साइन इन करा"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> ला इंटरनेट अॅक्सेस नाही"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"पर्यायांसाठी टॅप करा"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"मोबाइल नेटवर्कला इंटरनेट ॲक्सेस नाही"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"नेटवर्कला इंटरनेट ॲक्सेस नाही"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"खाजगी DNS सर्व्हर ॲक्सेस करू शकत नाही"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> ला मर्यादित कनेक्टिव्हिटी आहे"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"तरीही कनेक्ट करण्यासाठी टॅप करा"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"<xliff:g id="NETWORK_TYPE">%1$s</xliff:g> वर स्विच केले"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"<xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> कडे इंटरनेटचा अॅक्सेस नसताना डिव्हाइस <xliff:g id="NEW_NETWORK">%1$s</xliff:g> वापरते. शुल्क लागू शकते."</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> वरून <xliff:g id="NEW_NETWORK">%2$s</xliff:g> वर स्विच केले"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"अज्ञात नेटवर्क प्रकार"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"सिस्टम कनेक्टिव्हिटी चे स्रोत"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"वाय-फाय नेटवर्कमध्ये साइन इन करा"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"नेटवर्कवर साइन इन करा"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> ला इंटरनेट अॅक्सेस नाही"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"पर्यायांसाठी टॅप करा"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"मोबाइल नेटवर्कला इंटरनेट ॲक्सेस नाही"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"नेटवर्कला इंटरनेट ॲक्सेस नाही"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"खाजगी DNS सर्व्हर ॲक्सेस करू शकत नाही"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> ला मर्यादित कनेक्टिव्हिटी आहे"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"तरीही कनेक्ट करण्यासाठी टॅप करा"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"<xliff:g id="NETWORK_TYPE">%1$s</xliff:g> वर स्विच केले"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"<xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> कडे इंटरनेटचा अॅक्सेस नसताना डिव्हाइस <xliff:g id="NEW_NETWORK">%1$s</xliff:g> वापरते. शुल्क लागू शकते."</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> वरून <xliff:g id="NEW_NETWORK">%2$s</xliff:g> वर स्विच केले"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"मोबाइल डेटा"</item> - <item msgid="5520925862115353992">"वाय-फाय"</item> - <item msgid="1055487873974272842">"ब्लूटूथ"</item> - <item msgid="1616528372438698248">"इथरनेट"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"मोबाइल डेटा"</item> + <item msgid="6341719431034774569">"वाय-फाय"</item> + <item msgid="5081440868800877512">"ब्लूटूथ"</item> + <item msgid="1160736166977503463">"इथरनेट"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"अज्ञात नेटवर्क प्रकार"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-ms/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-ms/strings.xml index 529d0bd466af..54b49a20f7eb 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-ms/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-ms/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"Log masuk ke rangkaian Wi-Fi"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"Log masuk ke rangkaian"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> tiada akses Internet"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"Ketik untuk mendapatkan pilihan"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"Rangkaian mudah alih tiada akses Internet"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"Rangkaian tiada akses Internet"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"Pelayan DNS peribadi tidak boleh diakses"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> mempunyai kesambungan terhad"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"Ketik untuk menyambung juga"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"Beralih kepada <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"Peranti menggunakan <xliff:g id="NEW_NETWORK">%1$s</xliff:g> apabila <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> tiada akses Internet. Bayaran mungkin dikenakan."</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"Beralih daripada <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> kepada <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"jenis rangkaian tidak diketahui"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"Sumber Kesambungan Sistem"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"Log masuk ke rangkaian Wi-Fi"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"Log masuk ke rangkaian"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> tiada akses Internet"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"Ketik untuk mendapatkan pilihan"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"Rangkaian mudah alih tiada akses Internet"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"Rangkaian tiada akses Internet"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"Pelayan DNS peribadi tidak boleh diakses"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> mempunyai kesambungan terhad"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"Ketik untuk menyambung juga"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"Beralih kepada <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"Peranti menggunakan <xliff:g id="NEW_NETWORK">%1$s</xliff:g> apabila <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> tiada akses Internet. Bayaran mungkin dikenakan."</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"Beralih daripada <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> kepada <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"data mudah alih"</item> - <item msgid="5520925862115353992">"Wi-Fi"</item> - <item msgid="1055487873974272842">"Bluetooth"</item> - <item msgid="1616528372438698248">"Ethernet"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"data mudah alih"</item> + <item msgid="6341719431034774569">"Wi-Fi"</item> + <item msgid="5081440868800877512">"Bluetooth"</item> + <item msgid="1160736166977503463">"Ethernet"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"jenis rangkaian tidak diketahui"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-my/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-my/strings.xml index 50590fa3fc3e..15b75f0fc3a1 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-my/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-my/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"ဝိုင်ဖိုင်ကွန်ရက်သို့ လက်မှတ်ထိုးဝင်ပါ"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"ကွန်ယက်သို့ လက်မှတ်ထိုးဝင်ရန်"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> တွင် အင်တာနက်အသုံးပြုခွင့် မရှိပါ"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"အခြားရွေးချယ်စရာများကိုကြည့်ရန် တို့ပါ"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"မိုဘိုင်းကွန်ရက်တွင် အင်တာနက်ချိတ်ဆက်မှု မရှိပါ"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"ကွန်ရက်တွင် အင်တာနက်အသုံးပြုခွင့် မရှိပါ"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"သီးသန့် ဒီအန်အက်စ် (DNS) ဆာဗာကို သုံး၍မရပါ။"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> တွင် ချိတ်ဆက်မှုကို ကန့်သတ်ထားသည်"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"မည်သို့ပင်ဖြစ်စေ ချိတ်ဆက်ရန် တို့ပါ"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"<xliff:g id="NETWORK_TYPE">%1$s</xliff:g> သို့ ပြောင်းလိုက်ပြီ"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"<xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> ဖြင့် အင်တာနက် အသုံးမပြုနိုင်သည့်အချိန်တွင် စက်ပစ္စည်းသည် <xliff:g id="NEW_NETWORK">%1$s</xliff:g> ကို သုံးပါသည်။ ဒေတာသုံးစွဲခ ကျသင့်နိုင်ပါသည်။"</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> မှ <xliff:g id="NEW_NETWORK">%2$s</xliff:g> သို့ ပြောင်းလိုက်ပြီ"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"အမည်မသိကွန်ရက်အမျိုးအစား"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"စနစ်ချိတ်ဆက်နိုင်မှု ရင်းမြစ်များ"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"ဝိုင်ဖိုင်ကွန်ရက်သို့ လက်မှတ်ထိုးဝင်ပါ"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"ကွန်ယက်သို့ လက်မှတ်ထိုးဝင်ရန်"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> တွင် အင်တာနက်အသုံးပြုခွင့် မရှိပါ"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"အခြားရွေးချယ်စရာများကိုကြည့်ရန် တို့ပါ"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"မိုဘိုင်းကွန်ရက်တွင် အင်တာနက်ချိတ်ဆက်မှု မရှိပါ"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"ကွန်ရက်တွင် အင်တာနက်အသုံးပြုခွင့် မရှိပါ"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"သီးသန့် ဒီအန်အက်စ် (DNS) ဆာဗာကို သုံး၍မရပါ။"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> တွင် ချိတ်ဆက်မှုကို ကန့်သတ်ထားသည်"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"မည်သို့ပင်ဖြစ်စေ ချိတ်ဆက်ရန် တို့ပါ"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"<xliff:g id="NETWORK_TYPE">%1$s</xliff:g> သို့ ပြောင်းလိုက်ပြီ"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"<xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> ဖြင့် အင်တာနက် အသုံးမပြုနိုင်သည့်အချိန်တွင် စက်ပစ္စည်းသည် <xliff:g id="NEW_NETWORK">%1$s</xliff:g> ကို သုံးပါသည်။ ဒေတာသုံးစွဲခ ကျသင့်နိုင်ပါသည်။"</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> မှ <xliff:g id="NEW_NETWORK">%2$s</xliff:g> သို့ ပြောင်းလိုက်ပြီ"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"မိုဘိုင်းဒေတာ"</item> - <item msgid="5520925862115353992">"Wi-Fi"</item> - <item msgid="1055487873974272842">"ဘလူးတုသ်"</item> - <item msgid="1616528372438698248">"အီသာနက်"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"မိုဘိုင်းဒေတာ"</item> + <item msgid="6341719431034774569">"Wi-Fi"</item> + <item msgid="5081440868800877512">"ဘလူးတုသ်"</item> + <item msgid="1160736166977503463">"အီသာနက်"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"အမည်မသိကွန်ရက်အမျိုးအစား"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-nb/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-nb/strings.xml index b89d198f380d..a561def65c50 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-nb/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-nb/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"Logg på Wi-Fi-nettverket"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"Logg på nettverk"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> har ingen internettilkobling"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"Trykk for å få alternativer"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"Mobilnettverket har ingen internettilgang"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"Nettverket har ingen internettilgang"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"Den private DNS-tjeneren kan ikke nås"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> har begrenset tilkobling"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"Trykk for å koble til likevel"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"Byttet til <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"Enheten bruker <xliff:g id="NEW_NETWORK">%1$s</xliff:g> når <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> ikke har Internett-tilgang. Avgifter kan påløpe."</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"Byttet fra <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> til <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"en ukjent nettverkstype"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"Ressurser for systemtilkobling"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"Logg på Wi-Fi-nettverket"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"Logg på nettverk"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> har ingen internettilkobling"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"Trykk for å få alternativer"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"Mobilnettverket har ingen internettilgang"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"Nettverket har ingen internettilgang"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"Den private DNS-tjeneren kan ikke nås"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> har begrenset tilkobling"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"Trykk for å koble til likevel"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"Byttet til <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"Enheten bruker <xliff:g id="NEW_NETWORK">%1$s</xliff:g> når <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> ikke har Internett-tilgang. Avgifter kan påløpe."</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"Byttet fra <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> til <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"mobildata"</item> - <item msgid="5520925862115353992">"Wi-Fi"</item> - <item msgid="1055487873974272842">"Bluetooth"</item> - <item msgid="1616528372438698248">"Ethernet"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"mobildata"</item> + <item msgid="6341719431034774569">"Wi-Fi"</item> + <item msgid="5081440868800877512">"Bluetooth"</item> + <item msgid="1160736166977503463">"Ethernet"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"en ukjent nettverkstype"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-ne/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-ne/strings.xml index bdcfa3bfc41b..f74542d9421f 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-ne/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-ne/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"Wi-Fi नेटवर्कमा साइन इन गर्नुहोस्"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"सञ्जालमा साइन इन गर्नुहोस्"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> को इन्टरनेटमाथि पहुँच छैन"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"विकल्पहरूका लागि ट्याप गर्नुहोस्"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"मोबाइल नेटवर्कको इन्टरनेटमाथि पहुँच छैन"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"नेटवर्कको इन्टरनेटमाथि पहुँच छैन"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"निजी DNS सर्भरमाथि पहुँच प्राप्त गर्न सकिँदैन"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> को जडान सीमित छ"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"जसरी भए पनि जडान गर्न ट्याप गर्नुहोस्"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"<xliff:g id="NETWORK_TYPE">%1$s</xliff:g> मा बदल्नुहोस्"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"<xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> मार्फत इन्टरनेटमाथि पहुँच राख्न नसकेको अवस्थामा यन्त्रले <xliff:g id="NEW_NETWORK">%1$s</xliff:g> प्रयोग गर्दछ। शुल्क लाग्न सक्छ।"</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> बाट <xliff:g id="NEW_NETWORK">%2$s</xliff:g> मा परिवर्तन गरियो"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"नेटवर्कको कुनै अज्ञात प्रकार"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"सिस्टम कनेक्टिभिटीका स्रोतहरू"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"Wi-Fi नेटवर्कमा साइन इन गर्नुहोस्"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"सञ्जालमा साइन इन गर्नुहोस्"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> को इन्टरनेटमाथि पहुँच छैन"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"विकल्पहरूका लागि ट्याप गर्नुहोस्"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"मोबाइल नेटवर्कको इन्टरनेटमाथि पहुँच छैन"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"नेटवर्कको इन्टरनेटमाथि पहुँच छैन"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"निजी DNS सर्भरमाथि पहुँच प्राप्त गर्न सकिँदैन"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> को जडान सीमित छ"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"जसरी भए पनि जडान गर्न ट्याप गर्नुहोस्"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"<xliff:g id="NETWORK_TYPE">%1$s</xliff:g> मा बदल्नुहोस्"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"<xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> मार्फत इन्टरनेटमाथि पहुँच राख्न नसकेको अवस्थामा यन्त्रले <xliff:g id="NEW_NETWORK">%1$s</xliff:g> प्रयोग गर्दछ। शुल्क लाग्न सक्छ।"</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> बाट <xliff:g id="NEW_NETWORK">%2$s</xliff:g> मा परिवर्तन गरियो"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"मोबाइल डेटा"</item> - <item msgid="5520925862115353992">"Wi-Fi"</item> - <item msgid="1055487873974272842">"ब्लुटुथ"</item> - <item msgid="1616528372438698248">"इथरनेट"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"मोबाइल डेटा"</item> + <item msgid="6341719431034774569">"Wi-Fi"</item> + <item msgid="5081440868800877512">"ब्लुटुथ"</item> + <item msgid="1160736166977503463">"इथरनेट"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"नेटवर्कको कुनै अज्ञात प्रकार"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-nl/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-nl/strings.xml index 8ecff6e3b540..0f3203beb5b9 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-nl/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-nl/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"Inloggen bij wifi-netwerk"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"Inloggen bij netwerk"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> heeft geen internettoegang"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"Tik voor opties"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"Mobiel netwerk heeft geen internettoegang"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"Netwerk heeft geen internettoegang"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"Geen toegang tot privé-DNS-server"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> heeft beperkte connectiviteit"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"Tik om toch verbinding te maken"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"Overgeschakeld naar <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"Apparaat gebruikt <xliff:g id="NEW_NETWORK">%1$s</xliff:g> wanneer <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> geen internetverbinding heeft. Er kunnen kosten in rekening worden gebracht."</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"Overgeschakeld van <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> naar <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"een onbekend netwerktype"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"Resources voor systeemconnectiviteit"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"Inloggen bij wifi-netwerk"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"Inloggen bij netwerk"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> heeft geen internettoegang"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"Tik voor opties"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"Mobiel netwerk heeft geen internettoegang"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"Netwerk heeft geen internettoegang"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"Geen toegang tot privé-DNS-server"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> heeft beperkte connectiviteit"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"Tik om toch verbinding te maken"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"Overgeschakeld naar <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"Apparaat gebruikt <xliff:g id="NEW_NETWORK">%1$s</xliff:g> wanneer <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> geen internetverbinding heeft. Er kunnen kosten in rekening worden gebracht."</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"Overgeschakeld van <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> naar <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"mobiele data"</item> - <item msgid="5520925862115353992">"Wifi"</item> - <item msgid="1055487873974272842">"Bluetooth"</item> - <item msgid="1616528372438698248">"Ethernet"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"mobiele data"</item> + <item msgid="6341719431034774569">"Wifi"</item> + <item msgid="5081440868800877512">"Bluetooth"</item> + <item msgid="1160736166977503463">"Ethernet"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"een onbekend netwerktype"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-or/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-or/strings.xml index 6ec1f9d3e42f..ecf4d694d07d 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-or/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-or/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"ୱାଇ-ଫାଇ ନେଟୱର୍କରେ ସାଇନ୍-ଇନ୍ କରନ୍ତୁ"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"ନେଟ୍ୱର୍କରେ ସାଇନ୍ ଇନ୍ କରନ୍ତୁ"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g>ର ଇଣ୍ଟର୍ନେଟ୍ ଆକ୍ସେସ୍ ନାହିଁ"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"ବିକଳ୍ପ ପାଇଁ ଟାପ୍ କରନ୍ତୁ"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"ମୋବାଇଲ୍ ନେଟ୍ୱାର୍କରେ ଇଣ୍ଟର୍ନେଟ୍ ଆକ୍ସେସ୍ ନାହିଁ"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"ନେଟ୍ୱାର୍କରେ ଇଣ୍ଟର୍ନେଟ୍ ଆକ୍ସେସ୍ ନାହିଁ"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"ବ୍ୟକ୍ତିଗତ DNS ସର୍ଭର୍ ଆକ୍ସେସ୍ କରିହେବ ନାହିଁ"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g>ର ସୀମିତ ସଂଯୋଗ ଅଛି"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"ତଥାପି ଯୋଗାଯୋଗ କରିବାକୁ ଟାପ୍ କରନ୍ତୁ"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"<xliff:g id="NETWORK_TYPE">%1$s</xliff:g>କୁ ବଦଳାଗଲା"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"<xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g>ର ଇଣ୍ଟରନେଟ୍ ଆକ୍ସେସ୍ ନଥିବାବେଳେ ଡିଭାଇସ୍ <xliff:g id="NEW_NETWORK">%1$s</xliff:g> ବ୍ୟବହାର କରିଥାଏ। ଶୁଳ୍କ ଲାଗୁ ହୋଇପାରେ।"</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> ରୁ <xliff:g id="NEW_NETWORK">%2$s</xliff:g>କୁ ବଦଳାଗଲା"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"ଏକ ଅଜଣା ନେଟ୍ୱର୍କ ପ୍ରକାର"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"ସିଷ୍ଟମର ସଂଯୋଗ ସମ୍ବନ୍ଧିତ ରିସୋର୍ସଗୁଡ଼ିକ"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"ୱାଇ-ଫାଇ ନେଟୱର୍କରେ ସାଇନ୍-ଇନ୍ କରନ୍ତୁ"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"ନେଟ୍ୱର୍କରେ ସାଇନ୍ ଇନ୍ କରନ୍ତୁ"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g>ର ଇଣ୍ଟର୍ନେଟ୍ ଆକ୍ସେସ୍ ନାହିଁ"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"ବିକଳ୍ପ ପାଇଁ ଟାପ୍ କରନ୍ତୁ"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"ମୋବାଇଲ୍ ନେଟ୍ୱାର୍କରେ ଇଣ୍ଟର୍ନେଟ୍ ଆକ୍ସେସ୍ ନାହିଁ"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"ନେଟ୍ୱାର୍କରେ ଇଣ୍ଟର୍ନେଟ୍ ଆକ୍ସେସ୍ ନାହିଁ"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"ବ୍ୟକ୍ତିଗତ DNS ସର୍ଭର୍ ଆକ୍ସେସ୍ କରିହେବ ନାହିଁ"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g>ର ସୀମିତ ସଂଯୋଗ ଅଛି"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"ତଥାପି ଯୋଗାଯୋଗ କରିବାକୁ ଟାପ୍ କରନ୍ତୁ"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"<xliff:g id="NETWORK_TYPE">%1$s</xliff:g>କୁ ବଦଳାଗଲା"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"<xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g>ର ଇଣ୍ଟରନେଟ୍ ଆକ୍ସେସ୍ ନଥିବାବେଳେ ଡିଭାଇସ୍ <xliff:g id="NEW_NETWORK">%1$s</xliff:g> ବ୍ୟବହାର କରିଥାଏ। ଶୁଳ୍କ ଲାଗୁ ହୋଇପାରେ।"</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> ରୁ <xliff:g id="NEW_NETWORK">%2$s</xliff:g>କୁ ବଦଳାଗଲା"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"ମୋବାଇଲ୍ ଡାଟା"</item> - <item msgid="5520925862115353992">"ୱାଇ-ଫାଇ"</item> - <item msgid="1055487873974272842">"ବ୍ଲୁଟୁଥ"</item> - <item msgid="1616528372438698248">"ଇଥରନେଟ୍"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"ମୋବାଇଲ ଡାଟା"</item> + <item msgid="6341719431034774569">"ୱାଇ-ଫାଇ"</item> + <item msgid="5081440868800877512">"ବ୍ଲୁଟୁଥ୍"</item> + <item msgid="1160736166977503463">"ଇଥରନେଟ୍"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"ଏକ ଅଜଣା ନେଟୱାର୍କ ପ୍ରକାର"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-pa/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-pa/strings.xml index e9481932d6c6..43280549e773 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-pa/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-pa/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"ਵਾਈ-ਫਾਈ ਨੈੱਟਵਰਕ \'ਤੇ ਸਾਈਨ-ਇਨ ਕਰੋ"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"ਨੈੱਟਵਰਕ \'ਤੇ ਸਾਈਨ-ਇਨ ਕਰੋ"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> ਕੋਲ ਇੰਟਰਨੈੱਟ ਪਹੁੰਚ ਨਹੀਂ ਹੈ"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"ਵਿਕਲਪਾਂ ਲਈ ਟੈਪ ਕਰੋ"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"ਮੋਬਾਈਲ ਨੈੱਟਵਰਕ ਕੋਲ ਇੰਟਰਨੈੱਟ ਤੱਕ ਪਹੁੰਚ ਨਹੀਂ ਹੈ"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"ਨੈੱਟਵਰਕ ਕੋਲ ਇੰਟਰਨੈੱਟ ਤੱਕ ਪਹੁੰਚ ਨਹੀਂ ਹੈ"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"ਨਿੱਜੀ ਡੋਮੇਨ ਨਾਮ ਪ੍ਰਣਾਲੀ (DNS) ਸਰਵਰ \'ਤੇ ਪਹੁੰਚ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕੀ"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> ਕੋਲ ਸੀਮਤ ਕਨੈਕਟੀਵਿਟੀ ਹੈ"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"ਫਿਰ ਵੀ ਕਨੈਕਟ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"ਬਦਲਕੇ <xliff:g id="NETWORK_TYPE">%1$s</xliff:g> ਲਿਆਂਦਾ ਗਿਆ"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"<xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> ਦੀ ਇੰਟਰਨੈੱਟ \'ਤੇ ਪਹੁੰਚ ਨਾ ਹੋਣ \'ਤੇ ਡੀਵਾਈਸ <xliff:g id="NEW_NETWORK">%1$s</xliff:g> ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹੈ। ਖਰਚੇ ਲਾਗੂ ਹੋ ਸਕਦੇ ਹਨ।"</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> ਤੋਂ ਬਦਲਕੇ <xliff:g id="NEW_NETWORK">%2$s</xliff:g> \'ਤੇ ਕੀਤਾ ਗਿਆ"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"ਇੱਕ ਅਗਿਆਤ ਨੈੱਟਵਰਕ ਕਿਸਮ"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"ਸਿਸਟਮ ਕਨੈਕਟੀਵਿਟੀ ਸਰੋਤ"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"ਵਾਈ-ਫਾਈ ਨੈੱਟਵਰਕ \'ਤੇ ਸਾਈਨ-ਇਨ ਕਰੋ"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"ਨੈੱਟਵਰਕ \'ਤੇ ਸਾਈਨ-ਇਨ ਕਰੋ"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> ਕੋਲ ਇੰਟਰਨੈੱਟ ਪਹੁੰਚ ਨਹੀਂ ਹੈ"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"ਵਿਕਲਪਾਂ ਲਈ ਟੈਪ ਕਰੋ"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"ਮੋਬਾਈਲ ਨੈੱਟਵਰਕ ਕੋਲ ਇੰਟਰਨੈੱਟ ਤੱਕ ਪਹੁੰਚ ਨਹੀਂ ਹੈ"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"ਨੈੱਟਵਰਕ ਕੋਲ ਇੰਟਰਨੈੱਟ ਤੱਕ ਪਹੁੰਚ ਨਹੀਂ ਹੈ"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"ਨਿੱਜੀ ਡੋਮੇਨ ਨਾਮ ਪ੍ਰਣਾਲੀ (DNS) ਸਰਵਰ \'ਤੇ ਪਹੁੰਚ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕੀ"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> ਕੋਲ ਸੀਮਤ ਕਨੈਕਟੀਵਿਟੀ ਹੈ"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"ਫਿਰ ਵੀ ਕਨੈਕਟ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"ਬਦਲਕੇ <xliff:g id="NETWORK_TYPE">%1$s</xliff:g> ਲਿਆਂਦਾ ਗਿਆ"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"<xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> ਦੀ ਇੰਟਰਨੈੱਟ \'ਤੇ ਪਹੁੰਚ ਨਾ ਹੋਣ \'ਤੇ ਡੀਵਾਈਸ <xliff:g id="NEW_NETWORK">%1$s</xliff:g> ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹੈ। ਖਰਚੇ ਲਾਗੂ ਹੋ ਸਕਦੇ ਹਨ।"</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> ਤੋਂ ਬਦਲਕੇ <xliff:g id="NEW_NETWORK">%2$s</xliff:g> \'ਤੇ ਕੀਤਾ ਗਿਆ"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"ਮੋਬਾਈਲ ਡਾਟਾ"</item> - <item msgid="5520925862115353992">"ਵਾਈ-ਫਾਈ"</item> - <item msgid="1055487873974272842">"ਬਲੂਟੁੱਥ"</item> - <item msgid="1616528372438698248">"ਈਥਰਨੈੱਟ"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"ਮੋਬਾਈਲ ਡਾਟਾ"</item> + <item msgid="6341719431034774569">"ਵਾਈ-ਫਾਈ"</item> + <item msgid="5081440868800877512">"ਬਲੂਟੁੱਥ"</item> + <item msgid="1160736166977503463">"ਈਥਰਨੈੱਟ"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"ਕੋਈ ਅਗਿਆਤ ਨੈੱਟਵਰਕ ਦੀ ਕਿਸਮ"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-pl/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-pl/strings.xml index 038328f0fc8f..e6b3a0cff6ee 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-pl/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-pl/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"Zaloguj się w sieci Wi-Fi"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"Zaloguj się do sieci"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> nie ma dostępu do internetu"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"Kliknij, by wyświetlić opcje"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"Sieć komórkowa nie ma dostępu do internetu"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"Sieć nie ma dostępu do internetu"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"Brak dostępu do prywatnego serwera DNS"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> ma ograniczoną łączność"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"Kliknij, by mimo to nawiązać połączenie"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"Zmieniono na połączenie typu <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"Urządzenie korzysta z połączenia typu <xliff:g id="NEW_NETWORK">%1$s</xliff:g>, gdy <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> nie dostępu do internetu. Mogą zostać naliczone opłaty."</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"Przełączono z połączenia typu <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> na <xliff:g id="NEW_NETWORK">%2$s</xliff:g>."</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"nieznany typ sieci"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"Zasoby systemowe dotyczące łączności"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"Zaloguj się w sieci Wi-Fi"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"Zaloguj się do sieci"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> nie ma dostępu do internetu"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"Kliknij, by wyświetlić opcje"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"Sieć komórkowa nie ma dostępu do internetu"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"Sieć nie ma dostępu do internetu"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"Brak dostępu do prywatnego serwera DNS"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> ma ograniczoną łączność"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"Kliknij, by mimo to nawiązać połączenie"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"Zmieniono na połączenie typu <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"Urządzenie korzysta z połączenia typu <xliff:g id="NEW_NETWORK">%1$s</xliff:g>, gdy <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> nie dostępu do internetu. Mogą zostać naliczone opłaty."</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"Przełączono z połączenia typu <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> na <xliff:g id="NEW_NETWORK">%2$s</xliff:g>."</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"mobilna transmisja danych"</item> - <item msgid="5520925862115353992">"Wi-Fi"</item> - <item msgid="1055487873974272842">"Bluetooth"</item> - <item msgid="1616528372438698248">"Ethernet"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"mobilna transmisja danych"</item> + <item msgid="6341719431034774569">"Wi-Fi"</item> + <item msgid="5081440868800877512">"Bluetooth"</item> + <item msgid="1160736166977503463">"Ethernet"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"nieznany typ sieci"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-pt-rBR/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-pt-rBR/strings.xml index fe37405ebe0d..f1d0bc0b0cd5 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-pt-rBR/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-pt-rBR/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"Fazer login na rede Wi-Fi"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"Fazer login na rede"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> não tem acesso à Internet"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"Toque para ver opções"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"A rede móvel não tem acesso à Internet"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"A rede não tem acesso à Internet"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"Não é possível acessar o servidor DNS privado"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> tem conectividade limitada"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"Toque para conectar mesmo assim"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"Alternado para <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"O dispositivo usa <xliff:g id="NEW_NETWORK">%1$s</xliff:g> quando <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> não tem acesso à Internet. Esse serviço pode ser cobrado."</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"Alternado de <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> para <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"um tipo de rede desconhecido"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"Recursos de conectividade do sistema"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"Fazer login na rede Wi-Fi"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"Fazer login na rede"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> não tem acesso à Internet"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"Toque para ver opções"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"A rede móvel não tem acesso à Internet"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"A rede não tem acesso à Internet"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"Não é possível acessar o servidor DNS privado"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> tem conectividade limitada"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"Toque para conectar mesmo assim"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"Alternado para <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"O dispositivo usa <xliff:g id="NEW_NETWORK">%1$s</xliff:g> quando <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> não tem acesso à Internet. Esse serviço pode ser cobrado."</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"Alternado de <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> para <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"dados móveis"</item> - <item msgid="5520925862115353992">"Wi-Fi"</item> - <item msgid="1055487873974272842">"Bluetooth"</item> - <item msgid="1616528372438698248">"Ethernet"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"dados móveis"</item> + <item msgid="6341719431034774569">"Wi-Fi"</item> + <item msgid="5081440868800877512">"Bluetooth"</item> + <item msgid="1160736166977503463">"Ethernet"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"um tipo de rede desconhecido"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-pt-rPT/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-pt-rPT/strings.xml index 69060f726683..163d70b08189 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-pt-rPT/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-pt-rPT/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"Iniciar sessão na rede Wi-Fi"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"Início de sessão na rede"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> não tem acesso à Internet"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"Toque para obter mais opções"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"A rede móvel não tem acesso à Internet"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"A rede não tem acesso à Internet"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"Não é possível aceder ao servidor DNS."</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> tem conetividade limitada."</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"Toque para ligar mesmo assim."</string> - <string name="network_switch_metered" msgid="1531869544142283384">"Mudou para <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"O dispositivo utiliza <xliff:g id="NEW_NETWORK">%1$s</xliff:g> quando <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> não tem acesso à Internet. Podem aplicar-se custos."</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"Mudou de <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> para <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"um tipo de rede desconhecido"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"Recursos de conetividade do sistema"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"Iniciar sessão na rede Wi-Fi"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"Início de sessão na rede"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> não tem acesso à Internet"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"Toque para obter mais opções"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"A rede móvel não tem acesso à Internet"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"A rede não tem acesso à Internet"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"Não é possível aceder ao servidor DNS."</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> tem conetividade limitada."</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"Toque para ligar mesmo assim."</string> + <string name="network_switch_metered" msgid="2814798852883117872">"Mudou para <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"O dispositivo utiliza <xliff:g id="NEW_NETWORK">%1$s</xliff:g> quando <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> não tem acesso à Internet. Podem aplicar-se custos."</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"Mudou de <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> para <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"dados móveis"</item> - <item msgid="5520925862115353992">"Wi-Fi"</item> - <item msgid="1055487873974272842">"Bluetooth"</item> - <item msgid="1616528372438698248">"Ethernet"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"dados móveis"</item> + <item msgid="6341719431034774569">"Wi-Fi"</item> + <item msgid="5081440868800877512">"Bluetooth"</item> + <item msgid="1160736166977503463">"Ethernet"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"um tipo de rede desconhecido"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-pt/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-pt/strings.xml index fe37405ebe0d..f1d0bc0b0cd5 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-pt/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-pt/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"Fazer login na rede Wi-Fi"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"Fazer login na rede"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> não tem acesso à Internet"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"Toque para ver opções"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"A rede móvel não tem acesso à Internet"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"A rede não tem acesso à Internet"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"Não é possível acessar o servidor DNS privado"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> tem conectividade limitada"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"Toque para conectar mesmo assim"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"Alternado para <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"O dispositivo usa <xliff:g id="NEW_NETWORK">%1$s</xliff:g> quando <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> não tem acesso à Internet. Esse serviço pode ser cobrado."</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"Alternado de <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> para <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"um tipo de rede desconhecido"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"Recursos de conectividade do sistema"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"Fazer login na rede Wi-Fi"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"Fazer login na rede"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> não tem acesso à Internet"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"Toque para ver opções"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"A rede móvel não tem acesso à Internet"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"A rede não tem acesso à Internet"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"Não é possível acessar o servidor DNS privado"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> tem conectividade limitada"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"Toque para conectar mesmo assim"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"Alternado para <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"O dispositivo usa <xliff:g id="NEW_NETWORK">%1$s</xliff:g> quando <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> não tem acesso à Internet. Esse serviço pode ser cobrado."</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"Alternado de <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> para <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"dados móveis"</item> - <item msgid="5520925862115353992">"Wi-Fi"</item> - <item msgid="1055487873974272842">"Bluetooth"</item> - <item msgid="1616528372438698248">"Ethernet"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"dados móveis"</item> + <item msgid="6341719431034774569">"Wi-Fi"</item> + <item msgid="5081440868800877512">"Bluetooth"</item> + <item msgid="1160736166977503463">"Ethernet"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"um tipo de rede desconhecido"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-ro/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-ro/strings.xml index 227b7bed706d..221261c66c06 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-ro/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-ro/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"Conectați-vă la rețeaua Wi-Fi"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"Conectați-vă la rețea"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> nu are acces la internet"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"Atingeți pentru opțiuni"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"Rețeaua mobilă nu are acces la internet"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"Rețeaua nu are acces la internet"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"Serverul DNS privat nu poate fi accesat"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> are conectivitate limitată"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"Atingeți pentru a vă conecta oricum"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"S-a comutat la <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"Dispozitivul folosește <xliff:g id="NEW_NETWORK">%1$s</xliff:g> când <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> nu are acces la internet. Se pot aplica taxe."</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"S-a comutat de la <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> la <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"un tip de rețea necunoscut"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"Resurse pentru conectivitatea sistemului"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"Conectați-vă la rețeaua Wi-Fi"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"Conectați-vă la rețea"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> nu are acces la internet"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"Atingeți pentru opțiuni"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"Rețeaua mobilă nu are acces la internet"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"Rețeaua nu are acces la internet"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"Serverul DNS privat nu poate fi accesat"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> are conectivitate limitată"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"Atingeți pentru a vă conecta oricum"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"S-a comutat la <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"Dispozitivul folosește <xliff:g id="NEW_NETWORK">%1$s</xliff:g> când <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> nu are acces la internet. Se pot aplica taxe."</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"S-a comutat de la <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> la <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"date mobile"</item> - <item msgid="5520925862115353992">"Wi-Fi"</item> - <item msgid="1055487873974272842">"Bluetooth"</item> - <item msgid="1616528372438698248">"Ethernet"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"date mobile"</item> + <item msgid="6341719431034774569">"Wi-Fi"</item> + <item msgid="5081440868800877512">"Bluetooth"</item> + <item msgid="1160736166977503463">"Ethernet"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"un tip de rețea necunoscut"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-ru/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-ru/strings.xml index 18acf81537a7..ba179b7394e6 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-ru/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-ru/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"Подключение к Wi-Fi"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"Регистрация в сети"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"Сеть \"<xliff:g id="NETWORK_SSID">%1$s</xliff:g>\" не подключена к Интернету"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"Нажмите, чтобы показать варианты."</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"Мобильная сеть не подключена к Интернету"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"Сеть не подключена к Интернету"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"Доступа к частному DNS-серверу нет."</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"Подключение к сети \"<xliff:g id="NETWORK_SSID">%1$s</xliff:g>\" ограничено"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"Нажмите, чтобы подключиться"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"Новое подключение: <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"Устройство использует <xliff:g id="NEW_NETWORK">%1$s</xliff:g>, если подключение к сети <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> недоступно. Может взиматься плата за передачу данных."</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"Устройство отключено от сети <xliff:g id="NEW_NETWORK">%2$s</xliff:g> и теперь использует <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g>"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"неизвестный тип сети"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"System Connectivity Resources"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"Подключение к Wi-Fi"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"Регистрация в сети"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"Сеть \"<xliff:g id="NETWORK_SSID">%1$s</xliff:g>\" не подключена к Интернету"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"Нажмите, чтобы показать варианты."</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"Мобильная сеть не подключена к Интернету"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"Сеть не подключена к Интернету"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"Доступа к частному DNS-серверу нет."</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"Подключение к сети \"<xliff:g id="NETWORK_SSID">%1$s</xliff:g>\" ограничено"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"Нажмите, чтобы подключиться"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"Новое подключение: <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"Устройство использует <xliff:g id="NEW_NETWORK">%1$s</xliff:g>, если подключение к сети <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> недоступно. Может взиматься плата за передачу данных."</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"Устройство отключено от сети <xliff:g id="NEW_NETWORK">%2$s</xliff:g> и теперь использует <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g>"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"мобильный Интернет"</item> - <item msgid="5520925862115353992">"Wi-Fi"</item> - <item msgid="1055487873974272842">"Bluetooth"</item> - <item msgid="1616528372438698248">"Ethernet"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"мобильный интернет"</item> + <item msgid="6341719431034774569">"Wi-Fi"</item> + <item msgid="5081440868800877512">"Bluetooth"</item> + <item msgid="1160736166977503463">"Ethernet"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"неизвестный тип сети"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-si/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-si/strings.xml index 6307c2b01bdd..1c493a78dc7b 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-si/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-si/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"Wi-Fi ජාලයට පුරනය වන්න"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"ජාලයට පුරනය වන්න"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> හට අන්තර්ජාල ප්රවේශය නැත"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"විකල්ප සඳහා තට්ටු කරන්න"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"ජංගම ජාලවලට අන්තර්ජාල ප්රවේශය නැත"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"ජාලයට අන්තර්ජාල ප්රවේශය නැත"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"පුද්ගලික DNS සේවාදායකයට ප්රවේශ වීමට නොහැකිය"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> හට සීමිත සබැඳුම් හැකියාවක් ඇත"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"කෙසේ වෙතත් ඉදිරියට යාමට තට්ටු කරන්න"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"<xliff:g id="NETWORK_TYPE">%1$s</xliff:g> වෙත මාරු විය"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"උපාංගය <xliff:g id="NEW_NETWORK">%1$s</xliff:g> <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> සඳහා අන්තර්ජාල ප්රවේශය නැති විට භාවිත කරයි. ගාස්තු අදාළ විය හැකිය."</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> සිට <xliff:g id="NEW_NETWORK">%2$s</xliff:g> වෙත මාරු විය"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"නොදන්නා ජාල වර්ගයකි"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"පද්ධති සබැඳුම් හැකියා සම්පත්"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"Wi-Fi ජාලයට පුරනය වන්න"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"ජාලයට පුරනය වන්න"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> හට අන්තර්ජාල ප්රවේශය නැත"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"විකල්ප සඳහා තට්ටු කරන්න"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"ජංගම ජාලවලට අන්තර්ජාල ප්රවේශය නැත"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"ජාලයට අන්තර්ජාල ප්රවේශය නැත"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"පුද්ගලික DNS සේවාදායකයට ප්රවේශ වීමට නොහැකිය"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> හට සීමිත සබැඳුම් හැකියාවක් ඇත"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"කෙසේ වෙතත් ඉදිරියට යාමට තට්ටු කරන්න"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"<xliff:g id="NETWORK_TYPE">%1$s</xliff:g> වෙත මාරු විය"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"උපාංගය <xliff:g id="NEW_NETWORK">%1$s</xliff:g> <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> සඳහා අන්තර්ජාල ප්රවේශය නැති විට භාවිත කරයි. ගාස්තු අදාළ විය හැකිය."</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> සිට <xliff:g id="NEW_NETWORK">%2$s</xliff:g> වෙත මාරු විය"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"ජංගම දත්ත"</item> - <item msgid="5520925862115353992">"Wi-Fi"</item> - <item msgid="1055487873974272842">"බ්ලූටූත්"</item> - <item msgid="1616528372438698248">"ඊතර්නෙට්"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"ජංගම දත්ත"</item> + <item msgid="6341719431034774569">"Wi-Fi"</item> + <item msgid="5081440868800877512">"බ්ලූටූත්"</item> + <item msgid="1160736166977503463">"ඊතර්නෙට්"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"නොදන්නා ජාල වර්ගයකි"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-sk/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-sk/strings.xml index e894fefcf49e..1b9313af170f 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-sk/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-sk/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"Prihlásiť sa do siete Wi‑Fi"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"Prihlásenie do siete"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> nemá prístup k internetu"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"Klepnutím získate možnosti"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"Mobilná sieť nemá prístup k internetu"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"Sieť nemá prístup k internetu"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"K súkromnému serveru DNS sa nepodarilo získať prístup"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> má obmedzené pripojenie"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"Ak sa chcete aj napriek tomu pripojiť, klepnite"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"Prepnuté na sieť: <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"Keď <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> nemá prístup k internetu, zariadenie používa <xliff:g id="NEW_NETWORK">%1$s</xliff:g>. Môžu sa účtovať poplatky."</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"Prepnuté zo siete <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> na sieť <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"neznámy typ siete"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"Zdroje možností pripojenia systému"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"Prihlásiť sa do siete Wi‑Fi"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"Prihlásenie do siete"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> nemá prístup k internetu"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"Klepnutím získate možnosti"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"Mobilná sieť nemá prístup k internetu"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"Sieť nemá prístup k internetu"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"K súkromnému serveru DNS sa nepodarilo získať prístup"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> má obmedzené pripojenie"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"Ak sa chcete aj napriek tomu pripojiť, klepnite"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"Prepnuté na sieť: <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"Keď <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> nemá prístup k internetu, zariadenie používa <xliff:g id="NEW_NETWORK">%1$s</xliff:g>. Môžu sa účtovať poplatky."</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"Prepnuté zo siete <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> na sieť <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"mobilné dáta"</item> - <item msgid="5520925862115353992">"Wi‑Fi"</item> - <item msgid="1055487873974272842">"Bluetooth"</item> - <item msgid="1616528372438698248">"Ethernet"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"mobilné dáta"</item> + <item msgid="6341719431034774569">"Wi-Fi"</item> + <item msgid="5081440868800877512">"Bluetooth"</item> + <item msgid="1160736166977503463">"Ethernet"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"neznámy typ siete"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-sl/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-sl/strings.xml index 954b32480eb6..739fb8e49156 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-sl/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-sl/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"Prijavite se v omrežje Wi-Fi"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"Prijava v omrežje"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"Omrežje <xliff:g id="NETWORK_SSID">%1$s</xliff:g> nima dostopa do interneta"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"Dotaknite se za možnosti"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"Mobilno omrežje nima dostopa do interneta"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"Omrežje nima dostopa do interneta"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"Do zasebnega strežnika DNS ni mogoče dostopati"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"Povezljivost omrežja <xliff:g id="NETWORK_SSID">%1$s</xliff:g> je omejena"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"Dotaknite se, da kljub temu vzpostavite povezavo"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"Preklopljeno na omrežje vrste <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"Naprava uporabi omrežje vrste <xliff:g id="NEW_NETWORK">%1$s</xliff:g>, ko omrežje vrste <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> nima dostopa do interneta. Prenos podatkov se lahko zaračuna."</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"Preklopljeno z omrežja vrste <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> na omrežje vrste <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"neznana vrsta omrežja"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"Viri povezljivosti sistema"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"Prijavite se v omrežje Wi-Fi"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"Prijava v omrežje"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"Omrežje <xliff:g id="NETWORK_SSID">%1$s</xliff:g> nima dostopa do interneta"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"Dotaknite se za možnosti"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"Mobilno omrežje nima dostopa do interneta"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"Omrežje nima dostopa do interneta"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"Do zasebnega strežnika DNS ni mogoče dostopati"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"Povezljivost omrežja <xliff:g id="NETWORK_SSID">%1$s</xliff:g> je omejena"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"Dotaknite se, da kljub temu vzpostavite povezavo"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"Preklopljeno na omrežje vrste <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"Naprava uporabi omrežje vrste <xliff:g id="NEW_NETWORK">%1$s</xliff:g>, ko omrežje vrste <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> nima dostopa do interneta. Prenos podatkov se lahko zaračuna."</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"Preklopljeno z omrežja vrste <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> na omrežje vrste <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"prenos podatkov v mobilnem omrežju"</item> - <item msgid="5520925862115353992">"Wi-Fi"</item> - <item msgid="1055487873974272842">"Bluetooth"</item> - <item msgid="1616528372438698248">"Ethernet"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"prenos podatkov v mobilnem omrežju"</item> + <item msgid="6341719431034774569">"Wi-Fi"</item> + <item msgid="5081440868800877512">"Bluetooth"</item> + <item msgid="1160736166977503463">"Ethernet"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"neznana vrsta omrežja"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-sq/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-sq/strings.xml index bd5d05203452..cf8cf3b40e73 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-sq/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-sq/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"Identifikohu në rrjetin Wi-Fi"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"Identifikohu në rrjet"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> nuk ka qasje në internet"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"Trokit për opsionet"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"Rrjeti celular nuk ka qasje në internet"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"Rrjeti nuk ka qasje në internet"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"Serveri privat DNS nuk mund të qaset"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> ka lidhshmëri të kufizuar"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"Trokit për t\'u lidhur gjithsesi"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"Kaloi te <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"Pajisja përdor <xliff:g id="NEW_NETWORK">%1$s</xliff:g> kur <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> nuk ka qasje në internet. Mund të zbatohen tarifa."</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"Kaloi nga <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> te <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"një lloj rrjeti i panjohur"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"Burimet e lidhshmërisë së sistemit"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"Identifikohu në rrjetin Wi-Fi"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"Identifikohu në rrjet"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> nuk ka qasje në internet"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"Trokit për opsionet"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"Rrjeti celular nuk ka qasje në internet"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"Rrjeti nuk ka qasje në internet"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"Serveri privat DNS nuk mund të qaset"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> ka lidhshmëri të kufizuar"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"Trokit për t\'u lidhur gjithsesi"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"Kaloi te <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"Pajisja përdor <xliff:g id="NEW_NETWORK">%1$s</xliff:g> kur <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> nuk ka qasje në internet. Mund të zbatohen tarifa."</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"Kaloi nga <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> te <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"të dhënat celulare"</item> - <item msgid="5520925862115353992">"Wi-Fi"</item> - <item msgid="1055487873974272842">"Bluetooth"</item> - <item msgid="1616528372438698248">"Eternet"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"të dhënat celulare"</item> + <item msgid="6341719431034774569">"Wi-Fi"</item> + <item msgid="5081440868800877512">"Bluetooth"</item> + <item msgid="1160736166977503463">"Eternet"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"një lloj rrjeti i panjohur"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-sr/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-sr/strings.xml index 8bedbffec9a3..1f7c95c94d9e 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-sr/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-sr/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"Пријављивање на WiFi мрежу"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"Пријавите се на мрежу"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> нема приступ интернету"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"Додирните за опције"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"Мобилна мрежа нема приступ интернету"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"Мрежа нема приступ интернету"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"Приступ приватном DNS серверу није успео"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> има ограничену везу"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"Додирните да бисте се ипак повезали"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"Прешли сте на тип мреже <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"Уређај користи тип мреже <xliff:g id="NEW_NETWORK">%1$s</xliff:g> када тип мреже <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> нема приступ интернету. Можда ће се наплаћивати трошкови."</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"Прешли сте са типа мреже <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> на тип мреже <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"непознат тип мреже"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"Ресурси за повезивање са системом"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"Пријављивање на WiFi мрежу"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"Пријавите се на мрежу"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> нема приступ интернету"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"Додирните за опције"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"Мобилна мрежа нема приступ интернету"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"Мрежа нема приступ интернету"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"Приступ приватном DNS серверу није успео"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> има ограничену везу"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"Додирните да бисте се ипак повезали"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"Прешли сте на тип мреже <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"Уређај користи тип мреже <xliff:g id="NEW_NETWORK">%1$s</xliff:g> када тип мреже <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> нема приступ интернету. Можда ће се наплаћивати трошкови."</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"Прешли сте са типа мреже <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> на тип мреже <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"мобилни подаци"</item> - <item msgid="5520925862115353992">"WiFi"</item> - <item msgid="1055487873974272842">"Bluetooth"</item> - <item msgid="1616528372438698248">"Етернет"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"мобилни подаци"</item> + <item msgid="6341719431034774569">"WiFi"</item> + <item msgid="5081440868800877512">"Bluetooth"</item> + <item msgid="1160736166977503463">"Етернет"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"непознат тип мреже"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-sv/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-sv/strings.xml index b3f17630437d..7314005f8be5 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-sv/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-sv/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"Logga in på ett Wi-Fi-nätverk"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"Logga in på nätverket"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> har ingen internetanslutning"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"Tryck för alternativ"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"Mobilnätverket har ingen internetanslutning"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"Nätverket har ingen internetanslutning"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"Det går inte att komma åt den privata DNS-servern."</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> har begränsad anslutning"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"Tryck för att ansluta ändå"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"Byte av nätverk till <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"<xliff:g id="NEW_NETWORK">%1$s</xliff:g> används på enheten när det inte finns internetåtkomst via <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g>. Avgifter kan tillkomma."</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"Byte av nätverk från <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> till <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"en okänd nätverkstyp"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"Resurser för systemanslutning"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"Logga in på ett Wi-Fi-nätverk"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"Logga in på nätverket"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> har ingen internetanslutning"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"Tryck för alternativ"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"Mobilnätverket har ingen internetanslutning"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"Nätverket har ingen internetanslutning"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"Det går inte att komma åt den privata DNS-servern."</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> har begränsad anslutning"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"Tryck för att ansluta ändå"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"Byte av nätverk till <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"<xliff:g id="NEW_NETWORK">%1$s</xliff:g> används på enheten när det inte finns internetåtkomst via <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g>. Avgifter kan tillkomma."</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"Byte av nätverk från <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> till <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"mobildata"</item> - <item msgid="5520925862115353992">"Wi-Fi"</item> - <item msgid="1055487873974272842">"Bluetooth"</item> - <item msgid="1616528372438698248">"Ethernet"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"mobildata"</item> + <item msgid="6341719431034774569">"Wi-Fi"</item> + <item msgid="5081440868800877512">"Bluetooth"</item> + <item msgid="1160736166977503463">"Ethernet"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"en okänd nätverkstyp"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-sw/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-sw/strings.xml index 9674654c6967..5c4d59410de8 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-sw/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-sw/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"Ingia kwa mtandao wa Wi-Fi"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"Ingia katika mtandao"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> haina uwezo wa kufikia intaneti"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"Gusa ili upate chaguo"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"Mtandao wa simu hauna uwezo wa kufikia intaneti"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"Mtandao hauna uwezo wa kufikia intaneti"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"Seva ya faragha ya DNS haiwezi kufikiwa"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> ina muunganisho unaofikia huduma chache."</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"Gusa ili uunganishe tu"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"Sasa inatumia <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"Kifaa hutumia <xliff:g id="NEW_NETWORK">%1$s</xliff:g> wakati <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> haina intaneti. Huenda ukalipishwa."</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"Imebadilisha mtandao kutoka <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> na sasa inatumia <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"aina ya mtandao isiyojulikana"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"Nyenzo za Muunganisho wa Mfumo"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"Ingia kwa mtandao wa Wi-Fi"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"Ingia katika mtandao"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> haina uwezo wa kufikia intaneti"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"Gusa ili upate chaguo"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"Mtandao wa simu hauna uwezo wa kufikia intaneti"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"Mtandao hauna uwezo wa kufikia intaneti"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"Seva ya faragha ya DNS haiwezi kufikiwa"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> ina muunganisho unaofikia huduma chache."</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"Gusa ili uunganishe tu"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"Sasa inatumia <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"Kifaa hutumia <xliff:g id="NEW_NETWORK">%1$s</xliff:g> wakati <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> haina intaneti. Huenda ukalipishwa."</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"Imebadilisha mtandao kutoka <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> na sasa inatumia <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"data ya simu"</item> - <item msgid="5520925862115353992">"Wi-Fi"</item> - <item msgid="1055487873974272842">"Bluetooth"</item> - <item msgid="1616528372438698248">"Ethaneti"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"data ya mtandao wa simu"</item> + <item msgid="6341719431034774569">"Wi-Fi"</item> + <item msgid="5081440868800877512">"Bluetooth"</item> + <item msgid="1160736166977503463">"Ethaneti"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"aina ya mtandao isiyojulikana"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-ta/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-ta/strings.xml index 12604cbf1c8d..90f89c988e21 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-ta/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-ta/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"வைஃபை நெட்வொர்க்கில் உள்நுழையவும்"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"நெட்வொர்க்கில் உள்நுழையவும்"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> நெட்வொர்க்கிற்கு இணைய அணுகல் இல்லை"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"விருப்பங்களுக்கு, தட்டவும்"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"மொபைல் நெட்வொர்க்கிற்கு இணைய அணுகல் இல்லை"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"நெட்வொர்க்கிற்கு இணைய அணுகல் இல்லை"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"தனிப்பட்ட DNS சேவையகத்தை அணுக இயலாது"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> வரம்பிற்கு உட்பட்ட இணைப்புநிலையைக் கொண்டுள்ளது"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"எப்படியேனும் இணைப்பதற்குத் தட்டவும்"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"<xliff:g id="NETWORK_TYPE">%1$s</xliff:g>க்கு மாற்றப்பட்டது"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"<xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> நெட்வொர்க்கில் இண்டர்நெட் அணுகல் இல்லாததால், சாதனமானது <xliff:g id="NEW_NETWORK">%1$s</xliff:g> நெட்வொர்க்கைப் பயன்படுத்துகிறது. கட்டணங்கள் விதிக்கப்படலாம்."</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> இலிருந்து <xliff:g id="NEW_NETWORK">%2$s</xliff:g>க்கு மாற்றப்பட்டது"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"தெரியாத நெட்வொர்க் வகை"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"சிஸ்டம் இணைப்பு மூலங்கள்"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"வைஃபை நெட்வொர்க்கில் உள்நுழையவும்"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"நெட்வொர்க்கில் உள்நுழையவும்"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> நெட்வொர்க்கிற்கு இணைய அணுகல் இல்லை"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"விருப்பங்களுக்கு, தட்டவும்"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"மொபைல் நெட்வொர்க்கிற்கு இணைய அணுகல் இல்லை"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"நெட்வொர்க்கிற்கு இணைய அணுகல் இல்லை"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"தனிப்பட்ட DNS சேவையகத்தை அணுக இயலாது"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> வரம்பிற்கு உட்பட்ட இணைப்புநிலையைக் கொண்டுள்ளது"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"எப்படியேனும் இணைப்பதற்குத் தட்டவும்"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"<xliff:g id="NETWORK_TYPE">%1$s</xliff:g>க்கு மாற்றப்பட்டது"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"<xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> நெட்வொர்க்கில் இண்டர்நெட் அணுகல் இல்லாததால், சாதனமானது <xliff:g id="NEW_NETWORK">%1$s</xliff:g> நெட்வொர்க்கைப் பயன்படுத்துகிறது. கட்டணங்கள் விதிக்கப்படலாம்."</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> இலிருந்து <xliff:g id="NEW_NETWORK">%2$s</xliff:g>க்கு மாற்றப்பட்டது"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"மொபைல் டேட்டா"</item> - <item msgid="5520925862115353992">"வைஃபை"</item> - <item msgid="1055487873974272842">"புளூடூத்"</item> - <item msgid="1616528372438698248">"ஈத்தர்நெட்"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"மொபைல் டேட்டா"</item> + <item msgid="6341719431034774569">"வைஃபை"</item> + <item msgid="5081440868800877512">"புளூடூத்"</item> + <item msgid="1160736166977503463">"ஈதர்நெட்"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"தெரியாத நெட்வொர்க் வகை"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-te/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-te/strings.xml index 84a8640b0727..c69b599e1900 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-te/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-te/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"Wi-Fi నెట్వర్క్కి సైన్ ఇన్ చేయండి"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"నెట్వర్క్కి సైన్ ఇన్ చేయండి"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g>కి ఇంటర్నెట్ యాక్సెస్ లేదు"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"ఎంపికల కోసం నొక్కండి"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"మొబైల్ నెట్వర్క్కు ఇంటర్నెట్ యాక్సెస్ లేదు"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"నెట్వర్క్కు ఇంటర్నెట్ యాక్సెస్ లేదు"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"ప్రైవేట్ DNS సర్వర్ను యాక్సెస్ చేయడం సాధ్యపడదు"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> పరిమిత కనెక్టివిటీని కలిగి ఉంది"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"ఏదేమైనా కనెక్ట్ చేయడానికి నొక్కండి"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"<xliff:g id="NETWORK_TYPE">%1$s</xliff:g>కి మార్చబడింది"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"పరికరం <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g>కి ఇంటర్నెట్ యాక్సెస్ లేనప్పుడు <xliff:g id="NEW_NETWORK">%1$s</xliff:g>ని ఉపయోగిస్తుంది. ఛార్జీలు వర్తించవచ్చు."</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> నుండి <xliff:g id="NEW_NETWORK">%2$s</xliff:g>కి మార్చబడింది"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"తెలియని నెట్వర్క్ రకం"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"సిస్టమ్ కనెక్టివిటీ రిసోర్స్లు"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"Wi-Fi నెట్వర్క్కి సైన్ ఇన్ చేయండి"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"నెట్వర్క్కి సైన్ ఇన్ చేయండి"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g>కి ఇంటర్నెట్ యాక్సెస్ లేదు"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"ఎంపికల కోసం నొక్కండి"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"మొబైల్ నెట్వర్క్కు ఇంటర్నెట్ యాక్సెస్ లేదు"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"నెట్వర్క్కు ఇంటర్నెట్ యాక్సెస్ లేదు"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"ప్రైవేట్ DNS సర్వర్ను యాక్సెస్ చేయడం సాధ్యపడదు"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> పరిమిత కనెక్టివిటీని కలిగి ఉంది"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"ఏదేమైనా కనెక్ట్ చేయడానికి నొక్కండి"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"<xliff:g id="NETWORK_TYPE">%1$s</xliff:g>కి మార్చబడింది"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"పరికరం <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g>కి ఇంటర్నెట్ యాక్సెస్ లేనప్పుడు <xliff:g id="NEW_NETWORK">%1$s</xliff:g>ని ఉపయోగిస్తుంది. ఛార్జీలు వర్తించవచ్చు."</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> నుండి <xliff:g id="NEW_NETWORK">%2$s</xliff:g>కి మార్చబడింది"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"మొబైల్ డేటా"</item> - <item msgid="5520925862115353992">"Wi-Fi"</item> - <item msgid="1055487873974272842">"బ్లూటూత్"</item> - <item msgid="1616528372438698248">"ఈథర్నెట్"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"మొబైల్ డేటా"</item> + <item msgid="6341719431034774569">"Wi-Fi"</item> + <item msgid="5081440868800877512">"బ్లూటూత్"</item> + <item msgid="1160736166977503463">"ఈథర్నెట్"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"తెలియని నెట్వర్క్ రకం"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-th/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-th/strings.xml index 1616e5151d3b..eee5a3520d67 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-th/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-th/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"ลงชื่อเข้าใช้เครือข่าย WiFi"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"ลงชื่อเข้าใช้เครือข่าย"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> เข้าถึงอินเทอร์เน็ตไม่ได้"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"แตะเพื่อดูตัวเลือก"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"เครือข่ายมือถือไม่มีการเข้าถึงอินเทอร์เน็ต"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"เครือข่ายไม่มีการเข้าถึงอินเทอร์เน็ต"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"เข้าถึงเซิร์ฟเวอร์ DNS ไม่ได้"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> มีการเชื่อมต่อจำกัด"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"แตะเพื่อเชื่อมต่อ"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"เปลี่ยนเป็น <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"อุปกรณ์จะใช้ <xliff:g id="NEW_NETWORK">%1$s</xliff:g> เมื่อ <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> เข้าถึงอินเทอร์เน็ตไม่ได้ โดยอาจมีค่าบริการ"</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"เปลี่ยนจาก <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> เป็น <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"ประเภทเครือข่ายที่ไม่รู้จัก"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"ทรัพยากรการเชื่อมต่อของระบบ"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"ลงชื่อเข้าใช้เครือข่าย WiFi"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"ลงชื่อเข้าใช้เครือข่าย"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> เข้าถึงอินเทอร์เน็ตไม่ได้"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"แตะเพื่อดูตัวเลือก"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"เครือข่ายมือถือไม่มีการเข้าถึงอินเทอร์เน็ต"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"เครือข่ายไม่มีการเข้าถึงอินเทอร์เน็ต"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"เข้าถึงเซิร์ฟเวอร์ DNS ไม่ได้"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> มีการเชื่อมต่อจำกัด"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"แตะเพื่อเชื่อมต่อ"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"เปลี่ยนเป็น <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"อุปกรณ์จะใช้ <xliff:g id="NEW_NETWORK">%1$s</xliff:g> เมื่อ <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> เข้าถึงอินเทอร์เน็ตไม่ได้ โดยอาจมีค่าบริการ"</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"เปลี่ยนจาก <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> เป็น <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"เน็ตมือถือ"</item> - <item msgid="5520925862115353992">"Wi-Fi"</item> - <item msgid="1055487873974272842">"บลูทูธ"</item> - <item msgid="1616528372438698248">"อีเทอร์เน็ต"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"อินเทอร์เน็ตมือถือ"</item> + <item msgid="6341719431034774569">"Wi-Fi"</item> + <item msgid="5081440868800877512">"บลูทูธ"</item> + <item msgid="1160736166977503463">"อีเทอร์เน็ต"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"ประเภทเครือข่ายที่ไม่รู้จัก"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-tl/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-tl/strings.xml index 3bf1ce494aba..8d665fe5f98b 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-tl/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-tl/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"Mag-sign in sa Wi-Fi network"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"Mag-sign in sa network"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"Walang access sa internet ang <xliff:g id="NETWORK_SSID">%1$s</xliff:g>"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"I-tap para sa mga opsyon"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"Walang access sa internet ang mobile network"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"Walang access sa internet ang network"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"Hindi ma-access ang pribadong DNS server"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"Limitado ang koneksyon ng <xliff:g id="NETWORK_SSID">%1$s</xliff:g>"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"I-tap para kumonekta pa rin"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"Lumipat sa <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"Ginagamit ng device ang <xliff:g id="NEW_NETWORK">%1$s</xliff:g> kapag walang access sa internet ang <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g>. Maaaring may mga malapat na singilin."</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"Lumipat sa <xliff:g id="NEW_NETWORK">%2$s</xliff:g> mula sa <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g>"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"isang hindi kilalang uri ng network"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"Mga Resource ng Pagkakonekta ng System"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"Mag-sign in sa Wi-Fi network"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"Mag-sign in sa network"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"Walang access sa internet ang <xliff:g id="NETWORK_SSID">%1$s</xliff:g>"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"I-tap para sa mga opsyon"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"Walang access sa internet ang mobile network"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"Walang access sa internet ang network"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"Hindi ma-access ang pribadong DNS server"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"Limitado ang koneksyon ng <xliff:g id="NETWORK_SSID">%1$s</xliff:g>"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"I-tap para kumonekta pa rin"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"Lumipat sa <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"Ginagamit ng device ang <xliff:g id="NEW_NETWORK">%1$s</xliff:g> kapag walang access sa internet ang <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g>. Maaaring may mga malapat na singilin."</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"Lumipat sa <xliff:g id="NEW_NETWORK">%2$s</xliff:g> mula sa <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g>"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"mobile data"</item> - <item msgid="5520925862115353992">"Wi-Fi"</item> - <item msgid="1055487873974272842">"Bluetooth"</item> - <item msgid="1616528372438698248">"Ethernet"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"mobile data"</item> + <item msgid="6341719431034774569">"Wi-Fi"</item> + <item msgid="5081440868800877512">"Bluetooth"</item> + <item msgid="1160736166977503463">"Ethernet"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"isang hindi kilalang uri ng network"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-tr/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-tr/strings.xml index 5c326e5eeec7..cfb76323ed41 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-tr/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-tr/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"Kablosuz ağda oturum açın"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"Ağda oturum açın"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> ağının internet bağlantısı yok"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"Seçenekler için dokunun"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"Mobil ağın internet bağlantısı yok"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"Ağın internet bağlantısı yok"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"Gizli DNS sunucusuna erişilemiyor"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> sınırlı bağlantıya sahip"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"Yine de bağlanmak için dokunun"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"<xliff:g id="NETWORK_TYPE">%1$s</xliff:g> ağına geçildi"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"<xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> ağının internet erişimi olmadığında cihaz <xliff:g id="NEW_NETWORK">%1$s</xliff:g> ağını kullanır. Bunun için ödeme alınabilir."</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> ağından <xliff:g id="NEW_NETWORK">%2$s</xliff:g> ağına geçildi"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"bilinmeyen ağ türü"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"Sistem Bağlantı Kaynakları"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"Kablosuz ağda oturum açın"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"Ağda oturum açın"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> ağının internet bağlantısı yok"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"Seçenekler için dokunun"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"Mobil ağın internet bağlantısı yok"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"Ağın internet bağlantısı yok"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"Gizli DNS sunucusuna erişilemiyor"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> sınırlı bağlantıya sahip"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"Yine de bağlanmak için dokunun"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"<xliff:g id="NETWORK_TYPE">%1$s</xliff:g> ağına geçildi"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"<xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> ağının internet erişimi olmadığında cihaz <xliff:g id="NEW_NETWORK">%1$s</xliff:g> ağını kullanır. Bunun için ödeme alınabilir."</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> ağından <xliff:g id="NEW_NETWORK">%2$s</xliff:g> ağına geçildi"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"mobil veri"</item> - <item msgid="5520925862115353992">"Kablosuz"</item> - <item msgid="1055487873974272842">"Bluetooth"</item> - <item msgid="1616528372438698248">"Ethernet"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"mobil veri"</item> + <item msgid="6341719431034774569">"Kablosuz"</item> + <item msgid="5081440868800877512">"Bluetooth"</item> + <item msgid="1160736166977503463">"Ethernet"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"bilinmeyen ağ türü"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-uk/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-uk/strings.xml index d1382da924af..c5da7460b3be 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-uk/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-uk/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"Вхід у мережу Wi-Fi"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"Вхід у мережу"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"Мережа <xliff:g id="NETWORK_SSID">%1$s</xliff:g> не має доступу до Інтернету"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"Торкніться, щоб відкрити опції"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"Мобільна мережа не має доступу до Інтернету"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"Мережа не має доступу до Інтернету"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"Немає доступу до приватного DNS-сервера"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"Підключення до мережі <xliff:g id="NETWORK_SSID">%1$s</xliff:g> обмежено"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"Натисніть, щоб усе одно підключитися"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"Пристрій перейшов на мережу <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"Коли мережа <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> не має доступу до Інтернету, використовується <xliff:g id="NEW_NETWORK">%1$s</xliff:g>. Може стягуватися плата."</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"Пристрій перейшов з мережі <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> на мережу <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"невідомий тип мережі"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"Ресурси для підключення системи"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"Вхід у мережу Wi-Fi"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"Вхід у мережу"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"Мережа <xliff:g id="NETWORK_SSID">%1$s</xliff:g> не має доступу до Інтернету"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"Торкніться, щоб відкрити опції"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"Мобільна мережа не має доступу до Інтернету"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"Мережа не має доступу до Інтернету"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"Немає доступу до приватного DNS-сервера"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"Підключення до мережі <xliff:g id="NETWORK_SSID">%1$s</xliff:g> обмежено"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"Натисніть, щоб усе одно підключитися"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"Пристрій перейшов на мережу <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"Коли мережа <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> не має доступу до Інтернету, використовується <xliff:g id="NEW_NETWORK">%1$s</xliff:g>. Може стягуватися плата."</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"Пристрій перейшов з мережі <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> на мережу <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"мобільне передавання даних"</item> - <item msgid="5520925862115353992">"Wi-Fi"</item> - <item msgid="1055487873974272842">"Bluetooth"</item> - <item msgid="1616528372438698248">"Ethernet"</item> - <item msgid="9177085807664964627">"Мережа VPN"</item> + <item msgid="5454013645032700715">"мобільний Інтернет"</item> + <item msgid="6341719431034774569">"Wi-Fi"</item> + <item msgid="5081440868800877512">"Bluetooth"</item> + <item msgid="1160736166977503463">"Ethernet"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"невідомий тип мережі"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-ur/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-ur/strings.xml index 3c031ad31877..bd2a228ab430 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-ur/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-ur/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"Wi-Fi نیٹ ورک میں سائن ان کریں"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"نیٹ ورک میں سائن ان کریں"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> کو انٹرنیٹ تک رسائی حاصل نہیں ہے"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"اختیارات کیلئے تھپتھپائیں"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"موبائل نیٹ ورک کو انٹرنیٹ تک رسائی حاصل نہیں ہے"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"نیٹ ورک کو انٹرنیٹ تک رسائی حاصل نہیں ہے"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"نجی DNS سرور تک رسائی حاصل نہیں کی جا سکی"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> کی کنیکٹوٹی محدود ہے"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"بہر حال منسلک کرنے کے لیے تھپتھپائیں"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"<xliff:g id="NETWORK_TYPE">%1$s</xliff:g> پر سوئچ ہو گیا"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"جب <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> کو انٹرنیٹ تک رسائی نہیں ہوتی ہے تو آلہ <xliff:g id="NEW_NETWORK">%1$s</xliff:g> کا استعمال کرتا ہے۔ چارجز لاگو ہو سکتے ہیں۔"</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> سے <xliff:g id="NEW_NETWORK">%2$s</xliff:g> پر سوئچ ہو گیا"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"نیٹ ورک کی نامعلوم قسم"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"سسٹم کنیکٹوٹی کے وسائل"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"Wi-Fi نیٹ ورک میں سائن ان کریں"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"نیٹ ورک میں سائن ان کریں"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> کو انٹرنیٹ تک رسائی حاصل نہیں ہے"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"اختیارات کیلئے تھپتھپائیں"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"موبائل نیٹ ورک کو انٹرنیٹ تک رسائی حاصل نہیں ہے"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"نیٹ ورک کو انٹرنیٹ تک رسائی حاصل نہیں ہے"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"نجی DNS سرور تک رسائی حاصل نہیں کی جا سکی"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> کی کنیکٹوٹی محدود ہے"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"بہر حال منسلک کرنے کے لیے تھپتھپائیں"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"<xliff:g id="NETWORK_TYPE">%1$s</xliff:g> پر سوئچ ہو گیا"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"جب <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> کو انٹرنیٹ تک رسائی نہیں ہوتی ہے تو آلہ <xliff:g id="NEW_NETWORK">%1$s</xliff:g> کا استعمال کرتا ہے۔ چارجز لاگو ہو سکتے ہیں۔"</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> سے <xliff:g id="NEW_NETWORK">%2$s</xliff:g> پر سوئچ ہو گیا"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"موبائل ڈیٹا"</item> - <item msgid="5520925862115353992">"Wi-Fi"</item> - <item msgid="1055487873974272842">"بلوٹوتھ"</item> - <item msgid="1616528372438698248">"ایتھرنیٹ"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"موبائل ڈیٹا"</item> + <item msgid="6341719431034774569">"Wi-Fi"</item> + <item msgid="5081440868800877512">"بلوٹوتھ"</item> + <item msgid="1160736166977503463">"ایتھرنیٹ"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"نامعلوم نیٹ ورک کی قسم"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-uz/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-uz/strings.xml index 7518db3a7b8c..567aa886b4a9 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-uz/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-uz/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"Wi-Fi tarmoqqa kirish"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"Tarmoqqa kirish"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> nomli tarmoqda internetga ruxsati yoʻq"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"Variantlarni ko‘rsatish uchun bosing"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"Mobil tarmoq internetga ulanmagan"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"Tarmoq internetga ulanmagan"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"Xususiy DNS server ishlamayapti"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> nomli tarmoqda aloqa cheklangan"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"Baribir ulash uchun bosing"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"Yangi ulanish: <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"Agar <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> tarmoqda internet uzilsa, qurilma <xliff:g id="NEW_NETWORK">%1$s</xliff:g>ga ulanadi. Sarflangan trafik uchun haq olinishi mumkin."</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> tarmog‘idan <xliff:g id="NEW_NETWORK">%2$s</xliff:g> tarmog‘iga o‘tildi"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"noma’lum tarmoq turi"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"Tizim aloqa resurslari"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"Wi-Fi tarmoqqa kirish"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"Tarmoqqa kirish"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> nomli tarmoqda internetga ruxsati yoʻq"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"Variantlarni ko‘rsatish uchun bosing"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"Mobil tarmoq internetga ulanmagan"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"Tarmoq internetga ulanmagan"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"Xususiy DNS server ishlamayapti"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> nomli tarmoqda aloqa cheklangan"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"Baribir ulash uchun bosing"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"Yangi ulanish: <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"Agar <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> tarmoqda internet uzilsa, qurilma <xliff:g id="NEW_NETWORK">%1$s</xliff:g>ga ulanadi. Sarflangan trafik uchun haq olinishi mumkin."</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> tarmog‘idan <xliff:g id="NEW_NETWORK">%2$s</xliff:g> tarmog‘iga o‘tildi"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"mobil internet"</item> - <item msgid="5520925862115353992">"Wi-Fi"</item> - <item msgid="1055487873974272842">"Bluetooth"</item> - <item msgid="1616528372438698248">"Ethernet"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"mobil internet"</item> + <item msgid="6341719431034774569">"Wi-Fi"</item> + <item msgid="5081440868800877512">"Bluetooth"</item> + <item msgid="1160736166977503463">"Ethernet"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"nomaʼlum tarmoq turi"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-vi/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-vi/strings.xml index d2284d49051b..590b388c960f 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-vi/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-vi/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"Đăng nhập vào mạng Wi-Fi"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"Đăng nhập vào mạng"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> không có quyền truy cập Internet"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"Nhấn để biết tùy chọn"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"Mạng di động không có quyền truy cập Internet"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"Mạng không có quyền truy cập Internet"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"Không thể truy cập máy chủ DNS riêng tư"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> có khả năng kết nối giới hạn"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"Nhấn để tiếp tục kết nối"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"Đã chuyển sang <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"Thiết bị sử dụng <xliff:g id="NEW_NETWORK">%1$s</xliff:g> khi <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> không có quyền truy cập Internet. Bạn có thể phải trả phí."</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"Đã chuyển từ <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> sang <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"loại mạng không xác định"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"Tài nguyên kết nối hệ thống"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"Đăng nhập vào mạng Wi-Fi"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"Đăng nhập vào mạng"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> không có quyền truy cập Internet"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"Nhấn để biết tùy chọn"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"Mạng di động không có quyền truy cập Internet"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"Mạng không có quyền truy cập Internet"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"Không thể truy cập máy chủ DNS riêng tư"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> có khả năng kết nối giới hạn"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"Nhấn để tiếp tục kết nối"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"Đã chuyển sang <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"Thiết bị sử dụng <xliff:g id="NEW_NETWORK">%1$s</xliff:g> khi <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> không có quyền truy cập Internet. Bạn có thể phải trả phí."</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"Đã chuyển từ <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> sang <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"dữ liệu di động"</item> - <item msgid="5520925862115353992">"Wi-Fi"</item> - <item msgid="1055487873974272842">"Bluetooth"</item> - <item msgid="1616528372438698248">"Ethernet"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"dữ liệu di động"</item> + <item msgid="6341719431034774569">"Wi-Fi"</item> + <item msgid="5081440868800877512">"Bluetooth"</item> + <item msgid="1160736166977503463">"Ethernet"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"loại mạng không xác định"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-zh-rCN/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-zh-rCN/strings.xml index 813482b4999b..9d6cff90e2c3 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-zh-rCN/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-zh-rCN/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"登录到WLAN网络"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"登录到网络"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> 无法访问互联网"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"点按即可查看相关选项"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"此移动网络无法访问互联网"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"此网络无法访问互联网"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"无法访问私人 DNS 服务器"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> 的连接受限"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"点按即可继续连接"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"已切换至<xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"设备会在<xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g>无法访问互联网时使用<xliff:g id="NEW_NETWORK">%1$s</xliff:g>(可能需要支付相应的费用)。"</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"已从<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g>切换至<xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"未知网络类型"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"系统网络连接资源"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"登录到WLAN网络"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"登录到网络"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> 无法访问互联网"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"点按即可查看相关选项"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"此移动网络无法访问互联网"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"此网络无法访问互联网"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"无法访问私人 DNS 服务器"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> 的连接受限"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"点按即可继续连接"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"已切换至<xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"设备会在<xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g>无法访问互联网时使用<xliff:g id="NEW_NETWORK">%1$s</xliff:g>(可能需要支付相应的费用)。"</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"已从<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g>切换至<xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"移动数据"</item> - <item msgid="5520925862115353992">"WLAN"</item> - <item msgid="1055487873974272842">"蓝牙"</item> - <item msgid="1616528372438698248">"以太网"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"移动数据"</item> + <item msgid="6341719431034774569">"WLAN"</item> + <item msgid="5081440868800877512">"蓝牙"</item> + <item msgid="1160736166977503463">"以太网"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"未知网络类型"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-zh-rHK/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-zh-rHK/strings.xml index 676404fe2ce0..c84241c8963e 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-zh-rHK/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-zh-rHK/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"登入 Wi-Fi 網絡"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"登入網絡"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g>未有連接至互聯網"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"輕按即可查看選項"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"流動網絡並未連接互聯網"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"網絡並未連接互聯網"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"無法存取私人 DNS 伺服器"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g>連線受限"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"仍要輕按以連結至此網絡"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"已切換至<xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"裝置會在 <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> 無法連線至互聯網時使用<xliff:g id="NEW_NETWORK">%1$s</xliff:g> (可能需要支付相關費用)。"</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"已從<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g>切換至<xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"不明網絡類型"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"系統連線資源"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"登入 Wi-Fi 網絡"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"登入網絡"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g>未有連接至互聯網"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"輕按即可查看選項"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"流動網絡並未連接互聯網"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"網絡並未連接互聯網"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"無法存取私人 DNS 伺服器"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g>連線受限"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"仍要輕按以連結至此網絡"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"已切換至<xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"裝置會在 <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> 無法連線至互聯網時使用<xliff:g id="NEW_NETWORK">%1$s</xliff:g> (可能需要支付相關費用)。"</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"已從<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g>切換至<xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"流動數據"</item> - <item msgid="5520925862115353992">"Wi-Fi"</item> - <item msgid="1055487873974272842">"藍牙"</item> - <item msgid="1616528372438698248">"以太網"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"流動數據"</item> + <item msgid="6341719431034774569">"Wi-Fi"</item> + <item msgid="5081440868800877512">"藍牙"</item> + <item msgid="1160736166977503463">"以太網絡"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"不明網絡類型"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-zh-rTW/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-zh-rTW/strings.xml index f355138bd6a4..07540d18c0f9 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-zh-rTW/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-zh-rTW/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"登入 Wi-Fi 網路"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"登入網路"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> 沒有網際網路連線"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"輕觸即可查看選項"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"這個行動網路沒有網際網路連線"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"這個網路沒有網際網路連線"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"無法存取私人 DNS 伺服器"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> 的連線能力受限"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"輕觸即可繼續連線"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"已切換至<xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"裝置會在無法連上「<xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g>」時切換至「<xliff:g id="NEW_NETWORK">%1$s</xliff:g>」(可能需要支付相關費用)。"</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"已從 <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> 切換至<xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"不明的網路類型"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"系統連線資源"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"登入 Wi-Fi 網路"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"登入網路"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> 沒有網際網路連線"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"輕觸即可查看選項"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"這個行動網路沒有網際網路連線"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"這個網路沒有網際網路連線"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"無法存取私人 DNS 伺服器"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> 的連線能力受限"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"輕觸即可繼續連線"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"已切換至<xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"裝置會在無法連上「<xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g>」時切換至「<xliff:g id="NEW_NETWORK">%1$s</xliff:g>」(可能需要支付相關費用)。"</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"已從 <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> 切換至<xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"行動數據"</item> - <item msgid="5520925862115353992">"Wi-Fi"</item> - <item msgid="1055487873974272842">"藍牙"</item> - <item msgid="1616528372438698248">"乙太網路"</item> - <item msgid="9177085807664964627">"VPN"</item> + <item msgid="5454013645032700715">"行動數據"</item> + <item msgid="6341719431034774569">"Wi-Fi"</item> + <item msgid="5081440868800877512">"藍牙"</item> + <item msgid="1160736166977503463">"乙太網路"</item> + <item msgid="7347618872551558605">"VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"不明的網路類型"</string> </resources> diff --git a/packages/Connectivity/service/ServiceConnectivityResources/res/values-zu/strings.xml b/packages/Connectivity/service/ServiceConnectivityResources/res/values-zu/strings.xml index 55fefb793998..19f390ba61e0 100644 --- a/packages/Connectivity/service/ServiceConnectivityResources/res/values-zu/strings.xml +++ b/packages/Connectivity/service/ServiceConnectivityResources/res/values-zu/strings.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +13,31 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_available_sign_in" msgid="381054692557675237">"Ngena ngemvume kunethiwekhi ye-Wi-Fi"</string> - <string name="network_available_sign_in" msgid="1520342291829283114">"Ngena ngemvume kunethiwekhi"</string> - <!-- no translation found for network_available_sign_in_detailed (7520423801613396556) --> - <string name="wifi_no_internet" msgid="1386911698276448061">"I-<xliff:g id="NETWORK_SSID">%1$s</xliff:g> ayinakho ukufinyelela kwe-inthanethi"</string> - <string name="wifi_no_internet_detailed" msgid="634938444133558942">"Thepha ukuze uthole izinketho"</string> - <string name="mobile_no_internet" msgid="4014455157529909781">"Inethiwekhi yeselula ayinakho ukufinyelela kwe-inthanethi"</string> - <string name="other_networks_no_internet" msgid="6698711684200067033">"Inethiwekhi ayinakho ukufinyelela kwenethiwekhi"</string> - <string name="private_dns_broken_detailed" msgid="3709388271074611847">"Iseva eyimfihlo ye-DNS ayikwazi ukufinyelelwa"</string> - <string name="network_partial_connectivity" msgid="4791024923851432291">"I-<xliff:g id="NETWORK_SSID">%1$s</xliff:g> inokuxhumeka okukhawulelwe"</string> - <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"Thepha ukuze uxhume noma kunjalo"</string> - <string name="network_switch_metered" msgid="1531869544142283384">"Kushintshelwe ku-<xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> - <string name="network_switch_metered_detail" msgid="1358296010128405906">"Idivayisi isebenzisa i-<xliff:g id="NEW_NETWORK">%1$s</xliff:g> uma i-<xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> inganakho ukufinyelela kwe-inthanethi. Kungasebenza izindleko."</string> - <string name="network_switch_metered_toast" msgid="501662047275723743">"Kushintshelewe kusuka ku-<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> kuya ku-<xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> - <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"uhlobo olungaziwa lwenethiwekhi"</string> + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="connectivityResourcesAppLabel" msgid="8294935652079168395">"Izinsiza Zokuxhumeka Zesistimu"</string> + <string name="wifi_available_sign_in" msgid="5254156478006453593">"Ngena ngemvume kunethiwekhi ye-Wi-Fi"</string> + <string name="network_available_sign_in" msgid="7794369329839408792">"Ngena ngemvume kunethiwekhi"</string> + <!-- no translation found for network_available_sign_in_detailed (3643910593681893097) --> + <skip /> + <string name="wifi_no_internet" msgid="3961697321010262514">"I-<xliff:g id="NETWORK_SSID">%1$s</xliff:g> ayinakho ukufinyelela kwe-inthanethi"</string> + <string name="wifi_no_internet_detailed" msgid="1229067002306296104">"Thepha ukuze uthole izinketho"</string> + <string name="mobile_no_internet" msgid="2262524005014119639">"Inethiwekhi yeselula ayinakho ukufinyelela kwe-inthanethi"</string> + <string name="other_networks_no_internet" msgid="8226004998719563755">"Inethiwekhi ayinakho ukufinyelela kwenethiwekhi"</string> + <string name="private_dns_broken_detailed" msgid="3537567373166991809">"Iseva eyimfihlo ye-DNS ayikwazi ukufinyelelwa"</string> + <string name="network_partial_connectivity" msgid="5957065286265771273">"I-<xliff:g id="NETWORK_SSID">%1$s</xliff:g> inokuxhumeka okukhawulelwe"</string> + <string name="network_partial_connectivity_detailed" msgid="6975752539442533034">"Thepha ukuze uxhume noma kunjalo"</string> + <string name="network_switch_metered" msgid="2814798852883117872">"Kushintshelwe ku-<xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string> + <string name="network_switch_metered_detail" msgid="605546931076348229">"Idivayisi isebenzisa i-<xliff:g id="NEW_NETWORK">%1$s</xliff:g> uma i-<xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> inganakho ukufinyelela kwe-inthanethi. Kungasebenza izindleko."</string> + <string name="network_switch_metered_toast" msgid="8831325515040986641">"Kushintshelewe kusuka ku-<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> kuya ku-<xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string> <string-array name="network_switch_type_name"> - <item msgid="2255670471736226365">"idatha yeselula"</item> - <item msgid="5520925862115353992">"I-Wi-Fi"</item> - <item msgid="1055487873974272842">"I-Bluetooth"</item> - <item msgid="1616528372438698248">"I-Ethernet"</item> - <item msgid="9177085807664964627">"I-VPN"</item> + <item msgid="5454013645032700715">"idatha yeselula"</item> + <item msgid="6341719431034774569">"I-Wi-Fi"</item> + <item msgid="5081440868800877512">"I-Bluetooth"</item> + <item msgid="1160736166977503463">"I-Ethernet"</item> + <item msgid="7347618872551558605">"I-VPN"</item> </string-array> + <string name="network_switch_type_name_unknown" msgid="7826330274368951740">"uhlobo olungaziwa lwenethiwekhi"</string> </resources> diff --git a/packages/PackageInstaller/res/values-iw/strings.xml b/packages/PackageInstaller/res/values-iw/strings.xml index 7cabdd532ffb..5b17d7411698 100644 --- a/packages/PackageInstaller/res/values-iw/strings.xml +++ b/packages/PackageInstaller/res/values-iw/strings.xml @@ -21,9 +21,9 @@ <string name="done" msgid="6632441120016885253">"סיום"</string> <string name="cancel" msgid="1018267193425558088">"ביטול"</string> <string name="installing" msgid="4921993079741206516">"מתקין…"</string> - <string name="installing_app" msgid="1165095864863849422">"מתקין את <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string> + <string name="installing_app" msgid="1165095864863849422">"מתבצעת התקנה של <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string> <string name="install_done" msgid="5987363587661783896">"האפליקציה הותקנה."</string> - <string name="install_confirm_question" msgid="8176284075816604590">"האם ברצונך להתקין אפליקציה זו?"</string> + <string name="install_confirm_question" msgid="8176284075816604590">"להתקין את האפליקציה הזו?"</string> <string name="install_confirm_question_update" msgid="7942235418781274635">"האם ברצונך להתקין עדכון עבור אפליקציה קיימת זו? הנתונים הקיימים שלך לא יאבדו."</string> <string name="install_confirm_question_update_system" msgid="4713001702777910263">"האם ברצונך להתקין עדכון עבור אפליקציה מובנית זו? הנתונים הקיימים שלך לא יאבדו."</string> <string name="install_failed" msgid="5777824004474125469">"האפליקציה לא הותקנה."</string> @@ -31,14 +31,14 @@ <string name="install_failed_conflict" msgid="3493184212162521426">"האפליקציה לא הותקנה כי החבילה מתנגשת עם חבילה קיימת."</string> <string name="install_failed_incompatible" product="tablet" msgid="6019021440094927928">"האפליקציה לא הותקנה כי האפליקציה אינה תואמת לטאבלט."</string> <string name="install_failed_incompatible" product="tv" msgid="2890001324362291683">"האפליקציה הזו אינה תואמת לטלוויזיה שלך."</string> - <string name="install_failed_incompatible" product="default" msgid="7254630419511645826">"האפליקציה לא הותקנה כי האפליקציה אינה תואמת לטלפון."</string> + <string name="install_failed_incompatible" product="default" msgid="7254630419511645826">"האפליקציה לא הותקנה כי היא לא תואמת לטלפון."</string> <string name="install_failed_invalid_apk" msgid="8581007676422623930">"האפליקציה לא הותקנה כי נראה שהחבילה לא תקפה."</string> <string name="install_failed_msg" product="tablet" msgid="6298387264270562442">"לא ניתן להתקין את <xliff:g id="APP_NAME">%1$s</xliff:g> בטאבלט שלך."</string> <string name="install_failed_msg" product="tv" msgid="1920009940048975221">"לא ניתן להתקין את <xliff:g id="APP_NAME">%1$s</xliff:g> בטלוויזיה שלך."</string> <string name="install_failed_msg" product="default" msgid="6484461562647915707">"לא ניתן להתקין את <xliff:g id="APP_NAME">%1$s</xliff:g> בטלפון שלך."</string> <string name="launch" msgid="3952550563999890101">"פתיחה"</string> <string name="unknown_apps_admin_dlg_text" msgid="4456572224020176095">"מנהל המערכת שלך לא מתיר התקנה של אפליקציות ממקורות לא ידועים"</string> - <string name="unknown_apps_user_restriction_dlg_text" msgid="151020786933988344">"למשתמש זה אין הרשאה להתקין אפליקציות שאינן מוכרות"</string> + <string name="unknown_apps_user_restriction_dlg_text" msgid="151020786933988344">"למשתמש הזה אין הרשאה להתקין אפליקציות שאינן מוכרות"</string> <string name="install_apps_user_restriction_dlg_text" msgid="2154119597001074022">"למשתמש הזה אין הרשאה להתקין אפליקציות"</string> <string name="ok" msgid="7871959885003339302">"אישור"</string> <string name="manage_applications" msgid="5400164782453975580">"ניהול אפליקציות"</string> @@ -52,16 +52,16 @@ <string name="generic_error_dlg_text" msgid="5287861443265795232">"לא ניתן היה להסיר את התקנת האפליקציה."</string> <string name="uninstall_application_title" msgid="4045420072401428123">"הסרת התקנה של האפליקציה"</string> <string name="uninstall_update_title" msgid="824411791011583031">"הסרת התקנה של עדכון"</string> - <string name="uninstall_activity_text" msgid="1928194674397770771">"<xliff:g id="ACTIVITY_NAME">%1$s</xliff:g> הוא חלק מהאפליקציה הבאה:"</string> + <string name="uninstall_activity_text" msgid="1928194674397770771">"הפעילות <xliff:g id="ACTIVITY_NAME">%1$s</xliff:g> היא חלק מהאפליקציה הבאה:"</string> <string name="uninstall_application_text" msgid="3816830743706143980">"האם ברצונך להסיר את ההתקנה של אפליקציה זו?"</string> - <string name="uninstall_application_text_all_users" msgid="575491774380227119">"האם אתה רוצה להסיר את האפליקציה הזו עבור "<b>"כל"</b>" המשתמשים? האפליקציה והנתונים שלה יוסרו מ"<b>"כל"</b>" המשתמשים במכשיר."</string> - <string name="uninstall_application_text_user" msgid="498072714173920526">"האם ברצונך להסיר את התקנתה של אפליקציה זו עבור המשתמש <xliff:g id="USERNAME">%1$s</xliff:g>?"</string> + <string name="uninstall_application_text_all_users" msgid="575491774380227119">"להסיר את האפליקציה הזו עבור "<b>"כל"</b>" המשתמשים? האפליקציה והנתונים שלה יוסרו עבור "<b>"כל"</b>" המשתמשים במכשיר."</string> + <string name="uninstall_application_text_user" msgid="498072714173920526">"להסיר את ההתקנה של האפליקציה הזו עבור <xliff:g id="USERNAME">%1$s</xliff:g>?"</string> <string name="uninstall_update_text" msgid="863648314632448705">"האם להחליף את האפליקציה הזאת בגרסת היצרן? כל הנתונים יוסרו."</string> <string name="uninstall_update_text_multiuser" msgid="8992883151333057227">"האם להחליף את האפליקציה הזאת בגרסת היצרן? כל הנתונים יוסרו. הפעולה תשפיע על כל משתמשי המכשיר, כולל משתמשים בעלי פרופיל עבודה."</string> <string name="uninstall_keep_data" msgid="7002379587465487550">"שמירת <xliff:g id="SIZE">%1$s</xliff:g> מנתוני האפליקציה."</string> <string name="uninstalling_notification_channel" msgid="840153394325714653">"התקנות בתהליכי הסרה"</string> <string name="uninstall_failure_notification_channel" msgid="1136405866767576588">"הסרות התקנה שנכשלו"</string> - <string name="uninstalling" msgid="8709566347688966845">"מסיר התקנה..."</string> + <string name="uninstalling" msgid="8709566347688966845">"בתהליך הסרת התקנה..."</string> <string name="uninstalling_app" msgid="8866082646836981397">"מסיר את ההתקנה של <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string> <string name="uninstall_done" msgid="439354138387969269">"הסרת ההתקנה הסתיימה."</string> <string name="uninstall_done_app" msgid="4588850984473605768">"ההתקנה של <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> הוסרה"</string> diff --git a/packages/PackageInstaller/res/values-sv/strings.xml b/packages/PackageInstaller/res/values-sv/strings.xml index d0902c34ccc9..28ad6aafd77d 100644 --- a/packages/PackageInstaller/res/values-sv/strings.xml +++ b/packages/PackageInstaller/res/values-sv/strings.xml @@ -24,8 +24,8 @@ <string name="installing_app" msgid="1165095864863849422">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> installeras …"</string> <string name="install_done" msgid="5987363587661783896">"Appen har installerats."</string> <string name="install_confirm_question" msgid="8176284075816604590">"Vill du installera det här programmet?"</string> - <string name="install_confirm_question_update" msgid="7942235418781274635">"Vill du installera en uppdatering till den här befintliga appen? Dina befintliga data försvinner inte."</string> - <string name="install_confirm_question_update_system" msgid="4713001702777910263">"Vill du installera en uppdatering av den inbyggda appen? Dina befintliga data försvinner inte."</string> + <string name="install_confirm_question_update" msgid="7942235418781274635">"Vill du installera en uppdatering till den här befintliga appen? Din befintliga data försvinner inte."</string> + <string name="install_confirm_question_update_system" msgid="4713001702777910263">"Vill du installera en uppdatering av den inbyggda appen? Din befintliga data försvinner inte."</string> <string name="install_failed" msgid="5777824004474125469">"Appen har inte installerats."</string> <string name="install_failed_blocked" msgid="8512284352994752094">"Paketet har blockerats för installation."</string> <string name="install_failed_conflict" msgid="3493184212162521426">"Appen har inte installerats på grund av en konflikt mellan detta paket och ett befintligt paket."</string> diff --git a/packages/PrintSpooler/res/values-iw/strings.xml b/packages/PrintSpooler/res/values-iw/strings.xml index 64db711def15..5dcd7f21c60d 100644 --- a/packages/PrintSpooler/res/values-iw/strings.xml +++ b/packages/PrintSpooler/res/values-iw/strings.xml @@ -32,10 +32,10 @@ <string name="template_page_range" msgid="428638530038286328">"טווח של <xliff:g id="PAGE_COUNT">%1$s</xliff:g>"</string> <string name="pages_range_example" msgid="8558694453556945172">"למשל 1–5,8,11–13"</string> <string name="print_preview" msgid="8010217796057763343">"תצוגה מקדימה של הדפסה"</string> - <string name="install_for_print_preview" msgid="6366303997385509332">"התקן מציג PDF ליצירת תצוגה מקדימה"</string> + <string name="install_for_print_preview" msgid="6366303997385509332">"התקנה של PDF viewer ליצירת תצוגה מקדימה"</string> <string name="printing_app_crashed" msgid="854477616686566398">"אפליקציית ההדפסה קרסה"</string> <string name="generating_print_job" msgid="3119608742651698916">"יוצר עבודת הדפסה"</string> - <string name="save_as_pdf" msgid="5718454119847596853">"שמור כ-PDF"</string> + <string name="save_as_pdf" msgid="5718454119847596853">"שמירה כ-PDF"</string> <string name="all_printers" msgid="5018829726861876202">"כל המדפסות…"</string> <string name="print_dialog" msgid="32628687461331979">"תיבת דו שיח של מדפסת"</string> <string name="current_page_template" msgid="5145005201131935302">"<xliff:g id="CURRENT_PAGE">%1$d</xliff:g>/<xliff:g id="PAGE_COUNT">%2$d</xliff:g>"</string> @@ -44,7 +44,7 @@ <string name="expand_handle" msgid="7282974448109280522">"ידית הרחבה"</string> <string name="collapse_handle" msgid="6886637989442507451">"ידית כיווץ"</string> <string name="print_button" msgid="645164566271246268">"הדפס"</string> - <string name="savetopdf_button" msgid="2976186791686924743">"שמור כ-PDF"</string> + <string name="savetopdf_button" msgid="2976186791686924743">"שמירה כ-PDF"</string> <string name="print_options_expanded" msgid="6944679157471691859">"אפשרויות ההדפסה הורחבו"</string> <string name="print_options_collapsed" msgid="7455930445670414332">"אפשרויות ההדפסה כווצו"</string> <string name="search" msgid="5421724265322228497">"חיפוש"</string> @@ -91,7 +91,7 @@ <string name="restart" msgid="2472034227037808749">"הפעלה מחדש"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"אין חיבור למדפסת"</string> <string name="reason_unknown" msgid="5507940196503246139">"לא ידוע"</string> - <string name="print_service_security_warning_title" msgid="2160752291246775320">"האם להשתמש ב-<xliff:g id="SERVICE">%1$s</xliff:g>?"</string> + <string name="print_service_security_warning_title" msgid="2160752291246775320">"האם להשתמש בשירות <xliff:g id="SERVICE">%1$s</xliff:g>?"</string> <string name="print_service_security_warning_summary" msgid="1427434625361692006">"ייתכן שהמסמך שלך יעבור בשרת אחד או יותר בדרכו למדפסת."</string> <string-array name="color_mode_labels"> <item msgid="7602948745415174937">"שחור ולבן"</item> @@ -107,7 +107,7 @@ <item msgid="3199660090246166812">"לרוחב"</item> </string-array> <string name="print_write_error_message" msgid="5787642615179572543">"לא ניתן היה לכתוב לקובץ"</string> - <string name="print_error_default_message" msgid="8602678405502922346">"מצטערים, אך זה לא עבד. נסה שוב."</string> + <string name="print_error_default_message" msgid="8602678405502922346">"מצטערים, הפעולה לא בוצעה. אפשר לנסות שוב."</string> <string name="print_error_retry" msgid="1426421728784259538">"כדאי לנסות שוב"</string> <string name="print_error_printer_unavailable" msgid="8985614415253203381">"המדפסת הזו אינה זמינה כעת."</string> <string name="print_cannot_load_page" msgid="6179560924492912009">"לא ניתן להציג תצוגה מקדימה"</string> diff --git a/packages/PrintSpooler/res/values-nl/strings.xml b/packages/PrintSpooler/res/values-nl/strings.xml index 6448acc36902..2cd8d9baacda 100644 --- a/packages/PrintSpooler/res/values-nl/strings.xml +++ b/packages/PrintSpooler/res/values-nl/strings.xml @@ -50,7 +50,7 @@ <string name="search" msgid="5421724265322228497">"Zoeken"</string> <string name="all_printers_label" msgid="3178848870161526399">"Alle printers"</string> <string name="add_print_service_label" msgid="5356702546188981940">"Service toevoegen"</string> - <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"Zoekvak weergegeven"</string> + <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"Zoekvak wordt getoond"</string> <string name="print_search_box_hidden_utterance" msgid="5727755169343113351">"Zoekvak verborgen"</string> <string name="print_add_printer" msgid="1088656468360653455">"Printer toevoegen"</string> <string name="print_select_printer" msgid="7388760939873368698">"Printer selecteren"</string> diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothUtils.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothUtils.java index 8f8f859d1ada..253629c8d128 100644 --- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothUtils.java +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothUtils.java @@ -13,11 +13,14 @@ import android.graphics.Canvas; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.net.Uri; +import android.provider.DeviceConfig; import android.provider.MediaStore; +import android.text.TextUtils; import android.util.Log; import android.util.Pair; import androidx.annotation.DrawableRes; +import androidx.annotation.NonNull; import androidx.core.graphics.drawable.IconCompat; import com.android.settingslib.R; @@ -34,6 +37,7 @@ public class BluetoothUtils { public static final boolean D = true; // regular logging public static final int META_INT_ERROR = -1; + public static final String BT_ADVANCED_HEADER_ENABLED = "bt_advanced_header_enabled"; private static ErrorListener sErrorListener; @@ -178,14 +182,12 @@ public class BluetoothUtils { final Pair<Drawable, String> pair = BluetoothUtils.getBtClassDrawableWithDescription( context, cachedDevice); final BluetoothDevice bluetoothDevice = cachedDevice.getDevice(); - final boolean untetheredHeadset = getBooleanMetaData( - bluetoothDevice, BluetoothDevice.METADATA_IS_UNTETHERED_HEADSET); final int iconSize = context.getResources().getDimensionPixelSize( R.dimen.bt_nearby_icon_size); final Resources resources = context.getResources(); - // Deal with untethered headset - if (untetheredHeadset) { + // Deal with advanced device icon + if (isAdvancedDetailsHeader(bluetoothDevice)) { final Uri iconUri = getUriMetaData(bluetoothDevice, BluetoothDevice.METADATA_MAIN_ICON); if (iconUri != null) { @@ -217,6 +219,35 @@ public class BluetoothUtils { } /** + * Check if the Bluetooth device supports advanced metadata + * + * @param bluetoothDevice the BluetoothDevice to get metadata + * @return true if it supports advanced metadata, false otherwise. + */ + public static boolean isAdvancedDetailsHeader(@NonNull BluetoothDevice bluetoothDevice) { + if (!DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_SETTINGS_UI, BT_ADVANCED_HEADER_ENABLED, + true)) { + Log.d(TAG, "isAdvancedDetailsHeader: advancedEnabled is false"); + return false; + } + // The metadata is for Android R + if (getBooleanMetaData(bluetoothDevice, BluetoothDevice.METADATA_IS_UNTETHERED_HEADSET)) { + Log.d(TAG, "isAdvancedDetailsHeader: untetheredHeadset is true"); + return true; + } + // The metadata is for Android S + String deviceType = getStringMetaData(bluetoothDevice, + BluetoothDevice.METADATA_DEVICE_TYPE); + if (TextUtils.equals(deviceType, BluetoothDevice.DEVICE_TYPE_UNTETHERED_HEADSET) + || TextUtils.equals(deviceType, BluetoothDevice.DEVICE_TYPE_WATCH) + || TextUtils.equals(deviceType, BluetoothDevice.DEVICE_TYPE_DEFAULT)) { + Log.d(TAG, "isAdvancedDetailsHeader: deviceType is " + deviceType); + return true; + } + return false; + } + + /** * Create an Icon pointing to a drawable. */ public static IconCompat createIconWithDrawable(Drawable drawable) { diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/BluetoothUtilsTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/BluetoothUtilsTest.java index 3a95852c0ba9..2e855145e152 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/BluetoothUtilsTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/BluetoothUtilsTest.java @@ -150,4 +150,45 @@ public class BluetoothUtilsTest { assertThat(BluetoothUtils.getUriMetaData(mBluetoothDevice, BluetoothDevice.METADATA_MAIN_ICON)).isNull(); } + + @Test + public void isAdvancedDetailsHeader_untetheredHeadset_returnTrue() { + when(mBluetoothDevice.getMetadata( + BluetoothDevice.METADATA_IS_UNTETHERED_HEADSET)).thenReturn( + BOOL_METADATA.getBytes()); + + assertThat(BluetoothUtils.isAdvancedDetailsHeader(mBluetoothDevice)).isEqualTo(true); + } + + @Test + public void isAdvancedDetailsHeader_deviceTypeUntetheredHeadset_returnTrue() { + when(mBluetoothDevice.getMetadata( + BluetoothDevice.METADATA_DEVICE_TYPE)).thenReturn( + BluetoothDevice.DEVICE_TYPE_UNTETHERED_HEADSET.getBytes()); + + assertThat(BluetoothUtils.isAdvancedDetailsHeader(mBluetoothDevice)).isEqualTo(true); + } + + @Test + public void isAdvancedDetailsHeader_deviceTypeWatch_returnTrue() { + when(mBluetoothDevice.getMetadata( + BluetoothDevice.METADATA_DEVICE_TYPE)).thenReturn( + BluetoothDevice.DEVICE_TYPE_WATCH.getBytes()); + + assertThat(BluetoothUtils.isAdvancedDetailsHeader(mBluetoothDevice)).isEqualTo(true); + } + + @Test + public void isAdvancedDetailsHeader_deviceTypeDefault_returnTrue() { + when(mBluetoothDevice.getMetadata( + BluetoothDevice.METADATA_DEVICE_TYPE)).thenReturn( + BluetoothDevice.DEVICE_TYPE_DEFAULT.getBytes()); + + assertThat(BluetoothUtils.isAdvancedDetailsHeader(mBluetoothDevice)).isEqualTo(true); + } + + @Test + public void isAdvancedDetailsHeader_noMetadata_returnFalse() { + assertThat(BluetoothUtils.isAdvancedDetailsHeader(mBluetoothDevice)).isEqualTo(false); + } } diff --git a/packages/SettingsProvider/src/android/provider/settings/backup/GlobalSettings.java b/packages/SettingsProvider/src/android/provider/settings/backup/GlobalSettings.java index 987e82ed0b2f..77032ba8145b 100644 --- a/packages/SettingsProvider/src/android/provider/settings/backup/GlobalSettings.java +++ b/packages/SettingsProvider/src/android/provider/settings/backup/GlobalSettings.java @@ -72,6 +72,8 @@ public class GlobalSettings { Settings.Global.NOTIFICATION_BUBBLES, Settings.Global.CUSTOM_BUGREPORT_HANDLER_APP, Settings.Global.CUSTOM_BUGREPORT_HANDLER_USER, - Settings.Global.DEVELOPMENT_SETTINGS_ENABLED + Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, + Settings.Global.USER_DISABLED_HDR_FORMATS, + Settings.Global.ARE_USER_DISABLED_HDR_FORMATS_ALLOWED }; } diff --git a/packages/SettingsProvider/src/android/provider/settings/validators/DiscreteValueIntegerListValidator.java b/packages/SettingsProvider/src/android/provider/settings/validators/DiscreteValueIntegerListValidator.java new file mode 100644 index 000000000000..eb38ac581df4 --- /dev/null +++ b/packages/SettingsProvider/src/android/provider/settings/validators/DiscreteValueIntegerListValidator.java @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2020 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.provider.settings.validators; + +/** + * Validates the elements in a list with the array of allowed integer values. + * + * @hide + */ +class DiscreteValueIntegerListValidator extends ListValidator { + private int[] mAllowedValues; + + DiscreteValueIntegerListValidator(String listSplitRegex, int[] allowedValues) { + super(listSplitRegex); + mAllowedValues = allowedValues; + } + + @Override + protected boolean isEntryValid(String entry) { + return (entry != null); + } + + @Override + protected boolean isItemValid(String item) { + for (int allowedValue : mAllowedValues) { + try { + if (Integer.parseInt(item) == allowedValue) { + return true; + } + } catch (NumberFormatException e) { + return false; + } + } + return false; + } +} diff --git a/packages/SettingsProvider/src/android/provider/settings/validators/GlobalSettingsValidators.java b/packages/SettingsProvider/src/android/provider/settings/validators/GlobalSettingsValidators.java index ad6a5312f156..0790189cb85d 100644 --- a/packages/SettingsProvider/src/android/provider/settings/validators/GlobalSettingsValidators.java +++ b/packages/SettingsProvider/src/android/provider/settings/validators/GlobalSettingsValidators.java @@ -16,16 +16,16 @@ package android.provider.settings.validators; +import static android.media.AudioFormat.SURROUND_SOUND_ENCODING; import static android.provider.settings.validators.SettingsValidators.ANY_INTEGER_VALIDATOR; import static android.provider.settings.validators.SettingsValidators.ANY_STRING_VALIDATOR; import static android.provider.settings.validators.SettingsValidators.BOOLEAN_VALIDATOR; import static android.provider.settings.validators.SettingsValidators.PACKAGE_NAME_VALIDATOR; import static android.provider.settings.validators.SettingsValidators.PERCENTAGE_INTEGER_VALIDATOR; +import static android.view.Display.HdrCapabilities.HDR_TYPES; -import android.media.AudioFormat; import android.os.BatteryManager; import android.provider.Settings.Global; -import android.text.TextUtils; import android.util.ArrayMap; import java.util.Map; @@ -88,31 +88,17 @@ public class GlobalSettingsValidators { Global.ENABLE_AUTOMATIC_SYSTEM_SERVER_HEAP_DUMPS, new DiscreteValueValidator(new String[] {"0", "1"})); VALIDATORS.put( + Global.ARE_USER_DISABLED_HDR_FORMATS_ALLOWED, + new DiscreteValueValidator(new String[] {"0", "1"})); + VALIDATORS.put( + Global.USER_DISABLED_HDR_FORMATS, + new DiscreteValueIntegerListValidator(",", HDR_TYPES)); + VALIDATORS.put( Global.ENCODED_SURROUND_OUTPUT, new DiscreteValueValidator(new String[] {"0", "1", "2", "3"})); VALIDATORS.put( Global.ENCODED_SURROUND_OUTPUT_ENABLED_FORMATS, - value -> { - try { - String[] surroundFormats = TextUtils.split(value, ","); - for (String format : surroundFormats) { - int audioFormat = Integer.valueOf(format); - boolean isSurroundFormat = false; - for (int sf : AudioFormat.SURROUND_SOUND_ENCODING) { - if (sf == audioFormat) { - isSurroundFormat = true; - break; - } - } - if (!isSurroundFormat) { - return false; - } - } - return true; - } catch (NumberFormatException e) { - return false; - } - }); + new DiscreteValueIntegerListValidator(",", SURROUND_SOUND_ENCODING)); VALIDATORS.put( Global.LOW_POWER_MODE_STICKY_AUTO_DISABLE_LEVEL, new InclusiveIntegerRangeValidator(0, 100)); @@ -154,3 +140,4 @@ public class GlobalSettingsValidators { /* last= */Global.ONE_HANDED_KEYGUARD_SIDE_RIGHT)); } } + diff --git a/packages/SoundPicker/res/values-pa/strings.xml b/packages/SoundPicker/res/values-pa/strings.xml index 2653c6442ae7..eb630c900244 100644 --- a/packages/SoundPicker/res/values-pa/strings.xml +++ b/packages/SoundPicker/res/values-pa/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="ringtone_default" msgid="798836092118824500">"ਪੂਰਵ-ਨਿਰਧਾਰਤ ਰਿੰਗਟੋਨ"</string> - <string name="notification_sound_default" msgid="8133121186242636840">"ਪੂਰਵ-ਨਿਰਧਾਰਤ ਸੂਚਨਾ ਧੁਨੀ"</string> + <string name="notification_sound_default" msgid="8133121186242636840">"ਪੂਰਵ-ਨਿਰਧਾਰਿਤ ਸੂਚਨਾ ਧੁਨੀ"</string> <string name="alarm_sound_default" msgid="4787646764557462649">"ਪੂਰਵ-ਨਿਰਧਾਰਤ ਅਲਾਰਮ ਧੁਨੀ"</string> <string name="add_ringtone_text" msgid="6642389991738337529">"ਰਿੰਗਟੋਨ ਸ਼ਾਮਲ ਕਰੋ"</string> <string name="add_alarm_text" msgid="3545497316166999225">"ਅਲਾਰਮ ਸ਼ਾਮਲ ਕਰੋ"</string> diff --git a/packages/SystemUI/OWNERS b/packages/SystemUI/OWNERS index f884270eaba8..835471d5cb94 100644 --- a/packages/SystemUI/OWNERS +++ b/packages/SystemUI/OWNERS @@ -9,6 +9,7 @@ asc@google.com awickham@google.com beverlyt@google.com brockman@google.com +ccassidy@google.com cinek@google.com cwren@google.com dupin@google.com @@ -19,10 +20,10 @@ hwwang@google.com hyunyoungs@google.com jaggies@google.com jamesoleary@google.com +jdemeulenaere@google.com jeffdq@google.com jjaggi@google.com jonmiranda@google.com -joshmcgrath@google.com joshtrask@google.com juliacr@google.com juliatuttle@google.com @@ -37,7 +38,6 @@ mkephart@google.com mpietal@google.com mrcasey@google.com mrenouf@google.com -nbenbernou@google.com nesciosquid@google.com ogunwale@google.com peanutbutter@google.com @@ -45,6 +45,7 @@ pinyaoting@google.com pixel@google.com roosa@google.com santie@google.com +shanh@google.com snoeberger@google.com sreyasr@google.com steell@google.com @@ -59,6 +60,7 @@ twickham@google.com vadimt@google.com victortulias@google.com winsonc@google.com +yurilin@google.com xuqiu@google.com zakcohen@google.com diff --git a/packages/SystemUI/res-keyguard/values-iw/strings.xml b/packages/SystemUI/res-keyguard/values-iw/strings.xml index 8780dc5e3c01..56a71d4f543c 100644 --- a/packages/SystemUI/res-keyguard/values-iw/strings.xml +++ b/packages/SystemUI/res-keyguard/values-iw/strings.xml @@ -21,17 +21,17 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_name" msgid="514691256816366517">"מגן מקלדת"</string> - <string name="keyguard_password_enter_pin_code" msgid="8582296866585566671">"הזן את קוד הגישה"</string> + <string name="keyguard_password_enter_pin_code" msgid="8582296866585566671">"יש להזין את קוד האימות"</string> <string name="keyguard_password_enter_puk_code" msgid="3813154965969758868">"הזן את קוד ה-PUK של כרטיס ה-SIM ולאחר מכן הזן קוד גישה חדש"</string> <string name="keyguard_password_enter_puk_prompt" msgid="3529260761374385243">"קוד PUK של כרטיס SIM"</string> <string name="keyguard_password_enter_pin_prompt" msgid="2304037870481240781">"קוד גישה חדש לכרטיס ה-SIM"</string> <string name="keyguard_password_entry_touch_hint" msgid="6180028658339706333"><font size="17">"גע כדי להזין את הסיסמה"</font></string> <string name="keyguard_password_enter_password_code" msgid="7393393239623946777">"הזן סיסמה לביטול הנעילה"</string> <string name="keyguard_password_enter_pin_password_code" msgid="3692259677395250509">"הזן את קוד הגישה לביטול הנעילה"</string> - <string name="keyguard_enter_your_pin" msgid="5429932527814874032">"הזנת קוד גישה"</string> + <string name="keyguard_enter_your_pin" msgid="5429932527814874032">"צריך להזין קוד אימות"</string> <string name="keyguard_enter_your_pattern" msgid="351503370332324745">"יש להזין קו ביטול נעילה"</string> <string name="keyguard_enter_your_password" msgid="7225626204122735501">"יש להזין סיסמה"</string> - <string name="keyguard_password_wrong_pin_code" msgid="3514267777289393046">"קוד הגישה שגוי"</string> + <string name="keyguard_password_wrong_pin_code" msgid="3514267777289393046">"קוד האימות שגוי"</string> <string name="keyguard_sim_error_message_short" msgid="633630844240494070">"כרטיס לא חוקי."</string> <string name="keyguard_charged" msgid="5478247181205188995">"הסוללה טעונה"</string> <string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • בטעינה אלחוטית"</string> @@ -43,14 +43,14 @@ <string name="keyguard_instructions_when_pattern_disabled" msgid="8448804180089936954">"לחץ על \'תפריט\' כדי לבטל את הנעילה."</string> <string name="keyguard_network_locked_message" msgid="407096292844868608">"הרשת נעולה"</string> <string name="keyguard_missing_sim_message_short" msgid="704159478161444907">"אין כרטיס SIM"</string> - <string name="keyguard_missing_sim_instructions" msgid="1162120926141335918">"הכנס כרטיס SIM."</string> + <string name="keyguard_missing_sim_instructions" msgid="1162120926141335918">"יש להכניס כרטיס SIM."</string> <string name="keyguard_missing_sim_instructions_long" msgid="2712623293749378570">"כרטיס ה-SIM חסר או שלא ניתן לקרוא אותו. הכנס כרטיס SIM."</string> <string name="keyguard_permanent_disabled_sim_message_short" msgid="5842745213110966962">"לא ניתן להשתמש בכרטיס SIM זה."</string> <string name="keyguard_permanent_disabled_sim_instructions" msgid="2490584154727897806">"כרטיס ה-SIM שלך הושבת לצמיתות.\nפנה לספק השירות האלחוטי שלך לקבלת כרטיס SIM אחר."</string> <string name="keyguard_sim_locked_message" msgid="4343544458476911044">"כרטיס ה-SIM נעול."</string> <string name="keyguard_sim_puk_locked_message" msgid="6253830777745450550">"כרטיס ה-SIM נעול באמצעות PUK."</string> <string name="keyguard_sim_unlock_progress_dialog_message" msgid="2394023844117630429">"מבטל את הנעילה של כרטיס ה-SIM…"</string> - <string name="keyguard_accessibility_pin_area" msgid="7403009340414014734">"אזור לקוד הגישה"</string> + <string name="keyguard_accessibility_pin_area" msgid="7403009340414014734">"אזור של קוד האימות"</string> <string name="keyguard_accessibility_password" msgid="3524161948484801450">"סיסמת מכשיר"</string> <string name="keyguard_accessibility_sim_pin_area" msgid="6272116591533888062">"אזור לקוד הגישה של כרטיס ה-SIM"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="5537294043180237374">"אזור לקוד הגישה של כרטיס ה-SIM"</string> @@ -63,7 +63,7 @@ <string name="kg_forgot_pattern_button_text" msgid="3304688032024541260">"שכחתי את קו ביטול הנעילה"</string> <string name="kg_wrong_pattern" msgid="5907301342430102842">"קו ביטול נעילה שגוי"</string> <string name="kg_wrong_password" msgid="4143127991071670512">"סיסמה שגויה"</string> - <string name="kg_wrong_pin" msgid="4160978845968732624">"קוד הגישה שגוי"</string> + <string name="kg_wrong_pin" msgid="4160978845968732624">"קוד האימות שגוי"</string> <plurals name="kg_too_many_failed_attempts_countdown" formatted="false" msgid="991400408675793914"> <item quantity="two">אפשר יהיה לנסות שוב בעוד <xliff:g id="NUMBER">%d</xliff:g> שניות.</item> <item quantity="many">אפשר יהיה לנסות שוב בעוד <xliff:g id="NUMBER">%d</xliff:g> שניות.</item> @@ -72,28 +72,28 @@ </plurals> <string name="kg_pattern_instructions" msgid="5376036737065051736">"שרטט את קו ביטול הנעילה"</string> <string name="kg_sim_pin_instructions" msgid="1942424305184242951">"הזן את קוד הגישה של כרטיס ה-SIM."</string> - <string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"הזן את קוד הגישה של כרטיס ה-SIM של <xliff:g id="CARRIER">%1$s</xliff:g>."</string> + <string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"יש להזין את קוד האימות של כרטיס ה-SIM של <xliff:g id="CARRIER">%1$s</xliff:g>."</string> <string name="kg_sim_lock_esim_instructions" msgid="5577169988158738030">"<xliff:g id="PREVIOUS_MSG">%1$s</xliff:g> יש להשבית את כרטיס ה-eSIM כדי להשתמש במכשיר ללא שירות סלולרי."</string> - <string name="kg_pin_instructions" msgid="822353548385014361">"הזן קוד גישה"</string> - <string name="kg_password_instructions" msgid="324455062831719903">"הזן את הסיסמה"</string> + <string name="kg_pin_instructions" msgid="822353548385014361">"יש להזין קוד אימות"</string> + <string name="kg_password_instructions" msgid="324455062831719903">"צריך להזין את הסיסמה"</string> <string name="kg_puk_enter_puk_hint" msgid="3005288372875367017">"כרטיס ה-SIM מושבת כעת. הזן קוד PUK כדי להמשיך. פנה אל הספק לפרטים."</string> - <string name="kg_puk_enter_puk_hint_multi" msgid="4876780689904862943">"ה-SIM של \"<xliff:g id="CARRIER">%1$s</xliff:g>\" מושבת כעת. הזן קוד PUK כדי להמשיך. לפרטים, פנה אל הספק."</string> + <string name="kg_puk_enter_puk_hint_multi" msgid="4876780689904862943">"ה-SIM של \"<xliff:g id="CARRIER">%1$s</xliff:g>\" מושבת עכשיו. צריך להזין קוד PUK כדי להמשיך. לפרטים, יש לפנות אל הספק."</string> <string name="kg_puk_enter_pin_hint" msgid="6028432138916150399">"הזן את קוד הגישה הרצוי"</string> - <string name="kg_enter_confirm_pin_hint" msgid="4261064020391799132">"אשר את קוד הגישה הרצוי"</string> - <string name="kg_sim_unlock_progress_dialog_message" msgid="4251352015304070326">"מבטל את הנעילה של כרטיס ה-SIM…"</string> + <string name="kg_enter_confirm_pin_hint" msgid="4261064020391799132">"צריך לאשר את קוד האימות הרצוי"</string> + <string name="kg_sim_unlock_progress_dialog_message" msgid="4251352015304070326">"מתבצע ביטול נעילה של כרטיס ה-SIM…"</string> <string name="kg_invalid_sim_pin_hint" msgid="2762202646949552978">"הקלד קוד גישה שאורכו 4 עד 8 ספרות."</string> <string name="kg_invalid_sim_puk_hint" msgid="5319756880543857694">"קוד PUK צריך להיות בן 8 ספרות או יותר."</string> - <string name="kg_invalid_puk" msgid="1774337070084931186">"הזן את קוד ה-PUK הנכון. ניסיונות חוזרים ישביתו את כרטיס ה-SIM לצמיתות."</string> + <string name="kg_invalid_puk" msgid="1774337070084931186">"יש להזין את קוד ה-PUK הנכון. ניסיונות חוזרים ישביתו את כרטיס ה-SIM באופן סופי."</string> <string name="kg_login_too_many_attempts" msgid="4519957179182578690">"ניסית לשרטט את קו ביטול הנעילה יותר מדי פעמים"</string> - <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="544687656831558971">"הקלדת קוד גישה שגוי <xliff:g id="NUMBER_0">%1$d</xliff:g> פעמים. \n\nנסה שוב בעוד <xliff:g id="NUMBER_1">%2$d</xliff:g> שניות."</string> + <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="544687656831558971">"הקלדת קוד גישה שגוי <xliff:g id="NUMBER_0">%1$d</xliff:g> פעמים. \n\nיש לנסות שוב בעוד <xliff:g id="NUMBER_1">%2$d</xliff:g> שניות."</string> <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"הקלדת סיסמה שגויה <xliff:g id="NUMBER_0">%1$d</xliff:g> פעמים.\n\nנסה שוב בעוד <xliff:g id="NUMBER_1">%2$d</xliff:g> שניות."</string> <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"שרטטת קו ביטול נעילה שגוי <xliff:g id="NUMBER_0">%1$d</xliff:g> פעמים. \n\nנסה שוב בעוד <xliff:g id="NUMBER_1">%2$d</xliff:g> שניות."</string> <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"קוד הגישה של כרטיס ה-SIM שגוי. צור קשר עם הספק כדי לבטל את נעילת המכשיר."</string> <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026"> - <item quantity="two">קוד הגישה של כרטיס ה-SIM שגוי. נותרו לך עוד <xliff:g id="NUMBER_1">%d</xliff:g> ניסיונות.</item> - <item quantity="many">קוד הגישה של כרטיס ה-SIM שגוי. נותרו לך עוד <xliff:g id="NUMBER_1">%d</xliff:g> ניסיונות.</item> - <item quantity="other">קוד הגישה של כרטיס ה-SIM שגוי. נותרו לך עוד <xliff:g id="NUMBER_1">%d</xliff:g> ניסיונות.</item> - <item quantity="one">קוד הגישה של כרטיס ה-SIM שגוי. נותר לך עוד ניסיון <xliff:g id="NUMBER_0">%d</xliff:g> לפני שיהיה עליך ליצור קשר עם הספק כדי לבטל את נעילת המכשיר.</item> + <item quantity="two">קוד האימות של כרטיס ה-SIM שגוי. נותרו לך עוד <xliff:g id="NUMBER_1">%d</xliff:g> ניסיונות.</item> + <item quantity="many">קוד האימות של כרטיס ה-SIM שגוי. נותרו לך עוד <xliff:g id="NUMBER_1">%d</xliff:g> ניסיונות.</item> + <item quantity="other">קוד האימות של כרטיס ה-SIM שגוי. נותרו לך עוד <xliff:g id="NUMBER_1">%d</xliff:g> ניסיונות.</item> + <item quantity="one">קוד האימות של כרטיס ה-SIM שגוי. נותר לך עוד ניסיון <xliff:g id="NUMBER_0">%d</xliff:g> לפני שיהיה עליך ליצור קשר עם הספק כדי לבטל את נעילת המכשיר.</item> </plurals> <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"לא ניתן להשתמש בכרטיס ה-SIM. צור קשר עם הספק."</string> <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886"> @@ -103,27 +103,27 @@ <item quantity="one">קוד ה-PUK של כרטיס ה-SIM שגוי. נותר לך ניסיון <xliff:g id="NUMBER_0">%d</xliff:g> נוסף לפני שכרטיס ה-SIM יינעל לצמיתות.</item> </plurals> <string name="kg_password_pin_failed" msgid="5136259126330604009">"פעולת קוד הגישה של כרטיס ה-SIM נכשלה!"</string> - <string name="kg_password_puk_failed" msgid="6778867411556937118">"פעולת קוד ה-PUK של כרטיס ה-SIM נכשלה!"</string> + <string name="kg_password_puk_failed" msgid="6778867411556937118">"הניסיון לביטול הנעילה של כרטיס ה-SIM באמצעות קוד PUK נכשל!"</string> <string name="kg_pin_accepted" msgid="1625501841604389716">"הקוד התקבל!"</string> <string name="keyguard_carrier_default" msgid="6359808469637388586">"אין שירות."</string> <string name="accessibility_ime_switch_button" msgid="9082358310194861329">"החלפת שיטת קלט"</string> <string name="airplane_mode" msgid="2528005343938497866">"מצב טיסה"</string> <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_pin" msgid="1587671566498057656">"צריך להזין קוד אימות לאחר הפעלה מחדש של המכשיר"</string> <string name="kg_prompt_reason_restart_password" msgid="8061279087240952002">"יש להזין סיסמה לאחר הפעלה מחדש של המכשיר"</string> <string name="kg_prompt_reason_timeout_pattern" msgid="9170360502528959889">"יש להזין את קו ביטול הנעילה כדי להגביר את רמת האבטחה"</string> <string name="kg_prompt_reason_timeout_pin" msgid="5945186097160029201">"יש להזין קוד גישה כדי להגביר את רמת האבטחה"</string> <string name="kg_prompt_reason_timeout_password" msgid="2258263949430384278">"יש להזין סיסמה כדי להגביר את רמת האבטחה"</string> <string name="kg_prompt_reason_switch_profiles_pattern" msgid="1922016914701991230">"יש להזין את קו ביטול הנעילה בזמן מעבר בין פרופילים"</string> - <string name="kg_prompt_reason_switch_profiles_pin" msgid="6490434826361055400">"יש להזין את קוד הגישה בזמן מעבר בין פרופילים"</string> + <string name="kg_prompt_reason_switch_profiles_pin" msgid="6490434826361055400">"צריך להזין את קוד האימות כשמחליפים פרופיל"</string> <string name="kg_prompt_reason_switch_profiles_password" msgid="1680374696393804441">"יש להזין את הסיסמה בזמן מעבר בין פרופילים"</string> <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"מנהל המכשיר נעל את המכשיר"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"המכשיר ננעל באופן ידני"</string> <plurals name="kg_prompt_reason_time_pattern" formatted="false" msgid="1337428979661197957"> - <item quantity="two">נעילת המכשיר לא בוטלה במשך <xliff:g id="NUMBER_1">%d</xliff:g> שעות. הזן את קו ביטול הנעילה.</item> - <item quantity="many">נעילת המכשיר לא בוטלה במשך <xliff:g id="NUMBER_1">%d</xliff:g> שעות. הזן את קו ביטול הנעילה.</item> - <item quantity="other">נעילת המכשיר לא בוטלה במשך <xliff:g id="NUMBER_1">%d</xliff:g> שעות. הזן את קו ביטול הנעילה.</item> - <item quantity="one">נעילת המכשיר לא בוטלה במשך <xliff:g id="NUMBER_0">%d</xliff:g> שעה. הזן את קו ביטול הנעילה.</item> + <item quantity="two">נעילת המכשיר לא בוטלה במשך <xliff:g id="NUMBER_1">%d</xliff:g> שעות. יש להזין את קו ביטול הנעילה.</item> + <item quantity="many">נעילת המכשיר לא בוטלה במשך <xliff:g id="NUMBER_1">%d</xliff:g> שעות. יש להזין את קו ביטול הנעילה.</item> + <item quantity="other">נעילת המכשיר לא בוטלה במשך <xliff:g id="NUMBER_1">%d</xliff:g> שעות. יש להזין את קו ביטול הנעילה.</item> + <item quantity="one">נעילת המכשיר לא בוטלה במשך שעה אחת (<xliff:g id="NUMBER_0">%d</xliff:g>). יש להזין את קו ביטול הנעילה.</item> </plurals> <plurals name="kg_prompt_reason_time_pin" formatted="false" msgid="6444519502336330270"> <item quantity="two">נעילת המכשיר לא בוטלה במשך <xliff:g id="NUMBER_1">%d</xliff:g> שעות. הזן את קוד הגישה.</item> @@ -132,18 +132,18 @@ <item quantity="one">נעילת המכשיר לא בוטלה במשך <xliff:g id="NUMBER_0">%d</xliff:g> שעה. הזן את קוד הגישה.</item> </plurals> <plurals name="kg_prompt_reason_time_password" formatted="false" msgid="5343961527665116914"> - <item quantity="two">נעילת המכשיר לא בוטלה במשך <xliff:g id="NUMBER_1">%d</xliff:g> שעות. הזן את הסיסמה.</item> - <item quantity="many">נעילת המכשיר לא בוטלה במשך <xliff:g id="NUMBER_1">%d</xliff:g> שעות. הזן את הסיסמה.</item> - <item quantity="other">נעילת המכשיר לא בוטלה במשך <xliff:g id="NUMBER_1">%d</xliff:g> שעות. הזן את הסיסמה.</item> - <item quantity="one">נעילת המכשיר לא בוטלה במשך <xliff:g id="NUMBER_0">%d</xliff:g> שעה. הזן את הסיסמה.</item> + <item quantity="two">נעילת המכשיר לא בוטלה במשך <xliff:g id="NUMBER_1">%d</xliff:g> שעות. יש להזין את הסיסמה.</item> + <item quantity="many">נעילת המכשיר לא בוטלה במשך <xliff:g id="NUMBER_1">%d</xliff:g> שעות. יש להזין את הסיסמה.</item> + <item quantity="other">נעילת המכשיר לא בוטלה במשך <xliff:g id="NUMBER_1">%d</xliff:g> שעות. יש להזין את הסיסמה.</item> + <item quantity="one">נעילת המכשיר לא בוטלה במשך <xliff:g id="NUMBER_0">%d</xliff:g> שעה. יש להזין את הסיסמה.</item> </plurals> <string name="kg_fingerprint_not_recognized" msgid="5982606907039479545">"לא זוהתה"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"לא זוהתה"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> - <item quantity="two">יש להזין קוד גישה לכרטיס SIM. נותרו לך <xliff:g id="NUMBER_1">%d</xliff:g> ניסונות נוספים.</item> - <item quantity="many">יש להזין קוד גישה לכרטיס SIM. נותרו לך <xliff:g id="NUMBER_1">%d</xliff:g> ניסונות נוספים.</item> - <item quantity="other">יש להזין קוד גישה לכרטיס SIM. נותרו לך <xliff:g id="NUMBER_1">%d</xliff:g> ניסונות נוספים.</item> - <item quantity="one">יש להזין קוד גישה לכרטיס SIM. נותר לך <xliff:g id="NUMBER_0">%d</xliff:g> ניסיון נוסף לפני שיהיה צורך ליצור קשר עם הספק כדי לבטל את נעילת המכשיר.</item> + <item quantity="two">יש להזין קוד אימות של כרטיס SIM. נותרו לך <xliff:g id="NUMBER_1">%d</xliff:g> ניסיונות נוספים.</item> + <item quantity="many">יש להזין קוד אימות של כרטיס SIM. נותרו לך <xliff:g id="NUMBER_1">%d</xliff:g> ניסיונות נוספים.</item> + <item quantity="other">יש להזין קוד אימות של כרטיס SIM. נותרו לך <xliff:g id="NUMBER_1">%d</xliff:g> ניסיונות נוספים.</item> + <item quantity="one">יש להזין קוד אימות של כרטיס SIM. נותר לך ניסיון נוסף (<xliff:g id="NUMBER_0">%d</xliff:g>) לפני שיהיה צורך ליצור קשר עם הספק כדי לבטל את נעילת המכשיר.</item> </plurals> <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935"> <item quantity="two">כרטיס ה-SIM מושבת כעת. יש להזין קוד PUK כדי להמשיך. נותרו לך <xliff:g id="_NUMBER_1">%d</xliff:g> ניסיונות נוספים לפני שכרטיס ה-SIM ינעל לצמיתות. למידע נוסף, ניתן לפנות לספק שלך.</item> diff --git a/packages/SystemUI/res-keyguard/values-pa/strings.xml b/packages/SystemUI/res-keyguard/values-pa/strings.xml index 04419e039b58..47b2881e11f6 100644 --- a/packages/SystemUI/res-keyguard/values-pa/strings.xml +++ b/packages/SystemUI/res-keyguard/values-pa/strings.xml @@ -135,7 +135,7 @@ <item quantity="one">ਸਿਮ ਹੁਣ ਬੰਦ ਹੋ ਗਿਆ ਹੈ। ਜਾਰੀ ਰੱਖਣ ਲਈ PUK ਕੋਡ ਦਾਖਲ ਕਰੋ। ਸਿਮ ਦੇ ਪੱਕੇ ਤੌਰ \'ਤੇ ਬੇਕਾਰ ਹੋ ਜਾਣ ਤੋਂ ਪਹਿਲਾਂ ਤੁਹਾਡੇ ਕੋਲ <xliff:g id="_NUMBER_1">%d</xliff:g> ਕੋਸ਼ਿਸ਼ ਬਾਕੀ ਹੈ। ਵੇਰਵਿਆਂ ਲਈ ਕੈਰੀਅਰ ਨੂੰ ਸੰਪਰਕ ਕਰੋ।</item> <item quantity="other">ਸਿਮ ਹੁਣ ਬੰਦ ਹੋ ਗਿਆ ਹੈ। ਜਾਰੀ ਰੱਖਣ ਲਈ PUK ਕੋਡ ਦਾਖਲ ਕਰੋ। ਸਿਮ ਦੇ ਪੱਕੇ ਤੌਰ \'ਤੇ ਬੇਕਾਰ ਹੋ ਜਾਣ ਤੋਂ ਪਹਿਲਾਂ ਤੁਹਾਡੇ ਕੋਲ <xliff:g id="_NUMBER_1">%d</xliff:g> ਕੋਸ਼ਿਸ਼ਾਂ ਬਾਕੀ ਹਨ। ਵੇਰਵਿਆਂ ਲਈ ਕੈਰੀਅਰ ਨੂੰ ਸੰਪਰਕ ਕਰੋ।</item> </plurals> - <string name="clock_title_default" msgid="6342735240617459864">"ਪੂਰਵ-ਨਿਰਧਾਰਤ"</string> + <string name="clock_title_default" msgid="6342735240617459864">"ਪੂਰਵ-ਨਿਰਧਾਰਿਤ"</string> <string name="clock_title_bubble" msgid="2204559396790593213">"ਬੁਲਬੁਲਾ"</string> <string name="clock_title_analog" msgid="8409262532900918273">"ਐਨਾਲੌਗ"</string> </resources> diff --git a/packages/SystemUI/res-product/values-iw/strings.xml b/packages/SystemUI/res-product/values-iw/strings.xml index 4ba8657a77e3..3fc8013f7888 100644 --- a/packages/SystemUI/res-product/values-iw/strings.xml +++ b/packages/SystemUI/res-product/values-iw/strings.xml @@ -31,15 +31,15 @@ <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="8710104080409538587">"ניסית לבטל את נעילת הטאבלט <xliff:g id="NUMBER">%d</xliff:g> פעמים. הטאבלט יאופס וכל הנתונים שלו יימחקו."</string> <string name="kg_failed_attempts_now_wiping" product="default" msgid="6381835450014881813">"ניסית לבטל את נעילת הטלפון <xliff:g id="NUMBER">%d</xliff:g> פעמים. הטלפון יאופס וכל הנתונים שבו יימחקו."</string> <string name="kg_failed_attempts_almost_at_erase_user" product="tablet" msgid="7325071812832605911">"ניסית לבטל את נעילת הטאבלט <xliff:g id="NUMBER_0">%1$d</xliff:g> פעמים. לאחר <xliff:g id="NUMBER_1">%2$d</xliff:g> ניסיונות כושלים נוספים, משתמש זה יוסר וכל נתוני המשתמש יימחקו."</string> - <string name="kg_failed_attempts_almost_at_erase_user" product="default" msgid="8110939900089863103">"ניסית לבטל את נעילת הטלפון <xliff:g id="NUMBER_0">%1$d</xliff:g> פעמים. לאחר <xliff:g id="NUMBER_1">%2$d</xliff:g> ניסיונות כושלים נוספים, משתמש זה יוסר וכל נתוני המשתמש יימחקו."</string> + <string name="kg_failed_attempts_almost_at_erase_user" product="default" msgid="8110939900089863103">"ניסית לבטל את נעילת הטלפון <xliff:g id="NUMBER_0">%1$d</xliff:g> פעמים. לאחר <xliff:g id="NUMBER_1">%2$d</xliff:g> ניסיונות כושלים נוספים, המשתמש הזה יוסר וכל נתוני המשתמש יימחקו."</string> <string name="kg_failed_attempts_now_erasing_user" product="tablet" msgid="8509811676952707883">"ניסית לבטל את נעילת הטאבלט <xliff:g id="NUMBER">%d</xliff:g> פעמים באופן שגוי. משתמש זה יוסר וכל נתוני המשתמש יימחקו."</string> - <string name="kg_failed_attempts_now_erasing_user" product="default" msgid="3051962486994265014">"ניסית לבטל את נעילת הטלפון <xliff:g id="NUMBER">%d</xliff:g> פעמים. משתמש זה יוסר וכל נתוני המשתמש יימחקו."</string> + <string name="kg_failed_attempts_now_erasing_user" product="default" msgid="3051962486994265014">"ניסית לבטל את נעילת הטלפון <xliff:g id="NUMBER">%d</xliff:g> פעמים. המשתמש הזה יוסר וכל נתוני המשתמש יימחקו."</string> <string name="kg_failed_attempts_almost_at_erase_profile" product="tablet" msgid="1049523640263353830">"ניסית לבטל את נעילת הטאבלט <xliff:g id="NUMBER_0">%1$d</xliff:g> פעמים. לאחר <xliff:g id="NUMBER_1">%2$d</xliff:g> ניסיונות כושלים נוספים, פרופיל העבודה יוסר וכל נתוני הפרופיל יימחקו."</string> <string name="kg_failed_attempts_almost_at_erase_profile" product="default" msgid="3280816298678433681">"ניסית לבטל את נעילת הטלפון <xliff:g id="NUMBER_0">%1$d</xliff:g> פעמים. לאחר <xliff:g id="NUMBER_1">%2$d</xliff:g> ניסיונות כושלים נוספים, פרופיל העבודה יוסר וכל נתוני הפרופיל יימחקו."</string> <string name="kg_failed_attempts_now_erasing_profile" product="tablet" msgid="4417100487251371559">"ניסית לבטל את נעילת הטאבלט <xliff:g id="NUMBER">%d</xliff:g> פעמים. פרופיל העבודה יוסר וכל נתוני הפרופיל יימחקו."</string> <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"ניסית לבטל את נעילת הטלפון <xliff:g id="NUMBER">%d</xliff:g> פעמים. פרופיל העבודה יוסר וכל נתוני הפרופיל יימחקו."</string> <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"שרטטת קו ביטול נעילה שגוי <xliff:g id="NUMBER_0">%1$d</xliff:g> פעמים. לאחר <xliff:g id="NUMBER_1">%2$d</xliff:g> ניסיונות כושלים נוספים, ,תישלח אליך בקשה לבטל את נעילת הטאבלט באמצעות חשבון אימייל.\n\n יש לנסות שוב בעוד <xliff:g id="NUMBER_2">%3$d</xliff:g> שניות."</string> - <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"שרטטת קו ביטול נעילה שגוי <xliff:g id="NUMBER_0">%1$d</xliff:g> פעמים. לאחר <xliff:g id="NUMBER_1">%2$d</xliff:g> ניסיונות כושלים נוספים, תשילח אליך בקשה לבטל את נעילת הטלפון באמצעות חשבון אימייל.\n\n יש לנסות שוב בעוד <xliff:g id="NUMBER_2">%3$d</xliff:g> שניות."</string> + <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"שרטטת קו ביטול נעילה שגוי <xliff:g id="NUMBER_0">%1$d</xliff:g> פעמים. לאחר <xliff:g id="NUMBER_1">%2$d</xliff:g> ניסיונות כושלים נוספים, תישלח אליך בקשה לבטל את נעילת הטלפון באמצעות חשבון אימייל.\n\n יש לנסות שוב בעוד <xliff:g id="NUMBER_2">%3$d</xliff:g> שניות."</string> <string name="global_action_lock_message" product="default" msgid="7092460751050168771">"לאפשרויות נוספות, יש לבטל את נעילת הטלפון"</string> <string name="global_action_lock_message" product="tablet" msgid="1024230056230539493">"לאפשרויות נוספות, יש לבטל את נעילת הטאבלט"</string> <string name="global_action_lock_message" product="device" msgid="3165224897120346096">"לאפשרויות נוספות, יש לבטל את נעילת המכשיר"</string> diff --git a/packages/SystemUI/res/drawable/privacy_chip_bg.xml b/packages/SystemUI/res/drawable/privacy_chip_bg.xml index 109442d7ed79..9f41dbeae765 100644 --- a/packages/SystemUI/res/drawable/privacy_chip_bg.xml +++ b/packages/SystemUI/res/drawable/privacy_chip_bg.xml @@ -16,6 +16,6 @@ --> <shape xmlns:android="http://schemas.android.com/apk/res/android"> - <solid android:color="#FFFFFF" /> + <solid android:color="@color/privacy_circle" /> <corners android:radius="@dimen/ongoing_appops_chip_bg_corner_radius" /> </shape>
\ No newline at end of file diff --git a/packages/SystemUI/res/drawable/privacy_item_circle_camera.xml b/packages/SystemUI/res/drawable/privacy_item_circle_camera.xml index 5cb6f4626b36..54a66e26169c 100644 --- a/packages/SystemUI/res/drawable/privacy_item_circle_camera.xml +++ b/packages/SystemUI/res/drawable/privacy_item_circle_camera.xml @@ -24,7 +24,7 @@ android:height="@dimen/ongoing_appops_dialog_circle_size" android:width="@dimen/ongoing_appops_dialog_circle_size" /> - <solid android:color="@color/privacy_circle_camera" /> + <solid android:color="@color/privacy_circle" /> </shape> </item> <item android:id="@id/icon" diff --git a/packages/SystemUI/res/drawable/privacy_item_circle_location.xml b/packages/SystemUI/res/drawable/privacy_item_circle_location.xml index bff9b4b48b86..65f4396ff32a 100644 --- a/packages/SystemUI/res/drawable/privacy_item_circle_location.xml +++ b/packages/SystemUI/res/drawable/privacy_item_circle_location.xml @@ -24,7 +24,7 @@ android:height="@dimen/ongoing_appops_dialog_circle_size" android:width="@dimen/ongoing_appops_dialog_circle_size" /> - <solid android:color="@color/privacy_circle_microphone_location" /> + <solid android:color="@color/privacy_circle" /> </shape> </item> <item android:id="@id/icon" diff --git a/packages/SystemUI/res/drawable/privacy_item_circle_microphone.xml b/packages/SystemUI/res/drawable/privacy_item_circle_microphone.xml index 28466c8a29b3..1565d2d5eeae 100644 --- a/packages/SystemUI/res/drawable/privacy_item_circle_microphone.xml +++ b/packages/SystemUI/res/drawable/privacy_item_circle_microphone.xml @@ -24,7 +24,7 @@ android:height="@dimen/ongoing_appops_dialog_circle_size" android:width="@dimen/ongoing_appops_dialog_circle_size" /> - <solid android:color="@color/privacy_circle_microphone_location" /> + <solid android:color="@color/privacy_circle" /> </shape> </item> <item android:id="@id/icon" diff --git a/packages/SystemUI/res/values-af/strings.xml b/packages/SystemUI/res/values-af/strings.xml index 06e6f2975a19..62c37a268e90 100644 --- a/packages/SystemUI/res/values-af/strings.xml +++ b/packages/SystemUI/res/values-af/strings.xml @@ -412,7 +412,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"Tot sonsopkoms"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"Aan om <xliff:g id="TIME">%s</xliff:g>"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"Tot <xliff:g id="TIME">%s</xliff:g>"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"Verminder helderheid"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"NFC is gedeaktiveer"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"NFC is geaktiveer"</string> diff --git a/packages/SystemUI/res/values-am/strings.xml b/packages/SystemUI/res/values-am/strings.xml index d364370e2c19..8f67f1b766c1 100644 --- a/packages/SystemUI/res/values-am/strings.xml +++ b/packages/SystemUI/res/values-am/strings.xml @@ -412,7 +412,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"ጸሐይ እስክትወጣ ድረስ"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"<xliff:g id="TIME">%s</xliff:g> ላይ ይበራል"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"እስከ <xliff:g id="TIME">%s</xliff:g> ድረስ"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"ብሩህነትን ይቀንሱ"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"ኤንኤፍሲ"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"ኤንኤፍሲ ተሰናክሏል"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"ኤንኤፍሲ ነቅቷል"</string> @@ -652,10 +651,8 @@ <string name="show_demo_mode" msgid="3677956462273059726">"ማሳያ ሁነታን አሳይ"</string> <string name="status_bar_ethernet" msgid="5690979758988647484">"ኤተርኔት"</string> <string name="status_bar_alarm" msgid="87160847643623352">"ማንቂያ"</string> - <!-- no translation found for wallet_title (5369767670735827105) --> - <skip /> - <!-- no translation found for wallet_secondary_label (2017028770884957543) --> - <skip /> + <string name="wallet_title" msgid="5369767670735827105">"Wallet"</string> + <string name="wallet_secondary_label" msgid="2017028770884957543">"ዝግጁ"</string> <string name="status_bar_work" msgid="5238641949837091056">"የስራ መገለጫ"</string> <string name="status_bar_airplane" msgid="4848702508684541009">"የአውሮፕላን ሁነታ"</string> <string name="add_tile" msgid="6239678623873086686">"ሰቅ ያክሉ"</string> diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml index 4e8ba9a1b7eb..f778c700826d 100644 --- a/packages/SystemUI/res/values-ar/strings.xml +++ b/packages/SystemUI/res/values-ar/strings.xml @@ -420,7 +420,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"حتى شروق الشمس"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"تفعيل الوضع في <xliff:g id="TIME">%s</xliff:g>"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"حتى <xliff:g id="TIME">%s</xliff:g>"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"تقليل السطوع"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"تم إيقاف الاتصال القريب المدى"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"تم تفعيل الاتصال القريب المدى"</string> @@ -664,10 +663,8 @@ <string name="show_demo_mode" msgid="3677956462273059726">"عرض الوضع التجريبي"</string> <string name="status_bar_ethernet" msgid="5690979758988647484">"إيثرنت"</string> <string name="status_bar_alarm" msgid="87160847643623352">"المنبّه"</string> - <!-- no translation found for wallet_title (5369767670735827105) --> - <skip /> - <!-- no translation found for wallet_secondary_label (2017028770884957543) --> - <skip /> + <string name="wallet_title" msgid="5369767670735827105">"المحفظة"</string> + <string name="wallet_secondary_label" msgid="2017028770884957543">"جاهزة"</string> <string name="status_bar_work" msgid="5238641949837091056">"الملف الشخصي للعمل"</string> <string name="status_bar_airplane" msgid="4848702508684541009">"وضع الطيران"</string> <string name="add_tile" msgid="6239678623873086686">"إضافة فئة"</string> diff --git a/packages/SystemUI/res/values-as/strings.xml b/packages/SystemUI/res/values-as/strings.xml index e7d838cb57ec..2d7b4ac8118c 100644 --- a/packages/SystemUI/res/values-as/strings.xml +++ b/packages/SystemUI/res/values-as/strings.xml @@ -412,7 +412,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"সূৰ্যোদয়লৈকে"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"<xliff:g id="TIME">%s</xliff:g>ত অন কৰক"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"<xliff:g id="TIME">%s</xliff:g> পৰ্যন্ত"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"উজ্জ্বলতা কমাওক"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"NFC নিষ্ক্ৰিয় হৈ আছে"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"NFC সক্ষম হৈ আছে"</string> @@ -652,10 +651,8 @@ <string name="show_demo_mode" msgid="3677956462273059726">"ডেম\' ম\'ড দেখুৱাওক"</string> <string name="status_bar_ethernet" msgid="5690979758988647484">"ইথাৰনেট"</string> <string name="status_bar_alarm" msgid="87160847643623352">"এলাৰ্ম"</string> - <!-- no translation found for wallet_title (5369767670735827105) --> - <skip /> - <!-- no translation found for wallet_secondary_label (2017028770884957543) --> - <skip /> + <string name="wallet_title" msgid="5369767670735827105">"ৱালেট"</string> + <string name="wallet_secondary_label" msgid="2017028770884957543">"সাজু"</string> <string name="status_bar_work" msgid="5238641949837091056">"কৰ্মস্থানৰ প্ৰ\'ফাইল"</string> <string name="status_bar_airplane" msgid="4848702508684541009">"এয়াৰপ্লেইন ম\'ড"</string> <string name="add_tile" msgid="6239678623873086686">"টাইল যোগ দিয়ক"</string> diff --git a/packages/SystemUI/res/values-az/strings.xml b/packages/SystemUI/res/values-az/strings.xml index 99b7a60e5388..939d805ec3e1 100644 --- a/packages/SystemUI/res/values-az/strings.xml +++ b/packages/SystemUI/res/values-az/strings.xml @@ -412,7 +412,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"Şəfəq vaxtına qədər"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"Bu vaxt aktiv olur: <xliff:g id="TIME">%s</xliff:g>"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"Bu vaxtadək: <xliff:g id="TIME">%s</xliff:g>"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"Parlaqlığı azaldın"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"NFC deaktiv edilib"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"NFC aktiv edilib"</string> @@ -652,10 +651,8 @@ <string name="show_demo_mode" msgid="3677956462273059726">"Demo rejimini göstərin"</string> <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Zəngli saat"</string> - <!-- no translation found for wallet_title (5369767670735827105) --> - <skip /> - <!-- no translation found for wallet_secondary_label (2017028770884957543) --> - <skip /> + <string name="wallet_title" msgid="5369767670735827105">"Pulqabı"</string> + <string name="wallet_secondary_label" msgid="2017028770884957543">"Hazır"</string> <string name="status_bar_work" msgid="5238641949837091056">"İş profili"</string> <string name="status_bar_airplane" msgid="4848702508684541009">"Təyyarə rejimi"</string> <string name="add_tile" msgid="6239678623873086686">"Xana əlavə edin"</string> diff --git a/packages/SystemUI/res/values-b+sr+Latn/strings.xml b/packages/SystemUI/res/values-b+sr+Latn/strings.xml index a7c14c9fe2c9..213fb98eaba1 100644 --- a/packages/SystemUI/res/values-b+sr+Latn/strings.xml +++ b/packages/SystemUI/res/values-b+sr+Latn/strings.xml @@ -414,7 +414,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"Do izlaska sunca"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"Uključuje se u <xliff:g id="TIME">%s</xliff:g>"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"Do <xliff:g id="TIME">%s</xliff:g>"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"Smanjite osvetljenost"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"NFC je onemogućen"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"NFC je omogućen"</string> diff --git a/packages/SystemUI/res/values-be/strings.xml b/packages/SystemUI/res/values-be/strings.xml index 4d4993507728..8e7b9ae83bce 100644 --- a/packages/SystemUI/res/values-be/strings.xml +++ b/packages/SystemUI/res/values-be/strings.xml @@ -416,7 +416,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"Да ўсходу сонца"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"Уключана ў <xliff:g id="TIME">%s</xliff:g>"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"Да <xliff:g id="TIME">%s</xliff:g>"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"Паменшыць яркасць"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"NFC адключаны"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"NFC уключаны"</string> @@ -658,10 +657,8 @@ <string name="show_demo_mode" msgid="3677956462273059726">"Паказваць дэманстрацыйны рэжым"</string> <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Будзільнік"</string> - <!-- no translation found for wallet_title (5369767670735827105) --> - <skip /> - <!-- no translation found for wallet_secondary_label (2017028770884957543) --> - <skip /> + <string name="wallet_title" msgid="5369767670735827105">"Кашалёк"</string> + <string name="wallet_secondary_label" msgid="2017028770884957543">"Гатова"</string> <string name="status_bar_work" msgid="5238641949837091056">"Працоўны профіль"</string> <string name="status_bar_airplane" msgid="4848702508684541009">"Рэжым палёту"</string> <string name="add_tile" msgid="6239678623873086686">"Дадаць плітку"</string> diff --git a/packages/SystemUI/res/values-bg/strings.xml b/packages/SystemUI/res/values-bg/strings.xml index 25c757a8393c..1ca2595a36da 100644 --- a/packages/SystemUI/res/values-bg/strings.xml +++ b/packages/SystemUI/res/values-bg/strings.xml @@ -412,7 +412,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"До изгрев"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"Ще се включи в <xliff:g id="TIME">%s</xliff:g>"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"До <xliff:g id="TIME">%s</xliff:g>"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"Намаляване на яркостта"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"КБП е деактивирана"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"КБП е активирана"</string> @@ -652,10 +651,8 @@ <string name="show_demo_mode" msgid="3677956462273059726">"Показване на демонстрационния режим"</string> <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Будилник"</string> - <!-- no translation found for wallet_title (5369767670735827105) --> - <skip /> - <!-- no translation found for wallet_secondary_label (2017028770884957543) --> - <skip /> + <string name="wallet_title" msgid="5369767670735827105">"Портфейл"</string> + <string name="wallet_secondary_label" msgid="2017028770884957543">"Готово"</string> <string name="status_bar_work" msgid="5238641949837091056">"Потребителски профил в Work"</string> <string name="status_bar_airplane" msgid="4848702508684541009">"Самолетен режим"</string> <string name="add_tile" msgid="6239678623873086686">"Добавяне на плочка"</string> diff --git a/packages/SystemUI/res/values-bn/strings.xml b/packages/SystemUI/res/values-bn/strings.xml index c67d641efe51..2bf9f2994788 100644 --- a/packages/SystemUI/res/values-bn/strings.xml +++ b/packages/SystemUI/res/values-bn/strings.xml @@ -412,7 +412,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"সূর্যোদয় পর্যন্ত"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"<xliff:g id="TIME">%s</xliff:g>-এ চালু হবে"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"<xliff:g id="TIME">%s</xliff:g> পর্যন্ত"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"উজ্জ্বলতা কমান"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"NFC অক্ষম করা আছে"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"NFC সক্ষম করা আছে"</string> @@ -652,10 +651,8 @@ <string name="show_demo_mode" msgid="3677956462273059726">"ডেমো মোড দেখান"</string> <string name="status_bar_ethernet" msgid="5690979758988647484">"ইথারনেট"</string> <string name="status_bar_alarm" msgid="87160847643623352">"অ্যালার্ম"</string> - <!-- no translation found for wallet_title (5369767670735827105) --> - <skip /> - <!-- no translation found for wallet_secondary_label (2017028770884957543) --> - <skip /> + <string name="wallet_title" msgid="5369767670735827105">"Wallet"</string> + <string name="wallet_secondary_label" msgid="2017028770884957543">"তৈরি"</string> <string name="status_bar_work" msgid="5238641949837091056">"কাজের প্রোফাইল"</string> <string name="status_bar_airplane" msgid="4848702508684541009">"বিমান মোড"</string> <string name="add_tile" msgid="6239678623873086686">"টাইল যোগ করুন"</string> diff --git a/packages/SystemUI/res/values-bs/strings.xml b/packages/SystemUI/res/values-bs/strings.xml index 6936f57bdaf5..67e58dd05e92 100644 --- a/packages/SystemUI/res/values-bs/strings.xml +++ b/packages/SystemUI/res/values-bs/strings.xml @@ -414,7 +414,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"Do svitanja"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"Uključuje se u <xliff:g id="TIME">%s</xliff:g>"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"Do <xliff:g id="TIME">%s</xliff:g>"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"Smanjenje osvjetljenja"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"NFC je onemogućen"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"NFC je omogućen"</string> diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml index 8e090ec962b6..6bdf4de8dde8 100644 --- a/packages/SystemUI/res/values-ca/strings.xml +++ b/packages/SystemUI/res/values-ca/strings.xml @@ -412,7 +412,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"Fins a l\'alba"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"Activat a les <xliff:g id="TIME">%s</xliff:g>"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"Fins a les <xliff:g id="TIME">%s</xliff:g>"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"Reducció de la brillantor"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"L\'NFC està desactivada"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"L\'NFC està activada"</string> @@ -652,10 +651,8 @@ <string name="show_demo_mode" msgid="3677956462273059726">"Mostra el mode de demostració"</string> <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Alarma"</string> - <!-- no translation found for wallet_title (5369767670735827105) --> - <skip /> - <!-- no translation found for wallet_secondary_label (2017028770884957543) --> - <skip /> + <string name="wallet_title" msgid="5369767670735827105">"Wallet"</string> + <string name="wallet_secondary_label" msgid="2017028770884957543">"A punt"</string> <string name="status_bar_work" msgid="5238641949837091056">"Perfil de treball"</string> <string name="status_bar_airplane" msgid="4848702508684541009">"Mode d\'avió"</string> <string name="add_tile" msgid="6239678623873086686">"Afegeix un mosaic"</string> @@ -1094,8 +1091,8 @@ <string name="timestamp" msgid="6577851592534538533">"Fa <xliff:g id="DURATION">%1$s</xliff:g>"</string> <string name="less_than_timestamp" msgid="6598972791137724517">"Fa menys de: <xliff:g id="DURATION">%1$s</xliff:g>"</string> <string name="over_timestamp" msgid="4765793502859358634">"Fa més de: <xliff:g id="DURATION">%1$s</xliff:g>"</string> - <string name="birthday_status" msgid="2596961629465396761">"Natalici"</string> - <string name="upcoming_birthday_status" msgid="2005452239256870351">"Natalici aviat"</string> + <string name="birthday_status" msgid="2596961629465396761">"Aniversari"</string> + <string name="upcoming_birthday_status" msgid="2005452239256870351">"Aniversari aviat"</string> <string name="anniversary_status" msgid="1790034157507590838">"Aniversari"</string> <string name="location_status" msgid="1294990572202541812">"Compartint la ubicació"</string> <string name="new_story_status" msgid="9012195158584846525">"Història nova"</string> diff --git a/packages/SystemUI/res/values-cs/strings.xml b/packages/SystemUI/res/values-cs/strings.xml index 603ccfa7a63b..67901a75844d 100644 --- a/packages/SystemUI/res/values-cs/strings.xml +++ b/packages/SystemUI/res/values-cs/strings.xml @@ -416,7 +416,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"Do svítání"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"Zapnout v <xliff:g id="TIME">%s</xliff:g>"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"Do <xliff:g id="TIME">%s</xliff:g>"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"Snížit jas"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"NFC je vypnuto"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"NFC je zapnuto"</string> @@ -658,10 +657,8 @@ <string name="show_demo_mode" msgid="3677956462273059726">"Zobrazit ukázkový režim"</string> <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Budík"</string> - <!-- no translation found for wallet_title (5369767670735827105) --> - <skip /> - <!-- no translation found for wallet_secondary_label (2017028770884957543) --> - <skip /> + <string name="wallet_title" msgid="5369767670735827105">"Peněženka"</string> + <string name="wallet_secondary_label" msgid="2017028770884957543">"Připraveno"</string> <string name="status_bar_work" msgid="5238641949837091056">"Pracovní profil"</string> <string name="status_bar_airplane" msgid="4848702508684541009">"Režim Letadlo"</string> <string name="add_tile" msgid="6239678623873086686">"Přidat dlaždici"</string> diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml index 724c26f74323..489fb53cc195 100644 --- a/packages/SystemUI/res/values-da/strings.xml +++ b/packages/SystemUI/res/values-da/strings.xml @@ -412,7 +412,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"Indtil solopgang"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"Tænd kl. <xliff:g id="TIME">%s</xliff:g>"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"Indtil kl. <xliff:g id="TIME">%s</xliff:g>"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"Reducer lysstyrken"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"NFC er deaktiveret"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"NFC er aktiveret"</string> @@ -652,10 +651,8 @@ <string name="show_demo_mode" msgid="3677956462273059726">"Vis Demotilstand"</string> <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Alarm"</string> - <!-- no translation found for wallet_title (5369767670735827105) --> - <skip /> - <!-- no translation found for wallet_secondary_label (2017028770884957543) --> - <skip /> + <string name="wallet_title" msgid="5369767670735827105">"Wallet"</string> + <string name="wallet_secondary_label" msgid="2017028770884957543">"Klar"</string> <string name="status_bar_work" msgid="5238641949837091056">"Arbejdsprofil"</string> <string name="status_bar_airplane" msgid="4848702508684541009">"Flytilstand"</string> <string name="add_tile" msgid="6239678623873086686">"Tilføj et felt"</string> diff --git a/packages/SystemUI/res/values-de/strings.xml b/packages/SystemUI/res/values-de/strings.xml index 9907dfc37f12..61e07581ba01 100644 --- a/packages/SystemUI/res/values-de/strings.xml +++ b/packages/SystemUI/res/values-de/strings.xml @@ -412,7 +412,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"Bis Sonnenaufgang"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"An um <xliff:g id="TIME">%s</xliff:g>"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"Bis <xliff:g id="TIME">%s</xliff:g>"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"Helligkeit verringern"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"NFC ist deaktiviert"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"NFC ist aktiviert"</string> @@ -541,8 +540,7 @@ <string name="monitoring_button_view_policies" msgid="3869724835853502410">"Richtlinien ansehen"</string> <string name="monitoring_button_view_controls" msgid="8316440345340701117">"Jugendschutzeinstellungen"</string> <string name="monitoring_description_named_management" msgid="505833016545056036">"Dieses Gerät gehört <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>.\n\nDein IT-Administrator kann Einstellungen, Zugriffsrechte im Unternehmen, Apps, mit diesem Gerät verknüpfte Daten und die Standortdaten deines Geräts sehen und verwalten.\n\nWeitere Informationen erhältst du von deinem IT-Administrator."</string> - <!-- no translation found for monitoring_financed_description_named_management (6108439201399938668) --> - <skip /> + <string name="monitoring_financed_description_named_management" msgid="6108439201399938668">"<xliff:g id="ORGANIZATION_NAME_0">%1$s</xliff:g> kann möglicherweise auf die Daten zugreifen, die mit diesem Gerät verknüpft sind, Apps verwalten und die Geräteeinstellungen ändern.\n\nFalls du Fragen hast, wende dich an <xliff:g id="ORGANIZATION_NAME_1">%2$s</xliff:g>."</string> <string name="monitoring_description_management" msgid="4308879039175729014">"Dieses Gerät gehört deiner Organisation.\n\nDein IT-Administrator kann Einstellungen, Zugriffsrechte im Unternehmen, Apps, mit diesem Gerät verknüpfte Daten und die Standortdaten deines Geräts sehen und verwalten.\n\nWeitere Informationen erhältst du von deinem IT-Administrator."</string> <string name="monitoring_description_management_ca_certificate" msgid="7785013130658110130">"Deine Organisation hat ein Zertifikat einer Zertifizierungsstelle auf deinem Gerät installiert. Eventuell wird dein sicherer Netzwerkverkehr überwacht oder bearbeitet."</string> <string name="monitoring_description_managed_profile_ca_certificate" msgid="7904323416598435647">"Deine Organisation hat ein Zertifikat einer Zertifizierungsstelle in deinem Arbeitsprofil installiert. Eventuell wird dein sicherer Netzwerkverkehr überwacht oder bearbeitet."</string> @@ -653,10 +651,8 @@ <string name="show_demo_mode" msgid="3677956462273059726">"Demomodus anzeigen"</string> <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Weckruf"</string> - <!-- no translation found for wallet_title (5369767670735827105) --> - <skip /> - <!-- no translation found for wallet_secondary_label (2017028770884957543) --> - <skip /> + <string name="wallet_title" msgid="5369767670735827105">"Wallet"</string> + <string name="wallet_secondary_label" msgid="2017028770884957543">"Bereit"</string> <string name="status_bar_work" msgid="5238641949837091056">"Arbeitsprofil"</string> <string name="status_bar_airplane" msgid="4848702508684541009">"Flugmodus"</string> <string name="add_tile" msgid="6239678623873086686">"Kachel hinzufügen"</string> @@ -1021,7 +1017,7 @@ <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Teil des Bildschirms vergrößern"</string> <string name="magnification_mode_switch_click_label" msgid="2786203505805898199">"Schalter"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="4431046858918714564">"Die Schaltfläche „Bedienungshilfen“ ersetzt die Touch-Geste für Bedienungshilfen\n\n"<annotation id="link">"Einstellungen aufrufen"</annotation></string> - <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Schaltfläche an den Rand bewegen, um sie zeitweise auszublenden"</string> + <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Durch Ziehen an den Rand wird die Schaltfläche zeitweise ausgeblendet"</string> <string name="quick_controls_title" msgid="6839108006171302273">"Gerätesteuerung"</string> <string name="quick_controls_subtitle" msgid="1667408093326318053">"Steuerelemente für verbundene Geräte hinzufügen"</string> <string name="quick_controls_setup_title" msgid="8901436655997849822">"Gerätesteuerung einrichten"</string> diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml index cfae45366858..45d3f160457f 100644 --- a/packages/SystemUI/res/values-el/strings.xml +++ b/packages/SystemUI/res/values-el/strings.xml @@ -412,7 +412,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"Μέχρι την ανατολή"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"Ενεργοποίηση στις <xliff:g id="TIME">%s</xliff:g>"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"Έως <xliff:g id="TIME">%s</xliff:g>"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"Μείωση φωτεινότητας"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"Το NFC είναι απενεργοποιημένο"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"Το NFC είναι ενεργοποιημένο"</string> @@ -652,10 +651,8 @@ <string name="show_demo_mode" msgid="3677956462273059726">"Εμφάνιση λειτουργίας επίδειξης"</string> <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Ξυπνητήρι"</string> - <!-- no translation found for wallet_title (5369767670735827105) --> - <skip /> - <!-- no translation found for wallet_secondary_label (2017028770884957543) --> - <skip /> + <string name="wallet_title" msgid="5369767670735827105">"Πορτοφόλι"</string> + <string name="wallet_secondary_label" msgid="2017028770884957543">"Έτοιμο"</string> <string name="status_bar_work" msgid="5238641949837091056">"Προφίλ εργασίας"</string> <string name="status_bar_airplane" msgid="4848702508684541009">"Λειτουργία πτήσης"</string> <string name="add_tile" msgid="6239678623873086686">"Προσθήκη πλακιδίου"</string> diff --git a/packages/SystemUI/res/values-en-rAU/strings.xml b/packages/SystemUI/res/values-en-rAU/strings.xml index d6d97c1a0434..126b172e8f03 100644 --- a/packages/SystemUI/res/values-en-rAU/strings.xml +++ b/packages/SystemUI/res/values-en-rAU/strings.xml @@ -412,7 +412,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"Until sunrise"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"On at <xliff:g id="TIME">%s</xliff:g>"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"Until <xliff:g id="TIME">%s</xliff:g>"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"Reduce brightness"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"NFC is disabled"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"NFC is enabled"</string> diff --git a/packages/SystemUI/res/values-en-rCA/strings.xml b/packages/SystemUI/res/values-en-rCA/strings.xml index d6ae5c42a009..455f4983bb36 100644 --- a/packages/SystemUI/res/values-en-rCA/strings.xml +++ b/packages/SystemUI/res/values-en-rCA/strings.xml @@ -412,7 +412,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"Until sunrise"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"On at <xliff:g id="TIME">%s</xliff:g>"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"Until <xliff:g id="TIME">%s</xliff:g>"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"Reduce brightness"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"NFC is disabled"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"NFC is enabled"</string> diff --git a/packages/SystemUI/res/values-en-rGB/strings.xml b/packages/SystemUI/res/values-en-rGB/strings.xml index d6d97c1a0434..126b172e8f03 100644 --- a/packages/SystemUI/res/values-en-rGB/strings.xml +++ b/packages/SystemUI/res/values-en-rGB/strings.xml @@ -412,7 +412,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"Until sunrise"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"On at <xliff:g id="TIME">%s</xliff:g>"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"Until <xliff:g id="TIME">%s</xliff:g>"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"Reduce brightness"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"NFC is disabled"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"NFC is enabled"</string> diff --git a/packages/SystemUI/res/values-en-rIN/strings.xml b/packages/SystemUI/res/values-en-rIN/strings.xml index d6d97c1a0434..126b172e8f03 100644 --- a/packages/SystemUI/res/values-en-rIN/strings.xml +++ b/packages/SystemUI/res/values-en-rIN/strings.xml @@ -412,7 +412,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"Until sunrise"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"On at <xliff:g id="TIME">%s</xliff:g>"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"Until <xliff:g id="TIME">%s</xliff:g>"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"Reduce brightness"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"NFC is disabled"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"NFC is enabled"</string> diff --git a/packages/SystemUI/res/values-en-rXC/strings.xml b/packages/SystemUI/res/values-en-rXC/strings.xml index 2a2e518b25c9..8212a33a917c 100644 --- a/packages/SystemUI/res/values-en-rXC/strings.xml +++ b/packages/SystemUI/res/values-en-rXC/strings.xml @@ -89,8 +89,10 @@ <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Taking screenshots isn\'t allowed by the app or your organization"</string> <string name="screenshot_edit_label" msgid="8754981973544133050">"Edit"</string> <string name="screenshot_edit_description" msgid="3333092254706788906">"Edit screenshot"</string> - <string name="screenshot_scroll_label" msgid="7682877978685434621">"Scroll"</string> - <string name="screenshot_scroll_description" msgid="7855773867093272175">"Scroll screenshot"</string> + <!-- no translation found for screenshot_scroll_label (7682877978685434621) --> + <skip /> + <!-- no translation found for screenshot_scroll_description (7855773867093272175) --> + <skip /> <string name="screenshot_dismiss_description" msgid="4702341245899508786">"Dismiss screenshot"</string> <string name="screenshot_preview_description" msgid="7606510140714080474">"Screenshot preview"</string> <string name="screenshot_top_boundary" msgid="1500569103321300856">"Top boundary"</string> @@ -412,7 +414,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"Until sunrise"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"On at <xliff:g id="TIME">%s</xliff:g>"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"Until <xliff:g id="TIME">%s</xliff:g>"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"Reduce brightness"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"NFC is disabled"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"NFC is enabled"</string> diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml index 70adb0bad771..10079a6cf4a9 100644 --- a/packages/SystemUI/res/values-es-rUS/strings.xml +++ b/packages/SystemUI/res/values-es-rUS/strings.xml @@ -412,7 +412,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"Hasta el amanecer"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"A la(s) <xliff:g id="TIME">%s</xliff:g>"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"Hasta la(s) <xliff:g id="TIME">%s</xliff:g>"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"Reducir el brillo"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"La tecnología NFC está inhabilitada"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"La tecnología NFC está habilitada"</string> @@ -652,10 +651,8 @@ <string name="show_demo_mode" msgid="3677956462273059726">"Ver en modo de demostración"</string> <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Alarma"</string> - <!-- no translation found for wallet_title (5369767670735827105) --> - <skip /> - <!-- no translation found for wallet_secondary_label (2017028770884957543) --> - <skip /> + <string name="wallet_title" msgid="5369767670735827105">"Wallet"</string> + <string name="wallet_secondary_label" msgid="2017028770884957543">"Listo"</string> <string name="status_bar_work" msgid="5238641949837091056">"Perfil de trabajo"</string> <string name="status_bar_airplane" msgid="4848702508684541009">"Modo de avión"</string> <string name="add_tile" msgid="6239678623873086686">"Agregar mosaico"</string> diff --git a/packages/SystemUI/res/values-es/strings.xml b/packages/SystemUI/res/values-es/strings.xml index ae28e6b3a77b..48353ae757cf 100644 --- a/packages/SystemUI/res/values-es/strings.xml +++ b/packages/SystemUI/res/values-es/strings.xml @@ -412,7 +412,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"Hasta el amanecer"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"A las <xliff:g id="TIME">%s</xliff:g>"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"Hasta las <xliff:g id="TIME">%s</xliff:g>"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"Reducir brillo"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"El NFC está desactivado"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"El NFC está activado"</string> @@ -652,10 +651,8 @@ <string name="show_demo_mode" msgid="3677956462273059726">"Mostrar modo de demostración"</string> <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Alarma"</string> - <!-- no translation found for wallet_title (5369767670735827105) --> - <skip /> - <!-- no translation found for wallet_secondary_label (2017028770884957543) --> - <skip /> + <string name="wallet_title" msgid="5369767670735827105">"Wallet"</string> + <string name="wallet_secondary_label" msgid="2017028770884957543">"Listo"</string> <string name="status_bar_work" msgid="5238641949837091056">"Perfil de trabajo"</string> <string name="status_bar_airplane" msgid="4848702508684541009">"Modo avión"</string> <string name="add_tile" msgid="6239678623873086686">"Añadir icono"</string> diff --git a/packages/SystemUI/res/values-et/strings.xml b/packages/SystemUI/res/values-et/strings.xml index 09a59e7d27da..e988c71fa6d6 100644 --- a/packages/SystemUI/res/values-et/strings.xml +++ b/packages/SystemUI/res/values-et/strings.xml @@ -412,7 +412,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"Kuni päikesetõusuni"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"Sisse kell <xliff:g id="TIME">%s</xliff:g>"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"Kuni <xliff:g id="TIME">%s</xliff:g>"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"Ereduse vähendamine"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"NFC on keelatud"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"NFC on lubatud"</string> @@ -652,10 +651,8 @@ <string name="show_demo_mode" msgid="3677956462273059726">"Kuva demorežiim"</string> <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Äratus"</string> - <!-- no translation found for wallet_title (5369767670735827105) --> - <skip /> - <!-- no translation found for wallet_secondary_label (2017028770884957543) --> - <skip /> + <string name="wallet_title" msgid="5369767670735827105">"Rahakott"</string> + <string name="wallet_secondary_label" msgid="2017028770884957543">"Valmis"</string> <string name="status_bar_work" msgid="5238641949837091056">"Tööprofiil"</string> <string name="status_bar_airplane" msgid="4848702508684541009">"Lennukirežiim"</string> <string name="add_tile" msgid="6239678623873086686">"Paani lisamine"</string> diff --git a/packages/SystemUI/res/values-eu/strings.xml b/packages/SystemUI/res/values-eu/strings.xml index 546679f3a86a..00443dc8d515 100644 --- a/packages/SystemUI/res/values-eu/strings.xml +++ b/packages/SystemUI/res/values-eu/strings.xml @@ -412,7 +412,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"Egunsentira arte"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"Aktibatze-ordua: <xliff:g id="TIME">%s</xliff:g>"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"Desaktibatze-ordua: <xliff:g id="TIME">%s</xliff:g>"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"Murriztu distira"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"Desgaituta dago NFC"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"Gaituta dago NFC"</string> @@ -652,10 +651,8 @@ <string name="show_demo_mode" msgid="3677956462273059726">"Erakutsi demo modua"</string> <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Alarma"</string> - <!-- no translation found for wallet_title (5369767670735827105) --> - <skip /> - <!-- no translation found for wallet_secondary_label (2017028770884957543) --> - <skip /> + <string name="wallet_title" msgid="5369767670735827105">"Wallet"</string> + <string name="wallet_secondary_label" msgid="2017028770884957543">"Prest"</string> <string name="status_bar_work" msgid="5238641949837091056">"Work profila"</string> <string name="status_bar_airplane" msgid="4848702508684541009">"Hegaldi modua"</string> <string name="add_tile" msgid="6239678623873086686">"Gehitu lauza"</string> @@ -1019,7 +1016,7 @@ <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Handitu pantaila osoa"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Handitu pantailaren zati bat"</string> <string name="magnification_mode_switch_click_label" msgid="2786203505805898199">"Botoia"</string> - <string name="accessibility_floating_button_migration_tooltip" msgid="4431046858918714564">"Erabilerraztasuna botoiak erabilerraztasun-keinuak ordezkatu ditu\n\n"<annotation id="link">"Ikusi ezarpenak"</annotation></string> + <string name="accessibility_floating_button_migration_tooltip" msgid="4431046858918714564">"Erabilerraztasuna botoiak erabilerraztasun-keinua ordezkatu du\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> <string name="quick_controls_title" msgid="6839108006171302273">"Gailuak kontrolatzeko widgetak"</string> <string name="quick_controls_subtitle" msgid="1667408093326318053">"Gehitu konektatutako gailuak kontrolatzeko widgetak"</string> diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml index 821c8e74adba..4f733c29875e 100644 --- a/packages/SystemUI/res/values-fa/strings.xml +++ b/packages/SystemUI/res/values-fa/strings.xml @@ -412,7 +412,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"تا طلوع آفتاب"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"ساعت <xliff:g id="TIME">%s</xliff:g> روشن میشود"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"تا<xliff:g id="TIME">%s</xliff:g>"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"کاهش روشنایی"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"ارتباط میدان نزدیک (NFC)"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"«ارتباط میدان نزدیک» (NFC) غیرفعال است"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"«ارتباط میدان نزدیک» (NFC) فعال است"</string> @@ -652,10 +651,8 @@ <string name="show_demo_mode" msgid="3677956462273059726">"نمایش حالت نمایشی"</string> <string name="status_bar_ethernet" msgid="5690979758988647484">"اترنت"</string> <string name="status_bar_alarm" msgid="87160847643623352">"زنگ"</string> - <!-- no translation found for wallet_title (5369767670735827105) --> - <skip /> - <!-- no translation found for wallet_secondary_label (2017028770884957543) --> - <skip /> + <string name="wallet_title" msgid="5369767670735827105">"کیفپول"</string> + <string name="wallet_secondary_label" msgid="2017028770884957543">"آماده"</string> <string name="status_bar_work" msgid="5238641949837091056">"نمایه کاری"</string> <string name="status_bar_airplane" msgid="4848702508684541009">"حالت هواپیما"</string> <string name="add_tile" msgid="6239678623873086686">"افزودن کاشی"</string> diff --git a/packages/SystemUI/res/values-fi/strings.xml b/packages/SystemUI/res/values-fi/strings.xml index 28e619c73e7f..47b716e75aa7 100644 --- a/packages/SystemUI/res/values-fi/strings.xml +++ b/packages/SystemUI/res/values-fi/strings.xml @@ -412,7 +412,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"Auringonnousuun"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"Päälle klo <xliff:g id="TIME">%s</xliff:g>"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"<xliff:g id="TIME">%s</xliff:g> asti"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"Vähennä kirkkautta"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"NFC on poistettu käytöstä"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"NFC on käytössä"</string> @@ -652,10 +651,8 @@ <string name="show_demo_mode" msgid="3677956462273059726">"Näytä esittelytila"</string> <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Herätys"</string> - <!-- no translation found for wallet_title (5369767670735827105) --> - <skip /> - <!-- no translation found for wallet_secondary_label (2017028770884957543) --> - <skip /> + <string name="wallet_title" msgid="5369767670735827105">"Wallet"</string> + <string name="wallet_secondary_label" msgid="2017028770884957543">"Valmis"</string> <string name="status_bar_work" msgid="5238641949837091056">"Työprofiili"</string> <string name="status_bar_airplane" msgid="4848702508684541009">"Lentokonetila"</string> <string name="add_tile" msgid="6239678623873086686">"Lisää ruutu"</string> diff --git a/packages/SystemUI/res/values-fr-rCA/strings.xml b/packages/SystemUI/res/values-fr-rCA/strings.xml index 5a2a1251ee99..812bee7ee3b8 100644 --- a/packages/SystemUI/res/values-fr-rCA/strings.xml +++ b/packages/SystemUI/res/values-fr-rCA/strings.xml @@ -412,7 +412,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"Jusqu\'à l\'aube"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"Actif à <xliff:g id="TIME">%s</xliff:g>"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"Jusqu\'à <xliff:g id="TIME">%s</xliff:g>"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"Réduire la luminosité"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"NFC désactivée"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"NFC activée"</string> @@ -652,10 +651,8 @@ <string name="show_demo_mode" msgid="3677956462273059726">"Afficher le mode Démonstration"</string> <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Alarme"</string> - <!-- no translation found for wallet_title (5369767670735827105) --> - <skip /> - <!-- no translation found for wallet_secondary_label (2017028770884957543) --> - <skip /> + <string name="wallet_title" msgid="5369767670735827105">"Wallet"</string> + <string name="wallet_secondary_label" msgid="2017028770884957543">"Prêt"</string> <string name="status_bar_work" msgid="5238641949837091056">"Profil professionnel"</string> <string name="status_bar_airplane" msgid="4848702508684541009">"Mode Avion"</string> <string name="add_tile" msgid="6239678623873086686">"Ajouter la tuile"</string> diff --git a/packages/SystemUI/res/values-fr/strings.xml b/packages/SystemUI/res/values-fr/strings.xml index 9e4f1acb0177..8c3854e9d6be 100644 --- a/packages/SystemUI/res/values-fr/strings.xml +++ b/packages/SystemUI/res/values-fr/strings.xml @@ -412,7 +412,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"Jusqu\'à l\'aube"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"À partir de <xliff:g id="TIME">%s</xliff:g>"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"Jusqu\'à <xliff:g id="TIME">%s</xliff:g>"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"Réduire la luminosité"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"NFC désactivée"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"La technologie NFC est activée"</string> @@ -652,10 +651,8 @@ <string name="show_demo_mode" msgid="3677956462273059726">"Afficher le mode de démonstration"</string> <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Alarme"</string> - <!-- no translation found for wallet_title (5369767670735827105) --> - <skip /> - <!-- no translation found for wallet_secondary_label (2017028770884957543) --> - <skip /> + <string name="wallet_title" msgid="5369767670735827105">"Wallet"</string> + <string name="wallet_secondary_label" msgid="2017028770884957543">"Prêt"</string> <string name="status_bar_work" msgid="5238641949837091056">"Profil professionnel"</string> <string name="status_bar_airplane" msgid="4848702508684541009">"Mode Avion"</string> <string name="add_tile" msgid="6239678623873086686">"Ajouter un bloc"</string> diff --git a/packages/SystemUI/res/values-gl/strings.xml b/packages/SystemUI/res/values-gl/strings.xml index 9091f04d2ed0..334da91a7cf4 100644 --- a/packages/SystemUI/res/values-gl/strings.xml +++ b/packages/SystemUI/res/values-gl/strings.xml @@ -412,7 +412,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"Ata o amencer"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"Activarase ás: <xliff:g id="TIME">%s</xliff:g>"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"Utilizarase ata as: <xliff:g id="TIME">%s</xliff:g>"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"Reducir brillo"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"A opción NFC está desactivada"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"A opción NFC está activada"</string> @@ -652,10 +651,8 @@ <string name="show_demo_mode" msgid="3677956462273059726">"Mostrar modo de demostración"</string> <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Alarma"</string> - <!-- no translation found for wallet_title (5369767670735827105) --> - <skip /> - <!-- no translation found for wallet_secondary_label (2017028770884957543) --> - <skip /> + <string name="wallet_title" msgid="5369767670735827105">"Wallet"</string> + <string name="wallet_secondary_label" msgid="2017028770884957543">"Listo"</string> <string name="status_bar_work" msgid="5238641949837091056">"Perfil de traballo"</string> <string name="status_bar_airplane" msgid="4848702508684541009">"Modo avión"</string> <string name="add_tile" msgid="6239678623873086686">"Engade un atallo"</string> diff --git a/packages/SystemUI/res/values-gu/strings.xml b/packages/SystemUI/res/values-gu/strings.xml index ec286e14399b..c8cdff66187c 100644 --- a/packages/SystemUI/res/values-gu/strings.xml +++ b/packages/SystemUI/res/values-gu/strings.xml @@ -412,7 +412,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"સૂર્યોદય સુધી"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"<xliff:g id="TIME">%s</xliff:g> વાગ્યે ચાલુ"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"<xliff:g id="TIME">%s</xliff:g> વાગ્યા સુધી"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"બ્રાઇટનેસ ઘટાડો"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"NFC અક્ષમ કરેલ છે"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"NFC સક્ષમ કરેલ છે"</string> @@ -541,8 +540,7 @@ <string name="monitoring_button_view_policies" msgid="3869724835853502410">"પૉલિસીઓ જુઓ"</string> <string name="monitoring_button_view_controls" msgid="8316440345340701117">"નિયંત્રણો જુઓ"</string> <string name="monitoring_description_named_management" msgid="505833016545056036">"આ ડિવાઇસ <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>ની માલિકીનું છે.\n\nતમારા IT વ્યવસ્થાપક સેટિંગ, કૉર્પોરેટ ઍક્સેસ, ઍપ, તમારા ડિવાઇસ સાથે સંકળાયેલો ડેટા અને તમારા ડિવાઇસની સ્થાન માહિતીનું નિરીક્ષણ તેમજ તેને મેનેજ કરી શકે છે.\n\nવધુ માહિતી માટે, તમારા IT વ્યવસ્થાપકનો સંપર્ક કરો."</string> - <!-- no translation found for monitoring_financed_description_named_management (6108439201399938668) --> - <skip /> + <string name="monitoring_financed_description_named_management" msgid="6108439201399938668">"<xliff:g id="ORGANIZATION_NAME_0">%1$s</xliff:g> આ ડિવાઇસ સાથે સંકળાયેલો ડેટા ઍક્સેસ કરી શકશે અને ઍપ મેનેજ કરી શકશે તેમજ આ ડિવાઇસના સેટિંગ બદલી શકશે.\n\nજો તમને કોઈ પ્રશ્ન હોય, તો <xliff:g id="ORGANIZATION_NAME_1">%2$s</xliff:g>નો સંપર્ક કરો."</string> <string name="monitoring_description_management" msgid="4308879039175729014">"આ ડિવાઇસ તમારી સંસ્થાની માલિકીનું છે.\n\nતમારા IT વ્યવસ્થાપક સેટિંગ, કૉર્પોરેટ ઍક્સેસ, ઍપ, તમારા ડિવાઇસ સાથે સંકળાયેલો ડેટા અને તમારા ડિવાઇસની સ્થાન માહિતીનું નિરીક્ષણ તેમજ તેને મેનેજ કરી શકે છે.\n\nવધુ માહિતી માટે, તમારા IT વ્યવસ્થાપકનો સંપર્ક કરો."</string> <string name="monitoring_description_management_ca_certificate" msgid="7785013130658110130">"તમારી સંસ્થાએ આ ઉપકરણ પર પ્રમાણપત્ર સત્તાધિકારી ઇન્સ્ટૉલ કર્યું છે. તમારા સુરક્ષિત નેટવર્ક ટ્રાફિકનું નિયમન થઈ શકે છે અથવા તેમાં ફેરફાર કરવામાં આવી શકે છે."</string> <string name="monitoring_description_managed_profile_ca_certificate" msgid="7904323416598435647">"તમારી સંસ્થાએ તમારી કાર્ય પ્રોફાઇલમાં પ્રમાણપત્ર સત્તાધિકારી ઇન્સ્ટૉલ કર્યું છે. તમારા સુરક્ષિત નેટવર્ક ટ્રાફિકનું નિયમન થઈ શકે છે અથવા તેમાં ફેરફાર કરવામાં આવી શકે છે."</string> @@ -653,10 +651,8 @@ <string name="show_demo_mode" msgid="3677956462273059726">"ડેમો મોડ બતાવો"</string> <string name="status_bar_ethernet" msgid="5690979758988647484">"ઇથરનેટ"</string> <string name="status_bar_alarm" msgid="87160847643623352">"એલાર્મ"</string> - <!-- no translation found for wallet_title (5369767670735827105) --> - <skip /> - <!-- no translation found for wallet_secondary_label (2017028770884957543) --> - <skip /> + <string name="wallet_title" msgid="5369767670735827105">"વૉલેટ"</string> + <string name="wallet_secondary_label" msgid="2017028770884957543">"તૈયાર છે"</string> <string name="status_bar_work" msgid="5238641949837091056">"ઑફિસની પ્રોફાઇલ"</string> <string name="status_bar_airplane" msgid="4848702508684541009">"એરપ્લેન મોડ"</string> <string name="add_tile" msgid="6239678623873086686">"ટાઇલ ઉમેરો"</string> @@ -1021,7 +1017,7 @@ <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"સ્ક્રીનનો કોઈ ભાગ મોટો કરો"</string> <string name="magnification_mode_switch_click_label" msgid="2786203505805898199">"સ્વિચ"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="4431046858918714564">"ઍક્સેસિબિલિટી સંકેતને ઍક્સેસિબિલિટી બટન વડે બદલવામાં આવ્યા છે\n\n"<annotation id="link">"સેટિંગ જુઓ"</annotation></string> - <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"તેને હંગામી રૂપે ખસેડવા માટે બટનને કિનારી ખસેડો"</string> + <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"તેને હંગામી રૂપે ખસેડવા માટે બટનને કિનારી પર ખસેડો"</string> <string name="quick_controls_title" msgid="6839108006171302273">"ડિવાઇસનાં નિયંત્રણો"</string> <string name="quick_controls_subtitle" msgid="1667408093326318053">"તમારા કનેક્ટ કરેલા ડિવાઇસ માટે નિયંત્રણો ઉમેરો"</string> <string name="quick_controls_setup_title" msgid="8901436655997849822">"ડિવાઇસનાં નિયંત્રણો સેટઅપ કરો"</string> diff --git a/packages/SystemUI/res/values-hi/strings.xml b/packages/SystemUI/res/values-hi/strings.xml index 6b0c426267f4..31269597313f 100644 --- a/packages/SystemUI/res/values-hi/strings.xml +++ b/packages/SystemUI/res/values-hi/strings.xml @@ -223,9 +223,7 @@ <string name="accessibility_battery_details" msgid="6184390274150865789">"बैटरी का विवरण खोलें"</string> <string name="accessibility_battery_level" msgid="5143715405241138822">"<xliff:g id="NUMBER">%d</xliff:g> प्रतिशत बैटरी."</string> <string name="accessibility_battery_level_with_estimate" msgid="4843119982547599452">"<xliff:g id="PERCENTAGE">%1$s</xliff:g> प्रतिशत बैटरी बची है और आपके इस्तेमाल के हिसाब से यह <xliff:g id="TIME">%2$s</xliff:g> में खत्म हो जाएगी"</string> - <!-- String.format failed for translation --> - <!-- no translation found for accessibility_battery_level_charging (8892191177774027364) --> - <skip /> + <string name="accessibility_battery_level_charging" msgid="8892191177774027364">"बैटरी चार्ज हो रही है, <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> प्रतिशत."</string> <string name="accessibility_settings_button" msgid="2197034218538913880">"सिस्टम सेटिंग."</string> <string name="accessibility_notifications_button" msgid="3960913924189228831">"सूचनाएं."</string> <string name="accessibility_overflow_action" msgid="8555835828182509104">"पूरी सूचनाएं देखें"</string> @@ -414,7 +412,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"सुबह तक चालू रहेगी"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"<xliff:g id="TIME">%s</xliff:g> पर चालू हाेगी"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"<xliff:g id="TIME">%s</xliff:g> तक चालू रहेगी"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"स्क्रीन की चमक कम करें"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"एनएफ़सी"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"NFC बंद है"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"NFC चालू है"</string> @@ -654,10 +651,8 @@ <string name="show_demo_mode" msgid="3677956462273059726">"डेमो मोड दिखाएं"</string> <string name="status_bar_ethernet" msgid="5690979758988647484">"ईथरनेट"</string> <string name="status_bar_alarm" msgid="87160847643623352">"अलार्म"</string> - <!-- no translation found for wallet_title (5369767670735827105) --> - <skip /> - <!-- no translation found for wallet_secondary_label (2017028770884957543) --> - <skip /> + <string name="wallet_title" msgid="5369767670735827105">"वॉलेट"</string> + <string name="wallet_secondary_label" msgid="2017028770884957543">"तैयार"</string> <string name="status_bar_work" msgid="5238641949837091056">"वर्क प्रोफ़ाइल"</string> <string name="status_bar_airplane" msgid="4848702508684541009">"हवाई जहाज़ मोड"</string> <string name="add_tile" msgid="6239678623873086686">"टाइल जोड़ें"</string> diff --git a/packages/SystemUI/res/values-hr/strings.xml b/packages/SystemUI/res/values-hr/strings.xml index 2ce7fb27c7c2..0d4c0799026c 100644 --- a/packages/SystemUI/res/values-hr/strings.xml +++ b/packages/SystemUI/res/values-hr/strings.xml @@ -414,7 +414,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"Do izlaska sunca"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"Uključuje se u <xliff:g id="TIME">%s</xliff:g>"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"Do <xliff:g id="TIME">%s</xliff:g>"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"Smanjenje svjetline"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"NFC je onemogućen"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"NFC je omogućen"</string> @@ -956,10 +955,10 @@ <string name="mobile_carrier_text_format" msgid="8912204177152950766">"<xliff:g id="CARRIER_NAME">%1$s</xliff:g>, <xliff:g id="MOBILE_DATA_TYPE">%2$s</xliff:g>"</string> <string name="wifi_is_off" msgid="5389597396308001471">"Wi-Fi je isključen"</string> <string name="bt_is_off" msgid="7436344904889461591">"Bluetooth je isključen"</string> - <string name="dnd_is_off" msgid="3185706903793094463">"Način Ne ometaj isključen"</string> - <string name="qs_dnd_prompt_auto_rule" msgid="3535469468310002616">"Način Ne ometaj uključilo je automatsko pravilo (<xliff:g id="ID_1">%s</xliff:g>)."</string> - <string name="qs_dnd_prompt_app" msgid="4027984447935396820">"Način Ne ometaj uključila je aplikacija (<xliff:g id="ID_1">%s</xliff:g>)."</string> - <string name="qs_dnd_prompt_auto_rule_app" msgid="1841469944118486580">"Način Ne ometaj uključilo je automatsko pravilo ili aplikacija."</string> + <string name="dnd_is_off" msgid="3185706903793094463">"Način Ne uznemiravaj isključen"</string> + <string name="qs_dnd_prompt_auto_rule" msgid="3535469468310002616">"Način Ne uznemiravaj uključilo je automatsko pravilo (<xliff:g id="ID_1">%s</xliff:g>)."</string> + <string name="qs_dnd_prompt_app" msgid="4027984447935396820">"Način Ne uznemiravaj uključila je aplikacija (<xliff:g id="ID_1">%s</xliff:g>)."</string> + <string name="qs_dnd_prompt_auto_rule_app" msgid="1841469944118486580">"Način Ne uznemiravaj uključilo je automatsko pravilo ili aplikacija."</string> <string name="qs_dnd_until" msgid="7844269319043747955">"Do <xliff:g id="ID_1">%s</xliff:g>"</string> <string name="qs_dnd_keep" msgid="3829697305432866434">"Zadrži"</string> <string name="qs_dnd_replace" msgid="7712119051407052689">"Zamijeni"</string> diff --git a/packages/SystemUI/res/values-hu/strings.xml b/packages/SystemUI/res/values-hu/strings.xml index 66c5a829812e..51651accd319 100644 --- a/packages/SystemUI/res/values-hu/strings.xml +++ b/packages/SystemUI/res/values-hu/strings.xml @@ -412,7 +412,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"Napfelkeltéig"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"Be: <xliff:g id="TIME">%s</xliff:g>"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"Eddig: <xliff:g id="TIME">%s</xliff:g>"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"Fényerő csökkentése"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"Az NFC ki van kapcsolva"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"Az NFC be van kapcsolva"</string> @@ -652,10 +651,8 @@ <string name="show_demo_mode" msgid="3677956462273059726">"Demó mód megjelenítése"</string> <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Ébresztés"</string> - <!-- no translation found for wallet_title (5369767670735827105) --> - <skip /> - <!-- no translation found for wallet_secondary_label (2017028770884957543) --> - <skip /> + <string name="wallet_title" msgid="5369767670735827105">"Wallet"</string> + <string name="wallet_secondary_label" msgid="2017028770884957543">"Kész"</string> <string name="status_bar_work" msgid="5238641949837091056">"Munkahelyi profil"</string> <string name="status_bar_airplane" msgid="4848702508684541009">"Repülős üzemmód"</string> <string name="add_tile" msgid="6239678623873086686">"Mozaik hozzáadása"</string> diff --git a/packages/SystemUI/res/values-hy/strings.xml b/packages/SystemUI/res/values-hy/strings.xml index 8a79cc0e8ab0..1d64b9585d77 100644 --- a/packages/SystemUI/res/values-hy/strings.xml +++ b/packages/SystemUI/res/values-hy/strings.xml @@ -412,7 +412,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"Մինչև լուսաբաց"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"Կմիանա՝ <xliff:g id="TIME">%s</xliff:g>"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"Մինչև <xliff:g id="TIME">%s</xliff:g>"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"Պայծառության նվազեցում"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"NFC-ն անջատված է"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"NFC-ն միացված է"</string> @@ -652,10 +651,8 @@ <string name="show_demo_mode" msgid="3677956462273059726">"Ցուցադրական ռեժիմի ցուցադրում"</string> <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Զարթուցիչ"</string> - <!-- no translation found for wallet_title (5369767670735827105) --> - <skip /> - <!-- no translation found for wallet_secondary_label (2017028770884957543) --> - <skip /> + <string name="wallet_title" msgid="5369767670735827105">"Դրամապանակ"</string> + <string name="wallet_secondary_label" msgid="2017028770884957543">"Պատրաստ է"</string> <string name="status_bar_work" msgid="5238641949837091056">"Android for Work-ի պրոֆիլ"</string> <string name="status_bar_airplane" msgid="4848702508684541009">"Ավիառեժիմ"</string> <string name="add_tile" msgid="6239678623873086686">"Սալիկի ավելացում"</string> diff --git a/packages/SystemUI/res/values-in/strings.xml b/packages/SystemUI/res/values-in/strings.xml index 7ec11c302f03..21851cedcc45 100644 --- a/packages/SystemUI/res/values-in/strings.xml +++ b/packages/SystemUI/res/values-in/strings.xml @@ -412,7 +412,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"Sampai pagi"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"Aktif pada <xliff:g id="TIME">%s</xliff:g>"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"Sampai <xliff:g id="TIME">%s</xliff:g>"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"Kurangi kecerahan"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"NFC dinonaktifkan"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"NFC diaktifkan"</string> @@ -652,10 +651,8 @@ <string name="show_demo_mode" msgid="3677956462273059726">"Tampilkan mode demo"</string> <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Alarm"</string> - <!-- no translation found for wallet_title (5369767670735827105) --> - <skip /> - <!-- no translation found for wallet_secondary_label (2017028770884957543) --> - <skip /> + <string name="wallet_title" msgid="5369767670735827105">"Wallet"</string> + <string name="wallet_secondary_label" msgid="2017028770884957543">"Siap"</string> <string name="status_bar_work" msgid="5238641949837091056">"Profil kerja"</string> <string name="status_bar_airplane" msgid="4848702508684541009">"Mode pesawat"</string> <string name="add_tile" msgid="6239678623873086686">"Tambahkan ubin"</string> diff --git a/packages/SystemUI/res/values-is/strings.xml b/packages/SystemUI/res/values-is/strings.xml index 304ee7698c09..21ef9cd5332c 100644 --- a/packages/SystemUI/res/values-is/strings.xml +++ b/packages/SystemUI/res/values-is/strings.xml @@ -412,7 +412,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"Til sólarupprásar"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"Virkt kl. <xliff:g id="TIME">%s</xliff:g>"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"Til <xliff:g id="TIME">%s</xliff:g>"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"Minnka birtu"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"Slökkt á NFC"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"Kveikt á NFC"</string> @@ -652,10 +651,8 @@ <string name="show_demo_mode" msgid="3677956462273059726">"Sýna prufustillingu"</string> <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Vekjari"</string> - <!-- no translation found for wallet_title (5369767670735827105) --> - <skip /> - <!-- no translation found for wallet_secondary_label (2017028770884957543) --> - <skip /> + <string name="wallet_title" msgid="5369767670735827105">"Veski"</string> + <string name="wallet_secondary_label" msgid="2017028770884957543">"Tilbúið"</string> <string name="status_bar_work" msgid="5238641949837091056">"Vinnusnið"</string> <string name="status_bar_airplane" msgid="4848702508684541009">"Flugstilling"</string> <string name="add_tile" msgid="6239678623873086686">"Bæta reit við"</string> diff --git a/packages/SystemUI/res/values-it/strings.xml b/packages/SystemUI/res/values-it/strings.xml index 0a03577b661a..5b1855bc7198 100644 --- a/packages/SystemUI/res/values-it/strings.xml +++ b/packages/SystemUI/res/values-it/strings.xml @@ -412,7 +412,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"Fino all\'alba"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"Attivazione alle <xliff:g id="TIME">%s</xliff:g>"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"Fino alle <xliff:g id="TIME">%s</xliff:g>"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"Riduci la luminosità"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"NFC non attiva"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"NFC attiva"</string> diff --git a/packages/SystemUI/res/values-iw/strings.xml b/packages/SystemUI/res/values-iw/strings.xml index dc32c157a9f9..8e4390e37008 100644 --- a/packages/SystemUI/res/values-iw/strings.xml +++ b/packages/SystemUI/res/values-iw/strings.xml @@ -28,7 +28,7 @@ <string name="battery_low_percent_format" msgid="4276661262843170964">"נותרו <xliff:g id="PERCENTAGE">%s</xliff:g>"</string> <string name="battery_low_percent_format_hybrid" msgid="3985614339605686167">"נותרו <xliff:g id="PERCENTAGE">%1$s</xliff:g>, נשארו בערך <xliff:g id="TIME">%2$s</xliff:g> על סמך השימוש במכשיר"</string> <string name="battery_low_percent_format_hybrid_short" msgid="5917433188456218857">"נותרו <xliff:g id="PERCENTAGE">%1$s</xliff:g>, נשארו בערך <xliff:g id="TIME">%2$s</xliff:g>"</string> - <string name="battery_low_percent_format_saver_started" msgid="4968468824040940688">"נותרו <xliff:g id="PERCENTAGE">%s</xliff:g>. הופעלה תכונת החיסכון בסוללה."</string> + <string name="battery_low_percent_format_saver_started" msgid="4968468824040940688">"נותרו <xliff:g id="PERCENTAGE">%s</xliff:g>. התכונה \'חיסכון בסוללה\' הופעלה."</string> <string name="invalid_charger" msgid="4370074072117767416">"לא ניתן לטעון באמצעות USB. ניתן להשתמש במטען שצורף למכשיר שלך."</string> <string name="invalid_charger_title" msgid="938685362320735167">"לא ניתן לטעון באמצעות USB"</string> <string name="invalid_charger_text" msgid="2339310107232691577">"שימוש במטען שסופק עם המכשיר"</string> @@ -40,7 +40,7 @@ <string name="status_bar_settings_settings_button" msgid="534331565185171556">"הגדרות"</string> <string name="status_bar_settings_wifi_button" msgid="7243072479837270946">"Wi-Fi"</string> <string name="status_bar_settings_auto_rotation" msgid="8329080442278431708">"סיבוב אוטומטי של המסך"</string> - <string name="status_bar_settings_mute_label" msgid="914392730086057522">"השתק"</string> + <string name="status_bar_settings_mute_label" msgid="914392730086057522">"השתקה"</string> <string name="status_bar_settings_auto_brightness_label" msgid="2151934479226017725">"אוטומטי"</string> <string name="status_bar_settings_notifications" msgid="5285316949980621438">"התראות"</string> <string name="bluetooth_tethered" msgid="4171071193052799041">"Bluetooth קשור"</string> @@ -123,8 +123,8 @@ <string name="screenrecord_start_error" msgid="2200660692479682368">"שגיאה בהפעלה של הקלטת המסך"</string> <string name="usb_preference_title" msgid="1439924437558480718">"אפשרויות העברת קבצים ב-USB"</string> <string name="use_mtp_button_title" msgid="5036082897886518086">"טען כנגן מדיה (MTP)"</string> - <string name="use_ptp_button_title" msgid="7676427598943446826">"טען כמצלמה (PTP)"</string> - <string name="installer_cd_button_title" msgid="5499998592841984743">"התקן את אפליקציית העברת הקבצים של Android עבור Mac"</string> + <string name="use_ptp_button_title" msgid="7676427598943446826">"טעינה כמצלמה (PTP)"</string> + <string name="installer_cd_button_title" msgid="5499998592841984743">"התקנת האפליקציה \'העברת קבצים ב-Android\' עבור Mac"</string> <string name="accessibility_back" msgid="6530104400086152611">"הקודם"</string> <string name="accessibility_home" msgid="5430449841237966217">"בית"</string> <string name="accessibility_menu" msgid="2701163794470513040">"תפריט"</string> @@ -142,7 +142,7 @@ <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"שליחה"</string> <string name="accessibility_manage_notification" msgid="582215815790143983">"ניהול התראות"</string> <string name="phone_label" msgid="5715229948920451352">"פתח את הטלפון"</string> - <string name="voice_assist_label" msgid="3725967093735929020">"פתח את המסייע הקולי"</string> + <string name="voice_assist_label" msgid="3725967093735929020">"פתיחת האסיסטנט"</string> <string name="camera_label" msgid="8253821920931143699">"פתח את המצלמה"</string> <string name="cancel" msgid="1089011503403416730">"ביטול"</string> <string name="biometric_dialog_confirm" msgid="2005978443007344895">"אישור"</string> @@ -164,13 +164,13 @@ <string name="biometric_dialog_credential_attempts_before_wipe" msgid="6751859711975516999">"יש לנסות שוב. ניסיון <xliff:g id="ATTEMPTS_0">%1$d</xliff:g> מתוך <xliff:g id="MAX_ATTEMPTS">%2$d</xliff:g>."</string> <string name="biometric_dialog_last_attempt_before_wipe_dialog_title" msgid="2874250099278693477">"הנתונים שלך יימחקו"</string> <string name="biometric_dialog_last_pattern_attempt_before_wipe_device" msgid="6562299244825817598">"הזנת קו ביטול נעילה שגוי בניסיון הבא תגרום למחיקת הנתונים במכשיר."</string> - <string name="biometric_dialog_last_pin_attempt_before_wipe_device" msgid="9151756675698215723">"הזנת קוד גישה שגוי בניסיון הבא תגרום למחיקת הנתונים במכשיר."</string> + <string name="biometric_dialog_last_pin_attempt_before_wipe_device" msgid="9151756675698215723">"הזנת קוד אימות שגוי בניסיון הבא תגרום למחיקת הנתונים במכשיר."</string> <string name="biometric_dialog_last_password_attempt_before_wipe_device" msgid="2363778585575998317">"הזנת סיסמה שגויה בניסיון הבא תגרום למחיקת הנתונים במכשיר."</string> <string name="biometric_dialog_last_pattern_attempt_before_wipe_user" msgid="8400180746043407270">"הזנת קו ביטול נעילה שגוי בניסיון הבא תגרום למחיקת המשתמש הזה."</string> <string name="biometric_dialog_last_pin_attempt_before_wipe_user" msgid="4159878829962411168">"הזנת קוד גישה שגוי בניסיון הבא תגרום למחיקת המשתמש הזה."</string> <string name="biometric_dialog_last_password_attempt_before_wipe_user" msgid="4695682515465063885">"הזנת סיסמה שגויה בניסיון הבא תגרום למחיקת המשתמש הזה."</string> <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"הזנת קו ביטול נעילה שגוי בניסיון הבא תגרום למחיקת פרופיל העבודה והנתונים המשויכים אליו."</string> - <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"הזנת קוד גישה שגוי בניסיון הבא תגרום למחיקת פרופיל העבודה והנתונים המשויכים אליו."</string> + <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"הזנה של קוד אימות שגוי בניסיון הבא תגרום למחיקת פרופיל העבודה והנתונים המשויכים אליו."</string> <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"הזנת סיסמה שגויה בניסיון הבא תגרום למחיקת פרופיל העבודה והנתונים המשויכים אליו."</string> <string name="biometric_dialog_failed_attempts_now_wiping_device" msgid="6585503524026243042">"נעשו יותר מדי ניסיונות שגויים. הנתונים במכשיר יימחקו."</string> <string name="biometric_dialog_failed_attempts_now_wiping_user" msgid="7015008539146949115">"נעשו יותר מדי ניסיונות שגויים. המשתמש הזה יימחק."</string> @@ -208,7 +208,7 @@ <string name="accessibility_desc_on" msgid="2899626845061427845">"פועל."</string> <string name="accessibility_desc_off" msgid="8055389500285421408">"כבוי."</string> <string name="accessibility_desc_connected" msgid="3082590384032624233">"מחובר."</string> - <string name="accessibility_desc_connecting" msgid="8011433412112903614">"מתחבר."</string> + <string name="accessibility_desc_connecting" msgid="8011433412112903614">"מתבצע חיבור."</string> <string name="data_connection_hspa" msgid="6096234094857660873">"HSPA"</string> <string name="data_connection_roaming" msgid="375650836665414797">"נדידה"</string> <string name="accessibility_data_connection_wifi" msgid="4422160347472742434">"Wi-Fi"</string> @@ -267,11 +267,11 @@ <string name="accessibility_quick_settings_bluetooth_changed_off" msgid="3344226652293797283">"Bluetooth נכבה."</string> <string name="accessibility_quick_settings_bluetooth_changed_on" msgid="1263282011749437549">"Bluetooth הופעל."</string> <string name="accessibility_quick_settings_location_off" msgid="6122523378294740598">"דיווח מיקום כבוי."</string> - <string name="accessibility_quick_settings_location_on" msgid="6869947200325467243">"דיווח מיקום מופעל."</string> + <string name="accessibility_quick_settings_location_on" msgid="6869947200325467243">"התכונה \'דיווח מיקום\' מופעלת."</string> <string name="accessibility_quick_settings_location_changed_off" msgid="5132776369388699133">"דיווח מיקום נכבה."</string> <string name="accessibility_quick_settings_location_changed_on" msgid="7159115433070112154">"דיווח מיקום הופעל."</string> <string name="accessibility_quick_settings_alarm" msgid="558094529584082090">"ההתראה נקבעה ל-<xliff:g id="TIME">%s</xliff:g>."</string> - <string name="accessibility_quick_settings_close" msgid="2974895537860082341">"סגור לוח."</string> + <string name="accessibility_quick_settings_close" msgid="2974895537860082341">"סגירת הלוח."</string> <string name="accessibility_quick_settings_more_time" msgid="7646479831704665284">"יותר זמן."</string> <string name="accessibility_quick_settings_less_time" msgid="9110364286464977870">"פחות זמן."</string> <string name="accessibility_quick_settings_flashlight_off" msgid="7606563260714825190">"הפנס כבוי."</string> @@ -301,7 +301,7 @@ <string name="data_usage_disabled_dialog" msgid="7933201635215099780">"הגעת למגבלת הנתונים שהגדרת. אתה כבר לא משתמש בחבילת גלישה.\n\nאם תמשיך, ייתכנו חיובים על שימוש בנתונים."</string> <string name="data_usage_disabled_dialog_enable" msgid="2796648546086408937">"המשך"</string> <string name="gps_notification_searching_text" msgid="231304732649348313">"מחפש GPS"</string> - <string name="gps_notification_found_text" msgid="3145873880174658526">"מיקום מוגדר על ידי GPS"</string> + <string name="gps_notification_found_text" msgid="3145873880174658526">"המיקום מוגדר על ידי GPS"</string> <string name="accessibility_location_active" msgid="2845747916764660369">"בקשות מיקום פעילות"</string> <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"ההגדרה \'חיישנים כבויים\' פעילה"</string> <string name="accessibility_clear_all" msgid="970525598287244592">"הסרת כל ההתראות."</string> @@ -318,7 +318,7 @@ <string name="accessibility_rotation_lock_off" msgid="3880436123632448930">"המסך יסתובב באופן אוטומטי."</string> <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"המסך נעול כעת לרוחב."</string> <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"המסך נעול כעת לאורך."</string> - <string name="accessibility_rotation_lock_off_changed" msgid="5772498370935088261">"המסך יסתובב כעת באופן אוטומטי."</string> + <string name="accessibility_rotation_lock_off_changed" msgid="5772498370935088261">"המסך יסתובב עכשיו באופן אוטומטי."</string> <string name="accessibility_rotation_lock_on_landscape_changed" msgid="5785739044300729592">"המסך נעול כעת לרוחב."</string> <string name="accessibility_rotation_lock_on_portrait_changed" msgid="5580170829728987989">"המסך נעול כעת לאורך."</string> <string name="dessert_case" msgid="9104973640704357717">"מזנון קינוחים"</string> @@ -343,12 +343,12 @@ <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"סיבוב אוטומטי"</string> <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"סיבוב אוטומטי של המסך"</string> <string name="accessibility_quick_settings_rotation_value" msgid="2916484894750819251">"מצב <xliff:g id="ID_1">%s</xliff:g>"</string> - <string name="quick_settings_rotation_locked_label" msgid="4420863550666310319">"סיבוב נעול"</string> + <string name="quick_settings_rotation_locked_label" msgid="4420863550666310319">"סיבוב המסך נעול"</string> <string name="quick_settings_rotation_locked_portrait_label" msgid="1194988975270484482">"לאורך"</string> <string name="quick_settings_rotation_locked_landscape_label" msgid="2000295772687238645">"לרוחב"</string> <string name="quick_settings_ime_label" msgid="3351174938144332051">"שיטת קלט"</string> <string name="quick_settings_location_label" msgid="2621868789013389163">"מיקום"</string> - <string name="quick_settings_location_off_label" msgid="7923929131443915919">"מיקום כבוי"</string> + <string name="quick_settings_location_off_label" msgid="7923929131443915919">"המיקום מושבת"</string> <string name="quick_settings_camera_label" msgid="1367149596242401934">"חסימת המצלמה"</string> <string name="quick_settings_mic_label" msgid="8245831073612564953">"השתקת המיקרופון"</string> <string name="quick_settings_media_device_label" msgid="8034019242363789941">"מכשיר מדיה"</string> @@ -368,7 +368,7 @@ <string name="quick_settings_wifi_off_label" msgid="4003379736176547594">"Wi-Fi כבוי"</string> <string name="quick_settings_wifi_on_label" msgid="2489928193654318511">"Wi-Fi פועל"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="483130889414601732">"אין רשתות Wi-Fi זמינות"</string> - <string name="quick_settings_wifi_secondary_label_transient" msgid="7501659015509357887">"ההפעלה מתבצעת…"</string> + <string name="quick_settings_wifi_secondary_label_transient" msgid="7501659015509357887">"בתהליך הפעלה…"</string> <string name="quick_settings_cast_title" msgid="2279220930629235211">"העברת מסך"</string> <string name="quick_settings_casting" msgid="1435880708719268055">"מעביר"</string> <string name="quick_settings_cast_device_default_name" msgid="6988469571141331700">"מכשיר ללא שם"</string> @@ -400,13 +400,13 @@ <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"חבילת גלישה"</string> <string name="quick_settings_cellular_detail_data_usage" msgid="6105969068871138427">"שימוש בנתונים"</string> <string name="quick_settings_cellular_detail_remaining_data" msgid="1136599216568805644">"מכסת נתונים נותרת"</string> - <string name="quick_settings_cellular_detail_over_limit" msgid="4561921367680636235">"חריגה מההגבלה"</string> + <string name="quick_settings_cellular_detail_over_limit" msgid="4561921367680636235">"חריגה מהמגבלה"</string> <string name="quick_settings_cellular_detail_data_used" msgid="6798849610647988987">"<xliff:g id="DATA_USED">%s</xliff:g> בשימוש"</string> <string name="quick_settings_cellular_detail_data_limit" msgid="1791389609409211628">"הגבלה של <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="7957253810481086455">"אזהרה - <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_work_mode_label" msgid="2754212289804324685">"פרופיל עבודה"</string> <string name="quick_settings_night_display_label" msgid="8180030659141778180">"תאורת לילה"</string> - <string name="quick_settings_night_secondary_label_on_at_sunset" msgid="3358706312129866626">"מופעל בשקיעה"</string> + <string name="quick_settings_night_secondary_label_on_at_sunset" msgid="3358706312129866626">"התכונה מופעלת בשקיעה"</string> <string name="quick_settings_night_secondary_label_until_sunrise" msgid="4063448287758262485">"עד הזריחה"</string> <string name="quick_settings_night_secondary_label_on_at" msgid="3584738542293528235">"מופעל בשעה <xliff:g id="TIME">%s</xliff:g>"</string> <string name="quick_settings_secondary_label_until" msgid="1883981263191927372">"עד <xliff:g id="TIME">%s</xliff:g>"</string> @@ -416,7 +416,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"עד הזריחה"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"יתחיל בשעה <xliff:g id="TIME">%s</xliff:g>"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"עד <xliff:g id="TIME">%s</xliff:g>"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"הפחתה של עוצמת הבהירות"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"NFC מושבת"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"NFC מופעל"</string> @@ -441,10 +440,10 @@ <string name="zen_alarms_introduction" msgid="3987266042682300470">"כדי לא להפריע לך, המכשיר לא ירטוט ולא ישמיע שום צליל, חוץ מהתראות. המצב הזה לא ישפיע על צלילים שהם חלק מתוכן שבחרת להפעיל, כמו מוזיקה, סרטונים ומשחקים."</string> <string name="zen_priority_customize_button" msgid="4119213187257195047">"התאמה אישית"</string> <string name="zen_silence_introduction_voice" msgid="853573681302712348">"פעולה זו מבטלת את כל הצלילים והרטט, כולל צלילים ורטט שמקורם בהתראות, מוזיקה, סרטונים ומשחקים. בכל מקרה, עדיין אפשר להתקשר."</string> - <string name="zen_silence_introduction" msgid="6117517737057344014">"פעולה זו מבטלת את כל הצלילים והרטט, כולל בהתראות, מוזיקה, סרטונים ומשחקים."</string> + <string name="zen_silence_introduction" msgid="6117517737057344014">"הפעולה הזו מבטלת את כל הצלילים והרטט, כולל בהתראות, מוזיקה, סרטונים ומשחקים."</string> <string name="keyguard_more_overflow_text" msgid="5819512373606638727">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string> <string name="speed_bump_explanation" msgid="7248696377626341060">"התראות בדחיפות נמוכה יותר בהמשך"</string> - <string name="notification_tap_again" msgid="4477318164947497249">"הקש שוב כדי לפתוח"</string> + <string name="notification_tap_again" msgid="4477318164947497249">"יש להקיש שוב כדי לפתוח את ההתראה"</string> <string name="keyguard_unlock" msgid="8031975796351361601">"צריך להחליק כדי לפתוח"</string> <string name="keyguard_retry" msgid="886802522584053523">"יש להחליק למעלה כדי לנסות שוב"</string> <string name="require_unlock_for_nfc" msgid="1305686454823018831">"יש לבטל את הנעילה כדי להשתמש ב-NFC"</string> @@ -484,7 +483,7 @@ <string name="user_logout_notification_title" msgid="3644848998053832589">"ניתוק משתמש"</string> <string name="user_logout_notification_text" msgid="7441286737342997991">"צא מהמשתמש הנוכחי"</string> <string name="user_logout_notification_action" msgid="7974458760719361881">"נתק משתמש"</string> - <string name="user_add_user_title" msgid="4172327541504825032">"האם להוסיף משתמש חדש?"</string> + <string name="user_add_user_title" msgid="4172327541504825032">"להוסיף משתמש חדש?"</string> <string name="user_add_user_message_short" msgid="2599370307878014791">"בעת הוספת משתמש חדש, על משתמש זה להגדיר את השטח שלו.\n\nכל משתמש יכול לעדכן אפליקציות עבור כל המשתמשים האחרים."</string> <string name="user_limit_reached_title" msgid="2429229448830346057">"הגעת למגבלת המשתמשים שניתן להוסיף"</string> <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398"> @@ -498,13 +497,13 @@ <string name="user_remove_user_remove" msgid="8387386066949061256">"הסרה"</string> <string name="battery_saver_notification_title" msgid="8419266546034372562">"תכונת החיסכון בסוללה פועלת"</string> <string name="battery_saver_notification_text" msgid="2617841636449016951">"מפחית את הביצועים ונתונים ברקע"</string> - <string name="battery_saver_notification_action_text" msgid="6022091913807026887">"כיבוי תכונת החיסכון בסוללה"</string> + <string name="battery_saver_notification_action_text" msgid="6022091913807026887">"השבתת התכונה \'חיסכון בסוללה\'"</string> <string name="media_projection_dialog_text" msgid="1755705274910034772">"לאפליקציית <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> תהיה גישה לכל המידע הגלוי במסך שלך ולכל תוכן שמופעל במכשיר שלך בזמן הקלטה או העברה (casting). המידע הזה כולל פרטים כמו סיסמאות, פרטי תשלום, תמונות, הודעות ואודיו שמושמע מהמכשיר."</string> <string name="media_projection_dialog_service_text" msgid="958000992162214611">"לשירות שמספק את הפונקציה הזו תהיה גישה לכל הפרטים שגלויים במסך שלך או מופעלים מהמכשיר שלך בזמן הקלטה או העברה (cast). זה כולל פרטים כמו סיסמאות, פרטי תשלום, תמונות, הודעות ואודיו שמושמע מהמכשיר."</string> <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"להתחיל להקליט או להעביר (cast)?"</string> <string name="media_projection_dialog_title" msgid="3316063622495360646">"להתחיל להקליט או להעביר (cast) באמצעות <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string> <string name="media_projection_remember_text" msgid="6896767327140422951">"אל תציג שוב"</string> - <string name="clear_all_notifications_text" msgid="348312370303046130">"ניקוי הכל"</string> + <string name="clear_all_notifications_text" msgid="348312370303046130">"ניקוי הכול"</string> <string name="manage_notifications_text" msgid="6885645344647733116">"ניהול"</string> <string name="manage_notifications_history_text" msgid="57055985396576230">"היסטוריה"</string> <string name="notification_section_header_incoming" msgid="850925217908095197">"התראות חדשות"</string> @@ -518,9 +517,9 @@ <string name="profile_owned_footer" msgid="2756770645766113964">"ייתכן שהפרופיל נתון למעקב"</string> <string name="vpn_footer" msgid="3457155078010607471">"ייתכן שהרשת נמצאת במעקב"</string> <string name="branded_vpn_footer" msgid="816930186313188514">"ייתכן שהרשת מנוטרת"</string> - <string name="quick_settings_disclosure_parental_controls" msgid="2114102871438223600">"מכשיר זה מנוהל על ידי ההורה שלך"</string> + <string name="quick_settings_disclosure_parental_controls" msgid="2114102871438223600">"המכשיר הזה מנוהל על ידי ההורה שלך"</string> <string name="quick_settings_disclosure_management_monitoring" msgid="8231336875820702180">"הארגון שלך הוא הבעלים של מכשיר זה והוא עשוי לנטר את התנועה ברשת"</string> - <string name="quick_settings_disclosure_named_management_monitoring" msgid="2831423806103479812">"הארגון <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> הוא הבעלים של מכשיר זה והוא עשוי לנטר את התנועה ברשת"</string> + <string name="quick_settings_disclosure_named_management_monitoring" msgid="2831423806103479812">"הארגון <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> הוא הבעלים של המכשיר הזה והוא עשוי לנטר את התנועה ברשת"</string> <string name="quick_settings_financed_disclosure_named_management" msgid="2307703784594859524">"המכשיר הזה התקבל מ-<xliff:g id="ORGANIZATION_NAME">%s</xliff:g>"</string> <string name="quick_settings_disclosure_management_named_vpn" msgid="6096715329056415588">"המכשיר הזה שייך לארגון שלך, והוא מחובר ל-<xliff:g id="VPN_APP">%1$s</xliff:g>"</string> <string name="quick_settings_disclosure_named_management_named_vpn" msgid="5302786161534380104">"המכשיר הזה שייך לארגון <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> והוא מחובר ל-<xliff:g id="VPN_APP">%2$s</xliff:g>"</string> @@ -543,19 +542,18 @@ <string name="monitoring_subtitle_network_logging" msgid="2444199331891219596">"רישום התנועה ברשת"</string> <string name="monitoring_subtitle_ca_certificate" msgid="8588092029755175800">"אישורי CA"</string> <string name="disable_vpn" msgid="482685974985502922">"השבת VPN"</string> - <string name="disconnect_vpn" msgid="26286850045344557">"נתק את ה-VPN"</string> + <string name="disconnect_vpn" msgid="26286850045344557">"ניתוק ה-VPN"</string> <string name="monitoring_button_view_policies" msgid="3869724835853502410">"הצג מדיניות"</string> <string name="monitoring_button_view_controls" msgid="8316440345340701117">"לצפייה באמצעי בקרת ההורים"</string> <string name="monitoring_description_named_management" msgid="505833016545056036">"המכשיר הזה שייך לארגון <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>.\n\nמנהל ה-IT יכול לנטר ולנהל הגדרות, גישה ארגונית, אפליקציות, נתונים המשויכים למכשיר ומידע על מיקום המכשיר.\n\nלמידע נוסף, יש לפנות למנהל ה-IT."</string> - <!-- no translation found for monitoring_financed_description_named_management (6108439201399938668) --> - <skip /> + <string name="monitoring_financed_description_named_management" msgid="6108439201399938668">"ל-<xliff:g id="ORGANIZATION_NAME_0">%1$s</xliff:g> תהיה אפשרות לגשת לנתונים המשויכים למכשיר הזה, לנהל אפליקציות ולשנות את הגדרות המכשיר.\n\nאם יש לך שאלות, ניתן ליצור קשר עם <xliff:g id="ORGANIZATION_NAME_1">%2$s</xliff:g>."</string> <string name="monitoring_description_management" msgid="4308879039175729014">"המכשיר הזה שייך לארגון שלך.\n\nמנהל ה-IT יכול לנטר ולנהל הגדרות, גישה ארגונית, אפליקציות, נתונים המשויכים למכשיר ומידע על מיקום המכשיר.\n\nלמידע נוסף, יש לפנות למנהל ה-IT."</string> <string name="monitoring_description_management_ca_certificate" msgid="7785013130658110130">"הארגון שלך התקין רשות אישורים במכשיר. ניתן לעקוב אחר התנועה ברשת המאובטחת או לשנות אותה."</string> <string name="monitoring_description_managed_profile_ca_certificate" msgid="7904323416598435647">"הארגון שלך התקין רשות אישורים בפרופיל העבודה. ניתן לעקוב אחר התנועה ברשת המאובטחת או לשנות אותה."</string> <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"במכשיר זה מותקנת רשות אישורים. ניתן לעקוב אחר התנועה ברשת המאובטחת או לשנות אותה."</string> <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"מנהל המערכת הפעיל את התכונה \'רישום התנועה ברשת\', שמנטרת את תנועת הנתונים במכשיר."</string> <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"מנהל המערכת הפעיל את תכונת רישום התנועה ברשת, שמנטרת את תנועת הנתונים בפרופיל העבודה, אבל לא בפרופיל האישי."</string> - <string name="monitoring_description_named_vpn" msgid="5749932930634037027">"אתה מחובר לאפליקציה <xliff:g id="VPN_APP">%1$s</xliff:g>, שיכולה לעקוב אחר הפעילות שלך ברשת, כולל הודעות אימייל, אפליקציות ואתרים."</string> + <string name="monitoring_description_named_vpn" msgid="5749932930634037027">"התחברת לאפליקציה <xliff:g id="VPN_APP">%1$s</xliff:g>, שיכולה לעקוב אחר הפעילות שלך ברשת, כולל הודעות אימייל, אפליקציות ואתרים."</string> <string name="monitoring_description_two_named_vpns" msgid="3516830755681229463">"אתה מחובר לאפליקציות <xliff:g id="VPN_APP_0">%1$s</xliff:g> ו-<xliff:g id="VPN_APP_1">%2$s</xliff:g>, שיכולות לעקוב אחר הפעילות שלך ברשת, כולל הודעות אימייל, אפליקציות ואתרים."</string> <string name="monitoring_description_managed_profile_named_vpn" msgid="368812367182387320">"פרופיל העבודה שלך מחובר לאפליקציה <xliff:g id="VPN_APP">%1$s</xliff:g>, שיכולה לעקוב אחר הפעילות שלך ברשת, כולל הודעות אימייל, אפליקציות ואתרים."</string> <string name="monitoring_description_personal_profile_named_vpn" msgid="8179722332380953673">"הפרופיל האישי שלך מחובר לאפליקציה <xliff:g id="VPN_APP">%1$s</xliff:g>, שיכולה לעקוב אחר הפעילות שלך ברשת, כולל הודעות אימייל, אפליקציות ואתרים."</string> @@ -564,23 +562,23 @@ <string name="monitoring_description_do_body" msgid="7700878065625769970">"מנהל המערכת יכול לנטר ולנהל הגדרות, גישה ארגונית, אפליקציות, נתונים המשויכים למכשיר ומידע על מיקום המכשיר."</string> <string name="monitoring_description_do_learn_more_separator" msgid="1467280496376492558">" "</string> <string name="monitoring_description_do_learn_more" msgid="645149183455573790">"למידע נוסף"</string> - <string name="monitoring_description_do_body_vpn" msgid="7699280130070502303">"אתה מחובר לאפליקציה <xliff:g id="VPN_APP">%1$s</xliff:g>, שיכולה לעקוב אחר הפעילות שלך ברשת, כולל הודעות אימייל, אפליקציות ואתרים."</string> + <string name="monitoring_description_do_body_vpn" msgid="7699280130070502303">"התחברת לאפליקציה <xliff:g id="VPN_APP">%1$s</xliff:g>, שיכולה לעקוב אחר הפעילות שלך ברשת, כולל הודעות אימייל, אפליקציות ואתרים."</string> <string name="monitoring_description_vpn_settings_separator" msgid="8292589617720435430">" "</string> <string name="monitoring_description_vpn_settings" msgid="5264167033247632071">"להגדרות ה-VPN"</string> <string name="monitoring_description_ca_cert_settings_separator" msgid="7107390013344435439">" "</string> - <string name="monitoring_description_ca_cert_settings" msgid="8329781950135541003">"פתח את פרטי הכניסה המהימנים"</string> + <string name="monitoring_description_ca_cert_settings" msgid="8329781950135541003">"פתיחה של פרטי הכניסה המהימנים"</string> <string name="monitoring_description_network_logging" msgid="577305979174002252">"מנהל המערכת הפעיל את תכונת רישום התנועה ברשת, שמנטרת את תנועת הנתונים במכשיר.\n\nלמידע נוסף, צור קשר עם מנהל המערכת."</string> <string name="monitoring_description_vpn" msgid="1685428000684586870">"נתת לאפליקציה כלשהי הרשאה להגדיר חיבור VPN.\n\nהאפליקציה הזו יכולה לעקוב אחר הפעילות שלך ברשת ובמכשיר, כולל הודעות אימייל, אפליקציות ואתרים."</string> <string name="monitoring_description_vpn_profile_owned" msgid="4964237035412372751">"פרופיל העבודה שלך מנוהל על-ידי <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\n מנהל המערכת שלך יכול לעקוב אחרי הפעילות שלך ברשת, כולל פעילות באימייל, באפליקציות ובאתרים.\n\n למידע נוסף, צור קשר עם מנהל המערכת.\n\nבנוסף, אתה מחובר ל-VPN, שגם באמצעותו ניתן לעקוב אחרי הפעילות שלך ברשת."</string> <string name="monitoring_description_parental_controls" msgid="8184693528917051626">"מכשיר זה מנוהל על ידי ההורה שלך. להורה שלך יש אפשרות לצפות בפרטים כמו האפליקציות שבשימוש, המיקום וזמן המסך שלך, ולנהל אותם."</string> <string name="legacy_vpn_name" msgid="4174223520162559145">"VPN"</string> <string name="monitoring_description_app" msgid="376868879287922929">"אתה מחובר לאפליקציה <xliff:g id="APPLICATION">%1$s</xliff:g>, שיכולה לעקוב אחר הפעילות שלך ברשת, כולל הודעות אימייל, אפליקציות ואתרים."</string> - <string name="monitoring_description_app_personal" msgid="1970094872688265987">"אתה מחובר לאפליקציה <xliff:g id="APPLICATION">%1$s</xliff:g>, שיכולה לעקוב אחר הפעילות שלך ברשת הפרטית, כולל הודעות אימייל, אפליקציות ואתרים."</string> + <string name="monitoring_description_app_personal" msgid="1970094872688265987">"התחברת לאפליקציית <xliff:g id="APPLICATION">%1$s</xliff:g>, שיכולה לעקוב אחר הפעילות שלך ברשת, כולל הודעות אימייל, אפליקציות ואתרים."</string> <string name="branded_monitoring_description_app_personal" msgid="1703511985892688885">"אתה מחובר לאפליקציה <xliff:g id="APPLICATION">%1$s</xliff:g>, שיכולה לעקוב אחר הפעילות שלך ברשת הפרטית, כולל הודעות אימייל, אפליקציות ואתרים."</string> <string name="monitoring_description_app_work" msgid="3713084153786663662">"פרופיל העבודה שלך מנוהל על ידי <xliff:g id="ORGANIZATION">%1$s</xliff:g>. הפרופיל מחובר לאפליקציה <xliff:g id="APPLICATION">%2$s</xliff:g>, שיכולה לעקוב אחר הפעילות שלך ברשת, כולל הודעות אימייל, אפליקציות ואתרים.\n\nלמידע נוסף, פנה למנהל המערכת."</string> <string name="monitoring_description_app_personal_work" msgid="6175816356939166101">"פרופיל העבודה שלך מנוהל על ידי <xliff:g id="ORGANIZATION">%1$s</xliff:g>. הפרופיל מחובר לאפליקציה <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, שיכולה לעקוב אחר הפעילות שלך ברשת, כולל הודעות אימייל, אפליקציות ואתרים.\n\nהפרופיל מחובר גם לאפליקציה <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, שיכולה לעקוב אחר הפעילות שלך ברשת."</string> <string name="keyguard_indication_trust_unlocked" msgid="7395154975733744547">"הנעילה נמנעת על ידי סביבה אמינה"</string> - <string name="keyguard_indication_trust_disabled" msgid="6820793704816727918">"המכשיר יישאר נעול עד שתבטל את נעילתו באופן ידני"</string> + <string name="keyguard_indication_trust_disabled" msgid="6820793704816727918">"המכשיר יישאר נעול עד שהנעילה שלו תבוטל באופן ידני"</string> <string name="keyguard_indication_trust_unlocked_plugged_in" msgid="2323452175329362855">"<xliff:g id="KEYGUARD_INDICATION">%1$s</xliff:g>\n<xliff:g id="POWER_INDICATION">%2$s</xliff:g>"</string> <string name="hidden_notifications_title" msgid="1782412844777612795">"קבלה מהירה של התראות"</string> <string name="hidden_notifications_text" msgid="5899627470450792578">"צפה בהן לפני שתבטל נעילה"</string> @@ -589,7 +587,7 @@ <string name="zen_mode_and_condition" msgid="5043165189511223718">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> <string name="volume_zen_end_now" msgid="5901885672973736563">"כבה עכשיו"</string> <string name="accessibility_volume_settings" msgid="1458961116951564784">"הגדרות צליל"</string> - <string name="accessibility_volume_expand" msgid="7653070939304433603">"הרחב"</string> + <string name="accessibility_volume_expand" msgid="7653070939304433603">"הרחבה"</string> <string name="accessibility_volume_collapse" msgid="2746845391013829996">"כווץ"</string> <string name="volume_odi_captions_tip" msgid="8825655463280990941">"הוספת כתוביות אוטומטית למדיה"</string> <string name="accessibility_volume_close_odi_captions_tip" msgid="8924753283621160480">"סגירת הטיפ לגבי כתוביות"</string> @@ -613,7 +611,7 @@ <string name="screen_pinning_start" msgid="7483998671383371313">"האפליקציה הוצמדה"</string> <string name="screen_pinning_exit" msgid="4553787518387346893">"הצמדת האפליקציה בוטלה"</string> <string name="quick_settings_reset_confirmation_title" msgid="463533331480997595">"להסתיר<xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string> - <string name="quick_settings_reset_confirmation_message" msgid="2320586180785674186">"יופיע מחדש בפעם הבאה שתפעיל את האפשרות בהגדרות."</string> + <string name="quick_settings_reset_confirmation_message" msgid="2320586180785674186">"יופיע מחדש בפעם הבאה שהאפשרות הזו תופעל בהגדרות."</string> <string name="quick_settings_reset_confirmation_button" msgid="3341477479055016776">"הסתר"</string> <string name="stream_voice_call" msgid="7468348170702375660">"שיחה"</string> <string name="stream_system" msgid="7663148785370565134">"מערכת"</string> @@ -631,15 +629,15 @@ <string name="qs_status_phone_vibrate" msgid="7055409506885541979">"הטלפון במצב רטט"</string> <string name="qs_status_phone_muted" msgid="3763664791309544103">"הטלפון מושתק"</string> <string name="volume_stream_content_description_unmute" msgid="7729576371406792977">"%1$s. הקש כדי לבטל את ההשתקה."</string> - <string name="volume_stream_content_description_vibrate" msgid="4858111994183089761">"%1$s. הקש כדי להגדיר רטט. ייתכן ששירותי הנגישות מושתקים."</string> + <string name="volume_stream_content_description_vibrate" msgid="4858111994183089761">"%1$s. צריך להקיש כדי להגדיר רטט. ייתכן ששירותי הנגישות מושתקים."</string> <string name="volume_stream_content_description_mute" msgid="4079046784917920984">"%1$s. הקש כדי להשתיק. ייתכן ששירותי הנגישות מושתקים."</string> - <string name="volume_stream_content_description_vibrate_a11y" msgid="2742330052979397471">"%1$s. הקש כדי להעביר למצב רטט."</string> - <string name="volume_stream_content_description_mute_a11y" msgid="5743548478357238156">"%1$s. הקש כדי להשתיק."</string> + <string name="volume_stream_content_description_vibrate_a11y" msgid="2742330052979397471">"%1$s. יש להקיש כדי להעביר למצב רטט."</string> + <string name="volume_stream_content_description_mute_a11y" msgid="5743548478357238156">"%1$s. יש להקיש כדי להשתיק."</string> <string name="volume_ringer_change" msgid="3574969197796055532">"יש להקיש כדי לשנות את מצב תוכנת הצלצול"</string> <string name="volume_ringer_hint_mute" msgid="4263821214125126614">"השתקה"</string> <string name="volume_ringer_hint_unmute" msgid="6119086890306456976">"ביטול ההשתקה"</string> <string name="volume_ringer_hint_vibrate" msgid="6211609047099337509">"רטט"</string> - <string name="volume_dialog_title" msgid="6502703403483577940">"בקרי עוצמת שמע של %s"</string> + <string name="volume_dialog_title" msgid="6502703403483577940">"בקרי עוצמת קול של %s"</string> <string name="volume_dialog_ringer_guidance_ring" msgid="9143194270463146858">"הטלפון יצלצל כשמתקבלות שיחות והתראות (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string> <string name="output_title" msgid="3938776561655668350">"פלט מדיה"</string> <string name="output_calls_title" msgid="7085583034267889109">"פלט שיחת טלפון"</string> @@ -655,20 +653,18 @@ <string name="status_bar" msgid="4357390266055077437">"שורת סטטוס"</string> <string name="overview" msgid="3522318590458536816">"סקירה"</string> <string name="demo_mode" msgid="263484519766901593">"מצב הדגמה בממשק המשתמש של המערכת"</string> - <string name="enable_demo_mode" msgid="3180345364745966431">"הפעל מצב הדגמה"</string> - <string name="show_demo_mode" msgid="3677956462273059726">"הצג מצב הדגמה"</string> + <string name="enable_demo_mode" msgid="3180345364745966431">"הפעלת מצב הדגמה"</string> + <string name="show_demo_mode" msgid="3677956462273059726">"הצגת מצב הדגמה"</string> <string name="status_bar_ethernet" msgid="5690979758988647484">"אתרנט"</string> <string name="status_bar_alarm" msgid="87160847643623352">"התראה"</string> - <!-- no translation found for wallet_title (5369767670735827105) --> - <skip /> - <!-- no translation found for wallet_secondary_label (2017028770884957543) --> - <skip /> + <string name="wallet_title" msgid="5369767670735827105">"ארנק"</string> + <string name="wallet_secondary_label" msgid="2017028770884957543">"מוכן"</string> <string name="status_bar_work" msgid="5238641949837091056">"פרופיל עבודה"</string> <string name="status_bar_airplane" msgid="4848702508684541009">"מצב טיסה"</string> - <string name="add_tile" msgid="6239678623873086686">"הוסף אריח"</string> + <string name="add_tile" msgid="6239678623873086686">"הוספת אריח"</string> <string name="broadcast_tile" msgid="5224010633596487481">"אריח שידור"</string> - <string name="zen_alarm_warning_indef" msgid="5252866591716504287">"לא תשמע את ההתראה הבאה שלך <xliff:g id="WHEN">%1$s</xliff:g>, אלא אם תשבית קודם את ההגדרה הזו"</string> - <string name="zen_alarm_warning" msgid="7844303238486849503">"לא תשמע את ההתראה הבאה שלך <xliff:g id="WHEN">%1$s</xliff:g>"</string> + <string name="zen_alarm_warning_indef" msgid="5252866591716504287">"כדי לשמוע את ההתראה הבאה שלך <xliff:g id="WHEN">%1$s</xliff:g>, עליך להשבית את התכונה הזו"</string> + <string name="zen_alarm_warning" msgid="7844303238486849503">"לא ניתן יהיה לשמוע את ההתראה הבאה שלך <xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="alarm_template" msgid="2234991538018805736">"בשעה <xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="alarm_template_far" msgid="3561752195856839456">"ב-<xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="accessibility_quick_settings_detail" msgid="544463655956179791">"הגדרות מהירות, <xliff:g id="TITLE">%s</xliff:g>."</string> @@ -682,11 +678,11 @@ <string name="remove_from_settings" msgid="633775561782209994">"הסר מההגדרות"</string> <string name="remove_from_settings_prompt" msgid="551565437265615426">"האם להסיר את System UI Tuner ולהפסיק להשתמש בכל התכונות שלו?"</string> <string name="activity_not_found" msgid="8711661533828200293">"האפליקציה אינה מותקנת במכשיר"</string> - <string name="clock_seconds" msgid="8709189470828542071">"הצג שניות בשעון"</string> + <string name="clock_seconds" msgid="8709189470828542071">"הצגת שניות בשעון"</string> <string name="clock_seconds_desc" msgid="2415312788902144817">"הצג שניות בשעון בשורת הסטטוס. פעולה זו עשויה להשפיע על אורך חיי הסוללה."</string> <string name="qs_rearrange" msgid="484816665478662911">"סידור מחדש של הגדרות מהירות"</string> <string name="show_brightness" msgid="6700267491672470007">"הצג בהירות בהגדרות מהירות"</string> - <string name="experimental" msgid="3549865454812314826">"ניסיוני"</string> + <string name="experimental" msgid="3549865454812314826">"ניסיוניות"</string> <string name="enable_bluetooth_title" msgid="866883307336662596">"האם להפעיל את ה-Bluetooth?"</string> <string name="enable_bluetooth_message" msgid="6740938333772779717">"כדי לחבר את המקלדת לטאבלט, תחילה עליך להפעיל את ה-Bluetooth."</string> <string name="enable_bluetooth_confirmation_ok" msgid="2866408183324184876">"הפעלה"</string> @@ -793,7 +789,7 @@ <string name="battery_panel_title" msgid="5931157246673665963">"שימוש בסוללה"</string> <string name="battery_detail_charging_summary" msgid="8821202155297559706">"תכונת החיסכון בסוללה אינה זמינה בעת טעינת המכשיר"</string> <string name="battery_detail_switch_title" msgid="6940976502957380405">"חיסכון בסוללה"</string> - <string name="battery_detail_switch_summary" msgid="3668748557848025990">"מפחית את רמת הביצועים ואת נתוני הרקע"</string> + <string name="battery_detail_switch_summary" msgid="3668748557848025990">"מפחיתה את רמת הביצועים ואת נתוני הרקע"</string> <string name="keyboard_key_button_template" msgid="8005673627272051429">"לחצן <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="keyboard_key_home" msgid="3734400625170020657">"דף הבית"</string> <string name="keyboard_key_back" msgid="4185420465469481999">"הקודם"</string> @@ -888,7 +884,7 @@ <string-array name="clock_options"> <item msgid="3986445361435142273">"הצג שעות, דקות ושניות"</item> <item msgid="1271006222031257266">"הצג שעות ודקות (ברירת מחדל)"</item> - <item msgid="6135970080453877218">"אל תציג את הסמל הזה"</item> + <item msgid="6135970080453877218">"לא להציג את הסמל הזה"</item> </string-array> <string-array name="battery_options"> <item msgid="7714004721411852551">"הצג תמיד באחוזים"</item> @@ -912,7 +908,7 @@ <string name="accessibility_quick_settings_expand" msgid="2609275052412521467">"פתיחה של \'הגדרות מהירות\'."</string> <string name="accessibility_quick_settings_collapse" msgid="4674876336725041982">"סגירה של \'הגדרות מהירות\'."</string> <string name="accessibility_quick_settings_alarm_set" msgid="7237918261045099853">"הגדרת התראה."</string> - <string name="accessibility_quick_settings_user" msgid="505821942882668619">"מחובר בתור <xliff:g id="ID_1">%s</xliff:g>"</string> + <string name="accessibility_quick_settings_user" msgid="505821942882668619">"בוצעה כניסה בתור <xliff:g id="ID_1">%s</xliff:g>"</string> <string name="accessibility_quick_settings_choose_user_action" msgid="4554388498186576087">"בחירת משתמש"</string> <string name="data_connection_no_internet" msgid="691058178914184544">"אין אינטרנט"</string> <string name="accessibility_quick_settings_open_details" msgid="4879279912389052142">"פתיחת פרטים."</string> @@ -924,7 +920,7 @@ <string name="tuner_lock_screen" msgid="2267383813241144544">"מסך נעילה"</string> <string name="thermal_shutdown_title" msgid="2702966892682930264">"הטלפון כבה עקב התחממות"</string> <string name="thermal_shutdown_message" msgid="6142269839066172984">"הטלפון פועל כרגיל עכשיו.\nיש להקיש כדי להציג מידע נוסף"</string> - <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"הטלפון שלך התחמם יותר מדי וכבה כדי להתקרר. הטלפון פועל כרגיל עכשיו.\n\nייתכן שהטלפון יתחמם יותר מדי אם:\n • תשתמש באפליקציות עתירות משאבים (כגון משחקים, אפליקציות וידאו או אפליקציות ניווט)\n • תוריד או תעלה קבצים גדולים\n • תשתמש בטלפון בטמפרטורות גבוהות"</string> + <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"הטלפון שלך התחמם יותר מדי וכבה כדי להתקרר. הטלפון פועל כרגיל עכשיו.\n\nייתכן שהטלפון יתחמם יותר מדי אם:\n • משתמשים באפליקציות עתירות משאבים (כגון משחקים, אפליקציות וידאו או אפליקציות ניווט)\n • מורידים או מעלים קבצים גדולים\n • משתמשים בטלפון בסביבה עם טמפרטורות גבוהות"</string> <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"לצפייה בשלבי הטיפול"</string> <string name="high_temp_title" msgid="2218333576838496100">"הטלפון מתחמם"</string> <string name="high_temp_notif_message" msgid="1277346543068257549">"חלק מהתכונות מוגבלות כל עוד הטלפון מתקרר.\nיש להקיש כדי להציג מידע נוסף"</string> @@ -978,7 +974,7 @@ <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"הספק שלך"</string> <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> + <string name="slice_permission_text_1" msgid="6675965177075443714">"- תהיה לה אפשרות לקרוא מידע מאפליקציית <xliff:g id="APP">%1$s</xliff:g>"</string> <string name="slice_permission_text_2" msgid="6758906940360746983">"- תהיה לה יכולת לנקוט פעולה בתוך <xliff:g id="APP">%1$s</xliff:g>"</string> <string name="slice_permission_checkbox" msgid="4242888137592298523">"יש לאשר ל-<xliff:g id="APP">%1$s</xliff:g> להראות חלקים מכל אפליציה שהיא"</string> <string name="slice_permission_allow" msgid="6340449521277951123">"אני רוצה לאשר"</string> @@ -1048,7 +1044,7 @@ <string name="accessibility_control_favorite_position" msgid="54220258048929221">"סומן כהעדפה, במיקום <xliff:g id="NUMBER">%d</xliff:g>"</string> <string name="accessibility_control_not_favorite" msgid="1291760269563092359">"הוסר מהמועדפים"</string> <string name="accessibility_control_change_favorite" msgid="2943178027582253261">"להוסיף למועדפים"</string> - <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"להוסיף למועדפים"</string> + <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"להסיר מהמועדפים"</string> <string name="accessibility_control_move" msgid="8980344493796647792">"העברה למיקום <xliff:g id="NUMBER">%d</xliff:g>"</string> <string name="controls_favorite_default_title" msgid="967742178688938137">"פקדים"</string> <string name="controls_favorite_subtitle" msgid="6604402232298443956">"יש לבחור פקדים לגישה מתפריט ההפעלה"</string> diff --git a/packages/SystemUI/res/values-ja/strings.xml b/packages/SystemUI/res/values-ja/strings.xml index 01ad3d356605..44fed70d7198 100644 --- a/packages/SystemUI/res/values-ja/strings.xml +++ b/packages/SystemUI/res/values-ja/strings.xml @@ -412,7 +412,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"日の出まで"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"<xliff:g id="TIME">%s</xliff:g>にオン"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"<xliff:g id="TIME">%s</xliff:g>まで"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"明るさを下げる"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"NFC は無効です"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"NFC は有効です"</string> @@ -652,10 +651,8 @@ <string name="show_demo_mode" msgid="3677956462273059726">"デモモードを表示"</string> <string name="status_bar_ethernet" msgid="5690979758988647484">"イーサネット"</string> <string name="status_bar_alarm" msgid="87160847643623352">"アラーム"</string> - <!-- no translation found for wallet_title (5369767670735827105) --> - <skip /> - <!-- no translation found for wallet_secondary_label (2017028770884957543) --> - <skip /> + <string name="wallet_title" msgid="5369767670735827105">"ウォレット"</string> + <string name="wallet_secondary_label" msgid="2017028770884957543">"準備完了"</string> <string name="status_bar_work" msgid="5238641949837091056">"仕事用プロファイル"</string> <string name="status_bar_airplane" msgid="4848702508684541009">"機内モード"</string> <string name="add_tile" msgid="6239678623873086686">"タイルを追加"</string> diff --git a/packages/SystemUI/res/values-ka/strings.xml b/packages/SystemUI/res/values-ka/strings.xml index cd95dd7e292a..cbed6a8e0b76 100644 --- a/packages/SystemUI/res/values-ka/strings.xml +++ b/packages/SystemUI/res/values-ka/strings.xml @@ -412,7 +412,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"მზის ამოსვლამდე"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"ჩაირთოს <xliff:g id="TIME">%s</xliff:g>-ზე"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"<xliff:g id="TIME">%s</xliff:g>-მდე"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"სიკაშკაშის შემცირება"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"NFC გათიშულია"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"NFC ჩართულია"</string> @@ -652,10 +651,8 @@ <string name="show_demo_mode" msgid="3677956462273059726">"დემო-რეჟიმის ჩვენება"</string> <string name="status_bar_ethernet" msgid="5690979758988647484">"ეთერნეტი"</string> <string name="status_bar_alarm" msgid="87160847643623352">"მაღვიძარა"</string> - <!-- no translation found for wallet_title (5369767670735827105) --> - <skip /> - <!-- no translation found for wallet_secondary_label (2017028770884957543) --> - <skip /> + <string name="wallet_title" msgid="5369767670735827105">"Wallet"</string> + <string name="wallet_secondary_label" msgid="2017028770884957543">"მზადაა"</string> <string name="status_bar_work" msgid="5238641949837091056">"სამსახურის პროფილი"</string> <string name="status_bar_airplane" msgid="4848702508684541009">"თვითმფრინავის რეჟიმი"</string> <string name="add_tile" msgid="6239678623873086686">"მოზაიკის დამატება"</string> diff --git a/packages/SystemUI/res/values-kk/strings.xml b/packages/SystemUI/res/values-kk/strings.xml index ccdc0b6c1280..20a326f04ee5 100644 --- a/packages/SystemUI/res/values-kk/strings.xml +++ b/packages/SystemUI/res/values-kk/strings.xml @@ -412,7 +412,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"Күн шыққанға дейін"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"Қосылу уақыты: <xliff:g id="TIME">%s</xliff:g>"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"<xliff:g id="TIME">%s</xliff:g> дейін"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"Жарықтығын азайту"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"NFC өшірулі"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"NFC қосулы"</string> @@ -652,10 +651,8 @@ <string name="show_demo_mode" msgid="3677956462273059726">"Демо режимін көрсету"</string> <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Дабыл"</string> - <!-- no translation found for wallet_title (5369767670735827105) --> - <skip /> - <!-- no translation found for wallet_secondary_label (2017028770884957543) --> - <skip /> + <string name="wallet_title" msgid="5369767670735827105">"Әмиян"</string> + <string name="wallet_secondary_label" msgid="2017028770884957543">"Дайын"</string> <string name="status_bar_work" msgid="5238641949837091056">"Жұмыс профилі"</string> <string name="status_bar_airplane" msgid="4848702508684541009">"Ұшақ режимі"</string> <string name="add_tile" msgid="6239678623873086686">"Тақтайша қосу"</string> diff --git a/packages/SystemUI/res/values-km/strings.xml b/packages/SystemUI/res/values-km/strings.xml index 29691d1cfdb3..93715e2b2498 100644 --- a/packages/SystemUI/res/values-km/strings.xml +++ b/packages/SystemUI/res/values-km/strings.xml @@ -412,7 +412,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"រហូតដល់ពេលថ្ងៃរះ"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"បើកនៅម៉ោង <xliff:g id="TIME">%s</xliff:g>"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"រហូតដល់ម៉ោង <xliff:g id="TIME">%s</xliff:g>"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"បន្ថយពន្លឺ"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"បានបិទ NFC"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"បានបើក NFC"</string> @@ -652,10 +651,8 @@ <string name="show_demo_mode" msgid="3677956462273059726">"បង្ហាញរបៀបសាកល្បង"</string> <string name="status_bar_ethernet" msgid="5690979758988647484">"អ៊ីសឺរណិត"</string> <string name="status_bar_alarm" msgid="87160847643623352">"ម៉ោងរោទ៍"</string> - <!-- no translation found for wallet_title (5369767670735827105) --> - <skip /> - <!-- no translation found for wallet_secondary_label (2017028770884957543) --> - <skip /> + <string name="wallet_title" msgid="5369767670735827105">"កាបូប"</string> + <string name="wallet_secondary_label" msgid="2017028770884957543">"រួចរាល់"</string> <string name="status_bar_work" msgid="5238641949837091056">"ប្រវត្តិរូបការងារ"</string> <string name="status_bar_airplane" msgid="4848702508684541009">"របៀបក្នុងយន្តហោះ"</string> <string name="add_tile" msgid="6239678623873086686">"បន្ថែមក្រឡាល្អិត"</string> diff --git a/packages/SystemUI/res/values-kn/strings.xml b/packages/SystemUI/res/values-kn/strings.xml index 95fb699cd630..ba058f8fb85c 100644 --- a/packages/SystemUI/res/values-kn/strings.xml +++ b/packages/SystemUI/res/values-kn/strings.xml @@ -412,7 +412,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"ಸೂರ್ಯೋದಯದವರೆಗೆ"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"<xliff:g id="TIME">%s</xliff:g> ಸಮಯದಲ್ಲಿ"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"<xliff:g id="TIME">%s</xliff:g> ವರೆಗೂ"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"ಪ್ರಖರತೆಯನ್ನು ಕಡಿಮೆ ಮಾಡಿ"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"NFC ನಿಷ್ಕ್ರಿಯಗೊಂಡಿದೆ"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"NFC ಸಕ್ರಿಯಗೊಂಡಿದೆ"</string> @@ -541,8 +540,7 @@ <string name="monitoring_button_view_policies" msgid="3869724835853502410">"ಕಾರ್ಯನೀತಿಗಳನ್ನು ವೀಕ್ಷಿಸಿ"</string> <string name="monitoring_button_view_controls" msgid="8316440345340701117">"ನಿಯಂತ್ರಣಗಳನ್ನು ವೀಕ್ಷಿಸಿ"</string> <string name="monitoring_description_named_management" msgid="505833016545056036">"ಈ ಸಾಧನವು <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> ಗೆ ಸೇರಿದೆ.\n\nಸೆಟ್ಟಿಂಗ್ಗಳು, ಕಾರ್ಪೊರೇಟ್ ಪ್ರವೇಶ, ಆ್ಯಪ್ಗಳು, ನಿಮ್ಮ ಸಾಧನಕ್ಕೆ ಸಂಬಂಧಿಸಿದ ಡೇಟಾ ಮತ್ತು ನಿಮ್ಮ ಸಾಧನದ ಸ್ಥಳದ ಮಾಹಿತಿಯನ್ನು ನಿಮ್ಮ IT ನಿರ್ವಾಹಕರು ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಬಹುದು ಮತ್ತು ನಿರ್ವಹಿಸಬಹುದು.\n\nಹೆಚ್ಚಿನ ಮಾಹಿತಿಗಾಗಿ ನಿಮ್ಮ IT ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಿಸಿ."</string> - <!-- no translation found for monitoring_financed_description_named_management (6108439201399938668) --> - <skip /> + <string name="monitoring_financed_description_named_management" msgid="6108439201399938668">"<xliff:g id="ORGANIZATION_NAME_0">%1$s</xliff:g> ಗೆ ಈ ಸಾಧನದ ಜೊತೆಗೆ ಸಂಯೋಜಿತವಾಗಿರುವ ಡೇಟಾವನ್ನು ಪ್ರವೇಶಿಸಲು, ಆ್ಯಪ್ಗಳನ್ನು ನಿರ್ವಹಿಸಲು ಮತ್ತು ಈ ಸಾಧನಗಳ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ಬದಲಾಯಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತದೆ.\n\nನಿಮ್ಮ ಬಳಿ ಪ್ರಶ್ನೆಗಳಿದ್ದರೆ, <xliff:g id="ORGANIZATION_NAME_1">%2$s</xliff:g> ಅನ್ನು ಸಂಪರ್ಕಿಸಿ."</string> <string name="monitoring_description_management" msgid="4308879039175729014">"ಈ ಸಾಧನವು ನಿಮ್ಮ ಸಂಸ್ಥೆಗೆ ಸೇರಿದೆ.\n\nಸೆಟ್ಟಿಂಗ್ಗಳು, ಕಾರ್ಪೊರೇಟ್ ಪ್ರವೇಶ, ಆ್ಯಪ್ಗಳು, ನಿಮ್ಮ ಸಾಧನಕ್ಕೆ ಸಂಬಂಧಿಸಿದ ಡೇಟಾ ಮತ್ತು ನಿಮ್ಮ ಸಾಧನದ ಸ್ಥಳದ ಮಾಹಿತಿಯನ್ನು ನಿಮ್ಮ IT ನಿರ್ವಾಹಕರು ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಬಹುದು ಮತ್ತು ನಿರ್ವಹಿಸಬಹುದು.\n\nಹೆಚ್ಚಿನ ಮಾಹಿತಿಗಾಗಿ ನಿಮ್ಮ IT ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಿಸಿ."</string> <string name="monitoring_description_management_ca_certificate" msgid="7785013130658110130">"ನಿಮ್ಮ ಸಂಸ್ಥೆಯು ಈ ಸಾಧನದಲ್ಲಿ ಪ್ರಮಾಣಪತ್ರ ಅಂಗೀಕಾರವನ್ನು ಸ್ಥಾಪಿಸಿದೆ. ನಿಮ್ಮ ಸುರಕ್ಷಿತ ನೆಟ್ವರ್ಕ್ ಟ್ರಾಫಿಕ್ ಅನ್ನು ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಬಹುದು ಅಥವಾ ಮಾರ್ಪಡಿಸಬಹುದು."</string> <string name="monitoring_description_managed_profile_ca_certificate" msgid="7904323416598435647">"ನಿಮ್ಮ ಸಂಸ್ಥೆಯು ನಿಮ್ಮ ಉದ್ಯೋಗ ಪ್ರೊಫೈಲ್ನಲ್ಲಿ ಪ್ರಮಾಣಪತ್ರ ಅಂಗೀಕಾರವನ್ನು ಸ್ಥಾಪಿಸಿದೆ. ನಿಮ್ಮ ಸುರಕ್ಷಿತ ನೆಟ್ವರ್ಕ್ ಟ್ರಾಫಿಕ್ ಅನ್ನು ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಬಹುದು ಅಥವಾ ಮಾರ್ಪಡಿಸಬಹುದು."</string> @@ -653,10 +651,8 @@ <string name="show_demo_mode" msgid="3677956462273059726">"ಡೆಮೊ ಮೋಡ್ ತೋರಿಸು"</string> <string name="status_bar_ethernet" msgid="5690979758988647484">"ಇಥರ್ನೆಟ್"</string> <string name="status_bar_alarm" msgid="87160847643623352">"ಅಲಾರಮ್"</string> - <!-- no translation found for wallet_title (5369767670735827105) --> - <skip /> - <!-- no translation found for wallet_secondary_label (2017028770884957543) --> - <skip /> + <string name="wallet_title" msgid="5369767670735827105">"ವಾಲೆಟ್"</string> + <string name="wallet_secondary_label" msgid="2017028770884957543">"ಸಿದ್ಧವಾಗಿದೆ"</string> <string name="status_bar_work" msgid="5238641949837091056">"ಕೆಲಸದ ಪ್ರೊಫೈಲ್"</string> <string name="status_bar_airplane" msgid="4848702508684541009">"ಏರ್ಪ್ಲೇನ್ ಮೋಡ್"</string> <string name="add_tile" msgid="6239678623873086686">"ಟೈಲ್ ಸೇರಿಸಿ"</string> diff --git a/packages/SystemUI/res/values-ko/strings.xml b/packages/SystemUI/res/values-ko/strings.xml index 376788852df3..3a519e53c802 100644 --- a/packages/SystemUI/res/values-ko/strings.xml +++ b/packages/SystemUI/res/values-ko/strings.xml @@ -412,7 +412,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"일출까지"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"<xliff:g id="TIME">%s</xliff:g>에 켜짐"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"<xliff:g id="TIME">%s</xliff:g>까지"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"밝기 낮추기"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"NFC 사용 중지됨"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"NFC 사용 설정됨"</string> @@ -541,7 +540,7 @@ <string name="monitoring_button_view_policies" msgid="3869724835853502410">"정책 보기"</string> <string name="monitoring_button_view_controls" msgid="8316440345340701117">"제어 기능 보기"</string> <string name="monitoring_description_named_management" msgid="505833016545056036">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>에 속한 기기입니다.\n\nIT 관리자가 설정, 기업 액세스, 앱, 기기와 연결된 데이터, 기기 위치 정보를 모니터링 및 관리할 수 있습니다.\n\n자세한 정보를 확인하려면 IT 관리자에게 문의하세요."</string> - <string name="monitoring_financed_description_named_management" msgid="6108439201399938668">"<xliff:g id="ORGANIZATION_NAME_0">%1$s</xliff:g>에서 이 기기와 연결된 데이터에 액세스하고 앱을 관리하고 기기 설정을 변경할 수 있습니다.\n\n궁금한 점이 있으면 <xliff:g id="ORGANIZATION_NAME_1">%2$s</xliff:g>에 문의하세요."</string> + <string name="monitoring_financed_description_named_management" msgid="6108439201399938668">"<xliff:g id="ORGANIZATION_NAME_0">%1$s</xliff:g>에서 이 기기와 연결된 데이터에 액세스하고 앱을 관리하며 기기 설정을 변경할 수 있습니다.\n\n궁금한 점이 있으면 <xliff:g id="ORGANIZATION_NAME_1">%2$s</xliff:g>에 문의하세요."</string> <string name="monitoring_description_management" msgid="4308879039175729014">"내 조직에 속한 기기입니다.\n\nIT 관리자가 설정, 기업 액세스, 앱, 기기와 연결된 데이터, 기기 위치 정보를 모니터링 및 관리할 수 있습니다.\n\n자세한 정보를 확인하려면 IT 관리자에게 문의하세요."</string> <string name="monitoring_description_management_ca_certificate" msgid="7785013130658110130">"조직에서 이 기기에 인증기관을 설치했습니다. 보안 네트워크 트래픽을 모니터링 또는 수정할 수 있습니다."</string> <string name="monitoring_description_managed_profile_ca_certificate" msgid="7904323416598435647">"조직에서 직장 프로필에 인증기관을 설치했습니다. 보안 네트워크 트래픽을 모니터링 또는 수정할 수 있습니다."</string> @@ -652,10 +651,8 @@ <string name="show_demo_mode" msgid="3677956462273059726">"데모 모드 표시"</string> <string name="status_bar_ethernet" msgid="5690979758988647484">"이더넷"</string> <string name="status_bar_alarm" msgid="87160847643623352">"알람"</string> - <!-- no translation found for wallet_title (5369767670735827105) --> - <skip /> - <!-- no translation found for wallet_secondary_label (2017028770884957543) --> - <skip /> + <string name="wallet_title" msgid="5369767670735827105">"Wallet"</string> + <string name="wallet_secondary_label" msgid="2017028770884957543">"준비됨"</string> <string name="status_bar_work" msgid="5238641949837091056">"직장 프로필"</string> <string name="status_bar_airplane" msgid="4848702508684541009">"비행기 모드"</string> <string name="add_tile" msgid="6239678623873086686">"타일 추가"</string> diff --git a/packages/SystemUI/res/values-ky/strings.xml b/packages/SystemUI/res/values-ky/strings.xml index 4897b72b6ee2..f637222cced3 100644 --- a/packages/SystemUI/res/values-ky/strings.xml +++ b/packages/SystemUI/res/values-ky/strings.xml @@ -412,7 +412,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"Күн чыкканга чейин"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"Саат <xliff:g id="TIME">%s</xliff:g> күйөт"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"<xliff:g id="TIME">%s</xliff:g> чейин"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"Экрандын жарыктыгын төмөндөтүү"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"NFC өчүрүлгөн"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"NFC иштетилген"</string> @@ -652,10 +651,8 @@ <string name="show_demo_mode" msgid="3677956462273059726">"Демо режимин көрсөтүү"</string> <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Ойготкуч"</string> - <!-- no translation found for wallet_title (5369767670735827105) --> - <skip /> - <!-- no translation found for wallet_secondary_label (2017028770884957543) --> - <skip /> + <string name="wallet_title" msgid="5369767670735827105">"Wallet"</string> + <string name="wallet_secondary_label" msgid="2017028770884957543">"Даяр"</string> <string name="status_bar_work" msgid="5238641949837091056">"Жумуш профили"</string> <string name="status_bar_airplane" msgid="4848702508684541009">"Учак режими"</string> <string name="add_tile" msgid="6239678623873086686">"Тайл кошуу"</string> @@ -675,8 +672,8 @@ <string name="remove_from_settings" msgid="633775561782209994">"Жөндөөлөрдөн алып салуу"</string> <string name="remove_from_settings_prompt" msgid="551565437265615426">"System UI Tuner Жөндөөлөрдөн өчүрүлүп, анын бардык функциялары токтотулсунбу?"</string> <string name="activity_not_found" msgid="8711661533828200293">"Колдонмо сиздин түзмөгүңүздө орнотулган эмес"</string> - <string name="clock_seconds" msgid="8709189470828542071">"Сааттын секунддары көрсөтүлсүн"</string> - <string name="clock_seconds_desc" msgid="2415312788902144817">"Абал тилкесинен сааттын секунддары көрсөтүлсүн. Батареянын кубаты көбүрөөк сарпталышы мүмкүн."</string> + <string name="clock_seconds" msgid="8709189470828542071">"Сааттын секунддары көрүнсүн"</string> + <string name="clock_seconds_desc" msgid="2415312788902144817">"Абал тилкесинен сааттын секунддары көрүнсүн. Батареянын кубаты көбүрөөк сарпталышы мүмкүн."</string> <string name="qs_rearrange" msgid="484816665478662911">"Ыкчам жөндөөлөрдү кайра коюу"</string> <string name="show_brightness" msgid="6700267491672470007">"Ыкчам жөндөөлөрдөн жарык деңгээлин көрсөтүү"</string> <string name="experimental" msgid="3549865454812314826">"Сынамык"</string> @@ -685,7 +682,7 @@ <string name="enable_bluetooth_confirmation_ok" msgid="2866408183324184876">"Күйгүзүү"</string> <string name="show_silently" msgid="5629369640872236299">"Үнсүз көрүнөт"</string> <string name="block" msgid="188483833983476566">"Бардык билдирмелерди бөгөттөө"</string> - <string name="do_not_silence" msgid="4982217934250511227">"Үнү менен көрсөтүлсүн"</string> + <string name="do_not_silence" msgid="4982217934250511227">"Үнү менен көрүнсүн"</string> <string name="do_not_silence_block" msgid="4361847809775811849">"Үнү менен көрсөтүлүп бөгөттөлбөсүн"</string> <string name="tuner_full_importance_settings" msgid="1388025816553459059">"Эскертмелерди башкаруу каражаттары"</string> <string name="tuner_full_importance_settings_on" msgid="917981436602311547">"Күйүк"</string> @@ -825,7 +822,7 @@ <string name="keyboard_shortcut_group_applications_music" msgid="9032078456666204025">"Музыка"</string> <string name="keyboard_shortcut_group_applications_youtube" msgid="5078136084632450333">"YouTube"</string> <string name="keyboard_shortcut_group_applications_calendar" msgid="4229602992120154157">"Жылнаама"</string> - <string name="tuner_full_zen_title" msgid="5120366354224404511">"Үн көзөмөлдөгүчтөрү менен көрсөтүлсүн"</string> + <string name="tuner_full_zen_title" msgid="5120366354224404511">"Үн көзөмөлдөгүчтөрү менен көрүнсүн"</string> <string name="volume_and_do_not_disturb" msgid="502044092739382832">"Тынчымды алба"</string> <string name="volume_dnd_silent" msgid="4154597281458298093">"Үндү көзөмөлдөөчү баскычтардын кыска жолдору"</string> <string name="volume_up_silent" msgid="1035180298885717790">"Үн катуулатылганда \"Тынчымды алба\" режиминен чыгуу"</string> @@ -880,8 +877,8 @@ <item msgid="6135970080453877218">"Бул сүрөтчө көрүнбөсүн"</item> </string-array> <string-array name="battery_options"> - <item msgid="7714004721411852551">"Ар дайым пайызы көрсөтүлсүн"</item> - <item msgid="3805744470661798712">"Кубаттоо учурунда пайызы көрсөтүлсүн (демейки)"</item> + <item msgid="7714004721411852551">"Ар дайым пайызы көрүнсүн"</item> + <item msgid="3805744470661798712">"Кубаттоо учурунда пайызы көрүнсүн (демейки)"</item> <item msgid="8619482474544321778">"Бул сүрөтчө көрүнбөсүн"</item> </string-array> <string name="tuner_low_priority" msgid="8412666814123009820">"Анча маанилүү эмес билдирменин сүрөтчөлөрүн көрсөтүү"</string> diff --git a/packages/SystemUI/res/values-lo/strings.xml b/packages/SystemUI/res/values-lo/strings.xml index 7b7c7b1aef87..4c2a5cb1cfac 100644 --- a/packages/SystemUI/res/values-lo/strings.xml +++ b/packages/SystemUI/res/values-lo/strings.xml @@ -412,7 +412,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"ຈົນກວ່າຕາເວັນຂຶ້ນ"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"ເປີດເວລາ <xliff:g id="TIME">%s</xliff:g>"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"ຈົນຮອດ <xliff:g id="TIME">%s</xliff:g>"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"ຫຼຸດຄວາມສະຫວ່າງລົງ"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"NFC is disabled"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"NFC is enabled"</string> @@ -652,10 +651,8 @@ <string name="show_demo_mode" msgid="3677956462273059726">"ສະແດງໂຫມດສາທິດ"</string> <string name="status_bar_ethernet" msgid="5690979758988647484">"ອີເທເນັດ"</string> <string name="status_bar_alarm" msgid="87160847643623352">"ໂມງປຸກ"</string> - <!-- no translation found for wallet_title (5369767670735827105) --> - <skip /> - <!-- no translation found for wallet_secondary_label (2017028770884957543) --> - <skip /> + <string name="wallet_title" msgid="5369767670735827105">"ກະເປົາ"</string> + <string name="wallet_secondary_label" msgid="2017028770884957543">"ພ້ອມແລ້ວ"</string> <string name="status_bar_work" msgid="5238641949837091056">"ໂປຣໄຟລ໌ບ່ອນເຮັດວຽກ"</string> <string name="status_bar_airplane" msgid="4848702508684541009">"ໂໝດເຮືອບິນ"</string> <string name="add_tile" msgid="6239678623873086686">"ເພີ່ມລາຍຕາກະໂລ່"</string> diff --git a/packages/SystemUI/res/values-lt/strings.xml b/packages/SystemUI/res/values-lt/strings.xml index 5f17f4d9054b..ca02dc8edbe8 100644 --- a/packages/SystemUI/res/values-lt/strings.xml +++ b/packages/SystemUI/res/values-lt/strings.xml @@ -416,7 +416,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"Iki saulėtekio"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"<xliff:g id="TIME">%s</xliff:g>"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"Iki <xliff:g id="TIME">%s</xliff:g>"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"Šviesumo mažinimas"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"ALR"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"ALR išjungtas"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"ALR įjungtas"</string> @@ -658,10 +657,8 @@ <string name="show_demo_mode" msgid="3677956462273059726">"Rodyti demonstraciniu režimu"</string> <string name="status_bar_ethernet" msgid="5690979758988647484">"Eternetas"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Signalas"</string> - <!-- no translation found for wallet_title (5369767670735827105) --> - <skip /> - <!-- no translation found for wallet_secondary_label (2017028770884957543) --> - <skip /> + <string name="wallet_title" msgid="5369767670735827105">"Piniginė"</string> + <string name="wallet_secondary_label" msgid="2017028770884957543">"Paruošta"</string> <string name="status_bar_work" msgid="5238641949837091056">"Darbo profilis"</string> <string name="status_bar_airplane" msgid="4848702508684541009">"Lėktuvo režimas"</string> <string name="add_tile" msgid="6239678623873086686">"Pridėti išklotinės elementą"</string> diff --git a/packages/SystemUI/res/values-lv/strings.xml b/packages/SystemUI/res/values-lv/strings.xml index 4f17905e1a11..c35578422dd4 100644 --- a/packages/SystemUI/res/values-lv/strings.xml +++ b/packages/SystemUI/res/values-lv/strings.xml @@ -414,7 +414,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"Līdz saullēktam"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"Plkst. <xliff:g id="TIME">%s</xliff:g>"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"Līdz plkst. <xliff:g id="TIME">%s</xliff:g>"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"Samazināt spilgtumu"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"NFC ir atspējoti"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"NFC ir iespējoti"</string> @@ -655,10 +654,8 @@ <string name="show_demo_mode" msgid="3677956462273059726">"Rādīt demonstrācijas režīmu"</string> <string name="status_bar_ethernet" msgid="5690979758988647484">"Tīkls Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Signāls"</string> - <!-- no translation found for wallet_title (5369767670735827105) --> - <skip /> - <!-- no translation found for wallet_secondary_label (2017028770884957543) --> - <skip /> + <string name="wallet_title" msgid="5369767670735827105">"Maks"</string> + <string name="wallet_secondary_label" msgid="2017028770884957543">"Gatavs"</string> <string name="status_bar_work" msgid="5238641949837091056">"Darba profils"</string> <string name="status_bar_airplane" msgid="4848702508684541009">"Lidojuma režīms"</string> <string name="add_tile" msgid="6239678623873086686">"Pievienot elementu"</string> diff --git a/packages/SystemUI/res/values-mk/strings.xml b/packages/SystemUI/res/values-mk/strings.xml index d571df718cf2..06718c1a595e 100644 --- a/packages/SystemUI/res/values-mk/strings.xml +++ b/packages/SystemUI/res/values-mk/strings.xml @@ -412,7 +412,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"До изгрејсонце"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"Се вклучува во <xliff:g id="TIME">%s</xliff:g>"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"До <xliff:g id="TIME">%s</xliff:g>"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"Намалување на осветленоста"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"NFC е оневозможено"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"NFC е овозможено"</string> @@ -652,10 +651,8 @@ <string name="show_demo_mode" msgid="3677956462273059726">"Прикажи демо-режим"</string> <string name="status_bar_ethernet" msgid="5690979758988647484">"Етернет"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Аларм"</string> - <!-- no translation found for wallet_title (5369767670735827105) --> - <skip /> - <!-- no translation found for wallet_secondary_label (2017028770884957543) --> - <skip /> + <string name="wallet_title" msgid="5369767670735827105">"Паричник"</string> + <string name="wallet_secondary_label" msgid="2017028770884957543">"Подготвено"</string> <string name="status_bar_work" msgid="5238641949837091056">"Работен профил"</string> <string name="status_bar_airplane" msgid="4848702508684541009">"Авионски режим"</string> <string name="add_tile" msgid="6239678623873086686">"Додај плочка"</string> diff --git a/packages/SystemUI/res/values-ml/strings.xml b/packages/SystemUI/res/values-ml/strings.xml index 131109c122da..36a8a5491f44 100644 --- a/packages/SystemUI/res/values-ml/strings.xml +++ b/packages/SystemUI/res/values-ml/strings.xml @@ -412,7 +412,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"സൂര്യോദയം വരെ"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"<xliff:g id="TIME">%s</xliff:g>-ന്"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"<xliff:g id="TIME">%s</xliff:g> വരെ"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"തെളിച്ചം കുറയ്ക്കുക"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"NFC പ്രവർത്തനരഹിതമാക്കി"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"NFC പ്രവർത്തനക്ഷമമാക്കി"</string> @@ -652,10 +651,8 @@ <string name="show_demo_mode" msgid="3677956462273059726">"ഡെമോ മോഡ് കാണിക്കുക"</string> <string name="status_bar_ethernet" msgid="5690979758988647484">"ഇതർനെറ്റ്"</string> <string name="status_bar_alarm" msgid="87160847643623352">"അലാറം"</string> - <!-- no translation found for wallet_title (5369767670735827105) --> - <skip /> - <!-- no translation found for wallet_secondary_label (2017028770884957543) --> - <skip /> + <string name="wallet_title" msgid="5369767670735827105">"Wallet"</string> + <string name="wallet_secondary_label" msgid="2017028770884957543">"തയ്യാറാണ്"</string> <string name="status_bar_work" msgid="5238641949837091056">"ഔദ്യോഗിക പ്രൊഫൈൽ"</string> <string name="status_bar_airplane" msgid="4848702508684541009">"ഫ്ലൈറ്റ് മോഡ്"</string> <string name="add_tile" msgid="6239678623873086686">"ടൈൽ ചേർക്കുക"</string> @@ -716,7 +713,7 @@ <string name="notification_automatic_title" msgid="3745465364578762652">"സ്വയമേവ"</string> <string name="notification_channel_summary_low" msgid="4860617986908931158">"ശബ്ദമോ വൈബ്രേഷനോ ഇല്ല"</string> <string name="notification_conversation_summary_low" msgid="1734433426085468009">"ശബ്ദമോ വൈബ്രേഷനോ ഇല്ല, സംഭാഷണ വിഭാഗത്തിന് താഴെയായി ദൃശ്യമാകും"</string> - <string name="notification_channel_summary_default" msgid="3282930979307248890">"ഫോൺ ക്രമീകരണം അടിസ്ഥാനമാക്കി റിംഗ് ചെയ്തേക്കാം അല്ലെങ്കിൽ വൈബ്രേറ്റ് ചെയ്തേക്കാം"</string> + <string name="notification_channel_summary_default" msgid="3282930979307248890">"ഫോൺ ക്രമീകരണം അടിസ്ഥാനമാക്കി റിംഗ്/വൈബ്രേറ്റ് ചെയ്യും"</string> <string name="notification_channel_summary_default_with_bubbles" msgid="1782419896613644568">"ഫോൺ ക്രമീകരണം അടിസ്ഥാനമാക്കി റിംഗ് ചെയ്തേക്കാം അല്ലെങ്കിൽ വൈബ്രേറ്റ് ചെയ്തേക്കാം. <xliff:g id="APP_NAME">%1$s</xliff:g>-ൽ നിന്നുള്ള സംഭാഷണങ്ങൾ ഡിഫോൾട്ടായി ബബ്ൾ ആവുന്നു."</string> <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"ഈ ഉള്ളടക്കത്തിലേക്ക് ഒരു ഫ്ലോട്ടിംഗ് കുറുക്കുവഴി ഉപയോഗിച്ച് നിങ്ങളുടെ ശ്രദ്ധ നിലനിർത്തുന്നു."</string> <string name="notification_channel_summary_automatic" msgid="5813109268050235275">"ഈ അറിയിപ്പ് വരുമ്പോൾ ശബ്ദിക്കുകയാണോ വൈബ്രേറ്റ് ചെയ്യുകയാണോ വേണ്ടതെന്ന് നിർണ്ണയിക്കാൻ സിസ്റ്റത്തെ അനുവദിക്കുക"</string> diff --git a/packages/SystemUI/res/values-mn/strings.xml b/packages/SystemUI/res/values-mn/strings.xml index a6b9055bc51e..fdf0eab0029e 100644 --- a/packages/SystemUI/res/values-mn/strings.xml +++ b/packages/SystemUI/res/values-mn/strings.xml @@ -412,7 +412,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"Нар мандах хүртэл"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"<xliff:g id="TIME">%s</xliff:g>-д"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"<xliff:g id="TIME">%s</xliff:g> хүртэл"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"Гэрэлтүүлгийг багасгах"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"NFC-г цуцалсан"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"NFC-г идэвхжүүлсэн"</string> @@ -652,10 +651,8 @@ <string name="show_demo_mode" msgid="3677956462273059726">"Демо горимыг харуулах"</string> <string name="status_bar_ethernet" msgid="5690979758988647484">"Этернет"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Сэрүүлэг"</string> - <!-- no translation found for wallet_title (5369767670735827105) --> - <skip /> - <!-- no translation found for wallet_secondary_label (2017028770884957543) --> - <skip /> + <string name="wallet_title" msgid="5369767670735827105">"Түрийвч"</string> + <string name="wallet_secondary_label" msgid="2017028770884957543">"Бэлэн"</string> <string name="status_bar_work" msgid="5238641949837091056">"Ажлын профайл"</string> <string name="status_bar_airplane" msgid="4848702508684541009">"Нислэгийн горим"</string> <string name="add_tile" msgid="6239678623873086686">"Вебсайтын цонх нэмэх"</string> diff --git a/packages/SystemUI/res/values-mr/strings.xml b/packages/SystemUI/res/values-mr/strings.xml index d2baefc366e9..8de7c96a9c5b 100644 --- a/packages/SystemUI/res/values-mr/strings.xml +++ b/packages/SystemUI/res/values-mr/strings.xml @@ -412,7 +412,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"सूर्योदयापर्यंत"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"<xliff:g id="TIME">%s</xliff:g> वाजता सुरू होते"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"<xliff:g id="TIME">%s</xliff:g> पर्यंत"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"ब्राइटनेस कमी करा"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"NFC अक्षम केले आहे"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"NFC सक्षम केले आहे"</string> @@ -515,8 +514,7 @@ <string name="quick_settings_disclosure_parental_controls" msgid="2114102871438223600">"हे डिव्हाइस तुमच्या पालकाने व्यवस्थापित केले आहे"</string> <string name="quick_settings_disclosure_management_monitoring" msgid="8231336875820702180">"तुमच्या संस्थेकडे या डिव्हाइसची मालकी आहे आणि ती नेटवर्क ट्रॅफिकचे परीक्षण करू शकते"</string> <string name="quick_settings_disclosure_named_management_monitoring" msgid="2831423806103479812">"हे डिव्हाइस <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> च्या मालकीचे आहे आणि ती नेटवर्क ट्रॅफिकचे परीक्षण करू शकते"</string> - <!-- no translation found for quick_settings_financed_disclosure_named_management (2307703784594859524) --> - <skip /> + <string name="quick_settings_financed_disclosure_named_management" msgid="2307703784594859524">"हे डिव्हाइस <xliff:g id="ORGANIZATION_NAME">%s</xliff:g> द्वारे पुरवले गेले आहे"</string> <string name="quick_settings_disclosure_management_named_vpn" msgid="6096715329056415588">"हे डिव्हाइस तुमच्या संस्थेचे आहे आणि ते <xliff:g id="VPN_APP">%1$s</xliff:g> ला कनेक्ट केले आहे"</string> <string name="quick_settings_disclosure_named_management_named_vpn" msgid="5302786161534380104">"हे डिव्हाइस <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> चे आहे आणि ते <xliff:g id="VPN_APP">%2$s</xliff:g> ला कनेक्ट केले आहे"</string> <string name="quick_settings_disclosure_management" msgid="5515296598440684962">"हे डिव्हाइस तुमच्या संस्थेचे आहे"</string> @@ -530,8 +528,7 @@ <string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"तुमची कार्य प्रोफाइल <xliff:g id="VPN_APP">%1$s</xliff:g> ला कनेक्ट केली"</string> <string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="5481763430080807797">"तुमची वैयक्तिक प्रोफाइल <xliff:g id="VPN_APP">%1$s</xliff:g> ला कनेक्ट केली आहे"</string> <string name="quick_settings_disclosure_named_vpn" msgid="2350838218824492465">"हे डिव्हाइस <xliff:g id="VPN_APP">%1$s</xliff:g> ला कनेक्ट केले आहे"</string> - <!-- no translation found for monitoring_title_financed_device (3659962357973919387) --> - <skip /> + <string name="monitoring_title_financed_device" msgid="3659962357973919387">"हे डिव्हाइस <xliff:g id="ORGANIZATION_NAME">%s</xliff:g> द्वारे पुरवले गेले आहे"</string> <string name="monitoring_title_device_owned" msgid="7029691083837606324">"डिव्हाइस व्यवस्थापन"</string> <string name="monitoring_title_profile_owned" msgid="6301118649405449568">"प्रोफाईल परीक्षण"</string> <string name="monitoring_title" msgid="4063890083735924568">"नेटवर्क परीक्षण"</string> @@ -654,10 +651,8 @@ <string name="show_demo_mode" msgid="3677956462273059726">"डेमो मोड दर्शवा"</string> <string name="status_bar_ethernet" msgid="5690979758988647484">"इथरनेट"</string> <string name="status_bar_alarm" msgid="87160847643623352">"अलार्म"</string> - <!-- no translation found for wallet_title (5369767670735827105) --> - <skip /> - <!-- no translation found for wallet_secondary_label (2017028770884957543) --> - <skip /> + <string name="wallet_title" msgid="5369767670735827105">"Wallet"</string> + <string name="wallet_secondary_label" msgid="2017028770884957543">"तयार आहे"</string> <string name="status_bar_work" msgid="5238641949837091056">"कार्य प्रोफाईल"</string> <string name="status_bar_airplane" msgid="4848702508684541009">"विमान मोड"</string> <string name="add_tile" msgid="6239678623873086686">"टाइल जोडा"</string> @@ -904,8 +899,7 @@ <string name="accessibility_quick_settings_collapse" msgid="4674876336725041982">"जलद सेटिंग्ज बंद करा."</string> <string name="accessibility_quick_settings_alarm_set" msgid="7237918261045099853">"अलार्म सेट केला."</string> <string name="accessibility_quick_settings_user" msgid="505821942882668619">"<xliff:g id="ID_1">%s</xliff:g> म्हणून साइन इन केले"</string> - <!-- no translation found for accessibility_quick_settings_choose_user_action (4554388498186576087) --> - <skip /> + <string name="accessibility_quick_settings_choose_user_action" msgid="4554388498186576087">"वापरकर्ता निवडा"</string> <string name="data_connection_no_internet" msgid="691058178914184544">"इंटरनेट नाही"</string> <string name="accessibility_quick_settings_open_details" msgid="4879279912389052142">"तपशील उघडा."</string> <string name="accessibility_quick_settings_not_available" msgid="6860875849497473854">"<xliff:g id="REASON">%s</xliff:g> मुळे उपलब्ध नाही"</string> @@ -1022,10 +1016,8 @@ <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"फुल स्क्रीन मॅग्निफाय करा"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"स्क्रीनचा काही भाग मॅग्निफाय करा"</string> <string name="magnification_mode_switch_click_label" msgid="2786203505805898199">"स्विच करा"</string> - <!-- no translation found for accessibility_floating_button_migration_tooltip (4431046858918714564) --> - <skip /> - <!-- no translation found for accessibility_floating_button_docking_tooltip (6814897496767461517) --> - <skip /> + <string name="accessibility_floating_button_migration_tooltip" msgid="4431046858918714564">"अॅक्सेसिबिलिटी जेश्चर हे आता अॅक्सेसिबिलिटी बटण आहे \n\n"<annotation id="link">"सेटिंग्ज पाहा"</annotation></string> + <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"बटण तात्पुरते लपवण्यासाठी ते कोपर्यामध्ये हलवा"</string> <string name="quick_controls_title" msgid="6839108006171302273">"डिव्हाइस नियंत्रणे"</string> <string name="quick_controls_subtitle" msgid="1667408093326318053">"तुमच्या कनेक्ट केलेल्या डिव्हाइससाठी नियंत्रणे जोडा"</string> <string name="quick_controls_setup_title" msgid="8901436655997849822">"डिव्हाइस नियंत्रणे सेट करा"</string> diff --git a/packages/SystemUI/res/values-ms/strings.xml b/packages/SystemUI/res/values-ms/strings.xml index 48551010d852..50c5e0d849e5 100644 --- a/packages/SystemUI/res/values-ms/strings.xml +++ b/packages/SystemUI/res/values-ms/strings.xml @@ -412,7 +412,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"Hingga matahari trbt"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"Dihidupkan pada <xliff:g id="TIME">%s</xliff:g>"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"Hingga <xliff:g id="TIME">%s</xliff:g>"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"Kurangkan kecerahan"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"NFC dilumpuhkan"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"NFC didayakan"</string> @@ -652,10 +651,8 @@ <string name="show_demo_mode" msgid="3677956462273059726">"Tunjukkan mod tunjuk cara"</string> <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Penggera"</string> - <!-- no translation found for wallet_title (5369767670735827105) --> - <skip /> - <!-- no translation found for wallet_secondary_label (2017028770884957543) --> - <skip /> + <string name="wallet_title" msgid="5369767670735827105">"Wallet"</string> + <string name="wallet_secondary_label" msgid="2017028770884957543">"Sedia"</string> <string name="status_bar_work" msgid="5238641949837091056">"Profil kerja"</string> <string name="status_bar_airplane" msgid="4848702508684541009">"Mod pesawat"</string> <string name="add_tile" msgid="6239678623873086686">"Tambahkan jubin"</string> diff --git a/packages/SystemUI/res/values-my/strings.xml b/packages/SystemUI/res/values-my/strings.xml index 91e5110ebab4..9e67f1c6c2e8 100644 --- a/packages/SystemUI/res/values-my/strings.xml +++ b/packages/SystemUI/res/values-my/strings.xml @@ -412,7 +412,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"နေထွက်ချိန် အထိ"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"<xliff:g id="TIME">%s</xliff:g> တွင် ဖွင့်မည်"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"<xliff:g id="TIME">%s</xliff:g> အထိ"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"တောက်ပမှုကို လျှော့ခြင်း"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"NFC ကို ပိတ်ထားသည်"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"NFC ကို ဖွင့်ထားသည်"</string> @@ -652,10 +651,8 @@ <string name="show_demo_mode" msgid="3677956462273059726">"သရုပ်ပြမုဒ် ပြရန်"</string> <string name="status_bar_ethernet" msgid="5690979758988647484">"အီသာနက်"</string> <string name="status_bar_alarm" msgid="87160847643623352">"နှိုးစက်"</string> - <!-- no translation found for wallet_title (5369767670735827105) --> - <skip /> - <!-- no translation found for wallet_secondary_label (2017028770884957543) --> - <skip /> + <string name="wallet_title" msgid="5369767670735827105">"Wallet"</string> + <string name="wallet_secondary_label" msgid="2017028770884957543">"အဆင်သင့်"</string> <string name="status_bar_work" msgid="5238641949837091056">"အလုပ် ပရိုဖိုင်"</string> <string name="status_bar_airplane" msgid="4848702508684541009">"လေယာဉ်ပျံမုဒ်"</string> <string name="add_tile" msgid="6239678623873086686">"လေးထောင့်ကွက် ထည့်ရန်"</string> diff --git a/packages/SystemUI/res/values-nb/strings.xml b/packages/SystemUI/res/values-nb/strings.xml index 5ebf4ae71400..aa7139b29629 100644 --- a/packages/SystemUI/res/values-nb/strings.xml +++ b/packages/SystemUI/res/values-nb/strings.xml @@ -412,7 +412,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"Til soloppgang"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"Slås på klokken <xliff:g id="TIME">%s</xliff:g>"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"Til <xliff:g id="TIME">%s</xliff:g>"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"Reduser lysstyrken"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"NFC er slått av"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"NFC er slått på"</string> @@ -652,10 +651,8 @@ <string name="show_demo_mode" msgid="3677956462273059726">"Vis demo-modus"</string> <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Alarm"</string> - <!-- no translation found for wallet_title (5369767670735827105) --> - <skip /> - <!-- no translation found for wallet_secondary_label (2017028770884957543) --> - <skip /> + <string name="wallet_title" msgid="5369767670735827105">"Wallet"</string> + <string name="wallet_secondary_label" msgid="2017028770884957543">"Klar"</string> <string name="status_bar_work" msgid="5238641949837091056">"Work-profil"</string> <string name="status_bar_airplane" msgid="4848702508684541009">"Flymodus"</string> <string name="add_tile" msgid="6239678623873086686">"Legg til felt"</string> diff --git a/packages/SystemUI/res/values-ne/strings.xml b/packages/SystemUI/res/values-ne/strings.xml index b13561cf87a6..0f9aa79f066c 100644 --- a/packages/SystemUI/res/values-ne/strings.xml +++ b/packages/SystemUI/res/values-ne/strings.xml @@ -412,7 +412,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"सूर्योदयसम्म"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"<xliff:g id="TIME">%s</xliff:g> मा सक्रिय"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"<xliff:g id="TIME">%s</xliff:g> सम्म"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"चमक घटाइयोस्"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"NFC लाई असक्षम पारिएको छ"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"NFC लाई सक्षम पारिएको छ"</string> @@ -502,7 +501,7 @@ <string name="manage_notifications_text" msgid="6885645344647733116">"व्यवस्थित गर्नुहोस्"</string> <string name="manage_notifications_history_text" msgid="57055985396576230">"इतिहास"</string> <string name="notification_section_header_incoming" msgid="850925217908095197">"नयाँ"</string> - <string name="notification_section_header_gentle" msgid="6804099527336337197">"मौन"</string> + <string name="notification_section_header_gentle" msgid="6804099527336337197">"साइलेन्ट"</string> <string name="notification_section_header_alerting" msgid="5581175033680477651">"सूचनाहरू"</string> <string name="notification_section_header_conversations" msgid="821834744538345661">"वार्तालापहरू"</string> <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"सबै मौन सूचनाहरू हटाउनुहोस्"</string> @@ -652,10 +651,8 @@ <string name="show_demo_mode" msgid="3677956462273059726">"डेमो मोड देखाउनुहोस्"</string> <string name="status_bar_ethernet" msgid="5690979758988647484">"इथरनेट"</string> <string name="status_bar_alarm" msgid="87160847643623352">"अलार्म"</string> - <!-- no translation found for wallet_title (5369767670735827105) --> - <skip /> - <!-- no translation found for wallet_secondary_label (2017028770884957543) --> - <skip /> + <string name="wallet_title" msgid="5369767670735827105">"वालेट"</string> + <string name="wallet_secondary_label" msgid="2017028770884957543">"तयार छ"</string> <string name="status_bar_work" msgid="5238641949837091056">"कार्य प्रोफाइल"</string> <string name="status_bar_airplane" msgid="4848702508684541009">"हवाइजहाज मोड"</string> <string name="add_tile" msgid="6239678623873086686">"टाइल थप्नुहोस्"</string> @@ -705,19 +702,19 @@ <string name="inline_block_button" msgid="479892866568378793">"रोक लगाउनुहोस्"</string> <string name="inline_keep_button" msgid="299631874103662170">"देखाउने क्रम जारी राख्नुहोस्"</string> <string name="inline_minimize_button" msgid="1474436209299333445">"सानो बनाउनुहोस्"</string> - <string name="inline_silent_button_silent" msgid="525243786649275816">"मौन"</string> + <string name="inline_silent_button_silent" msgid="525243786649275816">"साइलेन्ट"</string> <string name="inline_silent_button_stay_silent" msgid="2129254868305468743">"मौन रहनुहोस्"</string> <string name="inline_silent_button_alert" msgid="5705343216858250354">"सतर्क गराउने"</string> <string name="inline_silent_button_keep_alerting" msgid="6577845442184724992">"सर्तक गराइरहनुहोस्"</string> <string name="inline_turn_off_notifications" msgid="8543989584403106071">"सूचनाहरू निष्क्रिय पार्नुहोस्"</string> <string name="inline_keep_showing_app" msgid="4393429060390649757">"यो एपका सूचनाहरू देखाउने क्रम जारी राख्ने हो?"</string> - <string name="notification_silence_title" msgid="8608090968400832335">"मौन"</string> + <string name="notification_silence_title" msgid="8608090968400832335">"साइलेन्ट"</string> <string name="notification_alert_title" msgid="3656229781017543655">"पूर्वनिर्धारित"</string> <string name="notification_automatic_title" msgid="3745465364578762652">"स्वचालित"</string> <string name="notification_channel_summary_low" msgid="4860617986908931158">"न घन्टी बज्छ न त कम्पन नै हुन्छ"</string> <string name="notification_conversation_summary_low" msgid="1734433426085468009">"न घन्टी बज्छ न त कम्पन नै हुन्छ र वार्तालाप खण्डको तलतिर देखा पर्छ"</string> - <string name="notification_channel_summary_default" msgid="3282930979307248890">"फोनको सेटिङका आधारमा घन्टी बज्न वा कम्पन हुन सक्छ"</string> - <string name="notification_channel_summary_default_with_bubbles" msgid="1782419896613644568">"फोनको सेटिङका आधारमा घन्टी बज्न वा कम्पन हुन सक्छ। <xliff:g id="APP_NAME">%1$s</xliff:g> का वार्तालापहरू पूर्वनिर्धारित रूपमा बबलमा देखाइन्छन्।"</string> + <string name="notification_channel_summary_default" msgid="3282930979307248890">"फोनको सेटिङका आधारमा घन्टी बज्न वा भाइब्रेट हुन सक्छ"</string> + <string name="notification_channel_summary_default_with_bubbles" msgid="1782419896613644568">"फोनको सेटिङका आधारमा घन्टी बज्न वा भाइब्रेट हुन सक्छ। <xliff:g id="APP_NAME">%1$s</xliff:g> का वार्तालापहरू पूर्वनिर्धारित रूपमा बबलमा देखाइन्छन्।"</string> <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"फ्लोटिङ सर्टकटमार्फत यो सामग्रीतर्फ तपाईंको ध्यान आकर्षित गर्दछ।"</string> <string name="notification_channel_summary_automatic" msgid="5813109268050235275">"सिस्टमलाई यो सूचना आउँदा ध्वनि बज्नु पर्छ वा कम्पन हुनु पर्छ भन्ने कुराको निधो गर्न दिनुहोस्"</string> <string name="notification_channel_summary_automatic_alerted" msgid="954166812246932240">"<b>स्थिति:</b> सूचनालाई महत्त्वपूर्ण ठानी पूर्वनिर्धारित मोडमा सेट गरिएको छ"</string> diff --git a/packages/SystemUI/res/values-night/colors.xml b/packages/SystemUI/res/values-night/colors.xml index d571f2f17497..9959c677408d 100644 --- a/packages/SystemUI/res/values-night/colors.xml +++ b/packages/SystemUI/res/values-night/colors.xml @@ -99,8 +99,7 @@ <color name="qs_user_switcher_avatar_background">#3C4043</color> <!-- Colors for privacy dialog. These should be changed to the new palette --> - <color name="privacy_circle_camera">#81C995</color> <!-- g300 --> - <color name="privacy_circle_microphone_location">#FCAD70</color> <!--o300 --> + <color name="privacy_circle">#81C995</color> <!-- g300 --> <!-- Accessibility floating menu --> <color name="accessibility_floating_menu_background">#B3000000</color> <!-- 70% --> diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml index c7aabadde708..523b4c33cda0 100644 --- a/packages/SystemUI/res/values-nl/strings.xml +++ b/packages/SystemUI/res/values-nl/strings.xml @@ -412,7 +412,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"Tot zonsopgang"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"Aan om <xliff:g id="TIME">%s</xliff:g>"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"Tot <xliff:g id="TIME">%s</xliff:g>"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"Helderheid verlagen"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"NFC is uitgeschakeld"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"NFC is ingeschakeld"</string> @@ -606,7 +605,7 @@ <string name="screen_pinning_start" msgid="7483998671383371313">"App vastgezet"</string> <string name="screen_pinning_exit" msgid="4553787518387346893">"App losgemaakt"</string> <string name="quick_settings_reset_confirmation_title" msgid="463533331480997595">"<xliff:g id="TILE_LABEL">%1$s</xliff:g> verbergen?"</string> - <string name="quick_settings_reset_confirmation_message" msgid="2320586180785674186">"Deze wordt opnieuw weergegeven zodra u de instelling weer aanzet."</string> + <string name="quick_settings_reset_confirmation_message" msgid="2320586180785674186">"Deze zie je opnieuw zodra je de instelling weer aanzet."</string> <string name="quick_settings_reset_confirmation_button" msgid="3341477479055016776">"Verbergen"</string> <string name="stream_voice_call" msgid="7468348170702375660">"Bellen"</string> <string name="stream_system" msgid="7663148785370565134">"Systeem"</string> @@ -713,9 +712,9 @@ <string name="notification_alert_title" msgid="3656229781017543655">"Standaard"</string> <string name="notification_automatic_title" msgid="3745465364578762652">"Automatisch"</string> <string name="notification_channel_summary_low" msgid="4860617986908931158">"Geen geluid of trilling"</string> - <string name="notification_conversation_summary_low" msgid="1734433426085468009">"Geen geluid of trilling en wordt lager in het gedeelte met gesprekken weergegeven"</string> + <string name="notification_conversation_summary_low" msgid="1734433426085468009">"Geen geluid of trilling en wordt lager in het gedeelte met gesprekken getoond"</string> <string name="notification_channel_summary_default" msgid="3282930979307248890">"Kan overgaan of trillen op basis van de telefooninstellingen"</string> - <string name="notification_channel_summary_default_with_bubbles" msgid="1782419896613644568">"Kan overgaan of trillen op basis van de telefooninstellingen. Gesprekken uit <xliff:g id="APP_NAME">%1$s</xliff:g> worden standaard als bubbels weergegeven."</string> + <string name="notification_channel_summary_default_with_bubbles" msgid="1782419896613644568">"Kan overgaan of trillen op basis van de telefooninstellingen. Gesprekken uit <xliff:g id="APP_NAME">%1$s</xliff:g> worden standaard als bubbels getoond."</string> <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"Trekt de aandacht met een zwevende snelkoppeling naar deze content."</string> <string name="notification_channel_summary_automatic" msgid="5813109268050235275">"Het systeem laten bepalen of deze melding geluid moet maken of moet trillen"</string> <string name="notification_channel_summary_automatic_alerted" msgid="954166812246932240">"<b>Status:</b> opgeschaald naar Standaard"</string> @@ -1001,7 +1000,7 @@ <string name="priority_onboarding_behavior" msgid="5342816047020432929">"Prioriteitsgesprekken:"</string> <string name="priority_onboarding_show_at_top_text" msgid="1678400241025513541">"Worden bovenaan het gespreksgedeelte getoond"</string> <string name="priority_onboarding_show_avatar_text" msgid="5756291381124091508">"Tonen profielafbeelding op vergrendelscherm"</string> - <string name="priority_onboarding_appear_as_bubble_text" msgid="4227039772250263122">"Worden als zwevende ballon weergegeven vóór apps"</string> + <string name="priority_onboarding_appear_as_bubble_text" msgid="4227039772250263122">"Zijn als zwevende ballon zichtbaar vóór apps"</string> <string name="priority_onboarding_ignores_dnd_text" msgid="2918952762719600529">"Onderbreken \'Niet storen\'"</string> <string name="priority_onboarding_done_button_title" msgid="4569550984286506007">"OK"</string> <string name="priority_onboarding_settings_button_title" msgid="6663601574303585927">"Instellingen"</string> diff --git a/packages/SystemUI/res/values-or/strings.xml b/packages/SystemUI/res/values-or/strings.xml index d4bb3e7879af..3bbdd304b67e 100644 --- a/packages/SystemUI/res/values-or/strings.xml +++ b/packages/SystemUI/res/values-or/strings.xml @@ -412,7 +412,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"ସକାଳ ପର୍ଯ୍ୟନ୍ତ"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"<xliff:g id="TIME">%s</xliff:g>ରେ ଚାଲୁ ହେବ"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"<xliff:g id="TIME">%s</xliff:g> ପର୍ଯ୍ୟନ୍ତ"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"ଉଜ୍ଜ୍ୱଳତା କମ୍ କରନ୍ତୁ"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"NFC ଅକ୍ଷମ କରାଯାଇଛି"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"NFC ସକ୍ଷମ କରାଯାଇଛି"</string> @@ -652,10 +651,8 @@ <string name="show_demo_mode" msgid="3677956462273059726">"ଡେମୋ ମୋଡ୍ ଦେଖାନ୍ତୁ"</string> <string name="status_bar_ethernet" msgid="5690979758988647484">"ଇଥରନେଟ୍"</string> <string name="status_bar_alarm" msgid="87160847643623352">"ଆଲାର୍ମ"</string> - <!-- no translation found for wallet_title (5369767670735827105) --> - <skip /> - <!-- no translation found for wallet_secondary_label (2017028770884957543) --> - <skip /> + <string name="wallet_title" msgid="5369767670735827105">"ୱାଲେଟ୍"</string> + <string name="wallet_secondary_label" msgid="2017028770884957543">"ପ୍ରସ୍ତୁତ"</string> <string name="status_bar_work" msgid="5238641949837091056">"ୱର୍କ ପ୍ରୋଫାଇଲ୍"</string> <string name="status_bar_airplane" msgid="4848702508684541009">"ଏରୋପ୍ଲେନ୍ ମୋଡ୍"</string> <string name="add_tile" msgid="6239678623873086686">"ଟାଇଲ୍ ଯୋଡ଼ନ୍ତୁ"</string> diff --git a/packages/SystemUI/res/values-pa/strings.xml b/packages/SystemUI/res/values-pa/strings.xml index b368c285e80c..9a58ef63c5de 100644 --- a/packages/SystemUI/res/values-pa/strings.xml +++ b/packages/SystemUI/res/values-pa/strings.xml @@ -412,7 +412,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"ਸੂਰਜ ਚੜ੍ਹਨ ਤੱਕ"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"<xliff:g id="TIME">%s</xliff:g> ਵਜੇ ਚਾਲੂ"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"<xliff:g id="TIME">%s</xliff:g> ਵਜੇ ਤੱਕ"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"ਚਮਕ ਘਟਾਓ"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"NFC ਨੂੰ ਅਯੋਗ ਬਣਾਇਆ ਗਿਆ ਹੈ"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"NFC ਨੂੰ ਯੋਗ ਬਣਾਇਆ ਗਿਆ ਹੈ"</string> @@ -515,8 +514,7 @@ <string name="quick_settings_disclosure_parental_controls" msgid="2114102871438223600">"ਇਸ ਡੀਵਾਈਸ ਦਾ ਪ੍ਰਬੰਧਨ ਤੁਹਾਡੇ ਮਾਂ-ਪਿਓ ਵੱਲੋਂ ਕੀਤਾ ਜਾਂਦਾ ਹੈ"</string> <string name="quick_settings_disclosure_management_monitoring" msgid="8231336875820702180">"ਤੁਹਾਡੀ ਸੰਸਥਾ ਕੋਲ ਇਸ ਡੀਵਾਈਸ ਦੀ ਮਲਕੀਅਤ ਹੈ ਅਤੇ ਇਹ ਨੈੱਟਵਰਕ ਟਰੈਫ਼ਿਕ ਦੀ ਨਿਗਰਾਨੀ ਕਰ ਸਕਦੀ ਹੈ"</string> <string name="quick_settings_disclosure_named_management_monitoring" msgid="2831423806103479812">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> ਕੋਲ ਇਸ ਡੀਵਾਈਸ ਦੀ ਮਲਕੀਅਤ ਹੈ ਅਤੇ ਇਹ ਨੈੱਟਵਰਕ ਟਰੈਫ਼ਿਕ ਦੀ ਨਿਗਰਾਨੀ ਕਰ ਸਕਦੀ ਹੈ"</string> - <!-- no translation found for quick_settings_financed_disclosure_named_management (2307703784594859524) --> - <skip /> + <string name="quick_settings_financed_disclosure_named_management" msgid="2307703784594859524">"ਇਹ ਡੀਵਾਈਸ <xliff:g id="ORGANIZATION_NAME">%s</xliff:g> ਵੱਲੋਂ ਮੁਹੱਈਆ ਕੀਤਾ ਗਿਆ ਹੈ"</string> <string name="quick_settings_disclosure_management_named_vpn" msgid="6096715329056415588">"ਇਹ ਡੀਵਾਈਸ ਤੁਹਾਡੀ ਸੰਸਥਾ ਨਾਲ ਸੰਬੰਧਿਤ ਹੈ ਅਤੇ <xliff:g id="VPN_APP">%1$s</xliff:g> ਨਾਲ ਕਨੈਕਟ ਹੈ"</string> <string name="quick_settings_disclosure_named_management_named_vpn" msgid="5302786161534380104">"ਇਹ ਡੀਵਾਈਸ <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> ਨਾਲ ਸੰਬੰਧਿਤ ਹੈ ਅਤੇ <xliff:g id="VPN_APP">%2$s</xliff:g> ਨਾਲ ਕਨੈਕਟ ਹੈ"</string> <string name="quick_settings_disclosure_management" msgid="5515296598440684962">"ਇਹ ਡੀਵਾਈਸ ਤੁਹਾਡੀ ਸੰਸਥਾ ਨਾਲ ਸੰਬੰਧਿਤ ਹੈ"</string> @@ -530,8 +528,7 @@ <string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"ਤੁਹਾਡਾ ਕਾਰਜ ਪ੍ਰੋਫਾਈਲ <xliff:g id="VPN_APP">%1$s</xliff:g> ਨਾਲ ਕਨੈਕਟ ਹੈ"</string> <string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="5481763430080807797">"ਤੁਹਾਡਾ ਨਿੱਜੀ ਪ੍ਰੋਫਾਈਲ <xliff:g id="VPN_APP">%1$s</xliff:g> ਨਾਲ ਕਨੈਕਟ ਹੈ"</string> <string name="quick_settings_disclosure_named_vpn" msgid="2350838218824492465">"ਇਹ ਡੀਵਾਈਸ <xliff:g id="VPN_APP">%1$s</xliff:g> ਨਾਲ ਕਨੈਕਟ ਹੈ"</string> - <!-- no translation found for monitoring_title_financed_device (3659962357973919387) --> - <skip /> + <string name="monitoring_title_financed_device" msgid="3659962357973919387">"ਇਹ ਡੀਵਾਈਸ <xliff:g id="ORGANIZATION_NAME">%s</xliff:g> ਵੱਲੋਂ ਮੁਹੱਈਆ ਕੀਤਾ ਗਿਆ ਹੈ"</string> <string name="monitoring_title_device_owned" msgid="7029691083837606324">"ਡੀਵਾਈਸ ਪ੍ਰਬੰਧਨ"</string> <string name="monitoring_title_profile_owned" msgid="6301118649405449568">"ਪ੍ਰੋਫਾਈਲ ਦਾ ਨਿਰੀਖਣ ਕਰਨਾ"</string> <string name="monitoring_title" msgid="4063890083735924568">"ਨੈੱਟਵਰਕ ਨਿਰੀਖਣ ਕਰ ਰਿਹਾ ਹੈ"</string> @@ -543,8 +540,7 @@ <string name="monitoring_button_view_policies" msgid="3869724835853502410">"ਨੀਤੀਆਂ ਦੇਖੋ"</string> <string name="monitoring_button_view_controls" msgid="8316440345340701117">"ਕੰਟਰੋਲ ਦੇਖੋ"</string> <string name="monitoring_description_named_management" msgid="505833016545056036">"ਇਹ ਡੀਵਾਈਸ <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> ਨਾਲ ਸੰਬੰਧਿਤ ਹੈ।\n\nਤੁਹਾਡਾ ਆਈ.ਟੀ. ਪ੍ਰਸ਼ਾਸਕ ਤੁਹਾਡੇ ਡੀਵਾਈਸ ਨਾਲ ਸੰਬੰਧਿਤ ਸੈਟਿੰਗਾਂ, ਕਾਰਪੋਰੇਟ ਪਹੁੰਚ, ਐਪਾਂ, ਡਾਟੇ ਅਤੇ ਤੁਹਾਡੇ ਡੀਵਾਈਸ ਦੀ ਟਿਕਾਣਾ ਜਾਣਕਾਰੀ ਦੀ ਨਿਗਰਾਨੀ ਅਤੇ ਪ੍ਰਬੰਧਨ ਕਰ ਸਕਦਾ ਹੈ।\n\nਹੋਰ ਜਾਣਕਾਰੀ ਲਈ, ਆਪਣੇ ਆਈ.ਟੀ. ਪ੍ਰਸ਼ਾਸਕ ਨੂੰ ਸੰਪਰਕ ਕਰੋ।"</string> - <!-- no translation found for monitoring_financed_description_named_management (6108439201399938668) --> - <skip /> + <string name="monitoring_financed_description_named_management" msgid="6108439201399938668">"<xliff:g id="ORGANIZATION_NAME_0">%1$s</xliff:g> ਇਸ ਡੀਵਾਈਸ ਨਾਲ ਸੰਬੰਧਿਤ ਡਾਟੇ ਤੱਕ ਪਹੁੰਚ ਕਰ ਸਕਦੀ ਹੈ, ਐਪਾਂ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰ ਸਕਦੀ ਹੈ ਅਤੇ ਇਸ ਡੀਵਾਈਸ ਦੀਆਂ ਸੈਟਿੰਗਾਂ ਨੂੰ ਬਦਲ ਸਕਦੀ ਹੈ।\n\nਜੇ ਤੁਹਾਡਾ ਕੋਈ ਸਵਾਲ ਹੈ, ਤਾਂ <xliff:g id="ORGANIZATION_NAME_1">%2$s</xliff:g> ਨੂੰ ਸੰਪਰਕ ਕਰੋ।"</string> <string name="monitoring_description_management" msgid="4308879039175729014">"ਇਹ ਡੀਵਾਈਸ ਤੁਹਾਡੀ ਸੰਸਥਾ ਨਾਲ ਸੰਬੰਧਿਤ ਹੈ।\n\nਤੁਹਾਡਾ ਆਈ.ਟੀ. ਪ੍ਰਸ਼ਾਸਕ ਤੁਹਾਡੇ ਡੀਵਾਈਸ ਨਾਲ ਸੰਬੰਧਿਤ ਸੈਟਿੰਗਾਂ, ਕਾਰਪੋਰੇਟ ਪਹੁੰਚ, ਐਪਾਂ, ਡਾਟੇ ਅਤੇ ਤੁਹਾਡੇ ਡੀਵਾਈਸ ਦੀ ਟਿਕਾਣਾ ਜਾਣਕਾਰੀ ਦੀ ਨਿਗਰਾਨੀ ਅਤੇ ਪ੍ਰਬੰਧਨ ਕਰ ਸਕਦਾ ਹੈ।\n\nਹੋਰ ਜਾਣਕਾਰੀ ਲਈ, ਆਪਣੇ ਆਈ.ਟੀ. ਪ੍ਰਸ਼ਾਸਕ ਨੂੰ ਸੰਪਰਕ ਕਰੋ।"</string> <string name="monitoring_description_management_ca_certificate" msgid="7785013130658110130">"ਤੁਹਾਡੀ ਸੰਸਥਾ ਵੱਲੋਂ ਇਸ ਡੀਵਾਈਸ \'ਤੇ ਇੱਕ ਪ੍ਰਮਾਣ-ਪੱਤਰ ਅਥਾਰਟੀ ਸਥਾਪਤ ਕੀਤੀ ਗਈ ਹੈ। ਤੁਹਾਡੇ ਸੁਰੱਖਿਅਤ ਨੈੱਟਵਰਕ ਟਰੈਫਿਕ ਦੀ ਨਿਗਰਾਨੀ ਕੀਤੀ ਜਾ ਸਕਦੀ ਹੈ ਜਾਂ ਉਸਨੂੰ ਸੋਧਿਆ ਜਾ ਸਕਦਾ ਹੈ।"</string> <string name="monitoring_description_managed_profile_ca_certificate" msgid="7904323416598435647">"ਤੁਹਾਡੀ ਸੰਸਥਾ ਵੱਲੋਂ ਤੁਹਾਡੇ ਕਾਰਜ ਪ੍ਰੋਫਾਈਲ ਵਿੱਚ ਇੱਕ ਪ੍ਰਮਾਣ-ਪੱਤਰ ਅਥਾਰਟੀ ਸਥਾਪਤ ਕੀਤੀ ਗਈ ਹੈ। ਤੁਹਾਡੇ ਸੁਰੱਖਿਅਤ ਨੈੱਟਵਰਕ ਟਰੈਫਿਕ ਦੀ ਨਿਗਰਾਨੀ ਕੀਤੀ ਜਾ ਸਕਦੀ ਹੈ ਜਾਂ ਉਸਨੂੰ ਸੋਧਿਆ ਜਾ ਸਕਦਾ ਹੈ।"</string> @@ -655,10 +651,8 @@ <string name="show_demo_mode" msgid="3677956462273059726">"ਡੈਮੋ ਮੋਡ ਦੇਖੋ"</string> <string name="status_bar_ethernet" msgid="5690979758988647484">"ਈਥਰਨੈਟ"</string> <string name="status_bar_alarm" msgid="87160847643623352">"ਅਲਾਰਮ"</string> - <!-- no translation found for wallet_title (5369767670735827105) --> - <skip /> - <!-- no translation found for wallet_secondary_label (2017028770884957543) --> - <skip /> + <string name="wallet_title" msgid="5369767670735827105">"ਵਾਲੇਟ"</string> + <string name="wallet_secondary_label" msgid="2017028770884957543">"ਤਿਆਰ"</string> <string name="status_bar_work" msgid="5238641949837091056">"ਕਾਰਜ ਪ੍ਰੋਫਾਈਲ"</string> <string name="status_bar_airplane" msgid="4848702508684541009">"ਹਵਾਈ-ਜਹਾਜ਼ ਮੋਡ"</string> <string name="add_tile" msgid="6239678623873086686">"ਟਾਇਲ ਸ਼ਾਮਲ ਕਰੋ"</string> @@ -715,7 +709,7 @@ <string name="inline_turn_off_notifications" msgid="8543989584403106071">"ਸੂਚਨਾਵਾਂ ਬੰਦ ਕਰੋ"</string> <string name="inline_keep_showing_app" msgid="4393429060390649757">"ਕੀ ਇਸ ਐਪ ਤੋਂ ਸੂਚਨਾਵਾਂ ਨੂੰ ਦਿਖਾਉਣਾ ਜਾਰੀ ਰੱਖਣਾ ਹੈ?"</string> <string name="notification_silence_title" msgid="8608090968400832335">"ਸ਼ਾਂਤ"</string> - <string name="notification_alert_title" msgid="3656229781017543655">"ਪੂਰਵ-ਨਿਰਧਾਰਤ"</string> + <string name="notification_alert_title" msgid="3656229781017543655">"ਪੂਰਵ-ਨਿਰਧਾਰਿਤ"</string> <string name="notification_automatic_title" msgid="3745465364578762652">"ਸਵੈਚਲਿਤ"</string> <string name="notification_channel_summary_low" msgid="4860617986908931158">"ਕੋਈ ਧੁਨੀ ਜਾਂ ਥਰਥਰਾਹਟ ਨਹੀਂ"</string> <string name="notification_conversation_summary_low" msgid="1734433426085468009">"ਕੋਈ ਧੁਨੀ ਜਾਂ ਥਰਥਰਾਹਟ ਨਹੀਂ ਅਤੇ ਸੂਚਨਾਵਾਂ ਗੱਲਬਾਤ ਸੈਕਸ਼ਨ ਵਿੱਚ ਹੇਠਲੇ ਪਾਸੇ ਦਿਸਦੀਆਂ ਹਨ"</string> @@ -905,8 +899,7 @@ <string name="accessibility_quick_settings_collapse" msgid="4674876336725041982">"ਤਤਕਾਲ ਸੈਟਿੰਗਾਂ ਨੂੰ ਬੰਦ ਕਰੋ।"</string> <string name="accessibility_quick_settings_alarm_set" msgid="7237918261045099853">"ਅਲਾਰਮ ਸੈੱਟ ਕੀਤਾ।"</string> <string name="accessibility_quick_settings_user" msgid="505821942882668619">"<xliff:g id="ID_1">%s</xliff:g> ਵਜੋਂ ਸਾਈਨ ਇਨ ਕੀਤਾ"</string> - <!-- no translation found for accessibility_quick_settings_choose_user_action (4554388498186576087) --> - <skip /> + <string name="accessibility_quick_settings_choose_user_action" msgid="4554388498186576087">"ਵਰਤੋਂਕਾਰ ਚੁਣੋ"</string> <string name="data_connection_no_internet" msgid="691058178914184544">"ਇੰਟਰਨੈੱਟ ਨਹੀਂ।"</string> <string name="accessibility_quick_settings_open_details" msgid="4879279912389052142">"ਵੇਰਵੇ ਖੋਲ੍ਹੋ।"</string> <string name="accessibility_quick_settings_not_available" msgid="6860875849497473854">"<xliff:g id="REASON">%s</xliff:g> ਦੇ ਕਾਰਨ ਅਣਉਪਲਬਧ ਹੈ"</string> @@ -1023,10 +1016,8 @@ <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"ਪੂਰੀ ਸਕ੍ਰੀਨ ਨੂੰ ਵੱਡਦਰਸ਼ੀ ਕਰੋ"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"ਸਕ੍ਰੀਨ ਦੇ ਹਿੱਸੇ ਨੂੰ ਵੱਡਾ ਕਰੋ"</string> <string name="magnification_mode_switch_click_label" msgid="2786203505805898199">"ਸਵਿੱਚ"</string> - <!-- no translation found for accessibility_floating_button_migration_tooltip (4431046858918714564) --> - <skip /> - <!-- no translation found for accessibility_floating_button_docking_tooltip (6814897496767461517) --> - <skip /> + <string name="accessibility_floating_button_migration_tooltip" msgid="4431046858918714564">"ਪਹੁੰਚਯੋਗਤਾ ਬਟਨ ਨੂੰ ਪਹੁੰਚਯੋਗਤਾ ਸੰਕੇਤ ਨਾਲ ਬਦਲ ਦਿੱਤਾ ਗਿਆ\n\n"<annotation id="link">"ਸੈਟਿੰਗਾਂ ਦੇਖੋ"</annotation></string> + <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"ਬਟਨ ਨੂੰ ਅਸਥਾਈ ਤੌਰ \'ਤੇ ਲੁਕਾਉਣ ਲਈ ਕਿਨਾਰੇ \'ਤੇ ਲਿਜਾਓ"</string> <string name="quick_controls_title" msgid="6839108006171302273">"ਡੀਵਾਈਸ ਕੰਟਰੋਲ"</string> <string name="quick_controls_subtitle" msgid="1667408093326318053">"ਆਪਣੇ ਕਨੈਕਟ ਕੀਤੇ ਡੀਵਾਈਸਾਂ ਲਈ ਕੰਟਰੋਲ ਸ਼ਾਮਲ ਕਰੋ"</string> <string name="quick_controls_setup_title" msgid="8901436655997849822">"ਡੀਵਾਈਸ ਕੰਟਰੋਲਾਂ ਦਾ ਸੈੱਟਅੱਪ ਕਰੋ"</string> diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml index 6ac5d2733cb7..c936dc260a52 100644 --- a/packages/SystemUI/res/values-pl/strings.xml +++ b/packages/SystemUI/res/values-pl/strings.xml @@ -416,7 +416,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"Do wschodu słońca"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"Włącz o <xliff:g id="TIME">%s</xliff:g>"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"Do <xliff:g id="TIME">%s</xliff:g>"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"Zmniejsz jasność"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"Komunikacja NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"Komunikacja NFC jest wyłączona"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"Komunikacja NFC jest włączona"</string> @@ -658,10 +657,8 @@ <string name="show_demo_mode" msgid="3677956462273059726">"Pokaż tryb demonstracyjny"</string> <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Alarm"</string> - <!-- no translation found for wallet_title (5369767670735827105) --> - <skip /> - <!-- no translation found for wallet_secondary_label (2017028770884957543) --> - <skip /> + <string name="wallet_title" msgid="5369767670735827105">"Portfel"</string> + <string name="wallet_secondary_label" msgid="2017028770884957543">"Gotowe"</string> <string name="status_bar_work" msgid="5238641949837091056">"Profil służbowy"</string> <string name="status_bar_airplane" msgid="4848702508684541009">"Tryb samolotowy"</string> <string name="add_tile" msgid="6239678623873086686">"Dodaj nazwę"</string> diff --git a/packages/SystemUI/res/values-pt-rBR/strings.xml b/packages/SystemUI/res/values-pt-rBR/strings.xml index 3217028a6dff..a9c454e6142f 100644 --- a/packages/SystemUI/res/values-pt-rBR/strings.xml +++ b/packages/SystemUI/res/values-pt-rBR/strings.xml @@ -412,7 +412,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"Até o nascer do sol"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"Ativar: <xliff:g id="TIME">%s</xliff:g>"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"Até: <xliff:g id="TIME">%s</xliff:g>"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"Reduzir brilho"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"A NFC está desativada"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"A NFC está ativada"</string> diff --git a/packages/SystemUI/res/values-pt-rPT/strings.xml b/packages/SystemUI/res/values-pt-rPT/strings.xml index 8dec9dd20c7d..dde69069f71a 100644 --- a/packages/SystemUI/res/values-pt-rPT/strings.xml +++ b/packages/SystemUI/res/values-pt-rPT/strings.xml @@ -412,7 +412,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"Até ao amanhecer"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"Ativado à(s) <xliff:g id="TIME">%s</xliff:g>."</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"Até à(s) <xliff:g id="TIME">%s</xliff:g>."</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"Reduzir o brilho"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"O NFC está desativado"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"O NFC está ativado"</string> diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml index 3217028a6dff..a9c454e6142f 100644 --- a/packages/SystemUI/res/values-pt/strings.xml +++ b/packages/SystemUI/res/values-pt/strings.xml @@ -412,7 +412,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"Até o nascer do sol"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"Ativar: <xliff:g id="TIME">%s</xliff:g>"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"Até: <xliff:g id="TIME">%s</xliff:g>"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"Reduzir brilho"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"A NFC está desativada"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"A NFC está ativada"</string> diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml index 5b82f0b7e065..d9e48a136a58 100644 --- a/packages/SystemUI/res/values-ro/strings.xml +++ b/packages/SystemUI/res/values-ro/strings.xml @@ -414,7 +414,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"Până la răsărit"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"Activată la <xliff:g id="TIME">%s</xliff:g>"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"Până la <xliff:g id="TIME">%s</xliff:g>"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"Reduceți luminozitatea"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"Serviciul NFC este dezactivat"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"Serviciul NFC este activat"</string> @@ -655,10 +654,8 @@ <string name="show_demo_mode" msgid="3677956462273059726">"Afișați modul demonstrativ"</string> <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Alarmă"</string> - <!-- no translation found for wallet_title (5369767670735827105) --> - <skip /> - <!-- no translation found for wallet_secondary_label (2017028770884957543) --> - <skip /> + <string name="wallet_title" msgid="5369767670735827105">"Wallet"</string> + <string name="wallet_secondary_label" msgid="2017028770884957543">"Gata"</string> <string name="status_bar_work" msgid="5238641949837091056">"Profil de serviciu"</string> <string name="status_bar_airplane" msgid="4848702508684541009">"Mod Avion"</string> <string name="add_tile" msgid="6239678623873086686">"Adăugați o casetă"</string> diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml index d59e4691fa95..2fb31e7755a0 100644 --- a/packages/SystemUI/res/values-ru/strings.xml +++ b/packages/SystemUI/res/values-ru/strings.xml @@ -416,7 +416,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"До рассвета"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"Включить в <xliff:g id="TIME">%s</xliff:g>"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"До <xliff:g id="TIME">%s</xliff:g>"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"Уменьшение яркости"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"Модуль NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"Модуль NFC отключен"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"Модуль NFC включен"</string> @@ -658,10 +657,8 @@ <string name="show_demo_mode" msgid="3677956462273059726">"Перейти в демонстрационный режим"</string> <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Будильник"</string> - <!-- no translation found for wallet_title (5369767670735827105) --> - <skip /> - <!-- no translation found for wallet_secondary_label (2017028770884957543) --> - <skip /> + <string name="wallet_title" msgid="5369767670735827105">"Кошелек"</string> + <string name="wallet_secondary_label" msgid="2017028770884957543">"Готово"</string> <string name="status_bar_work" msgid="5238641949837091056">"Рабочий профиль"</string> <string name="status_bar_airplane" msgid="4848702508684541009">"Режим полета"</string> <string name="add_tile" msgid="6239678623873086686">"Добавить кнопку быстрого доступа"</string> diff --git a/packages/SystemUI/res/values-si/strings.xml b/packages/SystemUI/res/values-si/strings.xml index 9172d5017f94..3e393bf31527 100644 --- a/packages/SystemUI/res/values-si/strings.xml +++ b/packages/SystemUI/res/values-si/strings.xml @@ -412,7 +412,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"හිරු නගින තෙක්"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"<xliff:g id="TIME">%s</xliff:g>ට ක්රියාත්මකයි"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"<xliff:g id="TIME">%s</xliff:g> තෙක්"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"දීප්තිය අඩු කරන්න"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"NFC අබලයි"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"NFC සබලයි"</string> diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml index 1dcf37efb9b5..bbca0dbe3f04 100644 --- a/packages/SystemUI/res/values-sk/strings.xml +++ b/packages/SystemUI/res/values-sk/strings.xml @@ -416,7 +416,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"Do východu slnka"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"Zapne sa o <xliff:g id="TIME">%s</xliff:g>"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"Do <xliff:g id="TIME">%s</xliff:g>"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"Zníženie jasu"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"NFC je deaktivované"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"NFC je aktivované"</string> @@ -658,10 +657,8 @@ <string name="show_demo_mode" msgid="3677956462273059726">"Zobraziť režim ukážky"</string> <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Budík"</string> - <!-- no translation found for wallet_title (5369767670735827105) --> - <skip /> - <!-- no translation found for wallet_secondary_label (2017028770884957543) --> - <skip /> + <string name="wallet_title" msgid="5369767670735827105">"Peňaženka"</string> + <string name="wallet_secondary_label" msgid="2017028770884957543">"Pripravené"</string> <string name="status_bar_work" msgid="5238641949837091056">"Pracovný profil"</string> <string name="status_bar_airplane" msgid="4848702508684541009">"Režim v lietadle"</string> <string name="add_tile" msgid="6239678623873086686">"Pridať dlaždicu"</string> diff --git a/packages/SystemUI/res/values-sl/strings.xml b/packages/SystemUI/res/values-sl/strings.xml index edb94e36d5ed..def787f72905 100644 --- a/packages/SystemUI/res/values-sl/strings.xml +++ b/packages/SystemUI/res/values-sl/strings.xml @@ -416,7 +416,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"Do sončnega vzhoda"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"Vklop ob <xliff:g id="TIME">%s</xliff:g>"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"Do <xliff:g id="TIME">%s</xliff:g>"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"Zmanjšanje svetlosti"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"Tehnologija NFC je onemogočena"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"Tehnologija NFC je omogočena"</string> @@ -658,10 +657,8 @@ <string name="show_demo_mode" msgid="3677956462273059726">"Prikaz predstavitvenega načina"</string> <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Opozorilo"</string> - <!-- no translation found for wallet_title (5369767670735827105) --> - <skip /> - <!-- no translation found for wallet_secondary_label (2017028770884957543) --> - <skip /> + <string name="wallet_title" msgid="5369767670735827105">"Denarnica"</string> + <string name="wallet_secondary_label" msgid="2017028770884957543">"Pripravljeno"</string> <string name="status_bar_work" msgid="5238641949837091056">"Profil za Android Work"</string> <string name="status_bar_airplane" msgid="4848702508684541009">"Način za letalo"</string> <string name="add_tile" msgid="6239678623873086686">"Dodajanje ploščice"</string> diff --git a/packages/SystemUI/res/values-sq/strings.xml b/packages/SystemUI/res/values-sq/strings.xml index 2d84dfde5df4..9e676c4e4d7c 100644 --- a/packages/SystemUI/res/values-sq/strings.xml +++ b/packages/SystemUI/res/values-sq/strings.xml @@ -412,7 +412,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"Deri në lindje të diellit"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"Aktiv në <xliff:g id="TIME">%s</xliff:g>"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"Deri në <xliff:g id="TIME">%s</xliff:g>"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"Redukto ndriçimin"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"NFC është çaktivizuar"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"NFC është aktivizuar"</string> @@ -541,8 +540,7 @@ <string name="monitoring_button_view_policies" msgid="3869724835853502410">"Shiko politikat"</string> <string name="monitoring_button_view_controls" msgid="8316440345340701117">"Shiko kontrollet"</string> <string name="monitoring_description_named_management" msgid="505833016545056036">"Kjo pajisje i përket <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>.\n\nAdministratori i teknologjisë së informacionit mund të monitorojë dhe menaxhojë cilësimet, qasjen e korporatës, aplikacionet, të dhënat e lidhura me pajisjen tënde, si dhe informacionet e vendndodhjes së pajisjes tënde.\n\nPër më shumë informacione, kontakto me administratorin e teknologjisë së informacionit."</string> - <!-- no translation found for monitoring_financed_description_named_management (6108439201399938668) --> - <skip /> + <string name="monitoring_financed_description_named_management" msgid="6108439201399938668">"<xliff:g id="ORGANIZATION_NAME_0">%1$s</xliff:g> mund të arrijë të qaset te të dhënat e lidhura me këtë pajisje, të menaxhojë aplikacionet dhe të ndryshojë cilësimet e kësaj pajisjeje.\n\nNëse ke pyetje, kontakto me <xliff:g id="ORGANIZATION_NAME_1">%2$s</xliff:g>."</string> <string name="monitoring_description_management" msgid="4308879039175729014">"Kjo pajisje i përket organizatës sate.\n\nAdministratori i teknologjisë së informacionit mund të monitorojë dhe menaxhojë cilësimet, qasjen e korporatës, aplikacionet, të dhënat e lidhura me pajisjen tënde, si dhe informacionet e vendndodhjes së pajisjes tënde.\n\nPër më shumë informacione, kontakto me administratorin e teknologjisë së informacionit."</string> <string name="monitoring_description_management_ca_certificate" msgid="7785013130658110130">"Organizata jote instaloi një autoritet certifikate në këtë pajisje. Trafiku i rrjetit tënd të sigurt mund të monitorohet ose modifikohet."</string> <string name="monitoring_description_managed_profile_ca_certificate" msgid="7904323416598435647">"Organizata jote instaloi një autoritet certifikate në profilin tënd të punës. Trafiku i rrjetit tënd të sigurt mund të monitorohet ose modifikohet."</string> @@ -653,10 +651,8 @@ <string name="show_demo_mode" msgid="3677956462273059726">"Shfaq modalitetin e demonstrimit"</string> <string name="status_bar_ethernet" msgid="5690979758988647484">"Eternet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Alarmi"</string> - <!-- no translation found for wallet_title (5369767670735827105) --> - <skip /> - <!-- no translation found for wallet_secondary_label (2017028770884957543) --> - <skip /> + <string name="wallet_title" msgid="5369767670735827105">"Wallet"</string> + <string name="wallet_secondary_label" msgid="2017028770884957543">"Gati"</string> <string name="status_bar_work" msgid="5238641949837091056">"Profili i punës"</string> <string name="status_bar_airplane" msgid="4848702508684541009">"Modaliteti i aeroplanit"</string> <string name="add_tile" msgid="6239678623873086686">"Shto një pllakëz"</string> diff --git a/packages/SystemUI/res/values-sr/strings.xml b/packages/SystemUI/res/values-sr/strings.xml index 0ba23f85d067..5fcb9c79b6fe 100644 --- a/packages/SystemUI/res/values-sr/strings.xml +++ b/packages/SystemUI/res/values-sr/strings.xml @@ -414,7 +414,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"До изласка сунца"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"Укључује се у <xliff:g id="TIME">%s</xliff:g>"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"До <xliff:g id="TIME">%s</xliff:g>"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"Смањите осветљеност"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"NFC је онемогућен"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"NFC је омогућен"</string> diff --git a/packages/SystemUI/res/values-sv/strings.xml b/packages/SystemUI/res/values-sv/strings.xml index 59f290cd1309..52d459ba7347 100644 --- a/packages/SystemUI/res/values-sv/strings.xml +++ b/packages/SystemUI/res/values-sv/strings.xml @@ -412,7 +412,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"Till soluppgången"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"Aktivera kl. <xliff:g id="TIME">%s</xliff:g>"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"Till <xliff:g id="TIME">%s</xliff:g>"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"Minska ljusstyrkan"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"NFC är inaktiverat"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"NFC är aktiverat"</string> @@ -652,10 +651,8 @@ <string name="show_demo_mode" msgid="3677956462273059726">"Visa demoläge"</string> <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Alarm"</string> - <!-- no translation found for wallet_title (5369767670735827105) --> - <skip /> - <!-- no translation found for wallet_secondary_label (2017028770884957543) --> - <skip /> + <string name="wallet_title" msgid="5369767670735827105">"Wallet"</string> + <string name="wallet_secondary_label" msgid="2017028770884957543">"Klar"</string> <string name="status_bar_work" msgid="5238641949837091056">"Jobbprofil"</string> <string name="status_bar_airplane" msgid="4848702508684541009">"Flygplansläge"</string> <string name="add_tile" msgid="6239678623873086686">"Lägg till en ruta"</string> diff --git a/packages/SystemUI/res/values-sw/strings.xml b/packages/SystemUI/res/values-sw/strings.xml index 588231ed6ab1..157c576bf71a 100644 --- a/packages/SystemUI/res/values-sw/strings.xml +++ b/packages/SystemUI/res/values-sw/strings.xml @@ -412,7 +412,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"Hadi macheo"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"Itawashwa saa <xliff:g id="TIME">%s</xliff:g>"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"Hadi saa <xliff:g id="TIME">%s</xliff:g>"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"Punguza ung\'aavu"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"NFC imezimwa"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"NFC imewashwa"</string> @@ -652,10 +651,8 @@ <string name="show_demo_mode" msgid="3677956462273059726">"Onyesha hali ya onyesho"</string> <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethaneti"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Kengele"</string> - <!-- no translation found for wallet_title (5369767670735827105) --> - <skip /> - <!-- no translation found for wallet_secondary_label (2017028770884957543) --> - <skip /> + <string name="wallet_title" msgid="5369767670735827105">"Wallet"</string> + <string name="wallet_secondary_label" msgid="2017028770884957543">"Tayari"</string> <string name="status_bar_work" msgid="5238641949837091056">"Wasifu wa kazini"</string> <string name="status_bar_airplane" msgid="4848702508684541009">"Hali ya ndegeni"</string> <string name="add_tile" msgid="6239678623873086686">"Ongeza kigae"</string> diff --git a/packages/SystemUI/res/values-ta/strings.xml b/packages/SystemUI/res/values-ta/strings.xml index 511c4575b27a..fc632fdec381 100644 --- a/packages/SystemUI/res/values-ta/strings.xml +++ b/packages/SystemUI/res/values-ta/strings.xml @@ -412,7 +412,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"காலை வரை"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"<xliff:g id="TIME">%s</xliff:g>க்கு ஆன் செய்"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"<xliff:g id="TIME">%s</xliff:g> வரை"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"ஒளிர்வைக் குறைத்தல்"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"NFC முடக்கப்பட்டது"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"NFC இயக்கப்பட்டது"</string> @@ -652,10 +651,8 @@ <string name="show_demo_mode" msgid="3677956462273059726">"டெமோ முறையைக் காட்டு"</string> <string name="status_bar_ethernet" msgid="5690979758988647484">"ஈதர்நெட்"</string> <string name="status_bar_alarm" msgid="87160847643623352">"அலாரம்"</string> - <!-- no translation found for wallet_title (5369767670735827105) --> - <skip /> - <!-- no translation found for wallet_secondary_label (2017028770884957543) --> - <skip /> + <string name="wallet_title" msgid="5369767670735827105">"வாலட்"</string> + <string name="wallet_secondary_label" msgid="2017028770884957543">"தயாராக உள்ளது"</string> <string name="status_bar_work" msgid="5238641949837091056">"பணிக் கணக்கு"</string> <string name="status_bar_airplane" msgid="4848702508684541009">"விமானப் பயன்முறை"</string> <string name="add_tile" msgid="6239678623873086686">"டைலைச் சேர்க்கும்"</string> diff --git a/packages/SystemUI/res/values-te/strings.xml b/packages/SystemUI/res/values-te/strings.xml index 421f59643be3..74326dc4eecc 100644 --- a/packages/SystemUI/res/values-te/strings.xml +++ b/packages/SystemUI/res/values-te/strings.xml @@ -412,7 +412,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"సూర్యోదయం వరకు"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"<xliff:g id="TIME">%s</xliff:g> కు ఆన్ అవుతుంది"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"<xliff:g id="TIME">%s</xliff:g> వరకు"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"ప్రకాశాన్ని తగ్గించండి"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"NFC నిలిపివేయబడింది"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"NFC ప్రారంభించబడింది"</string> @@ -515,8 +514,7 @@ <string name="quick_settings_disclosure_parental_controls" msgid="2114102871438223600">"ఈ పరికరాన్ని మీ తల్లి/తండ్రి మేనేజ్ చేస్తున్నారు"</string> <string name="quick_settings_disclosure_management_monitoring" msgid="8231336875820702180">"ఈ పరికరం మీ సంస్థకు చెందినది, కాబట్టి అది నెట్వర్క్ ట్రాఫిక్ను పర్యవేక్షించవచ్చు"</string> <string name="quick_settings_disclosure_named_management_monitoring" msgid="2831423806103479812">"మీ పరికరం <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>కు చెందినది, కాబట్టి అది నెట్వర్క్ ట్రాఫిక్ను పర్యవేక్షించవచ్చు"</string> - <!-- no translation found for quick_settings_financed_disclosure_named_management (2307703784594859524) --> - <skip /> + <string name="quick_settings_financed_disclosure_named_management" msgid="2307703784594859524">"ఈ పరికరం <xliff:g id="ORGANIZATION_NAME">%s</xliff:g> ద్వారా అందించబడింది"</string> <string name="quick_settings_disclosure_management_named_vpn" msgid="6096715329056415588">"ఈ పరికరం మీ సంస్థకు చెందినది, ఇది <xliff:g id="VPN_APP">%1$s</xliff:g>కు కనెక్ట్ అయి ఉంది"</string> <string name="quick_settings_disclosure_named_management_named_vpn" msgid="5302786161534380104">"ఈ పరికరం <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>కు చెందినది, ఇది <xliff:g id="VPN_APP">%2$s</xliff:g>కు కనెక్ట్ అయి ఉంది"</string> <string name="quick_settings_disclosure_management" msgid="5515296598440684962">"ఈ పరికరం మీ సంస్థకు చెందినది"</string> @@ -530,8 +528,7 @@ <string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"మీ వర్క్ ప్రొఫైల్ <xliff:g id="VPN_APP">%1$s</xliff:g>కు కనెక్ట్ చేయబడింది"</string> <string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="5481763430080807797">"<xliff:g id="VPN_APP">%1$s</xliff:g>కు మీ వ్యక్తిగత ప్రొఫైల్ కనెక్ట్ చేయబడింది"</string> <string name="quick_settings_disclosure_named_vpn" msgid="2350838218824492465">"ఈ పరికరం <xliff:g id="VPN_APP">%1$s</xliff:g>కు కనెక్ట్ అయి ఉంది"</string> - <!-- no translation found for monitoring_title_financed_device (3659962357973919387) --> - <skip /> + <string name="monitoring_title_financed_device" msgid="3659962357973919387">"ఈ పరికరం <xliff:g id="ORGANIZATION_NAME">%s</xliff:g> ద్వారా అందించబడింది"</string> <string name="monitoring_title_device_owned" msgid="7029691083837606324">"పరికర నిర్వహణ"</string> <string name="monitoring_title_profile_owned" msgid="6301118649405449568">"ప్రొఫైల్ పర్యవేక్షణ"</string> <string name="monitoring_title" msgid="4063890083735924568">"నెట్వర్క్ పర్యవేక్షణ"</string> @@ -543,8 +540,7 @@ <string name="monitoring_button_view_policies" msgid="3869724835853502410">"విధానాలను వీక్షించండి"</string> <string name="monitoring_button_view_controls" msgid="8316440345340701117">"నియంత్రణలను చూడండి"</string> <string name="monitoring_description_named_management" msgid="505833016545056036">"ఈ పరికరం <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>కు చెందినది.\n\nసెట్టింగ్లను, కార్పొరేట్ యాక్సెస్ను, యాప్లను, మీ పరికరానికి సంబంధించిన డేటాను, అలాగే మీ పరికరం యొక్క లొకేషన్ సమాచారాన్ని మీ IT అడ్మిన్ పర్యవేక్షించగలరు, మేనేజ్ చేయగలరు.\n\nమరింత సమాచారం కోసం, మీ IT అడ్మిన్ను సంప్రదించండి."</string> - <!-- no translation found for monitoring_financed_description_named_management (6108439201399938668) --> - <skip /> + <string name="monitoring_financed_description_named_management" msgid="6108439201399938668">"<xliff:g id="ORGANIZATION_NAME_0">%1$s</xliff:g>, ఈ పరికరంతో అనుబంధించబడిన డేటాను యాక్సెస్ చేయవచ్చు, యాప్లను మేనేజ్ చేయవచ్చు అలాగే ఈ పరికరాల సెట్టింగ్లను మార్చవచ్చు.\n\nమీకు ఏవైనా సందేహాలు ఉంటే, <xliff:g id="ORGANIZATION_NAME_1">%2$s</xliff:g>ను కాంటాక్ట్ చేయండి."</string> <string name="monitoring_description_management" msgid="4308879039175729014">"ఈ పరికరం మీ సంస్థకు చెందినది.\n\nసెట్టింగ్లను, కార్పొరేట్ యాక్సెస్ను, యాప్లను, మీ పరికరానికి సంబంధించిన డేటాను, అలాగే మీ పరికరం యొక్క లొకేషన్ సమాచారాన్ని మీ IT అడ్మిన్ పర్యవేక్షించగలరు, మేనేజ్ చేయగలరు.\n\nమరింత సమాచారం కోసం, మీ IT అడ్మిన్ను సంప్రదించండి."</string> <string name="monitoring_description_management_ca_certificate" msgid="7785013130658110130">"ఈ పరికరంలో మీ సంస్థ ఒక ప్రమాణపత్ర అధికారాన్ని ఇన్స్టాల్ చేసింది. మీ సురక్షిత నెట్వర్క్ ట్రాఫిక్ పర్యవేక్షించబడవచ్చు లేదా సవరించబడవచ్చు."</string> <string name="monitoring_description_managed_profile_ca_certificate" msgid="7904323416598435647">"మీ కార్యాలయ ప్రొఫైల్లో మీ సంస్థ ఒక ప్రమాణపత్ర అధికారాన్ని ఇన్స్టాల్ చేసింది. మీ సురక్షిత నెట్వర్క్ ట్రాఫిక్ పర్యవేక్షించబడవచ్చు లేదా సవరించబడవచ్చు."</string> @@ -655,10 +651,8 @@ <string name="show_demo_mode" msgid="3677956462273059726">"డెమో మోడ్ చూపు"</string> <string name="status_bar_ethernet" msgid="5690979758988647484">"ఈథర్నెట్"</string> <string name="status_bar_alarm" msgid="87160847643623352">"అలారం"</string> - <!-- no translation found for wallet_title (5369767670735827105) --> - <skip /> - <!-- no translation found for wallet_secondary_label (2017028770884957543) --> - <skip /> + <string name="wallet_title" msgid="5369767670735827105">"Wallet"</string> + <string name="wallet_secondary_label" msgid="2017028770884957543">"సిద్ధంగా ఉంది"</string> <string name="status_bar_work" msgid="5238641949837091056">"కార్యాలయ ప్రొఫైల్"</string> <string name="status_bar_airplane" msgid="4848702508684541009">"ఎయిర్ప్లేన్ మోడ్"</string> <string name="add_tile" msgid="6239678623873086686">"టైల్ను జోడించండి"</string> @@ -766,7 +760,7 @@ <string name="notification_conversation_unmute" msgid="2692255619510896710">"అలర్ట్ చేయడం"</string> <string name="notification_conversation_bubble" msgid="2242180995373949022">"బబుల్ను చూపించు"</string> <string name="notification_conversation_unbubble" msgid="6908427185031099868">"బబుల్స్ తీసివేయి"</string> - <string name="notification_conversation_home_screen" msgid="8347136037958438935">"హోమ్ స్క్రీన్కు జోడించు"</string> + <string name="notification_conversation_home_screen" msgid="8347136037958438935">"హోమ్ స్క్రీన్కు జోడించండి"</string> <string name="notification_menu_accessibility" msgid="8984166825879886773">"<xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="MENU_DESCRIPTION">%2$s</xliff:g>"</string> <string name="notification_menu_gear_description" msgid="6429668976593634862">"నోటిఫికేషన్ నియంత్రణలు"</string> <string name="notification_menu_snooze_description" msgid="4740133348901973244">"నోటిఫికేషన్ తాత్కాలిక ఆపివేత ఎంపికలు"</string> @@ -905,8 +899,7 @@ <string name="accessibility_quick_settings_collapse" msgid="4674876336725041982">"శీఘ్ర సెట్టింగ్లను మూసివేయండి."</string> <string name="accessibility_quick_settings_alarm_set" msgid="7237918261045099853">"అలారం సెట్ చేయబడింది."</string> <string name="accessibility_quick_settings_user" msgid="505821942882668619">"<xliff:g id="ID_1">%s</xliff:g> వలె సైన్ ఇన్ చేసారు"</string> - <!-- no translation found for accessibility_quick_settings_choose_user_action (4554388498186576087) --> - <skip /> + <string name="accessibility_quick_settings_choose_user_action" msgid="4554388498186576087">"యూజర్ను ఎంపిక చేయండి"</string> <string name="data_connection_no_internet" msgid="691058178914184544">"ఇంటర్నెట్ లేదు"</string> <string name="accessibility_quick_settings_open_details" msgid="4879279912389052142">"వివరాలను తెరవండి."</string> <string name="accessibility_quick_settings_not_available" msgid="6860875849497473854">"<xliff:g id="REASON">%s</xliff:g> కారణంగా అందుబాటులో లేదు"</string> @@ -1023,10 +1016,8 @@ <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"ఫుల్ స్క్రీన్ను మ్యాగ్నిఫై చేయండి"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"స్క్రీన్లో భాగాన్ని మాగ్నిఫై చేయండి"</string> <string name="magnification_mode_switch_click_label" msgid="2786203505805898199">"స్విచ్ చేయి"</string> - <!-- no translation found for accessibility_floating_button_migration_tooltip (4431046858918714564) --> - <skip /> - <!-- no translation found for accessibility_floating_button_docking_tooltip (6814897496767461517) --> - <skip /> + <string name="accessibility_floating_button_migration_tooltip" msgid="4431046858918714564">"యాక్సెసిబిలిటీ బటన్, యాక్సెసిబిలిటీ సంజ్ఞను భర్తీ చేసింది\n\n"<annotation id="link">"సెట్టింగ్లను చూడండి"</annotation></string> + <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"తాత్కాలికంగా దానిని దాచడానికి బటన్ను చివరకు తరలించండి"</string> <string name="quick_controls_title" msgid="6839108006171302273">"పరికరం నియంత్రణలు"</string> <string name="quick_controls_subtitle" msgid="1667408093326318053">"మీ కనెక్ట్ అయిన పరికరాలకు నియంత్రణలను జోడించండి"</string> <string name="quick_controls_setup_title" msgid="8901436655997849822">"పరికరం నియంత్రణలను సెటప్ చేయడం"</string> diff --git a/packages/SystemUI/res/values-th/strings.xml b/packages/SystemUI/res/values-th/strings.xml index 4e015557f4dd..2635418f2831 100644 --- a/packages/SystemUI/res/values-th/strings.xml +++ b/packages/SystemUI/res/values-th/strings.xml @@ -412,7 +412,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"จนพระอาทิตย์ขึ้น"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"เปิดเวลา <xliff:g id="TIME">%s</xliff:g>"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"จนถึง <xliff:g id="TIME">%s</xliff:g>"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"ลดความสว่าง"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"NFC ถูกปิดใช้งาน"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"เปิดใช้งาน NFC แล้ว"</string> @@ -652,10 +651,8 @@ <string name="show_demo_mode" msgid="3677956462273059726">"แสดงโหมดสาธิต"</string> <string name="status_bar_ethernet" msgid="5690979758988647484">"อีเทอร์เน็ต"</string> <string name="status_bar_alarm" msgid="87160847643623352">"การปลุก"</string> - <!-- no translation found for wallet_title (5369767670735827105) --> - <skip /> - <!-- no translation found for wallet_secondary_label (2017028770884957543) --> - <skip /> + <string name="wallet_title" msgid="5369767670735827105">"Wallet"</string> + <string name="wallet_secondary_label" msgid="2017028770884957543">"พร้อม"</string> <string name="status_bar_work" msgid="5238641949837091056">"โปรไฟล์งาน"</string> <string name="status_bar_airplane" msgid="4848702508684541009">"โหมดบนเครื่องบิน"</string> <string name="add_tile" msgid="6239678623873086686">"เพิ่มไทล์"</string> diff --git a/packages/SystemUI/res/values-tl/strings.xml b/packages/SystemUI/res/values-tl/strings.xml index 789c0832c7cd..57e289fa4224 100644 --- a/packages/SystemUI/res/values-tl/strings.xml +++ b/packages/SystemUI/res/values-tl/strings.xml @@ -412,7 +412,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"Hanggang sunrise"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"Ma-o-on nang <xliff:g id="TIME">%s</xliff:g>"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"Hanggang <xliff:g id="TIME">%s</xliff:g>"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"Bawasan ang liwanag"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"Naka-disable ang NFC"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"Naka-enable ang NFC"</string> @@ -652,10 +651,8 @@ <string name="show_demo_mode" msgid="3677956462273059726">"Ipakita ang demo mode"</string> <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Alarma"</string> - <!-- no translation found for wallet_title (5369767670735827105) --> - <skip /> - <!-- no translation found for wallet_secondary_label (2017028770884957543) --> - <skip /> + <string name="wallet_title" msgid="5369767670735827105">"Wallet"</string> + <string name="wallet_secondary_label" msgid="2017028770884957543">"Handa na"</string> <string name="status_bar_work" msgid="5238641949837091056">"Profile sa trabaho"</string> <string name="status_bar_airplane" msgid="4848702508684541009">"Airplane mode"</string> <string name="add_tile" msgid="6239678623873086686">"Magdagdag ng tile"</string> diff --git a/packages/SystemUI/res/values-tr/strings.xml b/packages/SystemUI/res/values-tr/strings.xml index b236418d82ec..a36c8d242161 100644 --- a/packages/SystemUI/res/values-tr/strings.xml +++ b/packages/SystemUI/res/values-tr/strings.xml @@ -412,7 +412,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"Sabaha kadar"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"Açılacağı saat: <xliff:g id="TIME">%s</xliff:g>"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"Şu saate kadar: <xliff:g id="TIME">%s</xliff:g>"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"Parlaklığı azalt"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"NFC devre dışı"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"NFC etkin"</string> @@ -652,10 +651,8 @@ <string name="show_demo_mode" msgid="3677956462273059726">"Demo modunu göster"</string> <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Alarm"</string> - <!-- no translation found for wallet_title (5369767670735827105) --> - <skip /> - <!-- no translation found for wallet_secondary_label (2017028770884957543) --> - <skip /> + <string name="wallet_title" msgid="5369767670735827105">"Cüzdan"</string> + <string name="wallet_secondary_label" msgid="2017028770884957543">"Hazır"</string> <string name="status_bar_work" msgid="5238641949837091056">"İş profili"</string> <string name="status_bar_airplane" msgid="4848702508684541009">"Uçak modu"</string> <string name="add_tile" msgid="6239678623873086686">"Blok ekle"</string> diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml index bcff82f24677..f7923eb65193 100644 --- a/packages/SystemUI/res/values-uk/strings.xml +++ b/packages/SystemUI/res/values-uk/strings.xml @@ -416,7 +416,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"До сходу сонця"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"Вмикається о <xliff:g id="TIME">%s</xliff:g>"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"До <xliff:g id="TIME">%s</xliff:g>"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"Зменшення яскравості"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"NFC вимкнено"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"NFC ввімкнено"</string> @@ -658,10 +657,8 @@ <string name="show_demo_mode" msgid="3677956462273059726">"Показати демонстраційний режим"</string> <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Сигнал"</string> - <!-- no translation found for wallet_title (5369767670735827105) --> - <skip /> - <!-- no translation found for wallet_secondary_label (2017028770884957543) --> - <skip /> + <string name="wallet_title" msgid="5369767670735827105">"Гаманець"</string> + <string name="wallet_secondary_label" msgid="2017028770884957543">"Готово"</string> <string name="status_bar_work" msgid="5238641949837091056">"Робочий профіль"</string> <string name="status_bar_airplane" msgid="4848702508684541009">"Режим польоту"</string> <string name="add_tile" msgid="6239678623873086686">"Додавання опції"</string> diff --git a/packages/SystemUI/res/values-ur/strings.xml b/packages/SystemUI/res/values-ur/strings.xml index 7590a50aa68c..548784d0fe9e 100644 --- a/packages/SystemUI/res/values-ur/strings.xml +++ b/packages/SystemUI/res/values-ur/strings.xml @@ -412,7 +412,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"طلوع آفتاب تک"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"آن ہوگی بوقت <xliff:g id="TIME">%s</xliff:g>"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"<xliff:g id="TIME">%s</xliff:g> تک"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"چمک کم کریں"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"NFC غیر فعال ہے"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"NFC فعال ہے"</string> @@ -541,8 +540,7 @@ <string name="monitoring_button_view_policies" msgid="3869724835853502410">"پالیسیاں دیکھیں"</string> <string name="monitoring_button_view_controls" msgid="8316440345340701117">"کنٹرولز دیکھیں"</string> <string name="monitoring_description_named_management" msgid="505833016545056036">"یہ آلہ <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> کا ہے۔\n\nآپ کا IT منتظم ترتیبات، کارپوریٹ رسائی، ایپس، آپ کے آلہ سے وابستہ ڈیٹا اور آپ کے آلہ کے مقام کی معلومات کی نگرانی اور ان کا نظم کر سکتا ہے۔\n\nمزید معلومات کے لیے اپنے IT منتظم سے رابطہ کریں۔"</string> - <!-- no translation found for monitoring_financed_description_named_management (6108439201399938668) --> - <skip /> + <string name="monitoring_financed_description_named_management" msgid="6108439201399938668">"<xliff:g id="ORGANIZATION_NAME_0">%1$s</xliff:g> اس آلے سے وابستہ ڈیٹا تک رسائی حاصل، ایپس کا نظم اور ان آلات کی ترتیبات کو تبدیل کر سکتا ہے۔\n\nاگر آپ سوالات پوچھنا چاہتے ہیں تو <xliff:g id="ORGANIZATION_NAME_1">%2$s</xliff:g> سے رابطہ کریں۔"</string> <string name="monitoring_description_management" msgid="4308879039175729014">"یہ آلہ آپ کی تنظیم کا ہے۔\n\nآپ کا IT منتظم ترتیبات، کارپوریٹ رسائی، ایپس، آپ کے آلہ سے وابستہ ڈیٹا اور آپ کے آلہ کے مقام کی معلومات کی نگرانی اور ان کا نظم کر سکتا ہے۔\n\nمزید معلومات کے لیے اپنے IT منتظم سے رابطہ کریں۔"</string> <string name="monitoring_description_management_ca_certificate" msgid="7785013130658110130">"آپ کی تنظیم نے اس آلے پر ایک سرٹیفکیٹ کی اتھارٹی کو انسٹال کیا ہے۔ آپ کا محفوظ نیٹ ورک ٹریفک مانیٹر ہو سکتا ہے یا اس میں ترمیم کی جا سکتی ہے۔"</string> <string name="monitoring_description_managed_profile_ca_certificate" msgid="7904323416598435647">"آپ کی تنظیم نے آپ کے دفتری پروفائل میں ایک سرٹیفکیٹ کی اتھارٹی کو انسٹال کیا ہے۔ آپ کا محفوظ نیٹ ورک ٹریفک مانیٹر ہو سکتا ہے یا اس میں ترمیم کی جا سکتی ہے۔"</string> @@ -653,10 +651,8 @@ <string name="show_demo_mode" msgid="3677956462273059726">"ڈیمو موڈ دکھائیں"</string> <string name="status_bar_ethernet" msgid="5690979758988647484">"ایتھرنیٹ"</string> <string name="status_bar_alarm" msgid="87160847643623352">"الارم"</string> - <!-- no translation found for wallet_title (5369767670735827105) --> - <skip /> - <!-- no translation found for wallet_secondary_label (2017028770884957543) --> - <skip /> + <string name="wallet_title" msgid="5369767670735827105">"Wallet"</string> + <string name="wallet_secondary_label" msgid="2017028770884957543">"تیار ہے"</string> <string name="status_bar_work" msgid="5238641949837091056">"دفتری پروفائل"</string> <string name="status_bar_airplane" msgid="4848702508684541009">"ہوائی جہاز وضع"</string> <string name="add_tile" msgid="6239678623873086686">"ٹائل شامل کریں"</string> @@ -1017,8 +1013,7 @@ <string name="accessibility_control_move_left" msgid="8156206978511401995">"بائیں منتقل کریں"</string> <string name="accessibility_control_move_right" msgid="8926821093629582888">"دائیں منتقل کریں"</string> <string name="magnification_mode_switch_description" msgid="2698364322069934733">"میگنیفکیشن پر سوئچ کریں"</string> - <!-- no translation found for magnification_mode_switch_state_full_screen (5229653514979530561) --> - <skip /> + <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"فُل اسکرین کو بڑا کریں"</string> <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"اسکرین کا حصہ بڑا کریں"</string> <string name="magnification_mode_switch_click_label" msgid="2786203505805898199">"سوئچ کریں"</string> <string name="accessibility_floating_button_migration_tooltip" msgid="4431046858918714564">"ایکسیسبیلٹی بٹن کو ایکسیسبیلٹی اشارے سے بدل دیا گیا\n\n"<annotation id="link">"ترتیبات دیکھیں"</annotation></string> diff --git a/packages/SystemUI/res/values-uz/strings.xml b/packages/SystemUI/res/values-uz/strings.xml index eace1303b54e..42da6f58b514 100644 --- a/packages/SystemUI/res/values-uz/strings.xml +++ b/packages/SystemUI/res/values-uz/strings.xml @@ -412,7 +412,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"Quyosh chiqqunicha"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"<xliff:g id="TIME">%s</xliff:g> da yoqiladi"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"<xliff:g id="TIME">%s</xliff:g> gacha"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"Yorqinlikni pasaytirish"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"NFC o‘chiq"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"NFC yoniq"</string> @@ -652,10 +651,8 @@ <string name="show_demo_mode" msgid="3677956462273059726">"Demo rejimni ko‘rsatish"</string> <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Signal"</string> - <!-- no translation found for wallet_title (5369767670735827105) --> - <skip /> - <!-- no translation found for wallet_secondary_label (2017028770884957543) --> - <skip /> + <string name="wallet_title" msgid="5369767670735827105">"Wallet"</string> + <string name="wallet_secondary_label" msgid="2017028770884957543">"Tayyor"</string> <string name="status_bar_work" msgid="5238641949837091056">"Ish profili"</string> <string name="status_bar_airplane" msgid="4848702508684541009">"Parvoz rejimi"</string> <string name="add_tile" msgid="6239678623873086686">"Tezkor sozlamalar tugmasini qo‘shish"</string> diff --git a/packages/SystemUI/res/values-vi/strings.xml b/packages/SystemUI/res/values-vi/strings.xml index 4640aa40f39c..a137a124786f 100644 --- a/packages/SystemUI/res/values-vi/strings.xml +++ b/packages/SystemUI/res/values-vi/strings.xml @@ -412,7 +412,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"Cho đến khi trời sáng"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"Bật vào lúc <xliff:g id="TIME">%s</xliff:g>"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"Cho đến <xliff:g id="TIME">%s</xliff:g>"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"Giảm độ sáng"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"NFC đã được tắt"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"NFC đã được bật"</string> @@ -652,10 +651,8 @@ <string name="show_demo_mode" msgid="3677956462273059726">"Hiển thị chế độ trình diễn"</string> <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"Báo thức"</string> - <!-- no translation found for wallet_title (5369767670735827105) --> - <skip /> - <!-- no translation found for wallet_secondary_label (2017028770884957543) --> - <skip /> + <string name="wallet_title" msgid="5369767670735827105">"Ví"</string> + <string name="wallet_secondary_label" msgid="2017028770884957543">"Sẵn sàng"</string> <string name="status_bar_work" msgid="5238641949837091056">"Hồ sơ công việc"</string> <string name="status_bar_airplane" msgid="4848702508684541009">"Chế độ máy bay"</string> <string name="add_tile" msgid="6239678623873086686">"Thêm ô"</string> diff --git a/packages/SystemUI/res/values-zh-rCN/strings.xml b/packages/SystemUI/res/values-zh-rCN/strings.xml index 236879afefa6..b78569c35ab8 100644 --- a/packages/SystemUI/res/values-zh-rCN/strings.xml +++ b/packages/SystemUI/res/values-zh-rCN/strings.xml @@ -412,7 +412,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"在日出时关闭"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"在<xliff:g id="TIME">%s</xliff:g> 开启"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"直到<xliff:g id="TIME">%s</xliff:g>"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"调低亮度"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"NFC 已停用"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"NFC 已启用"</string> @@ -652,10 +651,8 @@ <string name="show_demo_mode" msgid="3677956462273059726">"显示演示模式"</string> <string name="status_bar_ethernet" msgid="5690979758988647484">"以太网"</string> <string name="status_bar_alarm" msgid="87160847643623352">"闹钟"</string> - <!-- no translation found for wallet_title (5369767670735827105) --> - <skip /> - <!-- no translation found for wallet_secondary_label (2017028770884957543) --> - <skip /> + <string name="wallet_title" msgid="5369767670735827105">"电子钱包"</string> + <string name="wallet_secondary_label" msgid="2017028770884957543">"已可使用"</string> <string name="status_bar_work" msgid="5238641949837091056">"工作资料"</string> <string name="status_bar_airplane" msgid="4848702508684541009">"飞行模式"</string> <string name="add_tile" msgid="6239678623873086686">"添加图块"</string> diff --git a/packages/SystemUI/res/values-zh-rHK/strings.xml b/packages/SystemUI/res/values-zh-rHK/strings.xml index c204ffdac81a..f5481dfc0109 100644 --- a/packages/SystemUI/res/values-zh-rHK/strings.xml +++ b/packages/SystemUI/res/values-zh-rHK/strings.xml @@ -412,7 +412,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"在日出時關閉"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"於<xliff:g id="TIME">%s</xliff:g>開啟"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"直至<xliff:g id="TIME">%s</xliff:g>"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"調低亮度"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"NFC 已停用"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"NFC 已啟用"</string> @@ -652,10 +651,8 @@ <string name="show_demo_mode" msgid="3677956462273059726">"顯示示範模式"</string> <string name="status_bar_ethernet" msgid="5690979758988647484">"以太網"</string> <string name="status_bar_alarm" msgid="87160847643623352">"鬧鐘"</string> - <!-- no translation found for wallet_title (5369767670735827105) --> - <skip /> - <!-- no translation found for wallet_secondary_label (2017028770884957543) --> - <skip /> + <string name="wallet_title" msgid="5369767670735827105">"電子錢包"</string> + <string name="wallet_secondary_label" msgid="2017028770884957543">"已可使用"</string> <string name="status_bar_work" msgid="5238641949837091056">"工作設定檔"</string> <string name="status_bar_airplane" msgid="4848702508684541009">"飛行模式"</string> <string name="add_tile" msgid="6239678623873086686">"加入圖塊"</string> diff --git a/packages/SystemUI/res/values-zh-rTW/strings.xml b/packages/SystemUI/res/values-zh-rTW/strings.xml index fedd3c06c6dc..b7cbed1a1529 100644 --- a/packages/SystemUI/res/values-zh-rTW/strings.xml +++ b/packages/SystemUI/res/values-zh-rTW/strings.xml @@ -412,7 +412,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"於日出時關閉"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"開啟時間:<xliff:g id="TIME">%s</xliff:g>"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"關閉時間:<xliff:g id="TIME">%s</xliff:g>"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"調低亮度"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"NFC 已停用"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"NFC 已啟用"</string> @@ -652,10 +651,8 @@ <string name="show_demo_mode" msgid="3677956462273059726">"顯示示範模式"</string> <string name="status_bar_ethernet" msgid="5690979758988647484">"乙太網路"</string> <string name="status_bar_alarm" msgid="87160847643623352">"鬧鐘"</string> - <!-- no translation found for wallet_title (5369767670735827105) --> - <skip /> - <!-- no translation found for wallet_secondary_label (2017028770884957543) --> - <skip /> + <string name="wallet_title" msgid="5369767670735827105">"電子錢包"</string> + <string name="wallet_secondary_label" msgid="2017028770884957543">"已可使用"</string> <string name="status_bar_work" msgid="5238641949837091056">"工作資料夾"</string> <string name="status_bar_airplane" msgid="4848702508684541009">"飛航模式"</string> <string name="add_tile" msgid="6239678623873086686">"新增圖塊"</string> diff --git a/packages/SystemUI/res/values-zu/strings.xml b/packages/SystemUI/res/values-zu/strings.xml index aa95cfad419c..c0953834a119 100644 --- a/packages/SystemUI/res/values-zu/strings.xml +++ b/packages/SystemUI/res/values-zu/strings.xml @@ -412,7 +412,6 @@ <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"Kuze kube sekuphumeni kwelanga"</string> <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"Kuvulwe ngo-<xliff:g id="TIME">%s</xliff:g>"</string> <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"Kuze kube ngu-<xliff:g id="TIME">%s</xliff:g>"</string> - <string name="quick_settings_reduce_bright_colors_label" msgid="7537352080559075175">"Nciphisa ukukhanya"</string> <string name="quick_settings_nfc_label" msgid="1054317416221168085">"I-NFC"</string> <string name="quick_settings_nfc_off" msgid="3465000058515424663">"I-NFC ikhutshaziwe"</string> <string name="quick_settings_nfc_on" msgid="1004976611203202230">"I-NFC inikwe amandla"</string> @@ -652,10 +651,8 @@ <string name="show_demo_mode" msgid="3677956462273059726">"Bonisa imodi yedemo"</string> <string name="status_bar_ethernet" msgid="5690979758988647484">"I-Ethernet"</string> <string name="status_bar_alarm" msgid="87160847643623352">"I-alamu"</string> - <!-- no translation found for wallet_title (5369767670735827105) --> - <skip /> - <!-- no translation found for wallet_secondary_label (2017028770884957543) --> - <skip /> + <string name="wallet_title" msgid="5369767670735827105">"I-wallet"</string> + <string name="wallet_secondary_label" msgid="2017028770884957543">"Isikulungele"</string> <string name="status_bar_work" msgid="5238641949837091056">"Iphrofayela yomsebenzi"</string> <string name="status_bar_airplane" msgid="4848702508684541009">"Imodi yendiza"</string> <string name="add_tile" msgid="6239678623873086686">"Engeza ithayili"</string> diff --git a/packages/SystemUI/res/values/colors.xml b/packages/SystemUI/res/values/colors.xml index a773b2242eaa..4e3e64ac79f4 100644 --- a/packages/SystemUI/res/values/colors.xml +++ b/packages/SystemUI/res/values/colors.xml @@ -272,8 +272,7 @@ <color name="screenrecord_status_color">#E94235</color> <!-- TODO(b/178093014) Colors for privacy dialog. These should be changed to the new palette --> - <color name="privacy_circle_camera">#1E8E3E</color> <!-- g600 --> - <color name="privacy_circle_microphone_location">#E8710A</color> <!--o600 --> + <color name="privacy_circle">#1E8E3E</color> <!-- g600 --> <!-- Accessibility floating menu --> <color name="accessibility_floating_menu_background">#CCFFFFFF</color> <!-- 80% --> diff --git a/packages/SystemUI/res/values/flags.xml b/packages/SystemUI/res/values/flags.xml index 52a97b130937..2f3fbe74d5fa 100644 --- a/packages/SystemUI/res/values/flags.xml +++ b/packages/SystemUI/res/values/flags.xml @@ -45,8 +45,6 @@ <bool name="flag_toast_style">false</bool> - <bool name="flag_navigation_bar_overlay">false</bool> - <bool name="flag_pm_lite">false</bool> <bool name="flag_alarm_tile">false</bool> diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java b/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java index 04b46705226f..aa66b75325c2 100644 --- a/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java +++ b/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java @@ -531,9 +531,13 @@ public class DozeTriggers implements DozeMachine.Part { Assert.isMainThread(); mDozeHost.extendPulse(reason); + // we can't determine the dozing state if we're currently transitioning + final DozeMachine.State dozeState = + mMachine.isExecutingTransition() ? null : mMachine.getState(); + // When already pulsing we're allowed to show the wallpaper directly without // requesting a new pulse. - if (mMachine.getState() == DozeMachine.State.DOZE_PULSING + if (dozeState == DozeMachine.State.DOZE_PULSING && reason == DozeLog.PULSE_REASON_SENSOR_WAKE_LOCK_SCREEN) { mMachine.requestState(DozeMachine.State.DOZE_PULSING_BRIGHT); return; @@ -541,8 +545,7 @@ public class DozeTriggers implements DozeMachine.Part { if (mPulsePending || !mAllowPulseTriggers || !canPulse()) { if (mAllowPulseTriggers) { - mDozeLog.tracePulseDropped(mPulsePending, mMachine.getState(), - mDozeHost.isPulsingBlocked()); + mDozeLog.tracePulseDropped(mPulsePending, dozeState, mDozeHost.isPulsingBlocked()); } runIfNotNull(onPulseSuppressedListener); return; diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarOverlayController.java b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarOverlayController.java index 62b9458447d8..2d0d5cd73aac 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarOverlayController.java +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarOverlayController.java @@ -21,7 +21,6 @@ import android.content.Context; import android.view.View; import com.android.systemui.dagger.SysUISingleton; -import com.android.systemui.statusbar.FeatureFlags; import java.util.function.Consumer; @@ -32,12 +31,10 @@ import javax.inject.Inject; public class NavigationBarOverlayController { protected final Context mContext; - protected final FeatureFlags mFeatureFlags; @Inject - public NavigationBarOverlayController(Context context, FeatureFlags featureFlags) { + public NavigationBarOverlayController(Context context) { mContext = context; - mFeatureFlags = featureFlags; } public Context getContext() { @@ -45,7 +42,7 @@ public class NavigationBarOverlayController { } public boolean isNavigationBarOverlayEnabled() { - return mFeatureFlags.isNavigationBarOverlayEnabled(); + return false; } /** diff --git a/packages/SystemUI/src/com/android/systemui/privacy/OngoingPrivacyChip.kt b/packages/SystemUI/src/com/android/systemui/privacy/OngoingPrivacyChip.kt index bdd37fc521fa..9cd97ff8e343 100644 --- a/packages/SystemUI/src/com/android/systemui/privacy/OngoingPrivacyChip.kt +++ b/packages/SystemUI/src/com/android/systemui/privacy/OngoingPrivacyChip.kt @@ -33,8 +33,6 @@ class OngoingPrivacyChip @JvmOverloads constructor( private var iconMargin = 0 private var iconSize = 0 private var iconColor = 0 - private var defaultBackgroundColor = 0 - private var cameraBackgroundColor = 0 private lateinit var iconsContainer: LinearLayout @@ -75,11 +73,6 @@ class OngoingPrivacyChip @JvmOverloads constructor( if (!privacyList.isEmpty()) { generateContentDescription(builder) setIcons(builder, iconsContainer) - if (builder.types.contains(PrivacyType.TYPE_CAMERA)) { - iconsContainer.background.setTint(cameraBackgroundColor) - } else { - iconsContainer.background.setTint(defaultBackgroundColor) - } } else { iconsContainer.removeAllViews() } @@ -99,8 +92,6 @@ class OngoingPrivacyChip @JvmOverloads constructor( .getDimensionPixelSize(R.dimen.ongoing_appops_chip_icon_size) iconColor = Utils.getColorAttrDefaultColor(context, com.android.internal.R.attr.colorPrimary) - defaultBackgroundColor = context.getColor(R.color.privacy_circle_microphone_location) - cameraBackgroundColor = context.getColor(R.color.privacy_circle_camera) val padding = context.resources .getDimensionPixelSize(R.dimen.ongoing_appops_chip_side_padding) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/FeatureFlags.java b/packages/SystemUI/src/com/android/systemui/statusbar/FeatureFlags.java index 708bdfee95d8..90c3dfcee5bf 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/FeatureFlags.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/FeatureFlags.java @@ -87,10 +87,6 @@ public class FeatureFlags { return mFlagReader.isEnabled(R.bool.flag_wallet); } - public boolean isNavigationBarOverlayEnabled() { - return mFlagReader.isEnabled(R.bool.flag_navigation_bar_overlay); - } - public boolean isPMLiteEnabled() { return mFlagReader.isEnabled(R.bool.flag_pm_lite); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/ActivityLaunchAnimator.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/ActivityLaunchAnimator.java index 85a1aed68559..23d13d33bda0 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/ActivityLaunchAnimator.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/ActivityLaunchAnimator.java @@ -16,6 +16,8 @@ package com.android.systemui.statusbar.notification; +import static android.view.WindowManager.LayoutParams.TYPE_NAVIGATION_BAR; + import static com.android.internal.jank.InteractionJankMonitor.CUJ_NOTIFICATION_APP_START; import android.animation.Animator; @@ -34,6 +36,8 @@ import android.view.SyncRtSurfaceTransactionApplier; import android.view.SyncRtSurfaceTransactionApplier.SurfaceParams; import android.view.View; import android.view.WindowManager; +import android.view.animation.Interpolator; +import android.view.animation.PathInterpolator; import com.android.internal.jank.InteractionJankMonitor; import com.android.internal.policy.ScreenDecorationsUtils; @@ -59,6 +63,14 @@ public class ActivityLaunchAnimator { public static final long ANIMATION_DELAY_ICON_FADE_IN = ANIMATION_DURATION - CollapsedStatusBarFragment.FADE_IN_DURATION - CollapsedStatusBarFragment.FADE_IN_DELAY - 16; + private static final int ANIMATION_DURATION_NAV_FADE_IN = 266; + private static final int ANIMATION_DURATION_NAV_FADE_OUT = 133; + private static final long ANIMATION_DELAY_NAV_FADE_IN = + ANIMATION_DURATION - ANIMATION_DURATION_NAV_FADE_IN; + private static final Interpolator NAV_FADE_IN_INTERPOLATOR = + new PathInterpolator(0f, 0f, 0f, 1f); + private static final Interpolator NAV_FADE_OUT_INTERPOLATOR = + new PathInterpolator(0.2f, 0f, 1f, 1f); private static final long LAUNCH_TIMEOUT = 500; private final NotificationPanelViewController mNotificationPanel; private final NotificationListContainer mNotificationContainer; @@ -208,6 +220,8 @@ public class ActivityLaunchAnimator { int notificationHeight = Math.max(mSourceNotification.getActualHeight() - mSourceNotification.getClipBottomAmount(), 0); int notificationWidth = mSourceNotification.getWidth(); + final RemoteAnimationTarget navigationBarTarget = + getNavBarRemoteAnimationTarget(remoteAnimationNonAppTargets); anim.setDuration(ANIMATION_DURATION); anim.setInterpolator(Interpolators.LINEAR); anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @@ -234,6 +248,7 @@ public class ActivityLaunchAnimator { applyParamsToWindow(primary); applyParamsToNotification(mParams); applyParamsToNotificationShade(mParams); + applyNavigationBarParamsToWindow(navigationBarTarget); } }); anim.addListener(new AnimatorListenerAdapter() { @@ -286,6 +301,18 @@ public class ActivityLaunchAnimator { return primary; } + private RemoteAnimationTarget getNavBarRemoteAnimationTarget( + RemoteAnimationTarget[] remoteAnimationTargets) { + RemoteAnimationTarget navBar = null; + for (RemoteAnimationTarget target : remoteAnimationTargets) { + if (target.windowType == TYPE_NAVIGATION_BAR) { + navBar = target; + break; + } + } + return navBar; + } + private void setExpandAnimationRunning(boolean running) { mNotificationPanel.setLaunchingNotification(running); mSourceNotification.setExpandAnimationRunning(running); @@ -326,6 +353,34 @@ public class ActivityLaunchAnimator { mSyncRtTransactionApplier.scheduleApply(params); } + private void applyNavigationBarParamsToWindow(RemoteAnimationTarget navBarTarget) { + if (navBarTarget == null) { + return; + } + + // calculate navigation bar fade-out progress + final float fadeOutProgress = mParams.getProgress(0, + ANIMATION_DURATION_NAV_FADE_OUT); + + // calculate navigation bar fade-in progress + final float fadeInProgress = mParams.getProgress(ANIMATION_DELAY_NAV_FADE_IN, + ANIMATION_DURATION_NAV_FADE_OUT); + + final SurfaceParams.Builder builder = new SurfaceParams.Builder(navBarTarget.leash); + if (fadeInProgress > 0) { + Matrix m = new Matrix(); + m.postTranslate(0, (float) (mParams.top - navBarTarget.position.y)); + mWindowCrop.set(mParams.left, 0, mParams.right, mParams.getHeight()); + builder.withMatrix(m) + .withWindowCrop(mWindowCrop) + .withVisibility(true); + builder.withAlpha(NAV_FADE_IN_INTERPOLATOR.getInterpolation(fadeInProgress)); + } else { + builder.withAlpha(1f - NAV_FADE_OUT_INTERPOLATOR.getInterpolation(fadeOutProgress)); + } + mSyncRtTransactionApplier.scheduleApply(builder.build()); + } + @Override public void onAnimationCancelled() throws RemoteException { mMainExecutor.execute(() -> { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableOutlineView.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableOutlineView.java index 609ca97c1b02..3728388f63b2 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableOutlineView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableOutlineView.java @@ -25,7 +25,6 @@ import android.graphics.Rect; import android.graphics.RectF; import android.util.AttributeSet; import android.view.View; -import android.view.ViewGroup; import android.view.ViewOutlineProvider; import com.android.systemui.R; @@ -102,28 +101,6 @@ public abstract class ExpandableOutlineView extends ExpandableView { } }; - /** - * Get the relative start padding of a view relative to this view. This recursively walks up the - * hierarchy and does the corresponding measuring. - * - * @param view the view to get the padding for. The requested view has to be a child of this - * notification. - * @return the start padding - */ - public int getRelativeStartPadding(View view) { - boolean isRtl = isLayoutRtl(); - int startPadding = 0; - while (view.getParent() instanceof ViewGroup) { - View parent = (View) view.getParent(); - startPadding += isRtl ? parent.getWidth() - view.getRight() : view.getLeft(); - view = parent; - if (view == this) { - return startPadding; - } - } - return startPadding; - } - protected Path getClipPath(boolean ignoreTranslation) { int left; int top; @@ -132,17 +109,15 @@ public abstract class ExpandableOutlineView extends ExpandableView { int height; float topRoundness = mAlwaysRoundBothCorners ? mOutlineRadius : getCurrentBackgroundRadiusTop(); - if (!mCustomOutline) { - // Extend left/right clip bounds beyond the notification by the - // 1) space between the notification and edge of screen - // 2) corner radius (so we do not see any rounding as the notification goes off screen) - left = (int) (-getRelativeStartPadding(this) - mOutlineRadius); - right = (int) (((View) getParent()).getWidth() + mOutlineRadius); - + int translation = mShouldTranslateContents && !ignoreTranslation + ? (int) getTranslation() : 0; + int halfExtraWidth = (int) (mExtraWidthForClipping / 2.0f); + left = Math.max(translation, 0) - halfExtraWidth; + top = mClipTopAmount + mBackgroundTop; + right = getWidth() + halfExtraWidth + Math.min(translation, 0); // If the top is rounded we want the bottom to be at most at the top roundness, in order // to avoid the shadow changing when scrolling up. - top = mClipTopAmount + mBackgroundTop; bottom = Math.max(mMinimumHeightForClipping, Math.max(getActualHeight() - mClipBottomAmount, (int) (top + topRoundness))); } else { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableView.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableView.java index 1086d6761249..73e080423d40 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableView.java @@ -69,8 +69,6 @@ public abstract class ExpandableView extends FrameLayout implements Dumpable { private float mContentTranslation; protected boolean mLastInSection; protected boolean mFirstInSection; - private float mOutlineRadius; - private float mParentWidth; public ExpandableView(Context context, AttributeSet attrs) { super(context, attrs); @@ -81,7 +79,6 @@ public abstract class ExpandableView extends FrameLayout implements Dumpable { private void initDimens() { mContentShift = getResources().getDimensionPixelSize( R.dimen.shelf_transform_content_shift); - mOutlineRadius = getResources().getDimensionPixelSize(R.dimen.notification_corner_radius); } @Override @@ -153,9 +150,6 @@ public abstract class ExpandableView extends FrameLayout implements Dumpable { @Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { super.onLayout(changed, left, top, right, bottom); - if (getParent() != null) { - mParentWidth = ((View) getParent()).getWidth(); - } updateClipping(); } @@ -442,15 +436,11 @@ public abstract class ExpandableView extends FrameLayout implements Dumpable { protected void updateClipping() { if (mClipToActualHeight && shouldClipToActualHeight()) { - final int top = getClipTopAmount(); - final int bottom = Math.max(Math.max(getActualHeight() + getExtraBottomPadding() + int top = getClipTopAmount(); + int bottom = Math.max(Math.max(getActualHeight() + getExtraBottomPadding() - mClipBottomAmount, top), mMinimumHeightForClipping); - // Extend left/right clip bounds beyond the notification by the - // 1) space between the notification and edge of screen - // 2) corner radius (so we do not see any rounding as the notification goes off screen) - final int left = (int) (-getRelativeStartPadding(this) - mOutlineRadius); - final int right = (int) (mParentWidth + mOutlineRadius); - mClipRect.set(left, top, right, bottom); + int halfExtraWidth = (int) (mExtraWidthForClipping / 2.0f); + mClipRect.set(-halfExtraWidth, top, getWidth() + halfExtraWidth, bottom); setClipBounds(mClipRect); } else { setClipBounds(null); diff --git a/packages/SystemUI/src/com/android/systemui/wmshell/WMShellBaseModule.java b/packages/SystemUI/src/com/android/systemui/wmshell/WMShellBaseModule.java index 709ccd4c2384..e403cfaee34a 100644 --- a/packages/SystemUI/src/com/android/systemui/wmshell/WMShellBaseModule.java +++ b/packages/SystemUI/src/com/android/systemui/wmshell/WMShellBaseModule.java @@ -44,6 +44,7 @@ import com.android.wm.shell.bubbles.BubbleController; import com.android.wm.shell.bubbles.Bubbles; import com.android.wm.shell.common.DisplayController; import com.android.wm.shell.common.DisplayImeController; +import com.android.wm.shell.common.DisplayLayout; import com.android.wm.shell.common.FloatingContentCoordinator; import com.android.wm.shell.common.ShellExecutor; import com.android.wm.shell.common.SyncTransactionQueue; @@ -105,6 +106,12 @@ public abstract class WMShellBaseModule { @WMSingleton @Provides + static DisplayLayout provideDisplayLayout() { + return new DisplayLayout(); + } + + @WMSingleton + @Provides static DragAndDropController provideDragAndDropController(Context context, DisplayController displayController) { return new DragAndDropController(context, displayController); @@ -233,11 +240,13 @@ public abstract class WMShellBaseModule { @Provides static Optional<OneHandedController> provideOneHandedController(Context context, WindowManager windowManager, DisplayController displayController, - TaskStackListenerImpl taskStackListener, UiEventLogger uiEventLogger, + DisplayLayout displayLayout, TaskStackListenerImpl taskStackListener, + UiEventLogger uiEventLogger, @ShellMainThread ShellExecutor mainExecutor, @ShellMainThread Handler mainHandler) { return Optional.ofNullable(OneHandedController.create(context, windowManager, - displayController, taskStackListener, uiEventLogger, mainExecutor, mainHandler)); + displayController, displayLayout, taskStackListener, uiEventLogger, mainExecutor, + mainHandler)); } // diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java index 8bb9ce940cc3..bbe59c92c091 100644 --- a/services/core/java/com/android/server/ConnectivityService.java +++ b/services/core/java/com/android/server/ConnectivityService.java @@ -29,6 +29,8 @@ import static android.net.ConnectivityDiagnosticsManager.DataStallReport.DETECTI import static android.net.ConnectivityDiagnosticsManager.DataStallReport.KEY_DNS_CONSECUTIVE_TIMEOUTS; import static android.net.ConnectivityDiagnosticsManager.DataStallReport.KEY_TCP_METRICS_COLLECTION_PERIOD_MILLIS; import static android.net.ConnectivityDiagnosticsManager.DataStallReport.KEY_TCP_PACKET_FAIL_RATE; +import static android.net.ConnectivityManager.BLOCKED_METERED_REASON_MASK; +import static android.net.ConnectivityManager.BLOCKED_REASON_LOCKDOWN_VPN; import static android.net.ConnectivityManager.BLOCKED_REASON_NONE; import static android.net.ConnectivityManager.CONNECTIVITY_ACTION; import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_OPPORTUNISTIC; @@ -106,6 +108,7 @@ import android.net.ConnectionInfo; import android.net.ConnectivityDiagnosticsManager.ConnectivityReport; import android.net.ConnectivityDiagnosticsManager.DataStallReport; import android.net.ConnectivityManager; +import android.net.ConnectivityManager.BlockedReason; import android.net.ConnectivityManager.NetworkCallback; import android.net.ConnectivityManager.RestrictBackgroundStatus; import android.net.ConnectivityResources; @@ -2357,15 +2360,15 @@ public class ConnectivityService extends IConnectivityManager.Stub private final NetworkPolicyCallback mPolicyCallback = new NetworkPolicyCallback() { @Override - public void onUidBlockedReasonChanged(int uid, int blockedReasons) { + public void onUidBlockedReasonChanged(int uid, @BlockedReason int blockedReasons) { mHandler.sendMessage(mHandler.obtainMessage(EVENT_UID_BLOCKED_REASON_CHANGED, uid, blockedReasons)); } }; - void handleUidBlockedReasonChanged(int uid, int blockedReasons) { + private void handleUidBlockedReasonChanged(int uid, @BlockedReason int blockedReasons) { maybeNotifyNetworkBlockedForNewState(uid, blockedReasons); - mUidBlockedReasons.put(uid, blockedReasons); + setUidBlockedReasons(uid, blockedReasons); } private boolean checkAnyPermissionOf(String... permissions) { @@ -3259,8 +3262,6 @@ public class ConnectivityService extends IConnectivityManager.Stub nai.lastValidated = valid; nai.everValidated |= valid; updateCapabilities(oldScore, nai, nai.networkCapabilities); - // If score has changed, rebroadcast to NetworkProviders. b/17726566 - if (oldScore != nai.getCurrentScore()) sendUpdatedScoreToFactories(nai); if (valid) { handleFreshlyValidatedNetwork(nai); // Clear NO_INTERNET, PRIVATE_DNS_BROKEN, PARTIAL_CONNECTIVITY and @@ -3681,9 +3682,12 @@ public class ConnectivityService extends IConnectivityManager.Stub if (currentNetwork != null && currentNetwork.network.getNetId() == nai.network.getNetId()) { // uid rules for this network will be removed in destroyNativeNetwork(nai). + // TODO : setting the satisfier is in fact the job of the rematch. Teach the + // rematch not to keep disconnected agents instead of setting it here ; this + // will also allow removing updating the offers below. nri.setSatisfier(null, null); - if (request.isRequest()) { - sendUpdatedScoreToFactories(request, null); + for (final NetworkOfferInfo noi : mNetworkOffers) { + informOffer(nri, noi.offer, mNetworkRanker); } if (mDefaultRequest == nri) { @@ -3811,16 +3815,13 @@ public class ConnectivityService extends IConnectivityManager.Stub } rematchAllNetworksAndRequests(); - for (final NetworkRequestInfo nri : nris) { - // If the nri is satisfied, return as its score has already been sent if needed. - if (nri.isBeingSatisfied()) { - return; - } - // As this request was not satisfied on rematch and thus never had any scores sent to - // the factories, send null now for each request of type REQUEST. - for (final NetworkRequest req : nri.mRequests) { - if (req.isRequest()) sendUpdatedScoreToFactories(req, null); + // Requests that have not been matched to a network will not have been sent to the + // providers, because the old satisfier and the new satisfier are the same (null in this + // case). Send these requests to the providers. + for (final NetworkRequestInfo nri : nris) { + for (final NetworkOfferInfo noi : mNetworkOffers) { + informOffer(nri, noi.offer, mNetworkRanker); } } } @@ -3848,6 +3849,12 @@ public class ConnectivityService extends IConnectivityManager.Stub // then it should be lingered. private boolean unneeded(NetworkAgentInfo nai, UnneededFor reason) { ensureRunningOnConnectivityServiceThread(); + + if (!nai.everConnected || nai.isVPN() || nai.isInactive() + || nai.getScore().getKeepConnectedReason() != NetworkScore.KEEP_CONNECTED_NONE) { + return false; + } + final int numRequests; switch (reason) { case TEARDOWN: @@ -3861,9 +3868,8 @@ public class ConnectivityService extends IConnectivityManager.Stub return true; } - if (!nai.everConnected || nai.isVPN() || nai.isInactive() || numRequests > 0) { - return false; - } + if (numRequests > 0) return false; + for (NetworkRequestInfo nri : mNetworkRequests.values()) { if (reason == UnneededFor.LINGER && !nri.isMultilayerRequest() @@ -4028,7 +4034,15 @@ public class ConnectivityService extends IConnectivityManager.Stub } } - cancelNpiRequests(nri); + // For all outstanding offers, cancel any of the layers of this NRI that used to be + // needed for this offer. + for (final NetworkOfferInfo noi : mNetworkOffers) { + for (final NetworkRequest req : nri.mRequests) { + if (req.isRequest() && noi.offer.neededFor(req)) { + noi.offer.onNetworkUnneeded(req); + } + } + } } private void handleRemoveNetworkRequests(@NonNull final Set<NetworkRequestInfo> nris) { @@ -4041,20 +4055,6 @@ public class ConnectivityService extends IConnectivityManager.Stub } } - private void cancelNpiRequests(@NonNull final NetworkRequestInfo nri) { - for (final NetworkRequest req : nri.mRequests) { - cancelNpiRequest(req); - } - } - - private void cancelNpiRequest(@NonNull final NetworkRequest req) { - if (req.isRequest()) { - for (final NetworkProviderInfo npi : mNetworkProviderInfos.values()) { - npi.cancelRequest(req); - } - } - } - private void removeListenRequestFromNetworks(@NonNull final NetworkRequest req) { // listens don't have a singular affected Network. Check all networks to see // if this listen request applies and remove it. @@ -4175,7 +4175,6 @@ public class ConnectivityService extends IConnectivityManager.Stub nai.networkAgentConfig.acceptPartialConnectivity = accept; nai.updateScoreForNetworkAgentConfigUpdate(); rematchAllNetworksAndRequests(); - sendUpdatedScoreToFactories(nai); } if (always) { @@ -4243,7 +4242,6 @@ public class ConnectivityService extends IConnectivityManager.Stub if (!nai.avoidUnvalidated) { nai.avoidUnvalidated = true; rematchAllNetworksAndRequests(); - sendUpdatedScoreToFactories(nai); } } @@ -4348,14 +4346,9 @@ public class ConnectivityService extends IConnectivityManager.Stub return avoidBadWifi(); } - + // TODO : this function is now useless. private void rematchForAvoidBadWifiUpdate() { rematchAllNetworksAndRequests(); - for (NetworkAgentInfo nai: mNetworkAgentInfos) { - if (nai.networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) { - sendUpdatedScoreToFactories(nai); - } - } } // TODO: Evaluate whether this is of interest to other consumers of @@ -5349,24 +5342,6 @@ public class ConnectivityService extends IConnectivityManager.Stub } } - void sendMessageToNetworkProvider(int what, int arg1, int arg2, Object obj) { - try { - messenger.send(Message.obtain(null /* handler */, what, arg1, arg2, obj)); - } catch (RemoteException e) { - // Remote process died. Ignore; the death recipient will remove this - // NetworkProviderInfo from mNetworkProviderInfos. - } - } - - void requestNetwork(NetworkRequest request, int score, int servingProviderId) { - sendMessageToNetworkProvider(NetworkProvider.CMD_REQUEST_NETWORK, score, - servingProviderId, request); - } - - void cancelRequest(NetworkRequest request) { - sendMessageToNetworkProvider(NetworkProvider.CMD_CANCEL_REQUEST, 0, 0, request); - } - void connect(Context context, Handler handler) { try { messenger.getBinder().linkToDeath(mDeathRecipient, 0); @@ -6055,7 +6030,6 @@ public class ConnectivityService extends IConnectivityManager.Stub if (DBG) log("Got NetworkProvider Messenger for " + npi.name); mNetworkProviderInfos.put(npi.messenger, npi); npi.connect(mContext, mTrackerHandler); - sendAllRequestsToProvider(npi); } @Override @@ -6077,6 +6051,9 @@ public class ConnectivityService extends IConnectivityManager.Stub public void offerNetwork(final int providerId, @NonNull final NetworkScore score, @NonNull final NetworkCapabilities caps, @NonNull final INetworkOfferCallback callback) { + Objects.requireNonNull(score); + Objects.requireNonNull(caps); + Objects.requireNonNull(callback); final NetworkOffer offer = new NetworkOffer( FullScore.makeProspectiveScore(score, caps), caps, callback, providerId); mHandler.sendMessage(mHandler.obtainMessage(EVENT_REGISTER_NETWORK_OFFER, offer)); @@ -6101,7 +6078,7 @@ public class ConnectivityService extends IConnectivityManager.Stub toRemove.add(noi); } } - for (NetworkOfferInfo noi : toRemove) { + for (final NetworkOfferInfo noi : toRemove) { handleUnregisterNetworkOffer(noi); } if (DBG) log("unregisterNetworkProvider for " + npi.name); @@ -6502,7 +6479,7 @@ public class ConnectivityService extends IConnectivityManager.Stub return; } mNetworkOffers.add(noi); - // TODO : send requests to the provider. + issueNetworkNeeds(noi); } private void handleUnregisterNetworkOffer(@NonNull final NetworkOfferInfo noi) { @@ -7277,100 +7254,6 @@ public class ConnectivityService extends IConnectivityManager.Stub updateLinkProperties(nai, newLp, new LinkProperties(nai.linkProperties)); } - private void sendUpdatedScoreToFactories(NetworkAgentInfo nai) { - for (int i = 0; i < nai.numNetworkRequests(); i++) { - NetworkRequest nr = nai.requestAt(i); - // Don't send listening or track default request to factories. b/17393458 - if (!nr.isRequest()) continue; - sendUpdatedScoreToFactories(nr, nai); - } - } - - private void sendUpdatedScoreToFactories( - @NonNull final NetworkReassignment.RequestReassignment event) { - // If a request of type REQUEST is now being satisfied by a new network. - if (null != event.mNewNetworkRequest && event.mNewNetworkRequest.isRequest()) { - sendUpdatedScoreToFactories(event.mNewNetworkRequest, event.mNewNetwork); - } - - // If a previously satisfied request of type REQUEST is no longer being satisfied. - if (null != event.mOldNetworkRequest && event.mOldNetworkRequest.isRequest() - && event.mOldNetworkRequest != event.mNewNetworkRequest) { - sendUpdatedScoreToFactories(event.mOldNetworkRequest, null); - } - - cancelMultilayerLowerPriorityNpiRequests(event.mNetworkRequestInfo); - } - - /** - * Cancel with all NPIs the given NRI's multilayer requests that are a lower priority than - * its currently satisfied active request. - * @param nri the NRI to cancel lower priority requests for. - */ - private void cancelMultilayerLowerPriorityNpiRequests( - @NonNull final NetworkRequestInfo nri) { - if (!nri.isMultilayerRequest() || null == nri.mActiveRequest) { - return; - } - - final int indexOfNewRequest = nri.mRequests.indexOf(nri.mActiveRequest); - for (int i = indexOfNewRequest + 1; i < nri.mRequests.size(); i++) { - cancelNpiRequest(nri.mRequests.get(i)); - } - } - - private void sendUpdatedScoreToFactories(@NonNull NetworkRequest networkRequest, - @Nullable NetworkAgentInfo nai) { - final int score; - final int serial; - if (nai != null) { - score = nai.getCurrentScore(); - serial = nai.factorySerialNumber; - } else { - score = 0; - serial = 0; - } - if (VDBG || DDBG){ - log("sending new Min Network Score(" + score + "): " + networkRequest.toString()); - } - for (NetworkProviderInfo npi : mNetworkProviderInfos.values()) { - npi.requestNetwork(networkRequest, score, serial); - } - } - - /** Sends all current NetworkRequests to the specified factory. */ - private void sendAllRequestsToProvider(@NonNull final NetworkProviderInfo npi) { - ensureRunningOnConnectivityServiceThread(); - for (final NetworkRequestInfo nri : getNrisFromGlobalRequests()) { - for (final NetworkRequest req : nri.mRequests) { - if (!req.isRequest() && nri.getActiveRequest() == req) { - break; - } - if (!req.isRequest()) { - continue; - } - // Only set the nai for the request it is satisfying. - final NetworkAgentInfo nai = - nri.getActiveRequest() == req ? nri.getSatisfier() : null; - final int score; - final int serial; - if (null != nai) { - score = nai.getCurrentScore(); - serial = nai.factorySerialNumber; - } else { - score = 0; - serial = NetworkProvider.ID_NONE; - } - npi.requestNetwork(req, score, serial); - // For multilayer requests, don't send lower priority requests if a higher priority - // request is already satisfied. - if (null != nai) { - break; - } - } - } - } - private void sendPendingIntentForRequest(NetworkRequestInfo nri, NetworkAgentInfo networkAgent, int notificationType) { if (notificationType == ConnectivityManager.CALLBACK_AVAILABLE && !nri.mPendingIntentSent) { @@ -7862,6 +7745,7 @@ public class ConnectivityService extends IConnectivityManager.Stub log(changes.toString()); // Shorter form, only one line of log } applyNetworkReassignment(changes, now); + issueNetworkNeeds(); } private void applyNetworkReassignment(@NonNull final NetworkReassignment changes, @@ -7893,12 +7777,6 @@ public class ConnectivityService extends IConnectivityManager.Stub // before LegacyTypeTracker sends legacy broadcasts for (final NetworkReassignment.RequestReassignment event : changes.getRequestReassignments()) { - // Tell NetworkProviders about the new score, so they can stop - // trying to connect if they know they cannot match it. - // TODO - this could get expensive if there are a lot of outstanding requests for this - // network. Think of a way to reduce this. Push netid->request mapping to each factory? - sendUpdatedScoreToFactories(event); - if (null != event.mNewNetwork) { notifyNetworkAvailable(event.mNewNetwork, event.mNetworkRequestInfo); } else { @@ -8035,6 +7913,107 @@ public class ConnectivityService extends IConnectivityManager.Stub } } + private void issueNetworkNeeds() { + ensureRunningOnConnectivityServiceThread(); + for (final NetworkOfferInfo noi : mNetworkOffers) { + issueNetworkNeeds(noi); + } + } + + private void issueNetworkNeeds(@NonNull final NetworkOfferInfo noi) { + ensureRunningOnConnectivityServiceThread(); + for (final NetworkRequestInfo nri : mNetworkRequests.values()) { + informOffer(nri, noi.offer, mNetworkRanker); + } + } + + /** + * Inform a NetworkOffer about any new situation of a request. + * + * This function handles updates to offers. A number of events may happen that require + * updating the registrant for this offer about the situation : + * • The offer itself was updated. This may lead the offer to no longer being able + * to satisfy a request or beat a satisfier (and therefore be no longer needed), + * or conversely being strengthened enough to beat the satisfier (and therefore + * start being needed) + * • The network satisfying a request changed (including cases where the request + * starts or stops being satisfied). The new network may be a stronger or weaker + * match than the old one, possibly affecting whether the offer is needed. + * • The network satisfying a request updated their score. This may lead the offer + * to no longer be able to beat it if the current satisfier got better, or + * conversely start being a good choice if the current satisfier got weaker. + * + * @param nri The request + * @param offer The offer. This may be an updated offer. + */ + private static void informOffer(@NonNull NetworkRequestInfo nri, + @NonNull final NetworkOffer offer, @NonNull final NetworkRanker networkRanker) { + final NetworkRequest activeRequest = nri.isBeingSatisfied() ? nri.getActiveRequest() : null; + final NetworkAgentInfo satisfier = null != activeRequest ? nri.getSatisfier() : null; + final FullScore satisfierScore = null != satisfier ? satisfier.getScore() : null; + + // Multi-layer requests have a currently active request, the one being satisfied. + // Since the system will try to bring up a better network than is currently satisfying + // the request, NetworkProviders need to be told the offers matching the requests *above* + // the currently satisfied one are needed, that the ones *below* the satisfied one are + // not needed, and the offer is needed for the active request iff the offer can beat + // the satisfier. + // For non-multilayer requests, the logic above gracefully degenerates to only the + // last case. + // To achieve this, the loop below will proceed in three steps. In a first phase, inform + // providers that the offer is needed for this request, until the active request is found. + // In a second phase, deal with the currently active request. In a third phase, inform + // the providers that offer is unneeded for the remaining requests. + + // First phase : inform providers of all requests above the active request. + int i; + for (i = 0; nri.mRequests.size() > i; ++i) { + final NetworkRequest request = nri.mRequests.get(i); + if (activeRequest == request) break; // Found the active request : go to phase 2 + if (!request.isRequest()) continue; // Listens/track defaults are never sent to offers + // Since this request is higher-priority than the one currently satisfied, if the + // offer can satisfy it, the provider should try and bring up the network for sure ; + // no need to even ask the ranker – an offer that can satisfy is always better than + // no network. Hence tell the provider so unless it already knew. + if (request.canBeSatisfiedBy(offer.caps) && !offer.neededFor(request)) { + offer.onNetworkNeeded(request); + } + } + + // Second phase : deal with the active request (if any) + if (null != activeRequest && activeRequest.isRequest()) { + final boolean oldNeeded = offer.neededFor(activeRequest); + // An offer is needed if it is currently served by this provider or if this offer + // can beat the current satisfier. + final boolean currentlyServing = satisfier != null + && satisfier.factorySerialNumber == offer.providerId; + final boolean newNeeded = (currentlyServing + || (activeRequest.canBeSatisfiedBy(offer.caps) + && networkRanker.mightBeat(activeRequest, satisfierScore, offer))); + if (newNeeded != oldNeeded) { + if (newNeeded) { + offer.onNetworkNeeded(activeRequest); + } else { + // The offer used to be able to beat the satisfier. Now it can't. + offer.onNetworkUnneeded(activeRequest); + } + } + } + + // Third phase : inform the providers that the offer isn't needed for any request + // below the active one. + for (++i /* skip the active request */; nri.mRequests.size() > i; ++i) { + final NetworkRequest request = nri.mRequests.get(i); + if (!request.isRequest()) continue; // Listens/track defaults are never sent to offers + // Since this request is lower-priority than the one currently satisfied, if the + // offer can satisfy it, the provider should not try and bring up the network. + // Hence tell the provider so unless it already knew. + if (offer.neededFor(request)) { + offer.onNetworkUnneeded(request); + } + } + } + private void addNetworkToLegacyTypeTracker(@NonNull final NetworkAgentInfo nai) { for (int i = 0; i < nai.numNetworkRequests(); i++) { NetworkRequest nr = nai.requestAt(i); @@ -8200,7 +8179,6 @@ public class ConnectivityService extends IConnectivityManager.Stub if (VDBG || DDBG) log("updateNetworkScore for " + nai.toShortString() + " to " + score); nai.setScore(score); rematchAllNetworksAndRequests(); - sendUpdatedScoreToFactories(nai); } // Notify only this one new request of the current state. Transfer all the @@ -8215,12 +8193,11 @@ public class ConnectivityService extends IConnectivityManager.Stub return; } + final int blockedReasons = mUidBlockedReasons.get(nri.mAsUid, BLOCKED_REASON_NONE); final boolean metered = nai.networkCapabilities.isMetered(); - boolean blocked; - blocked = isUidBlockedByVpn(nri.mAsUid, mVpnBlockedUidRanges); - blocked |= NetworkPolicyManager.isUidBlocked( - mUidBlockedReasons.get(nri.mAsUid, BLOCKED_REASON_NONE), metered); - callCallbackForRequest(nri, nai, ConnectivityManager.CALLBACK_AVAILABLE, blocked ? 1 : 0); + final boolean vpnBlocked = isUidBlockedByVpn(nri.mAsUid, mVpnBlockedUidRanges); + callCallbackForRequest(nri, nai, ConnectivityManager.CALLBACK_AVAILABLE, + getBlockedState(blockedReasons, metered, vpnBlocked)); } // Notify the requests on this NAI that the network is now lingered. @@ -8229,6 +8206,21 @@ public class ConnectivityService extends IConnectivityManager.Stub notifyNetworkCallbacks(nai, ConnectivityManager.CALLBACK_LOSING, lingerTime); } + private static int getBlockedState(int reasons, boolean metered, boolean vpnBlocked) { + if (!metered) reasons &= ~BLOCKED_METERED_REASON_MASK; + return vpnBlocked + ? reasons | BLOCKED_REASON_LOCKDOWN_VPN + : reasons & ~BLOCKED_REASON_LOCKDOWN_VPN; + } + + private void setUidBlockedReasons(int uid, @BlockedReason int blockedReasons) { + if (blockedReasons == BLOCKED_REASON_NONE) { + mUidBlockedReasons.delete(uid); + } else { + mUidBlockedReasons.put(uid, blockedReasons); + } + } + /** * Notify of the blocked state apps with a registered callback matching a given NAI. * @@ -8236,7 +8228,10 @@ public class ConnectivityService extends IConnectivityManager.Stub * any given nai, all requests need to be considered according to the uid who filed it. * * @param nai The target NetworkAgentInfo. - * @param oldMetered True if the previous network capabilities is metered. + * @param oldMetered True if the previous network capabilities were metered. + * @param newMetered True if the current network capabilities are metered. + * @param oldBlockedUidRanges list of UID ranges previously blocked by lockdown VPN. + * @param newBlockedUidRanges list of UID ranges blocked by lockdown VPN. */ private void maybeNotifyNetworkBlocked(NetworkAgentInfo nai, boolean oldMetered, boolean newMetered, List<UidRange> oldBlockedUidRanges, @@ -8245,22 +8240,18 @@ public class ConnectivityService extends IConnectivityManager.Stub for (int i = 0; i < nai.numNetworkRequests(); i++) { NetworkRequest nr = nai.requestAt(i); NetworkRequestInfo nri = mNetworkRequests.get(nr); - final boolean oldBlocked, newBlocked, oldVpnBlocked, newVpnBlocked; - oldVpnBlocked = isUidBlockedByVpn(nri.mAsUid, oldBlockedUidRanges); - newVpnBlocked = (oldBlockedUidRanges != newBlockedUidRanges) + final int blockedReasons = mUidBlockedReasons.get(nri.mAsUid, BLOCKED_REASON_NONE); + final boolean oldVpnBlocked = isUidBlockedByVpn(nri.mAsUid, oldBlockedUidRanges); + final boolean newVpnBlocked = (oldBlockedUidRanges != newBlockedUidRanges) ? isUidBlockedByVpn(nri.mAsUid, newBlockedUidRanges) : oldVpnBlocked; - final int blockedReasons = mUidBlockedReasons.get(nri.mAsUid, BLOCKED_REASON_NONE); - oldBlocked = oldVpnBlocked || NetworkPolicyManager.isUidBlocked( - blockedReasons, oldMetered); - newBlocked = newVpnBlocked || NetworkPolicyManager.isUidBlocked( - blockedReasons, newMetered); - - if (oldBlocked != newBlocked) { + final int oldBlockedState = getBlockedState(blockedReasons, oldMetered, oldVpnBlocked); + final int newBlockedState = getBlockedState(blockedReasons, newMetered, newVpnBlocked); + if (oldBlockedState != newBlockedState) { callCallbackForRequest(nri, nai, ConnectivityManager.CALLBACK_BLK_CHANGED, - encodeBool(newBlocked)); + newBlockedState); } } } @@ -8270,25 +8261,23 @@ public class ConnectivityService extends IConnectivityManager.Stub * @param uid The uid for which the rules changed. * @param blockedReasons The reasons for why an uid is blocked. */ - private void maybeNotifyNetworkBlockedForNewState(int uid, int blockedReasons) { + private void maybeNotifyNetworkBlockedForNewState(int uid, @BlockedReason int blockedReasons) { for (final NetworkAgentInfo nai : mNetworkAgentInfos) { final boolean metered = nai.networkCapabilities.isMetered(); final boolean vpnBlocked = isUidBlockedByVpn(uid, mVpnBlockedUidRanges); - final boolean oldBlocked, newBlocked; - oldBlocked = vpnBlocked || NetworkPolicyManager.isUidBlocked( - mUidBlockedReasons.get(uid, BLOCKED_REASON_NONE), metered); - newBlocked = vpnBlocked || NetworkPolicyManager.isUidBlocked( - blockedReasons, metered); - if (oldBlocked == newBlocked) { + final int oldBlockedState = getBlockedState( + mUidBlockedReasons.get(uid, BLOCKED_REASON_NONE), metered, vpnBlocked); + final int newBlockedState = getBlockedState(blockedReasons, metered, vpnBlocked); + if (oldBlockedState == newBlockedState) { continue; } - final int arg = encodeBool(newBlocked); for (int i = 0; i < nai.numNetworkRequests(); i++) { NetworkRequest nr = nai.requestAt(i); NetworkRequestInfo nri = mNetworkRequests.get(nr); if (nri != null && nri.mAsUid == uid) { - callCallbackForRequest(nri, nai, ConnectivityManager.CALLBACK_BLK_CHANGED, arg); + callCallbackForRequest(nri, nai, ConnectivityManager.CALLBACK_BLK_CHANGED, + newBlockedState); } } } diff --git a/services/core/java/com/android/server/PinnerService.java b/services/core/java/com/android/server/PinnerService.java index ebd32e8479ce..08bff810b0ce 100644 --- a/services/core/java/com/android/server/PinnerService.java +++ b/services/core/java/com/android/server/PinnerService.java @@ -265,18 +265,9 @@ public final class PinnerService extends SystemService { * Handler for on start pinning message */ private void handlePinOnStart() { - final String bootImage = SystemProperties.get("dalvik.vm.boot-image", ""); - String[] filesToPin = null; - if (bootImage.endsWith("boot-image.prof")) { - // Use the files listed for that specific boot image. - // TODO: find a better way to know we're using the JIT zygote configuration. - filesToPin = mContext.getResources().getStringArray( - com.android.internal.R.array.config_jitzygoteBootImagePinnerServiceFiles); - } else { - // Files to pin come from the overlay and can be specified per-device config - filesToPin = mContext.getResources().getStringArray( - com.android.internal.R.array.config_defaultPinnerServiceFiles); - } + // Files to pin come from the overlay and can be specified per-device config + String[] filesToPin = mContext.getResources().getStringArray( + com.android.internal.R.array.config_defaultPinnerServiceFiles); // Continue trying to pin each file even if we fail to pin some of them for (String fileToPin : filesToPin) { PinnedFile pf = pinFile(fileToPin, @@ -286,10 +277,32 @@ public final class PinnerService extends SystemService { Slog.e(TAG, "Failed to pin file = " + fileToPin); continue; } - synchronized (this) { mPinnedFiles.add(pf); } + if (fileToPin.endsWith(".jar") | fileToPin.endsWith(".apk")) { + // Check whether the runtime has compilation artifacts to pin. + String arch = VMRuntime.getInstructionSet(Build.SUPPORTED_ABIS[0]); + String[] files = null; + try { + files = DexFile.getDexFileOutputPaths(fileToPin, arch); + } catch (IOException ioe) { } + if (files == null) { + continue; + } + for (String file : files) { + PinnedFile df = pinFile(file, + Integer.MAX_VALUE, + /*attemptPinIntrospection=*/false); + if (df == null) { + Slog.i(TAG, "Failed to pin ART file = " + file); + continue; + } + synchronized (this) { + mPinnedFiles.add(df); + } + } + } } } diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 0f72c3ef9f97..036b88e6fc1c 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -213,7 +213,6 @@ import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.PackageManagerInternal; -import android.content.pm.PackageParser; import android.content.pm.ParceledListSlice; import android.content.pm.PermissionInfo; import android.content.pm.ProcessInfo; @@ -224,6 +223,7 @@ import android.content.pm.SELinuxUtil; import android.content.pm.ServiceInfo; import android.content.pm.TestUtilityService; import android.content.pm.UserInfo; +import android.content.pm.parsing.ParsingPackageUtils; import android.content.res.CompatibilityInfo; import android.content.res.Configuration; import android.content.res.Resources; @@ -16289,7 +16289,7 @@ public class ActivityManagerService extends IActivityManager.Stub private void updateApplicationInfoLOSP(@NonNull List<String> packagesToUpdate, int userId) { final boolean updateFrameworkRes = packagesToUpdate.contains("android"); if (updateFrameworkRes) { - PackageParser.readConfigUseRoundIcon(null); + ParsingPackageUtils.readConfigUseRoundIcon(null); } mProcessList.updateApplicationInfoLOSP(packagesToUpdate, userId, updateFrameworkRes); diff --git a/services/core/java/com/android/server/am/OomAdjuster.java b/services/core/java/com/android/server/am/OomAdjuster.java index 5ae65ef0e4be..8ad11d161cdc 100644 --- a/services/core/java/com/android/server/am/OomAdjuster.java +++ b/services/core/java/com/android/server/am/OomAdjuster.java @@ -1997,7 +1997,8 @@ public final class OomAdjuster { // in this case unless they explicitly request it. if ((cstate.getCurCapability() & PROCESS_CAPABILITY_NETWORK) != 0) { if (clientProcState <= PROCESS_STATE_BOUND_FOREGROUND_SERVICE) { - if ((cr.flags & Context.BIND_ALLOW_NETWORK_ACCESS) != 0) { + if ((cr.flags & Context.BIND_BYPASS_POWER_NETWORK_RESTRICTIONS) + != 0) { capability |= PROCESS_CAPABILITY_NETWORK; } } else { diff --git a/services/core/java/com/android/server/clipboard/ClipboardService.java b/services/core/java/com/android/server/clipboard/ClipboardService.java index 44433753775e..e14877500c47 100644 --- a/services/core/java/com/android/server/clipboard/ClipboardService.java +++ b/services/core/java/com/android/server/clipboard/ClipboardService.java @@ -132,6 +132,18 @@ class HostClipboardMonitor implements Runnable { } } + private byte[] receiveMessage() throws IOException { + final int size = Integer.reverseBytes(mPipe.readInt()); + final byte[] receivedData = new byte[size]; + mPipe.readFully(receivedData); + return receivedData; + } + + private void sendMessage(byte[] message) throws IOException { + mPipe.writeInt(Integer.reverseBytes(message.length)); + mPipe.write(message); + } + public HostClipboardMonitor(HostClipboardCallback cb) { mHostClipboardCallback = cb; } @@ -146,10 +158,8 @@ class HostClipboardMonitor implements Runnable { while ((mPipe == null) && !openPipe()) { Thread.sleep(100); } - int size = mPipe.readInt(); - size = Integer.reverseBytes(size); - byte[] receivedData = new byte[size]; - mPipe.readFully(receivedData); + + final byte[] receivedData = receiveMessage(); mHostClipboardCallback.onHostClipboardUpdated( new String(receivedData)); } catch (IOException e) { @@ -161,8 +171,7 @@ class HostClipboardMonitor implements Runnable { public void setHostClipboard(String content) { try { if (mPipe != null) { - mPipe.writeInt(Integer.reverseBytes(content.getBytes().length)); - mPipe.write(content.getBytes()); + sendMessage(content.getBytes()); } } catch(IOException e) { Slog.e("HostClipboardMonitor", diff --git a/services/core/java/com/android/server/connectivity/FullScore.java b/services/core/java/com/android/server/connectivity/FullScore.java index 9326d692f6e4..375d005a0bcd 100644 --- a/services/core/java/com/android/server/connectivity/FullScore.java +++ b/services/core/java/com/android/server/connectivity/FullScore.java @@ -19,12 +19,14 @@ package com.android.server.connectivity; import static android.net.NetworkCapabilities.NET_CAPABILITY_INTERNET; import static android.net.NetworkCapabilities.NET_CAPABILITY_VALIDATED; import static android.net.NetworkCapabilities.TRANSPORT_VPN; +import static android.net.NetworkScore.KEEP_CONNECTED_NONE; import android.annotation.IntDef; import android.annotation.NonNull; import android.net.NetworkAgentConfig; import android.net.NetworkCapabilities; import android.net.NetworkScore; +import android.net.NetworkScore.KeepConnectedReason; import com.android.internal.annotations.VisibleForTesting; @@ -95,9 +97,13 @@ public class FullScore { // Bitmask of all the policies applied to this score. private final long mPolicies; - FullScore(final int legacyInt, final long policies) { + private final int mKeepConnectedReason; + + FullScore(final int legacyInt, final long policies, + @KeepConnectedReason final int keepConnectedReason) { mLegacyInt = legacyInt; mPolicies = policies; + mKeepConnectedReason = keepConnectedReason; } /** @@ -110,14 +116,15 @@ public class FullScore { */ public static FullScore fromNetworkScore(@NonNull final NetworkScore score, @NonNull final NetworkCapabilities caps, @NonNull final NetworkAgentConfig config) { - return withPolicies(score.getLegacyInt(), caps.hasCapability(NET_CAPABILITY_VALIDATED), + return withPolicies(score.getLegacyInt(), score.getKeepConnectedReason(), + caps.hasCapability(NET_CAPABILITY_VALIDATED), caps.hasTransport(TRANSPORT_VPN), config.explicitlySelected, config.acceptUnvalidated); } /** - * Given a score supplied by the NetworkAgent, produce a prospective score for an offer. + * Given a score supplied by a NetworkProvider, produce a prospective score for an offer. * * NetworkOffers have score filters that are compared to the scores of actual networks * to see if they could possibly beat the current satisfier. Some things the agent can't @@ -139,8 +146,8 @@ public class FullScore { final boolean everUserSelected = false; // Don't assume the user will accept unvalidated connectivity. final boolean acceptUnvalidated = false; - return withPolicies(score.getLegacyInt(), mayValidate, vpn, everUserSelected, - acceptUnvalidated); + return withPolicies(score.getLegacyInt(), KEEP_CONNECTED_NONE, + mayValidate, vpn, everUserSelected, acceptUnvalidated); } /** @@ -152,13 +159,15 @@ public class FullScore { */ public FullScore mixInScore(@NonNull final NetworkCapabilities caps, @NonNull final NetworkAgentConfig config) { - return withPolicies(mLegacyInt, caps.hasCapability(NET_CAPABILITY_VALIDATED), + return withPolicies(mLegacyInt, mKeepConnectedReason, + caps.hasCapability(NET_CAPABILITY_VALIDATED), caps.hasTransport(TRANSPORT_VPN), config.explicitlySelected, config.acceptUnvalidated); } private static FullScore withPolicies(@NonNull final int legacyInt, + @KeepConnectedReason final int keepConnectedReason, final boolean isValidated, final boolean isVpn, final boolean everUserSelected, @@ -167,7 +176,8 @@ public class FullScore { (isValidated ? 1L << POLICY_IS_VALIDATED : 0) | (isVpn ? 1L << POLICY_IS_VPN : 0) | (everUserSelected ? 1L << POLICY_EVER_USER_SELECTED : 0) - | (acceptUnvalidated ? 1L << POLICY_ACCEPT_UNVALIDATED : 0)); + | (acceptUnvalidated ? 1L << POLICY_ACCEPT_UNVALIDATED : 0), + keepConnectedReason); } /** @@ -219,13 +229,21 @@ public class FullScore { return 0 != (mPolicies & (1L << policy)); } + /** + * Returns the keep-connected reason, or KEEP_CONNECTED_NONE. + */ + public int getKeepConnectedReason() { + return mKeepConnectedReason; + } + // Example output : // Score(50 ; Policies : EVER_USER_SELECTED&IS_VALIDATED) @Override public String toString() { final StringJoiner sj = new StringJoiner( "&", // delimiter - "Score(" + mLegacyInt + " ; Policies : ", // prefix + "Score(" + mLegacyInt + " ; KeepConnected : " + mKeepConnectedReason + + " ; Policies : ", // prefix ")"); // suffix for (int i = NetworkScore.MIN_AGENT_MANAGED_POLICY; i <= NetworkScore.MAX_AGENT_MANAGED_POLICY; ++i) { diff --git a/services/core/java/com/android/server/connectivity/NetworkAgentInfo.java b/services/core/java/com/android/server/connectivity/NetworkAgentInfo.java index 97df5bff4946..b31fa7085147 100644 --- a/services/core/java/com/android/server/connectivity/NetworkAgentInfo.java +++ b/services/core/java/com/android/server/connectivity/NetworkAgentInfo.java @@ -884,6 +884,10 @@ public class NetworkAgentInfo implements Comparable<NetworkAgentInfo> { return isWifi && !avoidBadWifi && everValidated; } + public FullScore getScore() { + return mScore; + } + // Get the current score for this Network. This may be modified from what the // NetworkAgent sent, as it has modifiers applied to it. public int getCurrentScore() { diff --git a/services/core/java/com/android/server/connectivity/NetworkOffer.java b/services/core/java/com/android/server/connectivity/NetworkOffer.java index 548db6b6ddbb..a0d392445472 100644 --- a/services/core/java/com/android/server/connectivity/NetworkOffer.java +++ b/services/core/java/com/android/server/connectivity/NetworkOffer.java @@ -17,13 +17,14 @@ package com.android.server.connectivity; import android.annotation.NonNull; -import android.annotation.Nullable; import android.net.INetworkOfferCallback; import android.net.NetworkCapabilities; import android.net.NetworkRequest; +import android.os.RemoteException; +import java.util.HashSet; import java.util.Objects; - +import java.util.Set; /** * Represents an offer made by a NetworkProvider to create a network if a need arises. @@ -44,46 +45,86 @@ public class NetworkOffer { @NonNull public final NetworkCapabilities caps; @NonNull public final INetworkOfferCallback callback; @NonNull public final int providerId; + // While this could, in principle, be deduced from the old values of the satisfying networks, + // doing so would add a lot of complexity and performance penalties. For each request, the + // ranker would have to run again to figure out if this offer used to be able to beat the + // previous satisfier to know if there is a change in whether this offer is now needed ; + // besides, there would be a need to handle an edge case when a new request comes online, + // where it's not satisfied before the first rematch, where starting to satisfy a request + // should not result in sending unneeded to this offer. This boolean, while requiring that + // the offers are only ever manipulated on the CS thread, is by far a simpler and + // economical solution. + private final Set<NetworkRequest> mCurrentlyNeeded = new HashSet<>(); - private static NetworkCapabilities emptyCaps() { - final NetworkCapabilities nc = new NetworkCapabilities(); - return nc; - } - - // Ideally the caps argument would be non-null, but null has historically meant no filter - // and telephony passes null. Keep backward compatibility. public NetworkOffer(@NonNull final FullScore score, - @Nullable final NetworkCapabilities caps, + @NonNull final NetworkCapabilities caps, @NonNull final INetworkOfferCallback callback, @NonNull final int providerId) { this.score = Objects.requireNonNull(score); - this.caps = null != caps ? caps : emptyCaps(); + this.caps = Objects.requireNonNull(caps); this.callback = Objects.requireNonNull(callback); this.providerId = providerId; } /** + * Tell the provider for this offer that the network is needed for a request. + * @param request the request for which the offer is needed + */ + public void onNetworkNeeded(@NonNull final NetworkRequest request) { + if (mCurrentlyNeeded.contains(request)) { + throw new IllegalStateException("Network already needed"); + } + mCurrentlyNeeded.add(request); + try { + callback.onNetworkNeeded(request); + } catch (final RemoteException e) { + // The provider is dead. It will be removed by the death recipient. + } + } + + /** + * Tell the provider for this offer that the network is no longer needed for this request. + * + * onNetworkNeeded will have been called with the same request before. + * + * @param request the request + */ + public void onNetworkUnneeded(@NonNull final NetworkRequest request) { + if (!mCurrentlyNeeded.contains(request)) { + throw new IllegalStateException("Network already unneeded"); + } + mCurrentlyNeeded.remove(request); + try { + callback.onNetworkUnneeded(request); + } catch (final RemoteException e) { + // The provider is dead. It will be removed by the death recipient. + } + } + + /** + * Returns whether this offer is currently needed for this request. + * @param request the request + * @return whether the offer is currently considered needed + */ + public boolean neededFor(@NonNull final NetworkRequest request) { + return mCurrentlyNeeded.contains(request); + } + + /** * Migrate from, and take over, a previous offer. * * When an updated offer is sent from a provider, call this method on the new offer, passing * the old one, to take over the state. * - * @param previousOffer + * @param previousOffer the previous offer */ public void migrateFrom(@NonNull final NetworkOffer previousOffer) { if (!callback.equals(previousOffer.callback)) { throw new IllegalArgumentException("Can only migrate from a previous version of" + " the same offer"); } - } - - /** - * Returns whether an offer can satisfy a NetworkRequest, according to its capabilities. - * @param request The request to test against. - * @return Whether this offer can satisfy the request. - */ - public final boolean canSatisfy(@NonNull final NetworkRequest request) { - return request.networkCapabilities.satisfiedByNetworkCapabilities(caps); + mCurrentlyNeeded.clear(); + mCurrentlyNeeded.addAll(previousOffer.mCurrentlyNeeded); } @Override diff --git a/services/core/java/com/android/server/connectivity/NetworkRanker.java b/services/core/java/com/android/server/connectivity/NetworkRanker.java index d0aabf95d572..0e4dda22886e 100644 --- a/services/core/java/com/android/server/connectivity/NetworkRanker.java +++ b/services/core/java/com/android/server/connectivity/NetworkRanker.java @@ -18,6 +18,7 @@ package com.android.server.connectivity; import android.annotation.NonNull; import android.annotation.Nullable; +import android.net.NetworkCapabilities; import android.net.NetworkRequest; import java.util.Collection; @@ -47,4 +48,41 @@ public class NetworkRanker { } return bestNetwork; } + + /** + * Returns whether an offer has a chance to beat a champion network for a request. + * + * Offers are sent by network providers when they think they might be able to make a network + * with the characteristics contained in the offer. If the offer has no chance to beat + * the currently best network for a given request, there is no point in the provider spending + * power trying to find and bring up such a network. + * + * Note that having an offer up does not constitute a commitment from the provider part + * to be able to bring up a network with these characteristics, or a network at all for + * that matter. This is only used to save power by letting providers know when they can't + * beat a current champion. + * + * @param request The request to evaluate against. + * @param championScore The currently best network for this request. + * @param offer The offer. + * @return Whether the offer stands a chance to beat the champion. + */ + public boolean mightBeat(@NonNull final NetworkRequest request, + @Nullable final FullScore championScore, + @NonNull final NetworkOffer offer) { + // If this network can't even satisfy the request then it can't beat anything, not + // even an absence of network. It can't satisfy it anyway. + if (!request.canBeSatisfiedBy(offer.caps)) return false; + // If there is no satisfying network, then this network can beat, because some network + // is always better than no network. + if (null == championScore) return true; + final int offerIntScore; + if (offer.caps.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)) { + // If the offer might have Internet access, then it might validate. + offerIntScore = offer.score.getLegacyIntAsValidated(); + } else { + offerIntScore = offer.score.getLegacyInt(); + } + return championScore.getLegacyInt() < offerIntScore; + } } diff --git a/services/core/java/com/android/server/display/DisplayManagerService.java b/services/core/java/com/android/server/display/DisplayManagerService.java index e4e520f10f71..9d02576cefb7 100644 --- a/services/core/java/com/android/server/display/DisplayManagerService.java +++ b/services/core/java/com/android/server/display/DisplayManagerService.java @@ -203,6 +203,8 @@ public final class DisplayManagerService extends SystemService { private WindowManagerInternal mWindowManagerInternal; private InputManagerInternal mInputManagerInternal; private IMediaProjectionManager mProjectionService; + private int[] mUserDisabledHdrTypes = {}; + private boolean mAreUserDisabledHdrTypesAllowed = true; // The synchronization root for the display manager. // This lock guards most of the display manager's state. @@ -557,6 +559,8 @@ public final class DisplayManagerService extends SystemService { recordTopInsetLocked(mLogicalDisplayMapper.getDisplayLocked(Display.DEFAULT_DISPLAY)); updateSettingsLocked(); + + updateUserDisabledHdrTypesFromSettingsLocked(); } mDisplayModeDirector.setDesiredDisplayModeSpecsListener( @@ -566,6 +570,7 @@ public final class DisplayManagerService extends SystemService { mHandler.sendEmptyMessage(MSG_REGISTER_ADDITIONAL_DISPLAY_ADAPTERS); mSettingsObserver = new SettingsObserver(); + mBrightnessSynchronizer.startSynchronizing(); } @@ -737,6 +742,42 @@ public final class DisplayManagerService extends SystemService { Settings.Secure.MINIMAL_POST_PROCESSING_ALLOWED, 1, UserHandle.USER_CURRENT) != 0; } + private void updateUserDisabledHdrTypesFromSettingsLocked() { + mAreUserDisabledHdrTypesAllowed = (Settings.Global.getInt( + mContext.getContentResolver(), + Settings.Global.ARE_USER_DISABLED_HDR_FORMATS_ALLOWED, + 1) != 0); + + String userDisabledHdrTypes = Settings.Global.getString(mContext.getContentResolver(), + Settings.Global.USER_DISABLED_HDR_FORMATS); + + if (userDisabledHdrTypes != null) { + try { + String[] userDisabledHdrTypeStrings = + TextUtils.split(userDisabledHdrTypes, ","); + mUserDisabledHdrTypes = new int[userDisabledHdrTypeStrings.length]; + for (int i = 0; i < userDisabledHdrTypeStrings.length; i++) { + mUserDisabledHdrTypes[i] = Integer.parseInt(userDisabledHdrTypeStrings[i]); + } + } catch (NumberFormatException e) { + Slog.e(TAG, + "Failed to parse USER_DISABLED_HDR_FORMATS. " + + "Clearing the setting.", e); + clearUserDisabledHdrTypesLocked(); + } + } else { + clearUserDisabledHdrTypesLocked(); + } + } + + private void clearUserDisabledHdrTypesLocked() { + mUserDisabledHdrTypes = new int[]{}; + synchronized (mSyncRoot) { + Settings.Global.putString(mContext.getContentResolver(), + Settings.Global.USER_DISABLED_HDR_FORMATS, ""); + } + } + private DisplayInfo getDisplayInfoForFrameRateOverride(DisplayEventReceiver.FrameRateOverride[] frameRateOverrides, DisplayInfo info, int callingUid) { float frameRateHz = 0; @@ -957,6 +998,61 @@ public final class DisplayManagerService extends SystemService { } } + private void setUserDisabledHdrTypesInternal(int[] userDisabledHdrTypes) { + synchronized (mSyncRoot) { + if (userDisabledHdrTypes == null) { + Slog.e(TAG, "Null is not an expected argument to " + + "setUserDisabledHdrTypesInternal"); + return; + } + Arrays.sort(userDisabledHdrTypes); + if (Arrays.equals(mUserDisabledHdrTypes, userDisabledHdrTypes)) { + return; + } + String userDisabledFormatsString = ""; + if (userDisabledHdrTypes.length != 0) { + userDisabledFormatsString = TextUtils.join(",", + Arrays.stream(userDisabledHdrTypes).boxed().toArray()); + } + Settings.Global.putString(mContext.getContentResolver(), + Settings.Global.USER_DISABLED_HDR_FORMATS, userDisabledFormatsString); + mUserDisabledHdrTypes = userDisabledHdrTypes; + if (!mAreUserDisabledHdrTypesAllowed) { + mLogicalDisplayMapper.forEachLocked( + display -> { + display.setUserDisabledHdrTypes(userDisabledHdrTypes); + handleLogicalDisplayChangedLocked(display); + }); + } + } + } + + private void setAreUserDisabledHdrTypesAllowedInternal( + boolean areUserDisabledHdrTypesAllowed) { + synchronized (mSyncRoot) { + if (mAreUserDisabledHdrTypesAllowed == areUserDisabledHdrTypesAllowed) { + return; + } + mAreUserDisabledHdrTypesAllowed = areUserDisabledHdrTypesAllowed; + if (mUserDisabledHdrTypes.length == 0) { + return; + } + Settings.Global.putInt(mContext.getContentResolver(), + Settings.Global.ARE_USER_DISABLED_HDR_FORMATS_ALLOWED, + areUserDisabledHdrTypesAllowed ? 1 : 0); + int userDisabledHdrTypes[] = {}; + if (!mAreUserDisabledHdrTypesAllowed) { + userDisabledHdrTypes = mUserDisabledHdrTypes; + } + int[] finalUserDisabledHdrTypes = userDisabledHdrTypes; + mLogicalDisplayMapper.forEachLocked( + display -> { + display.setUserDisabledHdrTypes(finalUserDisabledHdrTypes); + handleLogicalDisplayChangedLocked(display); + }); + } + } + private void requestColorModeInternal(int displayId, int colorMode) { synchronized (mSyncRoot) { final LogicalDisplay display = mLogicalDisplayMapper.getDisplayLocked(displayId); @@ -1130,6 +1226,9 @@ public final class DisplayManagerService extends SystemService { final int displayId = display.getDisplayIdLocked(); final boolean isDefault = displayId == Display.DEFAULT_DISPLAY; configureColorModeLocked(display, device); + if (!mAreUserDisabledHdrTypesAllowed) { + display.setUserDisabledHdrTypes(mUserDisabledHdrTypes); + } if (isDefault) { recordStableDisplayStatsIfNeededLocked(display); recordTopInsetLocked(display); @@ -1810,6 +1909,14 @@ public final class DisplayManagerService extends SystemService { pw.println(" mMinimumBrightnessCurve=" + mMinimumBrightnessCurve); pw.println(); + if (!mAreUserDisabledHdrTypesAllowed) { + pw.println(" mUserDisabledHdrTypes: size=" + mUserDisabledHdrTypes.length); + for (int type : mUserDisabledHdrTypes) { + pw.println(" " + type); + } + } + + pw.println(); final int displayStateCount = mDisplayStates.size(); pw.println("Display States: size=" + displayStateCount); for (int i = 0; i < displayStateCount; i++) { @@ -2337,6 +2444,45 @@ public final class DisplayManagerService extends SystemService { } @Override // Binder call + public void setUserDisabledHdrTypes(int[] userDisabledFormats) { + mContext.enforceCallingOrSelfPermission( + Manifest.permission.WRITE_SECURE_SETTINGS, + "Permission required to write the user settings."); + + final long token = Binder.clearCallingIdentity(); + try { + setUserDisabledHdrTypesInternal(userDisabledFormats); + } finally { + Binder.restoreCallingIdentity(token); + } + } + + @Override // Binder call + public void setAreUserDisabledHdrTypesAllowed(boolean areUserDisabledHdrTypesAllowed) { + mContext.enforceCallingOrSelfPermission( + Manifest.permission.WRITE_SECURE_SETTINGS, + "Permission required to write the user settings."); + final long token = Binder.clearCallingIdentity(); + try { + setAreUserDisabledHdrTypesAllowedInternal(areUserDisabledHdrTypesAllowed); + } finally { + Binder.restoreCallingIdentity(token); + } + } + + @Override // Binder call + public boolean areUserDisabledHdrTypesAllowed() { + synchronized (mSyncRoot) { + return mAreUserDisabledHdrTypesAllowed; + } + } + + @Override // Binder call + public int[] getUserDisabledHdrTypes() { + return mUserDisabledHdrTypes; + } + + @Override // Binder call public void requestColorMode(int displayId, int colorMode) { mContext.enforceCallingOrSelfPermission( Manifest.permission.CONFIGURE_DISPLAY_COLOR_MODE, diff --git a/services/core/java/com/android/server/display/LogicalDisplay.java b/services/core/java/com/android/server/display/LogicalDisplay.java index d9570c710b15..15894199f806 100644 --- a/services/core/java/com/android/server/display/LogicalDisplay.java +++ b/services/core/java/com/android/server/display/LogicalDisplay.java @@ -102,6 +102,8 @@ final class LogicalDisplay { private int mRequestedColorMode; private boolean mRequestedMinimalPostProcessing; + private int[] mUserDisabledHdrTypes = {}; + private DisplayModeDirector.DesiredDisplayModeSpecs mDesiredDisplayModeSpecs = new DisplayModeDirector.DesiredDisplayModeSpecs(); @@ -367,6 +369,7 @@ final class LogicalDisplay { deviceInfo.supportedColorModes, deviceInfo.supportedColorModes.length); mBaseDisplayInfo.hdrCapabilities = deviceInfo.hdrCapabilities; + mBaseDisplayInfo.userDisabledHdrTypes = mUserDisabledHdrTypes; mBaseDisplayInfo.minimalPostProcessingSupported = deviceInfo.allmSupported || deviceInfo.gameContentTypeSupported; mBaseDisplayInfo.logicalDensityDpi = deviceInfo.densityDpi; @@ -680,6 +683,14 @@ final class LogicalDisplay { mDisplayScalingDisabled = disableScaling; } + public void setUserDisabledHdrTypes(@NonNull int[] userDisabledHdrTypes) { + if (mUserDisabledHdrTypes != userDisabledHdrTypes) { + mUserDisabledHdrTypes = userDisabledHdrTypes; + mBaseDisplayInfo.userDisabledHdrTypes = userDisabledHdrTypes; + mInfo.set(null); + } + } + /** * Swap the underlying {@link DisplayDevice} with the specified LogicalDisplay. * diff --git a/services/core/java/com/android/server/media/MediaButtonReceiverHolder.java b/services/core/java/com/android/server/media/MediaButtonReceiverHolder.java index cb0a668871e0..bb996a07ba66 100644 --- a/services/core/java/com/android/server/media/MediaButtonReceiverHolder.java +++ b/services/core/java/com/android/server/media/MediaButtonReceiverHolder.java @@ -64,13 +64,6 @@ final class MediaButtonReceiverHolder { private static final int PACKAGE_MANAGER_COMMON_FLAGS = PackageManager.MATCH_DIRECT_BOOT_AWARE | PackageManager.MATCH_DIRECT_BOOT_UNAWARE; - /** - * Denotes the duration during which a media button receiver will be exempted from - * FGS-from-BG restriction and so will be allowed to start an FGS even if it is in the - * background state while it receives a media key event. - */ - private static final long FGS_STARTS_TEMP_ALLOWLIST_DURATION_MS = 10_000; - private final int mUserId; private final PendingIntent mPendingIntent; private final ComponentName mComponentName; @@ -185,10 +178,13 @@ final class MediaButtonReceiverHolder { * Ignored if there's no valid pending intent. * @param handler handler to be used to call onFinishedListener * Ignored if there's no valid pending intent. + * @param fgsAllowlistDurationMs duration for which the media button receiver will be + * allowed to start FGS from BG. * @see PendingIntent#send(Context, int, Intent, PendingIntent.OnFinished, Handler) */ public boolean send(Context context, KeyEvent keyEvent, String callingPackageName, - int resultCode, PendingIntent.OnFinished onFinishedListener, Handler handler) { + int resultCode, PendingIntent.OnFinished onFinishedListener, Handler handler, + long fgsAllowlistDurationMs) { Intent mediaButtonIntent = new Intent(Intent.ACTION_MEDIA_BUTTON); mediaButtonIntent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND); mediaButtonIntent.putExtra(Intent.EXTRA_KEY_EVENT, keyEvent); @@ -196,7 +192,7 @@ final class MediaButtonReceiverHolder { mediaButtonIntent.putExtra(Intent.EXTRA_PACKAGE_NAME, callingPackageName); final BroadcastOptions options = BroadcastOptions.makeBasic(); - options.setTemporaryAppAllowlist(FGS_STARTS_TEMP_ALLOWLIST_DURATION_MS, + options.setTemporaryAppAllowlist(fgsAllowlistDurationMs, PowerWhitelistManager.TEMPORARY_ALLOWLIST_TYPE_FOREGROUND_SERVICE_ALLOWED, PowerWhitelistManager.REASON_MEDIA_BUTTON, ""); if (mPendingIntent != null) { diff --git a/services/core/java/com/android/server/media/MediaSessionConfig.java b/services/core/java/com/android/server/media/MediaSessionConfig.java new file mode 100644 index 000000000000..a866b0d4a38b --- /dev/null +++ b/services/core/java/com/android/server/media/MediaSessionConfig.java @@ -0,0 +1,101 @@ +/* + * Copyright (C) 2021 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.media; + +import android.content.Context; +import android.provider.DeviceConfig; +import android.text.TextUtils; + +import java.io.PrintWriter; +import java.util.Set; + +class MediaSessionConfig { + /** + * Denotes the duration for which a media button receiver will be exempted from + * FGS-from-BG restriction and so will be allowed to start an FGS even if it is in the + * background state while it receives a media key event. + */ + private static final String KEY_MEDIA_BUTTON_RECEIVER_FGS_ALLOWLIST_DURATION_MS = + "media_button_receiver_fgs_allowlist_duration_ms"; + private static final long DEFAULT_MEDIA_BUTTON_RECEIVER_FGS_ALLOWLIST_DURATION_MS = 10_000; + private static volatile long sMediaButtonReceiverFgsAllowlistDurationMs = + DEFAULT_MEDIA_BUTTON_RECEIVER_FGS_ALLOWLIST_DURATION_MS; + + /** + * Denotes the duration for which an app receiving a media session callback will be + * exempted from FGS-from-BG restriction and so will be allowed to start an FGS even if + * it is in the background state while it receives a media session callback. + */ + private static final String KEY_MEDIA_SESSION_CALLBACK_FGS_ALLOWLIST_DURATION_MS = + "media_session_calback_fgs_allowlist_duration_ms"; + private static final long DEFAULT_MEDIA_SESSION_CALLBACK_FGS_ALLOWLIST_DURATION_MS = 10_000; + private static volatile long sMediaSessionCallbackFgsAllowlistDurationMs = + DEFAULT_MEDIA_SESSION_CALLBACK_FGS_ALLOWLIST_DURATION_MS; + + private static void refresh(DeviceConfig.Properties properties) { + final Set<String> keys = properties.getKeyset(); + properties.getKeyset().forEach(key -> { + switch (key) { + case KEY_MEDIA_BUTTON_RECEIVER_FGS_ALLOWLIST_DURATION_MS: + sMediaButtonReceiverFgsAllowlistDurationMs = properties.getLong(key, + DEFAULT_MEDIA_BUTTON_RECEIVER_FGS_ALLOWLIST_DURATION_MS); + break; + case KEY_MEDIA_SESSION_CALLBACK_FGS_ALLOWLIST_DURATION_MS: + sMediaSessionCallbackFgsAllowlistDurationMs = properties.getLong(key, + DEFAULT_MEDIA_SESSION_CALLBACK_FGS_ALLOWLIST_DURATION_MS); + break; + } + }); + } + + public static void initialize(Context context) { + DeviceConfig.addOnPropertiesChangedListener(DeviceConfig.NAMESPACE_MEDIA, + context.getMainExecutor(), properties -> refresh(properties)); + refresh(DeviceConfig.getProperties(DeviceConfig.NAMESPACE_MEDIA)); + } + + /** + * Returns the duration for which a media button receiver will be exempted from + * FGS-from-BG restriction and so will be allowed to start an FGS even if it is in the + * background state while it receives a media key event. + */ + public static long getMediaButtonReceiverFgsAllowlistDurationMs() { + return sMediaButtonReceiverFgsAllowlistDurationMs; + } + + /** + * Returns the duration for which an app receiving a media session callback will be + * exempted from FGS-from-BG restriction and so will be allowed to start an FGS even if + * it is in the background state while it receives a media session callback. + */ + public static long getMediaSessionCallbackFgsAllowlistDurationMs() { + return sMediaSessionCallbackFgsAllowlistDurationMs; + } + + public static void dump(PrintWriter pw, String prefix) { + pw.println("Media session config:"); + final String dumpFormat = prefix + " %s: [cur: %s, def: %s]"; + pw.println(TextUtils.formatSimple(dumpFormat, + KEY_MEDIA_BUTTON_RECEIVER_FGS_ALLOWLIST_DURATION_MS, + sMediaButtonReceiverFgsAllowlistDurationMs, + DEFAULT_MEDIA_BUTTON_RECEIVER_FGS_ALLOWLIST_DURATION_MS)); + pw.println(TextUtils.formatSimple(dumpFormat, + KEY_MEDIA_SESSION_CALLBACK_FGS_ALLOWLIST_DURATION_MS, + sMediaSessionCallbackFgsAllowlistDurationMs, + DEFAULT_MEDIA_SESSION_CALLBACK_FGS_ALLOWLIST_DURATION_MS)); + } +} diff --git a/services/core/java/com/android/server/media/MediaSessionService.java b/services/core/java/com/android/server/media/MediaSessionService.java index a30d993136a7..aefdbca779e6 100644 --- a/services/core/java/com/android/server/media/MediaSessionService.java +++ b/services/core/java/com/android/server/media/MediaSessionService.java @@ -117,13 +117,6 @@ public class MediaSessionService extends SystemService implements Monitor { */ private static final String MEDIA_BUTTON_RECEIVER = "media_button_receiver"; - /** - * Denotes the duration during which an app receiving a media session callback will be - * exempted from FGS-from-BG restriction and so will be allowed to start an FGS even if it is - * in the background state while it receives a media session callback. - */ - private static final long FGS_STARTS_TEMP_ALLOWLIST_DURATION_MS = 10_000; - private final Context mContext; private final SessionManagerImpl mSessionManagerImpl; private final MessageHandler mHandler = new MessageHandler(); @@ -244,6 +237,9 @@ public class MediaSessionService extends SystemService implements Monitor { mCommunicationManager.registerSessionCallback(new HandlerExecutor(mHandler), mSession2TokenCallback); break; + case PHASE_ACTIVITY_MANAGER_READY: + MediaSessionConfig.initialize(mContext); + break; } } @@ -564,7 +560,7 @@ public class MediaSessionService extends SystemService implements Monitor { PowerExemptionManager.class); powerExemptionManager.addToTemporaryAllowList(targetPackage, PowerExemptionManager.REASON_MEDIA_SESSION_CALLBACK, reason, - FGS_STARTS_TEMP_ALLOWLIST_DURATION_MS); + MediaSessionConfig.getMediaSessionCallbackFgsAllowlistDurationMs()); } } finally { Binder.restoreCallingIdentity(token); @@ -1979,6 +1975,7 @@ public class MediaSessionService extends SystemService implements Monitor { } mAudioPlayerStateMonitor.dump(mContext, pw, ""); } + MediaSessionConfig.dump(pw, ""); } /** @@ -2262,7 +2259,8 @@ public class MediaSessionService extends SystemService implements Monitor { boolean sent = mediaButtonReceiverHolder.send( mContext, keyEvent, callingPackageName, needWakeLock ? mKeyEventReceiver.mLastTimeoutId : -1, mKeyEventReceiver, - mHandler); + mHandler, + MediaSessionConfig.getMediaButtonReceiverFgsAllowlistDurationMs()); if (sent) { String pkgName = mediaButtonReceiverHolder.getPackageName(); for (FullUserRecord.OnMediaKeyEventDispatchedListenerRecord cr diff --git a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java index 385928525ada..40eefca096b9 100644 --- a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java +++ b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java @@ -42,6 +42,7 @@ import static android.content.pm.PackageManager.MATCH_UNINSTALLED_PACKAGES; import static android.content.pm.PackageManager.PERMISSION_GRANTED; import static android.net.ConnectivityManager.BLOCKED_METERED_REASON_ADMIN_DISABLED; import static android.net.ConnectivityManager.BLOCKED_METERED_REASON_DATA_SAVER; +import static android.net.ConnectivityManager.BLOCKED_METERED_REASON_MASK; import static android.net.ConnectivityManager.BLOCKED_METERED_REASON_USER_RESTRICTED; import static android.net.ConnectivityManager.BLOCKED_REASON_APP_STANDBY; import static android.net.ConnectivityManager.BLOCKED_REASON_BATTERY_SAVER; @@ -76,7 +77,6 @@ import static android.net.NetworkPolicyManager.ALLOWED_REASON_POWER_SAVE_ALLOWLI import static android.net.NetworkPolicyManager.ALLOWED_REASON_POWER_SAVE_EXCEPT_IDLE_ALLOWLIST; import static android.net.NetworkPolicyManager.ALLOWED_REASON_RESTRICTED_MODE_PERMISSIONS; import static android.net.NetworkPolicyManager.ALLOWED_REASON_SYSTEM; -import static android.net.NetworkPolicyManager.BLOCKED_METERED_REASON_MASK; import static android.net.NetworkPolicyManager.EXTRA_NETWORK_TEMPLATE; import static android.net.NetworkPolicyManager.FIREWALL_RULE_DEFAULT; import static android.net.NetworkPolicyManager.MASK_ALL_NETWORKS; diff --git a/services/core/java/com/android/server/net/NetworkStatsService.java b/services/core/java/com/android/server/net/NetworkStatsService.java index de5aae07d6be..19f5e3cd5dfa 100644 --- a/services/core/java/com/android/server/net/NetworkStatsService.java +++ b/services/core/java/com/android/server/net/NetworkStatsService.java @@ -24,6 +24,7 @@ import static android.content.Intent.ACTION_UID_REMOVED; import static android.content.Intent.ACTION_USER_REMOVED; import static android.content.Intent.EXTRA_UID; import static android.content.pm.PackageManager.PERMISSION_GRANTED; +import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR; import static android.net.NetworkIdentity.SUBTYPE_COMBINED; import static android.net.NetworkStack.checkNetworkStackPermission; import static android.net.NetworkStats.DEFAULT_NETWORK_ALL; @@ -65,6 +66,7 @@ import static android.provider.Settings.Global.NETSTATS_UID_TAG_BUCKET_DURATION; import static android.provider.Settings.Global.NETSTATS_UID_TAG_DELETE_AGE; import static android.provider.Settings.Global.NETSTATS_UID_TAG_PERSIST_BYTES; import static android.provider.Settings.Global.NETSTATS_UID_TAG_ROTATE_AGE; +import static android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID; import static android.text.format.DateUtils.DAY_IN_MILLIS; import static android.text.format.DateUtils.HOUR_IN_MILLIS; import static android.text.format.DateUtils.MINUTE_IN_MILLIS; @@ -100,7 +102,9 @@ import android.net.NetworkStateSnapshot; import android.net.NetworkStats; import android.net.NetworkStats.NonMonotonicObserver; import android.net.NetworkStatsHistory; +import android.net.NetworkSpecifier; import android.net.NetworkTemplate; +import android.net.TelephonyNetworkSpecifier; import android.net.TrafficStats; import android.net.UnderlyingNetworkInfo; import android.net.Uri; @@ -1320,8 +1324,9 @@ public class NetworkStatsService extends INetworkStatsService.Stub { ident.getSubType(), ident.getSubscriberId(), ident.getNetworkId(), ident.getRoaming(), true /* metered */, true /* onDefaultNetwork */, ident.getOemManaged()); - findOrCreateNetworkIdentitySet(mActiveIfaces, IFACE_VT).add(vtIdent); - findOrCreateNetworkIdentitySet(mActiveUidIfaces, IFACE_VT).add(vtIdent); + final String ifaceVt = IFACE_VT + getSubIdForMobile(snapshot); + findOrCreateNetworkIdentitySet(mActiveIfaces, ifaceVt).add(vtIdent); + findOrCreateNetworkIdentitySet(mActiveUidIfaces, ifaceVt).add(vtIdent); } if (isMobile) { @@ -1377,6 +1382,20 @@ public class NetworkStatsService extends INetworkStatsService.Stub { mMobileIfaces = mobileIfaces.toArray(new String[mobileIfaces.size()]); } + private static int getSubIdForMobile(@NonNull NetworkStateSnapshot state) { + if (!state.networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) { + throw new IllegalArgumentException("Mobile state need capability TRANSPORT_CELLULAR"); + } + + final NetworkSpecifier spec = state.networkCapabilities.getNetworkSpecifier(); + if (spec instanceof TelephonyNetworkSpecifier) { + return ((TelephonyNetworkSpecifier) spec).getSubscriptionId(); + } else { + Slog.wtf(TAG, "getSubIdForState invalid NetworkSpecifier"); + return INVALID_SUBSCRIPTION_ID; + } + } + /** * For networks with {@code TRANSPORT_CELLULAR}, get subType that was obtained through * {@link PhoneStateListener}. Otherwise, return 0 given that other networks with different diff --git a/services/core/java/com/android/server/pm/PackageDexOptimizer.java b/services/core/java/com/android/server/pm/PackageDexOptimizer.java index e0a39f313012..b02b8f298528 100644 --- a/services/core/java/com/android/server/pm/PackageDexOptimizer.java +++ b/services/core/java/com/android/server/pm/PackageDexOptimizer.java @@ -258,23 +258,22 @@ public class PackageDexOptimizer { packageStats, options.isDowngrade(), profileName, dexMetadataPath, options.getCompilationReason()); - // Only report metrics for base apk for now. - // TODO: add ISA and APK type to metrics. // OTAPreopt doesn't have stats so don't report in that case. - if (pkg.getBaseApkPath().equals(path) && packageStats != null) { + if (packageStats != null) { Trace.traceBegin(Trace.TRACE_TAG_PACKAGE_MANAGER, "dex2oat-metrics"); try { long sessionId = Math.randomLongInternal(); ArtStatsLogUtils.writeStatsLog( mArtStatsLogger, sessionId, - path, compilerFilter, sharedGid, packageStats.getCompileTime(path), dexMetadataPath, options.getCompilationReason(), - newResult); + newResult, + ArtStatsLogUtils.getApkType(path), + dexCodeIsa); } finally { Trace.traceEnd(Trace.TRACE_TAG_PACKAGE_MANAGER); } diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index ed4be19fb8dc..550e9f84909c 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -7121,7 +7121,7 @@ public class PackageManagerService extends IPackageManager.Stub // once we have a booted system. mInstaller.setWarnIfHeld(mLock); - PackageParser.readConfigUseRoundIcon(mContext.getResources()); + ParsingPackageUtils.readConfigUseRoundIcon(mContext.getResources()); mServiceStartWithDelay = SystemClock.uptimeMillis() + (60 * 1000L); diff --git a/services/core/java/com/android/server/pm/ShortcutService.java b/services/core/java/com/android/server/pm/ShortcutService.java index e1d1c264e666..780e5e5cf0e3 100644 --- a/services/core/java/com/android/server/pm/ShortcutService.java +++ b/services/core/java/com/android/server/pm/ShortcutService.java @@ -270,6 +270,7 @@ public class ShortcutService extends IShortcutService.Stub { final Context mContext; private final Object mLock = new Object(); + private final Object mNonPersistentUsersLock = new Object(); private static List<ResolveInfo> EMPTY_RESOLVE_INFO = new ArrayList<>(0); @@ -310,8 +311,10 @@ public class ShortcutService extends IShortcutService.Stub { /** * User ID -> ShortcutNonPersistentUser + * + * Note we use a fine-grained lock for {@link #mShortcutNonPersistentUsers} due to b/183618378. */ - @GuardedBy("mLock") + @GuardedBy("mNonPersistentUsersLock") private final SparseArray<ShortcutNonPersistentUser> mShortcutNonPersistentUsers = new SparseArray<>(); @@ -1308,7 +1311,7 @@ public class ShortcutService extends IShortcutService.Stub { } /** Return the non-persistent per-user state. */ - @GuardedBy("mLock") + @GuardedBy("mNonPersistentUsersLock") @NonNull ShortcutNonPersistentUser getNonPersistentUserLocked(@UserIdInt int userId) { ShortcutNonPersistentUser ret = mShortcutNonPersistentUsers.get(userId); @@ -2748,7 +2751,7 @@ public class ShortcutService extends IShortcutService.Stub { if (injectHasAccessShortcutsPermission(callingPid, callingUid)) { return true; } - synchronized (mLock) { + synchronized (mNonPersistentUsersLock) { return getNonPersistentUserLocked(userId).hasHostPackage(callingPackage); } } @@ -2831,7 +2834,7 @@ public class ShortcutService extends IShortcutService.Stub { public void setShortcutHostPackage(@NonNull String type, @Nullable String packageName, int userId) { - synchronized (mLock) { + synchronized (mNonPersistentUsersLock) { getNonPersistentUserLocked(userId).setShortcutHostPackage(type, packageName); } } diff --git a/services/core/java/com/android/server/pm/dex/ArtStatsLogUtils.java b/services/core/java/com/android/server/pm/dex/ArtStatsLogUtils.java index c8dc1b1ff562..f99a3c330c32 100644 --- a/services/core/java/com/android/server/pm/dex/ArtStatsLogUtils.java +++ b/services/core/java/com/android/server/pm/dex/ArtStatsLogUtils.java @@ -39,6 +39,7 @@ public class ArtStatsLogUtils { private static final String TAG = ArtStatsLogUtils.class.getSimpleName(); private static final String PROFILE_DEX_METADATA = "primary.prof"; private static final String VDEX_DEX_METADATA = "primary.vdex"; + private static final String BASE_APK= "base.apk"; private static final int ART_COMPILATION_REASON_INSTALL_BULK_SECONDARY = @@ -122,16 +123,34 @@ public class ArtStatsLogUtils { ART_COMPILATION_FILTER_FAKE_RUN_FROM_VDEX_FALLBACK); } + private static final Map<String, Integer> ISA_MAP = new HashMap(); + + static { + COMPILE_FILTER_MAP.put("arm", ArtStatsLog. + ART_DATUM_REPORTED__ISA__ART_ISA_ARM); + COMPILE_FILTER_MAP.put("arm64", ArtStatsLog. + ART_DATUM_REPORTED__ISA__ART_ISA_ARM64); + COMPILE_FILTER_MAP.put("x86", ArtStatsLog. + ART_DATUM_REPORTED__ISA__ART_ISA_X86); + COMPILE_FILTER_MAP.put("x86_64", ArtStatsLog. + ART_DATUM_REPORTED__ISA__ART_ISA_X86_64); + COMPILE_FILTER_MAP.put("mips", ArtStatsLog. + ART_DATUM_REPORTED__ISA__ART_ISA_MIPS); + COMPILE_FILTER_MAP.put("mips64", ArtStatsLog. + ART_DATUM_REPORTED__ISA__ART_ISA_MIPS64); + } + public static void writeStatsLog( ArtStatsLogger logger, long sessionId, - String path, String compilerFilter, int uid, long compileTime, String dexMetadataPath, int compilationReason, - int result) { + int result, + int apkType, + String isa) { int dexMetadataType = getDexMetadataType(dexMetadataPath); logger.write( sessionId, @@ -140,7 +159,9 @@ public class ArtStatsLogUtils { compilerFilter, ArtStatsLog.ART_DATUM_REPORTED__KIND__ART_DATUM_DEX2OAT_RESULT_CODE, result, - dexMetadataType); + dexMetadataType, + apkType, + isa); logger.write( sessionId, uid, @@ -148,7 +169,16 @@ public class ArtStatsLogUtils { compilerFilter, ArtStatsLog.ART_DATUM_REPORTED__KIND__ART_DATUM_DEX2OAT_TOTAL_TIME, compileTime, - dexMetadataType); + dexMetadataType, + apkType, + isa); + } + + public static int getApkType(String path) { + if (path.equals(BASE_APK)) { + return ArtStatsLog.ART_DATUM_REPORTED__APK_TYPE__ART_APK_TYPE_BASE; + } + return ArtStatsLog.ART_DATUM_REPORTED__APK_TYPE__ART_APK_TYPE_SPLIT; } private static int getDexMetadataType(String dexMetadataPath) { @@ -207,7 +237,9 @@ public class ArtStatsLogUtils { String compilerFilter, int kind, long value, - int dexMetadataType) { + int dexMetadataType, + int apkType, + String isa) { ArtStatsLog.write( ArtStatsLog.ART_DATUM_REPORTED, sessionId, @@ -220,7 +252,10 @@ public class ArtStatsLogUtils { ArtStatsLog.ART_DATUM_REPORTED__THREAD_TYPE__ART_THREAD_MAIN, kind, value, - dexMetadataType); + dexMetadataType, + apkType, + ISA_MAP.getOrDefault(isa, + ArtStatsLog.ART_DATUM_REPORTED__ISA__ART_ISA_UNKNOWN)); } } } diff --git a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java index 0eccf3e4bc8d..920d044989a0 100644 --- a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java +++ b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java @@ -1849,8 +1849,7 @@ public class PermissionManagerService extends IPermissionManager.Stub { synchronized (mLock) { final Permission perm = mRegistry.getPermission(splitPerm.getSplitPermission()); - return perm != null && perm.getType() != Permission.TYPE_CONFIG - && !perm.isRuntime(); + return perm != null && !perm.isRuntime(); } } } diff --git a/services/core/java/com/android/server/power/DisplayGroupPowerStateMapper.java b/services/core/java/com/android/server/power/DisplayGroupPowerStateMapper.java index 9732eba33c22..ea933246e3b2 100644 --- a/services/core/java/com/android/server/power/DisplayGroupPowerStateMapper.java +++ b/services/core/java/com/android/server/power/DisplayGroupPowerStateMapper.java @@ -125,6 +125,10 @@ public class DisplayGroupPowerStateMapper { return mDisplayGroupIds; } + int getDisplayGroupCountLocked() { + return mDisplayGroupIds.length; + } + int getWakefulnessLocked(int groupId) { return mDisplayGroupInfos.get(groupId).wakefulness; } @@ -272,6 +276,14 @@ public class DisplayGroupPowerStateMapper { mDisplayGroupInfos.get(groupId).userActivitySummary = summary; } + int getWakeLockSummaryLocked(int groupId) { + return mDisplayGroupInfos.get(groupId).wakeLockSummary; + } + + void setWakeLockSummaryLocked(int groupId, int summary) { + mDisplayGroupInfos.get(groupId).wakeLockSummary = summary; + } + /** * Interface through which an interested party may be informed of {@link DisplayGroup} events. */ @@ -292,6 +304,7 @@ public class DisplayGroupPowerStateMapper { public long lastUserActivityTime; public long lastUserActivityTimeNoChangeLights; public int userActivitySummary; + public int wakeLockSummary; /** {@code true} if this DisplayGroup supports dreaming; otherwise {@code false}. */ public boolean supportsSandman; diff --git a/services/core/java/com/android/server/power/PowerManagerService.java b/services/core/java/com/android/server/power/PowerManagerService.java index 54d5b7a8b67e..805252260209 100644 --- a/services/core/java/com/android/server/power/PowerManagerService.java +++ b/services/core/java/com/android/server/power/PowerManagerService.java @@ -1348,9 +1348,20 @@ public final class PowerManagerService extends SystemService updatePowerStateLocked(); } - private void acquireWakeLockInternal(IBinder lock, int flags, String tag, String packageName, - WorkSource ws, String historyTag, int uid, int pid) { + private void acquireWakeLockInternal(IBinder lock, int displayId, int flags, String tag, + String packageName, WorkSource ws, String historyTag, int uid, int pid) { synchronized (mLock) { + if (displayId != Display.INVALID_DISPLAY) { + final DisplayInfo displayInfo = + mSystemReady ? mDisplayManagerInternal.getDisplayInfo(displayId) : null; + if (displayInfo == null) { + Slog.wtf(TAG, "Tried to acquire wake lock for invalid display: " + displayId); + return; + } else if (!displayInfo.hasAccess(uid)) { + throw new SecurityException("Caller does not have access to display"); + } + } + if (DEBUG_SPEW) { Slog.d(TAG, "acquireWakeLockInternal: lock=" + Objects.hashCode(lock) + ", flags=0x" + Integer.toHexString(flags) @@ -1377,8 +1388,8 @@ public final class PowerManagerService extends SystemService mUidState.put(uid, state); } state.mNumWakeLocks++; - wakeLock = new WakeLock(lock, flags, tag, packageName, ws, historyTag, uid, pid, - state); + wakeLock = new WakeLock(lock, displayId, flags, tag, packageName, ws, historyTag, + uid, pid, state); try { lock.linkToDeath(wakeLock, 0); } catch (RemoteException ex) { @@ -2047,6 +2058,11 @@ public final class PowerManagerService extends SystemService return mWakefulnessRaw; } + @VisibleForTesting + int getWakefulnessLocked(int groupId) { + return mDisplayGroupPowerStateMapper.getWakefulnessLocked(groupId); + } + /** * Logs the time the device would have spent awake before user activity timeout, * had the system not been told the user was inactive. @@ -2293,7 +2309,9 @@ public final class PowerManagerService extends SystemService */ @SuppressWarnings("deprecation") private void updateWakeLockSummaryLocked(int dirty) { - if ((dirty & (DIRTY_WAKE_LOCKS | DIRTY_WAKEFULNESS)) != 0) { + if ((dirty & (DIRTY_WAKE_LOCKS | DIRTY_WAKEFULNESS | DIRTY_DISPLAY_GROUP_WAKEFULNESS)) + != 0) { + mWakeLockSummary = 0; final int numProfiles = mProfilePowerState.size(); @@ -2301,11 +2319,28 @@ public final class PowerManagerService extends SystemService mProfilePowerState.valueAt(i).mWakeLockSummary = 0; } + for (int groupId : mDisplayGroupPowerStateMapper.getDisplayGroupIdsLocked()) { + mDisplayGroupPowerStateMapper.setWakeLockSummaryLocked(groupId, 0); + } + + int invalidGroupWakeLockSummary = 0; final int numWakeLocks = mWakeLocks.size(); for (int i = 0; i < numWakeLocks; i++) { final WakeLock wakeLock = mWakeLocks.get(i); final int wakeLockFlags = getWakeLockSummaryFlags(wakeLock); mWakeLockSummary |= wakeLockFlags; + + final int groupId = wakeLock.getDisplayGroupId(); + if (groupId != Display.INVALID_DISPLAY_GROUP) { + int wakeLockSummary = mDisplayGroupPowerStateMapper.getWakeLockSummaryLocked( + groupId); + wakeLockSummary |= wakeLockFlags; + mDisplayGroupPowerStateMapper.setWakeLockSummaryLocked(groupId, + wakeLockSummary); + } else { + invalidGroupWakeLockSummary |= wakeLockFlags; + } + for (int j = 0; j < numProfiles; j++) { final ProfilePowerState profile = mProfilePowerState.valueAt(j); if (wakeLockAffectsUser(wakeLock, profile.mUserId)) { @@ -2314,10 +2349,21 @@ public final class PowerManagerService extends SystemService } } - mWakeLockSummary = adjustWakeLockSummaryLocked(mWakeLockSummary); + for (int groupId : mDisplayGroupPowerStateMapper.getDisplayGroupIdsLocked()) { + final int wakeLockSummary = adjustWakeLockSummaryLocked( + mDisplayGroupPowerStateMapper.getWakefulnessLocked(groupId), + invalidGroupWakeLockSummary + | mDisplayGroupPowerStateMapper.getWakeLockSummaryLocked(groupId)); + mDisplayGroupPowerStateMapper.setWakeLockSummaryLocked(groupId, wakeLockSummary); + } + + mWakeLockSummary = adjustWakeLockSummaryLocked(getWakefulnessLocked(), + mWakeLockSummary); + for (int i = 0; i < numProfiles; i++) { final ProfilePowerState profile = mProfilePowerState.valueAt(i); - profile.mWakeLockSummary = adjustWakeLockSummaryLocked(profile.mWakeLockSummary); + profile.mWakeLockSummary = adjustWakeLockSummaryLocked(getWakefulnessLocked(), + profile.mWakeLockSummary); } if (DEBUG_SPEW) { @@ -2328,25 +2374,25 @@ public final class PowerManagerService extends SystemService } } - private int adjustWakeLockSummaryLocked(int wakeLockSummary) { + private static int adjustWakeLockSummaryLocked(int wakefulness, int wakeLockSummary) { // Cancel wake locks that make no sense based on the current state. - if (getWakefulnessLocked() != WAKEFULNESS_DOZING) { + if (wakefulness != WAKEFULNESS_DOZING) { wakeLockSummary &= ~(WAKE_LOCK_DOZE | WAKE_LOCK_DRAW); } - if (getWakefulnessLocked() == WAKEFULNESS_ASLEEP + if (wakefulness == WAKEFULNESS_ASLEEP || (wakeLockSummary & WAKE_LOCK_DOZE) != 0) { wakeLockSummary &= ~(WAKE_LOCK_SCREEN_BRIGHT | WAKE_LOCK_SCREEN_DIM | WAKE_LOCK_BUTTON_BRIGHT); - if (getWakefulnessLocked() == WAKEFULNESS_ASLEEP) { + if (wakefulness == WAKEFULNESS_ASLEEP) { wakeLockSummary &= ~WAKE_LOCK_PROXIMITY_SCREEN_OFF; } } // Infer implied wake locks where necessary based on the current state. if ((wakeLockSummary & (WAKE_LOCK_SCREEN_BRIGHT | WAKE_LOCK_SCREEN_DIM)) != 0) { - if (getWakefulnessLocked() == WAKEFULNESS_AWAKE) { + if (wakefulness == WAKEFULNESS_AWAKE) { wakeLockSummary |= WAKE_LOCK_CPU | WAKE_LOCK_STAY_AWAKE; - } else if (getWakefulnessLocked() == WAKEFULNESS_DREAMING) { + } else if (wakefulness == WAKEFULNESS_DREAMING) { wakeLockSummary |= WAKE_LOCK_CPU; } } @@ -2531,7 +2577,8 @@ public final class PowerManagerService extends SystemService } if ((groupUserActivitySummary & USER_ACTIVITY_SCREEN_BRIGHT) != 0 - && (mWakeLockSummary & WAKE_LOCK_STAY_AWAKE) == 0) { + && (mDisplayGroupPowerStateMapper.getWakeLockSummaryLocked(groupId) + & WAKE_LOCK_STAY_AWAKE) == 0) { groupNextTimeout = mAttentionDetector.updateUserActivity(groupNextTimeout, screenDimDuration); } @@ -2831,7 +2878,8 @@ public final class PowerManagerService extends SystemService private boolean isBeingKeptAwakeLocked(int groupId) { return mStayOn || mProximityPositive - || (mWakeLockSummary & WAKE_LOCK_STAY_AWAKE) != 0 + || (mDisplayGroupPowerStateMapper.getWakeLockSummaryLocked(groupId) + & WAKE_LOCK_STAY_AWAKE) != 0 || (mDisplayGroupPowerStateMapper.getUserActivitySummaryLocked(groupId) & ( USER_ACTIVITY_SCREEN_BRIGHT | USER_ACTIVITY_SCREEN_DIM)) != 0 || mScreenBrightnessBoostInProgress; @@ -3101,8 +3149,8 @@ public final class PowerManagerService extends SystemService if (displayPowerRequest.policy == DisplayPowerRequest.POLICY_DOZE) { displayPowerRequest.dozeScreenState = mDozeScreenStateOverrideFromDreamManager; - if ((mWakeLockSummary & WAKE_LOCK_DRAW) != 0 - && !mDrawWakeLockOverrideFromSidekick) { + if ((mDisplayGroupPowerStateMapper.getWakeLockSummaryLocked(groupId) + & WAKE_LOCK_DRAW) != 0 && !mDrawWakeLockOverrideFromSidekick) { if (displayPowerRequest.dozeScreenState == Display.STATE_DOZE_SUSPEND) { displayPowerRequest.dozeScreenState = Display.STATE_DOZE; } @@ -3128,7 +3176,8 @@ public final class PowerManagerService extends SystemService + ", mWakefulness=" + PowerManagerInternal.wakefulnessToString( mDisplayGroupPowerStateMapper.getWakefulnessLocked(groupId)) - + ", mWakeLockSummary=0x" + Integer.toHexString(mWakeLockSummary) + + ", mWakeLockSummary=0x" + Integer.toHexString( + mDisplayGroupPowerStateMapper.getWakeLockSummaryLocked(groupId)) + ", mUserActivitySummary=0x" + Integer.toHexString( mDisplayGroupPowerStateMapper.getUserActivitySummaryLocked(groupId)) + ", mBootCompleted=" + mBootCompleted @@ -3193,10 +3242,11 @@ public final class PowerManagerService extends SystemService @VisibleForTesting int getDesiredScreenPolicyLocked(int groupId) { final int wakefulness = mDisplayGroupPowerStateMapper.getWakefulnessLocked(groupId); + final int wakeLockSummary = mDisplayGroupPowerStateMapper.getWakeLockSummaryLocked(groupId); if (wakefulness == WAKEFULNESS_ASLEEP || sQuiescent) { return DisplayPowerRequest.POLICY_OFF; } else if (wakefulness == WAKEFULNESS_DOZING) { - if ((mWakeLockSummary & WAKE_LOCK_DOZE) != 0) { + if ((wakeLockSummary & WAKE_LOCK_DOZE) != 0) { return DisplayPowerRequest.POLICY_DOZE; } if (mDozeAfterScreenOff) { @@ -3213,7 +3263,7 @@ public final class PowerManagerService extends SystemService return DisplayPowerRequest.POLICY_VR; } - if ((mWakeLockSummary & WAKE_LOCK_SCREEN_BRIGHT) != 0 + if ((wakeLockSummary & WAKE_LOCK_SCREEN_BRIGHT) != 0 || !mBootCompleted || (mDisplayGroupPowerStateMapper.getUserActivitySummaryLocked(groupId) & USER_ACTIVITY_SCREEN_BRIGHT) != 0 @@ -3292,7 +3342,9 @@ public final class PowerManagerService extends SystemService }; private boolean shouldUseProximitySensorLocked() { - return !mIsVrModeEnabled && (mWakeLockSummary & WAKE_LOCK_PROXIMITY_SCREEN_OFF) != 0; + // Use default display group for proximity sensor. + return !mIsVrModeEnabled && (mDisplayGroupPowerStateMapper.getWakeLockSummaryLocked( + Display.DEFAULT_DISPLAY_GROUP) & WAKE_LOCK_PROXIMITY_SCREEN_OFF) != 0; } /** @@ -4248,6 +4300,8 @@ public final class PowerManagerService extends SystemService pw.println(" lastUserActivityTimeNoChangeLights=" + TimeUtils.formatUptime( mDisplayGroupPowerStateMapper.getLastUserActivityTimeNoChangeLightsLocked( id))); + pw.println(" mWakeLockSummary=0x" + Integer.toHexString( + mDisplayGroupPowerStateMapper.getWakeLockSummaryLocked(id))); } wcd = mWirelessChargerDetector; @@ -4738,6 +4792,7 @@ public final class PowerManagerService extends SystemService */ /* package */ final class WakeLock implements IBinder.DeathRecipient { public final IBinder mLock; + public final int mDisplayId; public int mFlags; public String mTag; public final String mPackageName; @@ -4751,10 +4806,11 @@ public final class PowerManagerService extends SystemService public boolean mNotifiedLong; public boolean mDisabled; - public WakeLock(IBinder lock, int flags, String tag, String packageName, + public WakeLock(IBinder lock, int displayId, int flags, String tag, String packageName, WorkSource workSource, String historyTag, int ownerUid, int ownerPid, UidState uidState) { mLock = lock; + mDisplayId = displayId; mFlags = flags; mTag = tag; mPackageName = packageName; @@ -4807,6 +4863,15 @@ public final class PowerManagerService extends SystemService mWorkSource = copyWorkSource(workSource); } + public int getDisplayGroupId() { + if (!mSystemReady || mDisplayId == Display.INVALID_DISPLAY) { + return Display.INVALID_DISPLAY_GROUP; + } + + final DisplayInfo displayInfo = mDisplayManagerInternal.getDisplayInfo(mDisplayId); + return displayInfo == null ? Display.INVALID_DISPLAY_GROUP : displayInfo.displayGroupId; + } + @Override public String toString() { StringBuilder sb = new StringBuilder(); @@ -4996,11 +5061,11 @@ public final class PowerManagerService extends SystemService @Override // Binder call public void acquireWakeLockWithUid(IBinder lock, int flags, String tag, - String packageName, int uid) { + String packageName, int uid, int displayId) { if (uid < 0) { uid = Binder.getCallingUid(); } - acquireWakeLock(lock, flags, tag, packageName, new WorkSource(uid), null); + acquireWakeLock(lock, flags, tag, packageName, new WorkSource(uid), null, displayId); } @Override // Binder call @@ -5035,7 +5100,7 @@ public final class PowerManagerService extends SystemService @Override // Binder call public void acquireWakeLock(IBinder lock, int flags, String tag, String packageName, - WorkSource ws, String historyTag) { + WorkSource ws, String historyTag, int displayId) { if (lock == null) { throw new IllegalArgumentException("lock must not be null"); } @@ -5060,7 +5125,8 @@ public final class PowerManagerService extends SystemService final int pid = Binder.getCallingPid(); final long ident = Binder.clearCallingIdentity(); try { - acquireWakeLockInternal(lock, flags, tag, packageName, ws, historyTag, uid, pid); + acquireWakeLockInternal(lock, displayId, flags, tag, packageName, ws, historyTag, + uid, pid); } finally { Binder.restoreCallingIdentity(ident); } @@ -5069,7 +5135,7 @@ public final class PowerManagerService extends SystemService @Override // Binder call public void acquireWakeLockAsync(IBinder lock, int flags, String tag, String packageName, WorkSource ws, String historyTag) { - acquireWakeLock(lock, flags, tag, packageName, ws, historyTag); + acquireWakeLock(lock, flags, tag, packageName, ws, historyTag, Display.INVALID_DISPLAY); } @Override // Binder call diff --git a/services/core/java/com/android/server/vibrator/DeviceVibrationEffectAdapter.java b/services/core/java/com/android/server/vibrator/DeviceVibrationEffectAdapter.java index 953837a56698..7f2b07b6f367 100644 --- a/services/core/java/com/android/server/vibrator/DeviceVibrationEffectAdapter.java +++ b/services/core/java/com/android/server/vibrator/DeviceVibrationEffectAdapter.java @@ -16,6 +16,7 @@ package com.android.server.vibrator; +import android.hardware.vibrator.IVibrator; import android.os.VibrationEffect; import android.os.VibratorInfo; import android.os.vibrator.RampSegment; @@ -30,25 +31,31 @@ import java.util.List; /** Adapts a {@link VibrationEffect} to a specific device, taking into account its capabilities. */ final class DeviceVibrationEffectAdapter implements VibrationEffectModifier<VibratorInfo> { - /** - * Adapts a sequence of {@link VibrationEffectSegment} to device's absolute frequency values - * and respective supported amplitudes. - * - * <p>This adapter preserves the segment count. - */ - interface AmplitudeFrequencyAdapter { - List<VibrationEffectSegment> apply(List<VibrationEffectSegment> segments, - VibratorInfo info); + /** Adapts a sequence of {@link VibrationEffectSegment} to device's capabilities. */ + interface SegmentsAdapter { + + /** + * Modifies the given segments list by adding/removing segments to it based on the + * device capabilities specified by given {@link VibratorInfo}. + * + * @param segments List of {@link VibrationEffectSegment} to be adapter to the device. + * @param repeatIndex Repeat index on the current segment list. + * @param info The device vibrator info that the segments must be adapted to. + * @return The new repeat index on the modifies list. + */ + int apply(List<VibrationEffectSegment> segments, int repeatIndex, VibratorInfo info); } - private final AmplitudeFrequencyAdapter mAmplitudeFrequencyAdapter; + private final SegmentsAdapter mAmplitudeFrequencyAdapter; + private final SegmentsAdapter mStepToRampAdapter; DeviceVibrationEffectAdapter() { this(new ClippingAmplitudeFrequencyAdapter()); } - DeviceVibrationEffectAdapter(AmplitudeFrequencyAdapter amplitudeFrequencyAdapter) { + DeviceVibrationEffectAdapter(SegmentsAdapter amplitudeFrequencyAdapter) { mAmplitudeFrequencyAdapter = amplitudeFrequencyAdapter; + mStepToRampAdapter = new StepToRampAdapter(); } @Override @@ -58,14 +65,62 @@ final class DeviceVibrationEffectAdapter implements VibrationEffectModifier<Vibr } VibrationEffect.Composed composed = (VibrationEffect.Composed) effect; - List<VibrationEffectSegment> mappedSegments = mAmplitudeFrequencyAdapter.apply( - composed.getSegments(), info); + List<VibrationEffectSegment> newSegments = new ArrayList<>(composed.getSegments()); + int newRepeatIndex = composed.getRepeatIndex(); - // TODO(b/167947076): add ramp to step adapter once PWLE capability is introduced + // Maps steps that should be handled by PWLE to ramps. + // This should be done before frequency is converted from relative to absolute values. + newRepeatIndex = mStepToRampAdapter.apply(newSegments, newRepeatIndex, info); + + // Adapt amplitude and frequency values to device supported ones, converting frequency + // to absolute values in Hertz. + newRepeatIndex = mAmplitudeFrequencyAdapter.apply(newSegments, newRepeatIndex, info); + + // TODO(b/167947076): add ramp to step adapter // TODO(b/167947076): add filter that removes unsupported primitives // TODO(b/167947076): add filter that replaces unsupported prebaked with fallback - return new VibrationEffect.Composed(mappedSegments, composed.getRepeatIndex()); + return new VibrationEffect.Composed(newSegments, newRepeatIndex); + } + + /** + * Adapter that converts step segments that should be handled as PWLEs to ramp segments. + * + * <p>This leves the list unchanged if the device do not have compose PWLE capability. + */ + private static final class StepToRampAdapter implements SegmentsAdapter { + @Override + public int apply(List<VibrationEffectSegment> segments, int repeatIndex, + VibratorInfo info) { + if (!info.hasCapability(IVibrator.CAP_COMPOSE_PWLE_EFFECTS)) { + // The vibrator do not have PWLE capability, so keep the segments unchanged. + return repeatIndex; + } + int segmentCount = segments.size(); + // Convert steps that require frequency control to ramps. + for (int i = 0; i < segmentCount; i++) { + VibrationEffectSegment segment = segments.get(i); + if ((segment instanceof StepSegment) + && ((StepSegment) segment).getFrequency() != 0) { + segments.set(i, apply((StepSegment) segment)); + } + } + // Convert steps that are next to ramps to also become ramps, so they can be composed + // together in the same PWLE waveform. + for (int i = 1; i < segmentCount; i++) { + if (segments.get(i) instanceof RampSegment) { + for (int j = i - 1; j >= 0 && (segments.get(j) instanceof StepSegment); j--) { + segments.set(j, apply((StepSegment) segments.get(j))); + } + } + } + return repeatIndex; + } + + private RampSegment apply(StepSegment segment) { + return new RampSegment(segment.getAmplitude(), segment.getAmplitude(), + segment.getFrequency(), segment.getFrequency(), (int) segment.getDuration()); + } } /** @@ -74,25 +129,24 @@ final class DeviceVibrationEffectAdapter implements VibrationEffectModifier<Vibr * * <p>Devices with no frequency control will collapse all frequencies to zero and leave * amplitudes unchanged. + * + * <p>The frequency value returned in segments will be absolute, conveted with + * {@link VibratorInfo#getAbsoluteFrequency(float)}. */ - private static final class ClippingAmplitudeFrequencyAdapter - implements AmplitudeFrequencyAdapter { + private static final class ClippingAmplitudeFrequencyAdapter implements SegmentsAdapter { @Override - public List<VibrationEffectSegment> apply(List<VibrationEffectSegment> segments, + public int apply(List<VibrationEffectSegment> segments, int repeatIndex, VibratorInfo info) { - List<VibrationEffectSegment> result = new ArrayList<>(); int segmentCount = segments.size(); for (int i = 0; i < segmentCount; i++) { VibrationEffectSegment segment = segments.get(i); if (segment instanceof StepSegment) { - result.add(apply((StepSegment) segment, info)); + segments.set(i, apply((StepSegment) segment, info)); } else if (segment instanceof RampSegment) { - result.add(apply((RampSegment) segment, info)); - } else { - result.add(segment); + segments.set(i, apply((RampSegment) segment, info)); } } - return result; + return repeatIndex; } private StepSegment apply(StepSegment segment, VibratorInfo info) { diff --git a/services/core/java/com/android/server/vibrator/VibrationThread.java b/services/core/java/com/android/server/vibrator/VibrationThread.java index dccf8c7858cc..df85e262bd5d 100644 --- a/services/core/java/com/android/server/vibrator/VibrationThread.java +++ b/services/core/java/com/android/server/vibrator/VibrationThread.java @@ -280,7 +280,6 @@ final class VibrationThread extends Thread implements IBinder.DeathRecipient { vibratorOffTimeout); } if (segment instanceof RampSegment) { - // TODO(b/167947076): check capabilities to play steps with PWLE once APIs introduced return new ComposePwleStep(latestStartTime, controller, effect, segmentIndex, vibratorOffTimeout); } @@ -828,14 +827,14 @@ final class VibrationThread extends Thread implements IBinder.DeathRecipient { } if (DEBUG) { - Slog.d(TAG, "Compose " + primitives.size() + " primitives on vibrator " + Slog.d(TAG, "Compose " + primitives + " primitives on vibrator " + controller.getVibratorInfo().getId()); } mVibratorOnResult = controller.on( primitives.toArray(new PrimitiveSegment[primitives.size()]), mVibration.id); - return nextSteps(/* segmntsPlayed= */ primitives.size()); + return nextSteps(/* segmentsPlayed= */ primitives.size()); } finally { Trace.traceEnd(Trace.TRACE_TAG_VIBRATOR); } @@ -865,11 +864,6 @@ final class VibrationThread extends Thread implements IBinder.DeathRecipient { VibrationEffectSegment segment = effect.getSegments().get(i); if (segment instanceof RampSegment) { pwles.add((RampSegment) segment); - } else if (segment instanceof StepSegment) { - StepSegment stepSegment = (StepSegment) segment; - pwles.add(new RampSegment(stepSegment.getAmplitude(), - stepSegment.getAmplitude(), stepSegment.getFrequency(), - stepSegment.getFrequency(), (int) stepSegment.getDuration())); } else { break; } @@ -882,7 +876,7 @@ final class VibrationThread extends Thread implements IBinder.DeathRecipient { } if (DEBUG) { - Slog.d(TAG, "Compose " + pwles.size() + " PWLEs on vibrator " + Slog.d(TAG, "Compose " + pwles + " PWLEs on vibrator " + controller.getVibratorInfo().getId()); } mVibratorOnResult = controller.on(pwles.toArray(new RampSegment[pwles.size()]), diff --git a/services/core/java/com/android/server/vibrator/VibratorController.java b/services/core/java/com/android/server/vibrator/VibratorController.java index 7cb3140ecb1a..a09bfc57ba23 100644 --- a/services/core/java/com/android/server/vibrator/VibratorController.java +++ b/services/core/java/com/android/server/vibrator/VibratorController.java @@ -66,7 +66,8 @@ final class VibratorController { NativeWrapper nativeWrapper) { mNativeWrapper = nativeWrapper; mNativeWrapper.init(vibratorId, listener); - mVibratorInfo = mNativeWrapper.getInfo(); + // TODO(b/167947076): load suggested range from config + mVibratorInfo = mNativeWrapper.getInfo(/* suggestedFrequencyRange= */ 100); Preconditions.checkNotNull(mVibratorInfo, "Failed to retrieve data for vibrator %d", vibratorId); } @@ -251,8 +252,17 @@ final class VibratorController { * @return The duration of the effect playing, or 0 if unsupported. */ public long on(RampSegment[] primitives, long vibrationId) { - // TODO(b/167947076): forward to the HAL once APIs are introduced - return 0; + if (!mVibratorInfo.hasCapability(IVibrator.CAP_COMPOSE_PWLE_EFFECTS)) { + return 0; + } + synchronized (mLock) { + int braking = mVibratorInfo.getDefaultBraking(); + long duration = mNativeWrapper.composePwle(primitives, braking, vibrationId); + if (duration > 0) { + notifyVibratorOnLocked(); + } + return duration; + } } /** Turns off the vibrator.This will affect the state of {@link #isVibrating()}. */ @@ -337,13 +347,21 @@ final class VibratorController { private static native void setAmplitude(long nativePtr, float amplitude); private static native long performEffect(long nativePtr, long effect, long strength, long vibrationId); + private static native long performComposedEffect(long nativePtr, PrimitiveSegment[] effect, long vibrationId); + + private static native long performPwleEffect(long nativePtr, RampSegment[] effect, + int braking, long vibrationId); + private static native void setExternalControl(long nativePtr, boolean enabled); + private static native void alwaysOnEnable(long nativePtr, long id, long effect, long strength); + private static native void alwaysOnDisable(long nativePtr, long id); - private static native VibratorInfo getInfo(long nativePtr); + + private static native VibratorInfo getInfo(long nativePtr, float suggestedFrequencyRange); private long mNativePtr = 0; @@ -385,11 +403,16 @@ final class VibratorController { return performEffect(mNativePtr, effect, strength, vibrationId); } - /** Turns vibrator on to perform one of the supported composed effects. */ + /** Turns vibrator on to perform effect composed of give primitives effect. */ public long compose(PrimitiveSegment[] primitives, long vibrationId) { return performComposedEffect(mNativePtr, primitives, vibrationId); } + /** Turns vibrator on to perform PWLE effect composed of given primitives. */ + public long composePwle(RampSegment[] primitives, int braking, long vibrationId) { + return performPwleEffect(mNativePtr, primitives, braking, vibrationId); + } + /** Enabled the device vibrator to be controlled by another service. */ public void setExternalControl(boolean enabled) { setExternalControl(mNativePtr, enabled); @@ -406,8 +429,8 @@ final class VibratorController { } /** Return device vibrator metadata. */ - public VibratorInfo getInfo() { - return getInfo(mNativePtr); + public VibratorInfo getInfo(float suggestedFrequencyRange) { + return getInfo(mNativePtr, suggestedFrequencyRange); } } } diff --git a/services/core/java/com/android/server/vibrator/VibratorManagerService.java b/services/core/java/com/android/server/vibrator/VibratorManagerService.java index f28a55947882..b1d6050f82c2 100644 --- a/services/core/java/com/android/server/vibrator/VibratorManagerService.java +++ b/services/core/java/com/android/server/vibrator/VibratorManagerService.java @@ -1540,6 +1540,8 @@ public class VibratorManagerService extends IVibratorManagerService.Stub { private void addWaveformToComposition(VibrationEffect.Composition composition) { boolean hasAmplitudes = false; + boolean hasFrequencies = false; + boolean isContinuous = false; int repeat = -1; int delay = 0; @@ -1552,35 +1554,49 @@ public class VibratorManagerService extends IVibratorManagerService.Stub { repeat = Integer.parseInt(getNextArgRequired()); } else if ("-w".equals(nextOption)) { delay = Integer.parseInt(getNextArgRequired()); + } else if ("-f".equals(nextOption)) { + hasFrequencies = true; + } else if ("-c".equals(nextOption)) { + isContinuous = true; } } - List<Long> durations = new ArrayList<>(); - List<Integer> amplitudes = new ArrayList<>(); - VibrationEffect waveform; + List<Integer> durations = new ArrayList<>(); + List<Float> amplitudes = new ArrayList<>(); + List<Float> frequencies = new ArrayList<>(); + float nextAmplitude = 0; String nextArg; while ((nextArg = peekNextArg()) != null) { try { - durations.add(Long.parseLong(nextArg)); + durations.add(Integer.parseInt(nextArg)); getNextArgRequired(); // consume the duration } catch (NumberFormatException e) { // nextArg is not a duration, finish reading. break; } if (hasAmplitudes) { - amplitudes.add(Integer.parseInt(getNextArgRequired())); + amplitudes.add( + Float.parseFloat(getNextArgRequired()) / VibrationEffect.MAX_AMPLITUDE); + } else { + amplitudes.add(nextAmplitude); + nextAmplitude = 1 - nextAmplitude; + } + if (hasFrequencies) { + frequencies.add(Float.parseFloat(getNextArgRequired())); + } else { + frequencies.add(0f); } } - long[] durationArray = durations.stream().mapToLong(Long::longValue).toArray(); - if (hasAmplitudes) { - int[] amplitudeArray = amplitudes.stream().mapToInt(Integer::intValue).toArray(); - waveform = VibrationEffect.createWaveform(durationArray, amplitudeArray, repeat); - } else { - waveform = VibrationEffect.createWaveform(durationArray, repeat); + VibrationEffect.WaveformBuilder waveform = VibrationEffect.startWaveform(); + for (int i = 0; i < durations.size(); i++) { + if (isContinuous) { + waveform.addRamp(amplitudes.get(i), frequencies.get(i), durations.get(i)); + } else { + waveform.addStep(amplitudes.get(i), frequencies.get(i), durations.get(i)); + } } - - composition.addEffect(waveform, delay); + composition.addEffect(waveform.build(repeat), delay); } private void addPrebakedToComposition(VibrationEffect.Composition composition) { @@ -1659,7 +1675,8 @@ public class VibratorManagerService extends IVibratorManagerService.Stub { pw.println(" wait time in milliseconds."); pw.println(" If -a is provided, the command accepts a second argument for "); pw.println(" amplitude, in a scale of 1-255."); - pw.println(" waveform [-w delay] [-r index] [-a] (<duration> [<amplitude>])..."); + pw.print(" waveform [-w delay] [-r index] [-a] [-f] [-c] "); + pw.println("(<duration> [<amplitude>] [<frequency>])..."); pw.println(" Vibrates for durations and amplitudes in list; ignored when "); pw.println(" device is on DND (Do Not Disturb) mode; touch feedback strength "); pw.println(" user setting will be used to scale amplitude."); @@ -1667,9 +1684,15 @@ public class VibratorManagerService extends IVibratorManagerService.Stub { pw.println(" wait time in milliseconds."); pw.println(" If -r is provided, the waveform loops back to the specified"); pw.println(" index (e.g. 0 loops from the beginning)"); - pw.println(" If -a is provided, the command accepts duration-amplitude pairs;"); - pw.println(" otherwise, it accepts durations only and alternates off/on"); - pw.println(" Duration is in milliseconds; amplitude is a scale of 1-255."); + pw.println(" If -a is provided, the command expects amplitude to follow each"); + pw.println(" duration; otherwise, it accepts durations only and alternates"); + pw.println(" off/on"); + pw.println(" If -f is provided, the command expects frequency to follow each"); + pw.println(" amplitude or duration; otherwise, it uses resonant frequency"); + pw.println(" If -c is provided, the waveform is continuous and will ramp"); + pw.println(" between values; otherwise each entry is a fixed step."); + pw.println(" Duration is in milliseconds; amplitude is a scale of 1-255;"); + pw.println(" frequency is a relative value around resonant frequency 0;"); pw.println(" prebaked [-w delay] [-b] <effect-id>"); pw.println(" Vibrates with prebaked effect; ignored when device is on DND "); pw.println(" (Do Not Disturb) mode; touch feedback strength user setting "); diff --git a/services/core/jni/com_android_server_vibrator_VibratorController.cpp b/services/core/jni/com_android_server_vibrator_VibratorController.cpp index 11fd8ffb8e9b..cf64a6847b46 100644 --- a/services/core/jni/com_android_server_vibrator_VibratorController.cpp +++ b/services/core/jni/com_android_server_vibrator_VibratorController.cpp @@ -48,6 +48,13 @@ static struct { jfieldID scale; jfieldID delay; } sPrimitiveClassInfo; +static struct { + jfieldID startAmplitude; + jfieldID endAmplitude; + jfieldID startFrequency; + jfieldID endFrequency; + jfieldID duration; +} sRampClassInfo; static_assert(static_cast<uint8_t>(V1_0::EffectStrength::LIGHT) == static_cast<uint8_t>(aidl::EffectStrength::LIGHT)); @@ -127,6 +134,37 @@ private: const jobject mCallbackListener; }; +static aidl::BrakingPwle brakingPwle(aidl::Braking braking, int32_t duration) { + aidl::BrakingPwle pwle; + pwle.braking = braking; + pwle.duration = duration; + return pwle; +} + +static aidl::ActivePwle activePwleFromJavaPrimitive(JNIEnv* env, jobject ramp) { + aidl::ActivePwle pwle; + pwle.startAmplitude = + static_cast<float>(env->GetFloatField(ramp, sRampClassInfo.startAmplitude)); + pwle.endAmplitude = static_cast<float>(env->GetFloatField(ramp, sRampClassInfo.endAmplitude)); + pwle.startFrequency = + static_cast<float>(env->GetFloatField(ramp, sRampClassInfo.startFrequency)); + pwle.endFrequency = static_cast<float>(env->GetFloatField(ramp, sRampClassInfo.endFrequency)); + pwle.duration = static_cast<int32_t>(env->GetIntField(ramp, sRampClassInfo.duration)); + return pwle; +} + +/* Return true if braking is not NONE and the active PWLE starts and ends with zero amplitude. */ +static bool shouldBeReplacedWithBraking(aidl::ActivePwle activePwle, aidl::Braking braking) { + return (braking != aidl::Braking::NONE) && (activePwle.startAmplitude == 0) && + (activePwle.endAmplitude == 0); +} + +/* Return true if braking is not NONE and the active PWLE only ends with zero amplitude. */ +static bool shouldAddLastBraking(aidl::ActivePwle lastActivePwle, aidl::Braking braking) { + return (braking != aidl::Braking::NONE) && (lastActivePwle.startAmplitude > 0) && + (lastActivePwle.endAmplitude == 0); +} + static aidl::CompositeEffect effectFromJavaPrimitive(JNIEnv* env, jobject primitive) { aidl::CompositeEffect effect; effect.primitive = static_cast<aidl::CompositePrimitive>( @@ -254,6 +292,40 @@ static jlong vibratorPerformComposedEffect(JNIEnv* env, jclass /* clazz */, jlon return result.isOk() ? result.value().count() : (result.isUnsupported() ? 0 : -1); } +static jlong vibratorPerformPwleEffect(JNIEnv* env, jclass /* clazz */, jlong ptr, + jobjectArray waveform, jint brakingId, jlong vibrationId) { + VibratorControllerWrapper* wrapper = reinterpret_cast<VibratorControllerWrapper*>(ptr); + if (wrapper == nullptr) { + ALOGE("vibratorPerformPwleEffect failed because native wrapper was not initialized"); + return -1; + } + aidl::Braking braking = static_cast<aidl::Braking>(brakingId); + size_t size = env->GetArrayLength(waveform); + std::vector<aidl::PrimitivePwle> primitives; + std::chrono::milliseconds totalDuration(0); + for (size_t i = 0; i < size; i++) { + jobject element = env->GetObjectArrayElement(waveform, i); + aidl::ActivePwle activePwle = activePwleFromJavaPrimitive(env, element); + if ((i > 0) && shouldBeReplacedWithBraking(activePwle, braking)) { + primitives.push_back(brakingPwle(braking, activePwle.duration)); + } else { + primitives.push_back(activePwle); + } + totalDuration += std::chrono::milliseconds(activePwle.duration); + + if ((i == (size - 1)) && shouldAddLastBraking(activePwle, braking)) { + primitives.push_back(brakingPwle(braking, 0 /* duration */)); + } + } + + auto callback = wrapper->createCallback(vibrationId); + auto performPwleEffectFn = [&](std::shared_ptr<vibrator::HalWrapper> hal) { + return hal->performPwleEffect(primitives, callback); + }; + auto result = wrapper->halCall<void>(performPwleEffectFn, "performPwleEffect"); + return result.isOk() ? totalDuration.count() : (result.isUnsupported() ? 0 : -1); +} + static void vibratorAlwaysOnEnable(JNIEnv* env, jclass /* clazz */, jlong ptr, jlong id, jlong effect, jlong strength) { VibratorControllerWrapper* wrapper = reinterpret_cast<VibratorControllerWrapper*>(ptr); @@ -280,7 +352,8 @@ static void vibratorAlwaysOnDisable(JNIEnv* env, jclass /* clazz */, jlong ptr, wrapper->halCall<void>(alwaysOnDisableFn, "alwaysOnDisable"); } -static jobject vibratorGetInfo(JNIEnv* env, jclass /* clazz */, jlong ptr) { +static jobject vibratorGetInfo(JNIEnv* env, jclass /* clazz */, jlong ptr, + jfloat suggestedSafeRange) { VibratorControllerWrapper* wrapper = reinterpret_cast<VibratorControllerWrapper*>(ptr); if (wrapper == nullptr) { ALOGE("vibratorGetInfo failed because native wrapper was not initialized"); @@ -290,10 +363,14 @@ static jobject vibratorGetInfo(JNIEnv* env, jclass /* clazz */, jlong ptr) { jlong capabilities = static_cast<jlong>(info.capabilities.valueOr(vibrator::Capabilities::NONE)); + jfloat minFrequency = static_cast<jfloat>(info.minFrequency.valueOr(NAN)); jfloat resonantFrequency = static_cast<jfloat>(info.resonantFrequency.valueOr(NAN)); + jfloat frequencyResolution = static_cast<jfloat>(info.frequencyResolution.valueOr(NAN)); jfloat qFactor = static_cast<jfloat>(info.qFactor.valueOr(NAN)); jintArray supportedEffects = nullptr; + jintArray supportedBraking = nullptr; jintArray supportedPrimitives = nullptr; + jfloatArray maxAmplitudes = nullptr; if (info.supportedEffects.isOk()) { std::vector<aidl::Effect> effects = info.supportedEffects.value(); @@ -301,21 +378,32 @@ static jobject vibratorGetInfo(JNIEnv* env, jclass /* clazz */, jlong ptr) { env->SetIntArrayRegion(supportedEffects, 0, effects.size(), reinterpret_cast<jint*>(effects.data())); } + if (info.supportedBraking.isOk()) { + std::vector<aidl::Braking> braking = info.supportedBraking.value(); + supportedBraking = env->NewIntArray(braking.size()); + env->SetIntArrayRegion(supportedBraking, 0, braking.size(), + reinterpret_cast<jint*>(braking.data())); + } if (info.supportedPrimitives.isOk()) { std::vector<aidl::CompositePrimitive> primitives = info.supportedPrimitives.value(); supportedPrimitives = env->NewIntArray(primitives.size()); env->SetIntArrayRegion(supportedPrimitives, 0, primitives.size(), reinterpret_cast<jint*>(primitives.data())); } + if (info.maxAmplitudes.isOk()) { + std::vector<float> amplitudes = info.maxAmplitudes.value(); + maxAmplitudes = env->NewFloatArray(amplitudes.size()); + env->SetFloatArrayRegion(maxAmplitudes, 0, amplitudes.size(), + reinterpret_cast<jfloat*>(amplitudes.data())); + } - jobject frequencyMapping = - env->NewObject(sFrequencyMappingClass, sFrequencyMappingCtor, NAN /* minFrequencyHz*/, - resonantFrequency, NAN /* frequencyResolutionHz*/, - NAN /* suggestedSafeRangeHz */, nullptr /* maxAmplitudes */); + jobject frequencyMapping = env->NewObject(sFrequencyMappingClass, sFrequencyMappingCtor, + minFrequency, resonantFrequency, frequencyResolution, + suggestedSafeRange, maxAmplitudes); return env->NewObject(sVibratorInfoClass, sVibratorInfoCtor, wrapper->getVibratorId(), - capabilities, supportedEffects, supportedPrimitives, qFactor, - frequencyMapping); + capabilities, supportedEffects, supportedBraking, supportedPrimitives, + qFactor, frequencyMapping); } static const JNINativeMethod method_table[] = { @@ -330,10 +418,12 @@ static const JNINativeMethod method_table[] = { {"performEffect", "(JJJJ)J", (void*)vibratorPerformEffect}, {"performComposedEffect", "(J[Landroid/os/vibrator/PrimitiveSegment;J)J", (void*)vibratorPerformComposedEffect}, + {"performPwleEffect", "(J[Landroid/os/vibrator/RampSegment;IJ)J", + (void*)vibratorPerformPwleEffect}, {"setExternalControl", "(JZ)V", (void*)vibratorSetExternalControl}, {"alwaysOnEnable", "(JJJJ)V", (void*)vibratorAlwaysOnEnable}, {"alwaysOnDisable", "(JJ)V", (void*)vibratorAlwaysOnDisable}, - {"getInfo", "(J)Landroid/os/VibratorInfo;", (void*)vibratorGetInfo}, + {"getInfo", "(JF)Landroid/os/VibratorInfo;", (void*)vibratorGetInfo}, }; int register_android_server_vibrator_VibratorController(JavaVM* jvm, JNIEnv* env) { @@ -348,6 +438,13 @@ int register_android_server_vibrator_VibratorController(JavaVM* jvm, JNIEnv* env sPrimitiveClassInfo.scale = GetFieldIDOrDie(env, primitiveClass, "mScale", "F"); sPrimitiveClassInfo.delay = GetFieldIDOrDie(env, primitiveClass, "mDelay", "I"); + jclass rampClass = FindClassOrDie(env, "android/os/vibrator/RampSegment"); + sRampClassInfo.startAmplitude = GetFieldIDOrDie(env, rampClass, "mStartAmplitude", "F"); + sRampClassInfo.endAmplitude = GetFieldIDOrDie(env, rampClass, "mEndAmplitude", "F"); + sRampClassInfo.startFrequency = GetFieldIDOrDie(env, rampClass, "mStartFrequency", "F"); + sRampClassInfo.endFrequency = GetFieldIDOrDie(env, rampClass, "mEndFrequency", "F"); + sRampClassInfo.duration = GetFieldIDOrDie(env, rampClass, "mDuration", "I"); + jclass frequencyMappingClass = FindClassOrDie(env, "android/os/VibratorInfo$FrequencyMapping"); sFrequencyMappingClass = (jclass)env->NewGlobalRef(frequencyMappingClass); sFrequencyMappingCtor = GetMethodIDOrDie(env, sFrequencyMappingClass, "<init>", "(FFFF[F)V"); @@ -355,7 +452,7 @@ int register_android_server_vibrator_VibratorController(JavaVM* jvm, JNIEnv* env jclass vibratorInfoClass = FindClassOrDie(env, "android/os/VibratorInfo"); sVibratorInfoClass = (jclass)env->NewGlobalRef(vibratorInfoClass); sVibratorInfoCtor = GetMethodIDOrDie(env, sVibratorInfoClass, "<init>", - "(IJ[I[IFLandroid/os/VibratorInfo$FrequencyMapping;)V"); + "(IJ[I[I[IFLandroid/os/VibratorInfo$FrequencyMapping;)V"); return jniRegisterNativeMethods(env, "com/android/server/vibrator/VibratorController$NativeWrapper", diff --git a/services/tests/servicestests/src/com/android/server/pm/BaseShortcutManagerTest.java b/services/tests/servicestests/src/com/android/server/pm/BaseShortcutManagerTest.java index 02b8dddae7c1..ef3e320cb84b 100644 --- a/services/tests/servicestests/src/com/android/server/pm/BaseShortcutManagerTest.java +++ b/services/tests/servicestests/src/com/android/server/pm/BaseShortcutManagerTest.java @@ -55,6 +55,7 @@ import android.app.appsearch.IAppSearchManager; import android.app.appsearch.IAppSearchResultCallback; import android.app.appsearch.PackageIdentifier; import android.app.appsearch.SearchResultPage; +import android.app.appsearch.SetSchemaResponse; import android.app.role.OnRoleHoldersChangedListener; import android.app.usage.UsageStatsManagerInternal; import android.content.ActivityNotFoundException; @@ -672,7 +673,8 @@ public abstract class BaseShortcutManagerTest extends InstrumentationTestCase { packageIdentifiers.add(new PackageIdentifier(entry.getValue().get(i))); } } - callback.onResult(AppSearchResult.newSuccessfulResult(null)); + final SetSchemaResponse response = new SetSchemaResponse.Builder().build(); + callback.onResult(AppSearchResult.newSuccessfulResult(response.getBundle())); } @Override diff --git a/services/tests/servicestests/src/com/android/server/pm/dex/ArtStatsLogUtilsTest.java b/services/tests/servicestests/src/com/android/server/pm/dex/ArtStatsLogUtilsTest.java index 13d75a77507f..f014119319e9 100644 --- a/services/tests/servicestests/src/com/android/server/pm/dex/ArtStatsLogUtilsTest.java +++ b/services/tests/servicestests/src/com/android/server/pm/dex/ArtStatsLogUtilsTest.java @@ -22,6 +22,7 @@ import com.android.internal.art.ArtStatsLog; import com.android.server.pm.dex.ArtStatsLogUtils.ArtStatsLogger; import org.junit.AfterClass; +import org.junit.Assert; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; @@ -49,6 +50,9 @@ public final class ArtStatsLogUtilsTest { private static final String COMPILER_FILTER = "space-profile"; private static final String PROFILE_DEX_METADATA = "primary.prof"; private static final String VDEX_DEX_METADATA = "primary.vdex"; + private static final String INSTRUCTION_SET = "arm64"; + private static final String BASE_APK = "base.apk"; + private static final String SPLIT_APK = "split.apk"; private static final byte[] DEX_CONTENT = "dexData".getBytes(); private static final int COMPILATION_REASON = 1; private static final int RESULT_CODE = 222; @@ -97,17 +101,18 @@ public final class ArtStatsLogUtilsTest { ArtStatsLogUtils.writeStatsLog( mockLogger, SESSION_ID, - apk.toString(), COMPILER_FILTER, UID, COMPILE_TIME, dexMetadataPath.toString(), COMPILATION_REASON, - RESULT_CODE); + RESULT_CODE, + ArtStatsLog.ART_DATUM_REPORTED__APK_TYPE__ART_APK_TYPE_BASE, + INSTRUCTION_SET); // Assert verifyWrites(ArtStatsLog. - ART_DATUM_REPORTED__DEX_METADATA_TYPE__ART_DEX_METADATA_TYPE_PROFILE_AND_VDEX); + ART_DATUM_REPORTED__DEX_METADATA_TYPE__ART_DEX_METADATA_TYPE_PROFILE_AND_VDEX); } finally { deleteSliently(dexMetadataPath); deleteSliently(apk); @@ -127,17 +132,18 @@ public final class ArtStatsLogUtilsTest { ArtStatsLogUtils.writeStatsLog( mockLogger, SESSION_ID, - apk.toString(), COMPILER_FILTER, UID, COMPILE_TIME, dexMetadataPath.toString(), COMPILATION_REASON, - RESULT_CODE); + RESULT_CODE, + ArtStatsLog.ART_DATUM_REPORTED__APK_TYPE__ART_APK_TYPE_BASE, + INSTRUCTION_SET); // Assert verifyWrites(ArtStatsLog. - ART_DATUM_REPORTED__DEX_METADATA_TYPE__ART_DEX_METADATA_TYPE_PROFILE); + ART_DATUM_REPORTED__DEX_METADATA_TYPE__ART_DEX_METADATA_TYPE_PROFILE); } finally { deleteSliently(dexMetadataPath); deleteSliently(apk); @@ -157,17 +163,18 @@ public final class ArtStatsLogUtilsTest { ArtStatsLogUtils.writeStatsLog( mockLogger, SESSION_ID, - apk.toString(), COMPILER_FILTER, UID, COMPILE_TIME, dexMetadataPath.toString(), COMPILATION_REASON, - RESULT_CODE); + RESULT_CODE, + ArtStatsLog.ART_DATUM_REPORTED__APK_TYPE__ART_APK_TYPE_BASE, + INSTRUCTION_SET); // Assert verifyWrites(ArtStatsLog. - ART_DATUM_REPORTED__DEX_METADATA_TYPE__ART_DEX_METADATA_TYPE_VDEX); + ART_DATUM_REPORTED__DEX_METADATA_TYPE__ART_DEX_METADATA_TYPE_VDEX); } finally { deleteSliently(dexMetadataPath); deleteSliently(apk); @@ -185,17 +192,18 @@ public final class ArtStatsLogUtilsTest { ArtStatsLogUtils.writeStatsLog( mockLogger, SESSION_ID, - apk.toString(), COMPILER_FILTER, UID, COMPILE_TIME, /*dexMetadataPath=*/ null, COMPILATION_REASON, - RESULT_CODE); + RESULT_CODE, + ArtStatsLog.ART_DATUM_REPORTED__APK_TYPE__ART_APK_TYPE_BASE, + INSTRUCTION_SET); // Assert verifyWrites(ArtStatsLog. - ART_DATUM_REPORTED__DEX_METADATA_TYPE__ART_DEX_METADATA_TYPE_NONE); + ART_DATUM_REPORTED__DEX_METADATA_TYPE__ART_DEX_METADATA_TYPE_NONE); } finally { deleteSliently(apk); } @@ -214,23 +222,35 @@ public final class ArtStatsLogUtilsTest { ArtStatsLogUtils.writeStatsLog( mockLogger, SESSION_ID, - apk.toString(), COMPILER_FILTER, UID, COMPILE_TIME, dexMetadataPath.toString(), COMPILATION_REASON, - RESULT_CODE); + RESULT_CODE, + ArtStatsLog.ART_DATUM_REPORTED__APK_TYPE__ART_APK_TYPE_BASE, + INSTRUCTION_SET); // Assert verifyWrites(ArtStatsLog. - ART_DATUM_REPORTED__DEX_METADATA_TYPE__ART_DEX_METADATA_TYPE_UNKNOWN); + ART_DATUM_REPORTED__DEX_METADATA_TYPE__ART_DEX_METADATA_TYPE_UNKNOWN); } finally { deleteSliently(dexMetadataPath); deleteSliently(apk); } } + @Test + public void testGetApkType() { + // Act + int result1 = ArtStatsLogUtils.getApkType(BASE_APK); + int result2 = ArtStatsLogUtils.getApkType(SPLIT_APK); + + // Assert + Assert.assertEquals(result1, ArtStatsLog.ART_DATUM_REPORTED__APK_TYPE__ART_APK_TYPE_BASE); + Assert.assertEquals(result2, ArtStatsLog.ART_DATUM_REPORTED__APK_TYPE__ART_APK_TYPE_SPLIT); + } + private void verifyWrites(int dexMetadataType) { InOrder inorder = inOrder(mockLogger); inorder.verify(mockLogger).write( @@ -239,7 +259,9 @@ public final class ArtStatsLogUtilsTest { COMPILER_FILTER, ArtStatsLog.ART_DATUM_REPORTED__KIND__ART_DATUM_DEX2OAT_RESULT_CODE, RESULT_CODE, - dexMetadataType); + dexMetadataType, + ArtStatsLog.ART_DATUM_REPORTED__APK_TYPE__ART_APK_TYPE_BASE, + INSTRUCTION_SET); inorder.verify(mockLogger).write( SESSION_ID, UID, @@ -247,7 +269,9 @@ public final class ArtStatsLogUtilsTest { COMPILER_FILTER, ArtStatsLog.ART_DATUM_REPORTED__KIND__ART_DATUM_DEX2OAT_TOTAL_TIME, COMPILE_TIME, - dexMetadataType); + dexMetadataType, + ArtStatsLog.ART_DATUM_REPORTED__APK_TYPE__ART_APK_TYPE_BASE, + INSTRUCTION_SET); } private Path zipFiles(String suffix, Path... files) throws IOException { diff --git a/services/tests/servicestests/src/com/android/server/power/PowerManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/power/PowerManagerServiceTest.java index 2df6c5ab80e8..874f8dc538aa 100644 --- a/services/tests/servicestests/src/com/android/server/power/PowerManagerServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/power/PowerManagerServiceTest.java @@ -467,21 +467,21 @@ public class PowerManagerServiceTest { // First, ensure that a normal full wake lock does not cause a wakeup int flags = PowerManager.FULL_WAKE_LOCK; mService.getBinderServiceInstance().acquireWakeLock(token, flags, tag, packageName, - null /* workSource */, null /* historyTag */); + null /* workSource */, null /* historyTag */, Display.INVALID_DISPLAY); assertThat(mService.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP); mService.getBinderServiceInstance().releaseWakeLock(token, 0 /* flags */); // Ensure that the flag does *NOT* work with a partial wake lock. flags = PowerManager.PARTIAL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP; mService.getBinderServiceInstance().acquireWakeLock(token, flags, tag, packageName, - null /* workSource */, null /* historyTag */); + null /* workSource */, null /* historyTag */, Display.INVALID_DISPLAY); assertThat(mService.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP); mService.getBinderServiceInstance().releaseWakeLock(token, 0 /* flags */); // Verify that flag forces a wakeup when paired to a FULL_WAKE_LOCK flags = PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP; mService.getBinderServiceInstance().acquireWakeLock(token, flags, tag, packageName, - null /* workSource */, null /* historyTag */); + null /* workSource */, null /* historyTag */, Display.INVALID_DISPLAY); assertThat(mService.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE); mService.getBinderServiceInstance().releaseWakeLock(token, 0 /* flags */); } @@ -669,7 +669,7 @@ public class PowerManagerServiceTest { // Create a wakelock mService.getBinderServiceInstance().acquireWakeLock(new Binder(), flags, tag, pkg, - null /* workSource */, null /* historyTag */); + null /* workSource */, null /* historyTag */, Display.INVALID_DISPLAY); assertThat(wakelockMap.get(tag)).isEqualTo(flags); // Verify wakelock is active. // Confirm that the wakelocks have been disabled when the forceSuspend is in flight. @@ -727,7 +727,7 @@ public class PowerManagerServiceTest { // Take a nap and verify we no longer hold the blocker int flags = PowerManager.DOZE_WAKE_LOCK; mService.getBinderServiceInstance().acquireWakeLock(token, flags, tag, packageName, - null /* workSource */, null /* historyTag */); + null /* workSource */, null /* historyTag */, Display.INVALID_DISPLAY); when(mDreamManagerInternalMock.isDreaming()).thenReturn(true); mService.getBinderServiceInstance().goToSleep(mClock.now(), PowerManager.GO_TO_SLEEP_REASON_APPLICATION, 0); @@ -835,13 +835,94 @@ public class PowerManagerServiceTest { mService.getBinderServiceInstance().acquireWakeLock(token, PowerManager.SCREEN_BRIGHT_WAKE_LOCK, tag, pkg, - null /* workSource */, null /* historyTag */); + null /* workSource */, null /* historyTag */, Display.INVALID_DISPLAY); + assertThat(mService.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE); advanceTime(60); assertThat(mService.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP); } @Test + public void testWakeLock_affectsProperDisplayGroup() throws Exception { + final int nonDefaultDisplayGroupId = Display.DEFAULT_DISPLAY_GROUP + 1; + final AtomicReference<DisplayManagerInternal.DisplayGroupListener> listener = + new AtomicReference<>(); + doAnswer((Answer<Void>) invocation -> { + listener.set(invocation.getArgument(0)); + return null; + }).when(mDisplayManagerInternalMock).registerDisplayGroupListener(any()); + final DisplayInfo info = new DisplayInfo(); + info.displayGroupId = Display.DEFAULT_DISPLAY_GROUP; + when(mDisplayManagerInternalMock.getDisplayInfo(Display.DEFAULT_DISPLAY)).thenReturn(info); + + final String pkg = mContextSpy.getOpPackageName(); + final Binder token = new Binder(); + final String tag = "testWakeLock_affectsProperDisplayGroup"; + + setMinimumScreenOffTimeoutConfig(5); + createService(); + startSystem(); + listener.get().onDisplayGroupAdded(nonDefaultDisplayGroupId); + + mService.getBinderServiceInstance().acquireWakeLock(token, + PowerManager.SCREEN_BRIGHT_WAKE_LOCK, tag, pkg, + null /* workSource */, null /* historyTag */, Display.DEFAULT_DISPLAY); + + assertThat(mService.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE); + assertThat(mService.getWakefulnessLocked(Display.DEFAULT_DISPLAY_GROUP)).isEqualTo( + WAKEFULNESS_AWAKE); + assertThat(mService.getWakefulnessLocked(nonDefaultDisplayGroupId)).isEqualTo( + WAKEFULNESS_AWAKE); + + advanceTime(15000); + assertThat(mService.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE); + assertThat(mService.getWakefulnessLocked(Display.DEFAULT_DISPLAY_GROUP)).isEqualTo( + WAKEFULNESS_AWAKE); + assertThat(mService.getWakefulnessLocked(nonDefaultDisplayGroupId)).isEqualTo( + WAKEFULNESS_DOZING); + } + + @Test + public void testInvalidDisplayGroupWakeLock_affectsAllDisplayGroups() throws Exception { + final int nonDefaultDisplayGroupId = Display.DEFAULT_DISPLAY_GROUP + 1; + final AtomicReference<DisplayManagerInternal.DisplayGroupListener> listener = + new AtomicReference<>(); + doAnswer((Answer<Void>) invocation -> { + listener.set(invocation.getArgument(0)); + return null; + }).when(mDisplayManagerInternalMock).registerDisplayGroupListener(any()); + final DisplayInfo info = new DisplayInfo(); + info.displayGroupId = Display.DEFAULT_DISPLAY_GROUP; + when(mDisplayManagerInternalMock.getDisplayInfo(Display.DEFAULT_DISPLAY)).thenReturn(info); + + final String pkg = mContextSpy.getOpPackageName(); + final Binder token = new Binder(); + final String tag = "testInvalidDisplayGroupWakeLock_affectsAllDisplayGroups"; + + setMinimumScreenOffTimeoutConfig(5); + createService(); + startSystem(); + listener.get().onDisplayGroupAdded(nonDefaultDisplayGroupId); + + mService.getBinderServiceInstance().acquireWakeLock(token, + PowerManager.SCREEN_BRIGHT_WAKE_LOCK, tag, pkg, + null /* workSource */, null /* historyTag */, Display.INVALID_DISPLAY); + + assertThat(mService.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE); + assertThat(mService.getWakefulnessLocked(Display.DEFAULT_DISPLAY_GROUP)).isEqualTo( + WAKEFULNESS_AWAKE); + assertThat(mService.getWakefulnessLocked(nonDefaultDisplayGroupId)).isEqualTo( + WAKEFULNESS_AWAKE); + + advanceTime(15000); + assertThat(mService.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE); + assertThat(mService.getWakefulnessLocked(Display.DEFAULT_DISPLAY_GROUP)).isEqualTo( + WAKEFULNESS_AWAKE); + assertThat(mService.getWakefulnessLocked(nonDefaultDisplayGroupId)).isEqualTo( + WAKEFULNESS_AWAKE); + } + + @Test public void testBoot_ShouldBeAwake() throws Exception { createService(); startSystem(); diff --git a/services/tests/servicestests/src/com/android/server/vibrator/DeviceVibrationEffectAdapterTest.java b/services/tests/servicestests/src/com/android/server/vibrator/DeviceVibrationEffectAdapterTest.java index dcff4791a907..c29593f4bd9a 100644 --- a/services/tests/servicestests/src/com/android/server/vibrator/DeviceVibrationEffectAdapterTest.java +++ b/services/tests/servicestests/src/com/android/server/vibrator/DeviceVibrationEffectAdapterTest.java @@ -18,6 +18,7 @@ package com.android.server.vibrator; import static org.junit.Assert.assertEquals; +import android.hardware.vibrator.IVibrator; import android.os.VibrationEffect; import android.os.VibratorInfo; import android.os.vibrator.PrebakedSegment; @@ -30,6 +31,7 @@ import org.junit.Before; import org.junit.Test; import java.util.Arrays; +import java.util.stream.IntStream; /** * Tests for {@link DeviceVibrationEffectAdapter}. @@ -75,6 +77,60 @@ public class DeviceVibrationEffectAdapterTest { } @Test + public void testStepAndRampSegments_withPwleCapability_convertsStepsToRamps() { + VibrationEffect.Composed effect = new VibrationEffect.Composed(Arrays.asList( + new StepSegment(/* amplitude= */ 0, /* frequency= */ 1, /* duration= */ 10), + new StepSegment(/* amplitude= */ 0.5f, /* frequency= */ 0, /* duration= */ 100), + new RampSegment(/* startAmplitude= */ 1, /* endAmplitude= */ 1, + /* startFrequency= */ -4, /* endFrequency= */ 2, /* duration= */ 50), + new RampSegment(/* startAmplitude= */ 0.8f, /* endAmplitude= */ 0.2f, + /* startFrequency= */ 10, /* endFrequency= */ -5, /* duration= */ 20)), + /* repeatIndex= */ 2); + + VibrationEffect.Composed expected = new VibrationEffect.Composed(Arrays.asList( + new RampSegment(/* startAmplitude= */ 0, /* endAmplitude*/ 0, + /* startFrequency= */ 175, /* endFrequency= */ 175, /* duration= */ 10), + new RampSegment(/* startAmplitude= */ 0.5f, /* endAmplitude= */ 0.5f, + /* startFrequency= */ 150, /* endFrequency= */ 150, /* duration= */ 100), + new RampSegment(/* startAmplitude= */ 0.1f, /* endAmplitude= */ 0.8f, + /* startFrequency= */ 50, /* endFrequency= */ 200, /* duration= */ 50), + new RampSegment(/* startAmplitude= */ 0.8f, /* endAmplitude= */ 0.1f, + /* startFrequency= */ 200, /* endFrequency= */ 50, /* duration= */ 20)), + /* repeatIndex= */ 2); + + VibratorInfo info = createVibratorInfo(TEST_FREQUENCY_MAPPING, + IVibrator.CAP_COMPOSE_PWLE_EFFECTS); + assertEquals(expected, mAdapter.apply(effect, info)); + } + + @Test + public void testStepAndRampSegments_withPwleCapabilityAndNoFrequency_keepsOriginalSteps() { + VibrationEffect.Composed effect = new VibrationEffect.Composed(Arrays.asList( + new StepSegment(/* amplitude= */ 0, /* frequency= */ 0, /* duration= */ 10), + new StepSegment(/* amplitude= */ 0.5f, /* frequency= */ 0, /* duration= */ 100), + new PrimitiveSegment(VibrationEffect.Composition.PRIMITIVE_TICK, 1, 10), + new RampSegment(/* startAmplitude= */ 1, /* endAmplitude= */ 1, + /* startFrequency= */ -4, /* endFrequency= */ 2, /* duration= */ 50), + new RampSegment(/* startAmplitude= */ 0.8f, /* endAmplitude= */ 0.2f, + /* startFrequency= */ 10, /* endFrequency= */ -5, /* duration= */ 20)), + /* repeatIndex= */ 2); + + VibrationEffect.Composed expected = new VibrationEffect.Composed(Arrays.asList( + new StepSegment(/* amplitude= */ 0, /* frequency= */ 150, /* duration= */ 10), + new StepSegment(/* amplitude= */ 0.5f, /* frequency= */ 150, /* duration= */ 100), + new PrimitiveSegment(VibrationEffect.Composition.PRIMITIVE_TICK, 1, 10), + new RampSegment(/* startAmplitude= */ 0.1f, /* endAmplitude= */ 0.8f, + /* startFrequency= */ 50, /* endFrequency= */ 200, /* duration= */ 50), + new RampSegment(/* startAmplitude= */ 0.8f, /* endAmplitude= */ 0.1f, + /* startFrequency= */ 200, /* endFrequency= */ 50, /* duration= */ 20)), + /* repeatIndex= */ 2); + + VibratorInfo info = createVibratorInfo(TEST_FREQUENCY_MAPPING, + IVibrator.CAP_COMPOSE_PWLE_EFFECTS); + assertEquals(expected, mAdapter.apply(effect, info)); + } + + @Test public void testStepAndRampSegments_emptyMapping_returnsSameAmplitudesAndFrequencyZero() { VibrationEffect.Composed effect = new VibrationEffect.Composed(Arrays.asList( new StepSegment(/* amplitude= */ 0, /* frequency= */ 1, /* duration= */ 10), @@ -123,8 +179,10 @@ public class DeviceVibrationEffectAdapterTest { assertEquals(expected, mAdapter.apply(effect, createVibratorInfo(TEST_FREQUENCY_MAPPING))); } - private static VibratorInfo createVibratorInfo(VibratorInfo.FrequencyMapping frequencyMapping) { - return new VibratorInfo(/* id= */ 0, /* capabilities= */ 0, null, null, - /* qFactor= */ Float.NaN, frequencyMapping); + private static VibratorInfo createVibratorInfo(VibratorInfo.FrequencyMapping frequencyMapping, + int... capabilities) { + int cap = IntStream.of(capabilities).reduce((a, b) -> a | b).orElse(0); + return new VibratorInfo(/* id= */ 0, cap, null, null, null, /* qFactor= */ Float.NaN, + frequencyMapping); } } diff --git a/services/tests/servicestests/src/com/android/server/vibrator/FakeVibratorControllerProvider.java b/services/tests/servicestests/src/com/android/server/vibrator/FakeVibratorControllerProvider.java index aefd2175d00e..1d715c830fcf 100644 --- a/services/tests/servicestests/src/com/android/server/vibrator/FakeVibratorControllerProvider.java +++ b/services/tests/servicestests/src/com/android/server/vibrator/FakeVibratorControllerProvider.java @@ -23,6 +23,7 @@ import android.os.VibrationEffect; import android.os.VibratorInfo; import android.os.vibrator.PrebakedSegment; import android.os.vibrator.PrimitiveSegment; +import android.os.vibrator.RampSegment; import android.os.vibrator.StepSegment; import android.os.vibrator.VibrationEffectSegment; @@ -43,6 +44,7 @@ final class FakeVibratorControllerProvider { private final Map<Long, PrebakedSegment> mEnabledAlwaysOnEffects = new HashMap<>(); private final List<VibrationEffectSegment> mEffectSegments = new ArrayList<>(); + private final List<Integer> mBraking = new ArrayList<>(); private final List<Float> mAmplitudes = new ArrayList<>(); private final Handler mHandler; private final FakeNativeWrapper mNativeWrapper; @@ -52,9 +54,13 @@ final class FakeVibratorControllerProvider { private int mCapabilities; private int[] mSupportedEffects; + private int[] mSupportedBraking; private int[] mSupportedPrimitives; - private float mResonantFrequency; - private float mQFactor; + private float mMinFrequency = Float.NaN; + private float mResonantFrequency = Float.NaN; + private float mFrequencyResolution = Float.NaN; + private float mQFactor = Float.NaN; + private float[] mMaxAmplitudes; private final class FakeNativeWrapper extends VibratorController.NativeWrapper { public int vibratorId; @@ -117,6 +123,19 @@ final class FakeVibratorControllerProvider { } @Override + public long composePwle(RampSegment[] primitives, int braking, long vibrationId) { + long duration = 0; + for (RampSegment primitive : primitives) { + duration += primitive.getDuration(); + mEffectSegments.add(primitive); + } + mBraking.add(braking); + applyLatency(); + scheduleListener(duration, vibrationId); + return duration; + } + + @Override public void setExternalControl(boolean enabled) { } @@ -132,10 +151,11 @@ final class FakeVibratorControllerProvider { } @Override - public VibratorInfo getInfo() { + public VibratorInfo getInfo(float suggestedFrequencyRange) { VibratorInfo.FrequencyMapping frequencyMapping = new VibratorInfo.FrequencyMapping( - Float.NaN, mResonantFrequency, Float.NaN, Float.NaN, null); - return new VibratorInfo(vibratorId, mCapabilities, mSupportedEffects, + mMinFrequency, mResonantFrequency, mFrequencyResolution, + suggestedFrequencyRange, mMaxAmplitudes); + return new VibratorInfo(vibratorId, mCapabilities, mSupportedEffects, mSupportedBraking, mSupportedPrimitives, mQFactor, frequencyMapping); } @@ -198,6 +218,15 @@ final class FakeVibratorControllerProvider { mSupportedEffects = effects; } + /** Set the effects supported by the fake vibrator hardware. */ + public void setSupportedBraking(int... braking) { + if (braking != null) { + braking = Arrays.copyOf(braking, braking.length); + Arrays.sort(braking); + } + mSupportedBraking = braking; + } + /** Set the primitives supported by the fake vibrator hardware. */ public void setSupportedPrimitives(int... primitives) { if (primitives != null) { @@ -208,8 +237,18 @@ final class FakeVibratorControllerProvider { } /** Set the resonant frequency of the fake vibrator hardware. */ - public void setResonantFrequency(float resonantFrequency) { - mResonantFrequency = resonantFrequency; + public void setResonantFrequency(float frequencyHz) { + mResonantFrequency = frequencyHz; + } + + /** Set the minimum frequency of the fake vibrator hardware. */ + public void setMinFrequency(float frequencyHz) { + mMinFrequency = frequencyHz; + } + + /** Set the frequency resolution of the fake vibrator hardware. */ + public void setFrequencyResolution(float frequencyHz) { + mFrequencyResolution = frequencyHz; } /** Set the Q factor of the fake vibrator hardware. */ @@ -217,6 +256,11 @@ final class FakeVibratorControllerProvider { mQFactor = qFactor; } + /** Set the max amplitude supported for each frequency f the fake vibrator hardware. */ + public void setMaxAmplitudes(float... maxAmplitudes) { + mMaxAmplitudes = maxAmplitudes; + } + /** * Return the amplitudes set by this controller, including zeroes for each time the vibrator was * turned off. @@ -225,6 +269,11 @@ final class FakeVibratorControllerProvider { return new ArrayList<>(mAmplitudes); } + /** Return the braking values passed to the compose PWLE method. */ + public List<Integer> getBraking() { + return mBraking; + } + /** Return list of {@link VibrationEffectSegment} played by this controller, in order. */ public List<VibrationEffectSegment> getEffectSegments() { return new ArrayList<>(mEffectSegments); diff --git a/services/tests/servicestests/src/com/android/server/vibrator/VibrationThreadTest.java b/services/tests/servicestests/src/com/android/server/vibrator/VibrationThreadTest.java index 00ac55d7ad23..c439b9c56e74 100644 --- a/services/tests/servicestests/src/com/android/server/vibrator/VibrationThreadTest.java +++ b/services/tests/servicestests/src/com/android/server/vibrator/VibrationThreadTest.java @@ -31,6 +31,7 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import android.hardware.vibrator.Braking; import android.hardware.vibrator.IVibrator; import android.hardware.vibrator.IVibratorManager; import android.os.CombinedVibrationEffect; @@ -43,6 +44,7 @@ import android.os.VibrationEffect; import android.os.test.TestLooper; import android.os.vibrator.PrebakedSegment; import android.os.vibrator.PrimitiveSegment; +import android.os.vibrator.RampSegment; import android.os.vibrator.StepSegment; import android.os.vibrator.VibrationEffectSegment; import android.platform.test.annotations.LargeTest; @@ -419,6 +421,42 @@ public class VibrationThreadTest { } @Test + public void vibrate_singleVibratorPwle_runsComposePwle() throws Exception { + mVibratorProviders.get(VIBRATOR_ID).setCapabilities(IVibrator.CAP_COMPOSE_PWLE_EFFECTS); + mVibratorProviders.get(VIBRATOR_ID).setSupportedBraking(Braking.CLAB); + mVibratorProviders.get(VIBRATOR_ID).setMinFrequency(100); + mVibratorProviders.get(VIBRATOR_ID).setResonantFrequency(150); + mVibratorProviders.get(VIBRATOR_ID).setFrequencyResolution(50); + mVibratorProviders.get(VIBRATOR_ID).setMaxAmplitudes( + 0.5f /* 100Hz*/, 1 /* 150Hz */, 0.6f /* 200Hz */); + + long vibrationId = 1; + VibrationEffect effect = VibrationEffect.startWaveform() + .addStep(1, 10) + .addRamp(0, 20) + .addStep(0.8f, 1, 30) + .addRamp(0.6f, -1, 40) + .build(); + VibrationThread thread = startThreadAndDispatcher(vibrationId, effect); + waitForCompletion(thread); + + verify(mIBatteryStatsMock).noteVibratorOn(eq(UID), eq(100L)); + verify(mIBatteryStatsMock).noteVibratorOff(eq(UID)); + verify(mControllerCallbacks).onComplete(eq(VIBRATOR_ID), eq(vibrationId)); + verify(mThreadCallbacks).onVibrationEnded(eq(vibrationId), eq(Vibration.Status.FINISHED)); + assertFalse(thread.getVibrators().get(VIBRATOR_ID).isVibrating()); + assertEquals(Arrays.asList( + expectedRamp(/* amplitude= */ 1, /* frequency= */ 150, /* duration= */ 10), + expectedRamp(/* StartAmplitude= */ 1, /* endAmplitude= */ 0, + /* startFrequency= */ 150, /* endFrequency= */ 150, /* duration= */ 20), + expectedRamp(/* amplitude= */ 0.6f, /* frequency= */ 200, /* duration= */ 30), + expectedRamp(/* StartAmplitude= */ 0.6f, /* endAmplitude= */ 0.5f, + /* startFrequency= */ 200, /* endFrequency= */ 100, /* duration= */ 40)), + mVibratorProviders.get(VIBRATOR_ID).getEffectSegments()); + assertEquals(Arrays.asList(Braking.CLAB), mVibratorProviders.get(VIBRATOR_ID).getBraking()); + } + + @Test public void vibrate_singleVibratorCancelled_vibratorStopped() throws Exception { FakeVibratorControllerProvider fakeVibrator = mVibratorProviders.get(VIBRATOR_ID); fakeVibrator.setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL); @@ -969,6 +1007,16 @@ public class VibrationThreadTest { return new PrimitiveSegment(primitiveId, scale, delay); } + private VibrationEffectSegment expectedRamp(float amplitude, float frequency, int duration) { + return expectedRamp(amplitude, amplitude, frequency, frequency, duration); + } + + private VibrationEffectSegment expectedRamp(float startAmplitude, float endAmplitude, + float startFrequency, float endFrequency, int duration) { + return new RampSegment(startAmplitude, endAmplitude, startFrequency, endFrequency, + duration); + } + private List<Float> expectedAmplitudes(int... amplitudes) { return Arrays.stream(amplitudes) .mapToObj(amplitude -> amplitude / 255f) diff --git a/services/tests/servicestests/src/com/android/server/vibrator/VibratorControllerTest.java b/services/tests/servicestests/src/com/android/server/vibrator/VibratorControllerTest.java index dd5da5a6f41a..2e9aad11f16b 100644 --- a/services/tests/servicestests/src/com/android/server/vibrator/VibratorControllerTest.java +++ b/services/tests/servicestests/src/com/android/server/vibrator/VibratorControllerTest.java @@ -21,6 +21,7 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyBoolean; +import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyLong; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.ArgumentMatchers.notNull; @@ -34,6 +35,7 @@ import static org.mockito.Mockito.when; import android.content.ContentResolver; import android.content.ContextWrapper; +import android.hardware.vibrator.Braking; import android.hardware.vibrator.IVibrator; import android.os.IBinder; import android.os.IVibratorStateListener; @@ -226,15 +228,19 @@ public class VibratorControllerTest { } @Test - public void on_withComposedPwle_ignoresEffect() { + public void on_withComposedPwle_performsEffect() { + mockVibratorCapabilities(IVibrator.CAP_COMPOSE_PWLE_EFFECTS); + when(mNativeWrapperMock.composePwle(any(), anyInt(), anyLong())).thenReturn(15L); VibratorController controller = createController(); RampSegment[] primitives = new RampSegment[]{ new RampSegment(/* startAmplitude= */ 0, /* endAmplitude= */ 1, /* startFrequency= */ -1, /* endFrequency= */ 1, /* duration= */ 10) }; - assertEquals(0L, controller.on(primitives, 12)); - assertFalse(controller.isVibrating()); + assertEquals(15L, controller.on(primitives, 12)); + assertTrue(controller.isVibrating()); + + verify(mNativeWrapperMock).composePwle(eq(primitives), eq(Braking.NONE), eq(12L)); } @Test @@ -291,8 +297,8 @@ public class VibratorControllerTest { private void mockVibratorCapabilities(int capabilities) { VibratorInfo.FrequencyMapping frequencyMapping = new VibratorInfo.FrequencyMapping( Float.NaN, Float.NaN, Float.NaN, Float.NaN, null); - when(mNativeWrapperMock.getInfo()).thenReturn( - new VibratorInfo(VIBRATOR_ID, capabilities, null, null, Float.NaN, + when(mNativeWrapperMock.getInfo(/* suggestedFrequencyRange= */ 100)).thenReturn( + new VibratorInfo(VIBRATOR_ID, capabilities, null, null, null, Float.NaN, frequencyMapping)); } diff --git a/services/voiceinteraction/java/com/android/server/voiceinteraction/HotwordDetectionConnection.java b/services/voiceinteraction/java/com/android/server/voiceinteraction/HotwordDetectionConnection.java index 11ccfd88c100..5d541e9cab5d 100644 --- a/services/voiceinteraction/java/com/android/server/voiceinteraction/HotwordDetectionConnection.java +++ b/services/voiceinteraction/java/com/android/server/voiceinteraction/HotwordDetectionConnection.java @@ -16,6 +16,9 @@ package com.android.server.voiceinteraction; +import static android.service.voice.HotwordDetectionService.AUDIO_SOURCE_EXTERNAL; +import static android.service.voice.HotwordDetectionService.AUDIO_SOURCE_MICROPHONE; + import android.annotation.NonNull; import android.annotation.Nullable; import android.content.ComponentName; @@ -24,23 +27,30 @@ import android.content.Intent; import android.hardware.soundtrigger.IRecognitionStatusCallback; import android.hardware.soundtrigger.SoundTrigger; import android.media.AudioAttributes; +import android.media.AudioFormat; +import android.media.AudioManager; import android.media.AudioRecord; import android.media.MediaRecorder; import android.os.ParcelFileDescriptor; import android.os.PersistableBundle; import android.os.RemoteException; import android.os.SharedMemory; +import android.service.voice.HotwordDetectedResult; import android.service.voice.HotwordDetectionService; import android.service.voice.HotwordRejectedResult; import android.service.voice.IDspHotwordDetectionCallback; import android.service.voice.IHotwordDetectionService; +import android.service.voice.IMicrophoneHotwordDetectionVoiceInteractionCallback; import android.util.Pair; import android.util.Slog; +import com.android.internal.annotations.GuardedBy; import com.android.internal.app.IHotwordRecognitionStatusCallback; import com.android.internal.infra.ServiceConnector; +import java.io.Closeable; import java.io.IOException; +import java.io.InputStream; import java.io.OutputStream; import java.io.PrintWriter; import java.util.concurrent.Executor; @@ -63,6 +73,8 @@ final class HotwordDetectionConnection { private static final long VALIDATION_TIMEOUT_MILLIS = 3000; private static final long VOICE_INTERACTION_TIMEOUT_TO_OPEN_MIC_MILLIS = 2000; private static final int MAX_STREAMING_SECONDS = 10; + private static final int MICROPHONE_BUFFER_LENGTH_SECONDS = 8; + private static final int HOTWORD_AUDIO_LENGTH_SECONDS = 3; private final Executor mAudioCopyExecutor = Executors.newCachedThreadPool(); // TODO: This may need to be a Handler(looper) @@ -76,9 +88,12 @@ final class HotwordDetectionConnection { final @NonNull ServiceConnector<IHotwordDetectionService> mRemoteHotwordDetectionService; boolean mBound; + @GuardedBy("mLock") + private ParcelFileDescriptor mCurrentAudioSink; + HotwordDetectionConnection(Object lock, Context context, ComponentName serviceName, int userId, boolean bindInstantServiceAllowed, @Nullable PersistableBundle options, - @Nullable SharedMemory sharedMemory) { + @Nullable SharedMemory sharedMemory, IHotwordRecognitionStatusCallback callback) { mLock = lock; mContext = context; mDetectionComponentName = serviceName; @@ -96,7 +111,7 @@ final class HotwordDetectionConnection { mBound = connected; if (connected) { try { - service.updateState(options, sharedMemory); + service.updateState(options, sharedMemory, callback); } catch (RemoteException e) { // TODO: (b/181842909) Report an error to voice interactor Slog.w(TAG, "Failed to updateState for HotwordDetectionService", e); @@ -131,7 +146,63 @@ final class HotwordDetectionConnection { void updateStateLocked(PersistableBundle options, SharedMemory sharedMemory) { mRemoteHotwordDetectionService.run( - service -> service.updateState(options, sharedMemory)); + service -> service.updateState(options, sharedMemory, null /* callback */)); + } + + void startListeningFromMic( + AudioFormat audioFormat, + IMicrophoneHotwordDetectionVoiceInteractionCallback callback) { + if (DEBUG) { + Slog.d(TAG, "startListeningFromMic"); + } + + AudioRecord audioRecord = createMicAudioRecord(audioFormat); + if (audioRecord == null) { + // TODO: Callback.onError(); + return; + } + + handleSoftwareHotwordDetection( + audioFormat, + AudioReader.createFromAudioRecord(audioRecord), + AUDIO_SOURCE_MICROPHONE, + // TODO: handle bundles better. + new PersistableBundle(), + callback); + } + + public void startListeningFromExternalSource( + ParcelFileDescriptor audioStream, + AudioFormat audioFormat, + @Nullable PersistableBundle options, + IMicrophoneHotwordDetectionVoiceInteractionCallback callback) { + if (DEBUG) { + Slog.d(TAG, "startListeningFromExternalSource"); + } + + ParcelFileDescriptor.AutoCloseInputStream audioReader = + new ParcelFileDescriptor.AutoCloseInputStream(audioStream); + + handleSoftwareHotwordDetection( + audioFormat, + AudioReader.createFromInputStream(audioReader), + AUDIO_SOURCE_EXTERNAL, + options, + callback); + } + + void stopListening() { + if (DEBUG) { + Slog.d(TAG, "stopListening"); + } + + synchronized (mLock) { + if (mCurrentAudioSink != null) { + Slog.i(TAG, "Closing audio stream to hotword detector: stopping requested"); + bestEffortClose(mCurrentAudioSink); + } + mCurrentAudioSink = null; + } } private void detectFromDspSource(SoundTrigger.KeyphraseRecognitionEvent recognitionEvent, @@ -175,7 +246,7 @@ final class HotwordDetectionConnection { Runnable cancellingJob = () -> { record.stop(); - bestEffortCloseFileDescriptor(audioSink); + bestEffortClose(audioSink); // TODO: consider calling externalCallback.onRejected(ERROR_TIMEOUT). }; @@ -186,11 +257,11 @@ final class HotwordDetectionConnection { // TODO: consider making this a non-anonymous class. IDspHotwordDetectionCallback internalCallback = new IDspHotwordDetectionCallback.Stub() { @Override - public void onDetected() throws RemoteException { + public void onDetected(HotwordDetectedResult result) throws RemoteException { if (DEBUG) { Slog.d(TAG, "onDetected"); } - bestEffortCloseFileDescriptor(audioSink); + bestEffortClose(audioSink); cancelingFuture.cancel(true); // Give 2 more seconds for the interactor to start consuming the mic. If it fails to @@ -202,6 +273,7 @@ final class HotwordDetectionConnection { VOICE_INTERACTION_TIMEOUT_TO_OPEN_MIC_MILLIS, TimeUnit.MILLISECONDS); + // TODO: Propagate the HotwordDetectedResult. externalCallback.onKeyphraseDetected(recognitionEvent); } @@ -221,7 +293,7 @@ final class HotwordDetectionConnection { recognitionEvent.getCaptureFormat(), VALIDATION_TIMEOUT_MILLIS, internalCallback)); - bestEffortCloseFileDescriptor(clientRead); + bestEffortClose(clientRead); } static final class SoundTriggerCallback extends IRecognitionStatusCallback.Stub { @@ -283,16 +355,48 @@ final class HotwordDetectionConnection { new AudioAttributes.Builder() .setInternalCapturePreset(MediaRecorder.AudioSource.HOTWORD).build(), recognitionEvent.getCaptureFormat(), - getBufferSizeInBytes(sampleRate, MAX_STREAMING_SECONDS), + getBufferSizeInBytes( + sampleRate, + MAX_STREAMING_SECONDS, + recognitionEvent.getCaptureFormat().getChannelCount()), recognitionEvent.getCaptureSession()); } + @Nullable + private AudioRecord createMicAudioRecord(AudioFormat audioFormat) { + if (DEBUG) { + Slog.i(TAG, "#createAudioRecord"); + } + try { + AudioRecord audioRecord = new AudioRecord( + new AudioAttributes.Builder().setHotwordMode().build(), + audioFormat, + getBufferSizeInBytes( + audioFormat.getSampleRate(), + MICROPHONE_BUFFER_LENGTH_SECONDS, + audioFormat.getChannelCount()), + AudioManager.AUDIO_SESSION_ID_GENERATE); + + if (audioRecord.getState() != AudioRecord.STATE_INITIALIZED) { + Slog.w(TAG, "Failed to initialize AudioRecord"); + audioRecord.release(); + return null; + } + + return audioRecord; + } catch (IllegalArgumentException e) { + Slog.e(TAG, "Failed to create AudioRecord", e); + return null; + } + } + /** * Returns the number of bytes required to store {@code bufferLengthSeconds} of audio sampled at * {@code sampleRate} Hz, using the format returned by DSP audio capture. */ - private static int getBufferSizeInBytes(int sampleRate, int bufferLengthSeconds) { - return BYTES_PER_SAMPLE * sampleRate * bufferLengthSeconds; + private static int getBufferSizeInBytes( + int sampleRate, int bufferLengthSeconds, int intChannelCount) { + return BYTES_PER_SAMPLE * sampleRate * bufferLengthSeconds * intChannelCount; } private static Pair<ParcelFileDescriptor, ParcelFileDescriptor> createPipe() { @@ -307,17 +411,176 @@ final class HotwordDetectionConnection { return Pair.create(fileDescriptors[0], fileDescriptors[1]); } - private static void bestEffortCloseFileDescriptor(ParcelFileDescriptor fd) { + public void dump(String prefix, PrintWriter pw) { + pw.print(prefix); pw.print("mBound="); pw.println(mBound); + } + + private interface AudioReader extends Closeable { + int read(byte[] dest, int offset, int length) throws IOException; + + static AudioReader createFromInputStream(InputStream is) { + return new AudioReader() { + @Override + public int read(byte[] dest, int offset, int length) throws IOException { + return is.read(dest, offset, length); + } + + @Override + public void close() throws IOException { + is.close(); + } + }; + } + + static AudioReader createFromAudioRecord(AudioRecord record) { + record.startRecording(); + + return new AudioReader() { + @Override + public int read(byte[] dest, int offset, int length) throws IOException { + return record.read(dest, offset, length); + } + + @Override + public void close() throws IOException { + record.stop(); + record.release(); + } + }; + } + } + + private void handleSoftwareHotwordDetection( + AudioFormat audioFormat, + AudioReader audioSource, + int audioSourceValue, + @Nullable PersistableBundle options, + IMicrophoneHotwordDetectionVoiceInteractionCallback callback) { + Pair<ParcelFileDescriptor, ParcelFileDescriptor> clientPipe = createPipe(); + + if (clientPipe == null) { + // TODO: Need to propagate as unknown error or something? + return; + } + ParcelFileDescriptor serviceAudioSink = clientPipe.second; + ParcelFileDescriptor serviceAudioSource = clientPipe.first; + + synchronized (mLock) { + mCurrentAudioSink = serviceAudioSink; + } + + mAudioCopyExecutor.execute(() -> { + try (AudioReader source = audioSource; + OutputStream fos = + new ParcelFileDescriptor.AutoCloseOutputStream(serviceAudioSink)) { + byte[] buffer = new byte[1024]; + + while (true) { + int bytesRead = source.read(buffer, 0, 1024); + + if (bytesRead < 0) { + break; + } + + // TODO: First write to ring buffer to make sure we don't lose data if the next + // statement fails. + // ringBuffer.append(buffer, bytesRead); + fos.write(buffer, 0, bytesRead); + } + } catch (IOException e) { + Slog.w(TAG, "Failed supplying audio data to validator", e); + } finally { + synchronized (mLock) { + mCurrentAudioSink = null; + } + } + }); + + // TODO: handle cancellations well + // TODO: what if we cancelled and started a new one? + mRemoteHotwordDetectionService.run( + service -> service.detectFromMicrophoneSource( + serviceAudioSource, + // TODO: consider making a proxy callback + copy of audio format + audioSourceValue, audioFormat, options, + new IDspHotwordDetectionCallback.Stub() { + @Override + public void onRejected(@Nullable HotwordRejectedResult result) + throws RemoteException { + // TODO: Propagate the HotwordRejectedResult. + } + + @Override + public void onDetected(@Nullable HotwordDetectedResult triggerResult) + throws RemoteException { + // Stop + bestEffortClose(serviceAudioSink); + + if (audioSourceValue == AUDIO_SOURCE_EXTERNAL) { + callback.onDetected(triggerResult, null, null); + // TODO: Add a delay before closing. + bestEffortClose(audioSource); + } + + Pair<ParcelFileDescriptor, ParcelFileDescriptor> clientPipe = + createPipe(); + + if (clientPipe == null) { + // Error. + // Need to propagate as unknown error or something? + return; + } + ParcelFileDescriptor callbackAudioSink = clientPipe.second; + ParcelFileDescriptor callbackClientRead = clientPipe.first; + + mAudioCopyExecutor.execute(() -> { + try (AudioReader source = audioSource; + OutputStream fos = + new ParcelFileDescriptor.AutoCloseOutputStream( + callbackAudioSink)) { + + // TODO: get ring buffer suffix here + // fos.write(lastSeveralSeconds); + + byte[] buffer = new byte[1024]; + while (true) { + int bytesRead = source.read(buffer, 0, 1024); + + if (bytesRead < 0) { + break; + } + + fos.write(buffer, 0, bytesRead); + } + } catch (IOException e) { + Slog.w(TAG, "Failed supplying audio data to validator", e); + } finally { + synchronized (mLock) { + mCurrentAudioSink = null; + } + } + }); + + // TODO: noteOp here. + // Remove hotword offset from trigger result + // TODO: consider propagating only capture session. + callback.onDetected(triggerResult, null, callbackClientRead); + // TODO: Add a delay before closing. + bestEffortClose(callbackClientRead); + } + })); + + // TODO: verify this is the right thing to do here. + bestEffortClose(serviceAudioSource); + } + + private static void bestEffortClose(Closeable closeable) { try { - fd.close(); + closeable.close(); } catch (IOException e) { if (DEBUG) { - Slog.w(TAG, "Failed closing file descriptor", e); + Slog.w(TAG, "Failed closing", e); } } } - - public void dump(String prefix, PrintWriter pw) { - pw.print(prefix); pw.print("mBound="); pw.println(mBound); - } }; diff --git a/services/voiceinteraction/java/com/android/server/voiceinteraction/RecognitionServiceInfo.java b/services/voiceinteraction/java/com/android/server/voiceinteraction/RecognitionServiceInfo.java new file mode 100644 index 000000000000..05d4b9305d30 --- /dev/null +++ b/services/voiceinteraction/java/com/android/server/voiceinteraction/RecognitionServiceInfo.java @@ -0,0 +1,148 @@ +/* + * Copyright (C) 2021 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.voiceinteraction; + +import android.annotation.NonNull; +import android.annotation.UserIdInt; +import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; +import android.content.pm.ServiceInfo; +import android.content.res.Resources; +import android.content.res.TypedArray; +import android.content.res.XmlResourceParser; +import android.speech.RecognitionService; +import android.text.TextUtils; +import android.util.AttributeSet; +import android.util.Log; +import android.util.Xml; + +import org.xmlpull.v1.XmlPullParser; +import org.xmlpull.v1.XmlPullParserException; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +// TODO: Move this class somewhere else, along with the default recognizer logic in +// VoiceInteractionManagerService. +// TODO: Use this class in com.android.settings.applications.assist.VoiceInputHelper. + +/** + * {@link ServiceInfo} and parsed metadata for a {@link RecognitionService}. + */ +class RecognitionServiceInfo { + private static final String TAG = "RecognitionServiceInfo"; + + private final String mParseError; + private final ServiceInfo mServiceInfo; + private final boolean mSelectableAsDefault; + + /** + * Queries the valid recognition services available for the user. + */ + static List<RecognitionServiceInfo> getAvailableServices( + @NonNull Context context, @UserIdInt int user) { + List<RecognitionServiceInfo> services = new ArrayList<>(); + + List<ResolveInfo> resolveInfos = + context.getPackageManager().queryIntentServicesAsUser( + new Intent(RecognitionService.SERVICE_INTERFACE), + PackageManager.MATCH_DIRECT_BOOT_AWARE + | PackageManager.MATCH_DIRECT_BOOT_UNAWARE, + user); + for (ResolveInfo resolveInfo : resolveInfos) { + RecognitionServiceInfo service = + parseInfo(context.getPackageManager(), resolveInfo.serviceInfo); + if (!TextUtils.isEmpty(service.mParseError)) { + Log.w(TAG, "Parse error in getAvailableServices: " + service.mParseError); + // We still use the recognizer to preserve pre-existing behavior. + } + services.add(service); + } + return services; + } + + /** + * Loads the service metadata published by the component. Success is indicated by {@link + * #getParseError()}. + * + * @param pm A PackageManager from which the XML can be loaded; usually the + * PackageManager from which {@code si} was originally retrieved. + * @param si The {@link android.speech.RecognitionService} info. + */ + static RecognitionServiceInfo parseInfo(@NonNull PackageManager pm, @NonNull ServiceInfo si) { + String parseError = ""; + boolean selectableAsDefault = true; // default + try (XmlResourceParser parser = si.loadXmlMetaData( + pm, + RecognitionService.SERVICE_META_DATA)) { + if (parser == null) { + parseError = "No " + RecognitionService.SERVICE_META_DATA + + " meta-data for " + si.packageName; + return new RecognitionServiceInfo(si, selectableAsDefault, parseError); + } + Resources res = pm.getResourcesForApplication(si.applicationInfo); + AttributeSet attrs = Xml.asAttributeSet(parser); + + int type = 0; + while (type != XmlPullParser.END_DOCUMENT && type != XmlPullParser.START_TAG) { + type = parser.next(); + } + + String nodeName = parser.getName(); + if (!"recognition-service".equals(nodeName)) { + throw new XmlPullParserException( + "Meta-data does not start with recognition-service tag"); + } + + TypedArray values = + res.obtainAttributes( + attrs, com.android.internal.R.styleable.RecognitionService); + selectableAsDefault = + values.getBoolean( + com.android.internal.R.styleable.RecognitionService_selectableAsDefault, + selectableAsDefault); + values.recycle(); + } catch (XmlPullParserException | IOException | PackageManager.NameNotFoundException e) { + parseError = "Error parsing recognition service meta-data: " + e; + } + return new RecognitionServiceInfo(si, selectableAsDefault, parseError); + } + + private RecognitionServiceInfo( + @NonNull ServiceInfo si, boolean selectableAsDefault, @NonNull String parseError) { + mServiceInfo = si; + mSelectableAsDefault = selectableAsDefault; + mParseError = parseError; + } + + @NonNull + public String getParseError() { + return mParseError; + } + + @NonNull + public ServiceInfo getServiceInfo() { + return mServiceInfo; + } + + public boolean isSelectableAsDefault() { + return mSelectableAsDefault; + } +} diff --git a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java index c110b231bd0e..ccaeaf991467 100644 --- a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java +++ b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java @@ -48,6 +48,7 @@ import android.hardware.soundtrigger.SoundTrigger.KeyphraseSoundModel; import android.hardware.soundtrigger.SoundTrigger.ModelParamRange; import android.hardware.soundtrigger.SoundTrigger.ModuleProperties; import android.hardware.soundtrigger.SoundTrigger.RecognitionConfig; +import android.media.AudioFormat; import android.media.permission.Identity; import android.media.permission.PermissionUtil; import android.media.permission.SafeCloseable; @@ -56,6 +57,7 @@ import android.os.Bundle; import android.os.Handler; import android.os.IBinder; import android.os.Parcel; +import android.os.ParcelFileDescriptor; import android.os.PersistableBundle; import android.os.RemoteCallback; import android.os.RemoteCallbackList; @@ -66,12 +68,12 @@ import android.os.ShellCallback; import android.os.Trace; import android.os.UserHandle; import android.provider.Settings; +import android.service.voice.IMicrophoneHotwordDetectionVoiceInteractionCallback; import android.service.voice.IVoiceInteractionSession; import android.service.voice.VoiceInteractionManagerInternal; import android.service.voice.VoiceInteractionService; import android.service.voice.VoiceInteractionServiceInfo; import android.service.voice.VoiceInteractionSession; -import android.speech.RecognitionService; import android.text.TextUtils; import android.util.ArrayMap; import android.util.ArraySet; @@ -103,6 +105,7 @@ import com.android.server.wm.ActivityTaskManagerInternal; import java.io.FileDescriptor; import java.io.PrintWriter; import java.lang.ref.WeakReference; +import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import java.util.ListIterator; @@ -404,9 +407,30 @@ public class VoiceInteractionManagerService extends SystemService { ComponentName curInteractor = !TextUtils.isEmpty(curInteractorStr) ? ComponentName.unflattenFromString(curInteractorStr) : null; try { - recognizerInfo = pm.getServiceInfo(curRecognizer, + recognizerInfo = pm.getServiceInfo( + curRecognizer, PackageManager.MATCH_DIRECT_BOOT_AWARE - | PackageManager.MATCH_DIRECT_BOOT_UNAWARE, userHandle); + | PackageManager.MATCH_DIRECT_BOOT_UNAWARE + | PackageManager.GET_META_DATA, + userHandle); + if (recognizerInfo != null) { + RecognitionServiceInfo rsi = + RecognitionServiceInfo.parseInfo( + mContext.getPackageManager(), recognizerInfo); + if (!TextUtils.isEmpty(rsi.getParseError())) { + Log.w(TAG, "Parse error in getAvailableServices: " + + rsi.getParseError()); + // We still use the recognizer to preserve pre-existing behavior. + } + if (!rsi.isSelectableAsDefault()) { + if (DEBUG) { + Slog.d(TAG, "Found non selectableAsDefault recognizer as" + + " default. Unsetting the default and looking for another" + + " one."); + } + recognizerInfo = null; + } + } if (curInteractor != null) { interactorInfo = pm.getServiceInfo(curInteractor, PackageManager.MATCH_DIRECT_BOOT_AWARE @@ -650,19 +674,23 @@ public class VoiceInteractionManagerService extends SystemService { prefPackage = getDefaultRecognizer(); } - List<ResolveInfo> available = - mContext.getPackageManager().queryIntentServicesAsUser( - new Intent(RecognitionService.SERVICE_INTERFACE), - PackageManager.MATCH_DIRECT_BOOT_AWARE - | PackageManager.MATCH_DIRECT_BOOT_UNAWARE, userHandle); - int numAvailable = available.size(); - if (numAvailable == 0) { + List<RecognitionServiceInfo> available = + RecognitionServiceInfo.getAvailableServices(mContext, userHandle); + if (available.size() == 0) { Slog.w(TAG, "no available voice recognition services found for user " + userHandle); return null; } else { + List<RecognitionServiceInfo> nonSelectableAsDefault = + removeNonSelectableAsDefault(available); + if (available.size() == 0) { + Slog.w(TAG, "No selectableAsDefault recognition services found for user " + + userHandle + ". Falling back to non selectableAsDefault ones."); + available = nonSelectableAsDefault; + } + int numAvailable = available.size(); if (prefPackage != null) { - for (int i=0; i<numAvailable; i++) { - ServiceInfo serviceInfo = available.get(i).serviceInfo; + for (int i = 0; i < numAvailable; i++) { + ServiceInfo serviceInfo = available.get(i).getServiceInfo(); if (prefPackage.equals(serviceInfo.packageName)) { return new ComponentName(serviceInfo.packageName, serviceInfo.name); } @@ -672,11 +700,22 @@ public class VoiceInteractionManagerService extends SystemService { Slog.w(TAG, "more than one voice recognition service found, picking first"); } - ServiceInfo serviceInfo = available.get(0).serviceInfo; + ServiceInfo serviceInfo = available.get(0).getServiceInfo(); return new ComponentName(serviceInfo.packageName, serviceInfo.name); } } + private List<RecognitionServiceInfo> removeNonSelectableAsDefault( + List<RecognitionServiceInfo> services) { + List<RecognitionServiceInfo> nonSelectableAsDefault = new ArrayList<>(); + for (int i = services.size() - 1; i >= 0; i--) { + if (!services.get(i).isSelectableAsDefault()) { + nonSelectableAsDefault.add(services.remove(i)); + } + } + return nonSelectableAsDefault; + } + @Nullable public String getDefaultRecognizer() { String recognizer = mContext.getString(R.string.config_systemSpeechRecognizer); @@ -983,9 +1022,11 @@ public class VoiceInteractionManagerService extends SystemService { } } + //----------------- Hotword Detection/Validation APIs --------------------------------// + @Override public void updateState(@Nullable PersistableBundle options, - @Nullable SharedMemory sharedMemory) { + @Nullable SharedMemory sharedMemory, IHotwordRecognitionStatusCallback callback) { enforceCallingPermission(Manifest.permission.MANAGE_HOTWORD_DETECTION); synchronized (this) { enforceIsCurrentVoiceInteractionService(); @@ -996,7 +1037,7 @@ public class VoiceInteractionManagerService extends SystemService { } final long caller = Binder.clearCallingIdentity(); try { - mImpl.updateStateLocked(options, sharedMemory); + mImpl.updateStateLocked(options, sharedMemory, callback); } finally { Binder.restoreCallingIdentity(caller); } @@ -1023,6 +1064,72 @@ public class VoiceInteractionManagerService extends SystemService { } } + @Override + public void startListeningFromMic( + AudioFormat audioFormat, + IMicrophoneHotwordDetectionVoiceInteractionCallback callback) + throws RemoteException { + enforceCallingPermission(Manifest.permission.RECORD_AUDIO); + enforceCallingPermission(Manifest.permission.CAPTURE_AUDIO_HOTWORD); + synchronized (this) { + enforceIsCurrentVoiceInteractionService(); + + if (mImpl == null) { + Slog.w(TAG, "startListeningFromMic without running voice interaction service"); + return; + } + final long caller = Binder.clearCallingIdentity(); + try { + mImpl.startListeningFromMicLocked(audioFormat, callback); + } finally { + Binder.restoreCallingIdentity(caller); + } + } + } + + @Override + public void startListeningFromExternalSource( + ParcelFileDescriptor audioStream, + AudioFormat audioFormat, + PersistableBundle options, + IMicrophoneHotwordDetectionVoiceInteractionCallback callback) + throws RemoteException { + synchronized (this) { + enforceIsCurrentVoiceInteractionService(); + + if (mImpl == null) { + Slog.w(TAG, "startListeningFromExternalSource without running voice" + + " interaction service"); + return; + } + final long caller = Binder.clearCallingIdentity(); + try { + mImpl.startListeningFromExternalSourceLocked( + audioStream, audioFormat, options, callback); + } finally { + Binder.restoreCallingIdentity(caller); + } + } + } + + @Override + public void stopListeningFromMic() throws RemoteException { + synchronized (this) { + enforceIsCurrentVoiceInteractionService(); + + if (mImpl == null) { + Slog.w(TAG, "stopListeningFromMic without running voice interaction service"); + return; + } + final long caller = Binder.clearCallingIdentity(); + try { + mImpl.stopListeningFromMicLocked(); + } finally { + Binder.restoreCallingIdentity(caller); + } + } + } + //----------------- Model management APIs --------------------------------// @Override diff --git a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl.java b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl.java index 0742cb4c0c84..6922ccc03d0b 100644 --- a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl.java +++ b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl.java @@ -40,15 +40,18 @@ import android.content.pm.IPackageManager; import android.content.pm.PackageManager; import android.content.pm.ServiceInfo; import android.hardware.soundtrigger.IRecognitionStatusCallback; +import android.media.AudioFormat; import android.os.Bundle; import android.os.Handler; import android.os.IBinder; +import android.os.ParcelFileDescriptor; import android.os.PersistableBundle; import android.os.RemoteCallback; import android.os.RemoteException; import android.os.ServiceManager; import android.os.SharedMemory; import android.os.UserHandle; +import android.service.voice.IMicrophoneHotwordDetectionVoiceInteractionCallback; import android.service.voice.IVoiceInteractionService; import android.service.voice.IVoiceInteractionSession; import android.service.voice.VoiceInteractionService; @@ -402,7 +405,7 @@ class VoiceInteractionManagerServiceImpl implements VoiceInteractionSessionConne } public void updateStateLocked(@Nullable PersistableBundle options, - @Nullable SharedMemory sharedMemory) { + @Nullable SharedMemory sharedMemory, IHotwordRecognitionStatusCallback callback) { if (DEBUG) { Slog.d(TAG, "updateStateLocked"); } @@ -424,7 +427,7 @@ class VoiceInteractionManagerServiceImpl implements VoiceInteractionSessionConne if (mHotwordDetectionConnection == null) { mHotwordDetectionConnection = new HotwordDetectionConnection(mServiceStub, mContext, mHotwordDetectionComponentName, mUser, /* bindInstantServiceAllowed= */ false, - options, sharedMemory); + options, sharedMemory, callback); } else { mHotwordDetectionConnection.updateStateLocked(options, sharedMemory); } @@ -444,6 +447,52 @@ class VoiceInteractionManagerServiceImpl implements VoiceInteractionSessionConne mHotwordDetectionConnection = null; } + public void startListeningFromMicLocked( + AudioFormat audioFormat, + IMicrophoneHotwordDetectionVoiceInteractionCallback callback) { + if (DEBUG) { + Slog.d(TAG, "startListeningFromMic"); + } + + if (mHotwordDetectionConnection == null) { + // TODO: callback.onError(); + return; + } + + mHotwordDetectionConnection.startListeningFromMic(audioFormat, callback); + } + + public void startListeningFromExternalSourceLocked( + ParcelFileDescriptor audioStream, + AudioFormat audioFormat, + @Nullable PersistableBundle options, + IMicrophoneHotwordDetectionVoiceInteractionCallback callback) { + if (DEBUG) { + Slog.d(TAG, "startListeningFromExternalSource"); + } + + if (mHotwordDetectionConnection == null) { + // TODO: callback.onError(); + return; + } + + mHotwordDetectionConnection + .startListeningFromExternalSource(audioStream, audioFormat, options, callback); + } + + public void stopListeningFromMicLocked() { + if (DEBUG) { + Slog.d(TAG, "stopListeningFromMic"); + } + + if (mHotwordDetectionConnection == null) { + Slog.w(TAG, "stopListeningFromMic() called but connection isn't established"); + return; + } + + mHotwordDetectionConnection.stopListening(); + } + public IRecognitionStatusCallback createSoundTriggerCallbackLocked( IHotwordRecognitionStatusCallback callback) { if (DEBUG) { diff --git a/telephony/java/android/telephony/data/ApnSetting.java b/telephony/java/android/telephony/data/ApnSetting.java index b503733f8de9..08f56132121e 100644 --- a/telephony/java/android/telephony/data/ApnSetting.java +++ b/telephony/java/android/telephony/data/ApnSetting.java @@ -114,11 +114,15 @@ public class ApnSetting implements Parcelable { public static final int TYPE_MCX = ApnTypes.MCX; /** APN type for XCAP. */ public static final int TYPE_XCAP = ApnTypes.XCAP; + /** APN type for VSIM. */ + public static final int TYPE_VSIM = 1 << 12; // TODO: Refer to ApnTypes.VSIM + /** APN type for BIP. */ + public static final int TYPE_BIP = 1 << 13; // TODO: Refer to ApnTypes.BIP /** * APN type for ENTERPRISE. * @hide */ - public static final int TYPE_ENTERPRISE = TYPE_XCAP << 1; + public static final int TYPE_ENTERPRISE = TYPE_BIP << 1; /** @hide */ @IntDef(flag = true, prefix = {"TYPE_"}, value = { @@ -134,6 +138,8 @@ public class ApnSetting implements Parcelable { TYPE_EMERGENCY, TYPE_MCX, TYPE_XCAP, + TYPE_BIP, + TYPE_VSIM, TYPE_ENTERPRISE, }) @Retention(RetentionPolicy.SOURCE) @@ -174,6 +180,8 @@ public class ApnSetting implements Parcelable { TYPE_MMS_STRING, TYPE_SUPL_STRING, TYPE_XCAP_STRING, + TYPE_VSIM_STRING, + TYPE_BIP_STRING, TYPE_ENTERPRISE_STRING, }, prefix = "TYPE_", suffix = "_STRING") @Retention(RetentionPolicy.SOURCE) @@ -315,8 +323,33 @@ public class ApnSetting implements Parcelable { @SystemApi public static final String TYPE_XCAP_STRING = "xcap"; + + + /** + * APN type for Virtual SIM service. + * + * Note: String representations of APN types are intended for system apps to communicate with + * modem components or carriers. Non-system apps should use the integer variants instead. + * @hide + */ + @SystemApi + public static final String TYPE_VSIM_STRING = "vsim"; + + /** + * APN type for Bearer Independent Protocol. + * + * Note: String representations of APN types are intended for system apps to communicate with + * modem components or carriers. Non-system apps should use the integer variants instead. + * @hide + */ + @SystemApi + public static final String TYPE_BIP_STRING = "bip"; + /** * APN type for ENTERPRISE traffic. + * + * Note: String representations of APN types are intended for system apps to communicate with + * modem components or carriers. Non-system apps should use the integer variants instead. * @hide */ public static final String TYPE_ENTERPRISE_STRING = "enterprise"; @@ -401,6 +434,8 @@ public class ApnSetting implements Parcelable { APN_TYPE_STRING_MAP.put(TYPE_MCX_STRING, TYPE_MCX); APN_TYPE_STRING_MAP.put(TYPE_XCAP_STRING, TYPE_XCAP); APN_TYPE_STRING_MAP.put(TYPE_ENTERPRISE_STRING, TYPE_ENTERPRISE); + APN_TYPE_STRING_MAP.put(TYPE_VSIM_STRING, TYPE_VSIM); + APN_TYPE_STRING_MAP.put(TYPE_BIP_STRING, TYPE_BIP); APN_TYPE_INT_MAP = new ArrayMap<>(); APN_TYPE_INT_MAP.put(TYPE_DEFAULT, TYPE_DEFAULT_STRING); @@ -416,6 +451,8 @@ public class ApnSetting implements Parcelable { APN_TYPE_INT_MAP.put(TYPE_MCX, TYPE_MCX_STRING); APN_TYPE_INT_MAP.put(TYPE_XCAP, TYPE_XCAP_STRING); APN_TYPE_INT_MAP.put(TYPE_ENTERPRISE, TYPE_ENTERPRISE_STRING); + APN_TYPE_INT_MAP.put(TYPE_VSIM, TYPE_VSIM_STRING); + APN_TYPE_INT_MAP.put(TYPE_BIP, TYPE_BIP_STRING); PROTOCOL_STRING_MAP = new ArrayMap<>(); PROTOCOL_STRING_MAP.put("IP", PROTOCOL_IP); @@ -2194,7 +2231,7 @@ public class ApnSetting implements Parcelable { public ApnSetting build() { if ((mApnTypeBitmask & (TYPE_DEFAULT | TYPE_MMS | TYPE_SUPL | TYPE_DUN | TYPE_HIPRI | TYPE_FOTA | TYPE_IMS | TYPE_CBS | TYPE_IA | TYPE_EMERGENCY | TYPE_MCX - | TYPE_XCAP | TYPE_ENTERPRISE)) == 0 + | TYPE_XCAP | TYPE_VSIM | TYPE_BIP | TYPE_ENTERPRISE)) == 0 || TextUtils.isEmpty(mApnName) || TextUtils.isEmpty(mEntryName)) { return null; } diff --git a/tests/net/common/java/android/net/NetworkProviderTest.kt b/tests/net/common/java/android/net/NetworkProviderTest.kt index 340e6f963137..7424157bea74 100644 --- a/tests/net/common/java/android/net/NetworkProviderTest.kt +++ b/tests/net/common/java/android/net/NetworkProviderTest.kt @@ -198,4 +198,4 @@ class NetworkProviderTest { cb.expectCallback<OnUnavailable>() { nr.getNetworkSpecifier() == specifier } mCm.unregisterNetworkProvider(provider) } -}
\ No newline at end of file +} diff --git a/tests/net/integration/util/com/android/server/NetworkAgentWrapper.java b/tests/net/integration/util/com/android/server/NetworkAgentWrapper.java index e2d43cbb8efd..6245e8542b04 100644 --- a/tests/net/integration/util/com/android/server/NetworkAgentWrapper.java +++ b/tests/net/integration/util/com/android/server/NetworkAgentWrapper.java @@ -41,6 +41,7 @@ import android.net.NetworkAgent; import android.net.NetworkAgentConfig; import android.net.NetworkCapabilities; import android.net.NetworkProvider; +import android.net.NetworkScore; import android.net.NetworkSpecifier; import android.net.QosFilter; import android.net.SocketKeepalive; @@ -199,6 +200,11 @@ public class NetworkAgentWrapper implements TestableNetworkCallback.HasNetwork { } } + public void setScore(@NonNull final NetworkScore score) { + mScore = score.getLegacyInt(); + mNetworkAgent.sendNetworkScore(score); + } + public void adjustScore(int change) { mScore += change; mNetworkAgent.sendNetworkScore(mScore); diff --git a/tests/net/java/android/net/ConnectivityManagerTest.java b/tests/net/java/android/net/ConnectivityManagerTest.java index 36f205b72a62..6cbdd258c00a 100644 --- a/tests/net/java/android/net/ConnectivityManagerTest.java +++ b/tests/net/java/android/net/ConnectivityManagerTest.java @@ -41,10 +41,10 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; +import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.ArgumentMatchers.nullable; import static org.mockito.Mockito.any; -import static org.mockito.Mockito.anyBoolean; import static org.mockito.Mockito.anyInt; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; diff --git a/tests/net/java/com/android/server/ConnectivityServiceTest.java b/tests/net/java/com/android/server/ConnectivityServiceTest.java index 44298d4b7652..e6ff5d8b93c7 100644 --- a/tests/net/java/com/android/server/ConnectivityServiceTest.java +++ b/tests/net/java/com/android/server/ConnectivityServiceTest.java @@ -94,6 +94,7 @@ import static android.net.NetworkCapabilities.TRANSPORT_ETHERNET; import static android.net.NetworkCapabilities.TRANSPORT_VPN; import static android.net.NetworkCapabilities.TRANSPORT_WIFI; import static android.net.NetworkCapabilities.TRANSPORT_WIFI_AWARE; +import static android.net.NetworkScore.KEEP_CONNECTED_FOR_HANDOVER; import static android.net.OemNetworkPreferences.OEM_NETWORK_PREFERENCE_OEM_PAID; import static android.net.OemNetworkPreferences.OEM_NETWORK_PREFERENCE_OEM_PAID_NO_FALLBACK; import static android.net.OemNetworkPreferences.OEM_NETWORK_PREFERENCE_OEM_PAID_ONLY; @@ -977,8 +978,6 @@ public class ConnectivityServiceTest { * operations have been processed and test for them. */ private static class MockNetworkFactory extends NetworkFactory { - private final ConditionVariable mNetworkStartedCV = new ConditionVariable(); - private final ConditionVariable mNetworkStoppedCV = new ConditionVariable(); private final AtomicBoolean mNetworkStarted = new AtomicBoolean(false); static class RequestEntry { @@ -990,11 +989,8 @@ public class ConnectivityServiceTest { } static final class Add extends RequestEntry { - public final int factorySerialNumber; - - Add(@NonNull final NetworkRequest request, final int factorySerialNumber) { + Add(@NonNull final NetworkRequest request) { super(request); - this.factorySerialNumber = factorySerialNumber; } } @@ -1003,6 +999,11 @@ public class ConnectivityServiceTest { super(request); } } + + @Override + public String toString() { + return "RequestEntry [ " + getClass().getName() + " : " + request + " ]"; + } } // History of received requests adds and removes. @@ -1014,7 +1015,6 @@ public class ConnectivityServiceTest { return obj; } - public RequestEntry.Add expectRequestAdd() { return failIfNull((RequestEntry.Add) mRequestHistory.poll(TIMEOUT_MS, it -> it instanceof RequestEntry.Add), "Expected request add"); @@ -1054,40 +1054,28 @@ public class ConnectivityServiceTest { protected void startNetwork() { mNetworkStarted.set(true); - mNetworkStartedCV.open(); } protected void stopNetwork() { mNetworkStarted.set(false); - mNetworkStoppedCV.open(); } public boolean getMyStartRequested() { return mNetworkStarted.get(); } - public ConditionVariable getNetworkStartedCV() { - mNetworkStartedCV.close(); - return mNetworkStartedCV; - } - - public ConditionVariable getNetworkStoppedCV() { - mNetworkStoppedCV.close(); - return mNetworkStoppedCV; - } @Override - protected void handleAddRequest(NetworkRequest request, int score, - int factorySerialNumber) { + protected void needNetworkFor(NetworkRequest request) { mNetworkRequests.put(request.requestId, request); - super.handleAddRequest(request, score, factorySerialNumber); - mRequestHistory.add(new RequestEntry.Add(request, factorySerialNumber)); + super.needNetworkFor(request); + mRequestHistory.add(new RequestEntry.Add(request)); } @Override - protected void handleRemoveRequest(NetworkRequest request) { + protected void releaseNetworkFor(NetworkRequest request) { mNetworkRequests.remove(request.requestId); - super.handleRemoveRequest(request); + super.releaseNetworkFor(request); mRequestHistory.add(new RequestEntry.Remove(request)); } @@ -2919,25 +2907,23 @@ public class ConnectivityServiceTest { handlerThread.start(); final MockNetworkFactory testFactory = new MockNetworkFactory(handlerThread.getLooper(), mServiceContext, "testFactory", filter, mCsHandlerThread); - testFactory.setScoreFilter(40); - ConditionVariable cv = testFactory.getNetworkStartedCV(); + testFactory.setScoreFilter(45); testFactory.register(); - testFactory.expectRequestAdd(); - testFactory.assertRequestCountEquals(1); - int expectedRequestCount = 1; - NetworkCallback networkCallback = null; - // For non-INTERNET capabilities we cannot rely on the default request being present, so - // add one. + + final NetworkCallback networkCallback; if (capability != NET_CAPABILITY_INTERNET) { + // If the capability passed in argument is part of the default request, then the + // factory will see the default request. Otherwise the filter will prevent the + // factory from seeing it. In that case, add a request so it can be tested. assertFalse(testFactory.getMyStartRequested()); NetworkRequest request = new NetworkRequest.Builder().addCapability(capability).build(); networkCallback = new NetworkCallback(); mCm.requestNetwork(request, networkCallback); - expectedRequestCount++; - testFactory.expectRequestAdd(); + } else { + networkCallback = null; } - waitFor(cv); - testFactory.assertRequestCountEquals(expectedRequestCount); + testFactory.expectRequestAdd(); + testFactory.assertRequestCountEquals(1); assertTrue(testFactory.getMyStartRequested()); // Now bring in a higher scored network. @@ -2946,20 +2932,45 @@ public class ConnectivityServiceTest { // own NetworkRequest during startup, just bump up the score to cancel out the // unvalidated penalty. testAgent.adjustScore(40); - cv = testFactory.getNetworkStoppedCV(); - // When testAgent connects, ConnectivityService will re-send us all current requests with - // the new score. There are expectedRequestCount such requests, and we must wait for all of - // them. + // When testAgent connects, because of its 50 score (50 for cell + 40 adjustment score + // - 40 penalty for not being validated), it will beat the testFactory's offer, so + // the request will be removed. testAgent.connect(false); testAgent.addCapability(capability); - waitFor(cv); - testFactory.expectRequestAdds(expectedRequestCount); - testFactory.assertRequestCountEquals(expectedRequestCount); + testFactory.expectRequestRemove(); + testFactory.assertRequestCountEquals(0); assertFalse(testFactory.getMyStartRequested()); + // Add a request and make sure it's not sent to the factory, because the agent + // is satisfying it better. + final NetworkCallback cb = new ConnectivityManager.NetworkCallback(); + mCm.requestNetwork(new NetworkRequest.Builder().addCapability(capability).build(), cb); + expectNoRequestChanged(testFactory); + testFactory.assertRequestCountEquals(0); + assertFalse(testFactory.getMyStartRequested()); + + // Make the test agent weak enough to have the exact same score as the + // factory (50 for cell + 40 adjustment -40 validation penalty - 5 adjustment). Make sure + // the factory doesn't see the request. + testAgent.adjustScore(-5); + expectNoRequestChanged(testFactory); + assertFalse(testFactory.getMyStartRequested()); + + // Make the test agent weak enough to see the two requests (the one that was just sent, + // and either the default one or the one sent at the top of this test if the default + // won't be seen). + testAgent.adjustScore(-45); + testFactory.expectRequestAdds(2); + testFactory.assertRequestCountEquals(2); + assertTrue(testFactory.getMyStartRequested()); + + // Now unregister and make sure the request is removed. + mCm.unregisterNetworkCallback(cb); + testFactory.expectRequestRemove(); + // Bring in a bunch of requests. - assertEquals(expectedRequestCount, testFactory.getMyRequestCount()); + assertEquals(1, testFactory.getMyRequestCount()); ConnectivityManager.NetworkCallback[] networkCallbacks = new ConnectivityManager.NetworkCallback[10]; for (int i = 0; i< networkCallbacks.length; i++) { @@ -2969,24 +2980,28 @@ public class ConnectivityServiceTest { mCm.requestNetwork(builder.build(), networkCallbacks[i]); } testFactory.expectRequestAdds(10); - testFactory.assertRequestCountEquals(10 + expectedRequestCount); - assertFalse(testFactory.getMyStartRequested()); + testFactory.assertRequestCountEquals(11); // +1 for the default/test specific request + assertTrue(testFactory.getMyStartRequested()); // Remove the requests. for (int i = 0; i < networkCallbacks.length; i++) { mCm.unregisterNetworkCallback(networkCallbacks[i]); } testFactory.expectRequestRemoves(10); - testFactory.assertRequestCountEquals(expectedRequestCount); + testFactory.assertRequestCountEquals(1); + assertTrue(testFactory.getMyStartRequested()); + + // Adjust the agent score up again. Expect the request to be withdrawn. + testAgent.adjustScore(50); + testFactory.expectRequestRemove(); + testFactory.assertRequestCountEquals(0); assertFalse(testFactory.getMyStartRequested()); // Drop the higher scored network. - cv = testFactory.getNetworkStartedCV(); testAgent.disconnect(); - waitFor(cv); - testFactory.expectRequestAdds(expectedRequestCount); - testFactory.assertRequestCountEquals(expectedRequestCount); - assertEquals(expectedRequestCount, testFactory.getMyRequestCount()); + testFactory.expectRequestAdd(); + testFactory.assertRequestCountEquals(1); + assertEquals(1, testFactory.getMyRequestCount()); assertTrue(testFactory.getMyStartRequested()); testFactory.terminate(); @@ -3016,9 +3031,34 @@ public class ConnectivityServiceTest { } @Test + public void testRegisterIgnoringScore() throws Exception { + mWiFiNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_WIFI); + mWiFiNetworkAgent.adjustScore(30); // score = 60 (wifi) + 30 = 90 + mWiFiNetworkAgent.connect(true /* validated */); + + // Make sure the factory sees the default network + final NetworkCapabilities filter = new NetworkCapabilities(); + filter.addCapability(NET_CAPABILITY_INTERNET); + filter.addCapability(NET_CAPABILITY_NOT_VCN_MANAGED); + final HandlerThread handlerThread = new HandlerThread("testNetworkFactoryRequests"); + handlerThread.start(); + final MockNetworkFactory testFactory = new MockNetworkFactory(handlerThread.getLooper(), + mServiceContext, "testFactory", filter, mCsHandlerThread); + testFactory.registerIgnoringScore(); + testFactory.expectRequestAdd(); + + mWiFiNetworkAgent.adjustScore(20); // exceed the maximum score + expectNoRequestChanged(testFactory); // still seeing the request + + mWiFiNetworkAgent.disconnect(); + } + + @Test public void testNetworkFactoryUnregister() throws Exception { + // Make sure the factory sees the default network final NetworkCapabilities filter = new NetworkCapabilities(); - filter.clearAll(); + filter.addCapability(NET_CAPABILITY_INTERNET); + filter.addCapability(NET_CAPABILITY_NOT_VCN_MANAGED); final HandlerThread handlerThread = new HandlerThread("testNetworkFactoryRequests"); handlerThread.start(); @@ -4282,6 +4322,7 @@ public class ConnectivityServiceTest { testFactory.register(); try { + // Expect the factory to receive the default network request. testFactory.expectRequestAdd(); testFactory.assertRequestCountEquals(1); assertTrue(testFactory.getMyStartRequested()); @@ -4290,25 +4331,44 @@ public class ConnectivityServiceTest { mWiFiNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_WIFI); // Score 60 - 40 penalty for not validated yet, then 60 when it validates mWiFiNetworkAgent.connect(true); - // Default request and mobile always on request - testFactory.expectRequestAdds(2); + // The network connects with a low score, so the offer can still beat it and + // nothing happens. Then the network validates, and the offer with its filter score + // of 40 can no longer beat it and the request is removed. + testFactory.expectRequestRemove(); + testFactory.assertRequestCountEquals(0); + assertFalse(testFactory.getMyStartRequested()); - // Turn on mobile data always on. The factory starts looking again. + // Turn on mobile data always on. This request will not match the wifi request, so + // it will be sent to the test factory whose filters allow to see it. setAlwaysOnNetworks(true); testFactory.expectRequestAdd(); - testFactory.assertRequestCountEquals(2); + testFactory.assertRequestCountEquals(1); assertTrue(testFactory.getMyStartRequested()); // Bring up cell data and check that the factory stops looking. assertLength(1, mCm.getAllNetworks()); mCellNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_CELLULAR); - mCellNetworkAgent.connect(true); - cellNetworkCallback.expectAvailableThenValidatedCallbacks(mCellNetworkAgent); - testFactory.expectRequestAdds(2); // Unvalidated and validated - testFactory.assertRequestCountEquals(2); - // The cell network outscores the factory filter, so start is not requested. + mCellNetworkAgent.connect(false); + cellNetworkCallback.expectAvailableCallbacks(mCellNetworkAgent, false, false, false, + TEST_CALLBACK_TIMEOUT_MS); + // When cell connects, it will satisfy the "mobile always on request" right away + // by virtue of being the only network that can satisfy the request. However, its + // score is low (50 - 40 = 10) so the test factory can still hope to beat it. + expectNoRequestChanged(testFactory); + + // Next, cell validates. This gives it a score of 50 and the test factory can't + // hope to beat that according to its filters. It will see the message that its + // offer is now unnecessary. + mCellNetworkAgent.setNetworkValid(true); + // Need a trigger point to let NetworkMonitor tell ConnectivityService that network is + // validated – see testPartialConnectivity. + mCm.reportNetworkConnectivity(mCellNetworkAgent.getNetwork(), true); + cellNetworkCallback.expectCapabilitiesWith(NET_CAPABILITY_VALIDATED, mCellNetworkAgent); + testFactory.expectRequestRemove(); + testFactory.assertRequestCountEquals(0); + // Accordingly, the factory shouldn't be started. assertFalse(testFactory.getMyStartRequested()); // Check that cell data stays up. @@ -4316,10 +4376,27 @@ public class ConnectivityServiceTest { verifyActiveNetwork(TRANSPORT_WIFI); assertLength(2, mCm.getAllNetworks()); - // Turn off mobile data always on and expect the request to disappear... - setAlwaysOnNetworks(false); - testFactory.expectRequestRemove(); + // Cell disconnects. There is still the "mobile data always on" request outstanding, + // and the test factory should see it now that it isn't hopelessly outscored. + mCellNetworkAgent.disconnect(); + cellNetworkCallback.expectCallback(CallbackEntry.LOST, mCellNetworkAgent); + assertLength(1, mCm.getAllNetworks()); + testFactory.expectRequestAdd(); + testFactory.assertRequestCountEquals(1); + // Reconnect cell validated, see the request disappear again. Then withdraw the + // mobile always on request. This will tear down cell, and there shouldn't be a + // blip where the test factory briefly sees the request or anything. + mCellNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_CELLULAR); + mCellNetworkAgent.connect(true); + cellNetworkCallback.expectAvailableThenValidatedCallbacks(mCellNetworkAgent); + assertLength(2, mCm.getAllNetworks()); + testFactory.expectRequestRemove(); + testFactory.assertRequestCountEquals(0); + setAlwaysOnNetworks(false); + expectNoRequestChanged(testFactory); + testFactory.assertRequestCountEquals(0); + assertFalse(testFactory.getMyStartRequested()); // ... and cell data to be torn down after nascent network timeout. cellNetworkCallback.expectCallback(CallbackEntry.LOST, mCellNetworkAgent, mService.mNascentDelayMs + TEST_CALLBACK_TIMEOUT_MS); @@ -4622,7 +4699,8 @@ public class ConnectivityServiceTest { handlerThread.start(); NetworkCapabilities filter = new NetworkCapabilities() .addTransportType(TRANSPORT_WIFI) - .addCapability(NET_CAPABILITY_INTERNET); + .addCapability(NET_CAPABILITY_INTERNET) + .addCapability(NET_CAPABILITY_NOT_VCN_MANAGED); final MockNetworkFactory testFactory = new MockNetworkFactory(handlerThread.getLooper(), mServiceContext, "testFactory", filter, mCsHandlerThread); testFactory.setScoreFilter(40); @@ -4631,32 +4709,43 @@ public class ConnectivityServiceTest { testFactory.register(); testFactory.expectRequestAdd(); - // Now file the test request and expect it. - mCm.requestNetwork(nr, networkCallback); - final NetworkRequest newRequest = testFactory.expectRequestAdd().request; + try { + // Now file the test request and expect it. + mCm.requestNetwork(nr, networkCallback); + final NetworkRequest newRequest = testFactory.expectRequestAdd().request; - if (preUnregister) { - mCm.unregisterNetworkCallback(networkCallback); + if (preUnregister) { + mCm.unregisterNetworkCallback(networkCallback); - // Simulate the factory releasing the request as unfulfillable: no-op since - // the callback has already been unregistered (but a test that no exceptions are - // thrown). - testFactory.triggerUnfulfillable(newRequest); - } else { - // Simulate the factory releasing the request as unfulfillable and expect onUnavailable! - testFactory.triggerUnfulfillable(newRequest); + // The request has been released : the factory should see it removed + // immediately. + testFactory.expectRequestRemove(); - networkCallback.expectCallback(CallbackEntry.UNAVAILABLE, (Network) null); + // Simulate the factory releasing the request as unfulfillable: no-op since + // the callback has already been unregistered (but a test that no exceptions are + // thrown). + testFactory.triggerUnfulfillable(newRequest); + } else { + // Simulate the factory releasing the request as unfulfillable and expect + // onUnavailable! + testFactory.triggerUnfulfillable(newRequest); - // unregister network callback - a no-op (since already freed by the - // on-unavailable), but should not fail or throw exceptions. - mCm.unregisterNetworkCallback(networkCallback); - } + networkCallback.expectCallback(CallbackEntry.UNAVAILABLE, (Network) null); - testFactory.expectRequestRemove(); + // Declaring a request unfulfillable releases it automatically. + testFactory.expectRequestRemove(); - testFactory.terminate(); - handlerThread.quit(); + // unregister network callback - a no-op (since already freed by the + // on-unavailable), but should not fail or throw exceptions. + mCm.unregisterNetworkCallback(networkCallback); + + // The factory should not see any further removal, as this request has + // already been removed. + } + } finally { + testFactory.terminate(); + handlerThread.quit(); + } } private static class TestKeepaliveCallback extends PacketKeepaliveCallback { @@ -7278,6 +7367,20 @@ public class ConnectivityServiceTest { mMockVpn.disconnect(); } + private class DetailedBlockedStatusCallback extends TestNetworkCallback { + public void expectAvailableThenValidatedCallbacks(HasNetwork n, int blockedStatus) { + super.expectAvailableThenValidatedCallbacks(n.getNetwork(), blockedStatus, TIMEOUT_MS); + } + public void expectBlockedStatusCallback(HasNetwork n, int blockedStatus) { + // This doesn't work: + // super.expectBlockedStatusCallback(blockedStatus, n.getNetwork()); + super.expectBlockedStatusCallback(blockedStatus, n.getNetwork(), TIMEOUT_MS); + } + public void onBlockedStatusChanged(Network network, int blockedReasons) { + getHistory().add(new CallbackEntry.BlockedStatusInt(network, blockedReasons)); + } + } + @Test public void testNetworkBlockedStatus() throws Exception { final TestNetworkCallback cellNetworkCallback = new TestNetworkCallback(); @@ -7285,11 +7388,16 @@ public class ConnectivityServiceTest { .addTransportType(TRANSPORT_CELLULAR) .build(); mCm.registerNetworkCallback(cellRequest, cellNetworkCallback); + final DetailedBlockedStatusCallback detailedCallback = new DetailedBlockedStatusCallback(); + mCm.registerNetworkCallback(cellRequest, detailedCallback); + mockUidNetworkingBlocked(); mCellNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_CELLULAR); mCellNetworkAgent.connect(true); cellNetworkCallback.expectAvailableThenValidatedCallbacks(mCellNetworkAgent); + detailedCallback.expectAvailableThenValidatedCallbacks(mCellNetworkAgent, + BLOCKED_REASON_NONE); assertEquals(mCellNetworkAgent.getNetwork(), mCm.getActiveNetwork()); assertActiveNetworkInfo(TYPE_MOBILE, DetailedState.CONNECTED); assertNetworkInfo(TYPE_MOBILE, DetailedState.CONNECTED); @@ -7297,17 +7405,23 @@ public class ConnectivityServiceTest { setBlockedReasonChanged(BLOCKED_REASON_BATTERY_SAVER); cellNetworkCallback.expectBlockedStatusCallback(true, mCellNetworkAgent); + detailedCallback.expectBlockedStatusCallback(mCellNetworkAgent, + BLOCKED_REASON_BATTERY_SAVER); assertNull(mCm.getActiveNetwork()); assertActiveNetworkInfo(TYPE_MOBILE, DetailedState.BLOCKED); assertNetworkInfo(TYPE_MOBILE, DetailedState.BLOCKED); assertExtraInfoFromCmBlocked(mCellNetworkAgent); - // ConnectivityService should cache it not to invoke the callback again. + // If blocked state does not change but blocked reason does, the boolean callback is called. + // TODO: investigate de-duplicating. setBlockedReasonChanged(BLOCKED_METERED_REASON_USER_RESTRICTED); - cellNetworkCallback.assertNoCallback(); + cellNetworkCallback.expectBlockedStatusCallback(true, mCellNetworkAgent); + detailedCallback.expectBlockedStatusCallback(mCellNetworkAgent, + BLOCKED_METERED_REASON_USER_RESTRICTED); setBlockedReasonChanged(BLOCKED_REASON_NONE); cellNetworkCallback.expectBlockedStatusCallback(false, mCellNetworkAgent); + detailedCallback.expectBlockedStatusCallback(mCellNetworkAgent, BLOCKED_REASON_NONE); assertEquals(mCellNetworkAgent.getNetwork(), mCm.getActiveNetwork()); assertActiveNetworkInfo(TYPE_MOBILE, DetailedState.CONNECTED); assertNetworkInfo(TYPE_MOBILE, DetailedState.CONNECTED); @@ -7315,6 +7429,8 @@ public class ConnectivityServiceTest { setBlockedReasonChanged(BLOCKED_METERED_REASON_DATA_SAVER); cellNetworkCallback.expectBlockedStatusCallback(true, mCellNetworkAgent); + detailedCallback.expectBlockedStatusCallback(mCellNetworkAgent, + BLOCKED_METERED_REASON_DATA_SAVER); assertNull(mCm.getActiveNetwork()); assertActiveNetworkInfo(TYPE_MOBILE, DetailedState.BLOCKED); assertNetworkInfo(TYPE_MOBILE, DetailedState.BLOCKED); @@ -7324,6 +7440,8 @@ public class ConnectivityServiceTest { mCellNetworkAgent.addCapability(NET_CAPABILITY_NOT_METERED); cellNetworkCallback.expectCapabilitiesWith(NET_CAPABILITY_NOT_METERED, mCellNetworkAgent); cellNetworkCallback.expectBlockedStatusCallback(false, mCellNetworkAgent); + detailedCallback.expectCapabilitiesWith(NET_CAPABILITY_NOT_METERED, mCellNetworkAgent); + detailedCallback.expectBlockedStatusCallback(mCellNetworkAgent, BLOCKED_REASON_NONE); assertEquals(mCellNetworkAgent.getNetwork(), mCm.getActiveNetwork()); assertActiveNetworkInfo(TYPE_MOBILE, DetailedState.CONNECTED); assertNetworkInfo(TYPE_MOBILE, DetailedState.CONNECTED); @@ -7333,6 +7451,10 @@ public class ConnectivityServiceTest { cellNetworkCallback.expectCapabilitiesWithout(NET_CAPABILITY_NOT_METERED, mCellNetworkAgent); cellNetworkCallback.expectBlockedStatusCallback(true, mCellNetworkAgent); + detailedCallback.expectCapabilitiesWithout(NET_CAPABILITY_NOT_METERED, + mCellNetworkAgent); + detailedCallback.expectBlockedStatusCallback(mCellNetworkAgent, + BLOCKED_METERED_REASON_DATA_SAVER); assertNull(mCm.getActiveNetwork()); assertActiveNetworkInfo(TYPE_MOBILE, DetailedState.BLOCKED); assertNetworkInfo(TYPE_MOBILE, DetailedState.BLOCKED); @@ -7340,6 +7462,7 @@ public class ConnectivityServiceTest { setBlockedReasonChanged(BLOCKED_REASON_NONE); cellNetworkCallback.expectBlockedStatusCallback(false, mCellNetworkAgent); + detailedCallback.expectBlockedStatusCallback(mCellNetworkAgent, BLOCKED_REASON_NONE); assertEquals(mCellNetworkAgent.getNetwork(), mCm.getActiveNetwork()); assertActiveNetworkInfo(TYPE_MOBILE, DetailedState.CONNECTED); assertNetworkInfo(TYPE_MOBILE, DetailedState.CONNECTED); @@ -7347,10 +7470,13 @@ public class ConnectivityServiceTest { setBlockedReasonChanged(BLOCKED_REASON_NONE); cellNetworkCallback.assertNoCallback(); + detailedCallback.assertNoCallback(); // Restrict background data. Networking is not blocked because the network is unmetered. setBlockedReasonChanged(BLOCKED_METERED_REASON_DATA_SAVER); cellNetworkCallback.expectBlockedStatusCallback(true, mCellNetworkAgent); + detailedCallback.expectBlockedStatusCallback(mCellNetworkAgent, + BLOCKED_METERED_REASON_DATA_SAVER); assertNull(mCm.getActiveNetwork()); assertActiveNetworkInfo(TYPE_MOBILE, DetailedState.BLOCKED); assertNetworkInfo(TYPE_MOBILE, DetailedState.BLOCKED); @@ -7360,12 +7486,14 @@ public class ConnectivityServiceTest { setBlockedReasonChanged(BLOCKED_REASON_NONE); cellNetworkCallback.expectBlockedStatusCallback(false, mCellNetworkAgent); + detailedCallback.expectBlockedStatusCallback(mCellNetworkAgent, BLOCKED_REASON_NONE); assertActiveNetworkInfo(TYPE_MOBILE, DetailedState.CONNECTED); assertNetworkInfo(TYPE_MOBILE, DetailedState.CONNECTED); assertExtraInfoFromCmPresent(mCellNetworkAgent); setBlockedReasonChanged(BLOCKED_REASON_NONE); cellNetworkCallback.assertNoCallback(); + detailedCallback.assertNoCallback(); assertEquals(mCellNetworkAgent.getNetwork(), mCm.getActiveNetwork()); assertActiveNetworkInfo(TYPE_MOBILE, DetailedState.CONNECTED); assertNetworkInfo(TYPE_MOBILE, DetailedState.CONNECTED); @@ -9851,6 +9979,83 @@ public class ConnectivityServiceTest { } } + @Test + public void testKeepConnected() throws Exception { + setAlwaysOnNetworks(false); + registerDefaultNetworkCallbacks(); + final TestNetworkCallback allNetworksCb = new TestNetworkCallback(); + final NetworkRequest allNetworksRequest = new NetworkRequest.Builder().clearCapabilities() + .build(); + mCm.registerNetworkCallback(allNetworksRequest, allNetworksCb); + + mCellNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_CELLULAR); + mCellNetworkAgent.connect(true /* validated */); + + mDefaultNetworkCallback.expectAvailableThenValidatedCallbacks(mCellNetworkAgent); + allNetworksCb.expectAvailableThenValidatedCallbacks(mCellNetworkAgent); + + mWiFiNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_WIFI); + mWiFiNetworkAgent.connect(true /* validated */); + + mDefaultNetworkCallback.expectAvailableDoubleValidatedCallbacks(mWiFiNetworkAgent); + // While the default callback doesn't see the network before it's validated, the listen + // sees the network come up and validate later + allNetworksCb.expectAvailableCallbacksUnvalidated(mWiFiNetworkAgent); + allNetworksCb.expectCallback(CallbackEntry.LOSING, mCellNetworkAgent); + allNetworksCb.expectCapabilitiesWith(NET_CAPABILITY_VALIDATED, mWiFiNetworkAgent); + allNetworksCb.expectCallback(CallbackEntry.LOST, mCellNetworkAgent, + TEST_LINGER_DELAY_MS * 2); + + // The cell network has disconnected (see LOST above) because it was outscored and + // had no requests (see setAlwaysOnNetworks(false) above) + mCellNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_CELLULAR); + final NetworkScore score = new NetworkScore.Builder().setLegacyInt(30).build(); + mCellNetworkAgent.setScore(score); + mCellNetworkAgent.connect(false /* validated */); + + // The cell network gets torn down right away. + allNetworksCb.expectAvailableCallbacksUnvalidated(mCellNetworkAgent); + allNetworksCb.expectCallback(CallbackEntry.LOST, mCellNetworkAgent, + TEST_NASCENT_DELAY_MS * 2); + allNetworksCb.assertNoCallback(); + + // Now create a cell network with KEEP_CONNECTED_FOR_HANDOVER and make sure it's + // not disconnected immediately when outscored. + mCellNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_CELLULAR); + final NetworkScore scoreKeepup = new NetworkScore.Builder().setLegacyInt(30) + .setKeepConnectedReason(KEEP_CONNECTED_FOR_HANDOVER).build(); + mCellNetworkAgent.setScore(scoreKeepup); + mCellNetworkAgent.connect(true /* validated */); + + allNetworksCb.expectAvailableThenValidatedCallbacks(mCellNetworkAgent); + mDefaultNetworkCallback.assertNoCallback(); + + mWiFiNetworkAgent.disconnect(); + + allNetworksCb.expectCallback(CallbackEntry.LOST, mWiFiNetworkAgent); + mDefaultNetworkCallback.expectCallback(CallbackEntry.LOST, mWiFiNetworkAgent); + mDefaultNetworkCallback.expectAvailableCallbacksValidated(mCellNetworkAgent); + + // Reconnect a WiFi network and make sure the cell network is still not torn down. + mWiFiNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_WIFI); + mWiFiNetworkAgent.connect(true /* validated */); + + allNetworksCb.expectAvailableThenValidatedCallbacks(mWiFiNetworkAgent); + mDefaultNetworkCallback.expectAvailableDoubleValidatedCallbacks(mWiFiNetworkAgent); + + // Now remove the reason to keep connected and make sure the network lingers and is + // torn down. + mCellNetworkAgent.setScore(new NetworkScore.Builder().setLegacyInt(30).build()); + allNetworksCb.expectCallback(CallbackEntry.LOSING, mCellNetworkAgent, + TEST_NASCENT_DELAY_MS * 2); + allNetworksCb.expectCallback(CallbackEntry.LOST, mCellNetworkAgent, + TEST_LINGER_DELAY_MS * 2); + mDefaultNetworkCallback.assertNoCallback(); + + mCm.unregisterNetworkCallback(allNetworksCb); + // mDefaultNetworkCallback will be unregistered by tearDown() + } + private class QosCallbackMockHelper { @NonNull public final QosFilter mFilter; @NonNull public final IQosCallback mCallback; @@ -11210,6 +11415,115 @@ public class ConnectivityServiceTest { // default callbacks will be unregistered in tearDown } + @Test + public void testNetworkFactoryRequestsWithMultilayerRequest() + throws Exception { + // First use OEM_PAID preference to create a multi-layer request : 1. listen for + // unmetered, 2. request network with cap OEM_PAID, 3, request the default network for + // fallback. + @OemNetworkPreferences.OemNetworkPreference final int networkPref = + OemNetworkPreferences.OEM_NETWORK_PREFERENCE_OEM_PAID; + setupMultipleDefaultNetworksForOemNetworkPreferenceCurrentUidTest(networkPref); + + final HandlerThread handlerThread = new HandlerThread("MockFactory"); + handlerThread.start(); + NetworkCapabilities internetFilter = new NetworkCapabilities() + .addCapability(NET_CAPABILITY_INTERNET) + .addCapability(NET_CAPABILITY_NOT_VCN_MANAGED); + final MockNetworkFactory internetFactory = new MockNetworkFactory(handlerThread.getLooper(), + mServiceContext, "internetFactory", internetFilter, mCsHandlerThread); + internetFactory.setScoreFilter(40); + internetFactory.register(); + // Default internet request & 3rd (fallback) request in OEM_PAID NRI. The unmetered request + // is never sent to factories (it's a LISTEN, not requestable) and the OEM_PAID request + // doesn't match the internetFactory filter. + internetFactory.expectRequestAdds(2); + + NetworkCapabilities oemPaidFilter = new NetworkCapabilities() + .addCapability(NET_CAPABILITY_INTERNET) + .addCapability(NET_CAPABILITY_OEM_PAID) + .addCapability(NET_CAPABILITY_NOT_VCN_MANAGED) + .removeCapability(NET_CAPABILITY_NOT_RESTRICTED); + final MockNetworkFactory oemPaidFactory = new MockNetworkFactory(handlerThread.getLooper(), + mServiceContext, "oemPaidFactory", oemPaidFilter, mCsHandlerThread); + oemPaidFactory.setScoreFilter(40); + oemPaidFactory.register(); + oemPaidFactory.expectRequestAdd(); // Because nobody satisfies the request + + mCellNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_CELLULAR); + mCellNetworkAgent.connect(true); + + // A network connected that satisfies the default internet request. For the OEM_PAID + // preference, this is not as good as an OEM_PAID network, so even if the score of + // the network is better than the factory announced, it still should try to bring up + // the network. + expectNoRequestChanged(oemPaidFactory); + oemPaidFactory.assertRequestCountEquals(1); + // The internet factory however is outscored, and should lose its requests. + internetFactory.expectRequestRemoves(2); + internetFactory.assertRequestCountEquals(0); + + final NetworkCapabilities oemPaidNc = new NetworkCapabilities(); + oemPaidNc.addCapability(NET_CAPABILITY_OEM_PAID); + oemPaidNc.removeCapability(NET_CAPABILITY_NOT_RESTRICTED); + final TestNetworkAgentWrapper oemPaidAgent = new TestNetworkAgentWrapper(TRANSPORT_CELLULAR, + new LinkProperties(), oemPaidNc); + oemPaidAgent.connect(true); + + // The oemPaidAgent has score 50 (default for cell) so it beats what the oemPaidFactory can + // provide, therefore it loses the request. + oemPaidFactory.expectRequestRemove(); + oemPaidFactory.assertRequestCountEquals(0); + expectNoRequestChanged(internetFactory); + internetFactory.assertRequestCountEquals(0); + + oemPaidAgent.adjustScore(-30); + // Now the that the agent is weak, the oemPaidFactory can beat the existing network for the + // OEM_PAID request. The internet factory however can't beat a network that has OEM_PAID + // for the preference request, so it doesn't see the request. + oemPaidFactory.expectRequestAdd(); + oemPaidFactory.assertRequestCountEquals(1); + expectNoRequestChanged(internetFactory); + internetFactory.assertRequestCountEquals(0); + + mCellNetworkAgent.disconnect(); + // The network satisfying the default internet request has disconnected, so the + // internetFactory sees the default request again. However there is a network with OEM_PAID + // connected, so the 2nd OEM_PAID req is already satisfied, so the oemPaidFactory doesn't + // care about networks that don't have OEM_PAID. + expectNoRequestChanged(oemPaidFactory); + oemPaidFactory.assertRequestCountEquals(1); + internetFactory.expectRequestAdd(); + internetFactory.assertRequestCountEquals(1); + + // Cell connects again, still with score 50. Back to the previous state. + mCellNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_CELLULAR); + mCellNetworkAgent.connect(true); + expectNoRequestChanged(oemPaidFactory); + oemPaidFactory.assertRequestCountEquals(1); + internetFactory.expectRequestRemove(); + internetFactory.assertRequestCountEquals(0); + + // Now WiFi connects and it's unmetered, but it's weaker than cell. + mWiFiNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_WIFI); + mWiFiNetworkAgent.addCapability(NET_CAPABILITY_NOT_METERED); + mWiFiNetworkAgent.adjustScore(-30); // Not the best Internet network, but unmetered + mWiFiNetworkAgent.connect(true); + + // The OEM_PAID preference prefers an unmetered network to an OEM_PAID network, so + // the oemPaidFactory can't beat this no matter how high its score. + oemPaidFactory.expectRequestRemove(); + expectNoRequestChanged(internetFactory); + + mCellNetworkAgent.disconnect(); + // Now that the best internet network (cell, with its 50 score compared to 30 for WiFi + // at this point), the default internet request is satisfied by a network worse than + // the internetFactory announced, so it gets the request. However, there is still an + // unmetered network, so the oemPaidNetworkFactory still can't beat this. + expectNoRequestChanged(oemPaidFactory); + internetFactory.expectRequestAdd(); + } + /** * Test network priority for OEM_NETWORK_PREFERENCE_OEM_PAID_NO_FALLBACK in the following order: * NET_CAPABILITY_NOT_METERED -> NET_CAPABILITY_OEM_PAID @@ -11504,11 +11818,11 @@ public class ConnectivityServiceTest { testFactory.setScoreFilter(40); try { - // Register the factory and expect it will see default request, because all requests - // are sent to all factories. + // Register the factory. It doesn't see the default request because its filter does + // not include INTERNET. testFactory.register(); - testFactory.expectRequestAdd(); - testFactory.assertRequestCountEquals(1); + expectNoRequestChanged(testFactory); + testFactory.assertRequestCountEquals(0); // The factory won't try to start the network since the default request doesn't // match the filter (no INTERNET capability). assertFalse(testFactory.getMyStartRequested()); @@ -11521,7 +11835,7 @@ public class ConnectivityServiceTest { bestMatchingCb, mCsHandlerThread.getThreadHandler()); bestMatchingCb.assertNoCallback(); expectNoRequestChanged(testFactory); - testFactory.assertRequestCountEquals(1); + testFactory.assertRequestCountEquals(0); assertFalse(testFactory.getMyStartRequested()); // Fire a normal mms request, verify the factory will only see the request. @@ -11530,13 +11844,13 @@ public class ConnectivityServiceTest { .addCapability(NET_CAPABILITY_MMS).build(); mCm.requestNetwork(mmsRequest, mmsNetworkCallback); testFactory.expectRequestAdd(); - testFactory.assertRequestCountEquals(2); + testFactory.assertRequestCountEquals(1); assertTrue(testFactory.getMyStartRequested()); // Unregister best matching callback, verify factory see no change. mCm.unregisterNetworkCallback(bestMatchingCb); expectNoRequestChanged(testFactory); - testFactory.assertRequestCountEquals(2); + testFactory.assertRequestCountEquals(1); assertTrue(testFactory.getMyStartRequested()); } finally { testFactory.terminate(); diff --git a/tests/net/java/com/android/server/connectivity/FullScoreTest.kt b/tests/net/java/com/android/server/connectivity/FullScoreTest.kt index eb3b4df1a282..2864bc7e794a 100644 --- a/tests/net/java/com/android/server/connectivity/FullScoreTest.kt +++ b/tests/net/java/com/android/server/connectivity/FullScoreTest.kt @@ -18,6 +18,7 @@ package com.android.server.connectivity import android.net.NetworkAgentConfig import android.net.NetworkCapabilities +import android.net.NetworkScore.KEEP_CONNECTED_NONE import android.text.TextUtils import android.util.ArraySet import androidx.test.filters.SmallTest @@ -60,11 +61,11 @@ class FullScoreTest { @Test fun testGetLegacyInt() { - val ns = FullScore(50, 0L /* policy */) + val ns = FullScore(50, 0L /* policy */, KEEP_CONNECTED_NONE) assertEquals(10, ns.legacyInt) // -40 penalty for not being validated assertEquals(50, ns.legacyIntAsValidated) - val vpnNs = FullScore(101, 0L /* policy */).withPolicies(vpn = true) + val vpnNs = FullScore(101, 0L /* policy */, KEEP_CONNECTED_NONE).withPolicies(vpn = true) assertEquals(101, vpnNs.legacyInt) // VPNs are not subject to unvalidation penalty assertEquals(101, vpnNs.legacyIntAsValidated) assertEquals(101, vpnNs.withPolicies(validated = true).legacyInt) @@ -83,7 +84,7 @@ class FullScoreTest { @Test fun testToString() { - val string = FullScore(10, 0L /* policy */) + val string = FullScore(10, 0L /* policy */, KEEP_CONNECTED_NONE) .withPolicies(vpn = true, acceptUnvalidated = true).toString() assertTrue(string.contains("Score(10"), string) assertTrue(string.contains("ACCEPT_UNVALIDATED"), string) @@ -107,7 +108,7 @@ class FullScoreTest { @Test fun testHasPolicy() { - val ns = FullScore(50, 0L /* policy */) + val ns = FullScore(50, 0L /* policy */, KEEP_CONNECTED_NONE) assertFalse(ns.hasPolicy(POLICY_IS_VALIDATED)) assertFalse(ns.hasPolicy(POLICY_IS_VPN)) assertFalse(ns.hasPolicy(POLICY_EVER_USER_SELECTED)) diff --git a/tests/net/java/com/android/server/connectivity/NetworkOfferTest.kt b/tests/net/java/com/android/server/connectivity/NetworkOfferTest.kt new file mode 100644 index 000000000000..409f8c309935 --- /dev/null +++ b/tests/net/java/com/android/server/connectivity/NetworkOfferTest.kt @@ -0,0 +1,71 @@ +/* + * Copyright (C) 2021 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.connectivity + +import android.net.INetworkOfferCallback +import android.net.NetworkCapabilities +import android.net.NetworkRequest +import android.net.NetworkScore.KEEP_CONNECTED_NONE +import androidx.test.filters.SmallTest +import androidx.test.runner.AndroidJUnit4 +import org.junit.Test +import org.junit.runner.RunWith +import org.mockito.ArgumentMatchers.eq +import org.mockito.Mockito.mock +import org.mockito.Mockito.verify +import kotlin.test.assertFalse +import kotlin.test.assertTrue + +const val POLICY_NONE = 0L + +@RunWith(AndroidJUnit4::class) +@SmallTest +class NetworkOfferTest { + val mockCallback = mock(INetworkOfferCallback::class.java) + + @Test + fun testOfferNeededUnneeded() { + val score = FullScore(50, POLICY_NONE, KEEP_CONNECTED_NONE) + val offer = NetworkOffer(score, NetworkCapabilities.Builder().build(), mockCallback, + 1 /* providerId */) + val request1 = mock(NetworkRequest::class.java) + val request2 = mock(NetworkRequest::class.java) + offer.onNetworkNeeded(request1) + verify(mockCallback).onNetworkNeeded(eq(request1)) + assertTrue(offer.neededFor(request1)) + assertFalse(offer.neededFor(request2)) + + offer.onNetworkNeeded(request2) + verify(mockCallback).onNetworkNeeded(eq(request2)) + assertTrue(offer.neededFor(request1)) + assertTrue(offer.neededFor(request2)) + + // Note that the framework never calls onNetworkNeeded multiple times with the same + // request without calling onNetworkUnneeded first. It would be incorrect usage and the + // behavior would be undefined, so there is nothing to test. + + offer.onNetworkUnneeded(request1) + verify(mockCallback).onNetworkUnneeded(eq(request1)) + assertFalse(offer.neededFor(request1)) + assertTrue(offer.neededFor(request2)) + + offer.onNetworkUnneeded(request2) + verify(mockCallback).onNetworkUnneeded(eq(request2)) + assertFalse(offer.neededFor(request1)) + assertFalse(offer.neededFor(request2)) + } +} diff --git a/tests/net/java/com/android/server/net/NetworkStatsServiceTest.java b/tests/net/java/com/android/server/net/NetworkStatsServiceTest.java index 9334e2c4ad77..eeeb4fb1d929 100644 --- a/tests/net/java/com/android/server/net/NetworkStatsServiceTest.java +++ b/tests/net/java/com/android/server/net/NetworkStatsServiceTest.java @@ -89,6 +89,7 @@ import android.net.NetworkStats; import android.net.NetworkStatsHistory; import android.net.NetworkTemplate; import android.net.UnderlyingNetworkInfo; +import android.net.TelephonyNetworkSpecifier; import android.net.netstats.provider.INetworkStatsProviderCallback; import android.os.ConditionVariable; import android.os.Handler; @@ -1280,6 +1281,77 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest { } @Test + public void testDualVilteProviderStats() throws Exception { + // Pretend that network comes online. + expectDefaultSettings(); + final int subId1 = 1; + final int subId2 = 2; + final NetworkStateSnapshot[] states = new NetworkStateSnapshot[]{ + buildImsState(IMSI_1, subId1, TEST_IFACE), + buildImsState(IMSI_2, subId2, TEST_IFACE2)}; + expectNetworkStatsSummary(buildEmptyStats()); + expectNetworkStatsUidDetail(buildEmptyStats()); + + // Register custom provider and retrieve callback. + final TestableNetworkStatsProviderBinder provider = + new TestableNetworkStatsProviderBinder(); + final INetworkStatsProviderCallback cb = + mService.registerNetworkStatsProvider("TEST", provider); + assertNotNull(cb); + + mService.forceUpdateIfaces(NETWORKS_MOBILE, states, getActiveIface(states), + new UnderlyingNetworkInfo[0]); + + // Verifies that one requestStatsUpdate will be called during iface update. + provider.expectOnRequestStatsUpdate(0 /* unused */); + + // Create some initial traffic and report to the service. + incrementCurrentTime(HOUR_IN_MILLIS); + final String vtIface1 = NetworkStats.IFACE_VT + subId1; + final String vtIface2 = NetworkStats.IFACE_VT + subId2; + final NetworkStats expectedStats = new NetworkStats(0L, 1) + .addEntry(new NetworkStats.Entry(vtIface1, UID_RED, SET_DEFAULT, + TAG_NONE, METERED_YES, ROAMING_NO, DEFAULT_NETWORK_YES, + 128L, 2L, 128L, 2L, 1L)) + .addEntry(new NetworkStats.Entry(vtIface2, UID_RED, SET_DEFAULT, + TAG_NONE, METERED_YES, ROAMING_NO, DEFAULT_NETWORK_YES, + 64L, 1L, 64L, 1L, 1L)); + cb.notifyStatsUpdated(0 /* unused */, expectedStats, expectedStats); + + // Make another empty mutable stats object. This is necessary since the new NetworkStats + // object will be used to compare with the old one in NetworkStatsRecoder, two of them + // cannot be the same object. + expectNetworkStatsUidDetail(buildEmptyStats()); + + forcePollAndWaitForIdle(); + + // Verifies that one requestStatsUpdate and setAlert will be called during polling. + provider.expectOnRequestStatsUpdate(0 /* unused */); + provider.expectOnSetAlert(MB_IN_BYTES); + + // Verifies that service recorded history, does not verify uid tag part. + assertUidTotal(sTemplateImsi1, UID_RED, 128L, 2L, 128L, 2L, 1); + + // Verifies that onStatsUpdated updates the stats accordingly. + NetworkStats stats = mSession.getSummaryForAllUid( + sTemplateImsi1, Long.MIN_VALUE, Long.MAX_VALUE, true); + assertEquals(1, stats.size()); + assertValues(stats, IFACE_ALL, UID_RED, SET_DEFAULT, TAG_NONE, METERED_YES, ROAMING_NO, + DEFAULT_NETWORK_YES, 128L, 2L, 128L, 2L, 1L); + + stats = mSession.getSummaryForAllUid( + sTemplateImsi2, Long.MIN_VALUE, Long.MAX_VALUE, true); + assertEquals(1, stats.size()); + assertValues(stats, IFACE_ALL, UID_RED, SET_DEFAULT, TAG_NONE, METERED_YES, ROAMING_NO, + DEFAULT_NETWORK_YES, 64L, 1L, 64L, 1L, 1L); + + // Verifies that unregister the callback will remove the provider from service. + cb.unregister(); + forcePollAndWaitForIdle(); + provider.assertNoCallback(); + } + + @Test public void testStatsProviderSetAlert() throws Exception { // Pretend that network comes online. expectDefaultSettings(); @@ -1616,6 +1688,20 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest { TYPE_MOBILE); } + private static NetworkStateSnapshot buildImsState( + String subscriberId, int subId, String ifaceName) { + final LinkProperties prop = new LinkProperties(); + prop.setInterfaceName(ifaceName); + final NetworkCapabilities capabilities = new NetworkCapabilities(); + capabilities.setCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED, true); + capabilities.setCapability(NetworkCapabilities.NET_CAPABILITY_NOT_ROAMING, true); + capabilities.setCapability(NetworkCapabilities.NET_CAPABILITY_IMS, true); + capabilities.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR); + capabilities.setNetworkSpecifier(new TelephonyNetworkSpecifier(subId)); + return new NetworkStateSnapshot( + MOBILE_NETWORK, capabilities, prop, subscriberId, TYPE_MOBILE); + } + private long getElapsedRealtime() { return mElapsedRealtime; } |